diff --git a/.gitignore b/.gitignore index 420a673ed..bae09dc2d 100644 --- a/.gitignore +++ b/.gitignore @@ -85,7 +85,7 @@ celerybeat-schedule *.sage.py # virtualenv -.venv +.venv* venv/ ENV/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0121d12c..81f554598 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -93,6 +93,33 @@ The tests are run concurrently, and the default number of workers is 8. You can While tox is the recommended way to run the test suite, pytest can also be invoked directly from the root of the repository. This requires packages in tests/requirements.txt to be installed first. +#### Keeping logs on test success + +There's an internal setting `debugpy_log_passed` that if set to true will not erase the logs after a successful test run. Just search for this in the code and remove the code that deletes the logs on success. + +#### Adding logging + +Using `pydevd_log.debug` you can add logging just about anywhere in the pydevd code. However this code won't be called if CYTHON support is enabled without recreating the Cython output. To temporarily disable CYTHON support, look for `CYTHON_SUPPORTED` and make sure it's set to False + +## Updating pydevd + +Pydevd (at src/debugpy/_vendored/pydevd) is a copy of https://github.com/fabioz/PyDev.Debugger. We do not use a git submodule but instead just copy the source. + +In order to update the source, you would: +- Sync to the appropriate commit in a pydevd repo +- Diff this against the src/debugpy/_vendored/pydevd folder, being careful to not remove the edits made in the debugpy version +- Run our tests +- Make any fixes to get the tests to pass (see logging on how to debug) + +You might need to regenerate the Cython modules after any changes. This can be done by: + +- Install Python latest (3.12 as of this writing) +- pip install cython, django>=1.9, setuptools>=0.9, wheel>0.21, twine +- On a windows machine: + - set FORCE_PYDEVD_VC_VARS=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat + - set PYDEVD_FORCE_BUILD_ALL=True + - in the pydevd folder: python .\build_tools\build.py + ## Using modified debugpy in Visual Studio Code To test integration between debugpy and Visual Studio Code, the latter can be directed to use a custom version of debugpy in lieu of the one bundled with the Python extension. This is done by specifying `"debugAdapterPath"` in `launch.json` - it must point at the root directory of the *package*, which is `src/debugpy` inside the repository: diff --git a/src/debugpy/_vendored/pydevd/.gitignore b/src/debugpy/_vendored/pydevd/.gitignore index b03eddaa3..e0fb37cf5 100644 --- a/src/debugpy/_vendored/pydevd/.gitignore +++ b/src/debugpy/_vendored/pydevd/.gitignore @@ -37,3 +37,4 @@ snippet.py build/* .pytest_cache /.mypy_cache/ +.DS_Store diff --git a/src/debugpy/_vendored/pydevd/LICENSE-APACHE b/src/debugpy/_vendored/pydevd/LICENSE-APACHE deleted file mode 100644 index 2bb9ad240..000000000 --- a/src/debugpy/_vendored/pydevd/LICENSE-APACHE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/src/debugpy/_vendored/pydevd/README.md b/src/debugpy/_vendored/pydevd/README.md index e0ae29341..a23156cf4 100644 --- a/src/debugpy/_vendored/pydevd/README.md +++ b/src/debugpy/_vendored/pydevd/README.md @@ -1,24 +1,72 @@ -PyDev.Debugger -============== +# PyDev.Debugger + + +## New + +Latest `3.x` version: the PyDev debugger now supports `sys.monitoring` which enables +really fast tracing on `Python 3.12` (so, if speed is an issue, make sure you upgrade). + +## Important + +https://github.com/fabioz/PyDev.Debugger is the main repository +for `pydevd` and the latest versions can always be used directly in: + +- [PyDev for Eclipse](http://pydev.org): Enables the usage of `pydevd` in Eclipse (Open Source). + +- [Python Debugger (PyDev) for VSCode](https://marketplace.visualstudio.com/items?itemName=fabioz.vscode-pydev-python-debugger): Enables + the usage of `pydevd` in VSCode (note that while `pydevd` itself is open source, this extension is commercial + and helps in the development of the Open Source version. It has a free trial and can be used by acquiring a license for + `PyDev for VSCode` at: https://www.pydev.org/vscode/index.html). + + Note that the `Python Debugger (PyDev) for VSCode` may be used as a standalane extension for debugging `Python` by + creating the proper configuration in a `launch.json` and launching it. + + Alternatively, [PyDev for VSCode](https://marketplace.visualstudio.com/items?itemName=fabioz.vscode-pydev) + leverages it to offer additional features such as debugging of test cases. + +## History / Support + +The `PyDev Debugger` (`pydevd` for short) is a **Python debugger** which historically was created to +work with `PyDev` (in Eclipse). + +Over the years (as it's open source -- EPL) it was adopted by other IDEs/companies +(so, it was integrated into PyCharm and VSCode Python through `debugpy`, which also bundles `pydevd`). + +Note that although it was adopted by other IDEs (and over the years companies of other +commercial IDEs did provide backing), by far most of the work was done without any +external backing and the ongoing work on the project relies on community support. + +So, if you like using it, please consider becoming a backer of the project (this is +done through the `PyDev` umbrella, so please see https://www.pydev.org/about.html +for how to contribute to the project). + + +## Source code / using The sources for the PyDev.Debugger may be seen at: https://github.com/fabioz/PyDev.Debugger In general, the debugger backend should **NOT** be installed separately if you're using an IDE which already -bundles it (such as PyDev, PyCharm or bundled through debugpy, which is the debug adapter used in -VSCode Python and Visual Studio Python). +bundles it (such as [PyDev for Eclipse](http://pydev.org), [Python Debugger (PyDev) for VSCode](https://marketplace.visualstudio.com/items?itemName=fabioz.vscode-pydev-python-debugger), +PyCharm or the Microsoft Python VSCode Extension, which uses `debugpy`, which is another debug adapter bundling `pydevd` to be used in the Microsoft +VSCode Python Extension and Visual Studio Python). It is however available in PyPi so that it can be installed for doing remote debugging with `pip` -- so, when debugging a process which runs in another machine, it's possible to `pip install pydevd` and in the code use -`pydevd.settrace(host='10.1.1.1')` to connect the debugger backend to the debugger UI running in the IDE +`pydevd.settrace(host="10.1.1.1")` (in PyDev) or `pydevd.settrace(host="10.1.1.1", protocol="dap")` (in PyDev for VSCode) +to connect the debugger backend to the debugger UI running in the IDE (whereas previously the sources had to be manually copied from the IDE installation). -`pydevd` is compatible with Python 3.6 onwards. +For instructions on how to `Remote Debug` with `PyDev`, see: https://www.pydev.org/manual_adv_remote_debugger.html -For `Python 2` please keep using `pydevd 2.8.0`. +For instructions on how to `Remote Debug` with `PyDev for VSCode`, see: https://marketplace.visualstudio.com/items?itemName=fabioz.vscode-pydev-python-debugger + +`pydevd` is compatible with Python 3.8 onwards and is tested both with CPython as well as PyPy. -`pydevd` is tested both with CPython as well as PyPy. +For `Python 3.3 to 3.7` please keep using `pydevd 2.10.0`. + +For `Python 2` please keep using `pydevd 2.8.0`. Recent versions contain speedup modules using Cython, which are generated with a few changes in the regular files to `cythonize` the files. To update and compile the cython sources (and generate some other auto-generated files), diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py index aca108fa0..ad9347602 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_calltip_util.py @@ -1,7 +1,7 @@ -''' +""" License: Apache 2.0 Author: Yuli Fitterman -''' +""" import types from _pydevd_bundle.pydevd_constants import IS_JYTHON @@ -9,7 +9,7 @@ try: import inspect except: - import traceback; + import traceback traceback.print_exc() # Ok, no inspect available (search will not work) @@ -18,7 +18,7 @@ def is_bound_method(obj): if isinstance(obj, types.MethodType): - return getattr(obj, '__self__', getattr(obj, 'im_self', None)) is not None + return getattr(obj, "__self__", getattr(obj, "im_self", None)) is not None else: return False @@ -28,7 +28,7 @@ def get_class_name(instance): def get_bound_class_name(obj): - my_self = getattr(obj, '__self__', getattr(obj, 'im_self', None)) + my_self = getattr(obj, "__self__", getattr(obj, "im_self", None)) if my_self is None: return None return get_class_name(my_self) @@ -40,8 +40,8 @@ def get_description(obj): except: ob_call = None - if isinstance(obj, type) or type(obj).__name__ == 'classobj': - fob = getattr(obj, '__init__', lambda: None) + if isinstance(obj, type) or type(obj).__name__ == "classobj": + fob = getattr(obj, "__init__", lambda: None) if not isinstance(fob, (types.FunctionType, types.MethodType)): fob = obj elif is_bound_method(ob_call): @@ -55,16 +55,16 @@ def get_description(obj): if isinstance(fob, (types.FunctionType, types.MethodType)): spec_info = inspect.getfullargspec(fob) argspec = inspect.formatargspec(*spec_info) - fn_name = getattr(fob, '__name__', None) - if isinstance(obj, type) or type(obj).__name__ == 'classobj': + fn_name = getattr(fob, "__name__", None) + if isinstance(obj, type) or type(obj).__name__ == "classobj": fn_name = "__init__" fn_class = getattr(obj, "__name__", "UnknownClass") elif is_bound_method(obj) or is_bound_method(ob_call): fn_class = get_bound_class_name(obj) or "UnknownClass" else: - fn_name = getattr(fob, '__name__', None) - fn_self = getattr(fob, '__self__', None) + fn_name = getattr(fob, "__name__", None) + fn_self = getattr(fob, "__self__", None) if fn_self is not None and not isinstance(fn_self, types.ModuleType): fn_class = get_class_name(fn_self) @@ -77,7 +77,7 @@ def create_method_stub(fn_name, fn_class, argspec, doc_string): doc_string = "" if doc_string is None else doc_string fn_stub = create_function_stub(fn_name, argspec, doc_string, indent=1 if fn_class else 0) if fn_class: - expr = fn_class if fn_name == '__init__' else fn_class + '().' + fn_name + expr = fn_class if fn_name == "__init__" else fn_class + "()." + fn_name return create_class_stub(fn_class, fn_stub) + "\n" + expr else: expr = fn_name @@ -87,10 +87,10 @@ def create_method_stub(fn_name, fn_class, argspec, doc_string): restored_signature, _ = signature_from_docstring(doc_string, fn_name) if restored_signature: return create_method_stub(fn_name, fn_class, restored_signature, doc_string) - return create_function_stub('unknown', '(*args, **kwargs)', doc_string) + '\nunknown' + return create_function_stub("unknown", "(*args, **kwargs)", doc_string) + "\nunknown" else: - return '' + return "" def get_docstring(obj): @@ -105,21 +105,20 @@ def get_docstring(obj): from _pydev_bundle import _pydev_jy_imports_tipper is_method, infos = _pydev_jy_imports_tipper.ismethod(obj) - ret = '' + ret = "" if is_method: for info in infos: ret += info.get_as_doc() return ret else: - doc = inspect.getdoc(obj) if doc is not None: return doc except: pass else: - return '' + return "" try: # if no attempt succeeded, try to return repr()... return repr(obj) @@ -129,7 +128,7 @@ def get_docstring(obj): return str(obj.__class__) except: # if all fails, go to an empty string - return '' + return "" def create_class_stub(class_name, contents): @@ -137,9 +136,8 @@ def create_class_stub(class_name, contents): def create_function_stub(fn_name, fn_argspec, fn_docstring, indent=0): - def shift_right(string, prefix): - return ''.join(prefix + line for line in string.splitlines(True)) + return "".join(prefix + line for line in string.splitlines(True)) fn_docstring = shift_right(inspect.cleandoc(fn_docstring), " " * (indent + 1)) ret = ''' @@ -148,7 +146,7 @@ def %s%s: pass ''' % (fn_name, fn_argspec, fn_docstring) ret = ret[1:] # remove first /n - ret = ret.replace('\t', " ") + ret = ret.replace("\t", " ") if indent: prefix = " " * indent ret = shift_right(ret, prefix) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py index ed0db4ea7..69a2b23f5 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_completer.py @@ -9,6 +9,7 @@ try: import java.lang # @UnusedImport from _pydev_bundle import _pydev_jy_imports_tipper + _pydev_imports_tipper = _pydev_jy_imports_tipper except ImportError: IS_JYTHON = False @@ -17,13 +18,13 @@ dir2 = _pydev_imports_tipper.generate_imports_tip_for_module -#======================================================================================================================= +# ======================================================================================================================= # _StartsWithFilter -#======================================================================================================================= +# ======================================================================================================================= class _StartsWithFilter: - ''' - Used because we can't create a lambda that'll use an outer scope in jython 2.1 - ''' + """ + Used because we can't create a lambda that'll use an outer scope in jython 2.1 + """ def __init__(self, start_with): self.start_with = start_with.lower() @@ -32,13 +33,12 @@ def __call__(self, name): return name.lower().startswith(self.start_with) -#======================================================================================================================= +# ======================================================================================================================= # Completer # # This class was gotten from IPython.completer (dir2 was replaced with the completer already in pydev) -#======================================================================================================================= +# ======================================================================================================================= class Completer: - def __init__(self, namespace=None, global_namespace=None): """Create a new completer for the command line. @@ -82,7 +82,7 @@ def complete(self, text): """ if self.use_main_ns: # In pydev this option should never be used - raise RuntimeError('Namespace must be provided!') + raise RuntimeError("Namespace must be provided!") self.namespace = __main__.__dict__ # @UndefinedVariable if "." in text: @@ -148,7 +148,7 @@ def attr_matches(self, text): def generate_completions(frame, act_tok): - ''' + """ :return list(tuple(method_name, docstring, parameters, completion_type)) method_name: str @@ -156,7 +156,7 @@ def generate_completions(frame, act_tok): parameters: str -- i.e.: "(a, b)" completion_type is an int See: _pydev_bundle._pydev_imports_tipper for TYPE_ constants - ''' + """ if frame is None: return [] @@ -189,21 +189,21 @@ def completions_to_xml(completions): for comp in completions: msg.append('_= \t"))) msg.append('" p1="') - msg.append(valid_xml(quote(comp[1], '/>_= \t'))) + msg.append(valid_xml(quote(comp[1], "/>_= \t"))) msg.append('" p2="') - msg.append(valid_xml(quote(comp[2], '/>_= \t'))) + msg.append(valid_xml(quote(comp[2], "/>_= \t"))) msg.append('" p3="') - msg.append(valid_xml(quote(comp[3], '/>_= \t'))) + msg.append(valid_xml(quote(comp[3], "/>_= \t"))) msg.append('"/>') msg.append("") - return ''.join(msg) + return "".join(msg) -identifier_start = ascii_letters + '_' -identifier_part = ascii_letters + '_' + digits +identifier_start = ascii_letters + "_" +identifier_part = ascii_letters + "_" + digits identifier_start = set(identifier_start) identifier_part = set(identifier_part) @@ -213,18 +213,18 @@ def isidentifier(s): return s.isidentifier() -TokenAndQualifier = namedtuple('TokenAndQualifier', 'token, qualifier') +TokenAndQualifier = namedtuple("TokenAndQualifier", "token, qualifier") def extract_token_and_qualifier(text, line=0, column=0): - ''' + """ Extracts the token a qualifier from the text given the line/colum (see test_extract_token_and_qualifier for examples). :param unicode text: :param int line: 0-based :param int column: 0-based - ''' + """ # Note: not using the tokenize module because text should be unicode and # line/column refer to the unicode text (otherwise we'd have to know # those ranges after converted to bytes). @@ -234,32 +234,32 @@ def extract_token_and_qualifier(text, line=0, column=0): column = 0 if isinstance(text, bytes): - text = text.decode('utf-8') + text = text.decode("utf-8") lines = text.splitlines() try: text = lines[line] except IndexError: - return TokenAndQualifier(u'', u'') + return TokenAndQualifier("", "") if column >= len(text): column = len(text) text = text[:column] - token = u'' - qualifier = u'' + token = "" + qualifier = "" temp_token = [] for i in range(column - 1, -1, -1): c = text[i] - if c in identifier_part or isidentifier(c) or c == u'.': + if c in identifier_part or isidentifier(c) or c == ".": temp_token.append(c) else: break - temp_token = u''.join(reversed(temp_token)) - if u'.' in temp_token: - temp_token = temp_token.split(u'.') - token = u'.'.join(temp_token[:-1]) + temp_token = "".join(reversed(temp_token)) + if "." in temp_token: + temp_token = temp_token.split(".") + token = ".".join(temp_token[:-1]) qualifier = temp_token[-1] else: qualifier = temp_token diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py index 28ae40351..4abdd4b63 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_execfile.py @@ -2,13 +2,15 @@ def execfile(file, glob=None, loc=None): if glob is None: import sys + glob = sys._getframe().f_back.f_globals if loc is None: loc = glob import tokenize + with tokenize.open(file) as stream: contents = stream.read() # execute the script (note: it's important to compile first to have the filename set in debug mode) - exec(compile(contents + "\n", file, 'exec'), glob, loc) + exec(compile(contents + "\n", file, "exec"), glob, loc) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py index 6264e3dbd..b0a21bfde 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_filesystem_encoding.py @@ -2,40 +2,42 @@ def __getfilesystemencoding(): - ''' + """ Note: there's a copy of this method in interpreterInfo.py - ''' + """ try: ret = sys.getfilesystemencoding() if not ret: - raise RuntimeError('Unable to get encoding.') + raise RuntimeError("Unable to get encoding.") return ret except: try: - #Handle Jython + # Handle Jython from java.lang import System # @UnresolvedImport + env = System.getProperty("os.name").lower() - if env.find('win') != -1: - return 'ISO-8859-1' #mbcs does not work on Jython, so, use a (hopefully) suitable replacement - return 'utf-8' + if env.find("win") != -1: + return "ISO-8859-1" # mbcs does not work on Jython, so, use a (hopefully) suitable replacement + return "utf-8" except: pass - #Only available from 2.3 onwards. - if sys.platform == 'win32': - return 'mbcs' - return 'utf-8' + # Only available from 2.3 onwards. + if sys.platform == "win32": + return "mbcs" + return "utf-8" + def getfilesystemencoding(): try: ret = __getfilesystemencoding() - #Check if the encoding is actually there to be used! - if hasattr('', 'encode'): - ''.encode(ret) - if hasattr('', 'decode'): - ''.decode(ret) + # Check if the encoding is actually there to be used! + if hasattr("", "encode"): + "".encode(ret) + if hasattr("", "decode"): + "".decode(ret) return ret except: - return 'utf-8' + return "utf-8" diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py index 5548651e3..d8765ca9a 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_getopt.py @@ -1,11 +1,11 @@ - -#======================================================================================================================= +# ======================================================================================================================= # getopt code copied since gnu_getopt is not available on jython 2.1 -#======================================================================================================================= +# ======================================================================================================================= class GetoptError(Exception): - opt = '' - msg = '' - def __init__(self, msg, opt=''): + opt = "" + msg = "" + + def __init__(self, msg, opt=""): self.msg = msg self.opt = opt Exception.__init__(self, msg, opt) @@ -30,25 +30,25 @@ def gnu_getopt(args, shortopts, longopts=[]): opts = [] prog_args = [] - if type('') == type(longopts): + if type("") == type(longopts): longopts = [longopts] else: longopts = list(longopts) # Allow options after non-option arguments? all_options_first = False - if shortopts.startswith('+'): + if shortopts.startswith("+"): shortopts = shortopts[1:] all_options_first = True while args: - if args[0] == '--': + if args[0] == "--": prog_args += args[1:] break - if args[0][:2] == '--': + if args[0][:2] == "--": opts, args = do_longs(opts, args[0][2:], longopts, args[1:]) - elif args[0][:1] == '-': + elif args[0][:1] == "-": opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:]) else: if all_options_first: @@ -60,71 +60,74 @@ def gnu_getopt(args, shortopts, longopts=[]): return opts, prog_args + def do_longs(opts, opt, longopts, args): try: - i = opt.index('=') + i = opt.index("=") except ValueError: optarg = None else: - opt, optarg = opt[:i], opt[i + 1:] + opt, optarg = opt[:i], opt[i + 1 :] has_arg, opt = long_has_args(opt, longopts) if has_arg: if optarg is None: if not args: - raise GetoptError('option --%s requires argument' % opt, opt) + raise GetoptError("option --%s requires argument" % opt, opt) optarg, args = args[0], args[1:] elif optarg: - raise GetoptError('option --%s must not have an argument' % opt, opt) - opts.append(('--' + opt, optarg or '')) + raise GetoptError("option --%s must not have an argument" % opt, opt) + opts.append(("--" + opt, optarg or "")) return opts, args + # Return: # has_arg? # full option name def long_has_args(opt, longopts): possibilities = [o for o in longopts if o.startswith(opt)] if not possibilities: - raise GetoptError('option --%s not recognized' % opt, opt) + raise GetoptError("option --%s not recognized" % opt, opt) # Is there an exact match? if opt in possibilities: return False, opt - elif opt + '=' in possibilities: + elif opt + "=" in possibilities: return True, opt # No exact match, so better be unique. if len(possibilities) > 1: # XXX since possibilities contains all valid continuations, might be # nice to work them into the error msg - raise GetoptError('option --%s not a unique prefix' % opt, opt) + raise GetoptError("option --%s not a unique prefix" % opt, opt) assert len(possibilities) == 1 unique_match = possibilities[0] - has_arg = unique_match.endswith('=') + has_arg = unique_match.endswith("=") if has_arg: unique_match = unique_match[:-1] return has_arg, unique_match + def do_shorts(opts, optstring, shortopts, args): - while optstring != '': + while optstring != "": opt, optstring = optstring[0], optstring[1:] if short_has_arg(opt, shortopts): - if optstring == '': + if optstring == "": if not args: - raise GetoptError('option -%s requires argument' % opt, - opt) + raise GetoptError("option -%s requires argument" % opt, opt) optstring, args = args[0], args[1:] - optarg, optstring = optstring, '' + optarg, optstring = optstring, "" else: - optarg = '' - opts.append(('-' + opt, optarg)) + optarg = "" + opts.append(("-" + opt, optarg)) return opts, args + def short_has_arg(opt, shortopts): for i in range(len(shortopts)): - if opt == shortopts[i] != ':': - return shortopts.startswith(':', i + 1) - raise GetoptError('option -%s not recognized' % opt, opt) + if opt == shortopts[i] != ":": + return shortopts.startswith(":", i + 1) + raise GetoptError("option -%s not recognized" % opt, opt) -#======================================================================================================================= +# ======================================================================================================================= # End getopt code -#======================================================================================================================= +# ======================================================================================================================= diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py index 7f89c750d..b8f0abc1e 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_imports_tipper.py @@ -14,28 +14,28 @@ def getargspec(*args, **kwargs): # completion types. -TYPE_IMPORT = '0' -TYPE_CLASS = '1' -TYPE_FUNCTION = '2' -TYPE_ATTR = '3' -TYPE_BUILTIN = '4' -TYPE_PARAM = '5' +TYPE_IMPORT = "0" +TYPE_CLASS = "1" +TYPE_FUNCTION = "2" +TYPE_ATTR = "3" +TYPE_BUILTIN = "4" +TYPE_PARAM = "5" def _imp(name, log=None): try: return __import__(name) except: - if '.' in name: - sub = name[0:name.rfind('.')] + if "." in name: + sub = name[0 : name.rfind(".")] if log is not None: - log.add_content('Unable to import', name, 'trying with', sub) + log.add_content("Unable to import", name, "trying with", sub) log.add_exception() return _imp(sub, log) else: - s = 'Unable to import module: %s - sys.path: %s' % (str(name), sys.path) + s = "Unable to import module: %s - sys.path: %s" % (str(name), sys.path) if log is not None: log.add_content(s) log.add_exception() @@ -44,20 +44,21 @@ def _imp(name, log=None): IS_IPY = False -if sys.platform == 'cli': +if sys.platform == "cli": IS_IPY = True _old_imp = _imp def _imp(name, log=None): # We must add a reference in clr for .Net import clr # @UnresolvedImport + initial_name = name - while '.' in name: + while "." in name: try: clr.AddReference(name) break # If it worked, that's OK. except: - name = name[0:name.rfind('.')] + name = name[0 : name.rfind(".")] else: try: clr.AddReference(name) @@ -73,11 +74,11 @@ def get_file(mod): f = inspect.getsourcefile(mod) or inspect.getfile(mod) except: try: - f = getattr(mod, '__file__', None) + f = getattr(mod, "__file__", None) except: f = None - if f and f.lower(f[-4:]) in ['.pyc', '.pyo']: - filename = f[:-4] + '.py' + if f and f.lower(f[-4:]) in [".pyc", ".pyo"]: + filename = f[:-4] + ".py" if os.path.exists(filename): f = filename @@ -89,12 +90,12 @@ def Find(name, log=None): mod = _imp(name, log) parent = mod - foundAs = '' + foundAs = "" if inspect.ismodule(mod): f = get_file(mod) - components = name.split('.') + components = name.split(".") old_comp = None for comp in components[1:]: @@ -111,7 +112,7 @@ def Find(name, log=None): f = get_file(mod) else: if len(foundAs) > 0: - foundAs = foundAs + '.' + foundAs = foundAs + "." foundAs = foundAs + comp old_comp = comp @@ -120,12 +121,11 @@ def Find(name, log=None): def search_definition(data): - '''@return file, line, col - ''' + """@return file, line, col""" - data = data.replace('\n', '') - if data.endswith('.'): - data = data.rstrip('.') + data = data.replace("\n", "") + if data.endswith("."): + data = data.rstrip(".") f, mod, parent, foundAs = Find(data) try: return do_find(f, mod), foundAs @@ -134,9 +134,9 @@ def search_definition(data): def generate_tip(data, log=None): - data = data.replace('\n', '') - if data.endswith('.'): - data = data.rstrip('.') + data = data.replace("\n", "") + if data.endswith("."): + data = data.rstrip(".") f, mod, parent, foundAs = Find(data, log) # print_ >> open('temp.txt', 'w'), f @@ -145,31 +145,31 @@ def generate_tip(data, log=None): def check_char(c): - if c == '-' or c == '.': - return '_' + if c == "-" or c == ".": + return "_" return c _SENTINEL = object() -def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=getattr, filter=lambda name:True): - ''' - @param obj_to_complete: the object from where we should get the completions - @param dir_comps: if passed, we should not 'dir' the object and should just iterate those passed as kwonly_arg parameter - @param getattr: the way to get kwonly_arg given object from the obj_to_complete (used for the completer) - @param filter: kwonly_arg callable that receives the name and decides if it should be appended or not to the results - @return: list of tuples, so that each tuple represents kwonly_arg completion with: - name, doc, args, type (from the TYPE_* constants) - ''' +def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=getattr, filter=lambda name: True): + """ + @param obj_to_complete: the object from where we should get the completions + @param dir_comps: if passed, we should not 'dir' the object and should just iterate those passed as kwonly_arg parameter + @param getattr: the way to get kwonly_arg given object from the obj_to_complete (used for the completer) + @param filter: kwonly_arg callable that receives the name and decides if it should be appended or not to the results + @return: list of tuples, so that each tuple represents kwonly_arg completion with: + name, doc, args, type (from the TYPE_* constants) + """ ret = [] if dir_comps is None: dir_comps = dir_checked(obj_to_complete) - if hasattr_checked(obj_to_complete, '__dict__'): - dir_comps.append('__dict__') - if hasattr_checked(obj_to_complete, '__class__'): - dir_comps.append('__class__') + if hasattr_checked(obj_to_complete, "__dict__"): + dir_comps.append("__dict__") + if hasattr_checked(obj_to_complete, "__class__"): + dir_comps.append("__class__") get_complete_info = True @@ -182,31 +182,31 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get dontGetDocsOn = (float, int, str, tuple, list, dict) dontGetattrOn = (dict, list, set, tuple) for d in dir_comps: - if d is None: continue if not filter(d): continue - args = '' + args = "" try: try: if isinstance(obj_to_complete, dontGetattrOn): - raise Exception('Since python 3.9, e.g. "dict[str]" will return' - " a dict that's only supposed to take strings. " - 'Interestingly, e.g. dict["val"] is also valid ' - 'and presumably represents a dict that only takes ' - 'keys that are "val". This breaks our check for ' - 'class attributes.') + raise Exception( + 'Since python 3.9, e.g. "dict[str]" will return' + " a dict that's only supposed to take strings. " + 'Interestingly, e.g. dict["val"] is also valid ' + "and presumably represents a dict that only takes " + 'keys that are "val". This breaks our check for ' + "class attributes." + ) obj = getattr(obj_to_complete.__class__, d) except: obj = getattr(obj_to_complete, d) except: # just ignore and get it without additional info - ret.append((d, '', args, TYPE_BUILTIN)) + ret.append((d, "", args, TYPE_BUILTIN)) else: - if get_complete_info: try: retType = TYPE_BUILTIN @@ -214,21 +214,20 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get # check if we have to get docs getDoc = True for class_ in dontGetDocsOn: - if isinstance(obj, class_): getDoc = False break - doc = '' + doc = "" if getDoc: # no need to get this info... too many constants are defined and # makes things much slower (passing all that through sockets takes quite some time) try: doc = inspect.getdoc(obj) if doc is None: - doc = '' + doc = "" except: # may happen on jython when checking java classes (so, just ignore it) - doc = '' + doc = "" if inspect.ismethod(obj) or inspect.isbuiltin(obj) or inspect.isfunction(obj) or inspect.isroutine(obj): try: @@ -239,14 +238,14 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get for kwonly_arg in kwonly_args: default = kwonly_defaults.get(kwonly_arg, _SENTINEL) if default is not _SENTINEL: - args.append('%s=%s' % (kwonly_arg, default)) + args.append("%s=%s" % (kwonly_arg, default)) else: args.append(str(kwonly_arg)) - args = '(%s)' % (', '.join(args)) + args = "(%s)" % (", ".join(args)) except TypeError: # ok, let's see if we can get the arguments from the doc - args, doc = signature_from_docstring(doc, getattr(obj, '__name__', None)) + args, doc = signature_from_docstring(doc, getattr(obj, "__name__", None)) retType = TYPE_FUNCTION @@ -263,7 +262,7 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get ret.append((d, doc, args, retType)) except: # just ignore and get it without aditional info - ret.append((d, '', args, TYPE_BUILTIN)) + ret.append((d, "", args, TYPE_BUILTIN)) else: # get_complete_info == False if inspect.ismethod(obj) or inspect.isbuiltin(obj) or inspect.isfunction(obj) or inspect.isroutine(obj): @@ -279,13 +278,13 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get retType = TYPE_ATTR # ok, no complete info, let's try to do this as fast and clean as possible # so, no docs for this kind of information, only the signatures - ret.append((d, '', str(args), retType)) + ret.append((d, "", str(args), retType)) return ret def signature_from_docstring(doc, obj_name): - args = '()' + args = "()" try: found = False if len(doc) > 0: @@ -301,50 +300,50 @@ def signature_from_docstring(doc, obj_name): # sort(self: list) # sort(self: list, cmp: object) if obj_name: - name = obj_name + '(' + name = obj_name + "(" # Fix issue where it was appearing sort(aa)sort(bb)sort(cc) in the same line. lines = doc.splitlines() if len(lines) == 1: c = doc.count(name) if c > 1: - doc = ('\n' + name).join(doc.split(name)) + doc = ("\n" + name).join(doc.split(name)) - major = '' + major = "" for line in doc.splitlines(): - if line.startswith(name) and line.endswith(')'): + if line.startswith(name) and line.endswith(")"): if len(line) > len(major): major = line if major: - args = major[major.index('('):] + args = major[major.index("(") :] found = True if not found: - i = doc.find('->') + i = doc.find("->") if i < 0: - i = doc.find('--') + i = doc.find("--") if i < 0: - i = doc.find('\n') + i = doc.find("\n") if i < 0: - i = doc.find('\r') + i = doc.find("\r") if i > 0: s = doc[0:i] s = s.strip() # let's see if we have a docstring in the first line - if s[-1] == ')': - start = s.find('(') + if s[-1] == ")": + start = s.find("(") if start >= 0: - end = s.find('[') + end = s.find("[") if end <= 0: - end = s.find(')') + end = s.find(")") if end <= 0: end = len(s) args = s[start:end] - if not args[-1] == ')': - args = args + ')' + if not args[-1] == ")": + args = args + ")" # now, get rid of unwanted chars l = len(args) - 1 @@ -355,18 +354,18 @@ def signature_from_docstring(doc, obj_name): else: r.append(check_char(args[i])) - args = ''.join(r) + args = "".join(r) if IS_IPY: - if args.startswith('(self:'): - i = args.find(',') + if args.startswith("(self:"): + i = args.find(",") if i >= 0: - args = '(self' + args[i:] + args = "(self" + args[i:] else: - args = '(self)' - i = args.find(')') + args = "(self)" + i = args.find(")") if i > 0: - args = args[:i + 1] + args = args[: i + 1] except: pass diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py index a30c4d35e..d1265de83 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_jy_imports_tipper.py @@ -12,48 +12,49 @@ from org.python.core import PyClass # @UnresolvedImport # completion types. -TYPE_IMPORT = '0' -TYPE_CLASS = '1' -TYPE_FUNCTION = '2' -TYPE_ATTR = '3' -TYPE_BUILTIN = '4' -TYPE_PARAM = '5' +TYPE_IMPORT = "0" +TYPE_CLASS = "1" +TYPE_FUNCTION = "2" +TYPE_ATTR = "3" +TYPE_BUILTIN = "4" +TYPE_PARAM = "5" def _imp(name): try: return __import__(name) except: - if '.' in name: - sub = name[0:name.rfind('.')] + if "." in name: + sub = name[0 : name.rfind(".")] return _imp(sub) else: - s = 'Unable to import module: %s - sys.path: %s' % (str(name), sys.path) + s = "Unable to import module: %s - sys.path: %s" % (str(name), sys.path) raise RuntimeError(s) import java.util -_java_rt_file = getattr(java.util, '__file__', None) + +_java_rt_file = getattr(java.util, "__file__", None) def Find(name): f = None - if name.startswith('__builtin__'): - if name == '__builtin__.str': - name = 'org.python.core.PyString' - elif name == '__builtin__.dict': - name = 'org.python.core.PyDictionary' + if name.startswith("__builtin__"): + if name == "__builtin__.str": + name = "org.python.core.PyString" + elif name == "__builtin__.dict": + name = "org.python.core.PyDictionary" mod = _imp(name) parent = mod - foundAs = '' + foundAs = "" try: - f = getattr(mod, '__file__', None) + f = getattr(mod, "__file__", None) except: f = None - components = name.split('.') + components = name.split(".") old_comp = None for comp in components[1:]: try: @@ -65,98 +66,95 @@ def Find(name): if old_comp != comp: raise - if hasattr(mod, '__file__'): + if hasattr(mod, "__file__"): f = mod.__file__ else: if len(foundAs) > 0: - foundAs = foundAs + '.' + foundAs = foundAs + "." foundAs = foundAs + comp old_comp = comp - if f is None and name.startswith('java.lang'): + if f is None and name.startswith("java.lang"): # Hack: java.lang.__file__ is None on Jython 2.7 (whereas it pointed to rt.jar on Jython 2.5). f = _java_rt_file if f is not None: - if f.endswith('.pyc'): + if f.endswith(".pyc"): f = f[:-1] - elif f.endswith('$py.class'): - f = f[:-len('$py.class')] + '.py' + elif f.endswith("$py.class"): + f = f[: -len("$py.class")] + ".py" return f, mod, parent, foundAs def format_param_class_name(paramClassName): - if paramClassName.startswith(''): - paramClassName = paramClassName[len('"): + paramClassName = paramClassName[len(" - paramClassName = paramClassName.split('\'')[1] + paramClassName = paramClassName.split("'")[1] except: paramClassName = repr(paramTypesClass) # just in case something else happens... it will at least be visible # if the parameter equals [C, it means it it a char array, so, let's change it @@ -281,16 +280,15 @@ def getargs(func_code): except Exception: s = StringIO() traceback.print_exc(file=s) - return 1, [Info(str('ERROR'), doc=s.getvalue())] + return 1, [Info(str("ERROR"), doc=s.getvalue())] return 0, None def ismodule(mod): # java modules... do we have other way to know that? - if not hasattr(mod, 'getClass') and not hasattr(mod, '__class__') \ - and hasattr(mod, '__name__'): - return 1 + if not hasattr(mod, "getClass") and not hasattr(mod, "__class__") and hasattr(mod, "__name__"): + return 1 return isinstance(mod, core.PyModule) @@ -299,9 +297,8 @@ def dir_obj(obj): ret = [] found = java.util.HashMap() original = obj - if hasattr(obj, '__class__'): + if hasattr(obj, "__class__"): if obj.__class__ == java.lang.Class: - # get info about superclasses classes = [] classes.append(obj) @@ -364,16 +361,15 @@ def dir_obj(obj): def format_arg(arg): - '''formats an argument to be shown - ''' + """formats an argument to be shown""" s = str(arg) - dot = s.rfind('.') + dot = s.rfind(".") if dot >= 0: - s = s[dot + 1:] + s = s[dot + 1 :] - s = s.replace(';', '') - s = s.replace('[]', 'Array') + s = s.replace(";", "") + s = s.replace("[]", "Array") if len(s) > 0: c = s[0].lower() s = c + s[1:] @@ -382,12 +378,11 @@ def format_arg(arg): def search_definition(data): - '''@return file, line, col - ''' + """@return file, line, col""" - data = data.replace('\n', '') - if data.endswith('.'): - data = data.rstrip('.') + data = data.replace("\n", "") + if data.endswith("."): + data = data.rstrip(".") f, mod, parent, foundAs = Find(data) try: return do_find(f, mod), foundAs @@ -395,30 +390,29 @@ def search_definition(data): return do_find(f, parent), foundAs -def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=getattr, filter=lambda name:True): - ''' - @param obj_to_complete: the object from where we should get the completions - @param dir_comps: if passed, we should not 'dir' the object and should just iterate those passed as a parameter - @param getattr: the way to get a given object from the obj_to_complete (used for the completer) - @param filter: a callable that receives the name and decides if it should be appended or not to the results - @return: list of tuples, so that each tuple represents a completion with: - name, doc, args, type (from the TYPE_* constants) - ''' +def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=getattr, filter=lambda name: True): + """ + @param obj_to_complete: the object from where we should get the completions + @param dir_comps: if passed, we should not 'dir' the object and should just iterate those passed as a parameter + @param getattr: the way to get a given object from the obj_to_complete (used for the completer) + @param filter: a callable that receives the name and decides if it should be appended or not to the results + @return: list of tuples, so that each tuple represents a completion with: + name, doc, args, type (from the TYPE_* constants) + """ ret = [] if dir_comps is None: dir_comps = dir_obj(obj_to_complete) for d in dir_comps: - if d is None: continue if not filter(d): continue - args = '' - doc = '' + args = "" + doc = "" retType = TYPE_BUILTIN try: @@ -452,26 +446,25 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get # # whereas if we had added the jar to the classpath before, everything would be fine by now... - ret.append((d, '', '', retType)) + ret.append((d, "", "", retType)) # that's ok, private things cannot be gotten... continue else: - isMet = ismethod(obj) if isMet[0] and isMet[1]: info = isMet[1][0] try: args, vargs, kwargs = info.args, info.varargs, info.kwargs doc = info.get_as_doc() - r = '' - for a in (args): + r = "" + for a in args: if len(r) > 0: - r += ', ' + r += ", " r += format_arg(a) - args = '(%s)' % (r) + args = "(%s)" % (r) except TypeError: traceback.print_exc() - args = '()' + args = "()" retType = TYPE_FUNCTION @@ -488,5 +481,5 @@ def generate_imports_tip_for_module(obj_to_complete, dir_comps=None, getattr=get if __name__ == "__main__": - sys.path.append(r'D:\dev_programs\eclipse_3\310\eclipse\plugins\org.junit_3.8.1\junit.jar') - sys.stdout.write('%s\n' % Find('junit.framework.TestCase')) + sys.path.append(r"D:\dev_programs\eclipse_3\310\eclipse\plugins\org.junit_3.8.1\junit.jar") + sys.stdout.write("%s\n" % Find("junit.framework.TestCase")) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py index 7328d6213..5c9580fce 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_log.py @@ -4,12 +4,11 @@ class Log: - def __init__(self): self._contents = [] def add_content(self, *content): - self._contents.append(' '.join(content)) + self._contents.append(" ".join(content)) def add_exception(self): s = StringIO() @@ -18,7 +17,7 @@ def add_exception(self): self._contents.append(s.getvalue()) def get_contents(self): - return '\n'.join(self._contents) + return "\n".join(self._contents) def clear_log(self): del self._contents[:] diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py index bcf5f9b26..f1ba03766 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_saved_modules.py @@ -10,10 +10,10 @@ def find_in_pythonpath(module_name): # this should be rare in general). found_at = [] - parts = module_name.split('.') # split because we need to convert mod.name to mod/name + parts = module_name.split(".") # split because we need to convert mod.name to mod/name for path in sys.path: target = os.path.join(path, *parts) - target_py = target + '.py' + target_py = target + ".py" if os.path.isdir(target): found_at.append(target) if os.path.exists(target_py): @@ -26,7 +26,6 @@ class DebuggerInitializationError(Exception): class VerifyShadowedImport(object): - def __init__(self, import_name): self.import_name = import_name @@ -53,17 +52,19 @@ def __exit__(self, exc_type, exc_val, exc_tb): raise DebuggerInitializationError(msg) def _generate_shadowed_import_message(self, found_at): - msg = '''It was not possible to initialize the debugger due to a module name conflict. + msg = """It was not possible to initialize the debugger due to a module name conflict. i.e.: the module "%(import_name)s" could not be imported because it is shadowed by: %(found_at)s -Please rename this file/folder so that the original module from the standard library can be imported.''' % { - 'import_name': self.import_name, 'found_at': found_at[0]} +Please rename this file/folder so that the original module from the standard library can be imported.""" % { + "import_name": self.import_name, + "found_at": found_at[0], + } return msg def check(self, module, expected_attributes): - msg = '' + msg = "" for expected_attribute in expected_attributes: try: getattr(module, expected_attribute) @@ -75,35 +76,58 @@ def check(self, module, expected_attributes): raise DebuggerInitializationError(msg) -with VerifyShadowedImport('threading') as verify_shadowed: - import threading; verify_shadowed.check(threading, ['Thread', 'settrace', 'setprofile', 'Lock', 'RLock', 'current_thread']) +with VerifyShadowedImport("threading") as verify_shadowed: + import threading + + verify_shadowed.check(threading, ["Thread", "settrace", "setprofile", "Lock", "RLock", "current_thread"]) + ThreadingEvent = threading.Event + ThreadingLock = threading.Lock + threading_current_thread = threading.current_thread + +with VerifyShadowedImport("time") as verify_shadowed: + import time + + verify_shadowed.check(time, ["sleep", "time", "mktime"]) + +with VerifyShadowedImport("socket") as verify_shadowed: + import socket + + verify_shadowed.check(socket, ["socket", "gethostname", "getaddrinfo"]) + +with VerifyShadowedImport("select") as verify_shadowed: + import select + + verify_shadowed.check(select, ["select"]) + +with VerifyShadowedImport("code") as verify_shadowed: + import code as _code + + verify_shadowed.check(_code, ["compile_command", "InteractiveInterpreter"]) + +with VerifyShadowedImport("_thread") as verify_shadowed: + import _thread as thread -with VerifyShadowedImport('time') as verify_shadowed: - import time; verify_shadowed.check(time, ['sleep', 'time', 'mktime']) + verify_shadowed.check(thread, ["start_new_thread", "start_new", "allocate_lock"]) -with VerifyShadowedImport('socket') as verify_shadowed: - import socket; verify_shadowed.check(socket, ['socket', 'gethostname', 'getaddrinfo']) +with VerifyShadowedImport("queue") as verify_shadowed: + import queue as _queue -with VerifyShadowedImport('select') as verify_shadowed: - import select; verify_shadowed.check(select, ['select']) + verify_shadowed.check(_queue, ["Queue", "LifoQueue", "Empty", "Full", "deque"]) -with VerifyShadowedImport('code') as verify_shadowed: - import code as _code; verify_shadowed.check(_code, ['compile_command', 'InteractiveInterpreter']) +with VerifyShadowedImport("xmlrpclib") as verify_shadowed: + import xmlrpc.client as xmlrpclib -with VerifyShadowedImport('_thread') as verify_shadowed: - import _thread as thread; verify_shadowed.check(thread, ['start_new_thread', 'start_new', 'allocate_lock']) + verify_shadowed.check(xmlrpclib, ["ServerProxy", "Marshaller", "Server"]) -with VerifyShadowedImport('queue') as verify_shadowed: - import queue as _queue; verify_shadowed.check(_queue, ['Queue', 'LifoQueue', 'Empty', 'Full', 'deque']) +with VerifyShadowedImport("xmlrpc.server") as verify_shadowed: + import xmlrpc.server as xmlrpcserver -with VerifyShadowedImport('xmlrpclib') as verify_shadowed: - import xmlrpc.client as xmlrpclib; verify_shadowed.check(xmlrpclib, ['ServerProxy', 'Marshaller', 'Server']) + verify_shadowed.check(xmlrpcserver, ["SimpleXMLRPCServer"]) -with VerifyShadowedImport('xmlrpc.server') as verify_shadowed: - import xmlrpc.server as xmlrpcserver; verify_shadowed.check(xmlrpcserver, ['SimpleXMLRPCServer']) +with VerifyShadowedImport("http.server") as verify_shadowed: + import http.server as BaseHTTPServer -with VerifyShadowedImport('http.server') as verify_shadowed: - import http.server as BaseHTTPServer; verify_shadowed.check(BaseHTTPServer, ['BaseHTTPRequestHandler']) + verify_shadowed.check(BaseHTTPServer, ["BaseHTTPRequestHandler"]) # If set, this is a version of the threading.enumerate that doesn't have the patching to remove the pydevd threads. # Note: as it can't be set during execution, don't import the name (import the module and access it through its name). diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py index f5067509f..23e7d4f54 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_sys_patch.py @@ -2,9 +2,7 @@ def patch_sys_module(): - def patched_exc_info(fun): - def pydev_debugger_exc_info(): type, value, traceback = fun() if type == ImportError: @@ -22,7 +20,6 @@ def pydev_debugger_exc_info(): def patched_reload(orig_reload): - def pydev_debugger_reload(module): orig_reload(module) if module.__name__ == "sys": @@ -40,13 +37,15 @@ def patch_reload(): builtins.reload = patched_reload(sys.builtin_orig_reload) # @UndefinedVariable try: import imp + sys.imp_orig_reload = imp.reload imp.reload = patched_reload(sys.imp_orig_reload) # @UndefinedVariable - except: - pass + except ImportError: + pass # Ok, imp not available on Python 3.12. else: try: import importlib + sys.importlib_orig_reload = importlib.reload # @UndefinedVariable importlib.reload = patched_reload(sys.importlib_orig_reload) # @UndefinedVariable except: @@ -63,11 +62,16 @@ def cancel_patches_in_sys_module(): builtins.reload = sys.builtin_orig_reload if hasattr(sys, "imp_orig_reload"): - import imp - imp.reload = sys.imp_orig_reload + try: + import imp + + imp.reload = sys.imp_orig_reload + except ImportError: + pass # Ok, imp not available in Python 3.12. if hasattr(sys, "importlib_orig_reload"): import importlib + importlib.reload = sys.importlib_orig_reload del builtins diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py index d97e95d1f..25c0f6fdb 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/_pydev_tipper_common.py @@ -4,6 +4,7 @@ def do_find(f, mod): import linecache + if inspect.ismodule(mod): return f, 0, 0 @@ -11,7 +12,7 @@ def do_find(f, mod): if inspect.isclass(mod): name = mod.__name__ - pat = re.compile(r'^\s*class\s*' + name + r'\b') + pat = re.compile(r"^\s*class\s*" + name + r"\b") for i in range(len(lines)): if pat.match(lines[i]): return f, i, 0 @@ -34,14 +35,14 @@ def do_find(f, mod): mod = mod.f_code if inspect.iscode(mod): - if not hasattr(mod, 'co_filename'): + if not hasattr(mod, "co_filename"): return None, 0, 0 - if not hasattr(mod, 'co_firstlineno'): + if not hasattr(mod, "co_firstlineno"): return mod.co_filename, 0, 0 lnum = mod.co_firstlineno - pat = re.compile(r'^(\s*def\s)|(.*(? 0: if pat.match(lines[lnum]): break @@ -49,4 +50,4 @@ def do_find(f, mod): return f, lnum, 0 - raise RuntimeError('Do not know about: ' + f + ' ' + str(mod)) + raise RuntimeError("Do not know about: " + f + " " + str(mod)) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py index fe6ed4130..c661b40b1 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/fsnotify/__init__.py @@ -1,4 +1,4 @@ -''' +""" Sample usage to track changes in a thread. import threading @@ -36,11 +36,10 @@ def start_watching(): # Called from thread Note: changes are only reported for files (added/modified/deleted), not directories. -''' -import threading +""" import sys from os.path import basename -from _pydev_bundle import pydev_log +from _pydev_bundle import pydev_log, _pydev_saved_modules from os import scandir try: @@ -50,11 +49,12 @@ def start_watching(): # Called from thread class IntEnum(object): pass + import time -__author__ = 'Fabio Zadrozny' -__email__ = 'fabiofz@gmail.com' -__version__ = '0.1.5' # Version here and in setup.py +__author__ = "Fabio Zadrozny" +__email__ = "fabiofz@gmail.com" +__version__ = "0.1.5" # Version here and in setup.py class Change(IntEnum): @@ -64,7 +64,6 @@ class Change(IntEnum): class _SingleVisitInfo(object): - def __init__(self): self.count = 0 self.visited_dirs = set() @@ -73,18 +72,18 @@ def __init__(self): class _PathWatcher(object): - ''' + """ Helper to watch a single path. - ''' + """ - def __init__(self, root_path, accept_directory, accept_file, single_visit_info, max_recursion_level, sleep_time=.0): - ''' + def __init__(self, root_path, accept_directory, accept_file, single_visit_info, max_recursion_level, sleep_time=0.0): + """ :type root_path: str :type accept_directory: Callback[str, bool] :type accept_file: Callback[str, bool] :type max_recursion_level: int :type sleep_time: float - ''' + """ self.accept_directory = accept_directory self.accept_file = accept_file self._max_recursion_level = max_recursion_level @@ -95,7 +94,7 @@ def __init__(self, root_path, accept_directory, accept_file, single_visit_info, # Watcher.target_time_for_single_scan. self.sleep_time = sleep_time - self.sleep_at_elapsed = 1. / 30. + self.sleep_at_elapsed = 1.0 / 30.0 # When created, do the initial snapshot right away! old_file_to_mtime = {} @@ -124,7 +123,7 @@ def _check_dir(self, dir_path, single_visit_info, append_change, old_file_to_mti dir_path = dir_path.decode(sys.getfilesystemencoding()) except UnicodeDecodeError: try: - dir_path = dir_path.decode('utf-8') + dir_path = dir_path.decode("utf-8") except UnicodeDecodeError: return # Ignore if we can't deal with the path. @@ -167,10 +166,9 @@ def _check(self, single_visit_info, append_change, old_file_to_mtime): class Watcher(object): - # By default (if accept_directory is not specified), these will be the # ignored directories. - ignored_dirs = {u'.git', u'__pycache__', u'.idea', u'node_modules', u'.metadata'} + ignored_dirs = {".git", "__pycache__", ".idea", "node_modules", ".metadata"} # By default (if accept_file is not specified), these will be the # accepted files. @@ -195,7 +193,7 @@ class Watcher(object): max_recursion_level = 10 def __init__(self, accept_directory=None, accept_file=None): - ''' + """ :param Callable[str, bool] accept_directory: Callable that returns whether a directory should be watched. Note: if passed it'll override the `ignored_dirs` @@ -203,15 +201,14 @@ def __init__(self, accept_directory=None, accept_file=None): :param Callable[str, bool] accept_file: Callable that returns whether a file should be watched. Note: if passed it'll override the `accepted_file_extensions`. - ''' + """ self._path_watchers = set() - self._disposed = threading.Event() + self._disposed = _pydev_saved_modules.ThreadingEvent() if accept_directory is None: accept_directory = lambda dir_path: basename(dir_path) not in self.ignored_dirs if accept_file is None: - accept_file = lambda path_name: \ - not self.accepted_file_extensions or path_name.endswith(self.accepted_file_extensions) + accept_file = lambda path_name: not self.accepted_file_extensions or path_name.endswith(self.accepted_file_extensions) self.accept_file = accept_file self.accept_directory = accept_directory self._single_visit_info = _SingleVisitInfo() @@ -253,14 +250,14 @@ def set_tracked_paths(self, paths): # Sort by the path len so that the bigger paths come first (so, # if there's any nesting we want the nested paths to be visited # before the parent paths so that the max_recursion_level is correct). - paths = sorted(set(paths), key=lambda path:-len(path)) + paths = sorted(set(paths), key=lambda path: -len(path)) path_watchers = set() self._single_visit_info = _SingleVisitInfo() initial_time = time.time() for path in paths: - sleep_time = 0. # When collecting the first time, sleep_time should be 0! + sleep_time = 0.0 # When collecting the first time, sleep_time should be 0! path_watcher = _PathWatcher( path, self.accept_directory, @@ -272,22 +269,22 @@ def set_tracked_paths(self, paths): path_watchers.add(path_watcher) - actual_time = (time.time() - initial_time) + actual_time = time.time() - initial_time - pydev_log.debug('Tracking the following paths for changes: %s', paths) - pydev_log.debug('Time to track: %.2fs', actual_time) - pydev_log.debug('Folders found: %s', len(self._single_visit_info.visited_dirs)) - pydev_log.debug('Files found: %s', len(self._single_visit_info.file_to_mtime)) + pydev_log.debug("Tracking the following paths for changes: %s", paths) + pydev_log.debug("Time to track: %.2fs", actual_time) + pydev_log.debug("Folders found: %s", len(self._single_visit_info.visited_dirs)) + pydev_log.debug("Files found: %s", len(self._single_visit_info.file_to_mtime)) self._path_watchers = path_watchers def iter_changes(self): - ''' + """ Continuously provides changes (until dispose() is called). Changes provided are tuples with the Change enum and filesystem path. :rtype: Iterable[Tuple[Change, str]] - ''' + """ while not self._disposed.is_set(): initial_time = time.time() @@ -307,9 +304,9 @@ def iter_changes(self): for change in changes: yield change - actual_time = (time.time() - initial_time) + actual_time = time.time() - initial_time if self.print_poll_time: - print('--- Total poll time: %.3fs' % actual_time) + print("--- Total poll time: %.3fs" % actual_time) if actual_time > 0: if self.target_time_for_single_scan <= 0.0: @@ -322,8 +319,8 @@ def iter_changes(self): # direction). # (to prevent from cases where the user puts the machine on sleep and # values become too skewed). - if perc > 2.: - perc = 2. + if perc > 2.0: + perc = 2.0 elif perc < 0.5: perc = 0.5 @@ -337,7 +334,7 @@ def iter_changes(self): # (to prevent from cases where the user puts the machine on sleep and # values become too skewed). diff_sleep_time = new_sleep_time - path_watcher.sleep_time - path_watcher.sleep_time += (diff_sleep_time / (3.0 * len(self._path_watchers))) + path_watcher.sleep_time += diff_sleep_time / (3.0 * len(self._path_watchers)) if actual_time > 0: self._disposed.wait(actual_time) @@ -348,6 +345,5 @@ def iter_changes(self): # print('new sleep time: %s' % path_watcher.sleep_time) diff = self.target_time_for_notification - actual_time - if diff > 0.: + if diff > 0.0: self._disposed.wait(diff) - diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py index 5c87ac82a..780ff5e4b 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_console_utils.py @@ -2,11 +2,10 @@ import sys import traceback from _pydev_bundle.pydev_imports import xmlrpclib, _queue, Exec -from _pydev_bundle._pydev_calltip_util import get_description +from _pydev_bundle._pydev_calltip_util import get_description from _pydevd_bundle import pydevd_vars from _pydevd_bundle import pydevd_xml -from _pydevd_bundle.pydevd_constants import (IS_JYTHON, NEXT_VALUE_SEPARATOR, get_global_debugger, - silence_warnings_decorator) +from _pydevd_bundle.pydevd_constants import IS_JYTHON, NEXT_VALUE_SEPARATOR, get_global_debugger, silence_warnings_decorator from contextlib import contextmanager from _pydev_bundle import pydev_log from _pydevd_bundle.pydevd_utils import interrupt_main_thread @@ -18,7 +17,6 @@ # BaseStdIn # ======================================================================================================================= class BaseStdIn: - def __init__(self, original_stdin=sys.stdin, *args, **kwargs): try: self.encoding = sys.stdin.encoding @@ -37,7 +35,7 @@ def readline(self, *args, **kwargs): # sys.stderr.write('Cannot readline out of the console evaluation\n') -- don't show anything # This could happen if the user had done input('enter number).<-- upon entering this, that message would appear, # which is not something we want. - return '\n' + return "\n" def write(self, *args, **kwargs): pass # not available StdIn (but it can be expected to be in the stream interface) @@ -67,9 +65,9 @@ def __getattr__(self, item): # StdIn # ======================================================================================================================= class StdIn(BaseStdIn): - ''' - Object to be added to stdin (to emulate it as non-blocking while the next line arrives) - ''' + """ + Object to be added to stdin (to emulate it as non-blocking while the next line arrives) + """ def __init__(self, interpreter, host, client_port, original_stdin=sys.stdin): BaseStdIn.__init__(self, original_stdin) @@ -80,36 +78,36 @@ def __init__(self, interpreter, host, client_port, original_stdin=sys.stdin): def readline(self, *args, **kwargs): # Ok, callback into the client to get the new input try: - server = xmlrpclib.Server('http://%s:%s' % (self.host, self.client_port)) + server = xmlrpclib.Server("http://%s:%s" % (self.host, self.client_port)) requested_input = server.RequestInput() if not requested_input: - return '\n' # Yes, a readline must return something (otherwise we can get an EOFError on the input() call). + return "\n" # Yes, a readline must return something (otherwise we can get an EOFError on the input() call). else: # readline should end with '\n' (not doing so makes IPython 5 remove the last *valid* character). - requested_input += '\n' + requested_input += "\n" return requested_input except KeyboardInterrupt: raise # Let KeyboardInterrupt go through -- #PyDev-816: Interrupting infinite loop in the Interactive Console except: - return '\n' + return "\n" def close(self, *args, **kwargs): pass # expected in StdIn -#======================================================================================================================= +# ======================================================================================================================= # DebugConsoleStdIn -#======================================================================================================================= +# ======================================================================================================================= class DebugConsoleStdIn(BaseStdIn): - ''' - Object to be added to stdin (to emulate it as non-blocking while the next line arrives) - ''' + """ + Object to be added to stdin (to emulate it as non-blocking while the next line arrives) + """ def __init__(self, py_db, original_stdin): - ''' + """ :param py_db: If None, get_global_debugger() is used. - ''' + """ BaseStdIn.__init__(self, original_stdin) self._py_db = py_db self._in_notification = 0 @@ -150,7 +148,6 @@ def read(self, *args, **kwargs): class CodeFragment: - def __init__(self, text, is_single_line=True): self.text = text self.is_single_line = is_single_line @@ -165,7 +162,6 @@ def append(self, code_fragment): # BaseInterpreterInterface # ======================================================================================================================= class BaseInterpreterInterface: - def __init__(self, mainThread, connect_status_queue=None): self.mainThread = mainThread self.interruptable = False @@ -177,17 +173,18 @@ def __init__(self, mainThread, connect_status_queue=None): self.init_mpl_modules_for_patching() def build_banner(self): - return 'print({0})\n'.format(repr(self.get_greeting_msg())) + return "print({0})\n".format(repr(self.get_greeting_msg())) def get_greeting_msg(self): - return 'PyDev console: starting.\n' + return "PyDev console: starting.\n" def init_mpl_modules_for_patching(self): from pydev_ipython.matplotlibtools import activate_matplotlib, activate_pylab, activate_pyplot + self.mpl_modules_for_patching = { "matplotlib": lambda: activate_matplotlib(self.enableGui), "matplotlib.pyplot": activate_pyplot, - "pylab": activate_pylab + "pylab": activate_pylab, } def need_more_for_code(self, source): @@ -195,10 +192,10 @@ def need_more_for_code(self, source): # Strangely even the IPython console is_complete said it was complete # even with a continuation char at the end. - if source.endswith('\\'): + if source.endswith("\\"): return True - if hasattr(self.interpreter, 'is_complete'): + if hasattr(self.interpreter, "is_complete"): return not self.interpreter.is_complete(source) try: # At this point, it should always be single. @@ -209,8 +206,8 @@ def need_more_for_code(self, source): # (in a single line) don't work. # Note that it won't give an error and code will be None (so, it'll # use execMultipleLines in the next call in this case). - symbol = 'single' - code = self.interpreter.compile(source, '', symbol) + symbol = "single" + code = self.interpreter.compile(source, "", symbol) except (OverflowError, SyntaxError, ValueError): # Case 1 return False @@ -243,13 +240,13 @@ def add_exec(self, code_fragment, debugger=None): original_in = sys.stdin try: help = None - if 'pydoc' in sys.modules: - pydoc = sys.modules['pydoc'] # Don't import it if it still is not there. + if "pydoc" in sys.modules: + pydoc = sys.modules["pydoc"] # Don't import it if it still is not there. - if hasattr(pydoc, 'help'): + if hasattr(pydoc, "help"): # You never know how will the API be changed, so, let's code defensively here help = pydoc.help - if not hasattr(help, 'input'): + if not hasattr(help, "input"): help = None except: # Just ignore any error here @@ -270,18 +267,18 @@ def add_exec(self, code_fragment, debugger=None): help = None if not self._input_error_printed: self._input_error_printed = True - sys.stderr.write('\nError when trying to update pydoc.help.input\n') - sys.stderr.write('(help() may not work -- please report this as a bug in the pydev bugtracker).\n\n') + sys.stderr.write("\nError when trying to update pydoc.help.input\n") + sys.stderr.write("(help() may not work -- please report this as a bug in the pydev bugtracker).\n\n") traceback.print_exc() try: self.start_exec() - if hasattr(self, 'debugger'): + if hasattr(self, "debugger"): self.debugger.enable_tracing() more = self.do_add_exec(code_fragment) - if hasattr(self, 'debugger'): + if hasattr(self, "debugger"): self.debugger.disable_tracing() self.finish_exec(more) @@ -307,19 +304,19 @@ def add_exec(self, code_fragment, debugger=None): return more def do_add_exec(self, codeFragment): - ''' + """ Subclasses should override. @return: more (True if more input is needed to complete the statement and False if the statement is complete). - ''' + """ raise NotImplementedError() def get_namespace(self): - ''' + """ Subclasses should override. @return: dict with namespace. - ''' + """ raise NotImplementedError() def __resolve_reference__(self, text): @@ -328,7 +325,7 @@ def __resolve_reference__(self, text): :type text: str """ obj = None - if '.' not in text: + if "." not in text: try: obj = self.get_namespace()[text] except KeyError: @@ -336,22 +333,22 @@ def __resolve_reference__(self, text): if obj is None: try: - obj = self.get_namespace()['__builtins__'][text] + obj = self.get_namespace()["__builtins__"][text] except: pass if obj is None: try: - obj = getattr(self.get_namespace()['__builtins__'], text, None) + obj = getattr(self.get_namespace()["__builtins__"], text, None) except: pass else: try: - last_dot = text.rindex('.') + last_dot = text.rindex(".") parent_context = text[0:last_dot] res = pydevd_vars.eval_in_context(parent_context, self.get_namespace(), self.get_namespace()) - obj = getattr(res, text[last_dot + 1:]) + obj = getattr(res, text[last_dot + 1 :]) except: pass return obj @@ -360,10 +357,10 @@ def getDescription(self, text): try: obj = self.__resolve_reference__(text) if obj is None: - return '' + return "" return get_description(obj) except: - return '' + return "" def do_exec_code(self, code, is_single_line): try: @@ -385,7 +382,7 @@ def execLine(self, line): def execMultipleLines(self, lines): if IS_JYTHON: more = False - for line in lines.split('\n'): + for line in lines.split("\n"): more = self.do_exec_code(line, True) return more else: @@ -411,8 +408,8 @@ def start_exec(self): self.interruptable = True def get_server(self): - if getattr(self, 'host', None) is not None: - return xmlrpclib.Server('http://%s:%s' % (self.host, self.client_port)) + if getattr(self, "host", None) is not None: + return xmlrpclib.Server("http://%s:%s" % (self.host, self.client_port)) else: return None @@ -485,8 +482,8 @@ def loadFullValue(self, seq, scope_attrs): var_objects = [] vars = scope_attrs.split(NEXT_VALUE_SEPARATOR) for var_attrs in vars: - if '\t' in var_attrs: - name, attrs = var_attrs.split('\t', 1) + if "\t" in var_attrs: + name, attrs = var_attrs.split("\t", 1) else: name = var_attrs @@ -499,38 +496,39 @@ def loadFullValue(self, seq, scope_attrs): var_objects.append((var_object, name)) from _pydevd_bundle.pydevd_comm import GetValueAsyncThreadConsole - py_db = getattr(self, 'debugger', None) + + py_db = getattr(self, "debugger", None) if py_db is None: py_db = get_global_debugger() if py_db is None: from pydevd import PyDB + py_db = PyDB() t = GetValueAsyncThreadConsole(py_db, self.get_server(), seq, var_objects) t.start() def changeVariable(self, attr, value): - def do_change_variable(): - Exec('%s=%s' % (attr, value), self.get_namespace(), self.get_namespace()) + Exec("%s=%s" % (attr, value), self.get_namespace(), self.get_namespace()) # Important: it has to be really enabled in the main thread, so, schedule # it to run in the main thread. self.exec_queue.put(do_change_variable) def connectToDebugger(self, debuggerPort, debugger_options=None): - ''' + """ Used to show console with variables connection. Mainly, monkey-patches things in the debugger structure so that the debugger protocol works. - ''' + """ if debugger_options is None: debugger_options = {} env_key = "PYDEVD_EXTRA_ENVS" if env_key in debugger_options: - for (env_name, value) in debugger_options[env_key].items(): + for env_name, value in debugger_options[env_key].items(): existing_value = os.environ.get(env_name, None) if existing_value: os.environ[env_name] = "%s%c%s" % (existing_value, os.path.pathsep, value) @@ -549,10 +547,11 @@ def do_connect_to_debugger(): except: # This happens on Jython embedded in host eclipse traceback.print_exc() - sys.stderr.write('pydevd is not available, cannot connect\n') + sys.stderr.write("pydevd is not available, cannot connect\n") from _pydevd_bundle.pydevd_constants import set_thread_id from _pydev_bundle import pydev_localhost + set_thread_id(threading.current_thread(), "console_main") VIRTUAL_FRAME_ID = "1" # matches PyStackFrameConsole.java @@ -571,22 +570,23 @@ def do_connect_to_debugger(): self.debugger.disable_tracing() except: traceback.print_exc() - sys.stderr.write('Failed to connect to target debugger.\n') + sys.stderr.write("Failed to connect to target debugger.\n") # Register to process commands when idle self.debugrunning = False try: import pydevconsole + pydevconsole.set_debug_hook(self.debugger.process_internal_commands) except: traceback.print_exc() - sys.stderr.write('Version of Python does not support debuggable Interactive Console.\n') + sys.stderr.write("Version of Python does not support debuggable Interactive Console.\n") # Important: it has to be really enabled in the main thread, so, schedule # it to run in the main thread. self.exec_queue.put(do_connect_to_debugger) - return ('connect complete',) + return ("connect complete",) def handshake(self): if self.connect_status_queue is not None: @@ -601,21 +601,23 @@ def hello(self, input_str): return ("Hello eclipse",) def enableGui(self, guiname): - ''' Enable the GUI specified in guiname (see inputhook for list). - As with IPython, enabling multiple GUIs isn't an error, but - only the last one's main loop runs and it may not work - ''' + """Enable the GUI specified in guiname (see inputhook for list). + As with IPython, enabling multiple GUIs isn't an error, but + only the last one's main loop runs and it may not work + """ def do_enable_gui(): from _pydev_bundle.pydev_versioncheck import versionok_for_gui + if versionok_for_gui(): try: from pydev_ipython.inputhook import enable_gui + enable_gui(guiname) except: sys.stderr.write("Failed to enable GUI event loop integration for '%s'\n" % guiname) traceback.print_exc() - elif guiname not in ['none', '', None]: + elif guiname not in ["none", "", None]: # Only print a warning if the guiname was going to do something sys.stderr.write("PyDev console: Python version does not support GUI event loop integration for '%s'\n" % guiname) # Return value does not matter, so return back what was sent @@ -633,7 +635,7 @@ def get_ipython_hidden_vars_dict(self): # FakeFrame # ======================================================================================================================= class FakeFrame: - ''' + """ Used to show console with variables connection. A class to be used as a mock of a frame. - ''' + """ diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py index 519d8d762..4dd91368c 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_import_hook.py @@ -1,4 +1,3 @@ - import sys import traceback from types import ModuleType @@ -8,7 +7,6 @@ class ImportHookManager(ModuleType): - def __init__(self, name, system_import): ModuleType.__init__(self, name) self._system_import = system_import @@ -35,6 +33,6 @@ def do_import(self, name, *args, **kwargs): return module -import_hook_manager = ImportHookManager(__name__ + '.import_hook', builtins.__import__) +import_hook_manager = ImportHookManager(__name__ + ".import_hook", builtins.__import__) builtins.__import__ = import_hook_manager.do_import sys.modules[import_hook_manager.__name__] = import_hook_manager diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py index edc242908..4ee2868c4 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_imports.py @@ -10,4 +10,3 @@ from _pydevd_bundle.pydevd_exec2 import Exec from urllib.parse import quote, quote_plus, unquote_plus # @UnresolvedImport - diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py index a1221f972..72b16791c 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console.py @@ -9,13 +9,13 @@ from _pydev_bundle.pydev_ipython_console_011 import get_pydev_frontend -#======================================================================================================================= +# ======================================================================================================================= # InterpreterInterface -#======================================================================================================================= +# ======================================================================================================================= class InterpreterInterface(BaseInterpreterInterface): - ''' - The methods in this class should be registered in the xml-rpc server. - ''' + """ + The methods in this class should be registered in the xml-rpc server. + """ def __init__(self, host, client_port, main_thread, show_banner=True, connect_status_queue=None): BaseInterpreterInterface.__init__(self, main_thread, connect_status_queue) @@ -37,13 +37,13 @@ def get_greeting_msg(self): def do_add_exec(self, code_fragment): self.notify_about_magic() - if code_fragment.text.rstrip().endswith('??'): - print('IPython-->') + if code_fragment.text.rstrip().endswith("??"): + print("IPython-->") try: res = bool(self.interpreter.add_exec(code_fragment.text)) finally: - if code_fragment.text.rstrip().endswith('??'): - print('<--IPython') + if code_fragment.text.rstrip().endswith("??"): + print("<--IPython") return res @@ -75,23 +75,21 @@ def notify_about_magic(self): def get_ipython_hidden_vars_dict(self): try: - if hasattr(self.interpreter, 'ipython') and hasattr(self.interpreter.ipython, 'user_ns_hidden'): + if hasattr(self.interpreter, "ipython") and hasattr(self.interpreter.ipython, "user_ns_hidden"): user_ns_hidden = self.interpreter.ipython.user_ns_hidden if isinstance(user_ns_hidden, dict): # Since IPython 2 dict `user_ns_hidden` contains hidden variables and values user_hidden_dict = user_ns_hidden.copy() else: # In IPython 1.x `user_ns_hidden` used to be a set with names of hidden variables - user_hidden_dict = dict([(key, val) for key, val in self.interpreter.ipython.user_ns.items() - if key in user_ns_hidden]) + user_hidden_dict = dict([(key, val) for key, val in self.interpreter.ipython.user_ns.items() if key in user_ns_hidden]) # while `_`, `__` and `___` were not initialized, they are not presented in `user_ns_hidden` - user_hidden_dict.setdefault('_', '') - user_hidden_dict.setdefault('__', '') - user_hidden_dict.setdefault('___', '') + user_hidden_dict.setdefault("_", "") + user_hidden_dict.setdefault("__", "") + user_hidden_dict.setdefault("___", "") return user_hidden_dict except: # Getting IPython variables shouldn't break loading frame variables traceback.print_exc() - diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py index eaf4738ba..dabf1f380 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_ipython_console_011.py @@ -27,6 +27,7 @@ from IPython.utils.strdispatch import StrDispatch import IPython.core.release as IPythonRelease from IPython.terminal.interactiveshell import TerminalInteractiveShell + try: from traitlets import CBool, Unicode except ImportError: @@ -37,24 +38,23 @@ default_pydev_banner_parts = default_banner_parts -default_pydev_banner = ''.join(default_pydev_banner_parts) +default_pydev_banner = "".join(default_pydev_banner_parts) def show_in_pager(self, strng, *args, **kwargs): - """ Run a string through pager """ + """Run a string through pager""" # On PyDev we just output the string, there are scroll bars in the console # to handle "paging". This is the same behaviour as when TERM==dump (see # page.py) # for compatibility with mime-bundle form: if isinstance(strng, dict): - strng = strng.get('text/plain', strng) + strng = strng.get("text/plain", strng) print(strng) def create_editor_hook(pydev_host, pydev_client_port): - def call_editor(filename, line=0, wait=True): - """ Open an editor in PyDev """ + """Open an editor in PyDev""" if line is None: line = 0 @@ -66,7 +66,7 @@ def call_editor(filename, line=0, wait=True): # sys.__stderr__.write('Calling editor at: %s:%s\n' % (pydev_host, pydev_client_port)) # Tell PyDev to open the editor - server = xmlrpclib.Server('http://%s:%s' % (pydev_host, pydev_client_port)) + server = xmlrpclib.Server("http://%s:%s" % (pydev_host, pydev_client_port)) server.IPythonEditor(filename, str(line)) if wait: @@ -76,10 +76,9 @@ def call_editor(filename, line=0, wait=True): class PyDevIPCompleter(IPCompleter): - def __init__(self, *args, **kwargs): - """ Create a Completer that reuses the advanced completion support of PyDev - in addition to the completion support provided by IPython """ + """Create a Completer that reuses the advanced completion support of PyDev + in addition to the completion support provided by IPython""" IPCompleter.__init__(self, *args, **kwargs) # Use PyDev for python matches, see getCompletions below if self.python_matches in self.matchers: @@ -88,10 +87,9 @@ def __init__(self, *args, **kwargs): class PyDevIPCompleter6(IPCompleter): - def __init__(self, *args, **kwargs): - """ Create a Completer that reuses the advanced completion support of PyDev - in addition to the completion support provided by IPython """ + """Create a Completer that reuses the advanced completion support of PyDev + in addition to the completion support provided by IPython""" IPCompleter.__init__(self, *args, **kwargs) @property @@ -112,9 +110,7 @@ def matchers(self, value): class PyDevTerminalInteractiveShell(TerminalInteractiveShell): - banner1 = Unicode(default_pydev_banner, config=True, - help="""The part of the banner to be printed before the profile""" - ) + banner1 = Unicode(default_pydev_banner, config=True, help="""The part of the banner to be printed before the profile""") # TODO term_title: (can PyDev's title be changed???, see terminal.py for where to inject code, in particular set_term_title as used by %cd) # for now, just disable term_title @@ -145,18 +141,18 @@ class PyDevTerminalInteractiveShell(TerminalInteractiveShell): # In the PyDev Console, GUI control is done via hookable XML-RPC server @staticmethod def enable_gui(gui=None, app=None): - """Switch amongst GUI input hooks by name. - """ + """Switch amongst GUI input hooks by name.""" # Deferred import from pydev_ipython.inputhook import enable_gui as real_enable_gui + try: return real_enable_gui(gui, app) except ValueError as e: raise UsageError("%s" % e) - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to hooks - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def init_history(self): # Disable history so that we don't have an additional thread for that @@ -166,11 +162,11 @@ def init_history(self): def init_hooks(self): super(PyDevTerminalInteractiveShell, self).init_hooks() - self.set_hook('show_in_pager', show_in_pager) + self.set_hook("show_in_pager", show_in_pager) - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to exceptions - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def showtraceback(self, exc_tuple=None, *args, **kwargs): # IPython does a lot of clever stuff with Exceptions. However mostly @@ -190,53 +186,50 @@ def showtraceback(self, exc_tuple=None, *args, **kwargs): if tb is not None: traceback.print_exception(etype, value, tb) - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to text completion - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # The way to construct an IPCompleter changed in most versions, # so we have a custom, per version implementation of the construction def _new_completer_100(self): - completer = PyDevIPCompleter(shell=self, - namespace=self.user_ns, - global_namespace=self.user_global_ns, - alias_table=self.alias_manager.alias_table, - use_readline=self.has_readline, - parent=self, - ) + completer = PyDevIPCompleter( + shell=self, + namespace=self.user_ns, + global_namespace=self.user_global_ns, + alias_table=self.alias_manager.alias_table, + use_readline=self.has_readline, + parent=self, + ) return completer def _new_completer_234(self): # correct for IPython versions 2.x, 3.x, 4.x - completer = PyDevIPCompleter(shell=self, - namespace=self.user_ns, - global_namespace=self.user_global_ns, - use_readline=self.has_readline, - parent=self, - ) + completer = PyDevIPCompleter( + shell=self, + namespace=self.user_ns, + global_namespace=self.user_global_ns, + use_readline=self.has_readline, + parent=self, + ) return completer def _new_completer_500(self): - completer = PyDevIPCompleter(shell=self, - namespace=self.user_ns, - global_namespace=self.user_global_ns, - use_readline=False, - parent=self - ) + completer = PyDevIPCompleter( + shell=self, namespace=self.user_ns, global_namespace=self.user_global_ns, use_readline=False, parent=self + ) return completer def _new_completer_600(self): - completer = PyDevIPCompleter6(shell=self, - namespace=self.user_ns, - global_namespace=self.user_global_ns, - use_readline=False, - parent=self - ) + completer = PyDevIPCompleter6( + shell=self, namespace=self.user_ns, global_namespace=self.user_global_ns, use_readline=False, parent=self + ) return completer def add_completer_hooks(self): from IPython.core.completerlib import module_completer, magic_run_completer, cd_completer + try: from IPython.core.completerlib import reset_completer except ImportError: @@ -245,16 +238,16 @@ def add_completer_hooks(self): self.configurables.append(self.Completer) # Add custom completers to the basic ones built into IPCompleter - sdisp = self.strdispatchers.get('complete_command', StrDispatch()) - self.strdispatchers['complete_command'] = sdisp + sdisp = self.strdispatchers.get("complete_command", StrDispatch()) + self.strdispatchers["complete_command"] = sdisp self.Completer.custom_completers = sdisp - self.set_hook('complete_command', module_completer, str_key='import') - self.set_hook('complete_command', module_completer, str_key='from') - self.set_hook('complete_command', magic_run_completer, str_key='%run') - self.set_hook('complete_command', cd_completer, str_key='%cd') + self.set_hook("complete_command", module_completer, str_key="import") + self.set_hook("complete_command", module_completer, str_key="from") + self.set_hook("complete_command", magic_run_completer, str_key="%run") + self.set_hook("complete_command", cd_completer, str_key="%cd") if reset_completer: - self.set_hook('complete_command', reset_completer, str_key='%reset') + self.set_hook("complete_command", reset_completer, str_key="%reset") def init_completer(self): """Initialize the completion machinery. @@ -277,7 +270,7 @@ def init_completer(self): elif IPythonRelease._version_major >= 1: self.Completer = self._new_completer_100() - if hasattr(self.Completer, 'use_jedi'): + if hasattr(self.Completer, "use_jedi"): self.Completer.use_jedi = False self.add_completer_hooks() @@ -289,20 +282,20 @@ def init_completer(self): if self.has_readline: self.set_readline_completer() - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to aliases - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def init_alias(self): # InteractiveShell defines alias's we want, but TerminalInteractiveShell defines # ones we don't. So don't use super and instead go right to InteractiveShell InteractiveShell.init_alias(self) - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to exiting - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def ask_exit(self): - """ Ask the shell to exit. Can be overiden and used as a callback. """ + """Ask the shell to exit. Can be overiden and used as a callback.""" # TODO PyDev's console does not have support from the Python side to exit # the console. If user forces the exit (with sys.exit()) then the console # simply reports errors. e.g.: @@ -323,11 +316,11 @@ def ask_exit(self): # >>> # super(PyDevTerminalInteractiveShell, self).ask_exit() - print('To exit the PyDev Console, terminate the console within IDE.') + print("To exit the PyDev Console, terminate the console within IDE.") - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- # Things related to magics - #------------------------------------------------------------------------- + # ------------------------------------------------------------------------- def init_magics(self): super(PyDevTerminalInteractiveShell, self).init_magics() @@ -337,16 +330,15 @@ def init_magics(self): InteractiveShellABC.register(PyDevTerminalInteractiveShell) # @UndefinedVariable -#======================================================================================================================= +# ======================================================================================================================= # _PyDevFrontEnd -#======================================================================================================================= +# ======================================================================================================================= class _PyDevFrontEnd: - version = release.__version__ def __init__(self): # Create and initialize our IPython instance. - if hasattr(PyDevTerminalInteractiveShell, '_instance') and PyDevTerminalInteractiveShell._instance is not None: + if hasattr(PyDevTerminalInteractiveShell, "_instance") and PyDevTerminalInteractiveShell._instance is not None: self.ipython = PyDevTerminalInteractiveShell._instance else: self.ipython = PyDevTerminalInteractiveShell.instance() @@ -368,7 +360,7 @@ def update(self, globals, locals): self.ipython.user_global_ns.update(globals) self.ipython.user_ns = locals - if hasattr(self.ipython, 'history_manager') and hasattr(self.ipython.history_manager, 'save_thread'): + if hasattr(self.ipython, "history_manager") and hasattr(self.ipython.history_manager, "save_thread"): self.ipython.history_manager.save_thread.pydev_do_not_trace = True # don't trace ipython history saving thread def complete(self, string): @@ -384,7 +376,7 @@ def complete(self, string): def is_complete(self, string): # Based on IPython 0.10.1 - if string in ('', '\n'): + if string in ("", "\n"): # Prefiltering, eg through ipython0, may return an empty # string although some operations have been accomplished. We # thus want to consider an empty string as a complete @@ -396,15 +388,11 @@ def is_complete(self, string): # complete (except if '\' was used). # This should probably be done in a different place (like # maybe 'prefilter_input' method? For now, this works. - clean_string = string.rstrip('\n') - if not clean_string.endswith('\\'): - clean_string += '\n\n' - - is_complete = codeop.compile_command( - clean_string, - "", - "exec" - ) + clean_string = string.rstrip("\n") + if not clean_string.endswith("\\"): + clean_string += "\n\n" + + is_complete = codeop.compile_command(clean_string, "", "exec") except Exception: # XXX: Hack: return True so that the # code gets executed and the error captured. @@ -416,18 +404,18 @@ def getCompletions(self, text, act_tok): # IPython only gives context free list of completions, while PyDev # gives detailed information about completions. try: - TYPE_IPYTHON = '11' - TYPE_IPYTHON_MAGIC = '12' + TYPE_IPYTHON = "11" + TYPE_IPYTHON_MAGIC = "12" _line, ipython_completions = self.complete(text) from _pydev_bundle._pydev_completer import Completer + completer = Completer(self.get_namespace(), None) ret = completer.complete(act_tok) append = ret.append ip = self.ipython pydev_completions = set([f[0] for f in ret]) for ipython_completion in ipython_completions: - # PyCharm was not expecting completions with '%'... # Could be fixed in the backend, but it's probably better # fixing it at PyCharm. @@ -437,17 +425,19 @@ def getCompletions(self, text, act_tok): if ipython_completion not in pydev_completions: pydev_completions.add(ipython_completion) inf = ip.object_inspect(ipython_completion) - if inf['type_name'] == 'Magic function': + if inf["type_name"] == "Magic function": pydev_type = TYPE_IPYTHON_MAGIC else: pydev_type = TYPE_IPYTHON - pydev_doc = inf['docstring'] + pydev_doc = inf["docstring"] if pydev_doc is None: - pydev_doc = '' - append((ipython_completion, pydev_doc, '', pydev_type)) + pydev_doc = "" + append((ipython_completion, pydev_doc, "", pydev_type)) return ret except: - import traceback;traceback.print_exc() + import traceback + + traceback.print_exc() return [] def get_namespace(self): @@ -460,7 +450,7 @@ def add_exec(self, line): if self._curr_exec_lines: self._curr_exec_lines.append(line) - buf = '\n'.join(self._curr_exec_lines) + buf = "\n".join(self._curr_exec_lines) if self.is_complete(buf): self._curr_exec_line += 1 @@ -470,7 +460,6 @@ def add_exec(self, line): return True # needs more else: - if not self.is_complete(line): # Did not execute self._curr_exec_lines.append(line) @@ -488,7 +477,7 @@ def is_automagic(self): return self.ipython.automagic def get_greeting_msg(self): - return 'PyDev console: using IPython %s\n' % self.version + return "PyDev console: using IPython %s\n" % self.version class _PyDevFrontEndContainer: @@ -506,11 +495,10 @@ def get_pydev_frontend(pydev_host, pydev_client_port): # Back channel to PyDev to open editors (in the future other # info may go back this way. This is the same channel that is # used to get stdin, see StdIn in pydev_console_utils) - _PyDevFrontEndContainer._instance.ipython.hooks['editor'] = create_editor_hook(pydev_host, pydev_client_port) + _PyDevFrontEndContainer._instance.ipython.hooks["editor"] = create_editor_hook(pydev_host, pydev_client_port) # Note: setting the callback directly because setting it with set_hook would actually create a chain instead # of ovewriting at each new call). # _PyDevFrontEndContainer._instance.ipython.set_hook('editor', create_editor_hook(pydev_host, pydev_client_port)) return _PyDevFrontEndContainer._instance - diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py index d949ba256..c1902014e 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_is_thread_alive.py @@ -4,20 +4,20 @@ # circumstances). # It is required to debug threads started by start_new_thread in Python 3.4 _temp = threading.Thread() -if hasattr(_temp, '_is_stopped'): # Python 3.x has this +if hasattr(_temp, "_is_stopped"): # Python 3.x has this def is_thread_alive(t): return not t._is_stopped -elif hasattr(_temp, '_Thread__stopped'): # Python 2.x has this +elif hasattr(_temp, "_Thread__stopped"): # Python 2.x has this def is_thread_alive(t): return not t._Thread__stopped else: - # Jython wraps a native java thread and thus only obeys the public API. def is_thread_alive(t): return t.is_alive() + del _temp diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py index 0d2838de5..d25809236 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_localhost.py @@ -1,20 +1,20 @@ from _pydev_bundle._pydev_saved_modules import socket import sys -IS_JYTHON = sys.platform.find('java') != -1 +IS_JYTHON = sys.platform.find("java") != -1 _cache = None def get_localhost(): - ''' + """ Should return 127.0.0.1 in ipv4 and ::1 in ipv6 localhost is not used because on windows vista/windows 7, there can be issues where the resolving doesn't work properly and takes a lot of time (had this issue on the pyunit server). Using the IP directly solves the problem. - ''' + """ # TODO: Needs better investigation! global _cache @@ -22,14 +22,14 @@ def get_localhost(): try: for addr_info in socket.getaddrinfo("localhost", 80, 0, 0, socket.SOL_TCP): config = addr_info[4] - if config[0] == '127.0.0.1': - _cache = '127.0.0.1' + if config[0] == "127.0.0.1": + _cache = "127.0.0.1" return _cache except: # Ok, some versions of Python don't have getaddrinfo or SOL_TCP... Just consider it 127.0.0.1 in this case. - _cache = '127.0.0.1' + _cache = "127.0.0.1" else: - _cache = 'localhost' + _cache = "localhost" return _cache @@ -42,6 +42,7 @@ def get_socket_names(n_sockets, close=False): # Although the option which would be pure java *should* work for Jython, the socket being returned is still 0 # (i.e.: it doesn't give the local port bound, only the original port, which was 0). from java.net import ServerSocket + sock = ServerSocket(0) socket_name = get_localhost(), sock.getLocalPort() else: @@ -63,5 +64,5 @@ def get_socket_name(close=False): return get_socket_names(1, close)[0] -if __name__ == '__main__': +if __name__ == "__main__": print(get_socket_name()) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py index 715519569..2fb0fc267 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_log.py @@ -1,5 +1,4 @@ -from _pydevd_bundle.pydevd_constants import DebugInfoHolder, SHOW_COMPILE_CYTHON_COMMAND_LINE, NULL, LOG_TIME, \ - ForkSafeLock +from _pydevd_bundle.pydevd_constants import DebugInfoHolder, SHOW_COMPILE_CYTHON_COMMAND_LINE, NULL, LOG_TIME, ForkSafeLock from contextlib import contextmanager import traceback import os @@ -15,12 +14,12 @@ class _LoggingGlobals(object): def initialize_debug_stream(reinitialize=False): - ''' + """ :param bool reinitialize: Reinitialize is used to update the debug stream after a fork (thus, if it wasn't initialized, we don't need to do anything, just wait for the first regular log call to initialize). - ''' + """ if reinitialize: if not _LoggingGlobals._debug_stream_initialized: return @@ -53,7 +52,7 @@ def initialize_debug_stream(reinitialize=False): try: target_file = DebugInfoHolder.PYDEVD_DEBUG_FILE debug_file = _compute_filename_with_pid(target_file) - _LoggingGlobals._debug_stream = open(debug_file, 'w') + _LoggingGlobals._debug_stream = open(debug_file, "w") _LoggingGlobals._debug_stream_filename = debug_file except Exception: _LoggingGlobals._debug_stream = sys.stderr @@ -73,10 +72,10 @@ def _compute_filename_with_pid(target_file, pid=None): name, ext = os.path.splitext(basename) if pid is None: pid = os.getpid() - return os.path.join(dirname, '%s.%s%s' % (name, pid, ext)) + return os.path.join(dirname, "%s.%s%s" % (name, pid, ext)) -def log_to(log_file:str, log_level:int=3) -> None: +def log_to(log_file: str, log_level: int = 3) -> None: with _LoggingGlobals._initialize_lock: # Can be set directly. DebugInfoHolder.DEBUG_TRACE_LEVEL = log_level @@ -107,9 +106,9 @@ def list_log_files(pydevd_debug_file): @contextmanager def log_context(trace_level, stream): - ''' + """ To be used to temporarily change the logging settings. - ''' + """ with _LoggingGlobals._initialize_lock: original_trace_level = DebugInfoHolder.DEBUG_TRACE_LEVEL original_debug_stream = _LoggingGlobals._debug_stream @@ -132,6 +131,7 @@ def log_context(trace_level, stream): import time + _last_log_time = time.time() # Set to True to show pid in each logged message (usually the file has it, but sometimes it's handy). @@ -139,14 +139,14 @@ def log_context(trace_level, stream): def _pydevd_log(level, msg, *args): - ''' + """ Levels are: 0 most serious warnings/errors (always printed) 1 warnings/significant events 2 informational trace 3 verbose mode - ''' + """ if level <= DebugInfoHolder.DEBUG_TRACE_LEVEL: # yes, we can have errors printing if the console of the program has been finished (and we're still trying to print something) try: @@ -154,19 +154,25 @@ def _pydevd_log(level, msg, *args): if args: msg = msg % args except: - msg = '%s - %s' % (msg, args) + msg = "%s - %s" % (msg, args) if LOG_TIME: global _last_log_time new_log_time = time.time() time_diff = new_log_time - _last_log_time _last_log_time = new_log_time - msg = '%.2fs - %s\n' % (time_diff, msg,) + msg = "%.2fs - %s\n" % ( + time_diff, + msg, + ) else: - msg = '%s\n' % (msg,) + msg = "%s\n" % (msg,) if _LOG_PID: - msg = '<%s> - %s\n' % (os.getpid(), msg,) + msg = "<%s> - %s\n" % ( + os.getpid(), + msg, + ) try: try: @@ -175,14 +181,14 @@ def _pydevd_log(level, msg, *args): except TypeError: if isinstance(msg, bytes): # Depending on the StringIO flavor, it may only accept unicode. - msg = msg.decode('utf-8', 'replace') + msg = msg.decode("utf-8", "replace") _LoggingGlobals._debug_stream.write(msg) except UnicodeEncodeError: # When writing to the stream it's possible that the string can't be represented # in the encoding expected (in this case, convert it to the stream encoding # or ascii if we can't find one suitable using a suitable replace). - encoding = getattr(_LoggingGlobals._debug_stream, 'encoding', 'ascii') - msg = msg.encode(encoding, 'backslashreplace') + encoding = getattr(_LoggingGlobals._debug_stream, "encoding", "ascii") + msg = msg.encode(encoding, "backslashreplace") msg = msg.decode(encoding) _LoggingGlobals._debug_stream.write(msg) @@ -192,7 +198,7 @@ def _pydevd_log(level, msg, *args): return True -def _pydevd_log_exception(msg='', *args): +def _pydevd_log_exception(msg="", *args): if msg or args: _pydevd_log(0, msg, *args) try: @@ -225,7 +231,7 @@ def critical(msg, *args): _pydevd_log(0, msg, *args) -def exception(msg='', *args): +def exception(msg="", *args): try: _pydevd_log_exception(msg, *args) except: @@ -242,7 +248,7 @@ def error_once(msg, *args): else: message = str(msg) except: - message = '%s - %s' % (msg, args) + message = "%s - %s" % (msg, args) if message not in _LoggingGlobals._warn_once_map: _LoggingGlobals._warn_once_map[message] = True @@ -256,7 +262,7 @@ def exception_once(msg, *args): else: message = str(msg) except: - message = '%s - %s' % (msg, args) + message = "%s - %s" % (msg, args) if message not in _LoggingGlobals._warn_once_map: _LoggingGlobals._warn_once_map[message] = True @@ -271,6 +277,8 @@ def debug_once(msg, *args): def show_compile_cython_command_line(): if SHOW_COMPILE_CYTHON_COMMAND_LINE: dirname = os.path.dirname(os.path.dirname(__file__)) - error_once("warning: Debugger speedups using cython not found. Run '\"%s\" \"%s\" build_ext --inplace' to build.", - sys.executable, os.path.join(dirname, 'setup_pydevd_cython.py')) - + error_once( + 'warning: Debugger speedups using cython not found. Run \'"%s" "%s" build_ext --inplace\' to build.', + sys.executable, + os.path.join(dirname, "setup_pydevd_cython.py"), + ) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py index d5fe01d2a..915891f41 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey.py @@ -3,8 +3,16 @@ import re import sys from _pydev_bundle._pydev_saved_modules import threading -from _pydevd_bundle.pydevd_constants import get_global_debugger, IS_WINDOWS, IS_JYTHON, get_current_thread_id, \ - sorted_dict_repr, set_global_debugger, DebugInfoHolder +from _pydevd_bundle.pydevd_constants import ( + get_global_debugger, + IS_WINDOWS, + IS_JYTHON, + get_current_thread_id, + sorted_dict_repr, + set_global_debugger, + DebugInfoHolder, + PYDEVD_USE_SYS_MONITORING, +) from _pydev_bundle import pydev_log from contextlib import contextmanager from _pydevd_bundle import pydevd_constants, pydevd_defaults @@ -16,9 +24,9 @@ except ImportError: Path = None -#=============================================================================== +# =============================================================================== # Things that are dependent on having the pydevd debugger -#=============================================================================== +# =============================================================================== pydev_src_dir = os.path.dirname(os.path.dirname(__file__)) @@ -35,7 +43,7 @@ def skip_subprocess_arg_patch(): def _get_apply_arg_patching(): - return getattr(_arg_patch, 'apply_arg_patching', True) + return getattr(_arg_patch, "apply_arg_patching", True) def _get_setup_updated_with_protocol_and_ppid(setup, is_exec=False): @@ -67,32 +75,31 @@ def _get_setup_updated_with_protocol_and_ppid(setup, is_exec=False): setup[pydevd_constants.ARGUMENT_HTTP_PROTOCOL] = True else: - pydev_log.debug('Unexpected protocol: %s', protocol) + pydev_log.debug("Unexpected protocol: %s", protocol) mode = pydevd_defaults.PydevdCustomization.DEBUG_MODE if mode: - setup['debug-mode'] = mode + setup["debug-mode"] = mode preimport = pydevd_defaults.PydevdCustomization.PREIMPORT if preimport: - setup['preimport'] = preimport + setup["preimport"] = preimport if DebugInfoHolder.PYDEVD_DEBUG_FILE: - setup['log-file'] = DebugInfoHolder.PYDEVD_DEBUG_FILE + setup["log-file"] = DebugInfoHolder.PYDEVD_DEBUG_FILE if DebugInfoHolder.DEBUG_TRACE_LEVEL: - setup['log-level'] = DebugInfoHolder.DEBUG_TRACE_LEVEL + setup["log-level"] = DebugInfoHolder.DEBUG_TRACE_LEVEL return setup class _LastFutureImportFinder(ast.NodeVisitor): - def __init__(self): self.last_future_import_found = None def visit_ImportFrom(self, node): - if node.module == '__future__': + if node.module == "__future__": self.last_future_import_found = node @@ -109,7 +116,7 @@ def _get_offset_from_line_col(code, line, col): def _separate_future_imports(code): - ''' + """ :param code: The code from where we want to get the __future__ imports (note that it's possible that there's no such entry). @@ -120,18 +127,18 @@ def _separate_future_imports(code): If the future import is not available a return such as ('', code) is given, otherwise, the future import will end with a ';' (so that it can be put right before the pydevd attach code). - ''' + """ try: - node = ast.parse(code, '', 'exec') + node = ast.parse(code, "", "exec") visitor = _LastFutureImportFinder() visitor.visit(node) if visitor.last_future_import_found is None: - return '', code + return "", code node = visitor.last_future_import_found offset = -1 - if hasattr(node, 'end_lineno') and hasattr(node, 'end_col_offset'): + if hasattr(node, "end_lineno") and hasattr(node, "end_col_offset"): # Python 3.8 onwards has these (so, use when possible). line, col = node.end_lineno, node.end_col_offset offset = _get_offset_from_line_col(code, line - 1, col) # ast lines are 1-based, make it 0-based. @@ -151,7 +158,7 @@ def _separate_future_imports(code): if offset >= 0: for i in range(offset, len(code)): - if code[i] in (' ', '\t', ';', ')', '\n'): + if code[i] in (" ", "\t", ";", ")", "\n"): offset += 1 else: break @@ -162,21 +169,21 @@ def _separate_future_imports(code): # Now, put '\n' lines back into the code remainder (we had to search for # `\n)`, but in case we just got the `\n`, it should be at the remainder, # not at the future import. - while future_import.endswith('\n'): + while future_import.endswith("\n"): future_import = future_import[:-1] - code_remainder = '\n' + code_remainder + code_remainder = "\n" + code_remainder - if not future_import.endswith(';'): - future_import += ';' + if not future_import.endswith(";"): + future_import += ";" return future_import, code_remainder # This shouldn't happen... - pydev_log.info('Unable to find line %s in code:\n%r', line, code) - return '', code + pydev_log.info("Unable to find line %s in code:\n%r", line, code) + return "", code except: - pydev_log.exception('Error getting from __future__ imports from: %r', code) - return '', code + pydev_log.exception("Error getting from __future__ imports from: %r", code) + return "", code def _get_python_c_args(host, port, code, args, setup): @@ -185,36 +192,39 @@ def _get_python_c_args(host, port, code, args, setup): # i.e.: We want to make the repr sorted so that it works in tests. setup_repr = setup if setup is None else (sorted_dict_repr(setup)) - future_imports = '' - if '__future__' in code: + future_imports = "" + if "__future__" in code: # If the code has a __future__ import, we need to be able to strip the __future__ # imports from the code and add them to the start of our code snippet. future_imports, code = _separate_future_imports(code) - return ("%simport sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config(%r, %r); " - "pydevd.settrace(host=%r, port=%s, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=%r, client_access_token=%r, __setup_holder__=%s); " - "%s" - ) % ( - future_imports, - pydev_src_dir, - pydevd_constants.get_protocol(), - PydevdCustomization.DEBUG_MODE, - host, - port, - setup.get('access-token'), - setup.get('client-access-token'), - setup_repr, - code) + return ( + "%simport sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config(%r, %r); " + "pydevd.settrace(host=%r, port=%s, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=%r, client_access_token=%r, __setup_holder__=%s); " + "%s" + ) % ( + future_imports, + pydev_src_dir, + pydevd_constants.get_protocol(), + PydevdCustomization.DEBUG_MODE, + host, + port, + setup.get("access-token"), + setup.get("client-access-token"), + setup_repr, + code, + ) def _get_host_port(): import pydevd + host, port = pydevd.dispatch() return host, port def _is_managed_arg(arg): - pydevd_py = _get_str_type_compatible(arg, 'pydevd.py') + pydevd_py = _get_str_type_compatible(arg, "pydevd.py") if arg.endswith(pydevd_py): return True return False @@ -225,22 +235,24 @@ def _on_forked_process(setup_tracing=True): pydev_log.initialize_debug_stream(reinitialize=True) if setup_tracing: - pydev_log.debug('pydevd on forked process: %s', os.getpid()) + pydev_log.debug("pydevd on forked process: %s", os.getpid()) import pydevd + pydevd.threadingCurrentThread().__pydevd_main_thread = True pydevd.settrace_forked(setup_tracing=setup_tracing) def _on_set_trace_for_new_thread(global_debugger): if global_debugger is not None: - global_debugger.enable_tracing() + if not PYDEVD_USE_SYS_MONITORING: + global_debugger.enable_tracing() def _get_str_type_compatible(s, args): - ''' + """ This method converts `args` to byte/unicode based on the `s' type. - ''' + """ if isinstance(args, (list, tuple)): ret = [] for arg in args: @@ -248,30 +260,30 @@ def _get_str_type_compatible(s, args): ret.append(arg) else: if isinstance(s, bytes): - ret.append(arg.encode('utf-8')) + ret.append(arg.encode("utf-8")) else: - ret.append(arg.decode('utf-8')) + ret.append(arg.decode("utf-8")) return ret else: if type(s) == type(args): return args else: if isinstance(s, bytes): - return args.encode('utf-8') + return args.encode("utf-8") else: - return args.decode('utf-8') + return args.decode("utf-8") -#=============================================================================== +# =============================================================================== # Things related to monkey-patching -#=============================================================================== +# =============================================================================== def is_python(path): single_quote, double_quote = _get_str_type_compatible(path, ["'", '"']) if path.endswith(single_quote) or path.endswith(double_quote): - path = path[1:len(path) - 1] + path = path[1 : len(path) - 1] filename = os.path.basename(path).lower() - for name in _get_str_type_compatible(filename, ['python', 'jython', 'pypy']): + for name in _get_str_type_compatible(filename, ["python", "jython", "pypy"]): if filename.find(name) != -1: return True @@ -342,8 +354,8 @@ def quote_arg_win32(arg): # # N backslashes in any other position remain as is. - arg = re.sub(fix_type(r'(\\*)\"'), fix_type(r'\1\1\\"'), arg) - arg = re.sub(fix_type(r'(\\*)$'), fix_type(r'\1\1'), arg) + arg = re.sub(fix_type(r"(\\*)\""), fix_type(r'\1\1\\"'), arg) + arg = re.sub(fix_type(r"(\\*)$"), fix_type(r"\1\1"), arg) return fix_type('"') + arg + fix_type('"') @@ -355,21 +367,21 @@ def quote_args(args): def patch_args(args, is_exec=False): - ''' + """ :param list args: Arguments to patch. :param bool is_exec: If it's an exec, the current process will be replaced (this means we have to keep the same ppid). - ''' + """ try: pydev_log.debug("Patching args: %s", args) original_args = args try: unquoted_args = remove_quotes_from_args(args) except InvalidTypeInArgsException as e: - pydev_log.info('Unable to monkey-patch subprocess arguments because a type found in the args is invalid: %s', e) + pydev_log.info("Unable to monkey-patch subprocess arguments because a type found in the args is invalid: %s", e) return original_args # Internally we should reference original_args (if we want to return them) or unquoted_args @@ -377,6 +389,7 @@ def patch_args(args, is_exec=False): del args from pydevd import SetupHolder + if not unquoted_args: return original_args @@ -386,11 +399,11 @@ def patch_args(args, is_exec=False): # Note: we create a copy as string to help with analyzing the arguments, but # the final list should have items from the unquoted_args as they were initially. - args_as_str = _get_str_type_compatible('', unquoted_args) + args_as_str = _get_str_type_compatible("", unquoted_args) params_with_value_in_separate_arg = ( - '--check-hash-based-pycs', - '--jit' # pypy option + "--check-hash-based-pycs", + "--jit", # pypy option ) # All short switches may be combined together. The ones below require a value and the @@ -412,17 +425,17 @@ def patch_args(args, is_exec=False): # # python -O -Q old -v -c "import sys;print(sys)" - params_with_combinable_arg = set(('W', 'X', 'Q', 'c', 'm')) + params_with_combinable_arg = set(("W", "X", "Q", "c", "m")) module_name = None - before_module_flag = '' + before_module_flag = "" module_name_i_start = -1 module_name_i_end = -1 code = None code_i = -1 code_i_end = -1 - code_flag = '' + code_flag = "" filename = None filename_i = -1 @@ -433,8 +446,8 @@ def patch_args(args, is_exec=False): ignore_next = False continue - if arg_as_str.startswith('-'): - if arg_as_str == '-': + if arg_as_str.startswith("-"): + if arg_as_str == "-": # Contents will be read from the stdin. This is not currently handled. pydev_log.debug('Unable to fix arguments to attach debugger on subprocess when reading from stdin ("python ... -").') return original_args @@ -446,40 +459,39 @@ def patch_args(args, is_exec=False): break_out = False for j, c in enumerate(arg_as_str): - # i.e.: Python supports -X faulthandler as well as -Xfaulthandler # (in one case we have to ignore the next and in the other we don't # have to ignore it). if c in params_with_combinable_arg: - remainder = arg_as_str[j + 1:] + remainder = arg_as_str[j + 1 :] if not remainder: ignore_next = True - if c == 'm': + if c == "m": # i.e.: Something as # python -qm test # python -m test # python -qmtest before_module_flag = arg_as_str[:j] # before_module_flag would then be "-q" - if before_module_flag == '-': - before_module_flag = '' + if before_module_flag == "-": + before_module_flag = "" module_name_i_start = i if not remainder: module_name = unquoted_args[i + 1] module_name_i_end = i + 1 else: # i.e.: python -qmtest should provide 'test' as the module_name - module_name = unquoted_args[i][j + 1:] + module_name = unquoted_args[i][j + 1 :] module_name_i_end = module_name_i_start break_out = True break - elif c == 'c': + elif c == "c": # i.e.: Something as # python -qc "import sys" # python -c "import sys" # python "-qcimport sys" - code_flag = arg_as_str[:j + 1] # code_flag would then be "-qc" + code_flag = arg_as_str[: j + 1] # code_flag would then be "-qc" if not remainder: # arg_as_str is something as "-qc", "import sys" @@ -513,13 +525,13 @@ def patch_args(args, is_exec=False): filename_i = i if _is_managed_arg(filename): # no need to add pydevd twice - pydev_log.debug('Skipped monkey-patching as pydevd.py is in args already.') + pydev_log.debug("Skipped monkey-patching as pydevd.py is in args already.") return original_args break else: # We didn't find the filename (something is unexpected). - pydev_log.debug('Unable to fix arguments to attach debugger on subprocess (filename not found).') + pydev_log.debug("Unable to fix arguments to attach debugger on subprocess (filename not found).") return original_args if code_i != -1: @@ -536,13 +548,14 @@ def patch_args(args, is_exec=False): first_non_vm_index = max(filename_i, module_name_i_start) if first_non_vm_index == -1: - pydev_log.debug('Unable to fix arguments to attach debugger on subprocess (could not resolve filename nor module name).') + pydev_log.debug("Unable to fix arguments to attach debugger on subprocess (could not resolve filename nor module name).") return original_args # Original args should be something as: # ['X:\\pysrc\\pydevd.py', '--multiprocess', '--print-in-debugger-startup', # '--vm_type', 'python', '--client', '127.0.0.1', '--port', '56352', '--file', 'x:\\snippet1.py'] from _pydevd_bundle.pydevd_command_line_handling import setup_to_argv + new_args = [] new_args.extend(unquoted_args[:first_non_vm_index]) if before_module_flag: @@ -550,31 +563,32 @@ def patch_args(args, is_exec=False): add_module_at = len(new_args) + 1 - new_args.extend(setup_to_argv( - _get_setup_updated_with_protocol_and_ppid(SetupHolder.setup, is_exec=is_exec), - skip_names=set(('module', 'cmd-line')) - )) - new_args.append('--file') + new_args.extend( + setup_to_argv( + _get_setup_updated_with_protocol_and_ppid(SetupHolder.setup, is_exec=is_exec), skip_names=set(("module", "cmd-line")) + ) + ) + new_args.append("--file") if module_name is not None: assert module_name_i_start != -1 assert module_name_i_end != -1 # Always after 'pydevd' (i.e.: pydevd "--module" --multiprocess ...) - new_args.insert(add_module_at, '--module') + new_args.insert(add_module_at, "--module") new_args.append(module_name) - new_args.extend(unquoted_args[module_name_i_end + 1:]) + new_args.extend(unquoted_args[module_name_i_end + 1 :]) elif filename is not None: assert filename_i != -1 new_args.append(filename) - new_args.extend(unquoted_args[filename_i + 1:]) + new_args.extend(unquoted_args[filename_i + 1 :]) else: - raise AssertionError('Internal error (unexpected condition)') + raise AssertionError("Internal error (unexpected condition)") return quote_args(new_args) except: - pydev_log.exception('Error patching args (debugger not attached to subprocess).') + pydev_log.exception("Error patching args (debugger not attached to subprocess).") return original_args @@ -592,21 +606,21 @@ def str_to_args_windows(args): state = DEFAULT backslashes = 0 - buf = '' + buf = "" args_len = len(args) for i in range(args_len): ch = args[i] - if (ch == '\\'): + if ch == "\\": backslashes += 1 continue - elif (backslashes != 0): + elif backslashes != 0: if ch == '"': while backslashes >= 2: backslashes -= 2 - buf += '\\' - if (backslashes == 1): - if (state == DEFAULT): + buf += "\\" + if backslashes == 1: + if state == DEFAULT: state = ARG buf += '"' @@ -615,21 +629,21 @@ def str_to_args_windows(args): # else fall through to switch else: # false alarm, treat passed backslashes literally... - if (state == DEFAULT): + if state == DEFAULT: state = ARG while backslashes > 0: backslashes -= 1 - buf += '\\' + buf += "\\" # fall through to switch - if ch in (' ', '\t'): - if (state == DEFAULT): + if ch in (" ", "\t"): + if state == DEFAULT: # skip continue - elif (state == ARG): + elif state == ARG: state = DEFAULT result.append(buf) - buf = '' + buf = "" continue if state in (DEFAULT, ARG): @@ -641,7 +655,7 @@ def str_to_args_windows(args): elif state == IN_DOUBLE_QUOTE: if ch == '"': - if (i + 1 < args_len and args[i + 1] == '"'): + if i + 1 < args_len and args[i + 1] == '"': # Undocumented feature in Windows: # Two consecutive double quotes inside a double-quoted argument are interpreted as # a single double quote. @@ -653,7 +667,7 @@ def str_to_args_windows(args): buf += ch else: - raise RuntimeError('Illegal condition') + raise RuntimeError("Illegal condition") if len(buf) > 0 or state != DEFAULT: result.append(buf) @@ -666,14 +680,14 @@ def patch_arg_str_win(arg_str): # Fix https://youtrack.jetbrains.com/issue/PY-9767 (args may be empty) if not args or not is_python(args[0]): return arg_str - arg_str = ' '.join(patch_args(args)) + arg_str = " ".join(patch_args(args)) pydev_log.debug("New args: %s", arg_str) return arg_str def monkey_patch_module(module, funcname, create_func): if hasattr(module, funcname): - original_name = 'original_' + funcname + original_name = "original_" + funcname if not hasattr(module, original_name): setattr(module, original_name, getattr(module, funcname)) setattr(module, funcname, create_func(original_name)) @@ -692,7 +706,6 @@ def warn_multiproc(): def create_warn_multiproc(original_name): - def new_warn_multiproc(*args, **kwargs): import os @@ -704,7 +717,6 @@ def new_warn_multiproc(*args, **kwargs): def create_execl(original_name): - def new_execl(path, *args): """ os.execl(path, arg0, arg1, ...) @@ -723,7 +735,6 @@ def new_execl(path, *args): def create_execv(original_name): - def new_execv(path, args): """ os.execv(path, args) @@ -757,7 +768,6 @@ def new_execve(path, args, env): def create_spawnl(original_name): - def new_spawnl(mode, path, *args): """ os.spawnl(mode, path, arg0, arg1, ...) @@ -773,7 +783,6 @@ def new_spawnl(mode, path, *args): def create_spawnv(original_name): - def new_spawnv(mode, path, args): """ os.spawnv(mode, path, args) @@ -826,6 +835,7 @@ def create_fork_exec(original_name): def new_fork_exec(args, *other_args): import _posixsubprocess # @UnresolvedImport + if _get_apply_arg_patching(): args = patch_args(args) send_process_created_message() @@ -843,6 +853,7 @@ def create_warn_fork_exec(original_name): def new_warn_fork_exec(*args): try: import _posixsubprocess + warn_multiproc() return getattr(_posixsubprocess, original_name)(*args) except: @@ -858,6 +869,7 @@ def create_subprocess_fork_exec(original_name): def new_fork_exec(args, *other_args): import subprocess + if _get_apply_arg_patching(): args = patch_args(args) send_process_created_message() @@ -875,6 +887,7 @@ def create_subprocess_warn_fork_exec(original_name): def new_warn_fork_exec(*args): try: import subprocess + warn_multiproc() return getattr(subprocess, original_name)(*args) except: @@ -920,7 +933,6 @@ def new_CreateProcess(*args): def create_fork(original_name): - def new_fork(): # A simple fork will result in a new python process is_new_python_process = True @@ -930,12 +942,12 @@ def new_fork(): is_subprocess_fork = False while frame is not None: - if frame.f_code.co_name == '_execute_child' and 'subprocess' in frame.f_code.co_filename: + if frame.f_code.co_name == "_execute_child" and "subprocess" in frame.f_code.co_filename: is_subprocess_fork = True # If we're actually in subprocess.Popen creating a child, it may # result in something which is not a Python process, (so, we # don't want to connect with it in the forked version). - executable = frame.f_locals.get('executable') + executable = frame.f_locals.get("executable") if executable is not None: is_new_python_process = False if is_python(executable): @@ -985,14 +997,14 @@ def patch_new_process_functions(): # os.execve(path, args, env) # os.execvp(file, args) # os.execvpe(file, args, env) - monkey_patch_os('execl', create_execl) - monkey_patch_os('execle', create_execl) - monkey_patch_os('execlp', create_execl) - monkey_patch_os('execlpe', create_execl) - monkey_patch_os('execv', create_execv) - monkey_patch_os('execve', create_execve) - monkey_patch_os('execvp', create_execv) - monkey_patch_os('execvpe', create_execve) + monkey_patch_os("execl", create_execl) + monkey_patch_os("execle", create_execl) + monkey_patch_os("execlp", create_execl) + monkey_patch_os("execlpe", create_execl) + monkey_patch_os("execv", create_execv) + monkey_patch_os("execve", create_execve) + monkey_patch_os("execvp", create_execv) + monkey_patch_os("execvpe", create_execve) # os.spawnl(mode, path, ...) # os.spawnle(mode, path, ..., env) @@ -1003,28 +1015,30 @@ def patch_new_process_functions(): # os.spawnvp(mode, file, args) # os.spawnvpe(mode, file, args, env) - monkey_patch_os('spawnl', create_spawnl) - monkey_patch_os('spawnle', create_spawnl) - monkey_patch_os('spawnlp', create_spawnl) - monkey_patch_os('spawnlpe', create_spawnl) - monkey_patch_os('spawnv', create_spawnv) - monkey_patch_os('spawnve', create_spawnve) - monkey_patch_os('spawnvp', create_spawnv) - monkey_patch_os('spawnvpe', create_spawnve) - monkey_patch_os('posix_spawn', create_posix_spawn) + monkey_patch_os("spawnl", create_spawnl) + monkey_patch_os("spawnle", create_spawnl) + monkey_patch_os("spawnlp", create_spawnl) + monkey_patch_os("spawnlpe", create_spawnl) + monkey_patch_os("spawnv", create_spawnv) + monkey_patch_os("spawnve", create_spawnve) + monkey_patch_os("spawnvp", create_spawnv) + monkey_patch_os("spawnvpe", create_spawnve) + monkey_patch_os("posix_spawn", create_posix_spawn) if not IS_JYTHON: if not IS_WINDOWS: - monkey_patch_os('fork', create_fork) + monkey_patch_os("fork", create_fork) try: import _posixsubprocess - monkey_patch_module(_posixsubprocess, 'fork_exec', create_fork_exec) + + monkey_patch_module(_posixsubprocess, "fork_exec", create_fork_exec) except ImportError: pass try: import subprocess - monkey_patch_module(subprocess, '_fork_exec', create_subprocess_fork_exec) + + monkey_patch_module(subprocess, "_fork_exec", create_subprocess_fork_exec) except AttributeError: pass else: @@ -1033,40 +1047,42 @@ def patch_new_process_functions(): import _subprocess except ImportError: import _winapi as _subprocess - monkey_patch_module(_subprocess, 'CreateProcess', create_CreateProcess) + monkey_patch_module(_subprocess, "CreateProcess", create_CreateProcess) def patch_new_process_functions_with_warning(): - monkey_patch_os('execl', create_warn_multiproc) - monkey_patch_os('execle', create_warn_multiproc) - monkey_patch_os('execlp', create_warn_multiproc) - monkey_patch_os('execlpe', create_warn_multiproc) - monkey_patch_os('execv', create_warn_multiproc) - monkey_patch_os('execve', create_warn_multiproc) - monkey_patch_os('execvp', create_warn_multiproc) - monkey_patch_os('execvpe', create_warn_multiproc) - monkey_patch_os('spawnl', create_warn_multiproc) - monkey_patch_os('spawnle', create_warn_multiproc) - monkey_patch_os('spawnlp', create_warn_multiproc) - monkey_patch_os('spawnlpe', create_warn_multiproc) - monkey_patch_os('spawnv', create_warn_multiproc) - monkey_patch_os('spawnve', create_warn_multiproc) - monkey_patch_os('spawnvp', create_warn_multiproc) - monkey_patch_os('spawnvpe', create_warn_multiproc) - monkey_patch_os('posix_spawn', create_warn_multiproc) + monkey_patch_os("execl", create_warn_multiproc) + monkey_patch_os("execle", create_warn_multiproc) + monkey_patch_os("execlp", create_warn_multiproc) + monkey_patch_os("execlpe", create_warn_multiproc) + monkey_patch_os("execv", create_warn_multiproc) + monkey_patch_os("execve", create_warn_multiproc) + monkey_patch_os("execvp", create_warn_multiproc) + monkey_patch_os("execvpe", create_warn_multiproc) + monkey_patch_os("spawnl", create_warn_multiproc) + monkey_patch_os("spawnle", create_warn_multiproc) + monkey_patch_os("spawnlp", create_warn_multiproc) + monkey_patch_os("spawnlpe", create_warn_multiproc) + monkey_patch_os("spawnv", create_warn_multiproc) + monkey_patch_os("spawnve", create_warn_multiproc) + monkey_patch_os("spawnvp", create_warn_multiproc) + monkey_patch_os("spawnvpe", create_warn_multiproc) + monkey_patch_os("posix_spawn", create_warn_multiproc) if not IS_JYTHON: if not IS_WINDOWS: - monkey_patch_os('fork', create_warn_multiproc) + monkey_patch_os("fork", create_warn_multiproc) try: import _posixsubprocess - monkey_patch_module(_posixsubprocess, 'fork_exec', create_warn_fork_exec) + + monkey_patch_module(_posixsubprocess, "fork_exec", create_warn_fork_exec) except ImportError: pass try: import subprocess - monkey_patch_module(subprocess, '_fork_exec', create_subprocess_warn_fork_exec) + + monkey_patch_module(subprocess, "_fork_exec", create_subprocess_warn_fork_exec) except AttributeError: pass @@ -1076,11 +1092,10 @@ def patch_new_process_functions_with_warning(): import _subprocess except ImportError: import _winapi as _subprocess - monkey_patch_module(_subprocess, 'CreateProcess', create_CreateProcessWarnMultiproc) + monkey_patch_module(_subprocess, "CreateProcess", create_CreateProcessWarnMultiproc) class _NewThreadStartupWithTrace: - def __init__(self, original_func, args, kwargs): self.original_func = original_func self.args = args @@ -1097,20 +1112,21 @@ def __call__(self): # the start_new_thread internal machinery and thread._bootstrap has not finished), so, the code below needs # to make sure that we use the current thread bound to the original function and not use # threading.current_thread() unless we're sure it's a dummy thread. - t = getattr(self.original_func, '__self__', getattr(self.original_func, 'im_self', None)) + t = getattr(self.original_func, "__self__", getattr(self.original_func, "im_self", None)) if not isinstance(t, threading.Thread): # This is not a threading.Thread but a Dummy thread (so, get it as a dummy thread using # currentThread). t = threading.current_thread() - if not getattr(t, 'is_pydev_daemon_thread', False): + if not getattr(t, "is_pydev_daemon_thread", False): thread_id = get_current_thread_id(t) py_db.notify_thread_created(thread_id, t) _on_set_trace_for_new_thread(py_db) - if getattr(py_db, 'thread_analyser', None) is not None: + if getattr(py_db, "thread_analyser", None) is not None: try: from _pydevd_bundle.pydevd_concurrency_analyser.pydevd_concurrency_logger import log_new_thread + log_new_thread(py_db, t) except: sys.stderr.write("Failed to detect new thread for visualization") @@ -1128,7 +1144,6 @@ def __call__(self): class _NewThreadStartupWithoutTrace: - def __init__(self, original_func, args, kwargs): self.original_func = original_func self.args = args @@ -1158,10 +1173,9 @@ def _get_threading_modules_to_patch(): def patch_thread_module(thread_module): - - if getattr(thread_module, '_original_start_new_thread', None) is None: + if getattr(thread_module, "_original_start_new_thread", None) is None: if thread_module is threading: - if not hasattr(thread_module, '_start_new_thread'): + if not hasattr(thread_module, "_start_new_thread"): return # Jython doesn't have it. _original_start_new_thread = thread_module._original_start_new_thread = thread_module._start_new_thread else: @@ -1170,12 +1184,11 @@ def patch_thread_module(thread_module): _original_start_new_thread = thread_module._original_start_new_thread class ClassWithPydevStartNewThread: - def pydev_start_new_thread(self, function, args=(), kwargs={}): - ''' + """ We need to replace the original thread_module.start_new_thread with this function so that threads started through it and not through the threading module are properly traced. - ''' + """ return _original_start_new_thread(_UseNewThreadStartup(function, args, kwargs), ()) # This is a hack for the situation where the thread_module.start_new_thread is declared inside a class, such as the one below @@ -1224,17 +1237,17 @@ def undo_patch_thread_modules(): def disable_trace_thread_modules(): - ''' + """ Can be used to temporarily stop tracing threads created with thread.start_new_thread. - ''' + """ global _UseNewThreadStartup _UseNewThreadStartup = _NewThreadStartupWithoutTrace def enable_trace_thread_modules(): - ''' + """ Can be used to start tracing threads created with thread.start_new_thread again. - ''' + """ global _UseNewThreadStartup _UseNewThreadStartup = _NewThreadStartupWithTrace diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py index e348b842d..5864e3ca8 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_monkey_qt.py @@ -7,6 +7,7 @@ def set_trace_in_qt(): from _pydevd_bundle.pydevd_comm import get_global_debugger + py_db = get_global_debugger() if py_db is not None: threading.current_thread() # Create the dummy thread for qt. @@ -17,87 +18,94 @@ def set_trace_in_qt(): def patch_qt(qt_support_mode): - ''' + """ This method patches qt (PySide2, PySide, PyQt4, PyQt5) so that we have hooks to set the tracing for QThread. - ''' + """ if not qt_support_mode: return - if qt_support_mode is True or qt_support_mode == 'True': + if qt_support_mode is True or qt_support_mode == "True": # do not break backward compatibility - qt_support_mode = 'auto' + qt_support_mode = "auto" - if qt_support_mode == 'auto': - qt_support_mode = os.getenv('PYDEVD_PYQT_MODE', 'auto') + if qt_support_mode == "auto": + qt_support_mode = os.getenv("PYDEVD_PYQT_MODE", "auto") # Avoid patching more than once global _patched_qt if _patched_qt: return - pydev_log.debug('Qt support mode: %s', qt_support_mode) + pydev_log.debug("Qt support mode: %s", qt_support_mode) _patched_qt = True - if qt_support_mode == 'auto': - + if qt_support_mode == "auto": patch_qt_on_import = None try: import PySide2 # @UnresolvedImport @UnusedImport - qt_support_mode = 'pyside2' + + qt_support_mode = "pyside2" except: try: import Pyside # @UnresolvedImport @UnusedImport - qt_support_mode = 'pyside' + + qt_support_mode = "pyside" except: try: import PyQt5 # @UnresolvedImport @UnusedImport - qt_support_mode = 'pyqt5' + + qt_support_mode = "pyqt5" except: try: import PyQt4 # @UnresolvedImport @UnusedImport - qt_support_mode = 'pyqt4' + + qt_support_mode = "pyqt4" except: return - if qt_support_mode == 'pyside2': + if qt_support_mode == "pyside2": try: import PySide2.QtCore # @UnresolvedImport + _internal_patch_qt(PySide2.QtCore, qt_support_mode) except: return - elif qt_support_mode == 'pyside': + elif qt_support_mode == "pyside": try: import PySide.QtCore # @UnresolvedImport + _internal_patch_qt(PySide.QtCore, qt_support_mode) except: return - elif qt_support_mode == 'pyqt5': + elif qt_support_mode == "pyqt5": try: import PyQt5.QtCore # @UnresolvedImport + _internal_patch_qt(PyQt5.QtCore) except: return - elif qt_support_mode == 'pyqt4': + elif qt_support_mode == "pyqt4": # Ok, we have an issue here: # PyDev-452: Selecting PyQT API version using sip.setapi fails in debug mode # http://pyqt.sourceforge.net/Docs/PyQt4/incompatible_apis.html # Mostly, if the user uses a different API version (i.e.: v2 instead of v1), # that has to be done before importing PyQt4 modules (PySide/PyQt5 don't have this issue # as they only implements v2). - patch_qt_on_import = 'PyQt4' + patch_qt_on_import = "PyQt4" def get_qt_core_module(): import PyQt4.QtCore # @UnresolvedImport + return PyQt4.QtCore _patch_import_to_patch_pyqt_on_import(patch_qt_on_import, get_qt_core_module) else: - raise ValueError('Unexpected qt support mode: %s' % (qt_support_mode,)) + raise ValueError("Unexpected qt support mode: %s" % (qt_support_mode,)) def _patch_import_to_patch_pyqt_on_import(patch_qt_on_import, get_qt_core_module): @@ -106,9 +114,9 @@ def _patch_import_to_patch_pyqt_on_import(patch_qt_on_import, get_qt_core_module # So, our approach is to patch PyQt4 right before the user tries to import it (at which # point he should've set the sip api version properly already anyways). - pydev_log.debug('Setting up Qt post-import monkeypatch.') + pydev_log.debug("Setting up Qt post-import monkeypatch.") - dotted = patch_qt_on_import + '.' + dotted = patch_qt_on_import + "." original_import = __import__ from _pydev_bundle._pydev_sys_patch import patch_sys_module, patch_reload, cancel_patches_in_sys_module @@ -128,15 +136,14 @@ def patched_import(name, *args, **kwargs): builtins.__import__ = patched_import -def _internal_patch_qt(QtCore, qt_support_mode='auto'): - pydev_log.debug('Patching Qt: %s', QtCore) +def _internal_patch_qt(QtCore, qt_support_mode="auto"): + pydev_log.debug("Patching Qt: %s", QtCore) _original_thread_init = QtCore.QThread.__init__ _original_runnable_init = QtCore.QRunnable.__init__ _original_QThread = QtCore.QThread class FuncWrapper: - def __init__(self, original): self._original = original @@ -145,7 +152,6 @@ def __call__(self, *args, **kwargs): return self._original(*args, **kwargs) class StartedSignalWrapper(QtCore.QObject): # Wrapper for the QThread.started signal - try: _signal = QtCore.Signal() # @UndefinedVariable except: @@ -155,14 +161,14 @@ def __init__(self, thread, original_started): QtCore.QObject.__init__(self) self.thread = thread self.original_started = original_started - if qt_support_mode in ('pyside', 'pyside2'): + if qt_support_mode in ("pyside", "pyside2"): self._signal = original_started else: self._signal.connect(self._on_call) self.original_started.connect(self._signal) def connect(self, func, *args, **kwargs): - if qt_support_mode in ('pyside', 'pyside2'): + if qt_support_mode in ("pyside", "pyside2"): return self._signal.connect(FuncWrapper(func), *args, **kwargs) else: return self._signal.connect(func, *args, **kwargs) @@ -177,7 +183,6 @@ def _on_call(self, *args, **kwargs): set_trace_in_qt() class ThreadWrapper(QtCore.QThread): # Wrapper for QThread - def __init__(self, *args, **kwargs): _original_thread_init(self, *args, **kwargs) @@ -201,7 +206,6 @@ def _new_run(self): return self._original_run() class RunnableWrapper(QtCore.QRunnable): # Wrapper for QRunnable - def __init__(self, *args, **kwargs): _original_runnable_init(self, *args, **kwargs) diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py index d7581d207..ecf377e5e 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_override.py @@ -1,12 +1,13 @@ def overrides(method): - ''' + """ Meant to be used as - + class B: @overrides(A.m1) def m1(self): pass - ''' + """ + def wrapper(func): if func.__name__ != method.__name__: msg = "Wrong @override: %r expected, but overwriting %r." @@ -20,6 +21,7 @@ def wrapper(func): return wrapper + def implements(method): def wrapper(func): if func.__name__ != method.__name__: @@ -32,4 +34,4 @@ def wrapper(func): return func - return wrapper \ No newline at end of file + return wrapper diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py index 134ce4c5d..d83049132 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_umd.py @@ -56,6 +56,7 @@ def __init__(self, namelist=None, pathlist=None): try: # ignore all files in org.python.pydev/pysrc import pydev_pysrc, inspect + self.pathlist.append(os.path.dirname(pydev_pysrc.__file__)) except: pass @@ -66,7 +67,7 @@ def is_module_ignored(self, modname, modpath): if modpath.startswith(path): return True else: - return set(modname.split('.')) & set(self.namelist) + return set(modname.split(".")) & set(self.namelist) def run(self, verbose=False): """ @@ -79,11 +80,11 @@ def run(self, verbose=False): log = [] modules_copy = dict(sys.modules) for modname, module in modules_copy.items(): - if modname == 'aaaaa': + if modname == "aaaaa": print(modname, module) print(self.previous_modules) if modname not in self.previous_modules: - modpath = getattr(module, '__file__', None) + modpath = getattr(module, "__file__", None) if modpath is None: # *module* is a C module that is statically linked into the # interpreter. There is no way to know its path, so we @@ -93,8 +94,7 @@ def run(self, verbose=False): log.append(modname) del sys.modules[modname] if verbose and log: - print("\x1b[4;33m%s\x1b[24m%s\x1b[0m" % ("UMD has deleted", - ": " + ", ".join(log))) + print("\x1b[4;33m%s\x1b[24m%s\x1b[0m" % ("UMD has deleted", ": " + ", ".join(log))) __umd__ = None @@ -118,11 +118,12 @@ def _get_globals(): try: # The import fails on IronPython import __main__ + namespace = __main__.__dict__ except: namespace - shell = namespace.get('__ipythonshell__') - if shell is not None and hasattr(shell, 'user_ns'): + shell = namespace.get("__ipythonshell__") + if shell is not None and hasattr(shell, "user_ns"): # IPython 0.12+ kernel return shell.user_ns else: @@ -138,8 +139,8 @@ def runfile(filename, args=None, wdir=None, namespace=None): wdir: working directory """ try: - if hasattr(filename, 'decode'): - filename = filename.decode('utf-8') + if hasattr(filename, "decode"): + filename = filename.decode("utf-8") except (UnicodeError, TypeError): pass global __umd__ @@ -147,7 +148,7 @@ def runfile(filename, args=None, wdir=None, namespace=None): if __umd__ is None: namelist = os.environ.get("PYDEV_UMD_NAMELIST", None) if namelist is not None: - namelist = namelist.split(',') + namelist = namelist.split(",") __umd__ = UserModuleDeleter(namelist=namelist) else: verbose = os.environ.get("PYDEV_UMD_VERBOSE", "").lower() == "true" @@ -156,25 +157,25 @@ def runfile(filename, args=None, wdir=None, namespace=None): raise TypeError("expected a character buffer object") if namespace is None: namespace = _get_globals() - if '__file__' in namespace: - old_file = namespace['__file__'] + if "__file__" in namespace: + old_file = namespace["__file__"] else: old_file = None - namespace['__file__'] = filename + namespace["__file__"] = filename sys.argv = [filename] if args is not None: for arg in args.split(): sys.argv.append(arg) if wdir is not None: try: - if hasattr(wdir, 'decode'): - wdir = wdir.decode('utf-8') + if hasattr(wdir, "decode"): + wdir = wdir.decode("utf-8") except (UnicodeError, TypeError): pass os.chdir(wdir) execfile(filename, namespace) - sys.argv = [''] + sys.argv = [""] if old_file is None: - del namespace['__file__'] + del namespace["__file__"] else: - namespace['__file__'] = old_file + namespace["__file__"] = old_file diff --git a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py index 70bf765f4..fb7372d6f 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py +++ b/src/debugpy/_vendored/pydevd/_pydev_bundle/pydev_versioncheck.py @@ -1,7 +1,8 @@ import sys + def versionok_for_gui(): - ''' Return True if running Python is suitable for GUI Event Integration and deeper IPython integration ''' + """Return True if running Python is suitable for GUI Event Integration and deeper IPython integration""" # We require Python 2.6+ ... if sys.hexversion < 0x02060000: return False @@ -9,8 +10,7 @@ def versionok_for_gui(): if sys.hexversion >= 0x03000000 and sys.hexversion < 0x03020000: return False # Not supported under Jython nor IronPython - if sys.platform.startswith("java") or sys.platform.startswith('cli'): + if sys.platform.startswith("java") or sys.platform.startswith("cli"): return False return True - diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py index 9c199e175..5d49d180b 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles.py @@ -6,23 +6,23 @@ from _pydevd_bundle.pydevd_constants import * # @UnusedWildImport import re import time +import json -#======================================================================================================================= +# ======================================================================================================================= # Configuration -#======================================================================================================================= +# ======================================================================================================================= class Configuration: - def __init__( self, - files_or_dirs='', + files_or_dirs="", verbosity=2, include_tests=None, tests=None, port=None, files_to_tests=None, jobs=1, - split_jobs='tests', + split_jobs="tests", coverage_output_dir=None, coverage_include=None, coverage_output_file=None, @@ -30,7 +30,7 @@ def __init__( exclude_tests=None, include_files=None, django=False, - ): + ): self.files_or_dirs = files_or_dirs self.verbosity = verbosity self.include_tests = include_tests @@ -59,7 +59,7 @@ def __init__( self.coverage_output_file = coverage_output_file def __str__(self): - return '''Configuration + return """Configuration - files_or_dirs: %s - verbosity: %s - tests: %s @@ -79,32 +79,28 @@ def __str__(self): - coverage_output_file: %s - django: %s -''' % ( - self.files_or_dirs, - self.verbosity, - self.tests, - self.port, - self.files_to_tests, - self.jobs, - self.split_jobs, - - self.include_files, - self.include_tests, - - self.exclude_files, - self.exclude_tests, - - self.coverage_output_dir, - self.coverage_include, - self.coverage_output_file, - - self.django, - ) - - -#======================================================================================================================= +""" % ( + self.files_or_dirs, + self.verbosity, + self.tests, + self.port, + self.files_to_tests, + self.jobs, + self.split_jobs, + self.include_files, + self.include_tests, + self.exclude_files, + self.exclude_tests, + self.coverage_output_dir, + self.coverage_include, + self.coverage_output_file, + self.django, + ) + + +# ======================================================================================================================= # parse_cmdline -#======================================================================================================================= +# ======================================================================================================================= def parse_cmdline(argv=None): """ Parses command line and returns test directories, verbosity, test filter and test suites @@ -132,7 +128,7 @@ def parse_cmdline(argv=None): tests = None port = None jobs = 1 - split_jobs = 'tests' + split_jobs = "tests" files_to_tests = {} coverage_output_dir = None coverage_include = None @@ -142,29 +138,25 @@ def parse_cmdline(argv=None): django = False from _pydev_bundle._pydev_getopt import gnu_getopt + optlist, dirs = gnu_getopt( - argv[1:], "", + argv[1:], + "", [ "verbosity=", "tests=", - "port=", "config_file=", - "jobs=", "split_jobs=", - "include_tests=", "include_files=", - "exclude_files=", "exclude_tests=", - "coverage_output_dir=", "coverage_include=", - - "django=" - ] + "django=", + ], ) for opt, value in optlist: @@ -179,37 +171,43 @@ def parse_cmdline(argv=None): elif opt in ("-s", "--split_jobs"): split_jobs = value - if split_jobs not in ('module', 'tests'): + if split_jobs not in ("module", "tests"): raise AssertionError('Expected split to be either "module" or "tests". Was :%s' % (split_jobs,)) - elif opt in ("-d", "--coverage_output_dir",): + elif opt in ( + "-d", + "--coverage_output_dir", + ): coverage_output_dir = value.strip() - elif opt in ("-i", "--coverage_include",): + elif opt in ( + "-i", + "--coverage_include", + ): coverage_include = value.strip() elif opt in ("-I", "--include_tests"): - include_tests = value.split(',') + include_tests = value.split(",") elif opt in ("-E", "--exclude_files"): - exclude_files = value.split(',') + exclude_files = value.split(",") elif opt in ("-F", "--include_files"): - include_files = value.split(',') + include_files = value.split(",") elif opt in ("-e", "--exclude_tests"): - exclude_tests = value.split(',') + exclude_tests = value.split(",") elif opt in ("-t", "--tests"): - tests = value.split(',') + tests = value.split(",") elif opt in ("--django",): - django = value.strip() in ['true', 'True', '1'] + django = value.strip() in ["true", "True", "1"] elif opt in ("-c", "--config_file"): config_file = value.strip() if os.path.exists(config_file): - f = open(config_file, 'r') + f = open(config_file, "r") try: config_file_contents = f.read() finally: @@ -220,7 +218,7 @@ def parse_cmdline(argv=None): if config_file_contents: for line in config_file_contents.splitlines(): - file_and_test = line.split('|') + file_and_test = line.split("|") if len(file_and_test) == 2: file, test = file_and_test if file in files_to_tests: @@ -229,16 +227,29 @@ def parse_cmdline(argv=None): files_to_tests[file] = [test] else: - sys.stderr.write('Could not find config file: %s\n' % (config_file,)) + sys.stderr.write("Could not find config file: %s\n" % (config_file,)) + + filter_tests_env_var = os.environ.get("PYDEV_RUNFILES_FILTER_TESTS", None) + if filter_tests_env_var: + loaded = json.loads(filter_tests_env_var) + include = loaded["include"] + for path, name in include: + existing = files_to_tests.get(path) + if not existing: + existing = files_to_tests[path] = [] + existing.append(name) + # Note: at this point exclude or `*` is not handled. + # Clients need to do all the filtering on their side (could + # change to have `exclude` and support `*` entries). if type([]) != type(dirs): dirs = [dirs] ret_dirs = [] for d in dirs: - if '|' in d: + if "|" in d: # paths may come from the ide separated by | - ret_dirs.extend(d.split('|')) + ret_dirs.extend(d.split("|")) else: ret_dirs.append(d) @@ -246,7 +257,7 @@ def parse_cmdline(argv=None): if tests: if verbosity > 4: - sys.stdout.write('--tests provided. Ignoring --exclude_files, --exclude_tests and --include_files\n') + sys.stdout.write("--tests provided. Ignoring --exclude_files, --exclude_tests and --include_files\n") exclude_files = exclude_tests = include_files = None config = Configuration( @@ -267,34 +278,30 @@ def parse_cmdline(argv=None): ) if verbosity > 5: - sys.stdout.write(str(config) + '\n') + sys.stdout.write(str(config) + "\n") return config -#======================================================================================================================= +# ======================================================================================================================= # PydevTestRunner -#======================================================================================================================= +# ======================================================================================================================= class PydevTestRunner(object): - """ finds and runs a file or directory of files as a unit test """ + """finds and runs a file or directory of files as a unit test""" __py_extensions = ["*.py", "*.pyw"] __exclude_files = ["__init__.*"] # Just to check that only this attributes will be written to this file __slots__ = [ - 'verbosity', # Always used - - 'files_to_tests', # If this one is given, the ones below are not used - - 'files_or_dirs', # Files or directories received in the command line - 'include_tests', # The filter used to collect the tests - 'tests', # Strings with the tests to be run - - 'jobs', # Integer with the number of jobs that should be used to run the test cases - 'split_jobs', # String with 'tests' or 'module' (how should the jobs be split) - - 'configuration', - 'coverage', + "verbosity", # Always used + "files_to_tests", # If this one is given, the ones below are not used + "files_or_dirs", # Files or directories received in the command line + "include_tests", # The filter used to collect the tests + "tests", # Strings with the tests to be run + "jobs", # Integer with the number of jobs that should be used to run the test cases + "split_jobs", # String with 'tests' or 'module' (how should the jobs be split) + "configuration", + "coverage", ] def __init__(self, configuration): @@ -317,7 +324,7 @@ def __init__(self, configuration): self.__adjust_path() def __adjust_path(self): - """ add the current file or directory to the python path """ + """add the current file or directory to the python path""" path_to_append = None for n in range(len(self.files_or_dirs)): dir_name = self.__unixify(self.files_or_dirs[n]) @@ -329,10 +336,10 @@ def __adjust_path(self): path_to_append = os.path.dirname(dir_name) else: if not os.path.exists(dir_name): - block_line = '*' * 120 - sys.stderr.write('\n%s\n* PyDev test runner error: %s does not exist.\n%s\n' % (block_line, dir_name, block_line)) + block_line = "*" * 120 + sys.stderr.write("\n%s\n* PyDev test runner error: %s does not exist.\n%s\n" % (block_line, dir_name, block_line)) return - msg = ("unknown type. \n%s\nshould be file or a directory.\n" % (dir_name)) + msg = "unknown type. \n%s\nshould be file or a directory.\n" % (dir_name) raise RuntimeError(msg) if path_to_append is not None: # Add it as the last one (so, first things are resolved against the default dirs and @@ -340,8 +347,8 @@ def __adjust_path(self): sys.path.append(path_to_append) def __is_valid_py_file(self, fname): - """ tests that a particular file contains the proper file extension - and is not in the list of files to exclude """ + """tests that a particular file contains the proper file extension + and is not in the list of files to exclude""" is_valid_fname = 0 for invalid_fname in self.__class__.__exclude_files: is_valid_fname += int(not fnmatch.fnmatch(fname, invalid_fname)) @@ -351,16 +358,16 @@ def __is_valid_py_file(self, fname): return is_valid_fname > 0 and if_valid_ext > 0 def __unixify(self, s): - """ stupid windows. converts the backslash to forwardslash for consistency """ + """stupid windows. converts the backslash to forwardslash for consistency""" return os.path.normpath(s).replace(os.sep, "/") def __importify(self, s, dir=False): - """ turns directory separators into dots and removes the ".py*" extension - so the string can be used as import statement """ + """turns directory separators into dots and removes the ".py*" extension + so the string can be used as import statement""" if not dir: dirname, fname = os.path.split(s) - if fname.count('.') > 1: + if fname.count(".") > 1: # if there's a file named xxx.xx.py, it is not a valid module, so, let's not load it... return @@ -375,14 +382,14 @@ def __importify(self, s, dir=False): return s.replace("\\", "/").replace("/", ".") def __add_files(self, pyfiles, root, files): - """ if files match, appends them to pyfiles. used by os.path.walk fcn """ + """if files match, appends them to pyfiles. used by os.path.walk fcn""" for fname in files: if self.__is_valid_py_file(fname): name_without_base_dir = self.__unixify(os.path.join(root, fname)) pyfiles.append(name_without_base_dir) def find_import_files(self): - """ return a list of files to import """ + """return a list of files to import""" if self.files_to_tests: pyfiles = self.files_to_tests.keys() else: @@ -395,8 +402,8 @@ def find_import_files(self): # they don't have __init__.py exclude = {} for d in dirs: - for init in ['__init__.py', '__init__.pyo', '__init__.pyc', '__init__.pyw', '__init__$py.class']: - if os.path.exists(os.path.join(root, d, init).replace('\\', '/')): + for init in ["__init__.py", "__init__.pyo", "__init__.pyc", "__init__.pyw", "__init__$py.class"]: + if os.path.exists(os.path.join(root, d, init).replace("\\", "/")): break else: exclude[d] = 1 @@ -429,23 +436,25 @@ def find_import_files(self): if not add: if self.verbosity > 3: - sys.stdout.write('Skipped file: %s (did not match any include_files pattern: %s)\n' % (f, self.configuration.include_files)) + sys.stdout.write( + "Skipped file: %s (did not match any include_files pattern: %s)\n" % (f, self.configuration.include_files) + ) elif self.configuration.exclude_files: for pat in self.configuration.exclude_files: if fnmatch.fnmatchcase(basename, pat): if self.verbosity > 3: - sys.stdout.write('Skipped file: %s (matched exclude_files pattern: %s)\n' % (f, pat)) + sys.stdout.write("Skipped file: %s (matched exclude_files pattern: %s)\n" % (f, pat)) elif self.verbosity > 2: - sys.stdout.write('Skipped file: %s\n' % (f,)) + sys.stdout.write("Skipped file: %s\n" % (f,)) add = False break if add: if self.verbosity > 3: - sys.stdout.write('Adding file: %s for test discovery.\n' % (f,)) + sys.stdout.write("Adding file: %s for test discovery.\n" % (f,)) ret.append(f) pyfiles = ret @@ -453,29 +462,31 @@ def find_import_files(self): return pyfiles def __get_module_from_str(self, modname, print_exception, pyfile): - """ Import the module in the given import path. - * Returns the "final" module, so importing "coilib40.subject.visu" - returns the "visu" module, not the "coilib40" as returned by __import__ """ + """Import the module in the given import path. + * Returns the "final" module, so importing "coilib40.subject.visu" + returns the "visu" module, not the "coilib40" as returned by __import__""" try: mod = __import__(modname) - for part in modname.split('.')[1:]: + for part in modname.split(".")[1:]: mod = getattr(mod, part) return mod except: if print_exception: from _pydev_runfiles import pydev_runfiles_xml_rpc from _pydevd_bundle import pydevd_io - buf_err = pydevd_io.start_redirect(keep_original_redirection=True, std='stderr') - buf_out = pydevd_io.start_redirect(keep_original_redirection=True, std='stdout') + + buf_err = pydevd_io.start_redirect(keep_original_redirection=True, std="stderr") + buf_out = pydevd_io.start_redirect(keep_original_redirection=True, std="stdout") try: - import traceback;traceback.print_exc() - sys.stderr.write('ERROR: Module: %s could not be imported (file: %s).\n' % (modname, pyfile)) + import traceback + + traceback.print_exc() + sys.stderr.write("ERROR: Module: %s could not be imported (file: %s).\n" % (modname, pyfile)) finally: - pydevd_io.end_redirect('stderr') - pydevd_io.end_redirect('stdout') + pydevd_io.end_redirect("stderr") + pydevd_io.end_redirect("stdout") - pydev_runfiles_xml_rpc.notifyTest( - 'error', buf_out.getvalue(), buf_err.getvalue(), pyfile, modname, 0) + pydev_runfiles_xml_rpc.notifyTest("error", buf_out.getvalue(), buf_err.getvalue(), pyfile, modname, 0) return None @@ -485,7 +496,7 @@ def remove_duplicates_keeping_order(self, seq): return [x for x in seq if not (x in seen or seen_add(x))] def find_modules_from_files(self, pyfiles): - """ returns a list of modules given a list of files """ + """returns a list of modules given a list of files""" # let's make sure that the paths we want are in the pythonpath... imports = [(s, self.__importify(s)) for s in pyfiles] @@ -503,13 +514,13 @@ def find_modules_from_files(self, pyfiles): choices = [] for s in system_paths: if imp.startswith(s): - add = imp[len(s) + 1:] + add = imp[len(s) + 1 :] if add: choices.append(add) # sys.stdout.write(' ' + add + ' ') if not choices: - sys.stdout.write('PYTHONPATH not found for file: %s\n' % imp) + sys.stdout.write("PYTHONPATH not found for file: %s\n" % imp) else: for i, import_str in enumerate(choices): print_exception = i == len(choices) - 1 @@ -520,9 +531,9 @@ def find_modules_from_files(self, pyfiles): return ret - #=================================================================================================================== + # =================================================================================================================== # GetTestCaseNames - #=================================================================================================================== + # =================================================================================================================== class GetTestCaseNames: """Yes, we need a class for that (cannot use outer context on jython 2.1)""" @@ -538,14 +549,14 @@ def __call__(self, testCaseClass): if className in self.accepted_classes: for attrname in dir(testCaseClass): # If a class is chosen, we select all the 'test' methods' - if attrname.startswith('test') and hasattr(getattr(testCaseClass, attrname), '__call__'): + if attrname.startswith("test") and hasattr(getattr(testCaseClass, attrname), "__call__"): testFnNames.append(attrname) else: for attrname in dir(testCaseClass): # If we have the class+method name, we must do a full check and have an exact match. - if className + '.' + attrname in self.accepted_methods: - if hasattr(getattr(testCaseClass, attrname), '__call__'): + if className + "." + attrname in self.accepted_methods: + if hasattr(getattr(testCaseClass, attrname), "__call__"): testFnNames.append(attrname) # sorted() is not available in jython 2.1 @@ -554,6 +565,7 @@ def __call__(self, testCaseClass): def _decorate_test_suite(self, suite, pyfile, module_name): import unittest + if isinstance(suite, unittest.TestSuite): add = False suite.__pydev_pyfile__ = pyfile @@ -574,10 +586,11 @@ def _decorate_test_suite(self, suite, pyfile, module_name): return False def find_tests_from_modules(self, file_and_modules_and_module_name): - """ returns the unittests given a list of modules """ + """returns the unittests given a list of modules""" # Use our own suite! from _pydev_runfiles import pydev_runfiles_unittest import unittest + unittest.TestLoader.suiteClass = pydev_runfiles_unittest.PydevTestSuite loader = unittest.TestLoader() @@ -602,7 +615,7 @@ def find_tests_from_modules(self, file_and_modules_and_module_name): accepted_methods = {} for t in self.tests: - splitted = t.split('.') + splitted = t.split(".") if len(splitted) == 1: accepted_classes[t] = t @@ -619,9 +632,10 @@ def find_tests_from_modules(self, file_and_modules_and_module_name): return ret def filter_tests(self, test_objs, internal_call=False): - """ based on a filter name, only return those tests that have - the test case names that match """ + """based on a filter name, only return those tests that have + the test case names that match""" import unittest + if not internal_call: if not self.configuration.include_tests and not self.tests and not self.configuration.exclude_tests: # No need to filter if we have nothing to filter! @@ -629,17 +643,16 @@ def filter_tests(self, test_objs, internal_call=False): if self.verbosity > 1: if self.configuration.include_tests: - sys.stdout.write('Tests to include: %s\n' % (self.configuration.include_tests,)) + sys.stdout.write("Tests to include: %s\n" % (self.configuration.include_tests,)) if self.tests: - sys.stdout.write('Tests to run: %s\n' % (self.tests,)) + sys.stdout.write("Tests to run: %s\n" % (self.tests,)) if self.configuration.exclude_tests: - sys.stdout.write('Tests to exclude: %s\n' % (self.configuration.exclude_tests,)) + sys.stdout.write("Tests to exclude: %s\n" % (self.configuration.exclude_tests,)) test_suite = [] for test_obj in test_objs: - if isinstance(test_obj, unittest.TestSuite): # Note: keep the suites as they are and just 'fix' the tests (so, don't use the iter_tests). if test_obj._tests: @@ -659,10 +672,10 @@ def filter_tests(self, test_objs, internal_call=False): for pat in self.configuration.exclude_tests: if fnmatch.fnmatchcase(testMethodName, pat): if self.verbosity > 3: - sys.stdout.write('Skipped test: %s (matched exclude_tests pattern: %s)\n' % (testMethodName, pat)) + sys.stdout.write("Skipped test: %s (matched exclude_tests pattern: %s)\n" % (testMethodName, pat)) elif self.verbosity > 2: - sys.stdout.write('Skipped test: %s\n' % (testMethodName,)) + sys.stdout.write("Skipped test: %s\n" % (testMethodName,)) add = False break @@ -680,13 +693,19 @@ def filter_tests(self, test_objs, internal_call=False): test_suite.append(test_obj) else: if self.verbosity > 3: - sys.stdout.write('Skipped test: %s (did not match any include_tests pattern %s)\n' % ( - testMethodName, self.configuration.include_tests,)) + sys.stdout.write( + "Skipped test: %s (did not match any include_tests pattern %s)\n" + % ( + testMethodName, + self.configuration.include_tests, + ) + ) return test_suite def iter_tests(self, test_objs): # Note: not using yield because of Jython 2.1. import unittest + tests = [] for test_obj in test_objs: if isinstance(test_obj, unittest.TestSuite): @@ -712,7 +731,7 @@ def __match_tests(self, tests, test_case, test_method_name): return 1 for t in tests: - class_and_method = t.split('.') + class_and_method = t.split(".") if len(class_and_method) == 1: # only class name if class_and_method[0] == test_case.__class__.__name__: @@ -725,7 +744,7 @@ def __match_tests(self, tests, test_case, test_method_name): return 0 def __match(self, filter_list, name): - """ returns whether a test name matches the test filter """ + """returns whether a test name matches the test filter""" if filter_list is None: return 1 for f in filter_list: @@ -734,15 +753,21 @@ def __match(self, filter_list, name): return 0 def run_tests(self, handle_coverage=True): - """ runs all tests """ + """runs all tests""" sys.stdout.write("Finding files... ") files = self.find_import_files() if self.verbosity > 3: - sys.stdout.write('%s ... done.\n' % (self.files_or_dirs)) + sys.stdout.write("%s ... done.\n" % (self.files_or_dirs)) else: - sys.stdout.write('done.\n') + sys.stdout.write("done.\n") sys.stdout.write("Importing test modules ... ") + if self.configuration.django: + import django + + if hasattr(django, "setup"): + django.setup() + if handle_coverage: coverage_files, coverage = start_coverage_support(self.configuration) @@ -753,8 +778,10 @@ def run_tests(self, handle_coverage=True): all_tests = self.filter_tests(all_tests) from _pydev_runfiles import pydev_runfiles_unittest + test_suite = pydev_runfiles_unittest.PydevTestSuite(all_tests) from _pydev_runfiles import pydev_runfiles_xml_rpc + pydev_runfiles_xml_rpc.notifyTestsCollected(test_suite.countTestCases()) start_time = time.time() @@ -768,12 +795,13 @@ def run_tests(): # (e.g.: 2 jobs were requested for running 1 test) -- in which case execute_tests_in_parallel will # return False and won't run any tests. executed_in_parallel = pydev_runfiles_parallel.execute_tests_in_parallel( - all_tests, self.jobs, self.split_jobs, self.verbosity, coverage_files, self.configuration.coverage_include) + all_tests, self.jobs, self.split_jobs, self.verbosity, coverage_files, self.configuration.coverage_include + ) if not executed_in_parallel: # If in coverage, we don't need to pass anything here (coverage is already enabled for this execution). runner = pydev_runfiles_unittest.PydevTextTestRunner(stream=sys.stdout, descriptions=1, verbosity=self.verbosity) - sys.stdout.write('\n') + sys.stdout.write("\n") runner.run(test_suite) if self.configuration.django: @@ -785,7 +813,7 @@ def run_tests(): coverage.stop() coverage.save() - total_time = 'Finished in: %.2f secs.' % (time.time() - start_time,) + total_time = "Finished in: %.2f secs." % (time.time() - start_time,) pydev_runfiles_xml_rpc.notifyTestRunFinished(total_time) @@ -802,7 +830,6 @@ def get_django_test_suite_runner(): from django.test.runner import DiscoverRunner class MyDjangoTestSuiteRunner(DiscoverRunner): - def __init__(self, on_run_suite): django.setup() DiscoverRunner.__init__(self) @@ -824,15 +851,15 @@ def run_suite(self, *args, **kwargs): except: class DjangoTestSuiteRunner: - def __init__(self): pass def run_tests(self, *args, **kwargs): - raise AssertionError("Unable to run suite with django.test.runner.DiscoverRunner nor django.test.simple.DjangoTestSuiteRunner because it couldn't be imported.") + raise AssertionError( + "Unable to run suite with django.test.runner.DiscoverRunner nor django.test.simple.DjangoTestSuiteRunner because it couldn't be imported." + ) class MyDjangoTestSuiteRunner(DjangoTestSuiteRunner): - def __init__(self, on_run_suite): DjangoTestSuiteRunner.__init__(self) self.on_run_suite = on_run_suite @@ -850,8 +877,8 @@ def run_suite(self, *args, **kwargs): return DJANGO_TEST_SUITE_RUNNER -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= +# ======================================================================================================================= def main(configuration): PydevTestRunner(configuration).run_tests() diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py index a83592500..a088b4249 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_coverage.py @@ -3,74 +3,75 @@ from _pydevd_bundle.pydevd_constants import Null -#======================================================================================================================= +# ======================================================================================================================= # get_coverage_files -#======================================================================================================================= +# ======================================================================================================================= def get_coverage_files(coverage_output_dir, number_of_files): base_dir = coverage_output_dir ret = [] i = 0 while len(ret) < number_of_files: while True: - f = os.path.join(base_dir, '.coverage.%s' % i) + f = os.path.join(base_dir, ".coverage.%s" % i) i += 1 if not os.path.exists(f): ret.append(f) - break #Break only inner for. + break # Break only inner for. return ret -#======================================================================================================================= +# ======================================================================================================================= # start_coverage_support -#======================================================================================================================= +# ======================================================================================================================= def start_coverage_support(configuration): return start_coverage_support_from_params( - configuration.coverage_output_dir, - configuration.coverage_output_file, - configuration.jobs, - configuration.coverage_include, + configuration.coverage_output_dir, + configuration.coverage_output_file, + configuration.jobs, + configuration.coverage_include, ) - -#======================================================================================================================= + +# ======================================================================================================================= # start_coverage_support_from_params -#======================================================================================================================= +# ======================================================================================================================= def start_coverage_support_from_params(coverage_output_dir, coverage_output_file, jobs, coverage_include): coverage_files = [] coverage_instance = Null() if coverage_output_dir or coverage_output_file: try: - import coverage #@UnresolvedImport + import coverage # @UnresolvedImport except: - sys.stderr.write('Error: coverage module could not be imported\n') - sys.stderr.write('Please make sure that the coverage module (http://nedbatchelder.com/code/coverage/)\n') - sys.stderr.write('is properly installed in your interpreter: %s\n' % (sys.executable,)) - - import traceback;traceback.print_exc() + sys.stderr.write("Error: coverage module could not be imported\n") + sys.stderr.write("Please make sure that the coverage module (http://nedbatchelder.com/code/coverage/)\n") + sys.stderr.write("is properly installed in your interpreter: %s\n" % (sys.executable,)) + + import traceback + + traceback.print_exc() else: if coverage_output_dir: if not os.path.exists(coverage_output_dir): - sys.stderr.write('Error: directory for coverage output (%s) does not exist.\n' % (coverage_output_dir,)) - + sys.stderr.write("Error: directory for coverage output (%s) does not exist.\n" % (coverage_output_dir,)) + elif not os.path.isdir(coverage_output_dir): - sys.stderr.write('Error: expected (%s) to be a directory.\n' % (coverage_output_dir,)) - + sys.stderr.write("Error: expected (%s) to be a directory.\n" % (coverage_output_dir,)) + else: n = jobs if n <= 0: n += 1 - n += 1 #Add 1 more for the current process (which will do the initial import). + n += 1 # Add 1 more for the current process (which will do the initial import). coverage_files = get_coverage_files(coverage_output_dir, n) - os.environ['COVERAGE_FILE'] = coverage_files.pop(0) - + os.environ["COVERAGE_FILE"] = coverage_files.pop(0) + coverage_instance = coverage.coverage(source=[coverage_include]) coverage_instance.start() - + elif coverage_output_file: - #Client of parallel run. - os.environ['COVERAGE_FILE'] = coverage_output_file + # Client of parallel run. + os.environ["COVERAGE_FILE"] = coverage_output_file coverage_instance = coverage.coverage(source=[coverage_include]) coverage_instance.start() - - return coverage_files, coverage_instance + return coverage_files, coverage_instance diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py index 20ea5b295..13a01b2ee 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_nose.py @@ -9,11 +9,10 @@ import traceback -#======================================================================================================================= +# ======================================================================================================================= # PydevPlugin -#======================================================================================================================= +# ======================================================================================================================= class PydevPlugin(Plugin): - def __init__(self, configuration): self.configuration = configuration Plugin.__init__(self) @@ -28,13 +27,13 @@ def finalize(self, result): self.coverage.stop() self.coverage.save() - pydev_runfiles_xml_rpc.notifyTestRunFinished('Finished in: %.2f secs.' % (time.time() - self.start_time,)) + pydev_runfiles_xml_rpc.notifyTestRunFinished("Finished in: %.2f secs." % (time.time() - self.start_time,)) - #=================================================================================================================== + # =================================================================================================================== # Methods below are not called with multiprocess (so, we monkey-patch MultiProcessTestRunner.consolidate # so that they're called, but unfortunately we loose some info -- i.e.: the time for each test in this # process). - #=================================================================================================================== + # =================================================================================================================== class Sentinel(object): pass @@ -46,8 +45,8 @@ def _without_user_address(self, test): user_address = self.Sentinel user_class_address = self.Sentinel try: - if 'address' in user_test_instance.__dict__: - user_address = user_test_instance.__dict__.pop('address') + if "address" in user_test_instance.__dict__: + user_address = user_test_instance.__dict__.pop("address") except: # Just ignore anything here. pass @@ -62,14 +61,14 @@ def _without_user_address(self, test): yield finally: if user_address is not self.Sentinel: - user_test_instance.__dict__['address'] = user_address + user_test_instance.__dict__["address"] = user_address if user_class_address is not self.Sentinel: user_test_instance.__class__.address = user_class_address def _get_test_address(self, test): try: - if hasattr(test, 'address'): + if hasattr(test, "address"): with self._without_user_address(test): address = test.address() @@ -86,30 +85,30 @@ def _get_test_address(self, test): except TypeError: # It may be an error at setup, in which case it's not really a test, but a Context object. f = test.context.__file__ - if f.endswith('.pyc'): + if f.endswith(".pyc"): f = f[:-1] - elif f.endswith('$py.class'): - f = f[:-len('$py.class')] + '.py' - address = f, '?' + elif f.endswith("$py.class"): + f = f[: -len("$py.class")] + ".py" + address = f, "?" except: sys.stderr.write("PyDev: Internal pydev error getting test address. Please report at the pydev bug tracker\n") traceback.print_exc() sys.stderr.write("\n\n\n") - address = '?', '?' + address = "?", "?" return address - def report_cond(self, cond, test, captured_output, error=''): - ''' + def report_cond(self, cond, test, captured_output, error=""): + """ @param cond: fail, error, ok - ''' + """ address = self._get_test_address(test) error_contents = self.get_io_from_error(error) try: - time_str = '%.2f' % (time.time() - test._pydev_start_time) + time_str = "%.2f" % (time.time() - test._pydev_start_time) except: - time_str = '?' + time_str = "?" pydev_runfiles_xml_rpc.notifyTest(cond, captured_output, error_contents, address[0], address[1], time_str) @@ -132,13 +131,13 @@ def get_io_from_error(self, err): return err def get_captured_output(self, test): - if hasattr(test, 'capturedOutput') and test.capturedOutput: + if hasattr(test, "capturedOutput") and test.capturedOutput: return test.capturedOutput - return '' + return "" def addError(self, test, err): self.report_cond( - 'error', + "error", test, self.get_captured_output(test), err, @@ -146,7 +145,7 @@ def addError(self, test, err): def addFailure(self, test, err): self.report_cond( - 'fail', + "fail", test, self.get_captured_output(test), err, @@ -154,10 +153,10 @@ def addFailure(self, test, err): def addSuccess(self, test): self.report_cond( - 'ok', + "ok", test, self.get_captured_output(test), - '', + "", ) @@ -173,33 +172,33 @@ def start_pydev_nose_plugin_singleton(configuration): original = MultiProcessTestRunner.consolidate -#======================================================================================================================= +# ======================================================================================================================= # new_consolidate -#======================================================================================================================= +# ======================================================================================================================= def new_consolidate(self, result, batch_result): - ''' + """ Used so that it can work with the multiprocess plugin. Monkeypatched because nose seems a bit unsupported at this time (ideally the plugin would have this support by default). - ''' + """ ret = original(self, result, batch_result) parent_frame = sys._getframe().f_back # addr is something as D:\pytesting1\src\mod1\hello.py:TestCase.testMet4 # so, convert it to what report_cond expects - addr = parent_frame.f_locals['addr'] - i = addr.rindex(':') - addr = [addr[:i], addr[i + 1:]] + addr = parent_frame.f_locals["addr"] + i = addr.rindex(":") + addr = [addr[:i], addr[i + 1 :]] output, testsRun, failures, errors, errorClasses = batch_result if failures or errors: for failure in failures: - PYDEV_NOSE_PLUGIN_SINGLETON.report_cond('fail', addr, output, failure) + PYDEV_NOSE_PLUGIN_SINGLETON.report_cond("fail", addr, output, failure) for error in errors: - PYDEV_NOSE_PLUGIN_SINGLETON.report_cond('error', addr, output, error) + PYDEV_NOSE_PLUGIN_SINGLETON.report_cond("error", addr, output, error) else: - PYDEV_NOSE_PLUGIN_SINGLETON.report_cond('ok', addr, output) + PYDEV_NOSE_PLUGIN_SINGLETON.report_cond("ok", addr, output) return ret diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py index b34c45e95..55a213420 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel.py @@ -8,9 +8,9 @@ import sys -#======================================================================================================================= +# ======================================================================================================================= # flatten_test_suite -#======================================================================================================================= +# ======================================================================================================================= def flatten_test_suite(test_suite, ret): if isinstance(test_suite, unittest.TestSuite): for t in test_suite._tests: @@ -20,11 +20,11 @@ def flatten_test_suite(test_suite, ret): ret.append(test_suite) -#======================================================================================================================= +# ======================================================================================================================= # execute_tests_in_parallel -#======================================================================================================================= +# ======================================================================================================================= def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, coverage_include): - ''' + """ @param tests: list(PydevTestSuite) A list with the suites to be run @@ -44,9 +44,10 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov run. It may also return False if in debug mode (in which case, multi-processes are not accepted) - ''' + """ try: from _pydevd_bundle.pydevd_comm import get_global_debugger + if get_global_debugger() is not None: return False except: @@ -58,7 +59,7 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov tests_queue = [] queue_elements = [] - if split == 'module': + if split == "module": module_to_tests = {} for test in tests: lst = [] @@ -74,7 +75,7 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov # Don't create jobs we will never use. jobs = len(queue_elements) - elif split == 'tests': + elif split == "tests": for test in tests: lst = [] flatten_test_suite(test, lst) @@ -86,7 +87,7 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov jobs = len(queue_elements) else: - raise AssertionError('Do not know how to handle: %s' % (split,)) + raise AssertionError("Do not know how to handle: %s" % (split,)) for test_cases in queue_elements: test_queue_elements = [] @@ -97,14 +98,14 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov # Support for jython 2.1 (__testMethodName is pseudo-private in the test case) test_name = test_case.__class__.__name__ + "." + test_case._TestCase__testMethodName - test_queue_elements.append(test_case.__pydev_pyfile__ + '|' + test_name) + test_queue_elements.append(test_case.__pydev_pyfile__ + "|" + test_name) tests_queue.append(test_queue_elements) if jobs < 2: return False - sys.stdout.write('Running tests in parallel with: %s jobs.\n' % (jobs,)) + sys.stdout.write("Running tests in parallel with: %s jobs.\n" % (jobs,)) queue = Queue.Queue() for item in tests_queue: @@ -134,7 +135,7 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov # Wait for all the clients to exit. if not client.finished: client_alive = True - time.sleep(.2) + time.sleep(0.2) break for provider in providers: @@ -143,11 +144,10 @@ def execute_tests_in_parallel(tests, jobs, split, verbosity, coverage_files, cov return True -#======================================================================================================================= +# ======================================================================================================================= # CommunicationThread -#======================================================================================================================= +# ======================================================================================================================= class CommunicationThread(threading.Thread): - def __init__(self, tests_queue): threading.Thread.__init__(self) self.daemon = True @@ -166,12 +166,12 @@ def __init__(self, tests_queue): self.server = server def GetTestsToRun(self, job_id): - ''' + """ @param job_id: @return: list(str) Each entry is a string in the format: filename|Test.testName - ''' + """ try: ret = self.queue.get(block=False) return ret @@ -195,13 +195,13 @@ def notifyTest(self, job_id, *args, **kwargs): return True def shutdown(self): - if hasattr(self.server, 'shutdown'): + if hasattr(self.server, "shutdown"): self.server.shutdown() else: self._shutdown = True def run(self): - if hasattr(self.server, 'shutdown'): + if hasattr(self.server, "shutdown"): self.server.serve_forever() else: self._shutdown = False @@ -209,11 +209,10 @@ def run(self): self.server.handle_request() -#======================================================================================================================= +# ======================================================================================================================= # Client -#======================================================================================================================= +# ======================================================================================================================= class ClientThread(threading.Thread): - def __init__(self, job_id, port, verbosity, coverage_output_file=None, coverage_include=None): threading.Thread.__init__(self) self.daemon = True @@ -252,6 +251,7 @@ def run(self): args.append(self.coverage_include) import subprocess + if False: proc = subprocess.Popen(args, env=os.environ, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -264,4 +264,3 @@ def run(self): finally: self.finished = True - diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py index 3d81dd581..0132b06f5 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_parallel_client.py @@ -1,4 +1,5 @@ from _pydev_bundle.pydev_imports import xmlrpclib, _queue + Queue = _queue.Queue import traceback import sys @@ -6,11 +7,10 @@ import threading -#======================================================================================================================= +# ======================================================================================================================= # ParallelNotification -#======================================================================================================================= +# ======================================================================================================================= class ParallelNotification(object): - def __init__(self, method, args, kwargs): self.method = method self.args = args @@ -20,25 +20,21 @@ def to_tuple(self): return self.method, self.args, self.kwargs -#======================================================================================================================= +# ======================================================================================================================= # KillServer -#======================================================================================================================= +# ======================================================================================================================= class KillServer(object): pass - -#======================================================================================================================= +# ======================================================================================================================= # ServerComm -#======================================================================================================================= +# ======================================================================================================================= class ServerComm(threading.Thread): - - - def __init__(self, job_id, server): self.notifications_queue = Queue() threading.Thread.__init__(self) - self.setDaemon(False) #Wait for all the notifications to be passed before exiting! + self.setDaemon(False) # Wait for all the notifications to be passed before exiting! assert job_id is not None assert port is not None self.job_id = job_id @@ -46,7 +42,6 @@ def __init__(self, job_id, server): self.finished = False self.server = server - def run(self): while True: kill_found = False @@ -60,19 +55,18 @@ def run(self): try: while True: - command = self.notifications_queue.get(block=False) #No block to create a batch. + command = self.notifications_queue.get(block=False) # No block to create a batch. if isinstance(command, KillServer): kill_found = True else: assert isinstance(command, ParallelNotification) commands.append(command.to_tuple()) except: - pass #That's OK, we're getting it until it becomes empty so that we notify multiple at once. - + pass # That's OK, we're getting it until it becomes empty so that we notify multiple at once. if commands: try: - #Batch notification. + # Batch notification. self.server.lock.acquire() try: self.server.notifyCommands(self.job_id, commands) @@ -86,44 +80,36 @@ def run(self): return - -#======================================================================================================================= +# ======================================================================================================================= # ServerFacade -#======================================================================================================================= +# ======================================================================================================================= class ServerFacade(object): - - def __init__(self, notifications_queue): self.notifications_queue = notifications_queue - def notifyTestsCollected(self, *args, **kwargs): - pass #This notification won't be passed - + pass # This notification won't be passed def notifyTestRunFinished(self, *args, **kwargs): - pass #This notification won't be passed - + pass # This notification won't be passed def notifyStartTest(self, *args, **kwargs): - self.notifications_queue.put_nowait(ParallelNotification('notifyStartTest', args, kwargs)) - + self.notifications_queue.put_nowait(ParallelNotification("notifyStartTest", args, kwargs)) def notifyTest(self, *args, **kwargs): - self.notifications_queue.put_nowait(ParallelNotification('notifyTest', args, kwargs)) - + self.notifications_queue.put_nowait(ParallelNotification("notifyTest", args, kwargs)) -#======================================================================================================================= +# ======================================================================================================================= # run_client -#======================================================================================================================= +# ======================================================================================================================= def run_client(job_id, port, verbosity, coverage_output_file, coverage_include): job_id = int(job_id) from _pydev_bundle import pydev_localhost - server = xmlrpclib.Server('http://%s:%s' % (pydev_localhost.get_localhost(), port)) - server.lock = threading.Lock() + server = xmlrpclib.Server("http://%s:%s" % (pydev_localhost.get_localhost(), port)) + server.lock = threading.Lock() server_comm = ServerComm(job_id, server) server_comm.start() @@ -132,17 +118,18 @@ def run_client(job_id, port, verbosity, coverage_output_file, coverage_include): server_facade = ServerFacade(server_comm.notifications_queue) from _pydev_runfiles import pydev_runfiles from _pydev_runfiles import pydev_runfiles_xml_rpc + pydev_runfiles_xml_rpc.set_server(server_facade) - #Starts None and when the 1st test is gotten, it's started (because a server may be initiated and terminated - #before receiving any test -- which would mean a different process got all the tests to run). + # Starts None and when the 1st test is gotten, it's started (because a server may be initiated and terminated + # before receiving any test -- which would mean a different process got all the tests to run). coverage = None try: tests_to_run = [1] while tests_to_run: - #Investigate: is it dangerous to use the same xmlrpclib server from different threads? - #It seems it should be, as it creates a new connection for each request... + # Investigate: is it dangerous to use the same xmlrpclib server from different threads? + # It seems it should be, as it creates a new connection for each request... server.lock.acquire() try: tests_to_run = server.GetTestsToRun(job_id) @@ -153,27 +140,24 @@ def run_client(job_id, port, verbosity, coverage_output_file, coverage_include): break if coverage is None: - _coverage_files, coverage = start_coverage_support_from_params( - None, coverage_output_file, 1, coverage_include) - + _coverage_files, coverage = start_coverage_support_from_params(None, coverage_output_file, 1, coverage_include) files_to_tests = {} for test in tests_to_run: - filename_and_test = test.split('|') + filename_and_test = test.split("|") if len(filename_and_test) == 2: files_to_tests.setdefault(filename_and_test[0], []).append(filename_and_test[1]) configuration = pydev_runfiles.Configuration( - '', + "", verbosity, None, None, None, files_to_tests, - 1, #Always single job here + 1, # Always single job here None, - - #The coverage is handled in this loop. + # The coverage is handled in this loop. coverage_output_file=None, coverage_include=None, ) @@ -185,30 +169,26 @@ def run_client(job_id, port, verbosity, coverage_output_file, coverage_include): coverage.stop() coverage.save() - except: traceback.print_exc() server_comm.notifications_queue.put_nowait(KillServer()) - -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= -if __name__ == '__main__': - if len(sys.argv) -1 == 3: +# ======================================================================================================================= +if __name__ == "__main__": + if len(sys.argv) - 1 == 3: job_id, port, verbosity = sys.argv[1:] coverage_output_file, coverage_include = None, None - elif len(sys.argv) -1 == 5: + elif len(sys.argv) - 1 == 5: job_id, port, verbosity, coverage_output_file, coverage_include = sys.argv[1:] else: - raise AssertionError('Could not find out how to handle the parameters: '+sys.argv[1:]) + raise AssertionError("Could not find out how to handle the parameters: " + sys.argv[1:]) job_id = int(job_id) port = int(port) verbosity = int(verbosity) run_client(job_id, port, verbosity, coverage_output_file, coverage_include) - - diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py index 793097da7..acd99c3e6 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_pytest2.py @@ -1,27 +1,28 @@ -from _pydev_runfiles import pydev_runfiles_xml_rpc -import pickle -import zlib import base64 import os -from pydevd_file_utils import canonical_normalized_path -import pytest +import pickle import sys import time +import zlib from pathlib import Path -#========================================================================= +import pytest +from pydevd_file_utils import canonical_normalized_path + +from _pydev_runfiles import pydev_runfiles_xml_rpc + +# ========================================================================= # Load filters with tests we should skip -#========================================================================= +# ========================================================================= py_test_accept_filter = None def _load_filters(): global py_test_accept_filter if py_test_accept_filter is None: - py_test_accept_filter = os.environ.get('PYDEV_PYTEST_SKIP') + py_test_accept_filter = os.environ.get("PYDEV_PYTEST_SKIP") if py_test_accept_filter: - py_test_accept_filter = pickle.loads( - zlib.decompress(base64.b64decode(py_test_accept_filter))) + py_test_accept_filter = pickle.loads(zlib.decompress(base64.b64decode(py_test_accept_filter))) # Newer versions of pytest resolve symlinks, so, we # may need to filter with a resolved path too. @@ -36,7 +37,7 @@ def _load_filters(): def is_in_xdist_node(): - main_pid = os.environ.get('PYDEV_MAIN_PID') + main_pid = os.environ.get("PYDEV_MAIN_PID") if main_pid and main_pid != str(os.getpid()): return True return False @@ -51,10 +52,11 @@ def connect_to_server_for_communication_to_xml_rpc_on_xdist(): return connected = True if is_in_xdist_node(): - port = os.environ.get('PYDEV_PYTEST_SERVER') - if not port: - sys.stderr.write( - 'Error: no PYDEV_PYTEST_SERVER environment variable defined.\n') + port = os.environ.get("PYDEV_PYTEST_SERVER") + if port == "None": + pass + elif not port: + sys.stderr.write("Error: no PYDEV_PYTEST_SERVER environment variable defined.\n") else: pydev_runfiles_xml_rpc.initialize_server(int(port), daemon=True) @@ -73,14 +75,15 @@ def start_redirect(): if State.buf_out is not None: return from _pydevd_bundle import pydevd_io - State.buf_err = pydevd_io.start_redirect(keep_original_redirection=True, std='stderr') - State.buf_out = pydevd_io.start_redirect(keep_original_redirection=True, std='stdout') + + State.buf_err = pydevd_io.start_redirect(keep_original_redirection=True, std="stderr") + State.buf_out = pydevd_io.start_redirect(keep_original_redirection=True, std="stdout") def get_curr_output(): buf_out = State.buf_out buf_err = State.buf_err - return buf_out.getvalue() if buf_out is not None else '', buf_err.getvalue() if buf_err is not None else '' + return buf_out.getvalue() if buf_out is not None else "", buf_err.getvalue() if buf_err is not None else "" def pytest_unconfigure(): @@ -88,8 +91,7 @@ def pytest_unconfigure(): return # Only report that it finished when on the main node (we don't want to report # the finish on each separate node). - pydev_runfiles_xml_rpc.notifyTestRunFinished( - 'Finished in: %.2f secs.' % (time.time() - State.start_time,)) + pydev_runfiles_xml_rpc.notifyTestRunFinished("Finished in: %.2f secs." % (time.time() - State.start_time,)) def pytest_collection_modifyitems(session, config, items): @@ -112,7 +114,7 @@ def pytest_collection_modifyitems(session, config, items): # print('Skip file: %s' % (f,)) continue # Skip the file - i = name.find('[') + i = name.find("[") name_without_parametrize = None if i > 0: name_without_parametrize = name[:i] @@ -138,11 +140,11 @@ def pytest_collection_modifyitems(session, config, items): break if class_name is not None: - if test == class_name + '.' + name: + if test == class_name + "." + name: new_items.append(item) break - if name_without_parametrize is not None and test == class_name + '.' + name_without_parametrize: + if name_without_parametrize is not None and test == class_name + "." + name_without_parametrize: new_items.append(item) break @@ -176,6 +178,7 @@ def _get_error_contents_from_report(report): stringio = tw.stringio except TypeError: import io + stringio = io.StringIO() tw = TerminalWriter(file=stringio) tw.hasmarkup = False @@ -185,13 +188,13 @@ def _get_error_contents_from_report(report): if s: return s - return '' + return "" def pytest_collectreport(report): error_contents = _get_error_contents_from_report(report) if error_contents: - report_test('fail', '', '', '', error_contents, 0.0) + report_test("fail", "", "", "", error_contents, 0.0) def append_strings(s1, s2): @@ -200,10 +203,10 @@ def append_strings(s1, s2): # Prefer str if isinstance(s1, bytes): - s1 = s1.decode('utf-8', 'replace') + s1 = s1.decode("utf-8", "replace") if isinstance(s2, bytes): - s2 = s2.decode('utf-8', 'replace') + s2 = s2.decode("utf-8", "replace") return s1 + s2 @@ -217,70 +220,69 @@ def pytest_runtest_logreport(report): report_when = report.when report_outcome = report.outcome - if hasattr(report, 'wasxfail'): - if report_outcome != 'skipped': - report_outcome = 'passed' + if hasattr(report, "wasxfail"): + if report_outcome != "skipped": + report_outcome = "passed" - if report_outcome == 'passed': + if report_outcome == "passed": # passed on setup/teardown: no need to report if in setup or teardown # (only on the actual test if it passed). - if report_when in ('setup', 'teardown'): + if report_when in ("setup", "teardown"): return - status = 'ok' + status = "ok" - elif report_outcome == 'skipped': - status = 'skip' + elif report_outcome == "skipped": + status = "skip" else: # It has only passed, skipped and failed (no error), so, let's consider # error if not on call. - if report_when in ('setup', 'teardown'): - status = 'error' + if report_when in ("setup", "teardown"): + status = "error" else: # any error in the call (not in setup or teardown) is considered a # regular failure. - status = 'fail' + status = "fail" # This will work if pytest is not capturing it, if it is, nothing will # come from here... - captured_output, error_contents = getattr(report, 'pydev_captured_output', ''), getattr(report, 'pydev_error_contents', '') + captured_output, error_contents = getattr(report, "pydev_captured_output", ""), getattr(report, "pydev_error_contents", "") for type_section, value in report.sections: if value: - if type_section in ('err', 'stderr', 'Captured stderr call'): + if type_section in ("err", "stderr", "Captured stderr call"): error_contents = append_strings(error_contents, value) else: captured_output = append_strings(error_contents, value) - filename = getattr(report, 'pydev_fspath_strpath', '') + filename = getattr(report, "pydev_fspath_strpath", "") test = report.location[2] - if report_outcome != 'skipped': + if report_outcome != "skipped": # On skipped, we'll have a traceback for the skip, which is not what we # want. exc = _get_error_contents_from_report(report) if exc: if error_contents: - error_contents = append_strings(error_contents, '----------------------------- Exceptions -----------------------------\n') + error_contents = append_strings(error_contents, "----------------------------- Exceptions -----------------------------\n") error_contents = append_strings(error_contents, exc) report_test(status, filename, test, captured_output, error_contents, report_duration) def report_test(status, filename, test, captured_output, error_contents, duration): - ''' + """ @param filename: 'D:\\src\\mod1\\hello.py' @param test: 'TestCase.testMet1' @param status: fail, error, ok - ''' - time_str = '%.2f' % (duration,) - pydev_runfiles_xml_rpc.notifyTest( - status, captured_output, error_contents, filename, test, time_str) + """ + time_str = "%.2f" % (duration,) + pydev_runfiles_xml_rpc.notifyTest(status, captured_output, error_contents, filename, test, time_str) -if not hasattr(pytest, 'hookimpl'): - raise AssertionError('Please upgrade pytest (the current version of pytest: %s is unsupported)' % (pytest.__version__,)) +if not hasattr(pytest, "hookimpl"): + raise AssertionError("Please upgrade pytest (the current version of pytest: %s is unsupported)" % (pytest.__version__,)) @pytest.hookimpl(hookwrapper=True) @@ -293,9 +295,9 @@ def pytest_runtest_makereport(item, call): @pytest.mark.tryfirst def pytest_runtest_setup(item): - ''' + """ Note: with xdist will be on a secondary process. - ''' + """ # We have our own redirection: if xdist does its redirection, we'll have # nothing in our contents (which is OK), but if it does, we'll get nothing # from pytest but will get our own here. diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py index fff1ef9c6..67f6a259a 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_unittest.py @@ -7,11 +7,10 @@ from io import StringIO -#======================================================================================================================= +# ======================================================================================================================= # PydevTextTestRunner -#======================================================================================================================= +# ======================================================================================================================= class PydevTextTestRunner(python_unittest.TextTestRunner): - def _makeResult(self): return PydevTestResult(self.stream, self.descriptions, self.verbosity) @@ -19,11 +18,10 @@ def _makeResult(self): _PythonTextTestResult = python_unittest.TextTestRunner()._makeResult().__class__ -#======================================================================================================================= +# ======================================================================================================================= # PydevTestResult -#======================================================================================================================= +# ======================================================================================================================= class PydevTestResult(_PythonTextTestResult): - def addSubTest(self, test, subtest, err): """Called at the end of a subtest. 'err' is None if the subtest ended successfully, otherwise it's a @@ -33,11 +31,11 @@ def addSubTest(self, test, subtest, err): if err is not None: subdesc = subtest._subDescription() error = (test, self._exc_info_to_string(err, test)) - self._reportErrors([error], [], '', '%s %s' % (self.get_test_name(test), subdesc)) + self._reportErrors([error], [], "", "%s %s" % (self.get_test_name(test), subdesc)) def startTest(self, test): _PythonTextTestResult.startTest(self, test) - self.buf = pydevd_io.start_redirect(keep_original_redirection=True, std='both') + self.buf = pydevd_io.start_redirect(keep_original_redirection=True, std="both") self.start_time = time.time() self._current_errors_stack = [] self._current_failures_stack = [] @@ -48,8 +46,7 @@ def startTest(self, test): # Support for jython 2.1 (__testMethodName is pseudo-private in the test case) test_name = test.__class__.__name__ + "." + test._TestCase__testMethodName - pydev_runfiles_xml_rpc.notifyStartTest( - test.__pydev_pyfile__, test_name) + pydev_runfiles_xml_rpc.notifyStartTest(test.__pydev_pyfile__, test_name) def get_test_name(self, test): try: @@ -61,40 +58,38 @@ def get_test_name(self, test): test_name = test.__class__.__name__ + "." + test._TestCase__testMethodName # Support for class/module exceptions (test is instance of _ErrorHolder) except: - test_name = test.description.split()[1][1:-1] + ' <' + test.description.split()[0] + '>' + test_name = test.description.split()[1][1:-1] + " <" + test.description.split()[0] + ">" except: traceback.print_exc() - return '' + return "" return test_name def stopTest(self, test): end_time = time.time() - pydevd_io.end_redirect(std='both') + pydevd_io.end_redirect(std="both") _PythonTextTestResult.stopTest(self, test) captured_output = self.buf.getvalue() del self.buf - error_contents = '' + error_contents = "" test_name = self.get_test_name(test) - diff_time = '%.2f' % (end_time - self.start_time) + diff_time = "%.2f" % (end_time - self.start_time) skipped = False - outcome = getattr(test, '_outcome', None) + outcome = getattr(test, "_outcome", None) if outcome is not None: - skipped = bool(getattr(outcome, 'skipped', None)) + skipped = bool(getattr(outcome, "skipped", None)) if skipped: - pydev_runfiles_xml_rpc.notifyTest( - 'skip', captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) + pydev_runfiles_xml_rpc.notifyTest("skip", captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) elif not self._current_errors_stack and not self._current_failures_stack: - pydev_runfiles_xml_rpc.notifyTest( - 'ok', captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) + pydev_runfiles_xml_rpc.notifyTest("ok", captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) else: self._reportErrors(self._current_errors_stack, self._current_failures_stack, captured_output, test_name) - def _reportErrors(self, errors, failures, captured_output, test_name, diff_time=''): + def _reportErrors(self, errors, failures, captured_output, test_name, diff_time=""): error_contents = [] for test, s in errors + failures: if type(s) == type((1,)): # If it's a tuple (for jython 2.1) @@ -103,45 +98,41 @@ def _reportErrors(self, errors, failures, captured_output, test_name, diff_time= s = sio.getvalue() error_contents.append(s) - sep = '\n' + self.separator1 + sep = "\n" + self.separator1 error_contents = sep.join(error_contents) if errors and not failures: try: - pydev_runfiles_xml_rpc.notifyTest( - 'error', captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) + pydev_runfiles_xml_rpc.notifyTest("error", captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) except: file_start = error_contents.find('File "') file_end = error_contents.find('", ', file_start) if file_start != -1 and file_end != -1: - file = error_contents[file_start + 6:file_end] + file = error_contents[file_start + 6 : file_end] else: - file = '' - pydev_runfiles_xml_rpc.notifyTest( - 'error', captured_output, error_contents, file, test_name, diff_time) + file = "" + pydev_runfiles_xml_rpc.notifyTest("error", captured_output, error_contents, file, test_name, diff_time) elif failures and not errors: - pydev_runfiles_xml_rpc.notifyTest( - 'fail', captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) + pydev_runfiles_xml_rpc.notifyTest("fail", captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) else: # Ok, we got both, errors and failures. Let's mark it as an error in the end. - pydev_runfiles_xml_rpc.notifyTest( - 'error', captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) + pydev_runfiles_xml_rpc.notifyTest("error", captured_output, error_contents, test.__pydev_pyfile__, test_name, diff_time) def addError(self, test, err): _PythonTextTestResult.addError(self, test, err) # Support for class/module exceptions (test is instance of _ErrorHolder) - if not hasattr(self, '_current_errors_stack') or test.__class__.__name__ == '_ErrorHolder': + if not hasattr(self, "_current_errors_stack") or test.__class__.__name__ == "_ErrorHolder": # Not in start...end, so, report error now (i.e.: django pre/post-setup) - self._reportErrors([self.errors[-1]], [], '', self.get_test_name(test)) + self._reportErrors([self.errors[-1]], [], "", self.get_test_name(test)) else: self._current_errors_stack.append(self.errors[-1]) def addFailure(self, test, err): _PythonTextTestResult.addFailure(self, test, err) - if not hasattr(self, '_current_failures_stack'): + if not hasattr(self, "_current_failures_stack"): # Not in start...end, so, report error now (i.e.: django pre/post-setup) - self._reportErrors([], [self.failures[-1]], '', self.get_test_name(test)) + self._reportErrors([], [self.failures[-1]], "", self.get_test_name(test)) else: self._current_failures_stack.append(self.failures[-1]) diff --git a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py index b4d6b5c1a..1bcaedfc8 100644 --- a/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py +++ b/src/debugpy/_vendored/pydevd/_pydev_runfiles/pydev_runfiles_xml_rpc.py @@ -4,41 +4,40 @@ import warnings from _pydev_bundle._pydev_filesystem_encoding import getfilesystemencoding -from _pydev_bundle.pydev_imports import xmlrpclib, _queue +from _pydev_bundle.pydev_imports import _queue, xmlrpclib from _pydevd_bundle.pydevd_constants import Null Queue = _queue.Queue # This may happen in IronPython (in Python it shouldn't happen as there are # 'fast' replacements that are used in xmlrpclib.py) -warnings.filterwarnings( - 'ignore', 'The xmllib module is obsolete.*', DeprecationWarning) +warnings.filterwarnings("ignore", "The xmllib module is obsolete.*", DeprecationWarning) file_system_encoding = getfilesystemencoding() -#======================================================================================================================= +# ======================================================================================================================= # _ServerHolder -#======================================================================================================================= +# ======================================================================================================================= class _ServerHolder: - ''' + """ Helper so that we don't have to use a global here. - ''' + """ + SERVER = None -#======================================================================================================================= +# ======================================================================================================================= # set_server -#======================================================================================================================= +# ======================================================================================================================= def set_server(server): _ServerHolder.SERVER = server -#======================================================================================================================= +# ======================================================================================================================= # ParallelNotification -#======================================================================================================================= +# ======================================================================================================================= class ParallelNotification(object): - def __init__(self, method, args): self.method = method self.args = args @@ -47,49 +46,47 @@ def to_tuple(self): return self.method, self.args -#======================================================================================================================= +# ======================================================================================================================= # KillServer -#======================================================================================================================= +# ======================================================================================================================= class KillServer(object): pass -#======================================================================================================================= +# ======================================================================================================================= # ServerFacade -#======================================================================================================================= +# ======================================================================================================================= class ServerFacade(object): - def __init__(self, notifications_queue): self.notifications_queue = notifications_queue def notifyTestsCollected(self, *args): - self.notifications_queue.put_nowait(ParallelNotification('notifyTestsCollected', args)) + self.notifications_queue.put_nowait(ParallelNotification("notifyTestsCollected", args)) def notifyConnected(self, *args): - self.notifications_queue.put_nowait(ParallelNotification('notifyConnected', args)) + self.notifications_queue.put_nowait(ParallelNotification("notifyConnected", args)) def notifyTestRunFinished(self, *args): - self.notifications_queue.put_nowait(ParallelNotification('notifyTestRunFinished', args)) + self.notifications_queue.put_nowait(ParallelNotification("notifyTestRunFinished", args)) def notifyStartTest(self, *args): - self.notifications_queue.put_nowait(ParallelNotification('notifyStartTest', args)) + self.notifications_queue.put_nowait(ParallelNotification("notifyStartTest", args)) def notifyTest(self, *args): new_args = [] for arg in args: new_args.append(_encode_if_needed(arg)) args = tuple(new_args) - self.notifications_queue.put_nowait(ParallelNotification('notifyTest', args)) + self.notifications_queue.put_nowait(ParallelNotification("notifyTest", args)) -#======================================================================================================================= +# ======================================================================================================================= # ServerComm -#======================================================================================================================= +# ======================================================================================================================= class ServerComm(threading.Thread): - def __init__(self, notifications_queue, port, daemon=False): - threading.Thread.__init__(self) - self.setDaemon(daemon) # If False, wait for all the notifications to be passed before exiting! + # If daemon is False, wait for all the notifications to be passed before exiting! + threading.Thread.__init__(self, daemon=daemon) self.finished = False self.notifications_queue = notifications_queue @@ -111,8 +108,7 @@ def __init__(self, notifications_queue, port, daemon=False): # ISO-8859-1 is good enough. encoding = "ISO-8859-1" - self.server = xmlrpclib.Server('http://%s:%s' % (pydev_localhost.get_localhost(), port), - encoding=encoding) + self.server = xmlrpclib.Server("http://%s:%s" % (pydev_localhost.get_localhost(), port), encoding=encoding) def run(self): while True: @@ -147,9 +143,9 @@ def run(self): return -#======================================================================================================================= +# ======================================================================================================================= # initialize_server -#======================================================================================================================= +# ======================================================================================================================= def initialize_server(port, daemon=False): if _ServerHolder.SERVER is None: if port is not None: @@ -163,36 +159,39 @@ def initialize_server(port, daemon=False): _ServerHolder.SERVER_COMM = Null() try: - _ServerHolder.SERVER.notifyConnected() + if _ServerHolder.SERVER is not None: + _ServerHolder.SERVER.notifyConnected() except: traceback.print_exc() -#======================================================================================================================= +# ======================================================================================================================= # notifyTest -#======================================================================================================================= +# ======================================================================================================================= def notifyTestsCollected(tests_count): assert tests_count is not None try: - _ServerHolder.SERVER.notifyTestsCollected(tests_count) + if _ServerHolder.SERVER is not None: + _ServerHolder.SERVER.notifyTestsCollected(tests_count) except: traceback.print_exc() -#======================================================================================================================= +# ======================================================================================================================= # notifyStartTest -#======================================================================================================================= +# ======================================================================================================================= def notifyStartTest(file, test): - ''' + """ @param file: the tests file (c:/temp/test.py) @param test: the test ran (i.e.: TestCase.test1) - ''' + """ assert file is not None if test is None: - test = '' # Could happen if we have an import error importing module. + test = "" # Could happen if we have an import error importing module. try: - _ServerHolder.SERVER.notifyStartTest(file, test) + if _ServerHolder.SERVER is not None: + _ServerHolder.SERVER.notifyStartTest(file, test) except: traceback.print_exc() @@ -200,35 +199,38 @@ def notifyStartTest(file, test): def _encode_if_needed(obj): # In the java side we expect strings to be ISO-8859-1 (org.python.pydev.debug.pyunit.PyUnitServer.initializeDispatches().new Dispatch() {...}.getAsStr(Object)) if isinstance(obj, str): # Unicode in py3 - return xmlrpclib.Binary(obj.encode('ISO-8859-1', 'xmlcharrefreplace')) + return xmlrpclib.Binary(obj.encode("ISO-8859-1", "xmlcharrefreplace")) elif isinstance(obj, bytes): try: - return xmlrpclib.Binary(obj.decode(sys.stdin.encoding).encode('ISO-8859-1', 'xmlcharrefreplace')) + return xmlrpclib.Binary(obj.decode(sys.stdin.encoding, 'replace').encode("ISO-8859-1", "xmlcharrefreplace")) except: return xmlrpclib.Binary(obj) # bytes already return obj -#======================================================================================================================= +# ======================================================================================================================= # notifyTest -#======================================================================================================================= +# ======================================================================================================================= def notifyTest(cond, captured_output, error_contents, file, test, time): - ''' + """ @param cond: ok, fail, error @param captured_output: output captured from stdout @param captured_output: output captured from stderr @param file: the tests file (c:/temp/test.py) @param test: the test ran (i.e.: TestCase.test1) @param time: float with the number of seconds elapsed - ''' + """ + if _ServerHolder.SERVER is None: + return + assert cond is not None assert captured_output is not None assert error_contents is not None assert file is not None if test is None: - test = '' # Could happen if we have an import error importing module. + test = "" # Could happen if we have an import error importing module. assert time is not None try: captured_output = _encode_if_needed(captured_output) @@ -239,19 +241,20 @@ def notifyTest(cond, captured_output, error_contents, file, test, time): traceback.print_exc() -#======================================================================================================================= +# ======================================================================================================================= # notifyTestRunFinished -#======================================================================================================================= +# ======================================================================================================================= def notifyTestRunFinished(total_time): assert total_time is not None try: - _ServerHolder.SERVER.notifyTestRunFinished(total_time) + if _ServerHolder.SERVER is not None: + _ServerHolder.SERVER.notifyTestRunFinished(total_time) except: traceback.print_exc() -#======================================================================================================================= +# ======================================================================================================================= # force_server_kill -#======================================================================================================================= +# ======================================================================================================================= def force_server_kill(): _ServerHolder.SERVER_COMM.notifications_queue.put_nowait(KillServer()) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py index b45fa5f9d..1081e2873 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/__main__pydevd_gen_debug_adapter_protocol.py @@ -1,20 +1,20 @@ -''' +""" Run this module to regenerate the `pydevd_schema.py` file. Note that it'll generate it based on the current debugProtocol.json. Erase it and rerun to download the latest version. -''' +""" def is_variable_to_translate(cls_name, var_name): - if var_name in ('variablesReference', 'frameId', 'threadId'): + if var_name in ("variablesReference", "frameId", "threadId"): return True - if cls_name == 'StackFrame' and var_name == 'id': + if cls_name == "StackFrame" and var_name == "id": # It's frameId everywhere except on StackFrame. return True - if cls_name == 'Thread' and var_name == 'id': + if cls_name == "Thread" and var_name == "id": # It's threadId everywhere except on Thread. return True @@ -22,7 +22,7 @@ def is_variable_to_translate(cls_name, var_name): def _get_noqa_for_var(prop_name): - return ' # noqa (assign to builtin)' if prop_name in ('type', 'format', 'id', 'hex', 'breakpoint', 'filter') else '' + return " # noqa (assign to builtin)" if prop_name in ("type", "format", "id", "hex", "breakpoint", "filter") else "" class _OrderedSet(object): @@ -63,14 +63,13 @@ def __len__(self): def set_repr(self): if len(self) == 0: - return 'set()' + return "set()" lst = [repr(x) for x in self] - return 'set([' + ', '.join(lst) + '])' + return "set([" + ", ".join(lst) + "])" class Ref(object): - def __init__(self, ref, ref_data): self.ref = ref self.ref_data = ref_data @@ -83,15 +82,16 @@ def load_schema_data(): import os.path import json - json_file = os.path.join(os.path.dirname(__file__), 'debugProtocol.json') + json_file = os.path.join(os.path.dirname(__file__), "debugProtocol.json") if not os.path.exists(json_file): import requests - req = requests.get('https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/gh-pages/debugAdapterProtocol.json') + + req = requests.get("https://raw.githubusercontent.com/microsoft/debug-adapter-protocol/gh-pages/debugAdapterProtocol.json") assert req.status_code == 200 - with open(json_file, 'wb') as stream: + with open(json_file, "wb") as stream: stream.write(req.content) - with open(json_file, 'rb') as json_contents: + with open(json_file, "rb") as json_contents: json_schema_data = json.loads(json_contents.read()) return json_schema_data @@ -100,48 +100,48 @@ def load_custom_schema_data(): import os.path import json - json_file = os.path.join(os.path.dirname(__file__), 'debugProtocolCustom.json') + json_file = os.path.join(os.path.dirname(__file__), "debugProtocolCustom.json") - with open(json_file, 'rb') as json_contents: + with open(json_file, "rb") as json_contents: json_schema_data = json.loads(json_contents.read()) return json_schema_data def create_classes_to_generate_structure(json_schema_data): - definitions = json_schema_data['definitions'] + definitions = json_schema_data["definitions"] class_to_generatees = {} for name, definition in definitions.items(): - all_of = definition.get('allOf') - description = definition.get('description') - is_enum = definition.get('type') == 'string' and 'enum' in definition + all_of = definition.get("allOf") + description = definition.get("description") + is_enum = definition.get("type") == "string" and "enum" in definition enum_values = None if is_enum: - enum_values = definition['enum'] + enum_values = definition["enum"] properties = {} - properties.update(definition.get('properties', {})) - required = _OrderedSet(definition.get('required', _OrderedSet())) + properties.update(definition.get("properties", {})) + required = _OrderedSet(definition.get("required", _OrderedSet())) base_definitions = [] if all_of is not None: for definition in all_of: - ref = definition.get('$ref') + ref = definition.get("$ref") if ref is not None: - assert ref.startswith('#/definitions/') - ref = ref[len('#/definitions/'):] + assert ref.startswith("#/definitions/") + ref = ref[len("#/definitions/") :] base_definitions.append(ref) else: if not description: - description = definition.get('description') - properties.update(definition.get('properties', {})) - required.update(_OrderedSet(definition.get('required', _OrderedSet()))) + description = definition.get("description") + properties.update(definition.get("properties", {})) + required.update(_OrderedSet(definition.get("required", _OrderedSet()))) if isinstance(description, (list, tuple)): - description = '\n'.join(description) + description = "\n".join(description) - if name == 'ModulesRequest': # Hack to accept modules request without arguments (ptvsd: 2050). - required.discard('arguments') + if name == "ModulesRequest": # Hack to accept modules request without arguments (ptvsd: 2050). + required.discard("arguments") class_to_generatees[name] = dict( name=name, properties=properties, @@ -149,7 +149,7 @@ def create_classes_to_generate_structure(json_schema_data): description=description, required=required, is_enum=is_enum, - enum_values=enum_values + enum_values=enum_values, ) return class_to_generatees @@ -159,7 +159,7 @@ def collect_bases(curr_class, classes_to_generate, memo=None): if memo is None: memo = {} - base_definitions = curr_class['base_definitions'] + base_definitions = curr_class["base_definitions"] for base_definition in base_definitions: if base_definition not in memo: ret.append(base_definition) @@ -177,86 +177,87 @@ def fill_properties_and_required_from_base(classes_to_generate): for base_definition in reversed(collect_bases(class_to_generate, classes_to_generate)): # Note: go from base to current so that the initial order of the properties has that # same order. - dct.update(classes_to_generate[base_definition].get('properties', {})) - s.update(classes_to_generate[base_definition].get('required', _OrderedSet())) + dct.update(classes_to_generate[base_definition].get("properties", {})) + s.update(classes_to_generate[base_definition].get("required", _OrderedSet())) - dct.update(class_to_generate['properties']) - class_to_generate['properties'] = dct + dct.update(class_to_generate["properties"]) + class_to_generate["properties"] = dct - s.update(class_to_generate['required']) - class_to_generate['required'] = s + s.update(class_to_generate["required"]) + class_to_generate["required"] = s return class_to_generate def update_class_to_generate_description(class_to_generate): import textwrap - description = class_to_generate['description'] + + description = class_to_generate["description"] lines = [] for line in description.splitlines(): wrapped = textwrap.wrap(line.strip(), 100) lines.extend(wrapped) - lines.append('') + lines.append("") - while lines and lines[-1] == '': + while lines and lines[-1] == "": lines = lines[:-1] - class_to_generate['description'] = ' ' + ('\n '.join(lines)) + class_to_generate["description"] = " " + ("\n ".join(lines)) def update_class_to_generate_type(classes_to_generate, class_to_generate): - properties = class_to_generate.get('properties') + properties = class_to_generate.get("properties") for _prop_name, prop_val in properties.items(): - prop_type = prop_val.get('type', '') + prop_type = prop_val.get("type", "") if not prop_type: - prop_type = prop_val.pop('$ref', '') + prop_type = prop_val.pop("$ref", "") if prop_type: - assert prop_type.startswith('#/definitions/') - prop_type = prop_type[len('#/definitions/'):] - prop_val['type'] = Ref(prop_type, classes_to_generate[prop_type]) + assert prop_type.startswith("#/definitions/") + prop_type = prop_type[len("#/definitions/") :] + prop_val["type"] = Ref(prop_type, classes_to_generate[prop_type]) def update_class_to_generate_register_dec(classes_to_generate, class_to_generate): # Default - class_to_generate['register_request'] = '' - class_to_generate['register_dec'] = '@register' + class_to_generate["register_request"] = "" + class_to_generate["register_dec"] = "@register" - properties = class_to_generate.get('properties') - enum_type = properties.get('type', {}).get('enum') + properties = class_to_generate.get("properties") + enum_type = properties.get("type", {}).get("enum") command = None event = None if enum_type and len(enum_type) == 1 and next(iter(enum_type)) in ("request", "response", "event"): msg_type = next(iter(enum_type)) - if msg_type == 'response': + if msg_type == "response": # The actual command is typed in the request - response_name = class_to_generate['name'] - request_name = response_name[:-len('Response')] + 'Request' + response_name = class_to_generate["name"] + request_name = response_name[: -len("Response")] + "Request" if request_name in classes_to_generate: - command = classes_to_generate[request_name]['properties'].get('command') + command = classes_to_generate[request_name]["properties"].get("command") else: - if response_name == 'ErrorResponse': - command = {'enum': ['error']} + if response_name == "ErrorResponse": + command = {"enum": ["error"]} else: - raise AssertionError('Unhandled: %s' % (response_name,)) + raise AssertionError("Unhandled: %s" % (response_name,)) - elif msg_type == 'request': - command = properties.get('command') + elif msg_type == "request": + command = properties.get("command") - elif msg_type == 'event': - command = properties.get('event') + elif msg_type == "event": + command = properties.get("event") else: - raise AssertionError('Unexpected condition.') + raise AssertionError("Unexpected condition.") if command: - enum = command.get('enum') + enum = command.get("enum") if enum and len(enum) == 1: - class_to_generate['register_request'] = '@register_%s(%r)\n' % (msg_type, enum[0]) + class_to_generate["register_request"] = "@register_%s(%r)\n" % (msg_type, enum[0]) def extract_prop_name_and_prop(class_to_generate): - properties = class_to_generate.get('properties') - required = _OrderedSet(class_to_generate.get('required', _OrderedSet())) + properties = class_to_generate.get("properties") + required = _OrderedSet(class_to_generate.get("required", _OrderedSet())) # Sort so that required come first prop_name_and_prop = list(properties.items()) @@ -264,7 +265,7 @@ def extract_prop_name_and_prop(class_to_generate): def compute_sort_key(x): key = x[0] if key in required: - if key == 'seq': + if key == "seq": return 0.5 # seq when required is after the other required keys (to have a default of -1). return 0 return 1 @@ -275,98 +276,104 @@ def compute_sort_key(x): def update_class_to_generate_to_json(class_to_generate): - required = _OrderedSet(class_to_generate.get('required', _OrderedSet())) + required = _OrderedSet(class_to_generate.get("required", _OrderedSet())) prop_name_and_prop = extract_prop_name_and_prop(class_to_generate) - to_dict_body = ['def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused)'] + to_dict_body = ["def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused)"] translate_prop_names = [] for prop_name, prop in prop_name_and_prop: - if is_variable_to_translate(class_to_generate['name'], prop_name): + if is_variable_to_translate(class_to_generate["name"], prop_name): translate_prop_names.append(prop_name) for prop_name, prop in prop_name_and_prop: namespace = dict(prop_name=prop_name, noqa=_get_noqa_for_var(prop_name)) - to_dict_body.append(' %(prop_name)s = self.%(prop_name)s%(noqa)s' % namespace) + to_dict_body.append(" %(prop_name)s = self.%(prop_name)s%(noqa)s" % namespace) - if prop.get('type') == 'array': + if prop.get("type") == "array": to_dict_body.append(' if %(prop_name)s and hasattr(%(prop_name)s[0], "to_dict"):' % namespace) - to_dict_body.append(' %(prop_name)s = [x.to_dict() for x in %(prop_name)s]' % namespace) + to_dict_body.append(" %(prop_name)s = [x.to_dict() for x in %(prop_name)s]" % namespace) if translate_prop_names: - to_dict_body.append(' if update_ids_to_dap:') + to_dict_body.append(" if update_ids_to_dap:") for prop_name in translate_prop_names: namespace = dict(prop_name=prop_name, noqa=_get_noqa_for_var(prop_name)) - to_dict_body.append(' if %(prop_name)s is not None:' % namespace) - to_dict_body.append(' %(prop_name)s = self._translate_id_to_dap(%(prop_name)s)%(noqa)s' % namespace) + to_dict_body.append(" if %(prop_name)s is not None:" % namespace) + to_dict_body.append(" %(prop_name)s = self._translate_id_to_dap(%(prop_name)s)%(noqa)s" % namespace) if not translate_prop_names: update_dict_ids_from_dap_body = [] else: - update_dict_ids_from_dap_body = ['', '', '@classmethod', 'def update_dict_ids_from_dap(cls, dct):'] + update_dict_ids_from_dap_body = ["", "", "@classmethod", "def update_dict_ids_from_dap(cls, dct):"] for prop_name in translate_prop_names: namespace = dict(prop_name=prop_name) - update_dict_ids_from_dap_body.append(' if %(prop_name)r in dct:' % namespace) - update_dict_ids_from_dap_body.append(' dct[%(prop_name)r] = cls._translate_id_from_dap(dct[%(prop_name)r])' % namespace) - update_dict_ids_from_dap_body.append(' return dct') + update_dict_ids_from_dap_body.append(" if %(prop_name)r in dct:" % namespace) + update_dict_ids_from_dap_body.append(" dct[%(prop_name)r] = cls._translate_id_from_dap(dct[%(prop_name)r])" % namespace) + update_dict_ids_from_dap_body.append(" return dct") - class_to_generate['update_dict_ids_from_dap'] = _indent_lines('\n'.join(update_dict_ids_from_dap_body)) + class_to_generate["update_dict_ids_from_dap"] = _indent_lines("\n".join(update_dict_ids_from_dap_body)) - to_dict_body.append(' dct = {') + to_dict_body.append(" dct = {") first_not_required = False for prop_name, prop in prop_name_and_prop: - use_to_dict = prop['type'].__class__ == Ref and not prop['type'].ref_data.get('is_enum', False) - is_array = prop['type'] == 'array' - ref_array_cls_name = '' + use_to_dict = prop["type"].__class__ == Ref and not prop["type"].ref_data.get("is_enum", False) + is_array = prop["type"] == "array" + ref_array_cls_name = "" if is_array: - ref = prop['items'].get('$ref') + ref = prop["items"].get("$ref") if ref is not None: - ref_array_cls_name = ref.split('/')[-1] + ref_array_cls_name = ref.split("/")[-1] namespace = dict(prop_name=prop_name, ref_array_cls_name=ref_array_cls_name) if prop_name in required: if use_to_dict: - to_dict_body.append(' %(prop_name)r: %(prop_name)s.to_dict(update_ids_to_dap=update_ids_to_dap),' % namespace) + to_dict_body.append(" %(prop_name)r: %(prop_name)s.to_dict(update_ids_to_dap=update_ids_to_dap)," % namespace) else: if ref_array_cls_name: - to_dict_body.append(' %(prop_name)r: [%(ref_array_cls_name)s.update_dict_ids_to_dap(o) for o in %(prop_name)s] if (update_ids_to_dap and %(prop_name)s) else %(prop_name)s,' % namespace) + to_dict_body.append( + " %(prop_name)r: [%(ref_array_cls_name)s.update_dict_ids_to_dap(o) for o in %(prop_name)s] if (update_ids_to_dap and %(prop_name)s) else %(prop_name)s," + % namespace + ) else: - to_dict_body.append(' %(prop_name)r: %(prop_name)s,' % namespace) + to_dict_body.append(" %(prop_name)r: %(prop_name)s," % namespace) else: if not first_not_required: first_not_required = True - to_dict_body.append(' }') + to_dict_body.append(" }") - to_dict_body.append(' if %(prop_name)s is not None:' % namespace) + to_dict_body.append(" if %(prop_name)s is not None:" % namespace) if use_to_dict: - to_dict_body.append(' dct[%(prop_name)r] = %(prop_name)s.to_dict(update_ids_to_dap=update_ids_to_dap)' % namespace) + to_dict_body.append(" dct[%(prop_name)r] = %(prop_name)s.to_dict(update_ids_to_dap=update_ids_to_dap)" % namespace) else: if ref_array_cls_name: - to_dict_body.append(' dct[%(prop_name)r] = [%(ref_array_cls_name)s.update_dict_ids_to_dap(o) for o in %(prop_name)s] if (update_ids_to_dap and %(prop_name)s) else %(prop_name)s' % namespace) + to_dict_body.append( + " dct[%(prop_name)r] = [%(ref_array_cls_name)s.update_dict_ids_to_dap(o) for o in %(prop_name)s] if (update_ids_to_dap and %(prop_name)s) else %(prop_name)s" + % namespace + ) else: - to_dict_body.append(' dct[%(prop_name)r] = %(prop_name)s' % namespace) + to_dict_body.append(" dct[%(prop_name)r] = %(prop_name)s" % namespace) if not first_not_required: first_not_required = True - to_dict_body.append(' }') + to_dict_body.append(" }") - to_dict_body.append(' dct.update(self.kwargs)') - to_dict_body.append(' return dct') + to_dict_body.append(" dct.update(self.kwargs)") + to_dict_body.append(" return dct") - class_to_generate['to_dict'] = _indent_lines('\n'.join(to_dict_body)) + class_to_generate["to_dict"] = _indent_lines("\n".join(to_dict_body)) if not translate_prop_names: update_dict_ids_to_dap_body = [] else: - update_dict_ids_to_dap_body = ['', '', '@classmethod', 'def update_dict_ids_to_dap(cls, dct):'] + update_dict_ids_to_dap_body = ["", "", "@classmethod", "def update_dict_ids_to_dap(cls, dct):"] for prop_name in translate_prop_names: namespace = dict(prop_name=prop_name) - update_dict_ids_to_dap_body.append(' if %(prop_name)r in dct:' % namespace) - update_dict_ids_to_dap_body.append(' dct[%(prop_name)r] = cls._translate_id_to_dap(dct[%(prop_name)r])' % namespace) - update_dict_ids_to_dap_body.append(' return dct') + update_dict_ids_to_dap_body.append(" if %(prop_name)r in dct:" % namespace) + update_dict_ids_to_dap_body.append(" dct[%(prop_name)r] = cls._translate_id_to_dap(dct[%(prop_name)r])" % namespace) + update_dict_ids_to_dap_body.append(" return dct") - class_to_generate['update_dict_ids_to_dap'] = _indent_lines('\n'.join(update_dict_ids_to_dap_body)) + class_to_generate["update_dict_ids_to_dap"] = _indent_lines("\n".join(update_dict_ids_to_dap_body)) def update_class_to_generate_init(class_to_generate): @@ -374,82 +381,84 @@ def update_class_to_generate_init(class_to_generate): init_body = [] docstring = [] - required = _OrderedSet(class_to_generate.get('required', _OrderedSet())) + required = _OrderedSet(class_to_generate.get("required", _OrderedSet())) prop_name_and_prop = extract_prop_name_and_prop(class_to_generate) translate_prop_names = [] for prop_name, prop in prop_name_and_prop: - if is_variable_to_translate(class_to_generate['name'], prop_name): + if is_variable_to_translate(class_to_generate["name"], prop_name): translate_prop_names.append(prop_name) - enum = prop.get('enum') + enum = prop.get("enum") if enum and len(enum) == 1: - init_body.append(' self.%(prop_name)s = %(enum)r' % dict(prop_name=prop_name, enum=next(iter(enum)))) + init_body.append(" self.%(prop_name)s = %(enum)r" % dict(prop_name=prop_name, enum=next(iter(enum)))) else: if prop_name in required: - if prop_name == 'seq': - args.append(prop_name + '=-1') + if prop_name == "seq": + args.append(prop_name + "=-1") else: args.append(prop_name) else: - args.append(prop_name + '=None') + args.append(prop_name + "=None") - if prop['type'].__class__ == Ref: - ref = prop['type'] + if prop["type"].__class__ == Ref: + ref = prop["type"] ref_data = ref.ref_data - if ref_data.get('is_enum', False): - init_body.append(' if %s is not None:' % (prop_name,)) - init_body.append(' assert %s in %s.VALID_VALUES' % (prop_name, str(ref))) - init_body.append(' self.%(prop_name)s = %(prop_name)s' % dict( - prop_name=prop_name)) + if ref_data.get("is_enum", False): + init_body.append(" if %s is not None:" % (prop_name,)) + init_body.append(" assert %s in %s.VALID_VALUES" % (prop_name, str(ref))) + init_body.append(" self.%(prop_name)s = %(prop_name)s" % dict(prop_name=prop_name)) else: - namespace = dict( - prop_name=prop_name, - ref_name=str(ref) - ) - init_body.append(' if %(prop_name)s is None:' % namespace) - init_body.append(' self.%(prop_name)s = %(ref_name)s()' % namespace) - init_body.append(' else:') - init_body.append(' self.%(prop_name)s = %(ref_name)s(update_ids_from_dap=update_ids_from_dap, **%(prop_name)s) if %(prop_name)s.__class__ != %(ref_name)s else %(prop_name)s' % namespace + namespace = dict(prop_name=prop_name, ref_name=str(ref)) + init_body.append(" if %(prop_name)s is None:" % namespace) + init_body.append(" self.%(prop_name)s = %(ref_name)s()" % namespace) + init_body.append(" else:") + init_body.append( + " self.%(prop_name)s = %(ref_name)s(update_ids_from_dap=update_ids_from_dap, **%(prop_name)s) if %(prop_name)s.__class__ != %(ref_name)s else %(prop_name)s" + % namespace ) else: - init_body.append(' self.%(prop_name)s = %(prop_name)s' % dict(prop_name=prop_name)) + init_body.append(" self.%(prop_name)s = %(prop_name)s" % dict(prop_name=prop_name)) - if prop['type'] == 'array': - ref = prop['items'].get('$ref') + if prop["type"] == "array": + ref = prop["items"].get("$ref") if ref is not None: - ref_array_cls_name = ref.split('/')[-1] - init_body.append(' if update_ids_from_dap and self.%(prop_name)s:' % dict(prop_name=prop_name)) - init_body.append(' for o in self.%(prop_name)s:' % dict(prop_name=prop_name)) - init_body.append(' %(ref_array_cls_name)s.update_dict_ids_from_dap(o)' % dict(ref_array_cls_name=ref_array_cls_name)) + ref_array_cls_name = ref.split("/")[-1] + init_body.append(" if update_ids_from_dap and self.%(prop_name)s:" % dict(prop_name=prop_name)) + init_body.append(" for o in self.%(prop_name)s:" % dict(prop_name=prop_name)) + init_body.append( + " %(ref_array_cls_name)s.update_dict_ids_from_dap(o)" % dict(ref_array_cls_name=ref_array_cls_name) + ) - prop_type = prop['type'] - prop_description = prop.get('description', '') + prop_type = prop["type"] + prop_description = prop.get("description", "") if isinstance(prop_description, (list, tuple)): - prop_description = '\n '.join(prop_description) + prop_description = "\n ".join(prop_description) - docstring.append(':param %(prop_type)s %(prop_name)s: %(prop_description)s' % dict( - prop_type=prop_type, prop_name=prop_name, prop_description=prop_description)) + docstring.append( + ":param %(prop_type)s %(prop_name)s: %(prop_description)s" + % dict(prop_type=prop_type, prop_name=prop_name, prop_description=prop_description) + ) if translate_prop_names: - init_body.append(' if update_ids_from_dap:') + init_body.append(" if update_ids_from_dap:") for prop_name in translate_prop_names: - init_body.append(' self.%(prop_name)s = self._translate_id_from_dap(self.%(prop_name)s)' % dict(prop_name=prop_name)) + init_body.append(" self.%(prop_name)s = self._translate_id_from_dap(self.%(prop_name)s)" % dict(prop_name=prop_name)) - docstring = _indent_lines('\n'.join(docstring)) - init_body = '\n'.join(init_body) + docstring = _indent_lines("\n".join(docstring)) + init_body = "\n".join(init_body) # Actually bundle the whole __init__ from the parts. - args = ', '.join(args) + args = ", ".join(args) if args: - args = ', ' + args + args = ", " + args # Note: added kwargs because some messages are expected to be extended by the user (so, we'll actually # make all extendable so that we don't have to worry about which ones -- we loose a little on typing, # but may be better than doing a allow list based on something only pointed out in the documentation). - class_to_generate['init'] = '''def __init__(self%(args)s, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + class_to_generate["init"] = '''def __init__(self%(args)s, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ %(docstring)s """ @@ -457,7 +466,7 @@ def update_class_to_generate_init(class_to_generate): self.kwargs = kwargs ''' % dict(args=args, init_body=init_body, docstring=docstring) - class_to_generate['init'] = _indent_lines(class_to_generate['init']) + class_to_generate["init"] = _indent_lines(class_to_generate["init"]) def update_class_to_generate_props(class_to_generate): @@ -466,48 +475,52 @@ def update_class_to_generate_props(class_to_generate): def default(o): if isinstance(o, Ref): return o.ref - raise AssertionError('Unhandled: %s' % (o,)) + raise AssertionError("Unhandled: %s" % (o,)) - properties = class_to_generate['properties'] - class_to_generate['props'] = ' __props__ = %s' % _indent_lines( - json.dumps(properties, indent=4, default=default)).strip() + properties = class_to_generate["properties"] + class_to_generate["props"] = ( + " __props__ = %s" % _indent_lines(json.dumps(properties, indent=4, default=default).replace("true", "True")).strip() + ) def update_class_to_generate_refs(class_to_generate): - properties = class_to_generate['properties'] - class_to_generate['refs'] = ' __refs__ = %s' % _OrderedSet( - key for (key, val) in properties.items() if val['type'].__class__ == Ref).set_repr() + properties = class_to_generate["properties"] + class_to_generate["refs"] = ( + " __refs__ = %s" % _OrderedSet(key for (key, val) in properties.items() if val["type"].__class__ == Ref).set_repr() + ) def update_class_to_generate_enums(class_to_generate): - class_to_generate['enums'] = '' - if class_to_generate.get('is_enum', False): - enums = '' - for enum in class_to_generate['enum_values']: - enums += ' %s = %r\n' % (enum.upper(), enum) - enums += '\n' - enums += ' VALID_VALUES = %s\n\n' % _OrderedSet(class_to_generate['enum_values']).set_repr() - class_to_generate['enums'] = enums + class_to_generate["enums"] = "" + if class_to_generate.get("is_enum", False): + enums = "" + for enum in class_to_generate["enum_values"]: + enums += " %s = %r\n" % (enum.upper(), enum) + enums += "\n" + enums += " VALID_VALUES = %s\n\n" % _OrderedSet(class_to_generate["enum_values"]).set_repr() + class_to_generate["enums"] = enums def update_class_to_generate_objects(classes_to_generate, class_to_generate): - properties = class_to_generate['properties'] + properties = class_to_generate["properties"] for key, val in properties.items(): - if 'type' not in val: - val['type'] = 'TypeNA' + if "type" not in val: + val["type"] = "TypeNA" continue - if val['type'] == 'object': + if val["type"] == "object": create_new = val.copy() - create_new.update({ - 'name': '%s%s' % (class_to_generate['name'], key.title()), - 'description': ' "%s" of %s' % (key, class_to_generate['name']) - }) - if 'properties' not in create_new: - create_new['properties'] = {} - - assert create_new['name'] not in classes_to_generate - classes_to_generate[create_new['name']] = create_new + create_new.update( + { + "name": "%s%s" % (class_to_generate["name"], key.title()), + "description": ' "%s" of %s' % (key, class_to_generate["name"]), + } + ) + if "properties" not in create_new: + create_new["properties"] = {} + + assert create_new["name"] not in classes_to_generate + classes_to_generate[create_new["name"]] = create_new update_class_to_generate_type(classes_to_generate, create_new) update_class_to_generate_props(create_new) @@ -515,8 +528,8 @@ def update_class_to_generate_objects(classes_to_generate, class_to_generate): # Update nested object types update_class_to_generate_objects(classes_to_generate, create_new) - val['type'] = Ref(create_new['name'], classes_to_generate[create_new['name']]) - val.pop('properties', None) + val["type"] = Ref(create_new["name"], classes_to_generate[create_new["name"]]) + val.pop("properties", None) def gen_debugger_protocol(): @@ -524,7 +537,7 @@ def gen_debugger_protocol(): import sys if sys.version_info[:2] < (3, 6): - raise AssertionError('Must be run with Python 3.6 onwards (to keep dict order).') + raise AssertionError("Must be run with Python 3.6 onwards (to keep dict order).") classes_to_generate = create_classes_to_generate_structure(load_schema_data()) classes_to_generate.update(create_classes_to_generate_structure(load_custom_schema_data())) @@ -564,29 +577,28 @@ class %(name)s(BaseSchema): ''' contents = [] - contents.append('# coding: utf-8') - contents.append('# Automatically generated code.') - contents.append('# Do not edit manually.') - contents.append('# Generated by running: %s' % os.path.basename(__file__)) - contents.append('from .pydevd_base_schema import BaseSchema, register, register_request, register_response, register_event') - contents.append('') + contents.append("# coding: utf-8") + contents.append("# Automatically generated code.") + contents.append("# Do not edit manually.") + contents.append("# Generated by running: %s" % os.path.basename(__file__)) + contents.append("from .pydevd_base_schema import BaseSchema, register, register_request, register_response, register_event") + contents.append("") for class_to_generate in classes_to_generate.values(): contents.append(class_template % class_to_generate) parent_dir = os.path.dirname(__file__) - schema = os.path.join(parent_dir, 'pydevd_schema.py') - with open(schema, 'w', encoding='utf-8') as stream: - stream.write('\n'.join(contents)) + schema = os.path.join(parent_dir, "pydevd_schema.py") + with open(schema, "w", encoding="utf-8") as stream: + stream.write("\n".join(contents)) -def _indent_lines(lines, indent=' '): +def _indent_lines(lines, indent=" "): out_lines = [] for line in lines.splitlines(keepends=True): out_lines.append(indent + line) - return ''.join(out_lines) - + return "".join(out_lines) -if __name__ == '__main__': +if __name__ == "__main__": gen_debugger_protocol() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json index 8bbe94419..406edfcba 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/debugProtocol.json @@ -14,7 +14,7 @@ "properties": { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request." }, "type": { "type": "string", @@ -84,7 +84,7 @@ }, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." + "description": "Outcome of the request.\nIf true, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`)." }, "command": { "type": "string", @@ -92,15 +92,16 @@ }, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ "cancelled" ], + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": [ "cancelled", "notStopped" ], "enumDescriptions": [ - "request was cancelled." + "the request was cancelled.", + "the request may be retried once the adapter is in a 'stopped' state." ] }, "body": { "type": [ "array", "boolean", "integer", "null", "number" , "object", "string" ], - "description": "Contains request result if success is true and optional error details if success is false." + "description": "Contains request result if success is true and error details if success is false." } }, "required": [ "type", "request_seq", "success", "command" ] @@ -110,14 +111,14 @@ "ErrorResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "On error (whenever 'success' is false), the body can provide more details.", + "description": "On error (whenever `success` is false), the body can provide more details.", "properties": { "body": { "type": "object", "properties": { "error": { "$ref": "#/definitions/Message", - "description": "An optional, structured error message." + "description": "A structured error message." } } } @@ -129,7 +130,7 @@ "CancelRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The 'cancel' request is used by the frontend in two situations:\n- to indicate that it is no longer interested in the result produced by a specific request issued earlier\n- to cancel a progress sequence. Clients should only call this request if the capability 'supportsCancelRequest' is true.\nThis request has a hint characteristic: a debug adapter can only be expected to make a 'best effort' in honouring this request but there are no guarantees.\nThe 'cancel' request may return an error if it could not cancel an operation but a frontend should refrain from presenting this error to end users.\nA frontend client should only call this request if the capability 'supportsCancelRequest' is true.\nThe request that got canceled still needs to send a response back. This can either be a normal result ('success' attribute true)\nor an error response ('success' attribute false and the 'message' set to 'cancelled').\nReturning partial results from a cancelled request is possible but please note that a frontend client has no generic way for detecting that a response is partial or not.\n The progress that got cancelled still needs to send a 'progressEnd' event back.\n A client should not assume that progress just got cancelled after sending the 'cancel' request.", + "description": "The `cancel` request is used by the client in two situations:\n- to indicate that it is no longer interested in the result produced by a specific request issued earlier\n- to cancel a progress sequence.\nClients should only call this request if the corresponding capability `supportsCancelRequest` is true.\nThis request has a hint characteristic: a debug adapter can only be expected to make a 'best effort' in honoring this request but there are no guarantees.\nThe `cancel` request may return an error if it could not cancel an operation but a client should refrain from presenting this error to end users.\nThe request that got cancelled still needs to send a response back. This can either be a normal result (`success` attribute true) or an error response (`success` attribute false and the `message` set to `cancelled`).\nReturning partial results from a cancelled request is possible but please note that a client has no generic way for detecting that a response is partial or not.\nThe progress that got cancelled still needs to send a `progressEnd` event back.\n A client should not assume that progress just got cancelled after sending the `cancel` request.", "properties": { "command": { "type": "string", @@ -144,22 +145,22 @@ }, "CancelArguments": { "type": "object", - "description": "Arguments for 'cancel' request.", + "description": "Arguments for `cancel` request.", "properties": { "requestId": { "type": "integer", - "description": "The ID (attribute 'seq') of the request to cancel. If missing no request is cancelled.\nBoth a 'requestId' and a 'progressId' can be specified in one request." + "description": "The ID (attribute `seq`) of the request to cancel. If missing no request is cancelled.\nBoth a `requestId` and a `progressId` can be specified in one request." }, "progressId": { "type": "string", - "description": "The ID (attribute 'progressId') of the progress to cancel. If missing no progress is cancelled.\nBoth a 'requestId' and a 'progressId' can be specified in one request." + "description": "The ID (attribute `progressId`) of the progress to cancel. If missing no progress is cancelled.\nBoth a `requestId` and a `progressId` can be specified in one request." } } }, "CancelResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'cancel' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `cancel` request. This is just an acknowledgement, so no body field is required." }] }, @@ -167,7 +168,7 @@ "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", "title": "Events", - "description": "This event indicates that the debug adapter is ready to accept configuration requests (e.g. SetBreakpointsRequest, SetExceptionBreakpointsRequest).\nA debug adapter is expected to send this event when it is ready to accept configuration requests (but not before the 'initialize' request has finished).\nThe sequence of events/requests is as follows:\n- adapters sends 'initialized' event (after the 'initialize' request has returned)\n- frontend sends zero or more 'setBreakpoints' requests\n- frontend sends one 'setFunctionBreakpoints' request (if capability 'supportsFunctionBreakpoints' is true)\n- frontend sends a 'setExceptionBreakpoints' request if one or more 'exceptionBreakpointFilters' have been defined (or if 'supportsConfigurationDoneRequest' is not defined or false)\n- frontend sends other future configuration requests\n- frontend sends one 'configurationDone' request to indicate the end of the configuration.", + "description": "This event indicates that the debug adapter is ready to accept configuration requests (e.g. `setBreakpoints`, `setExceptionBreakpoints`).\nA debug adapter is expected to send this event when it is ready to accept configuration requests (but not before the `initialize` request has finished).\nThe sequence of events/requests is as follows:\n- adapters sends `initialized` event (after the `initialize` request has returned)\n- client sends zero or more `setBreakpoints` requests\n- client sends one `setFunctionBreakpoints` request (if corresponding capability `supportsFunctionBreakpoints` is true)\n- client sends a `setExceptionBreakpoints` request if one or more `exceptionBreakpointFilters` have been defined (or if `supportsConfigurationDoneRequest` is not true)\n- client sends other future configuration requests\n- client sends one `configurationDone` request to indicate the end of the configuration.", "properties": { "event": { "type": "string", @@ -181,7 +182,7 @@ "StoppedEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event indicates that the execution of the debuggee has stopped due to some condition.\nThis can be caused by a break point previously set, a stepping request has completed, by executing a debugger statement etc.", + "description": "The event indicates that the execution of the debuggee has stopped due to some condition.\nThis can be caused by a breakpoint previously set, a stepping request has completed, by executing a debugger statement etc.", "properties": { "event": { "type": "string", @@ -192,12 +193,12 @@ "properties": { "reason": { "type": "string", - "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the 'description' attribute is missing (but it must not be translated).", + "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the `description` attribute is missing (but it must not be translated).", "_enum": [ "step", "breakpoint", "exception", "pause", "entry", "goto", "function breakpoint", "data breakpoint", "instruction breakpoint" ] }, "description": { "type": "string", - "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and must be translated." + "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and can be translated." }, "threadId": { "type": "integer", @@ -205,22 +206,22 @@ }, "preserveFocusHint": { "type": "boolean", - "description": "A value of true hints to the frontend that this event should not change the focus." + "description": "A value of true hints to the client that this event should not change the focus." }, "text": { "type": "string", - "description": "Additional information. E.g. if reason is 'exception', text contains the exception name. This string is shown in the UI." + "description": "Additional information. E.g. if reason is `exception`, text contains the exception name. This string is shown in the UI." }, "allThreadsStopped": { "type": "boolean", - "description": "If 'allThreadsStopped' is true, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given threadId can be expanded." + "description": "If `allThreadsStopped` is true, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given `threadId` can be expanded." }, "hitBreakpointIds": { "type": "array", "items": { "type": "integer" }, - "description": "Ids of the breakpoints that triggered the event. In most cases there will be only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location." + "description": "Ids of the breakpoints that triggered the event. In most cases there is only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location." } }, "required": [ "reason" ] @@ -233,7 +234,7 @@ "ContinuedEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event indicates that the execution of the debuggee has continued.\nPlease note: a debug adapter is not expected to send this event in response to a request that implies that execution continues, e.g. 'launch' or 'continue'.\nIt is only necessary to send a 'continued' event if there was no previous request that implied this.", + "description": "The event indicates that the execution of the debuggee has continued.\nPlease note: a debug adapter is not expected to send this event in response to a request that implies that execution continues, e.g. `launch` or `continue`.\nIt is only necessary to send a `continued` event if there was no previous request that implied this.", "properties": { "event": { "type": "string", @@ -248,7 +249,7 @@ }, "allThreadsContinued": { "type": "boolean", - "description": "If 'allThreadsContinued' is true, a debug adapter can announce that all threads have continued." + "description": "If `allThreadsContinued` is true, a debug adapter can announce that all threads have continued." } }, "required": [ "threadId" ] @@ -296,7 +297,7 @@ "properties": { "restart": { "type": [ "array", "boolean", "integer", "null", "number", "object", "string" ], - "description": "A debug adapter may set 'restart' to true (or to an arbitrary object) to request that the front end restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute '__restart' to the 'launch' and 'attach' requests." + "description": "A debug adapter may set `restart` to true (or to an arbitrary object) to request that the client restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute `__restart` to the `launch` and `attach` requests." } } } @@ -348,11 +349,11 @@ "properties": { "category": { "type": "string", - "description": "The output category. If not specified or if the category is not understand by the client, 'console' is assumed.", + "description": "The output category. If not specified or if the category is not understood by the client, `console` is assumed.", "_enum": [ "console", "important", "stdout", "stderr", "telemetry" ], "enumDescriptions": [ "Show the output in the client's default message UI, e.g. a 'debug console'. This category should only be used for informational output from the debugger (as opposed to the debuggee).", - "A hint for the client to show the ouput in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the 'console' category.", + "A hint for the client to show the output in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the `console` category.", "Show the output as normal program output from the debuggee.", "Show the output as error program output from the debuggee.", "Send the output to telemetry instead of showing it to the user." @@ -367,30 +368,30 @@ "description": "Support for keeping an output log organized by grouping related messages.", "enum": [ "start", "startCollapsed", "end" ], "enumDescriptions": [ - "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe 'output' attribute becomes the name of the group and is not indented.", - "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe 'output' attribute becomes the name of the group and is not indented.", - "End the current group and decreases the indentation of subsequent output events.\nA non empty 'output' attribute is shown as the unindented end of the group." + "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe `output` attribute becomes the name of the group and is not indented.", + "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe `output` attribute becomes the name of the group and is not indented.", + "End the current group and decrease the indentation of subsequent output events.\nA non-empty `output` attribute is shown as the unindented end of the group." ] }, "variablesReference": { "type": "integer", - "description": "If an attribute 'variablesReference' exists and its value is > 0, the output contains objects which can be retrieved by passing 'variablesReference' to the 'variables' request. The value should be less than or equal to 2147483647 (2^31-1)." + "description": "If an attribute `variablesReference` exists and its value is > 0, the output contains objects which can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "source": { "$ref": "#/definitions/Source", - "description": "An optional source location where the output was produced." + "description": "The source location where the output was produced." }, "line": { "type": "integer", - "description": "An optional source location line where the output was produced." + "description": "The source location's line where the output was produced." }, "column": { "type": "integer", - "description": "An optional source location column where the output was produced." + "description": "The position in `line` where the output was produced. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "data": { "type": [ "array", "boolean", "integer", "null", "number" , "object", "string" ], - "description": "Optional data to report. For the 'telemetry' category the data will be sent to telemetry, for the other categories the data is shown in JSON format." + "description": "Additional data to report. For the `telemetry` category the data is sent to telemetry, for the other categories the data is shown in JSON format." } }, "required": ["output"] @@ -419,7 +420,7 @@ }, "breakpoint": { "$ref": "#/definitions/Breakpoint", - "description": "The 'id' attribute is used to find the target breakpoint and the other attributes are used as the new values." + "description": "The `id` attribute is used to find the target breakpoint, the other attributes are used as the new values." } }, "required": [ "reason", "breakpoint" ] @@ -448,7 +449,7 @@ }, "module": { "$ref": "#/definitions/Module", - "description": "The new, changed, or removed module. In case of 'removed' only the module id is used." + "description": "The new, changed, or removed module. In case of `removed` only the module id is used." } }, "required": [ "reason", "module" ] @@ -507,7 +508,7 @@ }, "systemProcessId": { "type": "integer", - "description": "The system process id of the debugged process. This property will be missing for non-system processes." + "description": "The system process id of the debugged process. This property is missing for non-system processes." }, "isLocalProcess": { "type": "boolean", @@ -539,7 +540,7 @@ "CapabilitiesEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event indicates that one or more capabilities have changed.\nSince the capabilities are dependent on the frontend and its UI, it might not be possible to change that at random times (or too late).\nConsequently this event has a hint characteristic: a frontend can only be expected to make a 'best effort' in honouring individual capabilities but there are no guarantees.\nOnly changed capabilities need to be included, all other capabilities keep their values.", + "description": "The event indicates that one or more capabilities have changed.\nSince the capabilities are dependent on the client and its UI, it might not be possible to change that at random times (or too late).\nConsequently this event has a hint characteristic: a client can only be expected to make a 'best effort' in honoring individual capabilities but there are no guarantees.\nOnly changed capabilities need to be included, all other capabilities keep their values.", "properties": { "event": { "type": "string", @@ -563,7 +564,7 @@ "ProgressStartEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event signals that a long running operation is about to start and\nprovides additional information for the client to set up a corresponding progress and cancellation UI.\nThe client is free to delay the showing of the UI in order to reduce flicker.\nThis event should only be sent if the client has passed the value true for the 'supportsProgressReporting' capability of the 'initialize' request.", + "description": "The event signals that a long running operation is about to start and provides additional information for the client to set up a corresponding progress and cancellation UI.\nThe client is free to delay the showing of the UI in order to reduce flicker.\nThis event should only be sent if the corresponding capability `supportsProgressReporting` is true.", "properties": { "event": { "type": "string", @@ -574,27 +575,27 @@ "properties": { "progressId": { "type": "string", - "description": "An ID that must be used in subsequent 'progressUpdate' and 'progressEnd' events to make them refer to the same progress reporting.\nIDs must be unique within a debug session." + "description": "An ID that can be used in subsequent `progressUpdate` and `progressEnd` events to make them refer to the same progress reporting.\nIDs must be unique within a debug session." }, "title": { "type": "string", - "description": "Mandatory (short) title of the progress reporting. Shown in the UI to describe the long running operation." + "description": "Short title of the progress reporting. Shown in the UI to describe the long running operation." }, "requestId": { "type": "integer", - "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit\nprogress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter." + "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit progress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter." }, "cancellable": { "type": "boolean", - "description": "If true, the request that reports progress may be canceled with a 'cancel' request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting." + "description": "If true, the request that reports progress may be cancelled with a `cancel` request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting." }, "message": { "type": "string", - "description": "Optional, more detailed progress message." + "description": "More detailed progress message." }, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown." } }, "required": [ "progressId", "title" ] @@ -607,7 +608,7 @@ "ProgressUpdateEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event signals that the progress reporting needs to updated with a new message and/or percentage.\nThe client does not have to update the UI immediately, but the clients needs to keep track of the message and/or percentage values.\nThis event should only be sent if the client has passed the value true for the 'supportsProgressReporting' capability of the 'initialize' request.", + "description": "The event signals that the progress reporting needs to be updated with a new message and/or percentage.\nThe client does not have to update the UI immediately, but the clients needs to keep track of the message and/or percentage values.\nThis event should only be sent if the corresponding capability `supportsProgressReporting` is true.", "properties": { "event": { "type": "string", @@ -618,15 +619,15 @@ "properties": { "progressId": { "type": "string", - "description": "The ID that was introduced in the initial 'progressStart' event." + "description": "The ID that was introduced in the initial `progressStart` event." }, "message": { "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." + "description": "More detailed progress message. If omitted, the previous message (if any) is used." }, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown." } }, "required": [ "progressId" ] @@ -639,7 +640,7 @@ "ProgressEndEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "The event signals the end of the progress reporting with an optional final message.\nThis event should only be sent if the client has passed the value true for the 'supportsProgressReporting' capability of the 'initialize' request.", + "description": "The event signals the end of the progress reporting with a final message.\nThis event should only be sent if the corresponding capability `supportsProgressReporting` is true.", "properties": { "event": { "type": "string", @@ -650,11 +651,11 @@ "properties": { "progressId": { "type": "string", - "description": "The ID that was introduced in the initial 'ProgressStartEvent'." + "description": "The ID that was introduced in the initial `ProgressStartEvent`." }, "message": { "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." + "description": "More detailed progress message. If omitted, the previous message (if any) is used." } }, "required": [ "progressId" ] @@ -667,7 +668,7 @@ "InvalidatedEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "This event signals that some state in the debug adapter has changed and requires that the client needs to re-render the data snapshot previously requested.\nDebug adapters do not have to emit this event for runtime changes like stopped or thread events because in that case the client refetches the new state anyway. But the event can be used for example to refresh the UI after rendering formatting has changed in the debug adapter.\nThis event should only be sent if the debug adapter has received a value true for the 'supportsInvalidatedEvent' capability of the 'initialize' request.", + "description": "This event signals that some state in the debug adapter has changed and requires that the client needs to re-render the data snapshot previously requested.\nDebug adapters do not have to emit this event for runtime changes like stopped or thread events because in that case the client refetches the new state anyway. But the event can be used for example to refresh the UI after rendering formatting has changed in the debug adapter.\nThis event should only be sent if the corresponding capability `supportsInvalidatedEvent` is true.", "properties": { "event": { "type": "string", @@ -678,7 +679,7 @@ "properties": { "areas": { "type": "array", - "description": "Optional set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honouring the areas but there are no guarantees. If this property is missing, empty, or if values are not understand the client should assume a single value 'all'.", + "description": "Set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honoring the areas but there are no guarantees. If this property is missing, empty, or if values are not understood, the client should assume a single value `all`.", "items": { "$ref": "#/definitions/InvalidatedAreas" } @@ -689,7 +690,7 @@ }, "stackFrameId": { "type": "integer", - "description": "If specified, the client only needs to refetch data related to this stack frame (and the 'threadId' is ignored)." + "description": "If specified, the client only needs to refetch data related to this stack frame (and the `threadId` is ignored)." } } } @@ -701,7 +702,7 @@ "MemoryEvent": { "allOf": [ { "$ref": "#/definitions/Event" }, { "type": "object", - "description": "This event indicates that some memory range has been updated. It should only be sent if the debug adapter has received a value true for the `supportsMemoryEvent` capability of the `initialize` request.\nClients typically react to the event by re-issuing a `readMemory` request if they show the memory identified by the `memoryReference` and if the updated memory range overlaps the displayed range. Clients should not make assumptions how individual memory references relate to each other, so they should not assume that they are part of a single continuous address range and might overlap.\nDebug adapters can use this event to indicate that the contents of a memory range has changed due to some other DAP request like `setVariable` or `setExpression`. Debug adapters are not expected to emit this event for each and every memory change of a running program, because that information is typically not available from debuggers and it would flood clients with too many events.", + "description": "This event indicates that some memory range has been updated. It should only be sent if the corresponding capability `supportsMemoryEvent` is true.\nClients typically react to the event by re-issuing a `readMemory` request if they show the memory identified by the `memoryReference` and if the updated memory range overlaps the displayed range. Clients should not make assumptions how individual memory references relate to each other, so they should not assume that they are part of a single continuous address range and might overlap.\nDebug adapters can use this event to indicate that the contents of a memory range has changed due to some other request like `setVariable` or `setExpression`. Debug adapters are not expected to emit this event for each and every memory change of a running program, because that information is typically not available from debuggers and it would flood clients with too many events.", "properties": { "event": { "type": "string", @@ -734,7 +735,7 @@ "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", "title": "Reverse Requests", - "description": "This optional request is sent from the debug adapter to the client to run a command in a terminal.\nThis is typically used to launch the debuggee in a terminal provided by the client.\nThis request should only be called if the client has passed the value true for the 'supportsRunInTerminalRequest' capability of the 'initialize' request.", + "description": "This request is sent from the debug adapter to the client to run a command in a terminal.\nThis is typically used to launch the debuggee in a terminal provided by the client.\nThis request should only be called if the corresponding client capability `supportsRunInTerminalRequest` is true.\nClient implementations of `runInTerminal` are free to run the command however they choose including issuing the command to a command line interpreter (aka 'shell'). Argument strings passed to the `runInTerminal` request must arrive verbatim in the command to be run. As a consequence, clients which use a shell are responsible for escaping any special shell characters in the argument strings to prevent them from being interpreted (and modified) by the shell.\nSome users may wish to take advantage of shell processing in the argument strings. For clients which implement `runInTerminal` using an intermediary shell, the `argsCanBeInterpretedByShell` property can be set to true. In this case the client is requested not to escape any special shell characters in the argument strings.", "properties": { "command": { "type": "string", @@ -749,16 +750,16 @@ }, "RunInTerminalRequestArguments": { "type": "object", - "description": "Arguments for 'runInTerminal' request.", + "description": "Arguments for `runInTerminal` request.", "properties": { "kind": { "type": "string", "enum": [ "integrated", "external" ], - "description": "What kind of terminal to launch." + "description": "What kind of terminal to launch. Defaults to `integrated` if not specified." }, "title": { "type": "string", - "description": "Optional title of the terminal." + "description": "Title of the terminal." }, "cwd": { "type": "string", @@ -776,8 +777,12 @@ "description": "Environment key-value pairs that are added to or removed from the default environment.", "additionalProperties": { "type": [ "string", "null" ], - "description": "Proper values must be strings. A value of 'null' removes the variable from the environment." + "description": "A string is a proper value for an environment variable. The value `null` removes the variable from the environment." } + }, + "argsCanBeInterpretedByShell": { + "type": "boolean", + "description": "This property should only be set if the corresponding capability `supportsArgsCanBeInterpretedByShell` is true. If the client uses an intermediary shell to launch the application, then the client must not attempt to escape characters with special meanings for the shell. The user is fully responsible for escaping as needed and that arguments using special characters may not be portable across shells." } }, "required": [ "args", "cwd" ] @@ -785,7 +790,7 @@ "RunInTerminalResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'runInTerminal' request.", + "description": "Response to `runInTerminal` request.", "properties": { "body": { "type": "object", @@ -804,12 +809,72 @@ "required": [ "body" ] }] }, + "StartDebuggingRequest": { + "allOf": [ + { + "$ref": "#/definitions/Request" + }, + { + "type": "object", + "description": "This request is sent from the debug adapter to the client to start a new debug session of the same type as the caller.\nThis request should only be sent if the corresponding client capability `supportsStartDebuggingRequest` is true.\nA client implementation of `startDebugging` should start a new debug session (of the same type as the caller) in the same way that the caller's session was started. If the client supports hierarchical debug sessions, the newly created session can be treated as a child of the caller session.", + "properties": { + "command": { + "type": "string", + "enum": [ + "startDebugging" + ] + }, + "arguments": { + "$ref": "#/definitions/StartDebuggingRequestArguments" + } + }, + "required": [ + "command", + "arguments" + ] + } + ] + }, + "StartDebuggingRequestArguments": { + "type": "object", + "description": "Arguments for `startDebugging` request.", + "properties": { + "configuration": { + "type": "object", + "additionalProperties": true, + "description": "Arguments passed to the new debug session. The arguments must only contain properties understood by the `launch` or `attach` requests of the debug adapter and they must not contain any client-specific properties (e.g. `type`) or client-specific features (e.g. substitutable 'variables')." + }, + "request": { + "type": "string", + "enum": [ + "launch", + "attach" + ], + "description": "Indicates whether the new debug session should be started with a `launch` or `attach` request." + } + }, + "required": [ + "configuration", + "request" + ] + }, + "StartDebuggingResponse": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "description": "Response to `startDebugging` request. This is just an acknowledgement, so no body field is required." + } + ] + }, "InitializeRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", "title": "Requests", - "description": "The 'initialize' request is sent as the first request from the client to the debug adapter\nin order to configure it with client capabilities and to retrieve capabilities from the debug adapter.\nUntil the debug adapter has responded to with an 'initialize' response, the client must not send any additional requests or events to the debug adapter.\nIn addition the debug adapter is not allowed to send any requests or events to the client until it has responded with an 'initialize' response.\nThe 'initialize' request may only be sent once.", + "description": "The `initialize` request is sent as the first request from the client to the debug adapter in order to configure it with client capabilities and to retrieve capabilities from the debug adapter.\nUntil the debug adapter has responded with an `initialize` response, the client must not send any additional requests or events to the debug adapter.\nIn addition the debug adapter is not allowed to send any requests or events to the client until it has responded with an `initialize` response.\nThe `initialize` request may only be sent once.", "properties": { "command": { "type": "string", @@ -824,15 +889,15 @@ }, "InitializeRequestArguments": { "type": "object", - "description": "Arguments for 'initialize' request.", + "description": "Arguments for `initialize` request.", "properties": { "clientID": { "type": "string", - "description": "The ID of the (frontend) client using this adapter." + "description": "The ID of the client using this adapter." }, "clientName": { "type": "string", - "description": "The human readable name of the (frontend) client using this adapter." + "description": "The human-readable name of the client using this adapter." }, "adapterID": { "type": "string", @@ -840,7 +905,7 @@ }, "locale": { "type": "string", - "description": "The ISO-639 locale of the (frontend) client using this adapter, e.g. en-US or de-CH." + "description": "The ISO-639 locale of the client using this adapter, e.g. en-US or de-CH." }, "linesStartAt1": { "type": "boolean", @@ -853,11 +918,11 @@ "pathFormat": { "type": "string", "_enum": [ "path", "uri" ], - "description": "Determines in what format paths are specified. The default is 'path', which is the native format." + "description": "Determines in what format paths are specified. The default is `path`, which is the native format." }, "supportsVariableType": { "type": "boolean", - "description": "Client supports the optional type attribute for variables." + "description": "Client supports the `type` attribute for variables." }, "supportsVariablePaging": { "type": "boolean", @@ -865,7 +930,7 @@ }, "supportsRunInTerminalRequest": { "type": "boolean", - "description": "Client supports the runInTerminal request." + "description": "Client supports the `runInTerminal` request." }, "supportsMemoryReferences": { "type": "boolean", @@ -877,11 +942,19 @@ }, "supportsInvalidatedEvent": { "type": "boolean", - "description": "Client supports the invalidated event." + "description": "Client supports the `invalidated` event." }, "supportsMemoryEvent": { "type": "boolean", - "description": "Client supports the memory event." + "description": "Client supports the `memory` event." + }, + "supportsArgsCanBeInterpretedByShell": { + "type": "boolean", + "description": "Client supports the `argsCanBeInterpretedByShell` attribute on the `runInTerminal` request." + }, + "supportsStartDebuggingRequest": { + "type": "boolean", + "description": "Client supports the `startDebugging` request." } }, "required": [ "adapterID" ] @@ -889,7 +962,7 @@ "InitializeResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'initialize' request.", + "description": "Response to `initialize` request.", "properties": { "body": { "$ref": "#/definitions/Capabilities", @@ -902,7 +975,7 @@ "ConfigurationDoneRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "This optional request indicates that the client has finished initialization of the debug adapter.\nSo it is the last request in the sequence of configuration requests (which was started by the 'initialized' event).\nClients should only call this request if the capability 'supportsConfigurationDoneRequest' is true.", + "description": "This request indicates that the client has finished initialization of the debug adapter.\nSo it is the last request in the sequence of configuration requests (which was started by the `initialized` event).\nClients should only call this request if the corresponding capability `supportsConfigurationDoneRequest` is true.", "properties": { "command": { "type": "string", @@ -917,19 +990,19 @@ }, "ConfigurationDoneArguments": { "type": "object", - "description": "Arguments for 'configurationDone' request." + "description": "Arguments for `configurationDone` request." }, "ConfigurationDoneResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'configurationDone' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `configurationDone` request. This is just an acknowledgement, so no body field is required." }] }, "LaunchRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "This launch request is sent from the client to the debug adapter to start the debuggee with or without debugging (if 'noDebug' is true).\nSince launching is debugger/runtime specific, the arguments for this request are not part of this specification.", + "description": "This launch request is sent from the client to the debug adapter to start the debuggee with or without debugging (if `noDebug` is true).\nSince launching is debugger/runtime specific, the arguments for this request are not part of this specification.", "properties": { "command": { "type": "string", @@ -944,29 +1017,29 @@ }, "LaunchRequestArguments": { "type": "object", - "description": "Arguments for 'launch' request. Additional attributes are implementation specific.", + "description": "Arguments for `launch` request. Additional attributes are implementation specific.", "properties": { "noDebug": { "type": "boolean", - "description": "If noDebug is true the launch request should launch the program without enabling debugging." + "description": "If true, the launch request should launch the program without enabling debugging." }, "__restart": { "type": [ "array", "boolean", "integer", "null", "number", "object", "string" ], - "description": "Optional data from the previous, restarted session.\nThe data is sent as the 'restart' attribute of the 'terminated' event.\nThe client should leave the data intact." + "description": "Arbitrary data from the previous, restarted session.\nThe data is sent as the `restart` attribute of the `terminated` event.\nThe client should leave the data intact." } } }, "LaunchResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'launch' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `launch` request. This is just an acknowledgement, so no body field is required." }] }, "AttachRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The attach request is sent from the client to the debug adapter to attach to a debuggee that is already running.\nSince attaching is debugger/runtime specific, the arguments for this request are not part of this specification.", + "description": "The `attach` request is sent from the client to the debug adapter to attach to a debuggee that is already running.\nSince attaching is debugger/runtime specific, the arguments for this request are not part of this specification.", "properties": { "command": { "type": "string", @@ -981,25 +1054,25 @@ }, "AttachRequestArguments": { "type": "object", - "description": "Arguments for 'attach' request. Additional attributes are implementation specific.", + "description": "Arguments for `attach` request. Additional attributes are implementation specific.", "properties": { "__restart": { "type": [ "array", "boolean", "integer", "null", "number", "object", "string" ], - "description": "Optional data from the previous, restarted session.\nThe data is sent as the 'restart' attribute of the 'terminated' event.\nThe client should leave the data intact." + "description": "Arbitrary data from the previous, restarted session.\nThe data is sent as the `restart` attribute of the `terminated` event.\nThe client should leave the data intact." } } }, "AttachResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'attach' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `attach` request. This is just an acknowledgement, so no body field is required." }] }, "RestartRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Restarts a debug session. Clients should only call this request if the capability 'supportsRestartRequest' is true.\nIf the capability is missing or has the value false, a typical client will emulate 'restart' by terminating the debug adapter first and then launching it anew.", + "description": "Restarts a debug session. Clients should only call this request if the corresponding capability `supportsRestartRequest` is true.\nIf the capability is missing or has the value false, a typical client emulates `restart` by terminating the debug adapter first and then launching it anew.", "properties": { "command": { "type": "string", @@ -1014,28 +1087,28 @@ }, "RestartArguments": { "type": "object", - "description": "Arguments for 'restart' request.", + "description": "Arguments for `restart` request.", "properties": { "arguments": { "oneOf": [ { "$ref": "#/definitions/LaunchRequestArguments" }, { "$ref": "#/definitions/AttachRequestArguments" } ], - "description": "The latest version of the 'launch' or 'attach' configuration." + "description": "The latest version of the `launch` or `attach` configuration." } } }, "RestartResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'restart' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `restart` request. This is just an acknowledgement, so no body field is required." }] }, "DisconnectRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The 'disconnect' request is sent from the client to the debug adapter in order to stop debugging.\nIt asks the debug adapter to disconnect from the debuggee and to terminate the debug adapter.\nIf the debuggee has been started with the 'launch' request, the 'disconnect' request terminates the debuggee.\nIf the 'attach' request was used to connect to the debuggee, 'disconnect' does not terminate the debuggee.\nThis behavior can be controlled with the 'terminateDebuggee' argument (if supported by the debug adapter).", + "description": "The `disconnect` request asks the debug adapter to disconnect from the debuggee (thus ending the debug session) and then to shut down itself (the debug adapter).\nIn addition, the debug adapter must terminate the debuggee if it was started with the `launch` request. If an `attach` request was used to connect to the debuggee, then the debug adapter must not terminate the debuggee.\nThis implicit behavior of when to terminate the debuggee can be overridden with the `terminateDebuggee` argument (which is only supported by a debug adapter if the corresponding capability `supportTerminateDebuggee` is true).", "properties": { "command": { "type": "string", @@ -1050,33 +1123,33 @@ }, "DisconnectArguments": { "type": "object", - "description": "Arguments for 'disconnect' request.", + "description": "Arguments for `disconnect` request.", "properties": { "restart": { "type": "boolean", - "description": "A value of true indicates that this 'disconnect' request is part of a restart sequence." + "description": "A value of true indicates that this `disconnect` request is part of a restart sequence." }, "terminateDebuggee": { "type": "boolean", - "description": "Indicates whether the debuggee should be terminated when the debugger is disconnected.\nIf unspecified, the debug adapter is free to do whatever it thinks is best.\nThe attribute is only honored by a debug adapter if the capability 'supportTerminateDebuggee' is true." + "description": "Indicates whether the debuggee should be terminated when the debugger is disconnected.\nIf unspecified, the debug adapter is free to do whatever it thinks is best.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportTerminateDebuggee` is true." }, "suspendDebuggee": { "type": "boolean", - "description": "Indicates whether the debuggee should stay suspended when the debugger is disconnected.\nIf unspecified, the debuggee should resume execution.\nThe attribute is only honored by a debug adapter if the capability 'supportSuspendDebuggee' is true." + "description": "Indicates whether the debuggee should stay suspended when the debugger is disconnected.\nIf unspecified, the debuggee should resume execution.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportSuspendDebuggee` is true." } } }, "DisconnectResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'disconnect' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `disconnect` request. This is just an acknowledgement, so no body field is required." }] }, "TerminateRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The 'terminate' request is sent from the client to the debug adapter in order to give the debuggee a chance for terminating itself.\nClients should only call this request if the capability 'supportsTerminateRequest' is true.", + "description": "The `terminate` request is sent from the client to the debug adapter in order to shut down the debuggee gracefully. Clients should only call this request if the capability `supportsTerminateRequest` is true.\nTypically a debug adapter implements `terminate` by sending a software signal which the debuggee intercepts in order to clean things up properly before terminating itself.\nPlease note that this request does not directly affect the state of the debug session: if the debuggee decides to veto the graceful shutdown for any reason by not terminating itself, then the debug session just continues.\nClients can surface the `terminate` request as an explicit command or they can integrate it into a two stage Stop command that first sends `terminate` to request a graceful shutdown, and if that fails uses `disconnect` for a forceful shutdown.", "properties": { "command": { "type": "string", @@ -1091,25 +1164,25 @@ }, "TerminateArguments": { "type": "object", - "description": "Arguments for 'terminate' request.", + "description": "Arguments for `terminate` request.", "properties": { "restart": { "type": "boolean", - "description": "A value of true indicates that this 'terminate' request is part of a restart sequence." + "description": "A value of true indicates that this `terminate` request is part of a restart sequence." } } }, "TerminateResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'terminate' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `terminate` request. This is just an acknowledgement, so no body field is required." }] }, "BreakpointLocationsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The 'breakpointLocations' request returns all possible locations for source breakpoints in a given range.\nClients should only call this request if the capability 'supportsBreakpointLocationsRequest' is true.", + "description": "The `breakpointLocations` request returns all possible locations for source breakpoints in a given range.\nClients should only call this request if the corresponding capability `supportsBreakpointLocationsRequest` is true.", "properties": { "command": { "type": "string", @@ -1125,11 +1198,11 @@ }, "BreakpointLocationsArguments": { "type": "object", - "description": "Arguments for 'breakpointLocations' request.", + "description": "Arguments for `breakpointLocations` request.", "properties": { "source": { "$ref": "#/definitions/Source", - "description": "The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified." + "description": "The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified." }, "line": { "type": "integer", @@ -1137,15 +1210,15 @@ }, "column": { "type": "integer", - "description": "Optional start column of range to search possible breakpoint locations in. If no start column is given, the first column in the start line is assumed." + "description": "Start position within `line` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no column is given, the first position in the start line is assumed." }, "endLine": { "type": "integer", - "description": "Optional end line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line." + "description": "End line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line." }, "endColumn": { "type": "integer", - "description": "Optional end column of range to search possible breakpoint locations in. If no end column is given, then it is assumed to be in the last column of the end line." + "description": "End position within `endLine` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no end column is given, the last position in the end line is assumed." } }, "required": [ "source", "line" ] @@ -1153,7 +1226,7 @@ "BreakpointLocationsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'breakpointLocations' request.\nContains possible locations for source breakpoints.", + "description": "Response to `breakpointLocations` request.\nContains possible locations for source breakpoints.", "properties": { "body": { "type": "object", @@ -1176,7 +1249,7 @@ "SetBreakpointsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Sets multiple breakpoints for a single source and clears all previous breakpoints in that source.\nTo clear all breakpoint for a source, specify an empty array.\nWhen a breakpoint is hit, a 'stopped' event (with reason 'breakpoint') is generated.", + "description": "Sets multiple breakpoints for a single source and clears all previous breakpoints in that source.\nTo clear all breakpoint for a source, specify an empty array.\nWhen a breakpoint is hit, a `stopped` event (with reason `breakpoint`) is generated.", "properties": { "command": { "type": "string", @@ -1191,11 +1264,11 @@ }, "SetBreakpointsArguments": { "type": "object", - "description": "Arguments for 'setBreakpoints' request.", + "description": "Arguments for `setBreakpoints` request.", "properties": { "source": { "$ref": "#/definitions/Source", - "description": "The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified." + "description": "The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified." }, "breakpoints": { "type": "array", @@ -1221,7 +1294,7 @@ "SetBreakpointsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setBreakpoints' request.\nReturned is information about each breakpoint created by this request.\nThis includes the actual code location and whether the breakpoint could be verified.\nThe breakpoints returned are in the same order as the elements of the 'breakpoints'\n(or the deprecated 'lines') array in the arguments.", + "description": "Response to `setBreakpoints` request.\nReturned is information about each breakpoint created by this request.\nThis includes the actual code location and whether the breakpoint could be verified.\nThe breakpoints returned are in the same order as the elements of the `breakpoints`\n(or the deprecated `lines`) array in the arguments.", "properties": { "body": { "type": "object", @@ -1231,7 +1304,7 @@ "items": { "$ref": "#/definitions/Breakpoint" }, - "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the 'breakpoints' (or the deprecated 'lines') array in the arguments." + "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the `breakpoints` (or the deprecated `lines`) array in the arguments." } }, "required": [ "breakpoints" ] @@ -1244,7 +1317,7 @@ "SetFunctionBreakpointsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Replaces all existing function breakpoints with new function breakpoints.\nTo clear all function breakpoints, specify an empty array.\nWhen a function breakpoint is hit, a 'stopped' event (with reason 'function breakpoint') is generated.\nClients should only call this request if the capability 'supportsFunctionBreakpoints' is true.", + "description": "Replaces all existing function breakpoints with new function breakpoints.\nTo clear all function breakpoints, specify an empty array.\nWhen a function breakpoint is hit, a `stopped` event (with reason `function breakpoint`) is generated.\nClients should only call this request if the corresponding capability `supportsFunctionBreakpoints` is true.", "properties": { "command": { "type": "string", @@ -1259,7 +1332,7 @@ }, "SetFunctionBreakpointsArguments": { "type": "object", - "description": "Arguments for 'setFunctionBreakpoints' request.", + "description": "Arguments for `setFunctionBreakpoints` request.", "properties": { "breakpoints": { "type": "array", @@ -1274,7 +1347,7 @@ "SetFunctionBreakpointsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setFunctionBreakpoints' request.\nReturned is information about each breakpoint created by this request.", + "description": "Response to `setFunctionBreakpoints` request.\nReturned is information about each breakpoint created by this request.", "properties": { "body": { "type": "object", @@ -1284,7 +1357,7 @@ "items": { "$ref": "#/definitions/Breakpoint" }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array." } }, "required": [ "breakpoints" ] @@ -1297,7 +1370,7 @@ "SetExceptionBreakpointsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request configures the debuggers response to thrown exceptions.\nIf an exception is configured to break, a 'stopped' event is fired (with reason 'exception').\nClients should only call this request if the capability 'exceptionBreakpointFilters' returns one or more filters.", + "description": "The request configures the debugger's response to thrown exceptions.\nIf an exception is configured to break, a `stopped` event is fired (with reason `exception`).\nClients should only call this request if the corresponding capability `exceptionBreakpointFilters` returns one or more filters.", "properties": { "command": { "type": "string", @@ -1312,28 +1385,28 @@ }, "SetExceptionBreakpointsArguments": { "type": "object", - "description": "Arguments for 'setExceptionBreakpoints' request.", + "description": "Arguments for `setExceptionBreakpoints` request.", "properties": { "filters": { "type": "array", "items": { "type": "string" }, - "description": "Set of exception filters specified by their ID. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. The 'filter' and 'filterOptions' sets are additive." + "description": "Set of exception filters specified by their ID. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. The `filter` and `filterOptions` sets are additive." }, "filterOptions": { "type": "array", "items": { "$ref": "#/definitions/ExceptionFilterOptions" }, - "description": "Set of exception filters and their options. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. This attribute is only honored by a debug adapter if the capability 'supportsExceptionFilterOptions' is true. The 'filter' and 'filterOptions' sets are additive." + "description": "Set of exception filters and their options. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. This attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionFilterOptions` is true. The `filter` and `filterOptions` sets are additive." }, "exceptionOptions": { "type": "array", "items": { "$ref": "#/definitions/ExceptionOptions" }, - "description": "Configuration options for selected exceptions.\nThe attribute is only honored by a debug adapter if the capability 'supportsExceptionOptions' is true." + "description": "Configuration options for selected exceptions.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionOptions` is true." } }, "required": [ "filters" ] @@ -1341,7 +1414,7 @@ "SetExceptionBreakpointsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setExceptionBreakpoints' request.\nThe response contains an array of Breakpoint objects with information about each exception breakpoint or filter. The Breakpoint objects are in the same order as the elements of the 'filters', 'filterOptions', 'exceptionOptions' arrays given as arguments. If both 'filters' and 'filterOptions' are given, the returned array must start with 'filters' information first, followed by 'filterOptions' information.\nThe mandatory 'verified' property of a Breakpoint object signals whether the exception breakpoint or filter could be successfully created and whether the optional condition or hit count expressions are valid. In case of an error the 'message' property explains the problem. An optional 'id' property can be used to introduce a unique ID for the exception breakpoint or filter so that it can be updated subsequently by sending breakpoint events.\nFor backward compatibility both the 'breakpoints' array and the enclosing 'body' are optional. If these elements are missing a client will not be able to show problems for individual exception breakpoints or filters.", + "description": "Response to `setExceptionBreakpoints` request.\nThe response contains an array of `Breakpoint` objects with information about each exception breakpoint or filter. The `Breakpoint` objects are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays given as arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information.\nThe `verified` property of a `Breakpoint` object signals whether the exception breakpoint or filter could be successfully created and whether the condition is valid. In case of an error the `message` property explains the problem. The `id` property can be used to introduce a unique ID for the exception breakpoint or filter so that it can be updated subsequently by sending breakpoint events.\nFor backward compatibility both the `breakpoints` array and the enclosing `body` are optional. If these elements are missing a client is not able to show problems for individual exception breakpoints or filters.", "properties": { "body": { "type": "object", @@ -1351,7 +1424,7 @@ "items": { "$ref": "#/definitions/Breakpoint" }, - "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the 'filters', 'filterOptions', 'exceptionOptions' arrays in the arguments. If both 'filters' and 'filterOptions' are given, the returned array must start with 'filters' information first, followed by 'filterOptions' information." + "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays in the arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information." } } } @@ -1362,7 +1435,7 @@ "DataBreakpointInfoRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Obtains information on a possible data breakpoint that could be set on an expression or variable.\nClients should only call this request if the capability 'supportsDataBreakpoints' is true.", + "description": "Obtains information on a possible data breakpoint that could be set on an expression or variable.\nClients should only call this request if the corresponding capability `supportsDataBreakpoints` is true.", "properties": { "command": { "type": "string", @@ -1377,15 +1450,19 @@ }, "DataBreakpointInfoArguments": { "type": "object", - "description": "Arguments for 'dataBreakpointInfo' request.", + "description": "Arguments for `dataBreakpointInfo` request.", "properties": { "variablesReference": { "type": "integer", - "description": "Reference to the Variable container if the data breakpoint is requested for a child of the container." + "description": "Reference to the variable container if the data breakpoint is requested for a child of the container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "name": { "type": "string", - "description": "The name of the Variable's child to obtain data breakpoint information for.\nIf variablesReference isn't provided, this can be an expression." + "description": "The name of the variable's child to obtain data breakpoint information for.\nIf `variablesReference` isn't specified, this can be an expression." + }, + "frameId": { + "type": "integer", + "description": "When `name` is an expression, evaluate it in the scope of this stack frame. If not specified, the expression is evaluated in the global scope. When `variablesReference` is specified, this property has no effect." } }, "required": [ "name" ] @@ -1393,14 +1470,14 @@ "DataBreakpointInfoResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'dataBreakpointInfo' request.", + "description": "Response to `dataBreakpointInfo` request.", "properties": { "body": { "type": "object", "properties": { "dataId": { "type": [ "string", "null" ], - "description": "An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available." + "description": "An identifier for the data on which a data breakpoint can be registered with the `setDataBreakpoints` request or null if no data breakpoint is available. If a `variablesReference` or `frameId` is passed, the `dataId` is valid in the current suspended state, otherwise it's valid indefinitely. See 'Lifetime of Object References' in the Overview section for details. Breakpoints set using the `dataId` in the `setDataBreakpoints` request may outlive the lifetime of the associated `dataId`." }, "description": { "type": "string", @@ -1411,11 +1488,11 @@ "items": { "$ref": "#/definitions/DataBreakpointAccessType" }, - "description": "Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information." + "description": "Attribute lists the available access types for a potential data breakpoint. A UI client could surface this information." }, "canPersist": { "type": "boolean", - "description": "Optional attribute indicating that a potential data breakpoint could be persisted across sessions." + "description": "Attribute indicates that a potential data breakpoint could be persisted across sessions." } }, "required": [ "dataId", "description" ] @@ -1428,7 +1505,7 @@ "SetDataBreakpointsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Replaces all existing data breakpoints with new data breakpoints.\nTo clear all data breakpoints, specify an empty array.\nWhen a data breakpoint is hit, a 'stopped' event (with reason 'data breakpoint') is generated.\nClients should only call this request if the capability 'supportsDataBreakpoints' is true.", + "description": "Replaces all existing data breakpoints with new data breakpoints.\nTo clear all data breakpoints, specify an empty array.\nWhen a data breakpoint is hit, a `stopped` event (with reason `data breakpoint`) is generated.\nClients should only call this request if the corresponding capability `supportsDataBreakpoints` is true.", "properties": { "command": { "type": "string", @@ -1443,7 +1520,7 @@ }, "SetDataBreakpointsArguments": { "type": "object", - "description": "Arguments for 'setDataBreakpoints' request.", + "description": "Arguments for `setDataBreakpoints` request.", "properties": { "breakpoints": { "type": "array", @@ -1458,7 +1535,7 @@ "SetDataBreakpointsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setDataBreakpoints' request.\nReturned is information about each breakpoint created by this request.", + "description": "Response to `setDataBreakpoints` request.\nReturned is information about each breakpoint created by this request.", "properties": { "body": { "type": "object", @@ -1468,7 +1545,7 @@ "items": { "$ref": "#/definitions/Breakpoint" }, - "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array." + "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument `breakpoints` array." } }, "required": [ "breakpoints" ] @@ -1483,7 +1560,7 @@ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Replaces all existing instruction breakpoints. Typically, instruction breakpoints would be set from a diassembly window. \nTo clear all instruction breakpoints, specify an empty array.\nWhen an instruction breakpoint is hit, a 'stopped' event (with reason 'instruction breakpoint') is generated.\nClients should only call this request if the capability 'supportsInstructionBreakpoints' is true.", + "description": "Replaces all existing instruction breakpoints. Typically, instruction breakpoints would be set from a disassembly window. \nTo clear all instruction breakpoints, specify an empty array.\nWhen an instruction breakpoint is hit, a `stopped` event (with reason `instruction breakpoint`) is generated.\nClients should only call this request if the corresponding capability `supportsInstructionBreakpoints` is true.", "properties": { "command": { "type": "string", @@ -1498,7 +1575,7 @@ }, "SetInstructionBreakpointsArguments": { "type": "object", - "description": "Arguments for 'setInstructionBreakpoints' request", + "description": "Arguments for `setInstructionBreakpoints` request", "properties": { "breakpoints": { "type": "array", @@ -1515,7 +1592,7 @@ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setInstructionBreakpoints' request", + "description": "Response to `setInstructionBreakpoints` request", "properties": { "body": { "type": "object", @@ -1525,7 +1602,7 @@ "items": { "$ref": "#/definitions/Breakpoint" }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array." } }, "required": [ "breakpoints" ] @@ -1538,7 +1615,7 @@ "ContinueRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request resumes execution of all threads. If the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true resumes only the specified thread. If not all threads were resumed, the 'allThreadsContinued' attribute of the response must be set to false.", + "description": "The request resumes execution of all threads. If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true resumes only the specified thread. If not all threads were resumed, the `allThreadsContinued` attribute of the response should be set to false.", "properties": { "command": { "type": "string", @@ -1553,15 +1630,15 @@ }, "ContinueArguments": { "type": "object", - "description": "Arguments for 'continue' request.", + "description": "Arguments for `continue` request.", "properties": { "threadId": { "type": "integer", - "description": "Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed." + "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the argument `singleThread` is true, only the thread with this ID is resumed." }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, execution is resumed only for the thread with given 'threadId'." + "description": "If this flag is true, execution is resumed only for the thread with given `threadId`." } }, "required": [ "threadId" ] @@ -1569,14 +1646,14 @@ "ContinueResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'continue' request.", + "description": "Response to `continue` request.", "properties": { "body": { "type": "object", "properties": { "allThreadsContinued": { "type": "boolean", - "description": "The value true (or a missing property) signals to the client that all threads have been resumed. The value false must be returned if not all threads were resumed." + "description": "The value true (or a missing property) signals to the client that all threads have been resumed. The value false indicates that not all threads were resumed." } } } @@ -1588,7 +1665,7 @@ "NextRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request executes one step (in the given granularity) for the specified thread and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the step has completed.", + "description": "The request executes one step (in the given granularity) for the specified thread and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.", "properties": { "command": { "type": "string", @@ -1603,7 +1680,7 @@ }, "NextArguments": { "type": "object", - "description": "Arguments for 'next' request.", + "description": "Arguments for `next` request.", "properties": { "threadId": { "type": "integer", @@ -1611,11 +1688,11 @@ }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "If this flag is true, all other suspended threads are not resumed." }, "granularity": { "$ref": "#/definitions/SteppingGranularity", - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed." + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed." } }, "required": [ "threadId" ] @@ -1623,14 +1700,14 @@ "NextResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'next' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `next` request. This is just an acknowledgement, so no body field is required." }] }, "StepInRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request resumes the given thread to step into a function/method and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other suspended threads from resuming.\nIf the request cannot step into a target, 'stepIn' behaves like the 'next' request.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the step has completed.\nIf there are multiple function/method calls (or other targets) on the source line,\nthe optional argument 'targetId' can be used to control into which target the 'stepIn' should occur.\nThe list of possible targets for a given source line can be retrieved via the 'stepInTargets' request.", + "description": "The request resumes the given thread to step into a function/method and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\nIf the request cannot step into a target, `stepIn` behaves like the `next` request.\nThe debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\nIf there are multiple function/method calls (or other targets) on the source line,\nthe argument `targetId` can be used to control into which target the `stepIn` should occur.\nThe list of possible targets for a given source line can be retrieved via the `stepInTargets` request.", "properties": { "command": { "type": "string", @@ -1645,7 +1722,7 @@ }, "StepInArguments": { "type": "object", - "description": "Arguments for 'stepIn' request.", + "description": "Arguments for `stepIn` request.", "properties": { "threadId": { "type": "integer", @@ -1653,15 +1730,15 @@ }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "If this flag is true, all other suspended threads are not resumed." }, "targetId": { "type": "integer", - "description": "Optional id of the target to step into." + "description": "Id of the target to step into." }, "granularity": { "$ref": "#/definitions/SteppingGranularity", - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed." + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed." } }, "required": [ "threadId" ] @@ -1669,14 +1746,14 @@ "StepInResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'stepIn' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `stepIn` request. This is just an acknowledgement, so no body field is required." }] }, "StepOutRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request resumes the given thread to step out (return) from a function/method and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the step has completed.", + "description": "The request resumes the given thread to step out (return) from a function/method and allows all other threads to run freely by resuming them.\nIf the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.", "properties": { "command": { "type": "string", @@ -1691,7 +1768,7 @@ }, "StepOutArguments": { "type": "object", - "description": "Arguments for 'stepOut' request.", + "description": "Arguments for `stepOut` request.", "properties": { "threadId": { "type": "integer", @@ -1699,11 +1776,11 @@ }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "If this flag is true, all other suspended threads are not resumed." }, "granularity": { "$ref": "#/definitions/SteppingGranularity", - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed." + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed." } }, "required": [ "threadId" ] @@ -1711,14 +1788,14 @@ "StepOutResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'stepOut' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `stepOut` request. This is just an acknowledgement, so no body field is required." }] }, "StepBackRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request executes one backward step (in the given granularity) for the specified thread and allows all other threads to run backward freely by resuming them.\nIf the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the step has completed.\nClients should only call this request if the capability 'supportsStepBack' is true.", + "description": "The request executes one backward step (in the given granularity) for the specified thread and allows all other threads to run backward freely by resuming them.\nIf the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\nThe debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\nClients should only call this request if the corresponding capability `supportsStepBack` is true.", "properties": { "command": { "type": "string", @@ -1733,7 +1810,7 @@ }, "StepBackArguments": { "type": "object", - "description": "Arguments for 'stepBack' request.", + "description": "Arguments for `stepBack` request.", "properties": { "threadId": { "type": "integer", @@ -1741,11 +1818,11 @@ }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "If this flag is true, all other suspended threads are not resumed." }, "granularity": { "$ref": "#/definitions/SteppingGranularity", - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed." + "description": "Stepping granularity to step. If no granularity is specified, a granularity of `statement` is assumed." } }, "required": [ "threadId" ] @@ -1753,14 +1830,14 @@ "StepBackResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'stepBack' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `stepBack` request. This is just an acknowledgement, so no body field is required." }] }, "ReverseContinueRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request resumes backward execution of all threads. If the debug adapter supports single thread execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true resumes only the specified thread. If not all threads were resumed, the 'allThreadsContinued' attribute of the response must be set to false.\nClients should only call this request if the capability 'supportsStepBack' is true.", + "description": "The request resumes backward execution of all threads. If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true resumes only the specified thread. If not all threads were resumed, the `allThreadsContinued` attribute of the response should be set to false.\nClients should only call this request if the corresponding capability `supportsStepBack` is true.", "properties": { "command": { "type": "string", @@ -1775,15 +1852,15 @@ }, "ReverseContinueArguments": { "type": "object", - "description": "Arguments for 'reverseContinue' request.", + "description": "Arguments for `reverseContinue` request.", "properties": { "threadId": { "type": "integer", - "description": "Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed." + "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the `singleThread` argument is true, only the thread with this ID is resumed." }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, backward execution is resumed only for the thread with given 'threadId'." + "description": "If this flag is true, backward execution is resumed only for the thread with given `threadId`." } }, @@ -1792,14 +1869,14 @@ "ReverseContinueResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'reverseContinue' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `reverseContinue` request. This is just an acknowledgement, so no body field is required." }] }, "RestartFrameRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request restarts execution of the specified stackframe.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'restart') after the restart has completed.\nClients should only call this request if the capability 'supportsRestartFrame' is true.", + "description": "The request restarts execution of the specified stack frame.\nThe debug adapter first sends the response and then a `stopped` event (with reason `restart`) after the restart has completed.\nClients should only call this request if the corresponding capability `supportsRestartFrame` is true.", "properties": { "command": { "type": "string", @@ -1814,11 +1891,11 @@ }, "RestartFrameArguments": { "type": "object", - "description": "Arguments for 'restartFrame' request.", + "description": "Arguments for `restartFrame` request.", "properties": { "frameId": { "type": "integer", - "description": "Restart this stackframe." + "description": "Restart the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." } }, "required": [ "frameId" ] @@ -1826,14 +1903,14 @@ "RestartFrameResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'restartFrame' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `restartFrame` request. This is just an acknowledgement, so no body field is required." }] }, "GotoRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request sets the location where the debuggee will continue to run.\nThis makes it possible to skip the execution of code or to executed code again.\nThe code between the current location and the goto target is not executed but skipped.\nThe debug adapter first sends the response and then a 'stopped' event with reason 'goto'.\nClients should only call this request if the capability 'supportsGotoTargetsRequest' is true (because only then goto targets exist that can be passed as arguments).", + "description": "The request sets the location where the debuggee will continue to run.\nThis makes it possible to skip the execution of code or to execute code again.\nThe code between the current location and the goto target is not executed but skipped.\nThe debug adapter first sends the response and then a `stopped` event with reason `goto`.\nClients should only call this request if the corresponding capability `supportsGotoTargetsRequest` is true (because only then goto targets exist that can be passed as arguments).", "properties": { "command": { "type": "string", @@ -1848,7 +1925,7 @@ }, "GotoArguments": { "type": "object", - "description": "Arguments for 'goto' request.", + "description": "Arguments for `goto` request.", "properties": { "threadId": { "type": "integer", @@ -1864,14 +1941,14 @@ "GotoResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'goto' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `goto` request. This is just an acknowledgement, so no body field is required." }] }, "PauseRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request suspends the debuggee.\nThe debug adapter first sends the response and then a 'stopped' event (with reason 'pause') after the thread has been paused successfully.", + "description": "The request suspends the debuggee.\nThe debug adapter first sends the response and then a `stopped` event (with reason `pause`) after the thread has been paused successfully.", "properties": { "command": { "type": "string", @@ -1886,7 +1963,7 @@ }, "PauseArguments": { "type": "object", - "description": "Arguments for 'pause' request.", + "description": "Arguments for `pause` request.", "properties": { "threadId": { "type": "integer", @@ -1898,14 +1975,14 @@ "PauseResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'pause' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `pause` request. This is just an acknowledgement, so no body field is required." }] }, "StackTraceRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request returns a stacktrace from the current execution state of a given thread.\nA client can request all stack frames by omitting the startFrame and levels arguments. For performance conscious clients and if the debug adapter's 'supportsDelayedStackTraceLoading' capability is true, stack frames can be retrieved in a piecemeal way with the startFrame and levels arguments. The response of the stackTrace request may contain a totalFrames property that hints at the total number of frames in the stack. If a client needs this total number upfront, it can issue a request for a single (first) frame and depending on the value of totalFrames decide how to proceed. In any case a client should be prepared to receive less frames than requested, which is an indication that the end of the stack has been reached.", + "description": "The request returns a stacktrace from the current execution state of a given thread.\nA client can request all stack frames by omitting the startFrame and levels arguments. For performance-conscious clients and if the corresponding capability `supportsDelayedStackTraceLoading` is true, stack frames can be retrieved in a piecemeal way with the `startFrame` and `levels` arguments. The response of the `stackTrace` request may contain a `totalFrames` property that hints at the total number of frames in the stack. If a client needs this total number upfront, it can issue a request for a single (first) frame and depending on the value of `totalFrames` decide how to proceed. In any case a client should be prepared to receive fewer frames than requested, which is an indication that the end of the stack has been reached.", "properties": { "command": { "type": "string", @@ -1920,7 +1997,7 @@ }, "StackTraceArguments": { "type": "object", - "description": "Arguments for 'stackTrace' request.", + "description": "Arguments for `stackTrace` request.", "properties": { "threadId": { "type": "integer", @@ -1936,7 +2013,7 @@ }, "format": { "$ref": "#/definitions/StackFrameFormat", - "description": "Specifies details on how to format the stack frames.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true." + "description": "Specifies details on how to format the stack frames.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true." } }, "required": [ "threadId" ] @@ -1944,7 +2021,7 @@ "StackTraceResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'stackTrace' request.", + "description": "Response to `stackTrace` request.", "properties": { "body": { "type": "object", @@ -1954,11 +2031,11 @@ "items": { "$ref": "#/definitions/StackFrame" }, - "description": "The frames of the stackframe. If the array has length zero, there are no stackframes available.\nThis means that there is no location information available." + "description": "The frames of the stack frame. If the array has length zero, there are no stack frames available.\nThis means that there is no location information available." }, "totalFrames": { "type": "integer", - "description": "The total number of frames available in the stack. If omitted or if totalFrames is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing totalFrames values for subsequent requests can be used to enforce paging in the client." + "description": "The total number of frames available in the stack. If omitted or if `totalFrames` is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing `totalFrames` values for subsequent requests can be used to enforce paging in the client." } }, "required": [ "stackFrames" ] @@ -1971,7 +2048,7 @@ "ScopesRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request returns the variable scopes for a given stackframe ID.", + "description": "The request returns the variable scopes for a given stack frame ID.", "properties": { "command": { "type": "string", @@ -1986,11 +2063,11 @@ }, "ScopesArguments": { "type": "object", - "description": "Arguments for 'scopes' request.", + "description": "Arguments for `scopes` request.", "properties": { "frameId": { "type": "integer", - "description": "Retrieve the scopes for this stackframe." + "description": "Retrieve the scopes for the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." } }, "required": [ "frameId" ] @@ -1998,7 +2075,7 @@ "ScopesResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'scopes' request.", + "description": "Response to `scopes` request.", "properties": { "body": { "type": "object", @@ -2008,7 +2085,7 @@ "items": { "$ref": "#/definitions/Scope" }, - "description": "The scopes of the stackframe. If the array has length zero, there are no scopes available." + "description": "The scopes of the stack frame. If the array has length zero, there are no scopes available." } }, "required": [ "scopes" ] @@ -2021,7 +2098,7 @@ "VariablesRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Retrieves all child variables for the given variable reference.\nAn optional filter can be used to limit the fetched children to either named or indexed children.", + "description": "Retrieves all child variables for the given variable reference.\nA filter can be used to limit the fetched children to either named or indexed children.", "properties": { "command": { "type": "string", @@ -2036,28 +2113,28 @@ }, "VariablesArguments": { "type": "object", - "description": "Arguments for 'variables' request.", + "description": "Arguments for `variables` request.", "properties": { "variablesReference": { "type": "integer", - "description": "The Variable reference." + "description": "The variable for which to retrieve its children. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "filter": { "type": "string", "enum": [ "indexed", "named" ], - "description": "Optional filter to limit the child variables to either named or indexed. If omitted, both types are fetched." + "description": "Filter to limit the child variables to either named or indexed. If omitted, both types are fetched." }, "start": { "type": "integer", - "description": "The index of the first variable to return; if omitted children start at 0." + "description": "The index of the first variable to return; if omitted children start at 0.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "count": { "type": "integer", - "description": "The number of variables to return. If count is missing or 0, all variables are returned." + "description": "The number of variables to return. If count is missing or 0, all variables are returned.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true." }, "format": { "$ref": "#/definitions/ValueFormat", - "description": "Specifies details on how to format the Variable values.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true." + "description": "Specifies details on how to format the Variable values.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true." } }, "required": [ "variablesReference" ] @@ -2065,7 +2142,7 @@ "VariablesResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'variables' request.", + "description": "Response to `variables` request.", "properties": { "body": { "type": "object", @@ -2088,7 +2165,7 @@ "SetVariableRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Set the variable with the given name in the variable container to a new value. Clients should only call this request if the capability 'supportsSetVariable' is true.\nIf a debug adapter implements both setVariable and setExpression, a client will only use setExpression if the variable has an evaluateName property.", + "description": "Set the variable with the given name in the variable container to a new value. Clients should only call this request if the corresponding capability `supportsSetVariable` is true.\nIf a debug adapter implements both `setVariable` and `setExpression`, a client will only use `setExpression` if the variable has an `evaluateName` property.", "properties": { "command": { "type": "string", @@ -2103,11 +2180,11 @@ }, "SetVariableArguments": { "type": "object", - "description": "Arguments for 'setVariable' request.", + "description": "Arguments for `setVariable` request.", "properties": { "variablesReference": { "type": "integer", - "description": "The reference of the variable container." + "description": "The reference of the variable container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details." }, "name": { "type": "string", @@ -2127,7 +2204,7 @@ "SetVariableResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setVariable' request.", + "description": "Response to `setVariable` request.", "properties": { "body": { "type": "object", @@ -2142,15 +2219,19 @@ }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the new value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the new value is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true." } }, "required": [ "value" ] @@ -2178,15 +2259,15 @@ }, "SourceArguments": { "type": "object", - "description": "Arguments for 'source' request.", + "description": "Arguments for `source` request.", "properties": { "source": { "$ref": "#/definitions/Source", - "description": "Specifies the source content to load. Either source.path or source.sourceReference must be specified." + "description": "Specifies the source content to load. Either `source.path` or `source.sourceReference` must be specified." }, "sourceReference": { "type": "integer", - "description": "The reference to the source. This is the same as source.sourceReference.\nThis is provided for backward compatibility since old backends do not understand the 'source' attribute." + "description": "The reference to the source. This is the same as `source.sourceReference`.\nThis is provided for backward compatibility since old clients do not understand the `source` attribute." } }, "required": [ "sourceReference" ] @@ -2194,7 +2275,7 @@ "SourceResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'source' request.", + "description": "Response to `source` request.", "properties": { "body": { "type": "object", @@ -2205,7 +2286,7 @@ }, "mimeType": { "type": "string", - "description": "Optional content type (mime type) of the source." + "description": "Content type (MIME type) of the source." } }, "required": [ "content" ] @@ -2231,7 +2312,7 @@ "ThreadsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'threads' request.", + "description": "Response to `threads` request.", "properties": { "body": { "type": "object", @@ -2254,7 +2335,7 @@ "TerminateThreadsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "The request terminates the threads with the given ids.\nClients should only call this request if the capability 'supportsTerminateThreadsRequest' is true.", + "description": "The request terminates the threads with the given ids.\nClients should only call this request if the corresponding capability `supportsTerminateThreadsRequest` is true.", "properties": { "command": { "type": "string", @@ -2269,7 +2350,7 @@ }, "TerminateThreadsArguments": { "type": "object", - "description": "Arguments for 'terminateThreads' request.", + "description": "Arguments for `terminateThreads` request.", "properties": { "threadIds": { "type": "array", @@ -2283,14 +2364,14 @@ "TerminateThreadsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'terminateThreads' request. This is just an acknowledgement, so no body field is required." + "description": "Response to `terminateThreads` request. This is just an acknowledgement, no body field is required." }] }, "ModulesRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Modules can be retrieved from the debug adapter with this request which can either return all modules or a range of modules to support paging.\nClients should only call this request if the capability 'supportsModulesRequest' is true.", + "description": "Modules can be retrieved from the debug adapter with this request which can either return all modules or a range of modules to support paging.\nClients should only call this request if the corresponding capability `supportsModulesRequest` is true.", "properties": { "command": { "type": "string", @@ -2305,7 +2386,7 @@ }, "ModulesArguments": { "type": "object", - "description": "Arguments for 'modules' request.", + "description": "Arguments for `modules` request.", "properties": { "startModule": { "type": "integer", @@ -2313,14 +2394,14 @@ }, "moduleCount": { "type": "integer", - "description": "The number of modules to return. If moduleCount is not specified or 0, all modules are returned." + "description": "The number of modules to return. If `moduleCount` is not specified or 0, all modules are returned." } } }, "ModulesResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'modules' request.", + "description": "Response to `modules` request.", "properties": { "body": { "type": "object", @@ -2347,7 +2428,7 @@ "LoadedSourcesRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Retrieves the set of all sources currently loaded by the debugged process.\nClients should only call this request if the capability 'supportsLoadedSourcesRequest' is true.", + "description": "Retrieves the set of all sources currently loaded by the debugged process.\nClients should only call this request if the corresponding capability `supportsLoadedSourcesRequest` is true.", "properties": { "command": { "type": "string", @@ -2362,12 +2443,12 @@ }, "LoadedSourcesArguments": { "type": "object", - "description": "Arguments for 'loadedSources' request." + "description": "Arguments for `loadedSources` request." }, "LoadedSourcesResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'loadedSources' request.", + "description": "Response to `loadedSources` request.", "properties": { "body": { "type": "object", @@ -2390,7 +2471,7 @@ "EvaluateRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Evaluates the given expression in the context of the top most stack frame.\nThe expression has access to any variables and arguments that are in scope.", + "description": "Evaluates the given expression in the context of the topmost stack frame.\nThe expression has access to any variables and arguments that are in scope.", "properties": { "command": { "type": "string", @@ -2405,7 +2486,7 @@ }, "EvaluateArguments": { "type": "object", - "description": "Arguments for 'evaluate' request.", + "description": "Arguments for `evaluate` request.", "properties": { "expression": { "type": "string", @@ -2417,18 +2498,19 @@ }, "context": { "type": "string", - "_enum": [ "watch", "repl", "hover", "clipboard" ], + "_enum": [ "watch", "repl", "hover", "clipboard", "variables" ], "enumDescriptions": [ - "evaluate is run in a watch.", - "evaluate is run from REPL console.", - "evaluate is run from a data hover.", - "evaluate is run to generate the value that will be stored in the clipboard.\nThe attribute is only honored by a debug adapter if the capability 'supportsClipboardContext' is true." + "evaluate is called from a watch view context.", + "evaluate is called from a REPL context.", + "evaluate is called to generate the debug hover contents.\nThis value should only be used if the corresponding capability `supportsEvaluateForHovers` is true.", + "evaluate is called to generate clipboard contents.\nThis value should only be used if the corresponding capability `supportsClipboardContext` is true.", + "evaluate is called from a variables view context." ], - "description": "The context in which the evaluate request is run." + "description": "The context in which the evaluate request is used." }, "format": { "$ref": "#/definitions/ValueFormat", - "description": "Specifies details on how to format the Evaluate result.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true." + "description": "Specifies details on how to format the result.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true." } }, "required": [ "expression" ] @@ -2436,7 +2518,7 @@ "EvaluateResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'evaluate' request.", + "description": "Response to `evaluate` request.", "properties": { "body": { "type": "object", @@ -2447,27 +2529,27 @@ }, "type": { "type": "string", - "description": "The optional type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true." }, "presentationHint": { "$ref": "#/definitions/VariablePresentationHint", - "description": "Properties of a evaluate result that can be used to determine how to render the result in the UI." + "description": "Properties of an evaluate result that can be used to determine how to render the result in the UI." }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the evaluate result is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "memoryReference": { "type": "string", - "description": "Optional memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute should be returned by a debug adapter if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request." + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true." } }, "required": [ "result", "variablesReference" ] @@ -2480,7 +2562,7 @@ "SetExpressionRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Evaluates the given 'value' expression and assigns it to the 'expression' which must be a modifiable l-value.\nThe expressions have access to any variables and arguments that are in scope of the specified frame.\nClients should only call this request if the capability 'supportsSetExpression' is true.\nIf a debug adapter implements both setExpression and setVariable, a client will only use setExpression if the variable has an evaluateName property.", + "description": "Evaluates the given `value` expression and assigns it to the `expression` which must be a modifiable l-value.\nThe expressions have access to any variables and arguments that are in scope of the specified frame.\nClients should only call this request if the corresponding capability `supportsSetExpression` is true.\nIf a debug adapter implements both `setExpression` and `setVariable`, a client uses `setExpression` if the variable has an `evaluateName` property.", "properties": { "command": { "type": "string", @@ -2495,7 +2577,7 @@ }, "SetExpressionArguments": { "type": "object", - "description": "Arguments for 'setExpression' request.", + "description": "Arguments for `setExpression` request.", "properties": { "expression": { "type": "string", @@ -2519,7 +2601,7 @@ "SetExpressionResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'setExpression' request.", + "description": "Response to `setExpression` request.", "properties": { "body": { "type": "object", @@ -2530,7 +2612,7 @@ }, "type": { "type": "string", - "description": "The optional type of the value.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the value.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true." }, "presentationHint": { "$ref": "#/definitions/VariablePresentationHint", @@ -2538,15 +2620,19 @@ }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true." } }, "required": [ "value" ] @@ -2559,7 +2645,7 @@ "StepInTargetsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "This request retrieves the possible stepIn targets for the specified stack frame.\nThese targets can be used in the 'stepIn' request.\nThe StepInTargets may only be called if the 'supportsStepInTargetsRequest' capability exists and is true.\nClients should only call this request if the capability 'supportsStepInTargetsRequest' is true.", + "description": "This request retrieves the possible step-in targets for the specified stack frame.\nThese targets can be used in the `stepIn` request.\nClients should only call this request if the corresponding capability `supportsStepInTargetsRequest` is true.", "properties": { "command": { "type": "string", @@ -2574,11 +2660,11 @@ }, "StepInTargetsArguments": { "type": "object", - "description": "Arguments for 'stepInTargets' request.", + "description": "Arguments for `stepInTargets` request.", "properties": { "frameId": { "type": "integer", - "description": "The stack frame for which to retrieve the possible stepIn targets." + "description": "The stack frame for which to retrieve the possible step-in targets." } }, "required": [ "frameId" ] @@ -2586,7 +2672,7 @@ "StepInTargetsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'stepInTargets' request.", + "description": "Response to `stepInTargets` request.", "properties": { "body": { "type": "object", @@ -2596,7 +2682,7 @@ "items": { "$ref": "#/definitions/StepInTarget" }, - "description": "The possible stepIn targets of the specified source location." + "description": "The possible step-in targets of the specified source location." } }, "required": [ "targets" ] @@ -2609,7 +2695,7 @@ "GotoTargetsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "This request retrieves the possible goto targets for the specified source location.\nThese targets can be used in the 'goto' request.\nClients should only call this request if the capability 'supportsGotoTargetsRequest' is true.", + "description": "This request retrieves the possible goto targets for the specified source location.\nThese targets can be used in the `goto` request.\nClients should only call this request if the corresponding capability `supportsGotoTargetsRequest` is true.", "properties": { "command": { "type": "string", @@ -2624,7 +2710,7 @@ }, "GotoTargetsArguments": { "type": "object", - "description": "Arguments for 'gotoTargets' request.", + "description": "Arguments for `gotoTargets` request.", "properties": { "source": { "$ref": "#/definitions/Source", @@ -2636,7 +2722,7 @@ }, "column": { "type": "integer", - "description": "An optional column location for which the goto targets are determined." + "description": "The position within `line` for which the goto targets are determined. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, "required": [ "source", "line" ] @@ -2644,7 +2730,7 @@ "GotoTargetsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'gotoTargets' request.", + "description": "Response to `gotoTargets` request.", "properties": { "body": { "type": "object", @@ -2667,7 +2753,7 @@ "CompletionsRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Returns a list of possible completions for a given caret position and text.\nClients should only call this request if the capability 'supportsCompletionsRequest' is true.", + "description": "Returns a list of possible completions for a given caret position and text.\nClients should only call this request if the corresponding capability `supportsCompletionsRequest` is true.", "properties": { "command": { "type": "string", @@ -2682,7 +2768,7 @@ }, "CompletionsArguments": { "type": "object", - "description": "Arguments for 'completions' request.", + "description": "Arguments for `completions` request.", "properties": { "frameId": { "type": "integer", @@ -2690,15 +2776,15 @@ }, "text": { "type": "string", - "description": "One or more source lines. Typically this is the text a user has typed into the debug console before he asked for completion." + "description": "One or more source lines. Typically this is the text users have typed into the debug console before they asked for completion." }, "column": { "type": "integer", - "description": "The character position for which to determine the completion proposals." + "description": "The position within `text` for which to determine the completion proposals. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "line": { "type": "integer", - "description": "An optional line for which to determine the completion proposals. If missing the first line of the text is assumed." + "description": "A line for which to determine the completion proposals. If missing the first line of the text is assumed." } }, "required": [ "text", "column" ] @@ -2706,7 +2792,7 @@ "CompletionsResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'completions' request.", + "description": "Response to `completions` request.", "properties": { "body": { "type": "object", @@ -2729,7 +2815,7 @@ "ExceptionInfoRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Retrieves the details of the exception that caused this event to be raised.\nClients should only call this request if the capability 'supportsExceptionInfoRequest' is true.", + "description": "Retrieves the details of the exception that caused this event to be raised.\nClients should only call this request if the corresponding capability `supportsExceptionInfoRequest` is true.", "properties": { "command": { "type": "string", @@ -2744,7 +2830,7 @@ }, "ExceptionInfoArguments": { "type": "object", - "description": "Arguments for 'exceptionInfo' request.", + "description": "Arguments for `exceptionInfo` request.", "properties": { "threadId": { "type": "integer", @@ -2756,7 +2842,7 @@ "ExceptionInfoResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'exceptionInfo' request.", + "description": "Response to `exceptionInfo` request.", "properties": { "body": { "type": "object", @@ -2767,7 +2853,7 @@ }, "description": { "type": "string", - "description": "Descriptive text for the exception provided by the debug adapter." + "description": "Descriptive text for the exception." }, "breakMode": { "$ref": "#/definitions/ExceptionBreakMode", @@ -2788,7 +2874,7 @@ "ReadMemoryRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Reads bytes from memory at the provided location.\nClients should only call this request if the capability 'supportsReadMemoryRequest' is true.", + "description": "Reads bytes from memory at the provided location.\nClients should only call this request if the corresponding capability `supportsReadMemoryRequest` is true.", "properties": { "command": { "type": "string", @@ -2803,7 +2889,7 @@ }, "ReadMemoryArguments": { "type": "object", - "description": "Arguments for 'readMemory' request.", + "description": "Arguments for `readMemory` request.", "properties": { "memoryReference": { "type": "string", @@ -2811,7 +2897,7 @@ }, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before reading data. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before reading data. Can be negative." }, "count": { "type": "integer", @@ -2823,22 +2909,22 @@ "ReadMemoryResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'readMemory' request.", + "description": "Response to `readMemory` request.", "properties": { "body": { "type": "object", "properties": { "address": { "type": "string", - "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with '0x', or as a decimal value otherwise." + "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with `0x`, or as a decimal value otherwise." }, "unreadableBytes": { "type": "integer", - "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that must be skipped before a subsequent 'readMemory' request will succeed." + "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that should be skipped before a subsequent `readMemory` request succeeds." }, "data": { "type": "string", - "description": "The bytes read from memory, encoded using base64." + "description": "The bytes read from memory, encoded using base64. If the decoded length of `data` is less than the requested `count` in the original `readMemory` request, and `unreadableBytes` is zero or omitted, then the client should assume it's reached the end of readable memory." } }, "required": [ "address" ] @@ -2850,7 +2936,7 @@ "WriteMemoryRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Writes bytes to memory at the provided location.\nClients should only call this request if the capability 'supportsWriteMemoryRequest' is true.", + "description": "Writes bytes to memory at the provided location.\nClients should only call this request if the corresponding capability `supportsWriteMemoryRequest` is true.", "properties": { "command": { "type": "string", @@ -2865,7 +2951,7 @@ }, "WriteMemoryArguments": { "type": "object", - "description": "Arguments for 'writeMemory' request.", + "description": "Arguments for `writeMemory` request.", "properties": { "memoryReference": { "type": "string", @@ -2873,11 +2959,11 @@ }, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before writing data. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before writing data. Can be negative." }, "allowPartial": { "type": "boolean", - "description": "Optional property to control partial writes. If true, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the 'offset' and 'bytesWritten' properties.\nIf false or missing, a debug adapter should attempt to verify the region is writable before writing, and fail the response if it is not." + "description": "Property to control partial writes. If true, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the `offset` and `bytesWritten` properties.\nIf false or missing, a debug adapter should attempt to verify the region is writable before writing, and fail the response if it is not." }, "data": { "type": "string", @@ -2889,18 +2975,18 @@ "WriteMemoryResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'writeMemory' request.", + "description": "Response to `writeMemory` request.", "properties": { "body": { "type": "object", "properties": { "offset": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the offset of the first byte of data successfully written. Can be negative." + "description": "Property that should be returned when `allowPartial` is true to indicate the offset of the first byte of data successfully written. Can be negative." }, "bytesWritten": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the number of bytes starting from address that were successfully written." + "description": "Property that should be returned when `allowPartial` is true to indicate the number of bytes starting from address that were successfully written." } } } @@ -2911,7 +2997,7 @@ "DisassembleRequest": { "allOf": [ { "$ref": "#/definitions/Request" }, { "type": "object", - "description": "Disassembles code stored at the provided location.\nClients should only call this request if the capability 'supportsDisassembleRequest' is true.", + "description": "Disassembles code stored at the provided location.\nClients should only call this request if the corresponding capability `supportsDisassembleRequest` is true.", "properties": { "command": { "type": "string", @@ -2926,7 +3012,7 @@ }, "DisassembleArguments": { "type": "object", - "description": "Arguments for 'disassemble' request.", + "description": "Arguments for `disassemble` request.", "properties": { "memoryReference": { "type": "string", @@ -2934,11 +3020,11 @@ }, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before disassembling. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before disassembling. Can be negative." }, "instructionOffset": { "type": "integer", - "description": "Optional offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative." + "description": "Offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative." }, "instructionCount": { "type": "integer", @@ -2954,7 +3040,7 @@ "DisassembleResponse": { "allOf": [ { "$ref": "#/definitions/Response" }, { "type": "object", - "description": "Response to 'disassemble' request.", + "description": "Response to `disassemble` request.", "properties": { "body": { "type": "object", @@ -2980,7 +3066,7 @@ "properties": { "supportsConfigurationDoneRequest": { "type": "boolean", - "description": "The debug adapter supports the 'configurationDone' request." + "description": "The debug adapter supports the `configurationDone` request." }, "supportsFunctionBreakpoints": { "type": "boolean", @@ -2996,18 +3082,18 @@ }, "supportsEvaluateForHovers": { "type": "boolean", - "description": "The debug adapter supports a (side effect free) evaluate request for data hovers." + "description": "The debug adapter supports a (side effect free) `evaluate` request for data hovers." }, "exceptionBreakpointFilters": { "type": "array", "items": { "$ref": "#/definitions/ExceptionBreakpointsFilter" }, - "description": "Available exception filter options for the 'setExceptionBreakpoints' request." + "description": "Available exception filter options for the `setExceptionBreakpoints` request." }, "supportsStepBack": { "type": "boolean", - "description": "The debug adapter supports stepping back via the 'stepBack' and 'reverseContinue' requests." + "description": "The debug adapter supports stepping back via the `stepBack` and `reverseContinue` requests." }, "supportsSetVariable": { "type": "boolean", @@ -3019,26 +3105,26 @@ }, "supportsGotoTargetsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'gotoTargets' request." + "description": "The debug adapter supports the `gotoTargets` request." }, "supportsStepInTargetsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'stepInTargets' request." + "description": "The debug adapter supports the `stepInTargets` request." }, "supportsCompletionsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'completions' request." + "description": "The debug adapter supports the `completions` request." }, "completionTriggerCharacters": { "type": "array", "items": { "type": "string" }, - "description": "The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the '.' character." + "description": "The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the `.` character." }, "supportsModulesRequest": { "type": "boolean", - "description": "The debug adapter supports the 'modules' request." + "description": "The debug adapter supports the `modules` request." }, "additionalModuleColumns": { "type": "array", @@ -3056,51 +3142,51 @@ }, "supportsRestartRequest": { "type": "boolean", - "description": "The debug adapter supports the 'restart' request. In this case a client should not implement 'restart' by terminating and relaunching the adapter but by calling the RestartRequest." + "description": "The debug adapter supports the `restart` request. In this case a client should not implement `restart` by terminating and relaunching the adapter but by calling the `restart` request." }, "supportsExceptionOptions": { "type": "boolean", - "description": "The debug adapter supports 'exceptionOptions' on the setExceptionBreakpoints request." + "description": "The debug adapter supports `exceptionOptions` on the `setExceptionBreakpoints` request." }, "supportsValueFormattingOptions": { "type": "boolean", - "description": "The debug adapter supports a 'format' attribute on the stackTraceRequest, variablesRequest, and evaluateRequest." + "description": "The debug adapter supports a `format` attribute on the `stackTrace`, `variables`, and `evaluate` requests." }, "supportsExceptionInfoRequest": { "type": "boolean", - "description": "The debug adapter supports the 'exceptionInfo' request." + "description": "The debug adapter supports the `exceptionInfo` request." }, "supportTerminateDebuggee": { "type": "boolean", - "description": "The debug adapter supports the 'terminateDebuggee' attribute on the 'disconnect' request." + "description": "The debug adapter supports the `terminateDebuggee` attribute on the `disconnect` request." }, "supportSuspendDebuggee": { "type": "boolean", - "description": "The debug adapter supports the 'suspendDebuggee' attribute on the 'disconnect' request." + "description": "The debug adapter supports the `suspendDebuggee` attribute on the `disconnect` request." }, "supportsDelayedStackTraceLoading": { "type": "boolean", - "description": "The debug adapter supports the delayed loading of parts of the stack, which requires that both the 'startFrame' and 'levels' arguments and an optional 'totalFrames' result of the 'StackTrace' request are supported." + "description": "The debug adapter supports the delayed loading of parts of the stack, which requires that both the `startFrame` and `levels` arguments and the `totalFrames` result of the `stackTrace` request are supported." }, "supportsLoadedSourcesRequest": { "type": "boolean", - "description": "The debug adapter supports the 'loadedSources' request." + "description": "The debug adapter supports the `loadedSources` request." }, "supportsLogPoints": { "type": "boolean", - "description": "The debug adapter supports logpoints by interpreting the 'logMessage' attribute of the SourceBreakpoint." + "description": "The debug adapter supports log points by interpreting the `logMessage` attribute of the `SourceBreakpoint`." }, "supportsTerminateThreadsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'terminateThreads' request." + "description": "The debug adapter supports the `terminateThreads` request." }, "supportsSetExpression": { "type": "boolean", - "description": "The debug adapter supports the 'setExpression' request." + "description": "The debug adapter supports the `setExpression` request." }, "supportsTerminateRequest": { "type": "boolean", - "description": "The debug adapter supports the 'terminate' request." + "description": "The debug adapter supports the `terminate` request." }, "supportsDataBreakpoints": { "type": "boolean", @@ -3108,31 +3194,31 @@ }, "supportsReadMemoryRequest": { "type": "boolean", - "description": "The debug adapter supports the 'readMemory' request." + "description": "The debug adapter supports the `readMemory` request." }, "supportsWriteMemoryRequest": { "type": "boolean", - "description": "The debug adapter supports the 'writeMemory' request." + "description": "The debug adapter supports the `writeMemory` request." }, "supportsDisassembleRequest": { "type": "boolean", - "description": "The debug adapter supports the 'disassemble' request." + "description": "The debug adapter supports the `disassemble` request." }, "supportsCancelRequest": { "type": "boolean", - "description": "The debug adapter supports the 'cancel' request." + "description": "The debug adapter supports the `cancel` request." }, "supportsBreakpointLocationsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'breakpointLocations' request." + "description": "The debug adapter supports the `breakpointLocations` request." }, "supportsClipboardContext": { "type": "boolean", - "description": "The debug adapter supports the 'clipboard' context value in the 'evaluate' request." + "description": "The debug adapter supports the `clipboard` context value in the `evaluate` request." }, "supportsSteppingGranularity": { "type": "boolean", - "description": "The debug adapter supports stepping granularities (argument 'granularity') for the stepping requests." + "description": "The debug adapter supports stepping granularities (argument `granularity`) for the stepping requests." }, "supportsInstructionBreakpoints": { "type": "boolean", @@ -3140,34 +3226,34 @@ }, "supportsExceptionFilterOptions": { "type": "boolean", - "description": "The debug adapter supports 'filterOptions' as an argument on the 'setExceptionBreakpoints' request." + "description": "The debug adapter supports `filterOptions` as an argument on the `setExceptionBreakpoints` request." }, "supportsSingleThreadExecutionRequests": { "type": "boolean", - "description": "The debug adapter supports the 'singleThread' property on the execution requests ('continue', 'next', 'stepIn', 'stepOut', 'reverseContinue', 'stepBack')." + "description": "The debug adapter supports the `singleThread` property on the execution requests (`continue`, `next`, `stepIn`, `stepOut`, `reverseContinue`, `stepBack`)." } } }, "ExceptionBreakpointsFilter": { "type": "object", - "description": "An ExceptionBreakpointsFilter is shown in the UI as an filter option for configuring how exceptions are dealt with.", + "description": "An `ExceptionBreakpointsFilter` is shown in the UI as an filter option for configuring how exceptions are dealt with.", "properties": { "filter": { "type": "string", - "description": "The internal ID of the filter option. This value is passed to the 'setExceptionBreakpoints' request." + "description": "The internal ID of the filter option. This value is passed to the `setExceptionBreakpoints` request." }, "label": { "type": "string", - "description": "The name of the filter option. This will be shown in the UI." + "description": "The name of the filter option. This is shown in the UI." }, "description": { "type": "string", - "description": "An optional help text providing additional information about the exception filter. This string is typically shown as a hover and must be translated." + "description": "A help text providing additional information about the exception filter. This string is typically shown as a hover and can be translated." }, "default": { "type": "boolean", - "description": "Initial value of the filter option. If not specified a value 'false' is assumed." + "description": "Initial value of the filter option. If not specified a value false is assumed." }, "supportsCondition": { "type": "boolean", @@ -3175,7 +3261,7 @@ }, "conditionDescription": { "type": "string", - "description": "An optional help text providing information about the condition. This string is shown as the placeholder text for a text box and must be translated." + "description": "A help text providing information about the condition. This string is shown as the placeholder text for a text box and can be translated." } }, "required": [ "filter", "label" ] @@ -3187,18 +3273,18 @@ "properties": { "id": { "type": "integer", - "description": "Unique identifier for the message." + "description": "Unique (within a debug adapter implementation) identifier for the message. The purpose of these error IDs is to help extension authors that have the requirement that every user visible error message needs a corresponding error number, so that users or customer support can find information about the specific error more easily." }, "format": { "type": "string", - "description": "A format string for the message. Embedded variables have the form '{name}'.\nIf variable name starts with an underscore character, the variable does not contain user data (PII) and can be safely used for telemetry purposes." + "description": "A format string for the message. Embedded variables have the form `{name}`.\nIf variable name starts with an underscore character, the variable does not contain user data (PII) and can be safely used for telemetry purposes." }, "variables": { "type": "object", "description": "An object used as a dictionary for looking up the variables in the format string.", "additionalProperties": { "type": "string", - "description": "Values must be strings." + "description": "All dictionary values must be strings." } }, "sendTelemetry": { @@ -3211,11 +3297,11 @@ }, "url": { "type": "string", - "description": "An optional url where additional information about this message can be found." + "description": "A url where additional information about this message can be found." }, "urlLabel": { "type": "string", - "description": "An optional label that is presented to the user as the UI for opening the url." + "description": "A label that is presented to the user as the UI for opening the url." } }, "required": [ "id", "format" ] @@ -3223,7 +3309,7 @@ "Module": { "type": "object", - "description": "A Module object represents a row in the modules view.\nTwo attributes are mandatory: an id identifies a module in the modules view and is used in a ModuleEvent for identifying a module for adding, updating or deleting.\nThe name is used to minimally render the module in the UI.\n\nAdditional attributes can be added to the module. They will show up in the module View if they have a corresponding ColumnDescriptor.\n\nTo avoid an unnecessary proliferation of additional attributes with similar semantics but different names\nwe recommend to re-use attributes from the 'recommended' list below first, and only introduce new attributes if nothing appropriate could be found.", + "description": "A Module object represents a row in the modules view.\nThe `id` attribute identifies a module in the modules view and is used in a `module` event for identifying a module for adding, updating or deleting.\nThe `name` attribute is used to minimally render the module in the UI.\n\nAdditional attributes can be added to the module. They show up in the module view if they have a corresponding `ColumnDescriptor`.\n\nTo avoid an unnecessary proliferation of additional attributes with similar semantics but different names, we recommend to re-use attributes from the 'recommended' list below first, and only introduce new attributes if nothing appropriate could be found.", "properties": { "id": { "type": ["integer", "string"], @@ -3235,7 +3321,7 @@ }, "path": { "type": "string", - "description": "optional but recommended attributes.\nalways try to use these first before introducing additional attributes.\n\nLogical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module." + "description": "Logical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module." }, "isOptimized": { "type": "boolean", @@ -3251,7 +3337,7 @@ }, "symbolStatus": { "type": "string", - "description": "User understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc." + "description": "User-understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc.)" }, "symbolFilePath": { "type": "string", @@ -3259,7 +3345,7 @@ }, "dateTimeStamp": { "type": "string", - "description": "Module created or modified." + "description": "Module created or modified, encoded as a RFC 3339 timestamp." }, "addressRange": { "type": "string", @@ -3271,7 +3357,7 @@ "ColumnDescriptor": { "type": "object", - "description": "A ColumnDescriptor specifies what module attribute to show in a column of the ModulesView, how to format it,\nand what the column's label should be.\nIt is only used if the underlying UI actually supports this level of customization.", + "description": "A `ColumnDescriptor` specifies what module attribute to show in a column of the modules view, how to format it,\nand what the column's label should be.\nIt is only used if the underlying UI actually supports this level of customization.", "properties": { "attributeName": { "type": "string", @@ -3288,7 +3374,7 @@ "type": { "type": "string", "enum": [ "string", "number", "boolean", "unixTimestampUTC" ], - "description": "Datatype of values in this column. Defaults to 'string' if not specified." + "description": "Datatype of values in this column. Defaults to `string` if not specified." }, "width": { "type": "integer", @@ -3298,20 +3384,6 @@ "required": [ "attributeName", "label"] }, - "ModulesViewDescriptor": { - "type": "object", - "description": "The ModulesViewDescriptor is the container for all declarative configuration options of a ModuleView.\nFor now it only specifies the columns to be shown in the modules view.", - "properties": { - "columns": { - "type": "array", - "items": { - "$ref": "#/definitions/ColumnDescriptor" - } - } - }, - "required": [ "columns" ] - }, - "Thread": { "type": "object", "description": "A Thread", @@ -3322,7 +3394,7 @@ }, "name": { "type": "string", - "description": "A name of the thread." + "description": "The name of the thread." } }, "required": [ "id", "name" ] @@ -3330,7 +3402,7 @@ "Source": { "type": "object", - "description": "A Source is a descriptor for source code.\nIt is returned from the debug adapter as part of a StackFrame and it is used by clients when specifying breakpoints.", + "description": "A `Source` is a descriptor for source code.\nIt is returned from the debug adapter as part of a `StackFrame` and it is used by clients when specifying breakpoints.", "properties": { "name": { "type": "string", @@ -3338,31 +3410,31 @@ }, "path": { "type": "string", - "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no sourceReference is specified (or its value is 0)." + "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0)." }, "sourceReference": { "type": "integer", - "description": "If sourceReference > 0 the contents of the source must be retrieved through the SourceRequest (even if a path is specified).\nA sourceReference is only valid for a session, so it must not be used to persist a source.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If the value > 0 the contents of the source must be retrieved through the `source` request (even if a path is specified).\nSince a `sourceReference` is only valid for a session, it can not be used to persist a source.\nThe value should be less than or equal to 2147483647 (2^31-1)." }, "presentationHint": { "type": "string", - "description": "An optional hint for how to present the source in the UI.\nA value of 'deemphasize' can be used to indicate that the source is not available or that it is skipped on stepping.", + "description": "A hint for how to present the source in the UI.\nA value of `deemphasize` can be used to indicate that the source is not available or that it is skipped on stepping.", "enum": [ "normal", "emphasize", "deemphasize" ] }, "origin": { "type": "string", - "description": "The (optional) origin of this source: possible values 'internal module', 'inlined content from source map', etc." + "description": "The origin of this source. For example, 'internal module', 'inlined content from source map', etc." }, "sources": { "type": "array", "items": { "$ref": "#/definitions/Source" }, - "description": "An optional list of sources that are related to this source. These may be the source that generated this source." + "description": "A list of sources that are related to this source. These may be the source that generated this source." }, "adapterData": { "type": [ "array", "boolean", "integer", "null", "number", "object", "string" ], - "description": "Optional data that a debug adapter might want to loop through the client.\nThe client should leave the data intact and persist it across sessions. The client should not interpret the data." + "description": "Additional data that a debug adapter might want to loop through the client.\nThe client should leave the data intact and persist it across sessions. The client should not interpret the data." }, "checksums": { "type": "array", @@ -3380,7 +3452,7 @@ "properties": { "id": { "type": "integer", - "description": "An identifier for the stack frame. It must be unique across all threads.\nThis id can be used to retrieve the scopes of the frame with the 'scopesRequest' or to restart the execution of a stackframe." + "description": "An identifier for the stack frame. It must be unique across all threads.\nThis id can be used to retrieve the scopes of the frame with the `scopes` request or to restart the execution of a stack frame." }, "name": { "type": "string", @@ -3388,31 +3460,31 @@ }, "source": { "$ref": "#/definitions/Source", - "description": "The optional source of the frame." + "description": "The source of the frame." }, "line": { "type": "integer", - "description": "The line within the file of the frame. If source is null or doesn't exist, line is 0 and must be ignored." + "description": "The line within the source of the frame. If the source attribute is missing or doesn't exist, `line` is 0 and should be ignored by the client." }, "column": { "type": "integer", - "description": "The column within the line. If source is null or doesn't exist, column is 0 and must be ignored." + "description": "Start position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If attribute `source` is missing or doesn't exist, `column` is 0 and should be ignored by the client." }, "endLine": { "type": "integer", - "description": "An optional end line of the range covered by the stack frame." + "description": "The end line of the range covered by the stack frame." }, "endColumn": { "type": "integer", - "description": "An optional end column of the range covered by the stack frame." + "description": "End position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "canRestart": { "type": "boolean", - "description": "Indicates whether this frame can be restarted with the 'restart' request. Clients should only use this if the debug adapter supports the 'restart' request (capability 'supportsRestartRequest' is true)." + "description": "Indicates whether this frame can be restarted with the `restart` request. Clients should only use this if the debug adapter supports the `restart` request and the corresponding capability `supportsRestartRequest` is true. If a debug adapter has this capability, then `canRestart` defaults to `true` if the property is absent." }, "instructionPointerReference": { "type": "string", - "description": "Optional memory reference for the current instruction pointer in this frame." + "description": "A memory reference for the current instruction pointer in this frame." }, "moduleId": { "type": ["integer", "string"], @@ -3421,7 +3493,7 @@ "presentationHint": { "type": "string", "enum": [ "normal", "label", "subtle" ], - "description": "An optional hint for how to present this frame in the UI.\nA value of 'label' can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of 'subtle' can be used to change the appearance of a frame in a 'subtle' way." + "description": "A hint for how to present this frame in the UI.\nA value of `label` can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of `subtle` can be used to change the appearance of a frame in a 'subtle' way." } }, "required": [ "id", "name", "line", "column" ] @@ -3429,7 +3501,7 @@ "Scope": { "type": "object", - "description": "A Scope is a named container for variables. Optionally a scope can map to a source or a range within a source.", + "description": "A `Scope` is a named container for variables. Optionally a scope can map to a source or a range within a source.", "properties": { "name": { "type": "string", @@ -3437,25 +3509,25 @@ }, "presentationHint": { "type": "string", - "description": "An optional hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI.", + "description": "A hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI.", "_enum": [ "arguments", "locals", "registers" ], "enumDescriptions": [ "Scope contains method arguments.", "Scope contains local variables.", - "Scope contains registers. Only a single 'registers' scope should be returned from a 'scopes' request." + "Scope contains registers. Only a single `registers` scope should be returned from a `scopes` request." ] }, "variablesReference": { "type": "integer", - "description": "The variables of this scope can be retrieved by passing the value of variablesReference to the VariablesRequest." + "description": "The variables of this scope can be retrieved by passing the value of `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", - "description": "The number of named variables in this scope.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks." + "description": "The number of named variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks." }, "indexedVariables": { "type": "integer", - "description": "The number of indexed variables in this scope.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks." + "description": "The number of indexed variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks." }, "expensive": { "type": "boolean", @@ -3463,23 +3535,23 @@ }, "source": { "$ref": "#/definitions/Source", - "description": "Optional source for this scope." + "description": "The source for this scope." }, "line": { "type": "integer", - "description": "Optional start line of the range covered by this scope." + "description": "The start line of the range covered by this scope." }, "column": { "type": "integer", - "description": "Optional start column of the range covered by this scope." + "description": "Start position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", - "description": "Optional end line of the range covered by this scope." + "description": "The end line of the range covered by this scope." }, "endColumn": { "type": "integer", - "description": "Optional end column of the range covered by this scope." + "description": "End position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, "required": [ "name", "variablesReference", "expensive" ] @@ -3487,7 +3559,7 @@ "Variable": { "type": "object", - "description": "A Variable is a name/value pair.\nOptionally a variable can have a 'type' that is shown if space permits or when hovering over the variable's name.\nAn optional 'kind' is used to render additional properties of the variable, e.g. different icons can be used to indicate that a variable is public or private.\nIf the value is structured (has children), a handle is provided to retrieve the children with the VariablesRequest.\nIf the number of named or indexed children is large, the numbers should be returned via the optional 'namedVariables' and 'indexedVariables' attributes.\nThe client can use this optional information to present the children in a paged UI and fetch them in chunks.", + "description": "A Variable is a name/value pair.\nThe `type` attribute is shown if space permits or when hovering over the variable's name.\nThe `kind` attribute is used to render additional properties of the variable, e.g. different icons can be used to indicate that a variable is public or private.\nIf the value is structured (has children), a handle is provided to retrieve the children with the `variables` request.\nIf the number of named or indexed children is large, the numbers should be returned via the `namedVariables` and `indexedVariables` attributes.\nThe client can use this information to present the children in a paged UI and fetch them in chunks.", "properties": { "name": { "type": "string", @@ -3495,11 +3567,11 @@ }, "value": { "type": "string", - "description": "The variable's value. This can be a multi-line text, e.g. for a function the body of a function." + "description": "The variable's value.\nThis can be a multi-line text, e.g. for a function the body of a function.\nFor structured variables (which do not have a simple value), it is recommended to provide a one-line representation of the structured object. This helps to identify the structured object in the collapsed state when its children are not yet visible.\nAn empty string can be used if no value should be shown in the UI." }, "type": { "type": "string", - "description": "The type of the variable's value. Typically shown in the UI when hovering over the value.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the variable's value. Typically shown in the UI when hovering over the value.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true." }, "presentationHint": { "$ref": "#/definitions/VariablePresentationHint", @@ -3507,23 +3579,23 @@ }, "evaluateName": { "type": "string", - "description": "Optional evaluatable name of this variable which can be passed to the 'EvaluateRequest' to fetch the variable's value." + "description": "The evaluatable name of this variable which can be passed to the `evaluate` request to fetch the variable's value." }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the variable is structured and its children can be retrieved by passing variablesReference to the VariablesRequest." + "description": "If `variablesReference` is > 0, the variable is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details." }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the children in a paged UI and fetch them in chunks." + "description": "The number of named child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks." }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the children in a paged UI and fetch them in chunks." + "description": "The number of indexed child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks." }, "memoryReference": { "type": "string", - "description": "Optional memory reference for the variable if the variable represents executable code, such as a function pointer.\nThis attribute is only required if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request." + "description": "A memory reference associated with this variable.\nFor pointer type variables, this is generally a reference to the memory address contained in the pointer.\nFor executable data, this reference may later be used in a `disassemble` request.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true." } }, "required": [ "name", "value", "variablesReference" ] @@ -3531,7 +3603,7 @@ "VariablePresentationHint": { "type": "object", - "description": "Optional properties of a variable that can be used to determine how to render the variable in the UI.", + "description": "Properties of a variable that can be used to determine how to render the variable in the UI.", "properties": { "kind": { "description": "The kind of variable. Before introducing additional values, try to use the listed values.", @@ -3547,8 +3619,8 @@ "Indicates that the object is an inner class.", "Indicates that the object is an interface.", "Indicates that the object is the most derived class.", - "Indicates that the object is virtual, that means it is a synthetic object introducedby the\nadapter for rendering purposes, e.g. an index range for large arrays.", - "Deprecated: Indicates that a data breakpoint is registered for the object. The 'hasDataBreakpoint' attribute should generally be used instead." + "Indicates that the object is virtual, that means it is a synthetic object introduced by the adapter for rendering purposes, e.g. an index range for large arrays.", + "Deprecated: Indicates that a data breakpoint is registered for the object. The `hasDataBreakpoint` attribute should generally be used instead." ] }, "attributes": { @@ -3562,8 +3634,8 @@ "Indicates that the object is a constant.", "Indicates that the object is read only.", "Indicates that the object is a raw string.", - "Indicates that the object can have an Object ID created for it.", - "Indicates that the object has an Object ID associated with it.", + "Indicates that the object can have an Object ID created for it. This is a vestigial attribute that is used by some clients; 'Object ID's are not specified in the protocol.", + "Indicates that the object has an Object ID associated with it. This is a vestigial attribute that is used by some clients; 'Object ID's are not specified in the protocol.", "Indicates that the evaluation had side effects.", "Indicates that the object has its value tracked by a data breakpoint." ] @@ -3573,13 +3645,17 @@ "description": "Visibility of variable. Before introducing additional values, try to use the listed values.", "type": "string", "_enum": [ "public", "private", "protected", "internal", "final" ] + }, + "lazy": { + "description": "If true, clients can present the variable with a UI that supports a specific gesture to trigger its evaluation.\nThis mechanism can be used for properties that require executing code when retrieving their value and where the code execution can be expensive and/or produce side-effects. A typical example are properties based on a getter function.\nPlease note that in addition to the `lazy` flag, the variable's `variablesReference` is expected to refer to a variable that will provide the value through another `variable` request.", + "type": "boolean" } } }, "BreakpointLocation": { "type": "object", - "description": "Properties of a breakpoint location returned from the 'breakpointLocations' request.", + "description": "Properties of a breakpoint location returned from the `breakpointLocations` request.", "properties": { "line": { "type": "integer", @@ -3587,15 +3663,15 @@ }, "column": { "type": "integer", - "description": "Optional start column of breakpoint location." + "description": "The start position of a breakpoint location. Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", - "description": "Optional end line of breakpoint location if the location covers a range." + "description": "The end line of breakpoint location if the location covers a range." }, "endColumn": { "type": "integer", - "description": "Optional end column of breakpoint location if the location covers a range." + "description": "The end position of a breakpoint location (if the location covers a range). Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, "required": [ "line" ] @@ -3603,7 +3679,7 @@ "SourceBreakpoint": { "type": "object", - "description": "Properties of a breakpoint or logpoint passed to the setBreakpoints request.", + "description": "Properties of a breakpoint or logpoint passed to the `setBreakpoints` request.", "properties": { "line": { "type": "integer", @@ -3611,19 +3687,19 @@ }, "column": { "type": "integer", - "description": "An optional source column of the breakpoint." + "description": "Start position within source line of the breakpoint or logpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "The expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true." }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." + "description": "The expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true.\nIf both this property and `condition` are specified, `hitCondition` should be evaluated only if the `condition` is met, and the debug adapter should stop only if both conditions are met." }, "logMessage": { "type": "string", - "description": "If this attribute exists and is non-empty, the backend must not 'break' (stop)\nbut log the message instead. Expressions within {} are interpolated.\nThe attribute is only honored by a debug adapter if the capability 'supportsLogPoints' is true." + "description": "If this attribute exists and is non-empty, the debug adapter must not 'break' (stop)\nbut log the message instead. Expressions within `{}` are interpolated.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsLogPoints` is true.\nIf either `hitCondition` or `condition` is specified, then the message should only be logged if those conditions are met." } }, "required": [ "line" ] @@ -3631,7 +3707,7 @@ "FunctionBreakpoint": { "type": "object", - "description": "Properties of a breakpoint passed to the setFunctionBreakpoints request.", + "description": "Properties of a breakpoint passed to the `setFunctionBreakpoints` request.", "properties": { "name": { "type": "string", @@ -3639,11 +3715,11 @@ }, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "An expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true." }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true." } }, "required": [ "name" ] @@ -3657,11 +3733,11 @@ "DataBreakpoint": { "type": "object", - "description": "Properties of a data breakpoint passed to the setDataBreakpoints request.", + "description": "Properties of a data breakpoint passed to the `setDataBreakpoints` request.", "properties": { "dataId": { "type": "string", - "description": "An id representing the data. This id is returned from the dataBreakpointInfo request." + "description": "An id representing the data. This id is returned from the `dataBreakpointInfo` request." }, "accessType": { "$ref": "#/definitions/DataBreakpointAccessType", @@ -3669,11 +3745,11 @@ }, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints." + "description": "An expression for conditional breakpoints." }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed." + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed." } }, "required": [ "dataId" ] @@ -3681,23 +3757,23 @@ "InstructionBreakpoint": { "type": "object", - "description": "Properties of a breakpoint passed to the setInstructionBreakpoints request", + "description": "Properties of a breakpoint passed to the `setInstructionBreakpoints` request", "properties": { "instructionReference": { "type": "string", - "description": "The instruction reference of the breakpoint.\nThis should be a memory or instruction pointer reference from an EvaluateResponse, Variable, StackFrame, GotoTarget, or Breakpoint." + "description": "The instruction reference of the breakpoint.\nThis should be a memory or instruction pointer reference from an `EvaluateResponse`, `Variable`, `StackFrame`, `GotoTarget`, or `Breakpoint`." }, "offset": { "type": "integer", - "description": "An optional offset from the instruction reference.\nThis can be negative." + "description": "The offset from the instruction reference in bytes.\nThis can be negative." }, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "An expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true." }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true." } }, "required": [ "instructionReference" ] @@ -3705,19 +3781,19 @@ "Breakpoint": { "type": "object", - "description": "Information about a Breakpoint created in setBreakpoints, setFunctionBreakpoints, setInstructionBreakpoints, or setDataBreakpoints.", + "description": "Information about a breakpoint created in `setBreakpoints`, `setFunctionBreakpoints`, `setInstructionBreakpoints`, or `setDataBreakpoints` requests.", "properties": { "id": { "type": "integer", - "description": "An optional identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints." + "description": "The identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints." }, "verified": { "type": "boolean", - "description": "If true breakpoint could be set (but not necessarily at the desired location)." + "description": "If true, the breakpoint could be set (but not necessarily at the desired location)." }, "message": { "type": "string", - "description": "An optional message about the state of the breakpoint.\nThis is shown to the user and can be used to explain why a breakpoint could not be verified." + "description": "A message about the state of the breakpoint.\nThis is shown to the user and can be used to explain why a breakpoint could not be verified." }, "source": { "$ref": "#/definitions/Source", @@ -3729,23 +3805,28 @@ }, "column": { "type": "integer", - "description": "An optional start column of the actual range covered by the breakpoint." + "description": "Start position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." }, "endLine": { "type": "integer", - "description": "An optional end line of the actual range covered by the breakpoint." + "description": "The end line of the actual range covered by the breakpoint." }, "endColumn": { "type": "integer", - "description": "An optional end column of the actual range covered by the breakpoint.\nIf no end line is given, then the end column is assumed to be in the start line." + "description": "End position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.\nIf no end line is given, then the end column is assumed to be in the start line." }, "instructionReference": { "type": "string", - "description": "An optional memory reference to where the breakpoint is set." + "description": "A memory reference to where the breakpoint is set." }, "offset": { "type": "integer", - "description": "An optional offset from the instruction reference.\nThis can be negative." + "description": "The offset from the instruction reference.\nThis can be negative." + }, + "reason": { + "type": "string", + "description": "A machine-readable explanation of why a breakpoint may not be verified. If a breakpoint is verified or a specific reason is not known, the adapter should omit this property. Possible values include:\n\n- `pending`: Indicates a breakpoint might be verified in the future, but the adapter cannot verify it in the current state.\n - `failed`: Indicates a breakpoint was not able to be verified, and the adapter does not believe it can be verified without intervention.", + "enum": [ "pending", "failed" ] } }, "required": [ "verified" ] @@ -3753,10 +3834,10 @@ "SteppingGranularity": { "type": "string", - "description": "The granularity of one 'step' in the stepping requests 'next', 'stepIn', 'stepOut', and 'stepBack'.", + "description": "The granularity of one 'step' in the stepping requests `next`, `stepIn`, `stepOut`, and `stepBack`.", "enum": [ "statement", "line", "instruction" ], "enumDescriptions": [ - "The step should allow the program to run until the current statement has finished executing.\nThe meaning of a statement is determined by the adapter and it may be considered equivalent to a line.\nFor example 'for(int i = 0; i < 10; i++) could be considered to have 3 statements 'int i = 0', 'i < 10', and 'i++'.", + "The step should allow the program to run until the current statement has finished executing.\nThe meaning of a statement is determined by the adapter and it may be considered equivalent to a line.\nFor example 'for(int i = 0; i < 10; i++)' could be considered to have 3 statements 'int i = 0', 'i < 10', and 'i++'.", "The step should allow the program to run until the current source line has executed.", "The step should allow one instruction to execute (e.g. one x86 instruction)." ] @@ -3764,15 +3845,31 @@ "StepInTarget": { "type": "object", - "description": "A StepInTarget can be used in the 'stepIn' request and determines into which single target the stepIn request should step.", + "description": "A `StepInTarget` can be used in the `stepIn` request and determines into which single target the `stepIn` request should step.", "properties": { "id": { "type": "integer", - "description": "Unique identifier for a stepIn target." + "description": "Unique identifier for a step-in target." }, "label": { "type": "string", - "description": "The name of the stepIn target (shown in the UI)." + "description": "The name of the step-in target (shown in the UI)." + }, + "line": { + "type": "integer", + "description": "The line of the step-in target." + }, + "column": { + "type": "integer", + "description": "Start position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." + }, + "endLine": { + "type": "integer", + "description": "The end line of the range covered by the step-in target." + }, + "endColumn": { + "type": "integer", + "description": "End position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based." } }, "required": [ "id", "label" ] @@ -3780,11 +3877,11 @@ "GotoTarget": { "type": "object", - "description": "A GotoTarget describes a code location that can be used as a target in the 'goto' request.\nThe possible goto targets can be determined via the 'gotoTargets' request.", + "description": "A `GotoTarget` describes a code location that can be used as a target in the `goto` request.\nThe possible goto targets can be determined via the `gotoTargets` request.", "properties": { "id": { "type": "integer", - "description": "Unique identifier for a goto target. This is used in the goto request." + "description": "Unique identifier for a goto target. This is used in the `goto` request." }, "label": { "type": "string", @@ -3796,19 +3893,19 @@ }, "column": { "type": "integer", - "description": "An optional column of the goto target." + "description": "The column of the goto target." }, "endLine": { "type": "integer", - "description": "An optional end line of the range covered by the goto target." + "description": "The end line of the range covered by the goto target." }, "endColumn": { "type": "integer", - "description": "An optional end column of the range covered by the goto target." + "description": "The end column of the range covered by the goto target." }, "instructionPointerReference": { "type": "string", - "description": "Optional memory reference for the instruction pointer value represented by this target." + "description": "A memory reference for the instruction pointer value represented by this target." } }, "required": [ "id", "label", "line" ] @@ -3816,7 +3913,7 @@ "CompletionItem": { "type": "object", - "description": "CompletionItems are the suggestions returned from the CompletionsRequest.", + "description": "`CompletionItems` are the suggestions returned from the `completions` request.", "properties": { "label": { "type": "string", @@ -3824,11 +3921,15 @@ }, "text": { "type": "string", - "description": "If text is not falsy then it is inserted instead of the label." + "description": "If text is returned and not an empty string, then it is inserted instead of the label." }, "sortText": { "type": "string", - "description": "A string that should be used when comparing this item with other items. When `falsy` the label is used." + "description": "A string that should be used when comparing this item with other items. If not returned or an empty string, the `label` is used instead." + }, + "detail": { + "type": "string", + "description": "A human-readable string with additional information about this item, like type or symbol information." }, "type": { "$ref": "#/definitions/CompletionItemType", @@ -3836,19 +3937,19 @@ }, "start": { "type": "integer", - "description": "This value determines the location (in the CompletionsRequest's 'text' attribute) where the completion text is added.\nIf missing the text is added at the location specified by the CompletionsRequest's 'column' attribute." + "description": "Start position (within the `text` attribute of the `completions` request) where the completion text is added. The position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If the start position is omitted the text is added at the location specified by the `column` attribute of the `completions` request." }, "length": { "type": "integer", - "description": "This value determines how many characters are overwritten by the completion text.\nIf missing the value 0 is assumed which results in the completion text being inserted." + "description": "Length determines how many characters are overwritten by the completion text and it is measured in UTF-16 code units. If missing the value 0 is assumed which results in the completion text being inserted." }, "selectionStart": { "type": "integer", - "description": "Determines the start of the new selection after the text has been inserted (or replaced).\nThe start position must in the range 0 and length of the completion text.\nIf omitted the selection starts at the end of the completion text." + "description": "Determines the start of the new selection after the text has been inserted (or replaced). `selectionStart` is measured in UTF-16 code units and must be in the range 0 and length of the completion text. If omitted the selection starts at the end of the completion text." }, "selectionLength": { "type": "integer", - "description": "Determines the length of the new selection after the text has been inserted (or replaced).\nThe selection can not extend beyond the bounds of the completion text.\nIf omitted the length is assumed to be 0." + "description": "Determines the length of the new selection after the text has been inserted (or replaced) and it is measured in UTF-16 code units. The selection can not extend beyond the bounds of the completion text. If omitted the length is assumed to be 0." } }, "required": [ "label" ] @@ -3876,7 +3977,7 @@ }, "checksum": { "type": "string", - "description": "Value of the checksum." + "description": "Value of the checksum, encoded as a hexadecimal value." } }, "required": [ "algorithm", "checksum" ] @@ -3932,15 +4033,15 @@ "ExceptionFilterOptions": { "type": "object", - "description": "An ExceptionFilterOptions is used to specify an exception filter together with a condition for the setExceptionsFilter request.", + "description": "An `ExceptionFilterOptions` is used to specify an exception filter together with a condition for the `setExceptionBreakpoints` request.", "properties": { "filterId": { "type": "string", - "description": "ID of an exception filter returned by the 'exceptionBreakpointFilters' capability." + "description": "ID of an exception filter returned by the `exceptionBreakpointFilters` capability." }, "condition": { "type": "string", - "description": "An optional expression for conditional exceptions.\nThe exception will break into the debugger if the result of the condition is true." + "description": "An expression for conditional exceptions.\nThe exception breaks into the debugger if the result of the condition is true." } }, "required": [ "filterId" ] @@ -3948,14 +4049,14 @@ "ExceptionOptions": { "type": "object", - "description": "An ExceptionOptions assigns configuration options to a set of exceptions.", + "description": "An `ExceptionOptions` assigns configuration options to a set of exceptions.", "properties": { "path": { "type": "array", "items": { "$ref": "#/definitions/ExceptionPathSegment" }, - "description": "A path that selects a single or multiple exceptions in a tree. If 'path' is missing, the whole tree is selected.\nBy convention the first segment of the path is a category that is used to group exceptions in the UI." + "description": "A path that selects a single or multiple exceptions in a tree. If `path` is missing, the whole tree is selected.\nBy convention the first segment of the path is a category that is used to group exceptions in the UI." }, "breakMode": { "$ref": "#/definitions/ExceptionBreakMode", @@ -3973,7 +4074,7 @@ "ExceptionPathSegment": { "type": "object", - "description": "An ExceptionPathSegment represents a segment in a path that is used to match leafs or nodes in a tree of exceptions.\nIf a segment consists of more than one name, it matches the names provided if 'negate' is false or missing or\nit matches anything except the names provided if 'negate' is true.", + "description": "An `ExceptionPathSegment` represents a segment in a path that is used to match leafs or nodes in a tree of exceptions.\nIf a segment consists of more than one name, it matches the names provided if `negate` is false or missing, or it matches anything except the names provided if `negate` is true.", "properties": { "negate": { "type": "boolean", @@ -3984,7 +4085,7 @@ "items": { "type": "string" }, - "description": "Depending on the value of 'negate' the names that should match or not match." + "description": "Depending on the value of `negate` the names that should match or not match." } }, "required": [ "names" ] @@ -4008,7 +4109,7 @@ }, "evaluateName": { "type": "string", - "description": "Optional expression that can be evaluated in the current scope to obtain the exception object." + "description": "An expression that can be evaluated in the current scope to obtain the exception object." }, "stackTrace": { "type": "string", @@ -4030,11 +4131,11 @@ "properties": { "address": { "type": "string", - "description": "The address of the instruction. Treated as a hex value if prefixed with '0x', or as a decimal value otherwise." + "description": "The address of the instruction. Treated as a hex value if prefixed with `0x`, or as a decimal value otherwise." }, "instructionBytes": { "type": "string", - "description": "Optional raw bytes representing the instruction and its operands, in an implementation-defined format." + "description": "Raw bytes representing the instruction and its operands, in an implementation-defined format." }, "instruction": { "type": "string", @@ -4063,6 +4164,11 @@ "endColumn": { "type": "integer", "description": "The end column of the range that corresponds to this instruction, if any." + }, + "presentationHint": { + "type": "string", + "description": "A hint for how to present the instruction in the UI.\n\nA value of `invalid` may be used to indicate this instruction is 'filler' and cannot be reached by the program. For example, unreadable memory addresses may be presented is 'invalid.'", + "enum": [ "normal", "invalid" ] } }, "required": [ "address", "instruction" ] @@ -4070,7 +4176,7 @@ "InvalidatedAreas": { "type": "string", - "description": "Logical areas that can be invalidated by the 'invalidated' event.", + "description": "Logical areas that can be invalidated by the `invalidated` event.", "_enum": [ "all", "stacks", "threads", "variables" ], "enumDescriptions": [ "All previously fetched data has become invalid and needs to be refetched.", diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py index 0cbb3f5b3..e5078f0e4 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_base_schema.py @@ -5,11 +5,10 @@ class BaseSchema(object): - @staticmethod def initialize_ids_translation(): - BaseSchema._dap_id_to_obj_id = {0:0, None:None} - BaseSchema._obj_id_to_dap_id = {0:0, None:None} + BaseSchema._dap_id_to_obj_id = {0: 0, None: None} + BaseSchema._obj_id_to_dap_id = {0: 0, None: None} BaseSchema._next_dap_id = partial(next, itertools.count(1)) def to_json(self): @@ -17,8 +16,8 @@ def to_json(self): @staticmethod def _translate_id_to_dap(obj_id): - if obj_id == '*': - return '*' + if obj_id == "*": + return "*" # Note: we don't invalidate ids, so, if some object starts using the same id # of another object, the same id will be used. dap_id = BaseSchema._obj_id_to_dap_id.get(obj_id) @@ -29,12 +28,12 @@ def _translate_id_to_dap(obj_id): @staticmethod def _translate_id_from_dap(dap_id): - if dap_id == '*': - return '*' + if dap_id == "*": + return "*" try: return BaseSchema._dap_id_to_obj_id[dap_id] except: - raise KeyError('Wrong ID sent from the client: %s' % (dap_id,)) + raise KeyError("Wrong ID sent from the client: %s" % (dap_id,)) @staticmethod def update_dict_ids_to_dap(dct): @@ -59,7 +58,6 @@ def register(cls): def register_request(command): - def do_register(cls): _requests_to_types[command] = cls return cls @@ -68,7 +66,6 @@ def do_register(cls): def register_response(command): - def do_register(cls): _responses_to_types[command] = cls return cls @@ -77,7 +74,6 @@ def do_register(cls): def register_event(event): - def do_register(cls): _event_to_types[event] = cls return cls @@ -86,45 +82,45 @@ def do_register(cls): def from_dict(dct, update_ids_from_dap=False): - msg_type = dct.get('type') + msg_type = dct.get("type") if msg_type is None: - raise ValueError('Unable to make sense of message: %s' % (dct,)) + raise ValueError("Unable to make sense of message: %s" % (dct,)) - if msg_type == 'request': + if msg_type == "request": to_type = _requests_to_types - use = dct['command'] + use = dct["command"] - elif msg_type == 'response': + elif msg_type == "response": to_type = _responses_to_types - use = dct['command'] + use = dct["command"] else: to_type = _event_to_types - use = dct['event'] + use = dct["event"] cls = to_type.get(use) if cls is None: - raise ValueError('Unable to create message from dict: %s. %s not in %s' % (dct, use, sorted(to_type.keys()))) + raise ValueError("Unable to create message from dict: %s. %s not in %s" % (dct, use, sorted(to_type.keys()))) try: return cls(update_ids_from_dap=update_ids_from_dap, **dct) except: - msg = 'Error creating %s from %s' % (cls, dct) + msg = "Error creating %s from %s" % (cls, dct) debug_exception(msg) raise -def from_json(json_msg, update_ids_from_dap=False, on_dict_loaded=lambda dct:None): +def from_json(json_msg, update_ids_from_dap=False, on_dict_loaded=lambda dct: None): if isinstance(json_msg, bytes): - json_msg = json_msg.decode('utf-8') + json_msg = json_msg.decode("utf-8") as_dict = json.loads(json_msg) on_dict_loaded(as_dict) try: return from_dict(as_dict, update_ids_from_dap=update_ids_from_dap) except: - if as_dict.get('type') == 'response' and not as_dict.get('success'): + if as_dict.get("type") == "response" and not as_dict.get("success"): # Error messages may not have required body (return as a generic Response). - Response = _all_messages['Response'] + Response = _all_messages["Response"] return Response(**as_dict) else: raise @@ -132,16 +128,16 @@ def from_json(json_msg, update_ids_from_dap=False, on_dict_loaded=lambda dct:Non def get_response_class(request): if request.__class__ == dict: - return _responses_to_types[request['command']] + return _responses_to_types[request["command"]] return _responses_to_types[request.command] def build_response(request, kwargs=None): if kwargs is None: - kwargs = {'success':True} + kwargs = {"success": True} else: - if 'success' not in kwargs: - kwargs['success'] = True + if "success" not in kwargs: + kwargs["success"] = True response_class = _responses_to_types[request.command] - kwargs.setdefault('seq', -1) # To be overwritten before sending + kwargs.setdefault("seq", -1) # To be overwritten before sending return response_class(command=request.command, request_seq=request.seq, **kwargs) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py index 3159f63ed..bdb66e121 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema.py @@ -16,38 +16,29 @@ class ProtocolMessage(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "description": "Message type.", - "_enum": [ - "request", - "response", - "event" - ] - } + "type": {"type": "string", "description": "Message type.", "_enum": ["request", "response", "event"]}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, type, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string type: Message type. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ self.type = type self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) seq = self.seq dct = { - 'type': type, - 'seq': seq, + "type": type, + "seq": seq, } dct.update(self.kwargs) return dct @@ -64,61 +55,44 @@ class Request(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "description": "The command to execute." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "description": "The command to execute."}, "arguments": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Object containing arguments for the command." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Object containing arguments for the command.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, command, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param string command: The command to execute. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] arguments: Object containing arguments for the command. """ - self.type = 'request' + self.type = "request" self.command = command self.seq = seq self.arguments = arguments self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments + dct["arguments"] = arguments dct.update(self.kwargs) return dct @@ -134,61 +108,44 @@ class Event(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "description": "Type of event." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "description": "Type of event."}, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Event-specific information." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Event-specific information.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, event, seq=-1, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param string event: Type of event. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Event-specific information. """ - self.type = 'event' + self.type = "event" self.event = event self.seq = seq self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event seq = self.seq body = self.body dct = { - 'type': type, - 'event': event, - 'seq': seq, + "type": type, + "event": event, + "seq": seq, } if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct @@ -204,68 +161,45 @@ class Response(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -274,7 +208,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -284,25 +217,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_response('error') +@register_response("error") @register class ErrorResponse(BaseSchema): """ - On error (whenever 'success' is false), the body can provide more details. + On error (whenever `success` is false), the body can provide more details. Note: automatically generated code. Do not edit manually. """ @@ -310,77 +243,56 @@ class ErrorResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", - "properties": { - "error": { - "$ref": "#/definitions/Message", - "description": "An optional, structured error message." - } - } - } + "properties": {"error": {"$ref": "#/definitions/Message", "description": "A structured error message."}}, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ErrorResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ErrorResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ErrorResponseBody() else: - self.body = ErrorResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ErrorResponseBody else body + self.body = ErrorResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ErrorResponseBody else body self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -390,50 +302,49 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('cancel') +@register_request("cancel") @register class CancelRequest(BaseSchema): """ - The 'cancel' request is used by the frontend in two situations: - + The `cancel` request is used by the client in two situations: + - to indicate that it is no longer interested in the result produced by a specific request issued earlier - - - to cancel a progress sequence. Clients should only call this request if the capability - 'supportsCancelRequest' is true. - + + - to cancel a progress sequence. + + Clients should only call this request if the corresponding capability `supportsCancelRequest` is + true. + This request has a hint characteristic: a debug adapter can only be expected to make a 'best effort' - in honouring this request but there are no guarantees. - - The 'cancel' request may return an error if it could not cancel an operation but a frontend should + in honoring this request but there are no guarantees. + + The `cancel` request may return an error if it could not cancel an operation but a client should refrain from presenting this error to end users. - - A frontend client should only call this request if the capability 'supportsCancelRequest' is true. - - The request that got canceled still needs to send a response back. This can either be a normal - result ('success' attribute true) - - or an error response ('success' attribute false and the 'message' set to 'cancelled'). - - Returning partial results from a cancelled request is possible but please note that a frontend - client has no generic way for detecting that a response is partial or not. - - The progress that got cancelled still needs to send a 'progressEnd' event back. - - A client should not assume that progress just got cancelled after sending the 'cancel' request. + + The request that got cancelled still needs to send a response back. This can either be a normal + result (`success` attribute true) or an error response (`success` attribute false and the `message` + set to `cancelled`). + + Returning partial results from a cancelled request is possible but please note that a client has no + generic way for detecting that a response is partial or not. + + The progress that got cancelled still needs to send a `progressEnd` event back. + + A client should not assume that progress just got cancelled after sending the `cancel` request. Note: automatically generated code. Do not edit manually. """ @@ -441,57 +352,48 @@ class CancelRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "cancel" - ] - }, - "arguments": { - "type": "CancelArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["cancel"]}, + "arguments": {"type": "CancelArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param CancelArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param CancelArguments arguments: """ - self.type = 'request' - self.command = 'cancel' + self.type = "request" + self.command = "cancel" self.seq = seq if arguments is None: self.arguments = CancelArguments() else: - self.arguments = CancelArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != CancelArguments else arguments + self.arguments = ( + CancelArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != CancelArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -499,7 +401,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class CancelArguments(BaseSchema): """ - Arguments for 'cancel' request. + Arguments for `cancel` request. Note: automatically generated code. Do not edit manually. """ @@ -507,47 +409,45 @@ class CancelArguments(BaseSchema): __props__ = { "requestId": { "type": "integer", - "description": "The ID (attribute 'seq') of the request to cancel. If missing no request is cancelled.\nBoth a 'requestId' and a 'progressId' can be specified in one request." + "description": "The ID (attribute `seq`) of the request to cancel. If missing no request is cancelled.\nBoth a `requestId` and a `progressId` can be specified in one request.", }, "progressId": { "type": "string", - "description": "The ID (attribute 'progressId') of the progress to cancel. If missing no progress is cancelled.\nBoth a 'requestId' and a 'progressId' can be specified in one request." - } + "description": "The ID (attribute `progressId`) of the progress to cancel. If missing no progress is cancelled.\nBoth a `requestId` and a `progressId` can be specified in one request.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, requestId=None, progressId=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer requestId: The ID (attribute 'seq') of the request to cancel. If missing no request is cancelled. - Both a 'requestId' and a 'progressId' can be specified in one request. - :param string progressId: The ID (attribute 'progressId') of the progress to cancel. If missing no progress is cancelled. - Both a 'requestId' and a 'progressId' can be specified in one request. + :param integer requestId: The ID (attribute `seq`) of the request to cancel. If missing no request is cancelled. + Both a `requestId` and a `progressId` can be specified in one request. + :param string progressId: The ID (attribute `progressId`) of the progress to cancel. If missing no progress is cancelled. + Both a `requestId` and a `progressId` can be specified in one request. """ self.requestId = requestId self.progressId = progressId self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) requestId = self.requestId progressId = self.progressId - dct = { - } + dct = {} if requestId is not None: - dct['requestId'] = requestId + dct["requestId"] = requestId if progressId is not None: - dct['progressId'] = progressId + dct["progressId"] = progressId dct.update(self.kwargs) return dct -@register_response('cancel') +@register_response("cancel") @register class CancelResponse(BaseSchema): """ - Response to 'cancel' request. This is just an acknowledgement, so no body field is required. + Response to `cancel` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -555,68 +455,45 @@ class CancelResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -625,7 +502,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -635,45 +511,45 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_event('initialized') +@register_event("initialized") @register class InitializedEvent(BaseSchema): """ This event indicates that the debug adapter is ready to accept configuration requests (e.g. - SetBreakpointsRequest, SetExceptionBreakpointsRequest). - + `setBreakpoints`, `setExceptionBreakpoints`). + A debug adapter is expected to send this event when it is ready to accept configuration requests - (but not before the 'initialize' request has finished). - + (but not before the `initialize` request has finished). + The sequence of events/requests is as follows: - - - adapters sends 'initialized' event (after the 'initialize' request has returned) - - - frontend sends zero or more 'setBreakpoints' requests - - - frontend sends one 'setFunctionBreakpoints' request (if capability 'supportsFunctionBreakpoints' - is true) - - - frontend sends a 'setExceptionBreakpoints' request if one or more 'exceptionBreakpointFilters' - have been defined (or if 'supportsConfigurationDoneRequest' is not defined or false) - - - frontend sends other future configuration requests - - - frontend sends one 'configurationDone' request to indicate the end of the configuration. + + - adapters sends `initialized` event (after the `initialize` request has returned) + + - client sends zero or more `setBreakpoints` requests + + - client sends one `setFunctionBreakpoints` request (if corresponding capability + `supportsFunctionBreakpoints` is true) + + - client sends a `setExceptionBreakpoints` request if one or more `exceptionBreakpointFilters` have + been defined (or if `supportsConfigurationDoneRequest` is not true) + + - client sends other future configuration requests + + - client sends one `configurationDone` request to indicate the end of the configuration. Note: automatically generated code. Do not edit manually. """ @@ -681,74 +557,55 @@ class InitializedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "initialized" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["initialized"]}, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Event-specific information." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Event-specific information.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Event-specific information. """ - self.type = 'event' - self.event = 'initialized' + self.type = "event" + self.event = "initialized" self.seq = seq self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event seq = self.seq body = self.body dct = { - 'type': type, - 'event': event, - 'seq': seq, + "type": type, + "event": event, + "seq": seq, } if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_event('stopped') +@register_event("stopped") @register class StoppedEvent(BaseSchema): """ The event indicates that the execution of the debuggee has stopped due to some condition. - - This can be caused by a break point previously set, a stepping request has completed, by executing a + + This can be caused by a breakpoint previously set, a stepping request has completed, by executing a debugger statement etc. Note: automatically generated code. Do not edit manually. @@ -757,26 +614,16 @@ class StoppedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "stopped" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["stopped"]}, "body": { "type": "object", "properties": { "reason": { "type": "string", - "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the 'description' attribute is missing (but it must not be translated).", + "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the `description` attribute is missing (but it must not be translated).", "_enum": [ "step", "breakpoint", @@ -786,88 +633,80 @@ class StoppedEvent(BaseSchema): "goto", "function breakpoint", "data breakpoint", - "instruction breakpoint" - ] + "instruction breakpoint", + ], }, "description": { "type": "string", - "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and must be translated." - }, - "threadId": { - "type": "integer", - "description": "The thread which was stopped." + "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and can be translated.", }, + "threadId": {"type": "integer", "description": "The thread which was stopped."}, "preserveFocusHint": { "type": "boolean", - "description": "A value of true hints to the frontend that this event should not change the focus." + "description": "A value of True hints to the client that this event should not change the focus.", }, "text": { "type": "string", - "description": "Additional information. E.g. if reason is 'exception', text contains the exception name. This string is shown in the UI." + "description": "Additional information. E.g. if reason is `exception`, text contains the exception name. This string is shown in the UI.", }, "allThreadsStopped": { "type": "boolean", - "description": "If 'allThreadsStopped' is true, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given threadId can be expanded." + "description": "If `allThreadsStopped` is True, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given `threadId` can be expanded.", }, "hitBreakpointIds": { "type": "array", - "items": { - "type": "integer" - }, - "description": "Ids of the breakpoints that triggered the event. In most cases there will be only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location." - } + "items": {"type": "integer"}, + "description": "Ids of the breakpoints that triggered the event. In most cases there is only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location.", + }, }, - "required": [ - "reason" - ] - } + "required": ["reason"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param StoppedEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param StoppedEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'stopped' + self.type = "event" + self.event = "stopped" if body is None: self.body = StoppedEventBody() else: - self.body = StoppedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != StoppedEventBody else body + self.body = StoppedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != StoppedEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('continued') +@register_event("continued") @register class ContinuedEvent(BaseSchema): """ The event indicates that the execution of the debuggee has continued. - + Please note: a debug adapter is not expected to send this event in response to a request that - implies that execution continues, e.g. 'launch' or 'continue'. - - It is only necessary to send a 'continued' event if there was no previous request that implied this. + implies that execution continues, e.g. `launch` or `continue`. + + It is only necessary to send a `continued` event if there was no previous request that implied this. Note: automatically generated code. Do not edit manually. """ @@ -875,74 +714,60 @@ class ContinuedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "continued" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["continued"]}, "body": { "type": "object", "properties": { - "threadId": { - "type": "integer", - "description": "The thread which was continued." - }, + "threadId": {"type": "integer", "description": "The thread which was continued."}, "allThreadsContinued": { "type": "boolean", - "description": "If 'allThreadsContinued' is true, a debug adapter can announce that all threads have continued." - } + "description": "If `allThreadsContinued` is True, a debug adapter can announce that all threads have continued.", + }, }, - "required": [ - "threadId" - ] - } + "required": ["threadId"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ContinuedEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ContinuedEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'continued' + self.type = "event" + self.event = "continued" if body is None: self.body = ContinuedEventBody() else: - self.body = ContinuedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ContinuedEventBody else body + self.body = ( + ContinuedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ContinuedEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('exited') +@register_event("exited") @register class ExitedEvent(BaseSchema): """ @@ -954,70 +779,52 @@ class ExitedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "exited" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["exited"]}, "body": { "type": "object", - "properties": { - "exitCode": { - "type": "integer", - "description": "The exit code returned from the debuggee." - } - }, - "required": [ - "exitCode" - ] - } + "properties": {"exitCode": {"type": "integer", "description": "The exit code returned from the debuggee."}}, + "required": ["exitCode"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ExitedEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ExitedEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'exited' + self.type = "event" + self.event = "exited" if body is None: self.body = ExitedEventBody() else: - self.body = ExitedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ExitedEventBody else body + self.body = ExitedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ExitedEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('terminated') +@register_event("terminated") @register class TerminatedEvent(BaseSchema): """ @@ -1030,76 +837,59 @@ class TerminatedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "terminated" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["terminated"]}, "body": { "type": "object", "properties": { "restart": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "A debug adapter may set 'restart' to true (or to an arbitrary object) to request that the front end restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute '__restart' to the 'launch' and 'attach' requests." + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "A debug adapter may set `restart` to True (or to an arbitrary object) to request that the client restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute `__restart` to the `launch` and `attach` requests.", } - } - } + }, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param TerminatedEventBody body: + :param string type: + :param string event: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param TerminatedEventBody body: """ - self.type = 'event' - self.event = 'terminated' + self.type = "event" + self.event = "terminated" self.seq = seq if body is None: self.body = TerminatedEventBody() else: - self.body = TerminatedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != TerminatedEventBody else body + self.body = ( + TerminatedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != TerminatedEventBody else body + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event seq = self.seq body = self.body dct = { - 'type': type, - 'event': event, - 'seq': seq, + "type": type, + "event": event, + "seq": seq, } if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_event('thread') +@register_event("thread") @register class ThreadEvent(BaseSchema): """ @@ -1111,79 +901,55 @@ class ThreadEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "thread" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["thread"]}, "body": { "type": "object", "properties": { - "reason": { - "type": "string", - "description": "The reason for the event.", - "_enum": [ - "started", - "exited" - ] - }, - "threadId": { - "type": "integer", - "description": "The identifier of the thread." - } + "reason": {"type": "string", "description": "The reason for the event.", "_enum": ["started", "exited"]}, + "threadId": {"type": "integer", "description": "The identifier of the thread."}, }, - "required": [ - "reason", - "threadId" - ] - } + "required": ["reason", "threadId"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ThreadEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ThreadEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'thread' + self.type = "event" + self.event = "thread" if body is None: self.body = ThreadEventBody() else: - self.body = ThreadEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ThreadEventBody else body + self.body = ThreadEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ThreadEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('output') +@register_event("output") @register class OutputEvent(BaseSchema): """ @@ -1195,130 +961,90 @@ class OutputEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "output" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["output"]}, "body": { "type": "object", "properties": { "category": { "type": "string", - "description": "The output category. If not specified or if the category is not understand by the client, 'console' is assumed.", - "_enum": [ - "console", - "important", - "stdout", - "stderr", - "telemetry" - ], + "description": "The output category. If not specified or if the category is not understood by the client, `console` is assumed.", + "_enum": ["console", "important", "stdout", "stderr", "telemetry"], "enumDescriptions": [ "Show the output in the client's default message UI, e.g. a 'debug console'. This category should only be used for informational output from the debugger (as opposed to the debuggee).", - "A hint for the client to show the ouput in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the 'console' category.", + "A hint for the client to show the output in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the `console` category.", "Show the output as normal program output from the debuggee.", "Show the output as error program output from the debuggee.", - "Send the output to telemetry instead of showing it to the user." - ] - }, - "output": { - "type": "string", - "description": "The output to report." + "Send the output to telemetry instead of showing it to the user.", + ], }, + "output": {"type": "string", "description": "The output to report."}, "group": { "type": "string", "description": "Support for keeping an output log organized by grouping related messages.", - "enum": [ - "start", - "startCollapsed", - "end" - ], + "enum": ["start", "startCollapsed", "end"], "enumDescriptions": [ - "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe 'output' attribute becomes the name of the group and is not indented.", - "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe 'output' attribute becomes the name of the group and is not indented.", - "End the current group and decreases the indentation of subsequent output events.\nA non empty 'output' attribute is shown as the unindented end of the group." - ] + "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe `output` attribute becomes the name of the group and is not indented.", + "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe `output` attribute becomes the name of the group and is not indented.", + "End the current group and decrease the indentation of subsequent output events.\nA non-empty `output` attribute is shown as the unindented end of the group.", + ], }, "variablesReference": { "type": "integer", - "description": "If an attribute 'variablesReference' exists and its value is > 0, the output contains objects which can be retrieved by passing 'variablesReference' to the 'variables' request. The value should be less than or equal to 2147483647 (2^31-1)." - }, - "source": { - "$ref": "#/definitions/Source", - "description": "An optional source location where the output was produced." - }, - "line": { - "type": "integer", - "description": "An optional source location line where the output was produced." + "description": "If an attribute `variablesReference` exists and its value is > 0, the output contains objects which can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, + "source": {"$ref": "#/definitions/Source", "description": "The source location where the output was produced."}, + "line": {"type": "integer", "description": "The source location's line where the output was produced."}, "column": { "type": "integer", - "description": "An optional source location column where the output was produced." + "description": "The position in `line` where the output was produced. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, "data": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Optional data to report. For the 'telemetry' category the data will be sent to telemetry, for the other categories the data is shown in JSON format." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Additional data to report. For the `telemetry` category the data is sent to telemetry, for the other categories the data is shown in JSON format.", + }, }, - "required": [ - "output" - ] - } + "required": ["output"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param OutputEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param OutputEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'output' + self.type = "event" + self.event = "output" if body is None: self.body = OutputEventBody() else: - self.body = OutputEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != OutputEventBody else body + self.body = OutputEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != OutputEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('breakpoint') +@register_event("breakpoint") @register class BreakpointEvent(BaseSchema): """ @@ -1330,80 +1056,60 @@ class BreakpointEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "breakpoint" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["breakpoint"]}, "body": { "type": "object", "properties": { - "reason": { - "type": "string", - "description": "The reason for the event.", - "_enum": [ - "changed", - "new", - "removed" - ] - }, + "reason": {"type": "string", "description": "The reason for the event.", "_enum": ["changed", "new", "removed"]}, "breakpoint": { "$ref": "#/definitions/Breakpoint", - "description": "The 'id' attribute is used to find the target breakpoint and the other attributes are used as the new values." - } + "description": "The `id` attribute is used to find the target breakpoint, the other attributes are used as the new values.", + }, }, - "required": [ - "reason", - "breakpoint" - ] - } + "required": ["reason", "breakpoint"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param BreakpointEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param BreakpointEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'breakpoint' + self.type = "event" + self.event = "breakpoint" if body is None: self.body = BreakpointEventBody() else: - self.body = BreakpointEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != BreakpointEventBody else body + self.body = ( + BreakpointEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != BreakpointEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('module') +@register_event("module") @register class ModuleEvent(BaseSchema): """ @@ -1415,80 +1121,58 @@ class ModuleEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "module" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["module"]}, "body": { "type": "object", "properties": { - "reason": { - "type": "string", - "description": "The reason for the event.", - "enum": [ - "new", - "changed", - "removed" - ] - }, + "reason": {"type": "string", "description": "The reason for the event.", "enum": ["new", "changed", "removed"]}, "module": { "$ref": "#/definitions/Module", - "description": "The new, changed, or removed module. In case of 'removed' only the module id is used." - } + "description": "The new, changed, or removed module. In case of `removed` only the module id is used.", + }, }, - "required": [ - "reason", - "module" - ] - } + "required": ["reason", "module"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ModuleEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ModuleEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'module' + self.type = "event" + self.event = "module" if body is None: self.body = ModuleEventBody() else: - self.body = ModuleEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ModuleEventBody else body + self.body = ModuleEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ModuleEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('loadedSource') +@register_event("loadedSource") @register class LoadedSourceEvent(BaseSchema): """ @@ -1501,80 +1185,57 @@ class LoadedSourceEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "loadedSource" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["loadedSource"]}, "body": { "type": "object", "properties": { - "reason": { - "type": "string", - "description": "The reason for the event.", - "enum": [ - "new", - "changed", - "removed" - ] - }, - "source": { - "$ref": "#/definitions/Source", - "description": "The new, changed, or removed source." - } + "reason": {"type": "string", "description": "The reason for the event.", "enum": ["new", "changed", "removed"]}, + "source": {"$ref": "#/definitions/Source", "description": "The new, changed, or removed source."}, }, - "required": [ - "reason", - "source" - ] - } + "required": ["reason", "source"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param LoadedSourceEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param LoadedSourceEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'loadedSource' + self.type = "event" + self.event = "loadedSource" if body is None: self.body = LoadedSourceEventBody() else: - self.body = LoadedSourceEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != LoadedSourceEventBody else body + self.body = ( + LoadedSourceEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != LoadedSourceEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('process') +@register_event("process") @register class ProcessEvent(BaseSchema): """ @@ -1587,107 +1248,90 @@ class ProcessEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "process" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["process"]}, "body": { "type": "object", "properties": { "name": { "type": "string", - "description": "The logical name of the process. This is usually the full path to process's executable file. Example: /home/example/myproj/program.js." + "description": "The logical name of the process. This is usually the full path to process's executable file. Example: /home/example/myproj/program.js.", }, "systemProcessId": { "type": "integer", - "description": "The system process id of the debugged process. This property will be missing for non-system processes." + "description": "The system process id of the debugged process. This property is missing for non-system processes.", }, "isLocalProcess": { "type": "boolean", - "description": "If true, the process is running on the same computer as the debug adapter." + "description": "If True, the process is running on the same computer as the debug adapter.", }, "startMethod": { "type": "string", - "enum": [ - "launch", - "attach", - "attachForSuspendedLaunch" - ], + "enum": ["launch", "attach", "attachForSuspendedLaunch"], "description": "Describes how the debug engine started debugging this process.", "enumDescriptions": [ "Process was launched under the debugger.", "Debugger attached to an existing process.", - "A project launcher component has launched a new process in a suspended state and then asked the debugger to attach." - ] + "A project launcher component has launched a new process in a suspended state and then asked the debugger to attach.", + ], }, "pointerSize": { "type": "integer", - "description": "The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display." - } + "description": "The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display.", + }, }, - "required": [ - "name" - ] - } + "required": ["name"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ProcessEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ProcessEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'process' + self.type = "event" + self.event = "process" if body is None: self.body = ProcessEventBody() else: - self.body = ProcessEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProcessEventBody else body + self.body = ProcessEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProcessEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('capabilities') +@register_event("capabilities") @register class CapabilitiesEvent(BaseSchema): """ The event indicates that one or more capabilities have changed. - - Since the capabilities are dependent on the frontend and its UI, it might not be possible to change + + Since the capabilities are dependent on the client and its UI, it might not be possible to change that at random times (or too late). - - Consequently this event has a hint characteristic: a frontend can only be expected to make a 'best - effort' in honouring individual capabilities but there are no guarantees. - + + Consequently this event has a hint characteristic: a client can only be expected to make a 'best + effort' in honoring individual capabilities but there are no guarantees. + Only changed capabilities need to be included, all other capabilities keep their values. Note: automatically generated code. Do not edit manually. @@ -1696,82 +1340,63 @@ class CapabilitiesEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "capabilities" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["capabilities"]}, "body": { "type": "object", - "properties": { - "capabilities": { - "$ref": "#/definitions/Capabilities", - "description": "The set of updated capabilities." - } - }, - "required": [ - "capabilities" - ] - } + "properties": {"capabilities": {"$ref": "#/definitions/Capabilities", "description": "The set of updated capabilities."}}, + "required": ["capabilities"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param CapabilitiesEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param CapabilitiesEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'capabilities' + self.type = "event" + self.event = "capabilities" if body is None: self.body = CapabilitiesEventBody() else: - self.body = CapabilitiesEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != CapabilitiesEventBody else body + self.body = ( + CapabilitiesEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != CapabilitiesEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('progressStart') +@register_event("progressStart") @register class ProgressStartEvent(BaseSchema): """ - The event signals that a long running operation is about to start and - - provides additional information for the client to set up a corresponding progress and cancellation - UI. - + The event signals that a long running operation is about to start and provides additional + information for the client to set up a corresponding progress and cancellation UI. + The client is free to delay the showing of the UI in order to reduce flicker. - - This event should only be sent if the client has passed the value true for the - 'supportsProgressReporting' capability of the 'initialize' request. + + This event should only be sent if the corresponding capability `supportsProgressReporting` is true. Note: automatically generated code. Do not edit manually. """ @@ -1779,101 +1404,88 @@ class ProgressStartEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "progressStart" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["progressStart"]}, "body": { "type": "object", "properties": { "progressId": { "type": "string", - "description": "An ID that must be used in subsequent 'progressUpdate' and 'progressEnd' events to make them refer to the same progress reporting.\nIDs must be unique within a debug session." + "description": "An ID that can be used in subsequent `progressUpdate` and `progressEnd` events to make them refer to the same progress reporting.\nIDs must be unique within a debug session.", }, "title": { "type": "string", - "description": "Mandatory (short) title of the progress reporting. Shown in the UI to describe the long running operation." + "description": "Short title of the progress reporting. Shown in the UI to describe the long running operation.", }, "requestId": { "type": "integer", - "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit\nprogress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter." + "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit progress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter.", }, "cancellable": { "type": "boolean", - "description": "If true, the request that reports progress may be canceled with a 'cancel' request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting." - }, - "message": { - "type": "string", - "description": "Optional, more detailed progress message." + "description": "If True, the request that reports progress may be cancelled with a `cancel` request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting.", }, + "message": {"type": "string", "description": "More detailed progress message."}, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." - } + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown.", + }, }, - "required": [ - "progressId", - "title" - ] - } + "required": ["progressId", "title"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ProgressStartEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ProgressStartEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'progressStart' + self.type = "event" + self.event = "progressStart" if body is None: self.body = ProgressStartEventBody() else: - self.body = ProgressStartEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProgressStartEventBody else body + self.body = ( + ProgressStartEventBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != ProgressStartEventBody + else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('progressUpdate') +@register_event("progressUpdate") @register class ProgressUpdateEvent(BaseSchema): """ - The event signals that the progress reporting needs to updated with a new message and/or percentage. - + The event signals that the progress reporting needs to be updated with a new message and/or + percentage. + The client does not have to update the UI immediately, but the clients needs to keep track of the message and/or percentage values. - - This event should only be sent if the client has passed the value true for the - 'supportsProgressReporting' capability of the 'initialize' request. + + This event should only be sent if the corresponding capability `supportsProgressReporting` is true. Note: automatically generated code. Do not edit manually. """ @@ -1881,85 +1493,72 @@ class ProgressUpdateEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "progressUpdate" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["progressUpdate"]}, "body": { "type": "object", "properties": { - "progressId": { - "type": "string", - "description": "The ID that was introduced in the initial 'progressStart' event." - }, + "progressId": {"type": "string", "description": "The ID that was introduced in the initial `progressStart` event."}, "message": { "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." + "description": "More detailed progress message. If omitted, the previous message (if any) is used.", }, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." - } + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown.", + }, }, - "required": [ - "progressId" - ] - } + "required": ["progressId"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ProgressUpdateEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ProgressUpdateEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'progressUpdate' + self.type = "event" + self.event = "progressUpdate" if body is None: self.body = ProgressUpdateEventBody() else: - self.body = ProgressUpdateEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProgressUpdateEventBody else body + self.body = ( + ProgressUpdateEventBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != ProgressUpdateEventBody + else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('progressEnd') +@register_event("progressEnd") @register class ProgressEndEvent(BaseSchema): """ - The event signals the end of the progress reporting with an optional final message. - - This event should only be sent if the client has passed the value true for the - 'supportsProgressReporting' capability of the 'initialize' request. + The event signals the end of the progress reporting with a final message. + + This event should only be sent if the corresponding capability `supportsProgressReporting` is true. Note: automatically generated code. Do not edit manually. """ @@ -1967,86 +1566,71 @@ class ProgressEndEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "progressEnd" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["progressEnd"]}, "body": { "type": "object", "properties": { - "progressId": { - "type": "string", - "description": "The ID that was introduced in the initial 'ProgressStartEvent'." - }, + "progressId": {"type": "string", "description": "The ID that was introduced in the initial `ProgressStartEvent`."}, "message": { "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." - } + "description": "More detailed progress message. If omitted, the previous message (if any) is used.", + }, }, - "required": [ - "progressId" - ] - } + "required": ["progressId"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param ProgressEndEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param ProgressEndEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'progressEnd' + self.type = "event" + self.event = "progressEnd" if body is None: self.body = ProgressEndEventBody() else: - self.body = ProgressEndEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProgressEndEventBody else body + self.body = ( + ProgressEndEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ProgressEndEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('invalidated') +@register_event("invalidated") @register class InvalidatedEvent(BaseSchema): """ This event signals that some state in the debug adapter has changed and requires that the client needs to re-render the data snapshot previously requested. - + Debug adapters do not have to emit this event for runtime changes like stopped or thread events because in that case the client refetches the new state anyway. But the event can be used for example to refresh the UI after rendering formatting has changed in the debug adapter. - - This event should only be sent if the debug adapter has received a value true for the - 'supportsInvalidatedEvent' capability of the 'initialize' request. + + This event should only be sent if the corresponding capability `supportsInvalidatedEvent` is true. Note: automatically generated code. Do not edit manually. """ @@ -2054,93 +1638,81 @@ class InvalidatedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "invalidated" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["invalidated"]}, "body": { "type": "object", "properties": { "areas": { "type": "array", - "description": "Optional set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honouring the areas but there are no guarantees. If this property is missing, empty, or if values are not understand the client should assume a single value 'all'.", - "items": { - "$ref": "#/definitions/InvalidatedAreas" - } + "description": "Set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honoring the areas but there are no guarantees. If this property is missing, empty, or if values are not understood, the client should assume a single value `all`.", + "items": {"$ref": "#/definitions/InvalidatedAreas"}, }, "threadId": { "type": "integer", - "description": "If specified, the client only needs to refetch data related to this thread." + "description": "If specified, the client only needs to refetch data related to this thread.", }, "stackFrameId": { "type": "integer", - "description": "If specified, the client only needs to refetch data related to this stack frame (and the 'threadId' is ignored)." - } - } - } + "description": "If specified, the client only needs to refetch data related to this stack frame (and the `threadId` is ignored).", + }, + }, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param InvalidatedEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param InvalidatedEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'invalidated' + self.type = "event" + self.event = "invalidated" if body is None: self.body = InvalidatedEventBody() else: - self.body = InvalidatedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != InvalidatedEventBody else body + self.body = ( + InvalidatedEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != InvalidatedEventBody else body + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_event('memory') +@register_event("memory") @register class MemoryEvent(BaseSchema): """ - This event indicates that some memory range has been updated. It should only be sent if the debug - adapter has received a value true for the `supportsMemoryEvent` capability of the `initialize` - request. - + This event indicates that some memory range has been updated. It should only be sent if the + corresponding capability `supportsMemoryEvent` is true. + Clients typically react to the event by re-issuing a `readMemory` request if they show the memory identified by the `memoryReference` and if the updated memory range overlaps the displayed range. Clients should not make assumptions how individual memory references relate to each other, so they should not assume that they are part of a single continuous address range and might overlap. - + Debug adapters can use this event to indicate that the contents of a memory range has changed due to - some other DAP request like `setVariable` or `setExpression`. Debug adapters are not expected to - emit this event for each and every memory change of a running program, because that information is + some other request like `setVariable` or `setExpression`. Debug adapters are not expected to emit + this event for each and every memory change of a running program, because that information is typically not available from debuggers and it would flood clients with too many events. Note: automatically generated code. Do not edit manually. @@ -2149,89 +1721,76 @@ class MemoryEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "memory" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["memory"]}, "body": { "type": "object", "properties": { - "memoryReference": { - "type": "string", - "description": "Memory reference of a memory range that has been updated." - }, - "offset": { - "type": "integer", - "description": "Starting offset in bytes where memory has been updated. Can be negative." - }, - "count": { - "type": "integer", - "description": "Number of bytes updated." - } + "memoryReference": {"type": "string", "description": "Memory reference of a memory range that has been updated."}, + "offset": {"type": "integer", "description": "Starting offset in bytes where memory has been updated. Can be negative."}, + "count": {"type": "integer", "description": "Number of bytes updated."}, }, - "required": [ - "memoryReference", - "offset", - "count" - ] - } + "required": ["memoryReference", "offset", "count"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, body, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param MemoryEventBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param MemoryEventBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'event' - self.event = 'memory' + self.type = "event" + self.event = "memory" if body is None: self.body = MemoryEventBody() else: - self.body = MemoryEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != MemoryEventBody else body + self.body = MemoryEventBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != MemoryEventBody else body self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event body = self.body seq = self.seq dct = { - 'type': type, - 'event': event, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "event": event, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct -@register_request('runInTerminal') +@register_request("runInTerminal") @register class RunInTerminalRequest(BaseSchema): """ - This optional request is sent from the debug adapter to the client to run a command in a terminal. - + This request is sent from the debug adapter to the client to run a command in a terminal. + This is typically used to launch the debuggee in a terminal provided by the client. - - This request should only be called if the client has passed the value true for the - 'supportsRunInTerminalRequest' capability of the 'initialize' request. + + This request should only be called if the corresponding client capability + `supportsRunInTerminalRequest` is true. + + Client implementations of `runInTerminal` are free to run the command however they choose including + issuing the command to a command line interpreter (aka 'shell'). Argument strings passed to the + `runInTerminal` request must arrive verbatim in the command to be run. As a consequence, clients + which use a shell are responsible for escaping any special shell characters in the argument strings + to prevent them from being interpreted (and modified) by the shell. + + Some users may wish to take advantage of shell processing in the argument strings. For clients which + implement `runInTerminal` using an intermediary shell, the `argsCanBeInterpretedByShell` property + can be set to true. In this case the client is requested not to escape any special shell characters + in the argument strings. Note: automatically generated code. Do not edit manually. """ @@ -2239,55 +1798,46 @@ class RunInTerminalRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "runInTerminal" - ] - }, - "arguments": { - "type": "RunInTerminalRequestArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["runInTerminal"]}, + "arguments": {"type": "RunInTerminalRequestArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param RunInTerminalRequestArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param RunInTerminalRequestArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'runInTerminal' + self.type = "request" + self.command = "runInTerminal" if arguments is None: self.arguments = RunInTerminalRequestArguments() else: - self.arguments = RunInTerminalRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != RunInTerminalRequestArguments else arguments + self.arguments = ( + RunInTerminalRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != RunInTerminalRequestArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -2296,7 +1846,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class RunInTerminalRequestArguments(BaseSchema): """ - Arguments for 'runInTerminal' request. + Arguments for `runInTerminal` request. Note: automatically generated code. Do not edit manually. """ @@ -2304,50 +1854,44 @@ class RunInTerminalRequestArguments(BaseSchema): __props__ = { "kind": { "type": "string", - "enum": [ - "integrated", - "external" - ], - "description": "What kind of terminal to launch." - }, - "title": { - "type": "string", - "description": "Optional title of the terminal." + "enum": ["integrated", "external"], + "description": "What kind of terminal to launch. Defaults to `integrated` if not specified.", }, + "title": {"type": "string", "description": "Title of the terminal."}, "cwd": { "type": "string", - "description": "Working directory for the command. For non-empty, valid paths this typically results in execution of a change directory command." + "description": "Working directory for the command. For non-empty, valid paths this typically results in execution of a change directory command.", }, "args": { "type": "array", - "items": { - "type": "string" - }, - "description": "List of arguments. The first argument is the command to run." + "items": {"type": "string"}, + "description": "List of arguments. The first argument is the command to run.", }, "env": { "type": "object", "description": "Environment key-value pairs that are added to or removed from the default environment.", "additionalProperties": { - "type": [ - "string", - "null" - ], - "description": "Proper values must be strings. A value of 'null' removes the variable from the environment." - } - } + "type": ["string", "null"], + "description": "A string is a proper value for an environment variable. The value `null` removes the variable from the environment.", + }, + }, + "argsCanBeInterpretedByShell": { + "type": "boolean", + "description": "This property should only be set if the corresponding capability `supportsArgsCanBeInterpretedByShell` is True. If the client uses an intermediary shell to launch the application, then the client must not attempt to escape characters with special meanings for the shell. The user is fully responsible for escaping as needed and that arguments using special characters may not be portable across shells.", + }, } - __refs__ = set(['env']) + __refs__ = set(["env"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, cwd, args, kind=None, title=None, env=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__(self, cwd, args, kind=None, title=None, env=None, argsCanBeInterpretedByShell=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string cwd: Working directory for the command. For non-empty, valid paths this typically results in execution of a change directory command. :param array args: List of arguments. The first argument is the command to run. - :param string kind: What kind of terminal to launch. - :param string title: Optional title of the terminal. + :param string kind: What kind of terminal to launch. Defaults to `integrated` if not specified. + :param string title: Title of the terminal. :param RunInTerminalRequestArgumentsEnv env: Environment key-value pairs that are added to or removed from the default environment. + :param boolean argsCanBeInterpretedByShell: This property should only be set if the corresponding capability `supportsArgsCanBeInterpretedByShell` is true. If the client uses an intermediary shell to launch the application, then the client must not attempt to escape characters with special meanings for the shell. The user is fully responsible for escaping as needed and that arguments using special characters may not be portable across shells. """ self.cwd = cwd self.args = args @@ -2356,10 +1900,14 @@ def __init__(self, cwd, args, kind=None, title=None, env=None, update_ids_from_d if env is None: self.env = RunInTerminalRequestArgumentsEnv() else: - self.env = RunInTerminalRequestArgumentsEnv(update_ids_from_dap=update_ids_from_dap, **env) if env.__class__ != RunInTerminalRequestArgumentsEnv else env + self.env = ( + RunInTerminalRequestArgumentsEnv(update_ids_from_dap=update_ids_from_dap, **env) + if env.__class__ != RunInTerminalRequestArgumentsEnv + else env + ) + self.argsCanBeInterpretedByShell = argsCanBeInterpretedByShell self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) cwd = self.cwd args = self.args @@ -2368,25 +1916,242 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un kind = self.kind title = self.title env = self.env + argsCanBeInterpretedByShell = self.argsCanBeInterpretedByShell + dct = { + "cwd": cwd, + "args": args, + } + if kind is not None: + dct["kind"] = kind + if title is not None: + dct["title"] = title + if env is not None: + dct["env"] = env.to_dict(update_ids_to_dap=update_ids_to_dap) + if argsCanBeInterpretedByShell is not None: + dct["argsCanBeInterpretedByShell"] = argsCanBeInterpretedByShell + dct.update(self.kwargs) + return dct + + +@register_response("runInTerminal") +@register +class RunInTerminalResponse(BaseSchema): + """ + Response to `runInTerminal` request. + + Note: automatically generated code. Do not edit manually. + """ + + __props__ = { + "seq": { + "type": "integer", + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", + }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, + "success": { + "type": "boolean", + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", + }, + "command": {"type": "string", "description": "The command requested."}, + "message": { + "type": "string", + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], + }, + "body": { + "type": "object", + "properties": { + "processId": { + "type": "integer", + "description": "The process ID. The value should be less than or equal to 2147483647 (2^31-1).", + }, + "shellProcessId": { + "type": "integer", + "description": "The process ID of the terminal shell. The value should be less than or equal to 2147483647 (2^31-1).", + }, + }, + }, + } + __refs__ = set(["body"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + """ + :param string type: + :param integer request_seq: Sequence number of the corresponding request. + :param boolean success: Outcome of the request. + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). + :param string command: The command requested. + :param RunInTerminalResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. + Some predefined values exist. + """ + self.type = "response" + self.request_seq = request_seq + self.success = success + self.command = command + if body is None: + self.body = RunInTerminalResponseBody() + else: + self.body = ( + RunInTerminalResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != RunInTerminalResponseBody + else body + ) + self.seq = seq + self.message = message + self.kwargs = kwargs + + def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) + type = self.type # noqa (assign to builtin) + request_seq = self.request_seq + success = self.success + command = self.command + body = self.body + seq = self.seq + message = self.message + dct = { + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, + } + if message is not None: + dct["message"] = message + dct.update(self.kwargs) + return dct + + +@register_request("startDebugging") +@register +class StartDebuggingRequest(BaseSchema): + """ + This request is sent from the debug adapter to the client to start a new debug session of the same + type as the caller. + + This request should only be sent if the corresponding client capability + `supportsStartDebuggingRequest` is true. + + A client implementation of `startDebugging` should start a new debug session (of the same type as + the caller) in the same way that the caller's session was started. If the client supports + hierarchical debug sessions, the newly created session can be treated as a child of the caller + session. + + Note: automatically generated code. Do not edit manually. + """ + + __props__ = { + "seq": { + "type": "integer", + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", + }, + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["startDebugging"]}, + "arguments": {"type": "StartDebuggingRequestArguments"}, + } + __refs__ = set(["arguments"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + """ + :param string type: + :param string command: + :param StartDebuggingRequestArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + """ + self.type = "request" + self.command = "startDebugging" + if arguments is None: + self.arguments = StartDebuggingRequestArguments() + else: + self.arguments = ( + StartDebuggingRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StartDebuggingRequestArguments + else arguments + ) + self.seq = seq + self.kwargs = kwargs + + def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) + type = self.type # noqa (assign to builtin) + command = self.command + arguments = self.arguments + seq = self.seq + dct = { + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, + } + dct.update(self.kwargs) + return dct + + +@register +class StartDebuggingRequestArguments(BaseSchema): + """ + Arguments for `startDebugging` request. + + Note: automatically generated code. Do not edit manually. + """ + + __props__ = { + "configuration": { + "type": "object", + "additionalProperties": True, + "description": "Arguments passed to the new debug session. The arguments must only contain properties understood by the `launch` or `attach` requests of the debug adapter and they must not contain any client-specific properties (e.g. `type`) or client-specific features (e.g. substitutable 'variables').", + }, + "request": { + "type": "string", + "enum": ["launch", "attach"], + "description": "Indicates whether the new debug session should be started with a `launch` or `attach` request.", + }, + } + __refs__ = set(["configuration"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__(self, configuration, request, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + """ + :param StartDebuggingRequestArgumentsConfiguration configuration: Arguments passed to the new debug session. The arguments must only contain properties understood by the `launch` or `attach` requests of the debug adapter and they must not contain any client-specific properties (e.g. `type`) or client-specific features (e.g. substitutable 'variables'). + :param string request: Indicates whether the new debug session should be started with a `launch` or `attach` request. + """ + if configuration is None: + self.configuration = StartDebuggingRequestArgumentsConfiguration() + else: + self.configuration = ( + StartDebuggingRequestArgumentsConfiguration(update_ids_from_dap=update_ids_from_dap, **configuration) + if configuration.__class__ != StartDebuggingRequestArgumentsConfiguration + else configuration + ) + self.request = request + self.kwargs = kwargs + + def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) + configuration = self.configuration + request = self.request dct = { - 'cwd': cwd, - 'args': args, + "configuration": configuration.to_dict(update_ids_to_dap=update_ids_to_dap), + "request": request, } - if kind is not None: - dct['kind'] = kind - if title is not None: - dct['title'] = title - if env is not None: - dct['env'] = env.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_response('runInTerminal') +@register_response("startDebugging") @register -class RunInTerminalResponse(BaseSchema): +class StartDebuggingResponse(BaseSchema): """ - Response to 'runInTerminal' request. + Response to `startDebugging` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -2394,119 +2159,90 @@ class RunInTerminalResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": "object", - "properties": { - "processId": { - "type": "integer", - "description": "The process ID. The value should be less than or equal to 2147483647 (2^31-1)." - }, - "shellProcessId": { - "type": "integer", - "description": "The process ID of the terminal shell. The value should be less than or equal to 2147483647 (2^31-1)." - } - } - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } - __refs__ = set(['body']) + __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param RunInTerminalResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command - if body is None: - self.body = RunInTerminalResponseBody() - else: - self.body = RunInTerminalResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != RunInTerminalResponseBody else body self.seq = seq self.message = message + self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq success = self.success command = self.command - body = self.body seq = self.seq message = self.message + body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message + if body is not None: + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('initialize') +@register_request("initialize") @register class InitializeRequest(BaseSchema): """ - The 'initialize' request is sent as the first request from the client to the debug adapter - - in order to configure it with client capabilities and to retrieve capabilities from the debug - adapter. - - Until the debug adapter has responded to with an 'initialize' response, the client must not send any + The `initialize` request is sent as the first request from the client to the debug adapter in order + to configure it with client capabilities and to retrieve capabilities from the debug adapter. + + Until the debug adapter has responded with an `initialize` response, the client must not send any additional requests or events to the debug adapter. - + In addition the debug adapter is not allowed to send any requests or events to the client until it - has responded with an 'initialize' response. - - The 'initialize' request may only be sent once. + has responded with an `initialize` response. + + The `initialize` request may only be sent once. Note: automatically generated code. Do not edit manually. """ @@ -2514,55 +2250,46 @@ class InitializeRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "initialize" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "InitializeRequestArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["initialize"]}, + "arguments": {"type": "InitializeRequestArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param InitializeRequestArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param InitializeRequestArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'initialize' + self.type = "request" + self.command = "initialize" if arguments is None: self.arguments = InitializeRequestArguments() else: - self.arguments = InitializeRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != InitializeRequestArguments else arguments + self.arguments = ( + InitializeRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != InitializeRequestArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -2571,93 +2298,78 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class InitializeRequestArguments(BaseSchema): """ - Arguments for 'initialize' request. + Arguments for `initialize` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "clientID": { - "type": "string", - "description": "The ID of the (frontend) client using this adapter." - }, - "clientName": { - "type": "string", - "description": "The human readable name of the (frontend) client using this adapter." - }, - "adapterID": { - "type": "string", - "description": "The ID of the debug adapter." - }, - "locale": { - "type": "string", - "description": "The ISO-639 locale of the (frontend) client using this adapter, e.g. en-US or de-CH." - }, - "linesStartAt1": { - "type": "boolean", - "description": "If true all line numbers are 1-based (default)." - }, - "columnsStartAt1": { - "type": "boolean", - "description": "If true all column numbers are 1-based (default)." - }, + "clientID": {"type": "string", "description": "The ID of the client using this adapter."}, + "clientName": {"type": "string", "description": "The human-readable name of the client using this adapter."}, + "adapterID": {"type": "string", "description": "The ID of the debug adapter."}, + "locale": {"type": "string", "description": "The ISO-639 locale of the client using this adapter, e.g. en-US or de-CH."}, + "linesStartAt1": {"type": "boolean", "description": "If True all line numbers are 1-based (default)."}, + "columnsStartAt1": {"type": "boolean", "description": "If True all column numbers are 1-based (default)."}, "pathFormat": { "type": "string", - "_enum": [ - "path", - "uri" - ], - "description": "Determines in what format paths are specified. The default is 'path', which is the native format." - }, - "supportsVariableType": { - "type": "boolean", - "description": "Client supports the optional type attribute for variables." - }, - "supportsVariablePaging": { + "_enum": ["path", "uri"], + "description": "Determines in what format paths are specified. The default is `path`, which is the native format.", + }, + "supportsVariableType": {"type": "boolean", "description": "Client supports the `type` attribute for variables."}, + "supportsVariablePaging": {"type": "boolean", "description": "Client supports the paging of variables."}, + "supportsRunInTerminalRequest": {"type": "boolean", "description": "Client supports the `runInTerminal` request."}, + "supportsMemoryReferences": {"type": "boolean", "description": "Client supports memory references."}, + "supportsProgressReporting": {"type": "boolean", "description": "Client supports progress reporting."}, + "supportsInvalidatedEvent": {"type": "boolean", "description": "Client supports the `invalidated` event."}, + "supportsMemoryEvent": {"type": "boolean", "description": "Client supports the `memory` event."}, + "supportsArgsCanBeInterpretedByShell": { "type": "boolean", - "description": "Client supports the paging of variables." + "description": "Client supports the `argsCanBeInterpretedByShell` attribute on the `runInTerminal` request.", }, - "supportsRunInTerminalRequest": { - "type": "boolean", - "description": "Client supports the runInTerminal request." - }, - "supportsMemoryReferences": { - "type": "boolean", - "description": "Client supports memory references." - }, - "supportsProgressReporting": { - "type": "boolean", - "description": "Client supports progress reporting." - }, - "supportsInvalidatedEvent": { - "type": "boolean", - "description": "Client supports the invalidated event." - }, - "supportsMemoryEvent": { - "type": "boolean", - "description": "Client supports the memory event." - } + "supportsStartDebuggingRequest": {"type": "boolean", "description": "Client supports the `startDebugging` request."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, adapterID, clientID=None, clientName=None, locale=None, linesStartAt1=None, columnsStartAt1=None, pathFormat=None, supportsVariableType=None, supportsVariablePaging=None, supportsRunInTerminalRequest=None, supportsMemoryReferences=None, supportsProgressReporting=None, supportsInvalidatedEvent=None, supportsMemoryEvent=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + adapterID, + clientID=None, + clientName=None, + locale=None, + linesStartAt1=None, + columnsStartAt1=None, + pathFormat=None, + supportsVariableType=None, + supportsVariablePaging=None, + supportsRunInTerminalRequest=None, + supportsMemoryReferences=None, + supportsProgressReporting=None, + supportsInvalidatedEvent=None, + supportsMemoryEvent=None, + supportsArgsCanBeInterpretedByShell=None, + supportsStartDebuggingRequest=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string adapterID: The ID of the debug adapter. - :param string clientID: The ID of the (frontend) client using this adapter. - :param string clientName: The human readable name of the (frontend) client using this adapter. - :param string locale: The ISO-639 locale of the (frontend) client using this adapter, e.g. en-US or de-CH. + :param string clientID: The ID of the client using this adapter. + :param string clientName: The human-readable name of the client using this adapter. + :param string locale: The ISO-639 locale of the client using this adapter, e.g. en-US or de-CH. :param boolean linesStartAt1: If true all line numbers are 1-based (default). :param boolean columnsStartAt1: If true all column numbers are 1-based (default). - :param string pathFormat: Determines in what format paths are specified. The default is 'path', which is the native format. - :param boolean supportsVariableType: Client supports the optional type attribute for variables. + :param string pathFormat: Determines in what format paths are specified. The default is `path`, which is the native format. + :param boolean supportsVariableType: Client supports the `type` attribute for variables. :param boolean supportsVariablePaging: Client supports the paging of variables. - :param boolean supportsRunInTerminalRequest: Client supports the runInTerminal request. + :param boolean supportsRunInTerminalRequest: Client supports the `runInTerminal` request. :param boolean supportsMemoryReferences: Client supports memory references. :param boolean supportsProgressReporting: Client supports progress reporting. - :param boolean supportsInvalidatedEvent: Client supports the invalidated event. - :param boolean supportsMemoryEvent: Client supports the memory event. + :param boolean supportsInvalidatedEvent: Client supports the `invalidated` event. + :param boolean supportsMemoryEvent: Client supports the `memory` event. + :param boolean supportsArgsCanBeInterpretedByShell: Client supports the `argsCanBeInterpretedByShell` attribute on the `runInTerminal` request. + :param boolean supportsStartDebuggingRequest: Client supports the `startDebugging` request. """ self.adapterID = adapterID self.clientID = clientID @@ -2673,9 +2385,10 @@ def __init__(self, adapterID, clientID=None, clientName=None, locale=None, lines self.supportsProgressReporting = supportsProgressReporting self.supportsInvalidatedEvent = supportsInvalidatedEvent self.supportsMemoryEvent = supportsMemoryEvent + self.supportsArgsCanBeInterpretedByShell = supportsArgsCanBeInterpretedByShell + self.supportsStartDebuggingRequest = supportsStartDebuggingRequest self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) adapterID = self.adapterID clientID = self.clientID @@ -2691,44 +2404,50 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un supportsProgressReporting = self.supportsProgressReporting supportsInvalidatedEvent = self.supportsInvalidatedEvent supportsMemoryEvent = self.supportsMemoryEvent + supportsArgsCanBeInterpretedByShell = self.supportsArgsCanBeInterpretedByShell + supportsStartDebuggingRequest = self.supportsStartDebuggingRequest dct = { - 'adapterID': adapterID, + "adapterID": adapterID, } if clientID is not None: - dct['clientID'] = clientID + dct["clientID"] = clientID if clientName is not None: - dct['clientName'] = clientName + dct["clientName"] = clientName if locale is not None: - dct['locale'] = locale + dct["locale"] = locale if linesStartAt1 is not None: - dct['linesStartAt1'] = linesStartAt1 + dct["linesStartAt1"] = linesStartAt1 if columnsStartAt1 is not None: - dct['columnsStartAt1'] = columnsStartAt1 + dct["columnsStartAt1"] = columnsStartAt1 if pathFormat is not None: - dct['pathFormat'] = pathFormat + dct["pathFormat"] = pathFormat if supportsVariableType is not None: - dct['supportsVariableType'] = supportsVariableType + dct["supportsVariableType"] = supportsVariableType if supportsVariablePaging is not None: - dct['supportsVariablePaging'] = supportsVariablePaging + dct["supportsVariablePaging"] = supportsVariablePaging if supportsRunInTerminalRequest is not None: - dct['supportsRunInTerminalRequest'] = supportsRunInTerminalRequest + dct["supportsRunInTerminalRequest"] = supportsRunInTerminalRequest if supportsMemoryReferences is not None: - dct['supportsMemoryReferences'] = supportsMemoryReferences + dct["supportsMemoryReferences"] = supportsMemoryReferences if supportsProgressReporting is not None: - dct['supportsProgressReporting'] = supportsProgressReporting + dct["supportsProgressReporting"] = supportsProgressReporting if supportsInvalidatedEvent is not None: - dct['supportsInvalidatedEvent'] = supportsInvalidatedEvent + dct["supportsInvalidatedEvent"] = supportsInvalidatedEvent if supportsMemoryEvent is not None: - dct['supportsMemoryEvent'] = supportsMemoryEvent + dct["supportsMemoryEvent"] = supportsMemoryEvent + if supportsArgsCanBeInterpretedByShell is not None: + dct["supportsArgsCanBeInterpretedByShell"] = supportsArgsCanBeInterpretedByShell + if supportsStartDebuggingRequest is not None: + dct["supportsStartDebuggingRequest"] = supportsStartDebuggingRequest dct.update(self.kwargs) return dct -@register_response('initialize') +@register_response("initialize") @register class InitializeResponse(BaseSchema): """ - Response to 'initialize' request. + Response to `initialize` request. Note: automatically generated code. Do not edit manually. """ @@ -2736,60 +2455,42 @@ class InitializeResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, - "body": { - "description": "The capabilities of this debug adapter.", - "type": "Capabilities" - } + "body": {"description": "The capabilities of this debug adapter.", "type": "Capabilities"}, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. :param Capabilities body: The capabilities of this debug adapter. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -2798,10 +2499,9 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non if body is None: self.body = Capabilities() else: - self.body = Capabilities(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != Capabilities else body + self.body = Capabilities(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != Capabilities else body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -2811,30 +2511,31 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_request('configurationDone') +@register_request("configurationDone") @register class ConfigurationDoneRequest(BaseSchema): """ - This optional request indicates that the client has finished initialization of the debug adapter. - + This request indicates that the client has finished initialization of the debug adapter. + So it is the last request in the sequence of configuration requests (which was started by the - 'initialized' event). - - Clients should only call this request if the capability 'supportsConfigurationDoneRequest' is true. + `initialized` event). + + Clients should only call this request if the corresponding capability + `supportsConfigurationDoneRequest` is true. Note: automatically generated code. Do not edit manually. """ @@ -2842,57 +2543,48 @@ class ConfigurationDoneRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "configurationDone" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "ConfigurationDoneArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["configurationDone"]}, + "arguments": {"type": "ConfigurationDoneArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param ConfigurationDoneArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param ConfigurationDoneArguments arguments: """ - self.type = 'request' - self.command = 'configurationDone' + self.type = "request" + self.command = "configurationDone" self.seq = seq if arguments is None: self.arguments = ConfigurationDoneArguments() else: - self.arguments = ConfigurationDoneArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ConfigurationDoneArguments else arguments + self.arguments = ( + ConfigurationDoneArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ConfigurationDoneArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -2900,7 +2592,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ConfigurationDoneArguments(BaseSchema): """ - Arguments for 'configurationDone' request. + Arguments for `configurationDone` request. Note: automatically generated code. Do not edit manually. """ @@ -2908,28 +2600,24 @@ class ConfigurationDoneArguments(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct -@register_response('configurationDone') +@register_response("configurationDone") @register class ConfigurationDoneResponse(BaseSchema): """ - Response to 'configurationDone' request. This is just an acknowledgement, so no body field is + Response to `configurationDone` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. @@ -2938,68 +2626,45 @@ class ConfigurationDoneResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -3008,7 +2673,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -3018,27 +2682,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('launch') +@register_request("launch") @register class LaunchRequest(BaseSchema): """ This launch request is sent from the client to the debug adapter to start the debuggee with or - without debugging (if 'noDebug' is true). - + without debugging (if `noDebug` is true). + Since launching is debugger/runtime specific, the arguments for this request are not part of this specification. @@ -3048,55 +2712,46 @@ class LaunchRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "launch" - ] - }, - "arguments": { - "type": "LaunchRequestArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["launch"]}, + "arguments": {"type": "LaunchRequestArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param LaunchRequestArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param LaunchRequestArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'launch' + self.type = "request" + self.command = "launch" if arguments is None: self.arguments = LaunchRequestArguments() else: - self.arguments = LaunchRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != LaunchRequestArguments else arguments + self.arguments = ( + LaunchRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != LaunchRequestArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -3105,63 +2760,50 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class LaunchRequestArguments(BaseSchema): """ - Arguments for 'launch' request. Additional attributes are implementation specific. + Arguments for `launch` request. Additional attributes are implementation specific. Note: automatically generated code. Do not edit manually. """ __props__ = { - "noDebug": { - "type": "boolean", - "description": "If noDebug is true the launch request should launch the program without enabling debugging." - }, + "noDebug": {"type": "boolean", "description": "If True, the launch request should launch the program without enabling debugging."}, "__restart": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Optional data from the previous, restarted session.\nThe data is sent as the 'restart' attribute of the 'terminated' event.\nThe client should leave the data intact." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Arbitrary data from the previous, restarted session.\nThe data is sent as the `restart` attribute of the `terminated` event.\nThe client should leave the data intact.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, noDebug=None, __restart=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param boolean noDebug: If noDebug is true the launch request should launch the program without enabling debugging. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] __restart: Optional data from the previous, restarted session. - The data is sent as the 'restart' attribute of the 'terminated' event. + :param boolean noDebug: If true, the launch request should launch the program without enabling debugging. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] __restart: Arbitrary data from the previous, restarted session. + The data is sent as the `restart` attribute of the `terminated` event. The client should leave the data intact. """ self.noDebug = noDebug self.__restart = __restart self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) noDebug = self.noDebug __restart = self.__restart - dct = { - } + dct = {} if noDebug is not None: - dct['noDebug'] = noDebug + dct["noDebug"] = noDebug if __restart is not None: - dct['__restart'] = __restart + dct["__restart"] = __restart dct.update(self.kwargs) return dct -@register_response('launch') +@register_response("launch") @register class LaunchResponse(BaseSchema): """ - Response to 'launch' request. This is just an acknowledgement, so no body field is required. + Response to `launch` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -3169,68 +2811,45 @@ class LaunchResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -3239,7 +2858,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -3249,27 +2867,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('attach') +@register_request("attach") @register class AttachRequest(BaseSchema): """ - The attach request is sent from the client to the debug adapter to attach to a debuggee that is + The `attach` request is sent from the client to the debug adapter to attach to a debuggee that is already running. - + Since attaching is debugger/runtime specific, the arguments for this request are not part of this specification. @@ -3279,55 +2897,46 @@ class AttachRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "attach" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "AttachRequestArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["attach"]}, + "arguments": {"type": "AttachRequestArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param AttachRequestArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param AttachRequestArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'attach' + self.type = "request" + self.command = "attach" if arguments is None: self.arguments = AttachRequestArguments() else: - self.arguments = AttachRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != AttachRequestArguments else arguments + self.arguments = ( + AttachRequestArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != AttachRequestArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -3336,54 +2945,44 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class AttachRequestArguments(BaseSchema): """ - Arguments for 'attach' request. Additional attributes are implementation specific. + Arguments for `attach` request. Additional attributes are implementation specific. Note: automatically generated code. Do not edit manually. """ __props__ = { "__restart": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Optional data from the previous, restarted session.\nThe data is sent as the 'restart' attribute of the 'terminated' event.\nThe client should leave the data intact." + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Arbitrary data from the previous, restarted session.\nThe data is sent as the `restart` attribute of the `terminated` event.\nThe client should leave the data intact.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, __restart=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] __restart: Optional data from the previous, restarted session. - The data is sent as the 'restart' attribute of the 'terminated' event. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] __restart: Arbitrary data from the previous, restarted session. + The data is sent as the `restart` attribute of the `terminated` event. The client should leave the data intact. """ self.__restart = __restart self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) __restart = self.__restart - dct = { - } + dct = {} if __restart is not None: - dct['__restart'] = __restart + dct["__restart"] = __restart dct.update(self.kwargs) return dct -@register_response('attach') +@register_response("attach") @register class AttachResponse(BaseSchema): """ - Response to 'attach' request. This is just an acknowledgement, so no body field is required. + Response to `attach` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -3391,68 +2990,45 @@ class AttachResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -3461,7 +3037,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -3471,28 +3046,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('restart') +@register_request("restart") @register class RestartRequest(BaseSchema): """ - Restarts a debug session. Clients should only call this request if the capability - 'supportsRestartRequest' is true. - - If the capability is missing or has the value false, a typical client will emulate 'restart' by + Restarts a debug session. Clients should only call this request if the corresponding capability + `supportsRestartRequest` is true. + + If the capability is missing or has the value false, a typical client emulates `restart` by terminating the debug adapter first and then launching it anew. Note: automatically generated code. Do not edit manually. @@ -3501,57 +3076,48 @@ class RestartRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "restart" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "RestartArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["restart"]}, + "arguments": {"type": "RestartArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param RestartArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param RestartArguments arguments: """ - self.type = 'request' - self.command = 'restart' + self.type = "request" + self.command = "restart" self.seq = seq if arguments is None: self.arguments = RestartArguments() else: - self.arguments = RestartArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != RestartArguments else arguments + self.arguments = ( + RestartArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != RestartArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -3559,51 +3125,42 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class RestartArguments(BaseSchema): """ - Arguments for 'restart' request. + Arguments for `restart` request. Note: automatically generated code. Do not edit manually. """ __props__ = { "arguments": { - "oneOf": [ - { - "$ref": "#/definitions/LaunchRequestArguments" - }, - { - "$ref": "#/definitions/AttachRequestArguments" - } - ], - "description": "The latest version of the 'launch' or 'attach' configuration." + "oneOf": [{"$ref": "#/definitions/LaunchRequestArguments"}, {"$ref": "#/definitions/AttachRequestArguments"}], + "description": "The latest version of the `launch` or `attach` configuration.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param TypeNA arguments: The latest version of the 'launch' or 'attach' configuration. + :param TypeNA arguments: The latest version of the `launch` or `attach` configuration. """ self.arguments = arguments self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) arguments = self.arguments - dct = { - } + dct = {} if arguments is not None: - dct['arguments'] = arguments + dct["arguments"] = arguments dct.update(self.kwargs) return dct -@register_response('restart') +@register_response("restart") @register class RestartResponse(BaseSchema): """ - Response to 'restart' request. This is just an acknowledgement, so no body field is required. + Response to `restart` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -3611,68 +3168,45 @@ class RestartResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -3681,7 +3215,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -3691,36 +3224,34 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('disconnect') +@register_request("disconnect") @register class DisconnectRequest(BaseSchema): """ - The 'disconnect' request is sent from the client to the debug adapter in order to stop debugging. - - It asks the debug adapter to disconnect from the debuggee and to terminate the debug adapter. - - If the debuggee has been started with the 'launch' request, the 'disconnect' request terminates the - debuggee. - - If the 'attach' request was used to connect to the debuggee, 'disconnect' does not terminate the - debuggee. - - This behavior can be controlled with the 'terminateDebuggee' argument (if supported by the debug - adapter). + The `disconnect` request asks the debug adapter to disconnect from the debuggee (thus ending the + debug session) and then to shut down itself (the debug adapter). + + In addition, the debug adapter must terminate the debuggee if it was started with the `launch` + request. If an `attach` request was used to connect to the debuggee, then the debug adapter must not + terminate the debuggee. + + This implicit behavior of when to terminate the debuggee can be overridden with the + `terminateDebuggee` argument (which is only supported by a debug adapter if the corresponding + capability `supportTerminateDebuggee` is true). Note: automatically generated code. Do not edit manually. """ @@ -3728,57 +3259,48 @@ class DisconnectRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "disconnect" - ] - }, - "arguments": { - "type": "DisconnectArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["disconnect"]}, + "arguments": {"type": "DisconnectArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param DisconnectArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param DisconnectArguments arguments: """ - self.type = 'request' - self.command = 'disconnect' + self.type = "request" + self.command = "disconnect" self.seq = seq if arguments is None: self.arguments = DisconnectArguments() else: - self.arguments = DisconnectArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != DisconnectArguments else arguments + self.arguments = ( + DisconnectArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != DisconnectArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -3786,7 +3308,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class DisconnectArguments(BaseSchema): """ - Arguments for 'disconnect' request. + Arguments for `disconnect` request. Note: automatically generated code. Do not edit manually. """ @@ -3794,58 +3316,56 @@ class DisconnectArguments(BaseSchema): __props__ = { "restart": { "type": "boolean", - "description": "A value of true indicates that this 'disconnect' request is part of a restart sequence." + "description": "A value of True indicates that this `disconnect` request is part of a restart sequence.", }, "terminateDebuggee": { "type": "boolean", - "description": "Indicates whether the debuggee should be terminated when the debugger is disconnected.\nIf unspecified, the debug adapter is free to do whatever it thinks is best.\nThe attribute is only honored by a debug adapter if the capability 'supportTerminateDebuggee' is true." + "description": "Indicates whether the debuggee should be terminated when the debugger is disconnected.\nIf unspecified, the debug adapter is free to do whatever it thinks is best.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportTerminateDebuggee` is True.", }, "suspendDebuggee": { "type": "boolean", - "description": "Indicates whether the debuggee should stay suspended when the debugger is disconnected.\nIf unspecified, the debuggee should resume execution.\nThe attribute is only honored by a debug adapter if the capability 'supportSuspendDebuggee' is true." - } + "description": "Indicates whether the debuggee should stay suspended when the debugger is disconnected.\nIf unspecified, the debuggee should resume execution.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportSuspendDebuggee` is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, restart=None, terminateDebuggee=None, suspendDebuggee=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param boolean restart: A value of true indicates that this 'disconnect' request is part of a restart sequence. + :param boolean restart: A value of true indicates that this `disconnect` request is part of a restart sequence. :param boolean terminateDebuggee: Indicates whether the debuggee should be terminated when the debugger is disconnected. If unspecified, the debug adapter is free to do whatever it thinks is best. - The attribute is only honored by a debug adapter if the capability 'supportTerminateDebuggee' is true. + The attribute is only honored by a debug adapter if the corresponding capability `supportTerminateDebuggee` is true. :param boolean suspendDebuggee: Indicates whether the debuggee should stay suspended when the debugger is disconnected. If unspecified, the debuggee should resume execution. - The attribute is only honored by a debug adapter if the capability 'supportSuspendDebuggee' is true. + The attribute is only honored by a debug adapter if the corresponding capability `supportSuspendDebuggee` is true. """ self.restart = restart self.terminateDebuggee = terminateDebuggee self.suspendDebuggee = suspendDebuggee self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) restart = self.restart terminateDebuggee = self.terminateDebuggee suspendDebuggee = self.suspendDebuggee - dct = { - } + dct = {} if restart is not None: - dct['restart'] = restart + dct["restart"] = restart if terminateDebuggee is not None: - dct['terminateDebuggee'] = terminateDebuggee + dct["terminateDebuggee"] = terminateDebuggee if suspendDebuggee is not None: - dct['suspendDebuggee'] = suspendDebuggee + dct["suspendDebuggee"] = suspendDebuggee dct.update(self.kwargs) return dct -@register_response('disconnect') +@register_response("disconnect") @register class DisconnectResponse(BaseSchema): """ - Response to 'disconnect' request. This is just an acknowledgement, so no body field is required. + Response to `disconnect` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -3853,68 +3373,45 @@ class DisconnectResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -3923,7 +3420,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -3933,28 +3429,38 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('terminate') +@register_request("terminate") @register class TerminateRequest(BaseSchema): """ - The 'terminate' request is sent from the client to the debug adapter in order to give the debuggee a - chance for terminating itself. - - Clients should only call this request if the capability 'supportsTerminateRequest' is true. + The `terminate` request is sent from the client to the debug adapter in order to shut down the + debuggee gracefully. Clients should only call this request if the capability + `supportsTerminateRequest` is true. + + Typically a debug adapter implements `terminate` by sending a software signal which the debuggee + intercepts in order to clean things up properly before terminating itself. + + Please note that this request does not directly affect the state of the debug session: if the + debuggee decides to veto the graceful shutdown for any reason by not terminating itself, then the + debug session just continues. + + Clients can surface the `terminate` request as an explicit command or they can integrate it into a + two stage Stop command that first sends `terminate` to request a graceful shutdown, and if that + fails uses `disconnect` for a forceful shutdown. Note: automatically generated code. Do not edit manually. """ @@ -3962,57 +3468,48 @@ class TerminateRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "terminate" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "TerminateArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["terminate"]}, + "arguments": {"type": "TerminateArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param TerminateArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param TerminateArguments arguments: """ - self.type = 'request' - self.command = 'terminate' + self.type = "request" + self.command = "terminate" self.seq = seq if arguments is None: self.arguments = TerminateArguments() else: - self.arguments = TerminateArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != TerminateArguments else arguments + self.arguments = ( + TerminateArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != TerminateArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -4020,7 +3517,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class TerminateArguments(BaseSchema): """ - Arguments for 'terminate' request. + Arguments for `terminate` request. Note: automatically generated code. Do not edit manually. """ @@ -4028,36 +3525,34 @@ class TerminateArguments(BaseSchema): __props__ = { "restart": { "type": "boolean", - "description": "A value of true indicates that this 'terminate' request is part of a restart sequence." + "description": "A value of True indicates that this `terminate` request is part of a restart sequence.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, restart=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param boolean restart: A value of true indicates that this 'terminate' request is part of a restart sequence. + :param boolean restart: A value of true indicates that this `terminate` request is part of a restart sequence. """ self.restart = restart self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) restart = self.restart - dct = { - } + dct = {} if restart is not None: - dct['restart'] = restart + dct["restart"] = restart dct.update(self.kwargs) return dct -@register_response('terminate') +@register_response("terminate") @register class TerminateResponse(BaseSchema): """ - Response to 'terminate' request. This is just an acknowledgement, so no body field is required. + Response to `terminate` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -4065,68 +3560,45 @@ class TerminateResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -4135,7 +3607,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -4145,29 +3616,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('breakpointLocations') +@register_request("breakpointLocations") @register class BreakpointLocationsRequest(BaseSchema): """ - The 'breakpointLocations' request returns all possible locations for source breakpoints in a given + The `breakpointLocations` request returns all possible locations for source breakpoints in a given range. - - Clients should only call this request if the capability 'supportsBreakpointLocationsRequest' is - true. + + Clients should only call this request if the corresponding capability + `supportsBreakpointLocationsRequest` is true. Note: automatically generated code. Do not edit manually. """ @@ -4175,57 +3646,48 @@ class BreakpointLocationsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "breakpointLocations" - ] - }, - "arguments": { - "type": "BreakpointLocationsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["breakpointLocations"]}, + "arguments": {"type": "BreakpointLocationsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param BreakpointLocationsArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param BreakpointLocationsArguments arguments: """ - self.type = 'request' - self.command = 'breakpointLocations' + self.type = "request" + self.command = "breakpointLocations" self.seq = seq if arguments is None: self.arguments = BreakpointLocationsArguments() else: - self.arguments = BreakpointLocationsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != BreakpointLocationsArguments else arguments + self.arguments = ( + BreakpointLocationsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != BreakpointLocationsArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -4233,56 +3695,55 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class BreakpointLocationsArguments(BaseSchema): """ - Arguments for 'breakpointLocations' request. + Arguments for `breakpointLocations` request. Note: automatically generated code. Do not edit manually. """ __props__ = { "source": { - "description": "The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified.", - "type": "Source" + "description": "The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified.", + "type": "Source", }, "line": { "type": "integer", - "description": "Start line of range to search possible breakpoint locations in. If only the line is specified, the request returns all possible locations in that line." + "description": "Start line of range to search possible breakpoint locations in. If only the line is specified, the request returns all possible locations in that line.", }, "column": { "type": "integer", - "description": "Optional start column of range to search possible breakpoint locations in. If no start column is given, the first column in the start line is assumed." + "description": "Start position within `line` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no column is given, the first position in the start line is assumed.", }, "endLine": { "type": "integer", - "description": "Optional end line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line." + "description": "End line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line.", }, "endColumn": { "type": "integer", - "description": "Optional end column of range to search possible breakpoint locations in. If no end column is given, then it is assumed to be in the last column of the end line." - } + "description": "End position within `endLine` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no end column is given, the last position in the end line is assumed.", + }, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, source, line, column=None, endLine=None, endColumn=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param Source source: The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified. + :param Source source: The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified. :param integer line: Start line of range to search possible breakpoint locations in. If only the line is specified, the request returns all possible locations in that line. - :param integer column: Optional start column of range to search possible breakpoint locations in. If no start column is given, the first column in the start line is assumed. - :param integer endLine: Optional end line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line. - :param integer endColumn: Optional end column of range to search possible breakpoint locations in. If no end column is given, then it is assumed to be in the last column of the end line. + :param integer column: Start position within `line` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no column is given, the first position in the start line is assumed. + :param integer endLine: End line of range to search possible breakpoint locations in. If no end line is given, then the end line is assumed to be the start line. + :param integer endColumn: End position within `endLine` to search possible breakpoint locations in. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no end column is given, the last position in the end line is assumed. """ if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.line = line self.column = column self.endLine = endLine self.endColumn = endColumn self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) source = self.source line = self.line @@ -4290,25 +3751,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un endLine = self.endLine endColumn = self.endColumn dct = { - 'source': source.to_dict(update_ids_to_dap=update_ids_to_dap), - 'line': line, + "source": source.to_dict(update_ids_to_dap=update_ids_to_dap), + "line": line, } if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn dct.update(self.kwargs) return dct -@register_response('breakpointLocations') +@register_response("breakpointLocations") @register class BreakpointLocationsResponse(BaseSchema): """ - Response to 'breakpointLocations' request. - + Response to `breakpointLocations` request. + Contains possible locations for source breakpoints. Note: automatically generated code. Do not edit manually. @@ -4317,83 +3778,67 @@ class BreakpointLocationsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/BreakpointLocation" - }, - "description": "Sorted set of possible breakpoint locations." + "items": {"$ref": "#/definitions/BreakpointLocation"}, + "description": "Sorted set of possible breakpoint locations.", } }, - "required": [ - "breakpoints" - ] - } + "required": ["breakpoints"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param BreakpointLocationsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param BreakpointLocationsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = BreakpointLocationsResponseBody() else: - self.body = BreakpointLocationsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != BreakpointLocationsResponseBody else body + self.body = ( + BreakpointLocationsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != BreakpointLocationsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -4403,28 +3848,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setBreakpoints') +@register_request("setBreakpoints") @register class SetBreakpointsRequest(BaseSchema): """ Sets multiple breakpoints for a single source and clears all previous breakpoints in that source. - + To clear all breakpoint for a source, specify an empty array. - - When a breakpoint is hit, a 'stopped' event (with reason 'breakpoint') is generated. + + When a breakpoint is hit, a `stopped` event (with reason `breakpoint`) is generated. Note: automatically generated code. Do not edit manually. """ @@ -4432,55 +3877,46 @@ class SetBreakpointsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setBreakpoints" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetBreakpointsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setBreakpoints"]}, + "arguments": {"type": "SetBreakpointsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetBreakpointsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetBreakpointsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setBreakpoints' + self.type = "request" + self.command = "setBreakpoints" if arguments is None: self.arguments = SetBreakpointsArguments() else: - self.arguments = SetBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetBreakpointsArguments else arguments + self.arguments = ( + SetBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetBreakpointsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -4489,42 +3925,34 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetBreakpointsArguments(BaseSchema): """ - Arguments for 'setBreakpoints' request. + Arguments for `setBreakpoints` request. Note: automatically generated code. Do not edit manually. """ __props__ = { "source": { - "description": "The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified.", - "type": "Source" + "description": "The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified.", + "type": "Source", }, "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/SourceBreakpoint" - }, - "description": "The code locations of the breakpoints." - }, - "lines": { - "type": "array", - "items": { - "type": "integer" - }, - "description": "Deprecated: The code locations of the breakpoints." + "items": {"$ref": "#/definitions/SourceBreakpoint"}, + "description": "The code locations of the breakpoints.", }, + "lines": {"type": "array", "items": {"type": "integer"}, "description": "Deprecated: The code locations of the breakpoints."}, "sourceModified": { "type": "boolean", - "description": "A value of true indicates that the underlying source has been modified which results in new breakpoint locations." - } + "description": "A value of True indicates that the underlying source has been modified which results in new breakpoint locations.", + }, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, source, breakpoints=None, lines=None, sourceModified=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param Source source: The source location of the breakpoints; either 'source.path' or 'source.reference' must be specified. + :param Source source: The source location of the breakpoints; either `source.path` or `source.sourceReference` must be specified. :param array breakpoints: The code locations of the breakpoints. :param array lines: Deprecated: The code locations of the breakpoints. :param boolean sourceModified: A value of true indicates that the underlying source has been modified which results in new breakpoint locations. @@ -4532,7 +3960,7 @@ def __init__(self, source, breakpoints=None, lines=None, sourceModified=None, up if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: for o in self.breakpoints: @@ -4541,7 +3969,6 @@ def __init__(self, source, breakpoints=None, lines=None, sourceModified=None, up self.sourceModified = sourceModified self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) source = self.source breakpoints = self.breakpoints @@ -4552,31 +3979,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un lines = [x.to_dict() for x in lines] sourceModified = self.sourceModified dct = { - 'source': source.to_dict(update_ids_to_dap=update_ids_to_dap), + "source": source.to_dict(update_ids_to_dap=update_ids_to_dap), } if breakpoints is not None: - dct['breakpoints'] = [SourceBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints + dct["breakpoints"] = ( + [SourceBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints + ) if lines is not None: - dct['lines'] = lines + dct["lines"] = lines if sourceModified is not None: - dct['sourceModified'] = sourceModified + dct["sourceModified"] = sourceModified dct.update(self.kwargs) return dct -@register_response('setBreakpoints') +@register_response("setBreakpoints") @register class SetBreakpointsResponse(BaseSchema): """ - Response to 'setBreakpoints' request. - + Response to `setBreakpoints` request. + Returned is information about each breakpoint created by this request. - + This includes the actual code location and whether the breakpoint could be verified. - - The breakpoints returned are in the same order as the elements of the 'breakpoints' - - (or the deprecated 'lines') array in the arguments. + + The breakpoints returned are in the same order as the elements of the `breakpoints` + + (or the deprecated `lines`) array in the arguments. Note: automatically generated code. Do not edit manually. """ @@ -4584,83 +4013,67 @@ class SetBreakpointsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the 'breakpoints' (or the deprecated 'lines') array in the arguments." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the `breakpoints` (or the deprecated `lines`) array in the arguments.", } }, - "required": [ - "breakpoints" - ] - } + "required": ["breakpoints"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetBreakpointsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetBreakpointsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetBreakpointsResponseBody() else: - self.body = SetBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetBreakpointsResponseBody else body + self.body = ( + SetBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetBreakpointsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -4670,31 +4083,32 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setFunctionBreakpoints') +@register_request("setFunctionBreakpoints") @register class SetFunctionBreakpointsRequest(BaseSchema): """ Replaces all existing function breakpoints with new function breakpoints. - + To clear all function breakpoints, specify an empty array. - - When a function breakpoint is hit, a 'stopped' event (with reason 'function breakpoint') is + + When a function breakpoint is hit, a `stopped` event (with reason `function breakpoint`) is generated. - - Clients should only call this request if the capability 'supportsFunctionBreakpoints' is true. + + Clients should only call this request if the corresponding capability `supportsFunctionBreakpoints` + is true. Note: automatically generated code. Do not edit manually. """ @@ -4702,55 +4116,46 @@ class SetFunctionBreakpointsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "setFunctionBreakpoints" - ] - }, - "arguments": { - "type": "SetFunctionBreakpointsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setFunctionBreakpoints"]}, + "arguments": {"type": "SetFunctionBreakpointsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetFunctionBreakpointsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetFunctionBreakpointsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setFunctionBreakpoints' + self.type = "request" + self.command = "setFunctionBreakpoints" if arguments is None: self.arguments = SetFunctionBreakpointsArguments() else: - self.arguments = SetFunctionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetFunctionBreakpointsArguments else arguments + self.arguments = ( + SetFunctionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetFunctionBreakpointsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -4759,7 +4164,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetFunctionBreakpointsArguments(BaseSchema): """ - Arguments for 'setFunctionBreakpoints' request. + Arguments for `setFunctionBreakpoints` request. Note: automatically generated code. Do not edit manually. """ @@ -4767,15 +4172,13 @@ class SetFunctionBreakpointsArguments(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/FunctionBreakpoint" - }, - "description": "The function names of the breakpoints." + "items": {"$ref": "#/definitions/FunctionBreakpoint"}, + "description": "The function names of the breakpoints.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -4787,24 +4190,25 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u FunctionBreakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [FunctionBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [FunctionBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct -@register_response('setFunctionBreakpoints') +@register_response("setFunctionBreakpoints") @register class SetFunctionBreakpointsResponse(BaseSchema): """ - Response to 'setFunctionBreakpoints' request. - + Response to `setFunctionBreakpoints` request. + Returned is information about each breakpoint created by this request. Note: automatically generated code. Do not edit manually. @@ -4813,83 +4217,67 @@ class SetFunctionBreakpointsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array.", } }, - "required": [ - "breakpoints" - ] - } + "required": ["breakpoints"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetFunctionBreakpointsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetFunctionBreakpointsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetFunctionBreakpointsResponseBody() else: - self.body = SetFunctionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetFunctionBreakpointsResponseBody else body + self.body = ( + SetFunctionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetFunctionBreakpointsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -4899,29 +4287,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setExceptionBreakpoints') +@register_request("setExceptionBreakpoints") @register class SetExceptionBreakpointsRequest(BaseSchema): """ - The request configures the debuggers response to thrown exceptions. - - If an exception is configured to break, a 'stopped' event is fired (with reason 'exception'). - - Clients should only call this request if the capability 'exceptionBreakpointFilters' returns one or - more filters. + The request configures the debugger's response to thrown exceptions. + + If an exception is configured to break, a `stopped` event is fired (with reason `exception`). + + Clients should only call this request if the corresponding capability `exceptionBreakpointFilters` + returns one or more filters. Note: automatically generated code. Do not edit manually. """ @@ -4929,55 +4317,46 @@ class SetExceptionBreakpointsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setExceptionBreakpoints" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetExceptionBreakpointsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setExceptionBreakpoints"]}, + "arguments": {"type": "SetExceptionBreakpointsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetExceptionBreakpointsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetExceptionBreakpointsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setExceptionBreakpoints' + self.type = "request" + self.command = "setExceptionBreakpoints" if arguments is None: self.arguments = SetExceptionBreakpointsArguments() else: - self.arguments = SetExceptionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetExceptionBreakpointsArguments else arguments + self.arguments = ( + SetExceptionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetExceptionBreakpointsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -4986,7 +4365,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetExceptionBreakpointsArguments(BaseSchema): """ - Arguments for 'setExceptionBreakpoints' request. + Arguments for `setExceptionBreakpoints` request. Note: automatically generated code. Do not edit manually. """ @@ -4994,36 +4373,30 @@ class SetExceptionBreakpointsArguments(BaseSchema): __props__ = { "filters": { "type": "array", - "items": { - "type": "string" - }, - "description": "Set of exception filters specified by their ID. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. The 'filter' and 'filterOptions' sets are additive." + "items": {"type": "string"}, + "description": "Set of exception filters specified by their ID. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. The `filter` and `filterOptions` sets are additive.", }, "filterOptions": { "type": "array", - "items": { - "$ref": "#/definitions/ExceptionFilterOptions" - }, - "description": "Set of exception filters and their options. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. This attribute is only honored by a debug adapter if the capability 'supportsExceptionFilterOptions' is true. The 'filter' and 'filterOptions' sets are additive." + "items": {"$ref": "#/definitions/ExceptionFilterOptions"}, + "description": "Set of exception filters and their options. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. This attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionFilterOptions` is True. The `filter` and `filterOptions` sets are additive.", }, "exceptionOptions": { "type": "array", - "items": { - "$ref": "#/definitions/ExceptionOptions" - }, - "description": "Configuration options for selected exceptions.\nThe attribute is only honored by a debug adapter if the capability 'supportsExceptionOptions' is true." - } + "items": {"$ref": "#/definitions/ExceptionOptions"}, + "description": "Configuration options for selected exceptions.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionOptions` is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, filters, filterOptions=None, exceptionOptions=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array filters: Set of exception filters specified by their ID. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. The 'filter' and 'filterOptions' sets are additive. - :param array filterOptions: Set of exception filters and their options. The set of all possible exception filters is defined by the 'exceptionBreakpointFilters' capability. This attribute is only honored by a debug adapter if the capability 'supportsExceptionFilterOptions' is true. The 'filter' and 'filterOptions' sets are additive. + :param array filters: Set of exception filters specified by their ID. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. The `filter` and `filterOptions` sets are additive. + :param array filterOptions: Set of exception filters and their options. The set of all possible exception filters is defined by the `exceptionBreakpointFilters` capability. This attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionFilterOptions` is true. The `filter` and `filterOptions` sets are additive. :param array exceptionOptions: Configuration options for selected exceptions. - The attribute is only honored by a debug adapter if the capability 'supportsExceptionOptions' is true. + The attribute is only honored by a debug adapter if the corresponding capability `supportsExceptionOptions` is true. """ self.filters = filters self.filterOptions = filterOptions @@ -5036,7 +4409,6 @@ def __init__(self, filters, filterOptions=None, exceptionOptions=None, update_id ExceptionOptions.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) filters = self.filters if filters and hasattr(filters[0], "to_dict"): @@ -5048,36 +4420,43 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if exceptionOptions and hasattr(exceptionOptions[0], "to_dict"): exceptionOptions = [x.to_dict() for x in exceptionOptions] dct = { - 'filters': filters, + "filters": filters, } if filterOptions is not None: - dct['filterOptions'] = [ExceptionFilterOptions.update_dict_ids_to_dap(o) for o in filterOptions] if (update_ids_to_dap and filterOptions) else filterOptions + dct["filterOptions"] = ( + [ExceptionFilterOptions.update_dict_ids_to_dap(o) for o in filterOptions] + if (update_ids_to_dap and filterOptions) + else filterOptions + ) if exceptionOptions is not None: - dct['exceptionOptions'] = [ExceptionOptions.update_dict_ids_to_dap(o) for o in exceptionOptions] if (update_ids_to_dap and exceptionOptions) else exceptionOptions + dct["exceptionOptions"] = ( + [ExceptionOptions.update_dict_ids_to_dap(o) for o in exceptionOptions] + if (update_ids_to_dap and exceptionOptions) + else exceptionOptions + ) dct.update(self.kwargs) return dct -@register_response('setExceptionBreakpoints') +@register_response("setExceptionBreakpoints") @register class SetExceptionBreakpointsResponse(BaseSchema): """ - Response to 'setExceptionBreakpoints' request. - - The response contains an array of Breakpoint objects with information about each exception - breakpoint or filter. The Breakpoint objects are in the same order as the elements of the 'filters', - 'filterOptions', 'exceptionOptions' arrays given as arguments. If both 'filters' and 'filterOptions' - are given, the returned array must start with 'filters' information first, followed by - 'filterOptions' information. - - The mandatory 'verified' property of a Breakpoint object signals whether the exception breakpoint or - filter could be successfully created and whether the optional condition or hit count expressions are - valid. In case of an error the 'message' property explains the problem. An optional 'id' property - can be used to introduce a unique ID for the exception breakpoint or filter so that it can be - updated subsequently by sending breakpoint events. - - For backward compatibility both the 'breakpoints' array and the enclosing 'body' are optional. If - these elements are missing a client will not be able to show problems for individual exception + Response to `setExceptionBreakpoints` request. + + The response contains an array of `Breakpoint` objects with information about each exception + breakpoint or filter. The `Breakpoint` objects are in the same order as the elements of the + `filters`, `filterOptions`, `exceptionOptions` arrays given as arguments. If both `filters` and + `filterOptions` are given, the returned array must start with `filters` information first, followed + by `filterOptions` information. + + The `verified` property of a `Breakpoint` object signals whether the exception breakpoint or filter + could be successfully created and whether the condition is valid. In case of an error the `message` + property explains the problem. The `id` property can be used to introduce a unique ID for the + exception breakpoint or filter so that it can be updated subsequently by sending breakpoint events. + + For backward compatibility both the `breakpoints` array and the enclosing `body` are optional. If + these elements are missing a client is not able to show problems for individual exception breakpoints or filters. Note: automatically generated code. Do not edit manually. @@ -5086,68 +4465,51 @@ class SetExceptionBreakpointsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the 'filters', 'filterOptions', 'exceptionOptions' arrays in the arguments. If both 'filters' and 'filterOptions' are given, the returned array must start with 'filters' information first, followed by 'filterOptions' information." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays in the arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information.", } - } - } + }, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param SetExceptionBreakpointsResponseBody body: + :param SetExceptionBreakpointsResponseBody body: """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -5156,10 +4518,13 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non if body is None: self.body = SetExceptionBreakpointsResponseBody() else: - self.body = SetExceptionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetExceptionBreakpointsResponseBody else body + self.body = ( + SetExceptionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetExceptionBreakpointsResponseBody + else body + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -5169,27 +4534,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_request('dataBreakpointInfo') +@register_request("dataBreakpointInfo") @register class DataBreakpointInfoRequest(BaseSchema): """ Obtains information on a possible data breakpoint that could be set on an expression or variable. - - Clients should only call this request if the capability 'supportsDataBreakpoints' is true. + + Clients should only call this request if the corresponding capability `supportsDataBreakpoints` is + true. Note: automatically generated code. Do not edit manually. """ @@ -5197,55 +4563,46 @@ class DataBreakpointInfoRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "dataBreakpointInfo" - ] - }, - "arguments": { - "type": "DataBreakpointInfoArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["dataBreakpointInfo"]}, + "arguments": {"type": "DataBreakpointInfoArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param DataBreakpointInfoArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param DataBreakpointInfoArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'dataBreakpointInfo' + self.type = "request" + self.command = "dataBreakpointInfo" if arguments is None: self.arguments = DataBreakpointInfoArguments() else: - self.arguments = DataBreakpointInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != DataBreakpointInfoArguments else arguments + self.arguments = ( + DataBreakpointInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != DataBreakpointInfoArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -5254,7 +4611,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class DataBreakpointInfoArguments(BaseSchema): """ - Arguments for 'dataBreakpointInfo' request. + Arguments for `dataBreakpointInfo` request. Note: automatically generated code. Do not edit manually. """ @@ -5262,62 +4619,77 @@ class DataBreakpointInfoArguments(BaseSchema): __props__ = { "variablesReference": { "type": "integer", - "description": "Reference to the Variable container if the data breakpoint is requested for a child of the container." + "description": "Reference to the variable container if the data breakpoint is requested for a child of the container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details.", }, "name": { "type": "string", - "description": "The name of the Variable's child to obtain data breakpoint information for.\nIf variablesReference isn't provided, this can be an expression." - } + "description": "The name of the variable's child to obtain data breakpoint information for.\nIf `variablesReference` isn't specified, this can be an expression.", + }, + "frameId": { + "type": "integer", + "description": "When `name` is an expression, evaluate it in the scope of this stack frame. If not specified, the expression is evaluated in the global scope. When `variablesReference` is specified, this property has no effect.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, name, variablesReference=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__(self, name, variablesReference=None, frameId=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string name: The name of the Variable's child to obtain data breakpoint information for. - If variablesReference isn't provided, this can be an expression. - :param integer variablesReference: Reference to the Variable container if the data breakpoint is requested for a child of the container. + :param string name: The name of the variable's child to obtain data breakpoint information for. + If `variablesReference` isn't specified, this can be an expression. + :param integer variablesReference: Reference to the variable container if the data breakpoint is requested for a child of the container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details. + :param integer frameId: When `name` is an expression, evaluate it in the scope of this stack frame. If not specified, the expression is evaluated in the global scope. When `variablesReference` is specified, this property has no effect. """ self.name = name self.variablesReference = variablesReference + self.frameId = frameId if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) + self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name variablesReference = self.variablesReference + frameId = self.frameId if update_ids_to_dap: if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) + if frameId is not None: + frameId = self._translate_id_to_dap(frameId) dct = { - 'name': name, + "name": name, } if variablesReference is not None: - dct['variablesReference'] = variablesReference + dct["variablesReference"] = variablesReference + if frameId is not None: + dct["frameId"] = frameId dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('dataBreakpointInfo') +@register_response("dataBreakpointInfo") @register class DataBreakpointInfoResponse(BaseSchema): """ - Response to 'dataBreakpointInfo' request. + Response to `dataBreakpointInfo` request. Note: automatically generated code. Do not edit manually. """ @@ -5325,99 +4697,79 @@ class DataBreakpointInfoResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "dataId": { - "type": [ - "string", - "null" - ], - "description": "An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available." + "type": ["string", "null"], + "description": "An identifier for the data on which a data breakpoint can be registered with the `setDataBreakpoints` request or null if no data breakpoint is available. If a `variablesReference` or `frameId` is passed, the `dataId` is valid in the current suspended state, otherwise it's valid indefinitely. See 'Lifetime of Object References' in the Overview section for details. Breakpoints set using the `dataId` in the `setDataBreakpoints` request may outlive the lifetime of the associated `dataId`.", }, "description": { "type": "string", - "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available." + "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available.", }, "accessTypes": { "type": "array", - "items": { - "$ref": "#/definitions/DataBreakpointAccessType" - }, - "description": "Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information." + "items": {"$ref": "#/definitions/DataBreakpointAccessType"}, + "description": "Attribute lists the available access types for a potential data breakpoint. A UI client could surface this information.", }, "canPersist": { "type": "boolean", - "description": "Optional attribute indicating that a potential data breakpoint could be persisted across sessions." - } + "description": "Attribute indicates that a potential data breakpoint could be persisted across sessions.", + }, }, - "required": [ - "dataId", - "description" - ] - } + "required": ["dataId", "description"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param DataBreakpointInfoResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param DataBreakpointInfoResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = DataBreakpointInfoResponseBody() else: - self.body = DataBreakpointInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != DataBreakpointInfoResponseBody else body + self.body = ( + DataBreakpointInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != DataBreakpointInfoResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -5427,30 +4779,31 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setDataBreakpoints') +@register_request("setDataBreakpoints") @register class SetDataBreakpointsRequest(BaseSchema): """ Replaces all existing data breakpoints with new data breakpoints. - + To clear all data breakpoints, specify an empty array. - - When a data breakpoint is hit, a 'stopped' event (with reason 'data breakpoint') is generated. - - Clients should only call this request if the capability 'supportsDataBreakpoints' is true. + + When a data breakpoint is hit, a `stopped` event (with reason `data breakpoint`) is generated. + + Clients should only call this request if the corresponding capability `supportsDataBreakpoints` is + true. Note: automatically generated code. Do not edit manually. """ @@ -5458,55 +4811,46 @@ class SetDataBreakpointsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setDataBreakpoints" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetDataBreakpointsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setDataBreakpoints"]}, + "arguments": {"type": "SetDataBreakpointsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetDataBreakpointsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetDataBreakpointsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setDataBreakpoints' + self.type = "request" + self.command = "setDataBreakpoints" if arguments is None: self.arguments = SetDataBreakpointsArguments() else: - self.arguments = SetDataBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetDataBreakpointsArguments else arguments + self.arguments = ( + SetDataBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetDataBreakpointsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -5515,7 +4859,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetDataBreakpointsArguments(BaseSchema): """ - Arguments for 'setDataBreakpoints' request. + Arguments for `setDataBreakpoints` request. Note: automatically generated code. Do not edit manually. """ @@ -5523,15 +4867,13 @@ class SetDataBreakpointsArguments(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/DataBreakpoint" - }, - "description": "The contents of this array replaces all existing data breakpoints. An empty array clears all data breakpoints." + "items": {"$ref": "#/definitions/DataBreakpoint"}, + "description": "The contents of this array replaces all existing data breakpoints. An empty array clears all data breakpoints.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -5543,24 +4885,25 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u DataBreakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [DataBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [DataBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct -@register_response('setDataBreakpoints') +@register_response("setDataBreakpoints") @register class SetDataBreakpointsResponse(BaseSchema): """ - Response to 'setDataBreakpoints' request. - + Response to `setDataBreakpoints` request. + Returned is information about each breakpoint created by this request. Note: automatically generated code. Do not edit manually. @@ -5569,83 +4912,67 @@ class SetDataBreakpointsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument `breakpoints` array.", } }, - "required": [ - "breakpoints" - ] - } + "required": ["breakpoints"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetDataBreakpointsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetDataBreakpointsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetDataBreakpointsResponseBody() else: - self.body = SetDataBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetDataBreakpointsResponseBody else body + self.body = ( + SetDataBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetDataBreakpointsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -5655,32 +4982,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setInstructionBreakpoints') +@register_request("setInstructionBreakpoints") @register class SetInstructionBreakpointsRequest(BaseSchema): """ Replaces all existing instruction breakpoints. Typically, instruction breakpoints would be set from - a diassembly window. - + a disassembly window. + To clear all instruction breakpoints, specify an empty array. - - When an instruction breakpoint is hit, a 'stopped' event (with reason 'instruction breakpoint') is + + When an instruction breakpoint is hit, a `stopped` event (with reason `instruction breakpoint`) is generated. - - Clients should only call this request if the capability 'supportsInstructionBreakpoints' is true. + + Clients should only call this request if the corresponding capability + `supportsInstructionBreakpoints` is true. Note: automatically generated code. Do not edit manually. """ @@ -5688,55 +5016,46 @@ class SetInstructionBreakpointsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setInstructionBreakpoints" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetInstructionBreakpointsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setInstructionBreakpoints"]}, + "arguments": {"type": "SetInstructionBreakpointsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetInstructionBreakpointsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetInstructionBreakpointsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setInstructionBreakpoints' + self.type = "request" + self.command = "setInstructionBreakpoints" if arguments is None: self.arguments = SetInstructionBreakpointsArguments() else: - self.arguments = SetInstructionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetInstructionBreakpointsArguments else arguments + self.arguments = ( + SetInstructionBreakpointsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetInstructionBreakpointsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -5745,7 +5064,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetInstructionBreakpointsArguments(BaseSchema): """ - Arguments for 'setInstructionBreakpoints' request + Arguments for `setInstructionBreakpoints` request Note: automatically generated code. Do not edit manually. """ @@ -5753,15 +5072,13 @@ class SetInstructionBreakpointsArguments(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/InstructionBreakpoint" - }, - "description": "The instruction references of the breakpoints" + "items": {"$ref": "#/definitions/InstructionBreakpoint"}, + "description": "The instruction references of the breakpoints", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -5773,23 +5090,24 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u InstructionBreakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [InstructionBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [InstructionBreakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct -@register_response('setInstructionBreakpoints') +@register_response("setInstructionBreakpoints") @register class SetInstructionBreakpointsResponse(BaseSchema): """ - Response to 'setInstructionBreakpoints' request + Response to `setInstructionBreakpoints` request Note: automatically generated code. Do not edit manually. """ @@ -5797,83 +5115,67 @@ class SetInstructionBreakpointsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array.", } }, - "required": [ - "breakpoints" - ] - } + "required": ["breakpoints"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetInstructionBreakpointsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetInstructionBreakpointsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetInstructionBreakpointsResponseBody() else: - self.body = SetInstructionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetInstructionBreakpointsResponseBody else body + self.body = ( + SetInstructionBreakpointsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetInstructionBreakpointsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -5883,27 +5185,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('continue') +@register_request("continue") @register class ContinueRequest(BaseSchema): """ The request resumes execution of all threads. If the debug adapter supports single thread execution - (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true - resumes only the specified thread. If not all threads were resumed, the 'allThreadsContinued' - attribute of the response must be set to false. + (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to + true resumes only the specified thread. If not all threads were resumed, the `allThreadsContinued` + attribute of the response should be set to false. Note: automatically generated code. Do not edit manually. """ @@ -5911,55 +5213,46 @@ class ContinueRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "continue" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "ContinueArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["continue"]}, + "arguments": {"type": "ContinueArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param ContinueArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param ContinueArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'continue' + self.type = "request" + self.command = "continue" if arguments is None: self.arguments = ContinueArguments() else: - self.arguments = ContinueArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ContinueArguments else arguments + self.arguments = ( + ContinueArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ContinueArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -5968,7 +5261,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ContinueArguments(BaseSchema): """ - Arguments for 'continue' request. + Arguments for `continue` request. Note: automatically generated code. Do not edit manually. """ @@ -5976,33 +5269,32 @@ class ContinueArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed." + "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the argument `singleThread` is True, only the thread with this ID is resumed.", }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, execution is resumed only for the thread with given 'threadId'." - } + "description": "If this flag is True, execution is resumed only for the thread with given `threadId`.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer threadId: Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed. - :param boolean singleThread: If this optional flag is true, execution is resumed only for the thread with given 'threadId'. + :param integer threadId: Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the argument `singleThread` is true, only the thread with this ID is resumed. + :param boolean singleThread: If this flag is true, execution is resumed only for the thread with given `threadId`. """ self.threadId = threadId self.singleThread = singleThread if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -6012,25 +5304,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('continue') +@register_response("continue") @register class ContinueResponse(BaseSchema): """ - Response to 'continue' request. + Response to `continue` request. Note: automatically generated code. Do not edit manually. """ @@ -6038,77 +5330,63 @@ class ContinueResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "allThreadsContinued": { "type": "boolean", - "description": "The value true (or a missing property) signals to the client that all threads have been resumed. The value false must be returned if not all threads were resumed." + "description": "The value True (or a missing property) signals to the client that all threads have been resumed. The value false indicates that not all threads were resumed.", } - } - } + }, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ContinueResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ContinueResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ContinueResponseBody() else: - self.body = ContinueResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ContinueResponseBody else body + self.body = ( + ContinueResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ContinueResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -6118,31 +5396,31 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('next') +@register_request("next") @register class NextRequest(BaseSchema): """ The request executes one step (in the given granularity) for the specified thread and allows all other threads to run freely by resuming them. - + If the debug adapter supports single thread execution (see capability - 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other + `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the + + The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed. Note: automatically generated code. Do not edit manually. @@ -6151,55 +5429,44 @@ class NextRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "next" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "NextArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["next"]}, + "arguments": {"type": "NextArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param NextArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param NextArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'next' + self.type = "request" + self.command = "next" if arguments is None: self.arguments = NextArguments() else: - self.arguments = NextArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != NextArguments else arguments + self.arguments = ( + NextArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != NextArguments else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -6208,7 +5475,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class NextArguments(BaseSchema): """ - Arguments for 'next' request. + Arguments for `next` request. Note: automatically generated code. Do not edit manually. """ @@ -6216,26 +5483,23 @@ class NextArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the thread for which to resume execution for one step (of the given granularity)." - }, - "singleThread": { - "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "Specifies the thread for which to resume execution for one step (of the given granularity).", }, + "singleThread": {"type": "boolean", "description": "If this flag is True, all other suspended threads are not resumed."}, "granularity": { - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed.", - "type": "SteppingGranularity" - } + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed.", + "type": "SteppingGranularity", + }, } - __refs__ = set(['granularity']) + __refs__ = set(["granularity"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, granularity=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer threadId: Specifies the thread for which to resume execution for one step (of the given granularity). - :param boolean singleThread: If this optional flag is true, all other suspended threads are not resumed. - :param SteppingGranularity granularity: Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed. + :param boolean singleThread: If this flag is true, all other suspended threads are not resumed. + :param SteppingGranularity granularity: Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed. """ self.threadId = threadId self.singleThread = singleThread @@ -6245,12 +5509,11 @@ def __init__(self, threadId, singleThread=None, granularity=None, update_ids_fro if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -6261,27 +5524,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread if granularity is not None: - dct['granularity'] = granularity + dct["granularity"] = granularity dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('next') +@register_response("next") @register class NextResponse(BaseSchema): """ - Response to 'next' request. This is just an acknowledgement, so no body field is required. + Response to `next` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -6289,68 +5552,45 @@ class NextResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -6359,7 +5599,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -6369,41 +5608,41 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('stepIn') +@register_request("stepIn") @register class StepInRequest(BaseSchema): """ The request resumes the given thread to step into a function/method and allows all other threads to run freely by resuming them. - + If the debug adapter supports single thread execution (see capability - 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other + `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming. - - If the request cannot step into a target, 'stepIn' behaves like the 'next' request. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the + + If the request cannot step into a target, `stepIn` behaves like the `next` request. + + The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed. - + If there are multiple function/method calls (or other targets) on the source line, - - the optional argument 'targetId' can be used to control into which target the 'stepIn' should occur. - - The list of possible targets for a given source line can be retrieved via the 'stepInTargets' + + the argument `targetId` can be used to control into which target the `stepIn` should occur. + + The list of possible targets for a given source line can be retrieved via the `stepInTargets` request. Note: automatically generated code. Do not edit manually. @@ -6412,55 +5651,46 @@ class StepInRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "stepIn" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "StepInArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["stepIn"]}, + "arguments": {"type": "StepInArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param StepInArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param StepInArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'stepIn' + self.type = "request" + self.command = "stepIn" if arguments is None: self.arguments = StepInArguments() else: - self.arguments = StepInArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != StepInArguments else arguments + self.arguments = ( + StepInArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StepInArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -6469,7 +5699,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StepInArguments(BaseSchema): """ - Arguments for 'stepIn' request. + Arguments for `stepIn` request. Note: automatically generated code. Do not edit manually. """ @@ -6477,31 +5707,25 @@ class StepInArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the thread for which to resume execution for one step-into (of the given granularity)." - }, - "singleThread": { - "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." - }, - "targetId": { - "type": "integer", - "description": "Optional id of the target to step into." + "description": "Specifies the thread for which to resume execution for one step-into (of the given granularity).", }, + "singleThread": {"type": "boolean", "description": "If this flag is True, all other suspended threads are not resumed."}, + "targetId": {"type": "integer", "description": "Id of the target to step into."}, "granularity": { - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed.", - "type": "SteppingGranularity" - } + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed.", + "type": "SteppingGranularity", + }, } - __refs__ = set(['granularity']) + __refs__ = set(["granularity"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, targetId=None, granularity=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer threadId: Specifies the thread for which to resume execution for one step-into (of the given granularity). - :param boolean singleThread: If this optional flag is true, all other suspended threads are not resumed. - :param integer targetId: Optional id of the target to step into. - :param SteppingGranularity granularity: Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed. + :param boolean singleThread: If this flag is true, all other suspended threads are not resumed. + :param integer targetId: Id of the target to step into. + :param SteppingGranularity granularity: Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed. """ self.threadId = threadId self.singleThread = singleThread @@ -6512,12 +5736,11 @@ def __init__(self, threadId, singleThread=None, targetId=None, granularity=None, if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -6529,29 +5752,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread if targetId is not None: - dct['targetId'] = targetId + dct["targetId"] = targetId if granularity is not None: - dct['granularity'] = granularity + dct["granularity"] = granularity dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('stepIn') +@register_response("stepIn") @register class StepInResponse(BaseSchema): """ - Response to 'stepIn' request. This is just an acknowledgement, so no body field is required. + Response to `stepIn` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -6559,68 +5782,45 @@ class StepInResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -6629,7 +5829,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -6639,32 +5838,32 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('stepOut') +@register_request("stepOut") @register class StepOutRequest(BaseSchema): """ The request resumes the given thread to step out (return) from a function/method and allows all other threads to run freely by resuming them. - + If the debug adapter supports single thread execution (see capability - 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other + `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the + + The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed. Note: automatically generated code. Do not edit manually. @@ -6673,55 +5872,46 @@ class StepOutRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "stepOut" - ] - }, - "arguments": { - "type": "StepOutArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["stepOut"]}, + "arguments": {"type": "StepOutArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param StepOutArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param StepOutArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'stepOut' + self.type = "request" + self.command = "stepOut" if arguments is None: self.arguments = StepOutArguments() else: - self.arguments = StepOutArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != StepOutArguments else arguments + self.arguments = ( + StepOutArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StepOutArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -6730,7 +5920,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StepOutArguments(BaseSchema): """ - Arguments for 'stepOut' request. + Arguments for `stepOut` request. Note: automatically generated code. Do not edit manually. """ @@ -6738,26 +5928,23 @@ class StepOutArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the thread for which to resume execution for one step-out (of the given granularity)." - }, - "singleThread": { - "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "Specifies the thread for which to resume execution for one step-out (of the given granularity).", }, + "singleThread": {"type": "boolean", "description": "If this flag is True, all other suspended threads are not resumed."}, "granularity": { - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed.", - "type": "SteppingGranularity" - } + "description": "Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed.", + "type": "SteppingGranularity", + }, } - __refs__ = set(['granularity']) + __refs__ = set(["granularity"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, granularity=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer threadId: Specifies the thread for which to resume execution for one step-out (of the given granularity). - :param boolean singleThread: If this optional flag is true, all other suspended threads are not resumed. - :param SteppingGranularity granularity: Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed. + :param boolean singleThread: If this flag is true, all other suspended threads are not resumed. + :param SteppingGranularity granularity: Stepping granularity. If no granularity is specified, a granularity of `statement` is assumed. """ self.threadId = threadId self.singleThread = singleThread @@ -6767,12 +5954,11 @@ def __init__(self, threadId, singleThread=None, granularity=None, update_ids_fro if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -6783,27 +5969,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread if granularity is not None: - dct['granularity'] = granularity + dct["granularity"] = granularity dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('stepOut') +@register_response("stepOut") @register class StepOutResponse(BaseSchema): """ - Response to 'stepOut' request. This is just an acknowledgement, so no body field is required. + Response to `stepOut` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -6811,68 +5997,45 @@ class StepOutResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -6881,7 +6044,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -6891,35 +6053,35 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('stepBack') +@register_request("stepBack") @register class StepBackRequest(BaseSchema): """ The request executes one backward step (in the given granularity) for the specified thread and allows all other threads to run backward freely by resuming them. - + If the debug adapter supports single thread execution (see capability - 'supportsSingleThreadExecutionRequests') setting the 'singleThread' argument to true prevents other + `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'step') after the + + The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed. - - Clients should only call this request if the capability 'supportsStepBack' is true. + + Clients should only call this request if the corresponding capability `supportsStepBack` is true. Note: automatically generated code. Do not edit manually. """ @@ -6927,55 +6089,46 @@ class StepBackRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "stepBack" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "StepBackArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["stepBack"]}, + "arguments": {"type": "StepBackArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param StepBackArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param StepBackArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'stepBack' + self.type = "request" + self.command = "stepBack" if arguments is None: self.arguments = StepBackArguments() else: - self.arguments = StepBackArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != StepBackArguments else arguments + self.arguments = ( + StepBackArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StepBackArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -6984,7 +6137,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StepBackArguments(BaseSchema): """ - Arguments for 'stepBack' request. + Arguments for `stepBack` request. Note: automatically generated code. Do not edit manually. """ @@ -6992,26 +6145,23 @@ class StepBackArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the thread for which to resume execution for one step backwards (of the given granularity)." - }, - "singleThread": { - "type": "boolean", - "description": "If this optional flag is true, all other suspended threads are not resumed." + "description": "Specifies the thread for which to resume execution for one step backwards (of the given granularity).", }, + "singleThread": {"type": "boolean", "description": "If this flag is True, all other suspended threads are not resumed."}, "granularity": { - "description": "Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed.", - "type": "SteppingGranularity" - } + "description": "Stepping granularity to step. If no granularity is specified, a granularity of `statement` is assumed.", + "type": "SteppingGranularity", + }, } - __refs__ = set(['granularity']) + __refs__ = set(["granularity"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, granularity=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer threadId: Specifies the thread for which to resume execution for one step backwards (of the given granularity). - :param boolean singleThread: If this optional flag is true, all other suspended threads are not resumed. - :param SteppingGranularity granularity: Optional granularity to step. If no granularity is specified, a granularity of 'statement' is assumed. + :param boolean singleThread: If this flag is true, all other suspended threads are not resumed. + :param SteppingGranularity granularity: Stepping granularity to step. If no granularity is specified, a granularity of `statement` is assumed. """ self.threadId = threadId self.singleThread = singleThread @@ -7021,12 +6171,11 @@ def __init__(self, threadId, singleThread=None, granularity=None, update_ids_fro if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -7037,27 +6186,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread if granularity is not None: - dct['granularity'] = granularity + dct["granularity"] = granularity dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('stepBack') +@register_response("stepBack") @register class StepBackResponse(BaseSchema): """ - Response to 'stepBack' request. This is just an acknowledgement, so no body field is required. + Response to `stepBack` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -7065,68 +6214,45 @@ class StepBackResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -7135,7 +6261,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -7145,30 +6270,30 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('reverseContinue') +@register_request("reverseContinue") @register class ReverseContinueRequest(BaseSchema): """ The request resumes backward execution of all threads. If the debug adapter supports single thread - execution (see capability 'supportsSingleThreadExecutionRequests') setting the 'singleThread' + execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true resumes only the specified thread. If not all threads were resumed, the - 'allThreadsContinued' attribute of the response must be set to false. - - Clients should only call this request if the capability 'supportsStepBack' is true. + `allThreadsContinued` attribute of the response should be set to false. + + Clients should only call this request if the corresponding capability `supportsStepBack` is true. Note: automatically generated code. Do not edit manually. """ @@ -7176,55 +6301,46 @@ class ReverseContinueRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "reverseContinue" - ] - }, - "arguments": { - "type": "ReverseContinueArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["reverseContinue"]}, + "arguments": {"type": "ReverseContinueArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param ReverseContinueArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param ReverseContinueArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'reverseContinue' + self.type = "request" + self.command = "reverseContinue" if arguments is None: self.arguments = ReverseContinueArguments() else: - self.arguments = ReverseContinueArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ReverseContinueArguments else arguments + self.arguments = ( + ReverseContinueArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ReverseContinueArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -7233,7 +6349,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ReverseContinueArguments(BaseSchema): """ - Arguments for 'reverseContinue' request. + Arguments for `reverseContinue` request. Note: automatically generated code. Do not edit manually. """ @@ -7241,33 +6357,32 @@ class ReverseContinueArguments(BaseSchema): __props__ = { "threadId": { "type": "integer", - "description": "Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed." + "description": "Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the `singleThread` argument is True, only the thread with this ID is resumed.", }, "singleThread": { "type": "boolean", - "description": "If this optional flag is true, backward execution is resumed only for the thread with given 'threadId'." - } + "description": "If this flag is True, backward execution is resumed only for the thread with given `threadId`.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, singleThread=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer threadId: Specifies the active thread. If the debug adapter supports single thread execution (see 'supportsSingleThreadExecutionRequests') and the optional argument 'singleThread' is true, only the thread with this ID is resumed. - :param boolean singleThread: If this optional flag is true, backward execution is resumed only for the thread with given 'threadId'. + :param integer threadId: Specifies the active thread. If the debug adapter supports single thread execution (see `supportsSingleThreadExecutionRequests`) and the `singleThread` argument is true, only the thread with this ID is resumed. + :param boolean singleThread: If this flag is true, backward execution is resumed only for the thread with given `threadId`. """ self.threadId = threadId self.singleThread = singleThread if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -7277,25 +6392,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if singleThread is not None: - dct['singleThread'] = singleThread + dct["singleThread"] = singleThread dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('reverseContinue') +@register_response("reverseContinue") @register class ReverseContinueResponse(BaseSchema): """ - Response to 'reverseContinue' request. This is just an acknowledgement, so no body field is + Response to `reverseContinue` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. @@ -7304,68 +6419,45 @@ class ReverseContinueResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -7374,7 +6466,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -7384,30 +6475,31 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('restartFrame') +@register_request("restartFrame") @register class RestartFrameRequest(BaseSchema): """ - The request restarts execution of the specified stackframe. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'restart') after + The request restarts execution of the specified stack frame. + + The debug adapter first sends the response and then a `stopped` event (with reason `restart`) after the restart has completed. - - Clients should only call this request if the capability 'supportsRestartFrame' is true. + + Clients should only call this request if the corresponding capability `supportsRestartFrame` is + true. Note: automatically generated code. Do not edit manually. """ @@ -7415,55 +6507,46 @@ class RestartFrameRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "restartFrame" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "RestartFrameArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["restartFrame"]}, + "arguments": {"type": "RestartFrameArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param RestartFrameArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param RestartFrameArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'restartFrame' + self.type = "request" + self.command = "restartFrame" if arguments is None: self.arguments = RestartFrameArguments() else: - self.arguments = RestartFrameArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != RestartFrameArguments else arguments + self.arguments = ( + RestartFrameArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != RestartFrameArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -7472,7 +6555,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class RestartFrameArguments(BaseSchema): """ - Arguments for 'restartFrame' request. + Arguments for `restartFrame` request. Note: automatically generated code. Do not edit manually. """ @@ -7480,27 +6563,26 @@ class RestartFrameArguments(BaseSchema): __props__ = { "frameId": { "type": "integer", - "description": "Restart this stackframe." + "description": "Restart the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, frameId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer frameId: Restart this stackframe. + :param integer frameId: Restart the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details. """ self.frameId = frameId if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -7509,23 +6591,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'frameId': frameId, + "frameId": frameId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('restartFrame') +@register_response("restartFrame") @register class RestartFrameResponse(BaseSchema): """ - Response to 'restartFrame' request. This is just an acknowledgement, so no body field is required. + Response to `restartFrame` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -7533,68 +6615,45 @@ class RestartFrameResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -7603,7 +6662,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -7613,34 +6671,34 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('goto') +@register_request("goto") @register class GotoRequest(BaseSchema): """ The request sets the location where the debuggee will continue to run. - - This makes it possible to skip the execution of code or to executed code again. - + + This makes it possible to skip the execution of code or to execute code again. + The code between the current location and the goto target is not executed but skipped. - - The debug adapter first sends the response and then a 'stopped' event with reason 'goto'. - - Clients should only call this request if the capability 'supportsGotoTargetsRequest' is true - (because only then goto targets exist that can be passed as arguments). + + The debug adapter first sends the response and then a `stopped` event with reason `goto`. + + Clients should only call this request if the corresponding capability `supportsGotoTargetsRequest` + is true (because only then goto targets exist that can be passed as arguments). Note: automatically generated code. Do not edit manually. """ @@ -7648,55 +6706,44 @@ class GotoRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "goto" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "GotoArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["goto"]}, + "arguments": {"type": "GotoArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param GotoArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param GotoArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'goto' + self.type = "request" + self.command = "goto" if arguments is None: self.arguments = GotoArguments() else: - self.arguments = GotoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != GotoArguments else arguments + self.arguments = ( + GotoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != GotoArguments else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -7705,24 +6752,18 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class GotoArguments(BaseSchema): """ - Arguments for 'goto' request. + Arguments for `goto` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "threadId": { - "type": "integer", - "description": "Set the goto target for this thread." - }, - "targetId": { - "type": "integer", - "description": "The location where the debuggee will continue to run." - } + "threadId": {"type": "integer", "description": "Set the goto target for this thread."}, + "targetId": {"type": "integer", "description": "The location where the debuggee will continue to run."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, targetId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -7734,12 +6775,11 @@ def __init__(self, threadId, targetId, update_ids_from_dap=False, **kwargs): # if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -7749,24 +6789,24 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, - 'targetId': targetId, + "threadId": threadId, + "targetId": targetId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('goto') +@register_response("goto") @register class GotoResponse(BaseSchema): """ - Response to 'goto' request. This is just an acknowledgement, so no body field is required. + Response to `goto` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -7774,68 +6814,45 @@ class GotoResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -7844,7 +6861,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -7854,27 +6870,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('pause') +@register_request("pause") @register class PauseRequest(BaseSchema): """ The request suspends the debuggee. - - The debug adapter first sends the response and then a 'stopped' event (with reason 'pause') after + + The debug adapter first sends the response and then a `stopped` event (with reason `pause`) after the thread has been paused successfully. Note: automatically generated code. Do not edit manually. @@ -7883,55 +6899,44 @@ class PauseRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "pause" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "PauseArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["pause"]}, + "arguments": {"type": "PauseArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param PauseArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param PauseArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'pause' + self.type = "request" + self.command = "pause" if arguments is None: self.arguments = PauseArguments() else: - self.arguments = PauseArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != PauseArguments else arguments + self.arguments = ( + PauseArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != PauseArguments else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -7940,20 +6945,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class PauseArguments(BaseSchema): """ - Arguments for 'pause' request. + Arguments for `pause` request. Note: automatically generated code. Do not edit manually. """ - __props__ = { - "threadId": { - "type": "integer", - "description": "Pause execution for this thread." - } - } + __props__ = {"threadId": {"type": "integer", "description": "Pause execution for this thread."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -7963,12 +6963,11 @@ def __init__(self, threadId, update_ids_from_dap=False, **kwargs): # noqa (upda if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -7977,23 +6976,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('pause') +@register_response("pause") @register class PauseResponse(BaseSchema): """ - Response to 'pause' request. This is just an acknowledgement, so no body field is required. + Response to `pause` request. This is just an acknowledgement, so no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -8001,68 +7000,45 @@ class PauseResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], + }, + "body": { + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", }, - "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -8071,7 +7047,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -8081,33 +7056,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('stackTrace') +@register_request("stackTrace") @register class StackTraceRequest(BaseSchema): """ The request returns a stacktrace from the current execution state of a given thread. - + A client can request all stack frames by omitting the startFrame and levels arguments. For - performance conscious clients and if the debug adapter's 'supportsDelayedStackTraceLoading' - capability is true, stack frames can be retrieved in a piecemeal way with the startFrame and levels - arguments. The response of the stackTrace request may contain a totalFrames property that hints at - the total number of frames in the stack. If a client needs this total number upfront, it can issue a - request for a single (first) frame and depending on the value of totalFrames decide how to proceed. - In any case a client should be prepared to receive less frames than requested, which is an + performance-conscious clients and if the corresponding capability `supportsDelayedStackTraceLoading` + is true, stack frames can be retrieved in a piecemeal way with the `startFrame` and `levels` + arguments. The response of the `stackTrace` request may contain a `totalFrames` property that hints + at the total number of frames in the stack. If a client needs this total number upfront, it can + issue a request for a single (first) frame and depending on the value of `totalFrames` decide how to + proceed. In any case a client should be prepared to receive fewer frames than requested, which is an indication that the end of the stack has been reached. Note: automatically generated code. Do not edit manually. @@ -8116,55 +7091,46 @@ class StackTraceRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "stackTrace" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "StackTraceArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["stackTrace"]}, + "arguments": {"type": "StackTraceArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param StackTraceArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param StackTraceArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'stackTrace' + self.type = "request" + self.command = "stackTrace" if arguments is None: self.arguments = StackTraceArguments() else: - self.arguments = StackTraceArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != StackTraceArguments else arguments + self.arguments = ( + StackTraceArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StackTraceArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -8173,32 +7139,26 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StackTraceArguments(BaseSchema): """ - Arguments for 'stackTrace' request. + Arguments for `stackTrace` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "threadId": { - "type": "integer", - "description": "Retrieve the stacktrace for this thread." - }, - "startFrame": { - "type": "integer", - "description": "The index of the first frame to return; if omitted frames start at 0." - }, + "threadId": {"type": "integer", "description": "Retrieve the stacktrace for this thread."}, + "startFrame": {"type": "integer", "description": "The index of the first frame to return; if omitted frames start at 0."}, "levels": { "type": "integer", - "description": "The maximum number of frames to return. If levels is not specified or 0, all frames are returned." + "description": "The maximum number of frames to return. If levels is not specified or 0, all frames are returned.", }, "format": { - "description": "Specifies details on how to format the stack frames.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true.", - "type": "StackFrameFormat" - } + "description": "Specifies details on how to format the stack frames.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is True.", + "type": "StackFrameFormat", + }, } - __refs__ = set(['format']) + __refs__ = set(["format"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, startFrame=None, levels=None, format=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -8206,7 +7166,7 @@ def __init__(self, threadId, startFrame=None, levels=None, format=None, update_i :param integer startFrame: The index of the first frame to return; if omitted frames start at 0. :param integer levels: The maximum number of frames to return. If levels is not specified or 0, all frames are returned. :param StackFrameFormat format: Specifies details on how to format the stack frames. - The attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true. + The attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true. """ self.threadId = threadId self.startFrame = startFrame @@ -8214,16 +7174,17 @@ def __init__(self, threadId, startFrame=None, levels=None, format=None, update_i if format is None: self.format = StackFrameFormat() else: - self.format = StackFrameFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != StackFrameFormat else format + self.format = ( + StackFrameFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != StackFrameFormat else format + ) if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -8235,29 +7196,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if startFrame is not None: - dct['startFrame'] = startFrame + dct["startFrame"] = startFrame if levels is not None: - dct['levels'] = levels + dct["levels"] = levels if format is not None: - dct['format'] = format.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["format"] = format.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('stackTrace') +@register_response("stackTrace") @register class StackTraceResponse(BaseSchema): """ - Response to 'stackTrace' request. + Response to `stackTrace` request. Note: automatically generated code. Do not edit manually. """ @@ -8265,87 +7226,71 @@ class StackTraceResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "stackFrames": { "type": "array", - "items": { - "$ref": "#/definitions/StackFrame" - }, - "description": "The frames of the stackframe. If the array has length zero, there are no stackframes available.\nThis means that there is no location information available." + "items": {"$ref": "#/definitions/StackFrame"}, + "description": "The frames of the stack frame. If the array has length zero, there are no stack frames available.\nThis means that there is no location information available.", }, "totalFrames": { "type": "integer", - "description": "The total number of frames available in the stack. If omitted or if totalFrames is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing totalFrames values for subsequent requests can be used to enforce paging in the client." - } + "description": "The total number of frames available in the stack. If omitted or if `totalFrames` is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing `totalFrames` values for subsequent requests can be used to enforce paging in the client.", + }, }, - "required": [ - "stackFrames" - ] - } + "required": ["stackFrames"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param StackTraceResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param StackTraceResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = StackTraceResponseBody() else: - self.body = StackTraceResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != StackTraceResponseBody else body + self.body = ( + StackTraceResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != StackTraceResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -8355,24 +7300,24 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('scopes') +@register_request("scopes") @register class ScopesRequest(BaseSchema): """ - The request returns the variable scopes for a given stackframe ID. + The request returns the variable scopes for a given stack frame ID. Note: automatically generated code. Do not edit manually. """ @@ -8380,55 +7325,46 @@ class ScopesRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "scopes" - ] - }, - "arguments": { - "type": "ScopesArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["scopes"]}, + "arguments": {"type": "ScopesArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param ScopesArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param ScopesArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'scopes' + self.type = "request" + self.command = "scopes" if arguments is None: self.arguments = ScopesArguments() else: - self.arguments = ScopesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ScopesArguments else arguments + self.arguments = ( + ScopesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ScopesArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -8437,7 +7373,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ScopesArguments(BaseSchema): """ - Arguments for 'scopes' request. + Arguments for `scopes` request. Note: automatically generated code. Do not edit manually. """ @@ -8445,27 +7381,26 @@ class ScopesArguments(BaseSchema): __props__ = { "frameId": { "type": "integer", - "description": "Retrieve the scopes for this stackframe." + "description": "Retrieve the scopes for the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, frameId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer frameId: Retrieve the scopes for this stackframe. + :param integer frameId: Retrieve the scopes for the stack frame identified by `frameId`. The `frameId` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details. """ self.frameId = frameId if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -8474,23 +7409,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'frameId': frameId, + "frameId": frameId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('scopes') +@register_response("scopes") @register class ScopesResponse(BaseSchema): """ - Response to 'scopes' request. + Response to `scopes` request. Note: automatically generated code. Do not edit manually. """ @@ -8498,83 +7433,65 @@ class ScopesResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "scopes": { "type": "array", - "items": { - "$ref": "#/definitions/Scope" - }, - "description": "The scopes of the stackframe. If the array has length zero, there are no scopes available." + "items": {"$ref": "#/definitions/Scope"}, + "description": "The scopes of the stack frame. If the array has length zero, there are no scopes available.", } }, - "required": [ - "scopes" - ] - } + "required": ["scopes"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ScopesResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ScopesResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ScopesResponseBody() else: - self.body = ScopesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ScopesResponseBody else body + self.body = ( + ScopesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ScopesResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -8584,26 +7501,26 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('variables') +@register_request("variables") @register class VariablesRequest(BaseSchema): """ Retrieves all child variables for the given variable reference. - - An optional filter can be used to limit the fetched children to either named or indexed children. + + A filter can be used to limit the fetched children to either named or indexed children. Note: automatically generated code. Do not edit manually. """ @@ -8611,55 +7528,46 @@ class VariablesRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "variables" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "VariablesArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["variables"]}, + "arguments": {"type": "VariablesArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param VariablesArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param VariablesArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'variables' + self.type = "request" + self.command = "variables" if arguments is None: self.arguments = VariablesArguments() else: - self.arguments = VariablesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != VariablesArguments else arguments + self.arguments = ( + VariablesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != VariablesArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -8668,7 +7576,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class VariablesArguments(BaseSchema): """ - Arguments for 'variables' request. + Arguments for `variables` request. Note: automatically generated code. Do not edit manually. """ @@ -8676,41 +7584,40 @@ class VariablesArguments(BaseSchema): __props__ = { "variablesReference": { "type": "integer", - "description": "The Variable reference." + "description": "The variable for which to retrieve its children. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details.", }, "filter": { "type": "string", - "enum": [ - "indexed", - "named" - ], - "description": "Optional filter to limit the child variables to either named or indexed. If omitted, both types are fetched." + "enum": ["indexed", "named"], + "description": "Filter to limit the child variables to either named or indexed. If omitted, both types are fetched.", }, "start": { "type": "integer", - "description": "The index of the first variable to return; if omitted children start at 0." + "description": "The index of the first variable to return; if omitted children start at 0.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is True.", }, "count": { "type": "integer", - "description": "The number of variables to return. If count is missing or 0, all variables are returned." + "description": "The number of variables to return. If count is missing or 0, all variables are returned.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is True.", }, "format": { - "description": "Specifies details on how to format the Variable values.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true.", - "type": "ValueFormat" - } + "description": "Specifies details on how to format the Variable values.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is True.", + "type": "ValueFormat", + }, } - __refs__ = set(['format']) + __refs__ = set(["format"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, variablesReference, filter=None, start=None, count=None, format=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer variablesReference: The Variable reference. - :param string filter: Optional filter to limit the child variables to either named or indexed. If omitted, both types are fetched. + :param integer variablesReference: The variable for which to retrieve its children. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details. + :param string filter: Filter to limit the child variables to either named or indexed. If omitted, both types are fetched. :param integer start: The index of the first variable to return; if omitted children start at 0. + The attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true. :param integer count: The number of variables to return. If count is missing or 0, all variables are returned. + The attribute is only honored by a debug adapter if the corresponding capability `supportsVariablePaging` is true. :param ValueFormat format: Specifies details on how to format the Variable values. - The attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true. + The attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true. """ self.variablesReference = variablesReference self.filter = filter @@ -8719,16 +7626,15 @@ def __init__(self, variablesReference, filter=None, start=None, count=None, form if format is None: self.format = ValueFormat() else: - self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format + self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -8741,31 +7647,31 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'variablesReference': variablesReference, + "variablesReference": variablesReference, } if filter is not None: - dct['filter'] = filter + dct["filter"] = filter if start is not None: - dct['start'] = start + dct["start"] = start if count is not None: - dct['count'] = count + dct["count"] = count if format is not None: - dct['format'] = format.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["format"] = format.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct -@register_response('variables') +@register_response("variables") @register class VariablesResponse(BaseSchema): """ - Response to 'variables' request. + Response to `variables` request. Note: automatically generated code. Do not edit manually. """ @@ -8773,83 +7679,65 @@ class VariablesResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "variables": { "type": "array", - "items": { - "$ref": "#/definitions/Variable" - }, - "description": "All (or a range) of variables for the given variable reference." + "items": {"$ref": "#/definitions/Variable"}, + "description": "All (or a range) of variables for the given variable reference.", } }, - "required": [ - "variables" - ] - } + "required": ["variables"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param VariablesResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param VariablesResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = VariablesResponseBody() else: - self.body = VariablesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != VariablesResponseBody else body + self.body = ( + VariablesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != VariablesResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -8859,28 +7747,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setVariable') +@register_request("setVariable") @register class SetVariableRequest(BaseSchema): """ Set the variable with the given name in the variable container to a new value. Clients should only - call this request if the capability 'supportsSetVariable' is true. - - If a debug adapter implements both setVariable and setExpression, a client will only use - setExpression if the variable has an evaluateName property. + call this request if the corresponding capability `supportsSetVariable` is true. + + If a debug adapter implements both `setVariable` and `setExpression`, a client will only use + `setExpression` if the variable has an `evaluateName` property. Note: automatically generated code. Do not edit manually. """ @@ -8888,55 +7776,46 @@ class SetVariableRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setVariable" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetVariableArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setVariable"]}, + "arguments": {"type": "SetVariableArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetVariableArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetVariableArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setVariable' + self.type = "request" + self.command = "setVariable" if arguments is None: self.arguments = SetVariableArguments() else: - self.arguments = SetVariableArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetVariableArguments else arguments + self.arguments = ( + SetVariableArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetVariableArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -8945,7 +7824,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetVariableArguments(BaseSchema): """ - Arguments for 'setVariable' request. + Arguments for `setVariable` request. Note: automatically generated code. Do not edit manually. """ @@ -8953,28 +7832,19 @@ class SetVariableArguments(BaseSchema): __props__ = { "variablesReference": { "type": "integer", - "description": "The reference of the variable container." - }, - "name": { - "type": "string", - "description": "The name of the variable in the container." - }, - "value": { - "type": "string", - "description": "The value of the variable." + "description": "The reference of the variable container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details.", }, - "format": { - "description": "Specifies details on how to format the response value.", - "type": "ValueFormat" - } + "name": {"type": "string", "description": "The name of the variable in the container."}, + "value": {"type": "string", "description": "The value of the variable."}, + "format": {"description": "Specifies details on how to format the response value.", "type": "ValueFormat"}, } - __refs__ = set(['format']) + __refs__ = set(["format"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, variablesReference, name, value, format=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer variablesReference: The reference of the variable container. + :param integer variablesReference: The reference of the variable container. The `variablesReference` must have been obtained in the current suspended state. See 'Lifetime of Object References' in the Overview section for details. :param string name: The name of the variable in the container. :param string value: The value of the variable. :param ValueFormat format: Specifies details on how to format the response value. @@ -8985,16 +7855,15 @@ def __init__(self, variablesReference, name, value, format=None, update_ids_from if format is None: self.format = ValueFormat() else: - self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format + self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -9006,27 +7875,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'variablesReference': variablesReference, - 'name': name, - 'value': value, + "variablesReference": variablesReference, + "name": name, + "value": value, } if format is not None: - dct['format'] = format.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["format"] = format.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct -@register_response('setVariable') +@register_response("setVariable") @register class SetVariableResponse(BaseSchema): """ - Response to 'setVariable' request. + Response to `setVariable` request. Note: automatically generated code. Do not edit manually. """ @@ -9034,96 +7903,83 @@ class SetVariableResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "value": { - "type": "string", - "description": "The new value of the variable." - }, + "value": {"type": "string", "description": "The new value of the variable."}, "type": { "type": "string", - "description": "The type of the new value. Typically shown in the UI when hovering over the value." + "description": "The type of the new value. Typically shown in the UI when hovering over the value.", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the new value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the new value is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." - } + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, }, - "required": [ - "value" - ] - } + "required": ["value"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetVariableResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetVariableResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetVariableResponseBody() else: - self.body = SetVariableResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetVariableResponseBody else body + self.body = ( + SetVariableResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetVariableResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -9133,20 +7989,20 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('source') +@register_request("source") @register class SourceRequest(BaseSchema): """ @@ -9158,55 +8014,46 @@ class SourceRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "source" - ] - }, - "arguments": { - "type": "SourceArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["source"]}, + "arguments": {"type": "SourceArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SourceArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SourceArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'source' + self.type = "request" + self.command = "source" if arguments is None: self.arguments = SourceArguments() else: - self.arguments = SourceArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SourceArguments else arguments + self.arguments = ( + SourceArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SourceArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -9215,56 +8062,55 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SourceArguments(BaseSchema): """ - Arguments for 'source' request. + Arguments for `source` request. Note: automatically generated code. Do not edit manually. """ __props__ = { "source": { - "description": "Specifies the source content to load. Either source.path or source.sourceReference must be specified.", - "type": "Source" + "description": "Specifies the source content to load. Either `source.path` or `source.sourceReference` must be specified.", + "type": "Source", }, "sourceReference": { "type": "integer", - "description": "The reference to the source. This is the same as source.sourceReference.\nThis is provided for backward compatibility since old backends do not understand the 'source' attribute." - } + "description": "The reference to the source. This is the same as `source.sourceReference`.\nThis is provided for backward compatibility since old clients do not understand the `source` attribute.", + }, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, sourceReference, source=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer sourceReference: The reference to the source. This is the same as source.sourceReference. - This is provided for backward compatibility since old backends do not understand the 'source' attribute. - :param Source source: Specifies the source content to load. Either source.path or source.sourceReference must be specified. + :param integer sourceReference: The reference to the source. This is the same as `source.sourceReference`. + This is provided for backward compatibility since old clients do not understand the `source` attribute. + :param Source source: Specifies the source content to load. Either `source.path` or `source.sourceReference` must be specified. """ self.sourceReference = sourceReference if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) sourceReference = self.sourceReference source = self.source dct = { - 'sourceReference': sourceReference, + "sourceReference": sourceReference, } if source is not None: - dct['source'] = source.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["source"] = source.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_response('source') +@register_response("source") @register class SourceResponse(BaseSchema): """ - Response to 'source' request. + Response to `source` request. Note: automatically generated code. Do not edit manually. """ @@ -9272,84 +8118,62 @@ class SourceResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "content": { - "type": "string", - "description": "Content of the source reference." - }, - "mimeType": { - "type": "string", - "description": "Optional content type (mime type) of the source." - } + "content": {"type": "string", "description": "Content of the source reference."}, + "mimeType": {"type": "string", "description": "Content type (MIME type) of the source."}, }, - "required": [ - "content" - ] - } + "required": ["content"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SourceResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SourceResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SourceResponseBody() else: - self.body = SourceResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SourceResponseBody else body + self.body = ( + SourceResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SourceResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -9359,20 +8183,20 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('threads') +@register_request("threads") @register class ThreadsRequest(BaseSchema): """ @@ -9384,72 +8208,53 @@ class ThreadsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "threads" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["threads"]}, "arguments": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Object containing arguments for the command." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Object containing arguments for the command.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] arguments: Object containing arguments for the command. """ - self.type = 'request' - self.command = 'threads' + self.type = "request" + self.command = "threads" self.seq = seq self.arguments = arguments self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments + dct["arguments"] = arguments dct.update(self.kwargs) return dct -@register_response('threads') +@register_response("threads") @register class ThreadsResponse(BaseSchema): """ - Response to 'threads' request. + Response to `threads` request. Note: automatically generated code. Do not edit manually. """ @@ -9457,83 +8262,59 @@ class ThreadsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", - "properties": { - "threads": { - "type": "array", - "items": { - "$ref": "#/definitions/Thread" - }, - "description": "All threads." - } - }, - "required": [ - "threads" - ] - } + "properties": {"threads": {"type": "array", "items": {"$ref": "#/definitions/Thread"}, "description": "All threads."}}, + "required": ["threads"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ThreadsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ThreadsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ThreadsResponseBody() else: - self.body = ThreadsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ThreadsResponseBody else body + self.body = ( + ThreadsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ThreadsResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -9543,26 +8324,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('terminateThreads') +@register_request("terminateThreads") @register class TerminateThreadsRequest(BaseSchema): """ The request terminates the threads with the given ids. - - Clients should only call this request if the capability 'supportsTerminateThreadsRequest' is true. + + Clients should only call this request if the corresponding capability + `supportsTerminateThreadsRequest` is true. Note: automatically generated code. Do not edit manually. """ @@ -9570,55 +8352,46 @@ class TerminateThreadsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "terminateThreads" - ] - }, - "arguments": { - "type": "TerminateThreadsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["terminateThreads"]}, + "arguments": {"type": "TerminateThreadsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param TerminateThreadsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param TerminateThreadsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'terminateThreads' + self.type = "request" + self.command = "terminateThreads" if arguments is None: self.arguments = TerminateThreadsArguments() else: - self.arguments = TerminateThreadsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != TerminateThreadsArguments else arguments + self.arguments = ( + TerminateThreadsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != TerminateThreadsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -9627,23 +8400,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class TerminateThreadsArguments(BaseSchema): """ - Arguments for 'terminateThreads' request. + Arguments for `terminateThreads` request. Note: automatically generated code. Do not edit manually. """ - __props__ = { - "threadIds": { - "type": "array", - "items": { - "type": "integer" - }, - "description": "Ids of threads to be terminated." - } - } + __props__ = {"threadIds": {"type": "array", "items": {"type": "integer"}, "description": "Ids of threads to be terminated."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadIds=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -9652,25 +8417,22 @@ def __init__(self, threadIds=None, update_ids_from_dap=False, **kwargs): # noqa self.threadIds = threadIds self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) threadIds = self.threadIds if threadIds and hasattr(threadIds[0], "to_dict"): threadIds = [x.to_dict() for x in threadIds] - dct = { - } + dct = {} if threadIds is not None: - dct['threadIds'] = threadIds + dct["threadIds"] = threadIds dct.update(self.kwargs) return dct -@register_response('terminateThreads') +@register_response("terminateThreads") @register class TerminateThreadsResponse(BaseSchema): """ - Response to 'terminateThreads' request. This is just an acknowledgement, so no body field is - required. + Response to `terminateThreads` request. This is just an acknowledgement, no body field is required. Note: automatically generated code. Do not edit manually. """ @@ -9678,68 +8440,45 @@ class TerminateThreadsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -9748,7 +8487,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -9758,28 +8496,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('modules') +@register_request("modules") @register class ModulesRequest(BaseSchema): """ Modules can be retrieved from the debug adapter with this request which can either return all modules or a range of modules to support paging. - - Clients should only call this request if the capability 'supportsModulesRequest' is true. + + Clients should only call this request if the corresponding capability `supportsModulesRequest` is + true. Note: automatically generated code. Do not edit manually. """ @@ -9787,57 +8526,48 @@ class ModulesRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "modules" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "ModulesArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["modules"]}, + "arguments": {"type": "ModulesArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param ModulesArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param ModulesArguments arguments: """ - self.type = 'request' - self.command = 'modules' + self.type = "request" + self.command = "modules" self.seq = seq if arguments is None: self.arguments = ModulesArguments() else: - self.arguments = ModulesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ModulesArguments else arguments + self.arguments = ( + ModulesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ModulesArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -9845,53 +8575,48 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ModulesArguments(BaseSchema): """ - Arguments for 'modules' request. + Arguments for `modules` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "startModule": { - "type": "integer", - "description": "The index of the first module to return; if omitted modules start at 0." - }, + "startModule": {"type": "integer", "description": "The index of the first module to return; if omitted modules start at 0."}, "moduleCount": { "type": "integer", - "description": "The number of modules to return. If moduleCount is not specified or 0, all modules are returned." - } + "description": "The number of modules to return. If `moduleCount` is not specified or 0, all modules are returned.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, startModule=None, moduleCount=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer startModule: The index of the first module to return; if omitted modules start at 0. - :param integer moduleCount: The number of modules to return. If moduleCount is not specified or 0, all modules are returned. + :param integer moduleCount: The number of modules to return. If `moduleCount` is not specified or 0, all modules are returned. """ self.startModule = startModule self.moduleCount = moduleCount self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) startModule = self.startModule moduleCount = self.moduleCount - dct = { - } + dct = {} if startModule is not None: - dct['startModule'] = startModule + dct["startModule"] = startModule if moduleCount is not None: - dct['moduleCount'] = moduleCount + dct["moduleCount"] = moduleCount dct.update(self.kwargs) return dct -@register_response('modules') +@register_response("modules") @register class ModulesResponse(BaseSchema): """ - Response to 'modules' request. + Response to `modules` request. Note: automatically generated code. Do not edit manually. """ @@ -9899,87 +8624,62 @@ class ModulesResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "modules": { - "type": "array", - "items": { - "$ref": "#/definitions/Module" - }, - "description": "All modules or range of modules." - }, - "totalModules": { - "type": "integer", - "description": "The total number of modules available." - } + "modules": {"type": "array", "items": {"$ref": "#/definitions/Module"}, "description": "All modules or range of modules."}, + "totalModules": {"type": "integer", "description": "The total number of modules available."}, }, - "required": [ - "modules" - ] - } + "required": ["modules"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ModulesResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ModulesResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ModulesResponseBody() else: - self.body = ModulesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ModulesResponseBody else body + self.body = ( + ModulesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ModulesResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -9989,26 +8689,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('loadedSources') +@register_request("loadedSources") @register class LoadedSourcesRequest(BaseSchema): """ Retrieves the set of all sources currently loaded by the debugged process. - - Clients should only call this request if the capability 'supportsLoadedSourcesRequest' is true. + + Clients should only call this request if the corresponding capability `supportsLoadedSourcesRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -10016,57 +8717,48 @@ class LoadedSourcesRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "loadedSources" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "LoadedSourcesArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["loadedSources"]}, + "arguments": {"type": "LoadedSourcesArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param LoadedSourcesArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param LoadedSourcesArguments arguments: """ - self.type = 'request' - self.command = 'loadedSources' + self.type = "request" + self.command = "loadedSources" self.seq = seq if arguments is None: self.arguments = LoadedSourcesArguments() else: - self.arguments = LoadedSourcesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != LoadedSourcesArguments else arguments + self.arguments = ( + LoadedSourcesArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != LoadedSourcesArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -10074,7 +8766,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class LoadedSourcesArguments(BaseSchema): """ - Arguments for 'loadedSources' request. + Arguments for `loadedSources` request. Note: automatically generated code. Do not edit manually. """ @@ -10082,28 +8774,24 @@ class LoadedSourcesArguments(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct -@register_response('loadedSources') +@register_response("loadedSources") @register class LoadedSourcesResponse(BaseSchema): """ - Response to 'loadedSources' request. + Response to `loadedSources` request. Note: automatically generated code. Do not edit manually. """ @@ -10111,83 +8799,63 @@ class LoadedSourcesResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "sources": { - "type": "array", - "items": { - "$ref": "#/definitions/Source" - }, - "description": "Set of loaded sources." - } + "sources": {"type": "array", "items": {"$ref": "#/definitions/Source"}, "description": "Set of loaded sources."} }, - "required": [ - "sources" - ] - } + "required": ["sources"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param LoadedSourcesResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param LoadedSourcesResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = LoadedSourcesResponseBody() else: - self.body = LoadedSourcesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != LoadedSourcesResponseBody else body + self.body = ( + LoadedSourcesResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != LoadedSourcesResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -10197,25 +8865,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('evaluate') +@register_request("evaluate") @register class EvaluateRequest(BaseSchema): """ - Evaluates the given expression in the context of the top most stack frame. - + Evaluates the given expression in the context of the topmost stack frame. + The expression has access to any variables and arguments that are in scope. Note: automatically generated code. Do not edit manually. @@ -10224,55 +8892,46 @@ class EvaluateRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "evaluate" - ] - }, - "arguments": { - "type": "EvaluateArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["evaluate"]}, + "arguments": {"type": "EvaluateArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param EvaluateArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param EvaluateArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'evaluate' + self.type = "request" + self.command = "evaluate" if arguments is None: self.arguments = EvaluateArguments() else: - self.arguments = EvaluateArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != EvaluateArguments else arguments + self.arguments = ( + EvaluateArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != EvaluateArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -10281,52 +8940,45 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class EvaluateArguments(BaseSchema): """ - Arguments for 'evaluate' request. + Arguments for `evaluate` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "expression": { - "type": "string", - "description": "The expression to evaluate." - }, + "expression": {"type": "string", "description": "The expression to evaluate."}, "frameId": { "type": "integer", - "description": "Evaluate the expression in the scope of this stack frame. If not specified, the expression is evaluated in the global scope." + "description": "Evaluate the expression in the scope of this stack frame. If not specified, the expression is evaluated in the global scope.", }, "context": { "type": "string", - "_enum": [ - "watch", - "repl", - "hover", - "clipboard" - ], + "_enum": ["watch", "repl", "hover", "clipboard", "variables"], "enumDescriptions": [ - "evaluate is run in a watch.", - "evaluate is run from REPL console.", - "evaluate is run from a data hover.", - "evaluate is run to generate the value that will be stored in the clipboard.\nThe attribute is only honored by a debug adapter if the capability 'supportsClipboardContext' is true." + "evaluate is called from a watch view context.", + "evaluate is called from a REPL context.", + "evaluate is called to generate the debug hover contents.\nThis value should only be used if the corresponding capability `supportsEvaluateForHovers` is True.", + "evaluate is called to generate clipboard contents.\nThis value should only be used if the corresponding capability `supportsClipboardContext` is True.", + "evaluate is called from a variables view context.", ], - "description": "The context in which the evaluate request is run." + "description": "The context in which the evaluate request is used.", }, "format": { - "description": "Specifies details on how to format the Evaluate result.\nThe attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true.", - "type": "ValueFormat" - } + "description": "Specifies details on how to format the result.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is True.", + "type": "ValueFormat", + }, } - __refs__ = set(['format']) + __refs__ = set(["format"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, expression, frameId=None, context=None, format=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string expression: The expression to evaluate. :param integer frameId: Evaluate the expression in the scope of this stack frame. If not specified, the expression is evaluated in the global scope. - :param string context: The context in which the evaluate request is run. - :param ValueFormat format: Specifies details on how to format the Evaluate result. - The attribute is only honored by a debug adapter if the capability 'supportsValueFormattingOptions' is true. + :param string context: The context in which the evaluate request is used. + :param ValueFormat format: Specifies details on how to format the result. + The attribute is only honored by a debug adapter if the corresponding capability `supportsValueFormattingOptions` is true. """ self.expression = expression self.frameId = frameId @@ -10334,16 +8986,15 @@ def __init__(self, expression, frameId=None, context=None, format=None, update_i if format is None: self.format = ValueFormat() else: - self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format + self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -10355,29 +9006,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'expression': expression, + "expression": expression, } if frameId is not None: - dct['frameId'] = frameId + dct["frameId"] = frameId if context is not None: - dct['context'] = context + dct["context"] = context if format is not None: - dct['format'] = format.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["format"] = format.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('evaluate') +@register_response("evaluate") @register class EvaluateResponse(BaseSchema): """ - Response to 'evaluate' request. + Response to `evaluate` request. Note: automatically generated code. Do not edit manually. """ @@ -10385,105 +9036,85 @@ class EvaluateResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "result": { - "type": "string", - "description": "The result of the evaluate request." - }, + "result": {"type": "string", "description": "The result of the evaluate request."}, "type": { "type": "string", - "description": "The optional type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is True.", }, "presentationHint": { "$ref": "#/definitions/VariablePresentationHint", - "description": "Properties of a evaluate result that can be used to determine how to render the result in the UI." + "description": "Properties of an evaluate result that can be used to determine how to render the result in the UI.", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the evaluate result is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "memoryReference": { "type": "string", - "description": "Optional memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute should be returned by a debug adapter if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request." - } + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, }, - "required": [ - "result", - "variablesReference" - ] - } + "required": ["result", "variablesReference"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param EvaluateResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param EvaluateResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = EvaluateResponseBody() else: - self.body = EvaluateResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != EvaluateResponseBody else body + self.body = ( + EvaluateResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != EvaluateResponseBody else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -10493,32 +9124,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('setExpression') +@register_request("setExpression") @register class SetExpressionRequest(BaseSchema): """ - Evaluates the given 'value' expression and assigns it to the 'expression' which must be a modifiable + Evaluates the given `value` expression and assigns it to the `expression` which must be a modifiable l-value. - + The expressions have access to any variables and arguments that are in scope of the specified frame. - - Clients should only call this request if the capability 'supportsSetExpression' is true. - - If a debug adapter implements both setExpression and setVariable, a client will only use - setExpression if the variable has an evaluateName property. + + Clients should only call this request if the corresponding capability `supportsSetExpression` is + true. + + If a debug adapter implements both `setExpression` and `setVariable`, a client uses `setExpression` + if the variable has an `evaluateName` property. Note: automatically generated code. Do not edit manually. """ @@ -10526,55 +9158,46 @@ class SetExpressionRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setExpression" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "SetExpressionArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setExpression"]}, + "arguments": {"type": "SetExpressionArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetExpressionArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetExpressionArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setExpression' + self.type = "request" + self.command = "setExpression" if arguments is None: self.arguments = SetExpressionArguments() else: - self.arguments = SetExpressionArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetExpressionArguments else arguments + self.arguments = ( + SetExpressionArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetExpressionArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -10583,32 +9206,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SetExpressionArguments(BaseSchema): """ - Arguments for 'setExpression' request. + Arguments for `setExpression` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "expression": { - "type": "string", - "description": "The l-value expression to assign to." - }, - "value": { - "type": "string", - "description": "The value expression to assign to the l-value expression." - }, + "expression": {"type": "string", "description": "The l-value expression to assign to."}, + "value": {"type": "string", "description": "The value expression to assign to the l-value expression."}, "frameId": { "type": "integer", - "description": "Evaluate the expressions in the scope of this stack frame. If not specified, the expressions are evaluated in the global scope." + "description": "Evaluate the expressions in the scope of this stack frame. If not specified, the expressions are evaluated in the global scope.", }, - "format": { - "description": "Specifies how the resulting value should be formatted.", - "type": "ValueFormat" - } + "format": {"description": "Specifies how the resulting value should be formatted.", "type": "ValueFormat"}, } - __refs__ = set(['format']) + __refs__ = set(["format"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, expression, value, frameId=None, format=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -10623,16 +9237,15 @@ def __init__(self, expression, value, frameId=None, format=None, update_ids_from if format is None: self.format = ValueFormat() else: - self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format + self.format = ValueFormat(update_ids_from_dap=update_ids_from_dap, **format) if format.__class__ != ValueFormat else format if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -10644,28 +9257,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'expression': expression, - 'value': value, + "expression": expression, + "value": value, } if frameId is not None: - dct['frameId'] = frameId + dct["frameId"] = frameId if format is not None: - dct['format'] = format.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["format"] = format.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('setExpression') +@register_response("setExpression") @register class SetExpressionResponse(BaseSchema): """ - Response to 'setExpression' request. + Response to `setExpression` request. Note: automatically generated code. Do not edit manually. """ @@ -10673,100 +9286,87 @@ class SetExpressionResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "value": { - "type": "string", - "description": "The new value of the expression." - }, + "value": {"type": "string", "description": "The new value of the expression."}, "type": { "type": "string", - "description": "The optional type of the value.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the value.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is True.", }, "presentationHint": { "$ref": "#/definitions/VariablePresentationHint", - "description": "Properties of a value that can be used to determine how to render the result in the UI." + "description": "Properties of a value that can be used to determine how to render the result in the UI.", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." - } + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, }, - "required": [ - "value" - ] - } + "required": ["value"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param SetExpressionResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param SetExpressionResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = SetExpressionResponseBody() else: - self.body = SetExpressionResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != SetExpressionResponseBody else body + self.body = ( + SetExpressionResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != SetExpressionResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -10776,31 +9376,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('stepInTargets') +@register_request("stepInTargets") @register class StepInTargetsRequest(BaseSchema): """ - This request retrieves the possible stepIn targets for the specified stack frame. - - These targets can be used in the 'stepIn' request. - - The StepInTargets may only be called if the 'supportsStepInTargetsRequest' capability exists and is - true. - - Clients should only call this request if the capability 'supportsStepInTargetsRequest' is true. + This request retrieves the possible step-in targets for the specified stack frame. + + These targets can be used in the `stepIn` request. + + Clients should only call this request if the corresponding capability `supportsStepInTargetsRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -10808,55 +9406,46 @@ class StepInTargetsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "stepInTargets" - ] - }, - "arguments": { - "type": "StepInTargetsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["stepInTargets"]}, + "arguments": {"type": "StepInTargetsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param StepInTargetsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param StepInTargetsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'stepInTargets' + self.type = "request" + self.command = "stepInTargets" if arguments is None: self.arguments = StepInTargetsArguments() else: - self.arguments = StepInTargetsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != StepInTargetsArguments else arguments + self.arguments = ( + StepInTargetsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != StepInTargetsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -10865,35 +9454,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StepInTargetsArguments(BaseSchema): """ - Arguments for 'stepInTargets' request. + Arguments for `stepInTargets` request. Note: automatically generated code. Do not edit manually. """ - __props__ = { - "frameId": { - "type": "integer", - "description": "The stack frame for which to retrieve the possible stepIn targets." - } - } + __props__ = {"frameId": {"type": "integer", "description": "The stack frame for which to retrieve the possible step-in targets."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, frameId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer frameId: The stack frame for which to retrieve the possible stepIn targets. + :param integer frameId: The stack frame for which to retrieve the possible step-in targets. """ self.frameId = frameId if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -10902,23 +9485,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'frameId': frameId, + "frameId": frameId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('stepInTargets') +@register_response("stepInTargets") @register class StepInTargetsResponse(BaseSchema): """ - Response to 'stepInTargets' request. + Response to `stepInTargets` request. Note: automatically generated code. Do not edit manually. """ @@ -10926,83 +9509,67 @@ class StepInTargetsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "targets": { "type": "array", - "items": { - "$ref": "#/definitions/StepInTarget" - }, - "description": "The possible stepIn targets of the specified source location." + "items": {"$ref": "#/definitions/StepInTarget"}, + "description": "The possible step-in targets of the specified source location.", } }, - "required": [ - "targets" - ] - } + "required": ["targets"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param StepInTargetsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param StepInTargetsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = StepInTargetsResponseBody() else: - self.body = StepInTargetsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != StepInTargetsResponseBody else body + self.body = ( + StepInTargetsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != StepInTargetsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -11012,28 +9579,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('gotoTargets') +@register_request("gotoTargets") @register class GotoTargetsRequest(BaseSchema): """ This request retrieves the possible goto targets for the specified source location. - - These targets can be used in the 'goto' request. - - Clients should only call this request if the capability 'supportsGotoTargetsRequest' is true. + + These targets can be used in the `goto` request. + + Clients should only call this request if the corresponding capability `supportsGotoTargetsRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -11041,55 +9609,46 @@ class GotoTargetsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "gotoTargets" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "GotoTargetsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["gotoTargets"]}, + "arguments": {"type": "GotoTargetsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param GotoTargetsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param GotoTargetsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'gotoTargets' + self.type = "request" + self.command = "gotoTargets" if arguments is None: self.arguments = GotoTargetsArguments() else: - self.arguments = GotoTargetsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != GotoTargetsArguments else arguments + self.arguments = ( + GotoTargetsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != GotoTargetsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -11098,63 +9657,56 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class GotoTargetsArguments(BaseSchema): """ - Arguments for 'gotoTargets' request. + Arguments for `gotoTargets` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "source": { - "description": "The source location for which the goto targets are determined.", - "type": "Source" - }, - "line": { - "type": "integer", - "description": "The line location for which the goto targets are determined." - }, + "source": {"description": "The source location for which the goto targets are determined.", "type": "Source"}, + "line": {"type": "integer", "description": "The line location for which the goto targets are determined."}, "column": { "type": "integer", - "description": "An optional column location for which the goto targets are determined." - } + "description": "The position within `line` for which the goto targets are determined. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", + }, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, source, line, column=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param Source source: The source location for which the goto targets are determined. :param integer line: The line location for which the goto targets are determined. - :param integer column: An optional column location for which the goto targets are determined. + :param integer column: The position within `line` for which the goto targets are determined. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. """ if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.line = line self.column = column self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) source = self.source line = self.line column = self.column dct = { - 'source': source.to_dict(update_ids_to_dap=update_ids_to_dap), - 'line': line, + "source": source.to_dict(update_ids_to_dap=update_ids_to_dap), + "line": line, } if column is not None: - dct['column'] = column + dct["column"] = column dct.update(self.kwargs) return dct -@register_response('gotoTargets') +@register_response("gotoTargets") @register class GotoTargetsResponse(BaseSchema): """ - Response to 'gotoTargets' request. + Response to `gotoTargets` request. Note: automatically generated code. Do not edit manually. """ @@ -11162,83 +9714,67 @@ class GotoTargetsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "targets": { "type": "array", - "items": { - "$ref": "#/definitions/GotoTarget" - }, - "description": "The possible goto targets of the specified location." + "items": {"$ref": "#/definitions/GotoTarget"}, + "description": "The possible goto targets of the specified location.", } }, - "required": [ - "targets" - ] - } + "required": ["targets"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param GotoTargetsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param GotoTargetsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = GotoTargetsResponseBody() else: - self.body = GotoTargetsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != GotoTargetsResponseBody else body + self.body = ( + GotoTargetsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != GotoTargetsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -11248,26 +9784,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('completions') +@register_request("completions") @register class CompletionsRequest(BaseSchema): """ Returns a list of possible completions for a given caret position and text. - - Clients should only call this request if the capability 'supportsCompletionsRequest' is true. + + Clients should only call this request if the corresponding capability `supportsCompletionsRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -11275,55 +9812,46 @@ class CompletionsRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "completions" - ] - }, - "arguments": { - "type": "CompletionsArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["completions"]}, + "arguments": {"type": "CompletionsArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param CompletionsArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param CompletionsArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'completions' + self.type = "request" + self.command = "completions" if arguments is None: self.arguments = CompletionsArguments() else: - self.arguments = CompletionsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != CompletionsArguments else arguments + self.arguments = ( + CompletionsArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != CompletionsArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -11332,7 +9860,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class CompletionsArguments(BaseSchema): """ - Arguments for 'completions' request. + Arguments for `completions` request. Note: automatically generated code. Do not edit manually. """ @@ -11340,31 +9868,31 @@ class CompletionsArguments(BaseSchema): __props__ = { "frameId": { "type": "integer", - "description": "Returns completions in the scope of this stack frame. If not specified, the completions are returned for the global scope." + "description": "Returns completions in the scope of this stack frame. If not specified, the completions are returned for the global scope.", }, "text": { "type": "string", - "description": "One or more source lines. Typically this is the text a user has typed into the debug console before he asked for completion." + "description": "One or more source lines. Typically this is the text users have typed into the debug console before they asked for completion.", }, "column": { "type": "integer", - "description": "The character position for which to determine the completion proposals." + "description": "The position within `text` for which to determine the completion proposals. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, "line": { "type": "integer", - "description": "An optional line for which to determine the completion proposals. If missing the first line of the text is assumed." - } + "description": "A line for which to determine the completion proposals. If missing the first line of the text is assumed.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, text, column, frameId=None, line=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string text: One or more source lines. Typically this is the text a user has typed into the debug console before he asked for completion. - :param integer column: The character position for which to determine the completion proposals. + :param string text: One or more source lines. Typically this is the text users have typed into the debug console before they asked for completion. + :param integer column: The position within `text` for which to determine the completion proposals. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. :param integer frameId: Returns completions in the scope of this stack frame. If not specified, the completions are returned for the global scope. - :param integer line: An optional line for which to determine the completion proposals. If missing the first line of the text is assumed. + :param integer line: A line for which to determine the completion proposals. If missing the first line of the text is assumed. """ self.text = text self.column = column @@ -11373,12 +9901,11 @@ def __init__(self, text, column, frameId=None, line=None, update_ids_from_dap=Fa if update_ids_from_dap: self.frameId = self._translate_id_from_dap(self.frameId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_from_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_from_dap(dct["frameId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -11390,28 +9917,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if frameId is not None: frameId = self._translate_id_to_dap(frameId) dct = { - 'text': text, - 'column': column, + "text": text, + "column": column, } if frameId is not None: - dct['frameId'] = frameId + dct["frameId"] = frameId if line is not None: - dct['line'] = line + dct["line"] = line dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'frameId' in dct: - dct['frameId'] = cls._translate_id_to_dap(dct['frameId']) + if "frameId" in dct: + dct["frameId"] = cls._translate_id_to_dap(dct["frameId"]) return dct -@register_response('completions') +@register_response("completions") @register class CompletionsResponse(BaseSchema): """ - Response to 'completions' request. + Response to `completions` request. Note: automatically generated code. Do not edit manually. """ @@ -11419,83 +9946,67 @@ class CompletionsResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "targets": { "type": "array", - "items": { - "$ref": "#/definitions/CompletionItem" - }, - "description": "The possible completions for ." + "items": {"$ref": "#/definitions/CompletionItem"}, + "description": "The possible completions for .", } }, - "required": [ - "targets" - ] - } + "required": ["targets"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param CompletionsResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param CompletionsResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = CompletionsResponseBody() else: - self.body = CompletionsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != CompletionsResponseBody else body + self.body = ( + CompletionsResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != CompletionsResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -11505,26 +10016,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('exceptionInfo') +@register_request("exceptionInfo") @register class ExceptionInfoRequest(BaseSchema): """ Retrieves the details of the exception that caused this event to be raised. - - Clients should only call this request if the capability 'supportsExceptionInfoRequest' is true. + + Clients should only call this request if the corresponding capability `supportsExceptionInfoRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -11532,55 +10044,46 @@ class ExceptionInfoRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "exceptionInfo" - ] - }, - "arguments": { - "type": "ExceptionInfoArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["exceptionInfo"]}, + "arguments": {"type": "ExceptionInfoArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param ExceptionInfoArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param ExceptionInfoArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'exceptionInfo' + self.type = "request" + self.command = "exceptionInfo" if arguments is None: self.arguments = ExceptionInfoArguments() else: - self.arguments = ExceptionInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ExceptionInfoArguments else arguments + self.arguments = ( + ExceptionInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ExceptionInfoArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -11589,20 +10092,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ExceptionInfoArguments(BaseSchema): """ - Arguments for 'exceptionInfo' request. + Arguments for `exceptionInfo` request. Note: automatically generated code. Do not edit manually. """ - __props__ = { - "threadId": { - "type": "integer", - "description": "Thread for which exception information should be retrieved." - } - } + __props__ = {"threadId": {"type": "integer", "description": "Thread for which exception information should be retrieved."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -11612,12 +10110,11 @@ def __init__(self, threadId, update_ids_from_dap=False, **kwargs): # noqa (upda if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -11626,23 +10123,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct -@register_response('exceptionInfo') +@register_response("exceptionInfo") @register class ExceptionInfoResponse(BaseSchema): """ - Response to 'exceptionInfo' request. + Response to `exceptionInfo` request. Note: automatically generated code. Do not edit manually. """ @@ -11650,93 +10147,69 @@ class ExceptionInfoResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "exceptionId": { - "type": "string", - "description": "ID of the exception that was thrown." - }, - "description": { - "type": "string", - "description": "Descriptive text for the exception provided by the debug adapter." - }, + "exceptionId": {"type": "string", "description": "ID of the exception that was thrown."}, + "description": {"type": "string", "description": "Descriptive text for the exception."}, "breakMode": { "$ref": "#/definitions/ExceptionBreakMode", - "description": "Mode that caused the exception notification to be raised." + "description": "Mode that caused the exception notification to be raised.", }, - "details": { - "$ref": "#/definitions/ExceptionDetails", - "description": "Detailed information about the exception." - } + "details": {"$ref": "#/definitions/ExceptionDetails", "description": "Detailed information about the exception."}, }, - "required": [ - "exceptionId", - "breakMode" - ] - } + "required": ["exceptionId", "breakMode"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param ExceptionInfoResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param ExceptionInfoResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = ExceptionInfoResponseBody() else: - self.body = ExceptionInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ExceptionInfoResponseBody else body + self.body = ( + ExceptionInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != ExceptionInfoResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -11746,26 +10219,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct -@register_request('readMemory') +@register_request("readMemory") @register class ReadMemoryRequest(BaseSchema): """ Reads bytes from memory at the provided location. - - Clients should only call this request if the capability 'supportsReadMemoryRequest' is true. + + Clients should only call this request if the corresponding capability `supportsReadMemoryRequest` is + true. Note: automatically generated code. Do not edit manually. """ @@ -11773,55 +10247,46 @@ class ReadMemoryRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "readMemory" - ] - }, - "arguments": { - "type": "ReadMemoryArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["readMemory"]}, + "arguments": {"type": "ReadMemoryArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param ReadMemoryArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param ReadMemoryArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'readMemory' + self.type = "request" + self.command = "readMemory" if arguments is None: self.arguments = ReadMemoryArguments() else: - self.arguments = ReadMemoryArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != ReadMemoryArguments else arguments + self.arguments = ( + ReadMemoryArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != ReadMemoryArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -11830,60 +10295,53 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ReadMemoryArguments(BaseSchema): """ - Arguments for 'readMemory' request. + Arguments for `readMemory` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "memoryReference": { - "type": "string", - "description": "Memory reference to the base location from which data should be read." - }, + "memoryReference": {"type": "string", "description": "Memory reference to the base location from which data should be read."}, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before reading data. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before reading data. Can be negative.", }, - "count": { - "type": "integer", - "description": "Number of bytes to read at the specified location and offset." - } + "count": {"type": "integer", "description": "Number of bytes to read at the specified location and offset."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, memoryReference, count, offset=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string memoryReference: Memory reference to the base location from which data should be read. :param integer count: Number of bytes to read at the specified location and offset. - :param integer offset: Optional offset (in bytes) to be applied to the reference location before reading data. Can be negative. + :param integer offset: Offset (in bytes) to be applied to the reference location before reading data. Can be negative. """ self.memoryReference = memoryReference self.count = count self.offset = offset self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) memoryReference = self.memoryReference count = self.count offset = self.offset dct = { - 'memoryReference': memoryReference, - 'count': count, + "memoryReference": memoryReference, + "count": count, } if offset is not None: - dct['offset'] = offset + dct["offset"] = offset dct.update(self.kwargs) return dct -@register_response('readMemory') +@register_response("readMemory") @register class ReadMemoryResponse(BaseSchema): """ - Response to 'readMemory' request. + Response to `readMemory` request. Note: automatically generated code. Do not edit manually. """ @@ -11891,76 +10349,59 @@ class ReadMemoryResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "address": { "type": "string", - "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with '0x', or as a decimal value otherwise." + "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with `0x`, or as a decimal value otherwise.", }, "unreadableBytes": { "type": "integer", - "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that must be skipped before a subsequent 'readMemory' request will succeed." + "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that should be skipped before a subsequent `readMemory` request succeeds.", }, "data": { "type": "string", - "description": "The bytes read from memory, encoded using base64." - } + "description": "The bytes read from memory, encoded using base64. If the decoded length of `data` is less than the requested `count` in the original `readMemory` request, and `unreadableBytes` is zero or omitted, then the client should assume it's reached the end of readable memory.", + }, }, - "required": [ - "address" - ] - } + "required": ["address"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ReadMemoryResponseBody body: + :param ReadMemoryResponseBody body: """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -11969,10 +10410,13 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non if body is None: self.body = ReadMemoryResponseBody() else: - self.body = ReadMemoryResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != ReadMemoryResponseBody else body + self.body = ( + ReadMemoryResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != ReadMemoryResponseBody + else body + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -11982,27 +10426,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_request('writeMemory') +@register_request("writeMemory") @register class WriteMemoryRequest(BaseSchema): """ Writes bytes to memory at the provided location. - - Clients should only call this request if the capability 'supportsWriteMemoryRequest' is true. + + Clients should only call this request if the corresponding capability `supportsWriteMemoryRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -12010,55 +10455,46 @@ class WriteMemoryRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "writeMemory" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "WriteMemoryArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["writeMemory"]}, + "arguments": {"type": "WriteMemoryArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param WriteMemoryArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param WriteMemoryArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'writeMemory' + self.type = "request" + self.command = "writeMemory" if arguments is None: self.arguments = WriteMemoryArguments() else: - self.arguments = WriteMemoryArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != WriteMemoryArguments else arguments + self.arguments = ( + WriteMemoryArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != WriteMemoryArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -12067,39 +10503,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class WriteMemoryArguments(BaseSchema): """ - Arguments for 'writeMemory' request. + Arguments for `writeMemory` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "memoryReference": { - "type": "string", - "description": "Memory reference to the base location to which data should be written." - }, + "memoryReference": {"type": "string", "description": "Memory reference to the base location to which data should be written."}, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before writing data. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before writing data. Can be negative.", }, "allowPartial": { "type": "boolean", - "description": "Optional property to control partial writes. If true, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the 'offset' and 'bytesWritten' properties.\nIf false or missing, a debug adapter should attempt to verify the region is writable before writing, and fail the response if it is not." + "description": "Property to control partial writes. If True, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the `offset` and `bytesWritten` properties.\nIf false or missing, a debug adapter should attempt to verify the region is writable before writing, and fail the response if it is not.", }, - "data": { - "type": "string", - "description": "Bytes to write, encoded using base64." - } + "data": {"type": "string", "description": "Bytes to write, encoded using base64."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, memoryReference, data, offset=None, allowPartial=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string memoryReference: Memory reference to the base location to which data should be written. :param string data: Bytes to write, encoded using base64. - :param integer offset: Optional offset (in bytes) to be applied to the reference location before writing data. Can be negative. - :param boolean allowPartial: Optional property to control partial writes. If true, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the 'offset' and 'bytesWritten' properties. + :param integer offset: Offset (in bytes) to be applied to the reference location before writing data. Can be negative. + :param boolean allowPartial: Property to control partial writes. If true, the debug adapter should attempt to write memory even if the entire memory region is not writable. In such a case the debug adapter should stop after hitting the first byte of memory that cannot be written and return the number of bytes written in the response via the `offset` and `bytesWritten` properties. If false or missing, a debug adapter should attempt to verify the region is writable before writing, and fail the response if it is not. """ self.memoryReference = memoryReference @@ -12108,29 +10538,28 @@ def __init__(self, memoryReference, data, offset=None, allowPartial=None, update self.allowPartial = allowPartial self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) memoryReference = self.memoryReference data = self.data offset = self.offset allowPartial = self.allowPartial dct = { - 'memoryReference': memoryReference, - 'data': data, + "memoryReference": memoryReference, + "data": data, } if offset is not None: - dct['offset'] = offset + dct["offset"] = offset if allowPartial is not None: - dct['allowPartial'] = allowPartial + dct["allowPartial"] = allowPartial dct.update(self.kwargs) return dct -@register_response('writeMemory') +@register_response("writeMemory") @register class WriteMemoryResponse(BaseSchema): """ - Response to 'writeMemory' request. + Response to `writeMemory` request. Note: automatically generated code. Do not edit manually. """ @@ -12138,69 +10567,54 @@ class WriteMemoryResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "offset": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the offset of the first byte of data successfully written. Can be negative." + "description": "Property that should be returned when `allowPartial` is True to indicate the offset of the first byte of data successfully written. Can be negative.", }, "bytesWritten": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the number of bytes starting from address that were successfully written." - } - } - } + "description": "Property that should be returned when `allowPartial` is True to indicate the number of bytes starting from address that were successfully written.", + }, + }, + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param WriteMemoryResponseBody body: + :param WriteMemoryResponseBody body: """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -12209,10 +10623,13 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non if body is None: self.body = WriteMemoryResponseBody() else: - self.body = WriteMemoryResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != WriteMemoryResponseBody else body + self.body = ( + WriteMemoryResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != WriteMemoryResponseBody + else body + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -12222,27 +10639,28 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct -@register_request('disassemble') +@register_request("disassemble") @register class DisassembleRequest(BaseSchema): """ Disassembles code stored at the provided location. - - Clients should only call this request if the capability 'supportsDisassembleRequest' is true. + + Clients should only call this request if the corresponding capability `supportsDisassembleRequest` + is true. Note: automatically generated code. Do not edit manually. """ @@ -12250,55 +10668,46 @@ class DisassembleRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "disassemble" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "DisassembleArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["disassemble"]}, + "arguments": {"type": "DisassembleArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param DisassembleArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param DisassembleArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'disassemble' + self.type = "request" + self.command = "disassemble" if arguments is None: self.arguments = DisassembleArguments() else: - self.arguments = DisassembleArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != DisassembleArguments else arguments + self.arguments = ( + DisassembleArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != DisassembleArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -12307,7 +10716,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class DisassembleArguments(BaseSchema): """ - Arguments for 'disassemble' request. + Arguments for `disassemble` request. Note: automatically generated code. Do not edit manually. """ @@ -12315,36 +10724,45 @@ class DisassembleArguments(BaseSchema): __props__ = { "memoryReference": { "type": "string", - "description": "Memory reference to the base location containing the instructions to disassemble." + "description": "Memory reference to the base location containing the instructions to disassemble.", }, "offset": { "type": "integer", - "description": "Optional offset (in bytes) to be applied to the reference location before disassembling. Can be negative." + "description": "Offset (in bytes) to be applied to the reference location before disassembling. Can be negative.", }, "instructionOffset": { "type": "integer", - "description": "Optional offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative." + "description": "Offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative.", }, "instructionCount": { "type": "integer", - "description": "Number of instructions to disassemble starting at the specified location and offset.\nAn adapter must return exactly this number of instructions - any unavailable instructions should be replaced with an implementation-defined 'invalid instruction' value." + "description": "Number of instructions to disassemble starting at the specified location and offset.\nAn adapter must return exactly this number of instructions - any unavailable instructions should be replaced with an implementation-defined 'invalid instruction' value.", }, "resolveSymbols": { "type": "boolean", - "description": "If true, the adapter should attempt to resolve memory addresses and other values to symbolic names." - } + "description": "If True, the adapter should attempt to resolve memory addresses and other values to symbolic names.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, memoryReference, instructionCount, offset=None, instructionOffset=None, resolveSymbols=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, + memoryReference, + instructionCount, + offset=None, + instructionOffset=None, + resolveSymbols=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string memoryReference: Memory reference to the base location containing the instructions to disassemble. :param integer instructionCount: Number of instructions to disassemble starting at the specified location and offset. An adapter must return exactly this number of instructions - any unavailable instructions should be replaced with an implementation-defined 'invalid instruction' value. - :param integer offset: Optional offset (in bytes) to be applied to the reference location before disassembling. Can be negative. - :param integer instructionOffset: Optional offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative. + :param integer offset: Offset (in bytes) to be applied to the reference location before disassembling. Can be negative. + :param integer instructionOffset: Offset (in instructions) to be applied after the byte offset (if any) before disassembling. Can be negative. :param boolean resolveSymbols: If true, the adapter should attempt to resolve memory addresses and other values to symbolic names. """ self.memoryReference = memoryReference @@ -12354,7 +10772,6 @@ def __init__(self, memoryReference, instructionCount, offset=None, instructionOf self.resolveSymbols = resolveSymbols self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) memoryReference = self.memoryReference instructionCount = self.instructionCount @@ -12362,24 +10779,24 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un instructionOffset = self.instructionOffset resolveSymbols = self.resolveSymbols dct = { - 'memoryReference': memoryReference, - 'instructionCount': instructionCount, + "memoryReference": memoryReference, + "instructionCount": instructionCount, } if offset is not None: - dct['offset'] = offset + dct["offset"] = offset if instructionOffset is not None: - dct['instructionOffset'] = instructionOffset + dct["instructionOffset"] = instructionOffset if resolveSymbols is not None: - dct['resolveSymbols'] = resolveSymbols + dct["resolveSymbols"] = resolveSymbols dct.update(self.kwargs) return dct -@register_response('disassemble') +@register_response("disassemble") @register class DisassembleResponse(BaseSchema): """ - Response to 'disassemble' request. + Response to `disassemble` request. Note: automatically generated code. Do not edit manually. """ @@ -12387,71 +10804,52 @@ class DisassembleResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "instructions": { "type": "array", - "items": { - "$ref": "#/definitions/DisassembledInstruction" - }, - "description": "The list of disassembled instructions." + "items": {"$ref": "#/definitions/DisassembledInstruction"}, + "description": "The list of disassembled instructions.", } }, - "required": [ - "instructions" - ] - } + "required": ["instructions"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param DisassembleResponseBody body: + :param DisassembleResponseBody body: """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -12460,10 +10858,13 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non if body is None: self.body = DisassembleResponseBody() else: - self.body = DisassembleResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != DisassembleResponseBody else body + self.body = ( + DisassembleResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != DisassembleResponseBody + else body + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -12473,16 +10874,16 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["body"] = body.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -12498,218 +10899,199 @@ class Capabilities(BaseSchema): __props__ = { "supportsConfigurationDoneRequest": { "type": "boolean", - "description": "The debug adapter supports the 'configurationDone' request." - }, - "supportsFunctionBreakpoints": { - "type": "boolean", - "description": "The debug adapter supports function breakpoints." - }, - "supportsConditionalBreakpoints": { - "type": "boolean", - "description": "The debug adapter supports conditional breakpoints." + "description": "The debug adapter supports the `configurationDone` request.", }, + "supportsFunctionBreakpoints": {"type": "boolean", "description": "The debug adapter supports function breakpoints."}, + "supportsConditionalBreakpoints": {"type": "boolean", "description": "The debug adapter supports conditional breakpoints."}, "supportsHitConditionalBreakpoints": { "type": "boolean", - "description": "The debug adapter supports breakpoints that break execution after a specified number of hits." + "description": "The debug adapter supports breakpoints that break execution after a specified number of hits.", }, "supportsEvaluateForHovers": { "type": "boolean", - "description": "The debug adapter supports a (side effect free) evaluate request for data hovers." + "description": "The debug adapter supports a (side effect free) `evaluate` request for data hovers.", }, "exceptionBreakpointFilters": { "type": "array", - "items": { - "$ref": "#/definitions/ExceptionBreakpointsFilter" - }, - "description": "Available exception filter options for the 'setExceptionBreakpoints' request." + "items": {"$ref": "#/definitions/ExceptionBreakpointsFilter"}, + "description": "Available exception filter options for the `setExceptionBreakpoints` request.", }, "supportsStepBack": { "type": "boolean", - "description": "The debug adapter supports stepping back via the 'stepBack' and 'reverseContinue' requests." - }, - "supportsSetVariable": { - "type": "boolean", - "description": "The debug adapter supports setting a variable to a value." - }, - "supportsRestartFrame": { - "type": "boolean", - "description": "The debug adapter supports restarting a frame." - }, - "supportsGotoTargetsRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'gotoTargets' request." - }, - "supportsStepInTargetsRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'stepInTargets' request." - }, - "supportsCompletionsRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'completions' request." + "description": "The debug adapter supports stepping back via the `stepBack` and `reverseContinue` requests.", }, + "supportsSetVariable": {"type": "boolean", "description": "The debug adapter supports setting a variable to a value."}, + "supportsRestartFrame": {"type": "boolean", "description": "The debug adapter supports restarting a frame."}, + "supportsGotoTargetsRequest": {"type": "boolean", "description": "The debug adapter supports the `gotoTargets` request."}, + "supportsStepInTargetsRequest": {"type": "boolean", "description": "The debug adapter supports the `stepInTargets` request."}, + "supportsCompletionsRequest": {"type": "boolean", "description": "The debug adapter supports the `completions` request."}, "completionTriggerCharacters": { "type": "array", - "items": { - "type": "string" - }, - "description": "The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the '.' character." - }, - "supportsModulesRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'modules' request." + "items": {"type": "string"}, + "description": "The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the `.` character.", }, + "supportsModulesRequest": {"type": "boolean", "description": "The debug adapter supports the `modules` request."}, "additionalModuleColumns": { "type": "array", - "items": { - "$ref": "#/definitions/ColumnDescriptor" - }, - "description": "The set of additional module information exposed by the debug adapter." + "items": {"$ref": "#/definitions/ColumnDescriptor"}, + "description": "The set of additional module information exposed by the debug adapter.", }, "supportedChecksumAlgorithms": { "type": "array", - "items": { - "$ref": "#/definitions/ChecksumAlgorithm" - }, - "description": "Checksum algorithms supported by the debug adapter." + "items": {"$ref": "#/definitions/ChecksumAlgorithm"}, + "description": "Checksum algorithms supported by the debug adapter.", }, "supportsRestartRequest": { "type": "boolean", - "description": "The debug adapter supports the 'restart' request. In this case a client should not implement 'restart' by terminating and relaunching the adapter but by calling the RestartRequest." + "description": "The debug adapter supports the `restart` request. In this case a client should not implement `restart` by terminating and relaunching the adapter but by calling the `restart` request.", }, "supportsExceptionOptions": { "type": "boolean", - "description": "The debug adapter supports 'exceptionOptions' on the setExceptionBreakpoints request." + "description": "The debug adapter supports `exceptionOptions` on the `setExceptionBreakpoints` request.", }, "supportsValueFormattingOptions": { "type": "boolean", - "description": "The debug adapter supports a 'format' attribute on the stackTraceRequest, variablesRequest, and evaluateRequest." - }, - "supportsExceptionInfoRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'exceptionInfo' request." + "description": "The debug adapter supports a `format` attribute on the `stackTrace`, `variables`, and `evaluate` requests.", }, + "supportsExceptionInfoRequest": {"type": "boolean", "description": "The debug adapter supports the `exceptionInfo` request."}, "supportTerminateDebuggee": { "type": "boolean", - "description": "The debug adapter supports the 'terminateDebuggee' attribute on the 'disconnect' request." + "description": "The debug adapter supports the `terminateDebuggee` attribute on the `disconnect` request.", }, "supportSuspendDebuggee": { "type": "boolean", - "description": "The debug adapter supports the 'suspendDebuggee' attribute on the 'disconnect' request." + "description": "The debug adapter supports the `suspendDebuggee` attribute on the `disconnect` request.", }, "supportsDelayedStackTraceLoading": { "type": "boolean", - "description": "The debug adapter supports the delayed loading of parts of the stack, which requires that both the 'startFrame' and 'levels' arguments and an optional 'totalFrames' result of the 'StackTrace' request are supported." - }, - "supportsLoadedSourcesRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'loadedSources' request." + "description": "The debug adapter supports the delayed loading of parts of the stack, which requires that both the `startFrame` and `levels` arguments and the `totalFrames` result of the `stackTrace` request are supported.", }, + "supportsLoadedSourcesRequest": {"type": "boolean", "description": "The debug adapter supports the `loadedSources` request."}, "supportsLogPoints": { "type": "boolean", - "description": "The debug adapter supports logpoints by interpreting the 'logMessage' attribute of the SourceBreakpoint." - }, - "supportsTerminateThreadsRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'terminateThreads' request." - }, - "supportsSetExpression": { - "type": "boolean", - "description": "The debug adapter supports the 'setExpression' request." - }, - "supportsTerminateRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'terminate' request." - }, - "supportsDataBreakpoints": { - "type": "boolean", - "description": "The debug adapter supports data breakpoints." - }, - "supportsReadMemoryRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'readMemory' request." - }, - "supportsWriteMemoryRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'writeMemory' request." - }, - "supportsDisassembleRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'disassemble' request." - }, - "supportsCancelRequest": { - "type": "boolean", - "description": "The debug adapter supports the 'cancel' request." - }, + "description": "The debug adapter supports log points by interpreting the `logMessage` attribute of the `SourceBreakpoint`.", + }, + "supportsTerminateThreadsRequest": {"type": "boolean", "description": "The debug adapter supports the `terminateThreads` request."}, + "supportsSetExpression": {"type": "boolean", "description": "The debug adapter supports the `setExpression` request."}, + "supportsTerminateRequest": {"type": "boolean", "description": "The debug adapter supports the `terminate` request."}, + "supportsDataBreakpoints": {"type": "boolean", "description": "The debug adapter supports data breakpoints."}, + "supportsReadMemoryRequest": {"type": "boolean", "description": "The debug adapter supports the `readMemory` request."}, + "supportsWriteMemoryRequest": {"type": "boolean", "description": "The debug adapter supports the `writeMemory` request."}, + "supportsDisassembleRequest": {"type": "boolean", "description": "The debug adapter supports the `disassemble` request."}, + "supportsCancelRequest": {"type": "boolean", "description": "The debug adapter supports the `cancel` request."}, "supportsBreakpointLocationsRequest": { "type": "boolean", - "description": "The debug adapter supports the 'breakpointLocations' request." + "description": "The debug adapter supports the `breakpointLocations` request.", }, "supportsClipboardContext": { "type": "boolean", - "description": "The debug adapter supports the 'clipboard' context value in the 'evaluate' request." + "description": "The debug adapter supports the `clipboard` context value in the `evaluate` request.", }, "supportsSteppingGranularity": { "type": "boolean", - "description": "The debug adapter supports stepping granularities (argument 'granularity') for the stepping requests." + "description": "The debug adapter supports stepping granularities (argument `granularity`) for the stepping requests.", }, "supportsInstructionBreakpoints": { "type": "boolean", - "description": "The debug adapter supports adding breakpoints based on instruction references." + "description": "The debug adapter supports adding breakpoints based on instruction references.", }, "supportsExceptionFilterOptions": { "type": "boolean", - "description": "The debug adapter supports 'filterOptions' as an argument on the 'setExceptionBreakpoints' request." + "description": "The debug adapter supports `filterOptions` as an argument on the `setExceptionBreakpoints` request.", }, "supportsSingleThreadExecutionRequests": { "type": "boolean", - "description": "The debug adapter supports the 'singleThread' property on the execution requests ('continue', 'next', 'stepIn', 'stepOut', 'reverseContinue', 'stepBack')." - } + "description": "The debug adapter supports the `singleThread` property on the execution requests (`continue`, `next`, `stepIn`, `stepOut`, `reverseContinue`, `stepBack`).", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakpoints=None, supportsConditionalBreakpoints=None, supportsHitConditionalBreakpoints=None, supportsEvaluateForHovers=None, exceptionBreakpointFilters=None, supportsStepBack=None, supportsSetVariable=None, supportsRestartFrame=None, supportsGotoTargetsRequest=None, supportsStepInTargetsRequest=None, supportsCompletionsRequest=None, completionTriggerCharacters=None, supportsModulesRequest=None, additionalModuleColumns=None, supportedChecksumAlgorithms=None, supportsRestartRequest=None, supportsExceptionOptions=None, supportsValueFormattingOptions=None, supportsExceptionInfoRequest=None, supportTerminateDebuggee=None, supportSuspendDebuggee=None, supportsDelayedStackTraceLoading=None, supportsLoadedSourcesRequest=None, supportsLogPoints=None, supportsTerminateThreadsRequest=None, supportsSetExpression=None, supportsTerminateRequest=None, supportsDataBreakpoints=None, supportsReadMemoryRequest=None, supportsWriteMemoryRequest=None, supportsDisassembleRequest=None, supportsCancelRequest=None, supportsBreakpointLocationsRequest=None, supportsClipboardContext=None, supportsSteppingGranularity=None, supportsInstructionBreakpoints=None, supportsExceptionFilterOptions=None, supportsSingleThreadExecutionRequests=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param boolean supportsConfigurationDoneRequest: The debug adapter supports the 'configurationDone' request. + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + supportsConfigurationDoneRequest=None, + supportsFunctionBreakpoints=None, + supportsConditionalBreakpoints=None, + supportsHitConditionalBreakpoints=None, + supportsEvaluateForHovers=None, + exceptionBreakpointFilters=None, + supportsStepBack=None, + supportsSetVariable=None, + supportsRestartFrame=None, + supportsGotoTargetsRequest=None, + supportsStepInTargetsRequest=None, + supportsCompletionsRequest=None, + completionTriggerCharacters=None, + supportsModulesRequest=None, + additionalModuleColumns=None, + supportedChecksumAlgorithms=None, + supportsRestartRequest=None, + supportsExceptionOptions=None, + supportsValueFormattingOptions=None, + supportsExceptionInfoRequest=None, + supportTerminateDebuggee=None, + supportSuspendDebuggee=None, + supportsDelayedStackTraceLoading=None, + supportsLoadedSourcesRequest=None, + supportsLogPoints=None, + supportsTerminateThreadsRequest=None, + supportsSetExpression=None, + supportsTerminateRequest=None, + supportsDataBreakpoints=None, + supportsReadMemoryRequest=None, + supportsWriteMemoryRequest=None, + supportsDisassembleRequest=None, + supportsCancelRequest=None, + supportsBreakpointLocationsRequest=None, + supportsClipboardContext=None, + supportsSteppingGranularity=None, + supportsInstructionBreakpoints=None, + supportsExceptionFilterOptions=None, + supportsSingleThreadExecutionRequests=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) + """ + :param boolean supportsConfigurationDoneRequest: The debug adapter supports the `configurationDone` request. :param boolean supportsFunctionBreakpoints: The debug adapter supports function breakpoints. :param boolean supportsConditionalBreakpoints: The debug adapter supports conditional breakpoints. :param boolean supportsHitConditionalBreakpoints: The debug adapter supports breakpoints that break execution after a specified number of hits. - :param boolean supportsEvaluateForHovers: The debug adapter supports a (side effect free) evaluate request for data hovers. - :param array exceptionBreakpointFilters: Available exception filter options for the 'setExceptionBreakpoints' request. - :param boolean supportsStepBack: The debug adapter supports stepping back via the 'stepBack' and 'reverseContinue' requests. + :param boolean supportsEvaluateForHovers: The debug adapter supports a (side effect free) `evaluate` request for data hovers. + :param array exceptionBreakpointFilters: Available exception filter options for the `setExceptionBreakpoints` request. + :param boolean supportsStepBack: The debug adapter supports stepping back via the `stepBack` and `reverseContinue` requests. :param boolean supportsSetVariable: The debug adapter supports setting a variable to a value. :param boolean supportsRestartFrame: The debug adapter supports restarting a frame. - :param boolean supportsGotoTargetsRequest: The debug adapter supports the 'gotoTargets' request. - :param boolean supportsStepInTargetsRequest: The debug adapter supports the 'stepInTargets' request. - :param boolean supportsCompletionsRequest: The debug adapter supports the 'completions' request. - :param array completionTriggerCharacters: The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the '.' character. - :param boolean supportsModulesRequest: The debug adapter supports the 'modules' request. + :param boolean supportsGotoTargetsRequest: The debug adapter supports the `gotoTargets` request. + :param boolean supportsStepInTargetsRequest: The debug adapter supports the `stepInTargets` request. + :param boolean supportsCompletionsRequest: The debug adapter supports the `completions` request. + :param array completionTriggerCharacters: The set of characters that should trigger completion in a REPL. If not specified, the UI should assume the `.` character. + :param boolean supportsModulesRequest: The debug adapter supports the `modules` request. :param array additionalModuleColumns: The set of additional module information exposed by the debug adapter. :param array supportedChecksumAlgorithms: Checksum algorithms supported by the debug adapter. - :param boolean supportsRestartRequest: The debug adapter supports the 'restart' request. In this case a client should not implement 'restart' by terminating and relaunching the adapter but by calling the RestartRequest. - :param boolean supportsExceptionOptions: The debug adapter supports 'exceptionOptions' on the setExceptionBreakpoints request. - :param boolean supportsValueFormattingOptions: The debug adapter supports a 'format' attribute on the stackTraceRequest, variablesRequest, and evaluateRequest. - :param boolean supportsExceptionInfoRequest: The debug adapter supports the 'exceptionInfo' request. - :param boolean supportTerminateDebuggee: The debug adapter supports the 'terminateDebuggee' attribute on the 'disconnect' request. - :param boolean supportSuspendDebuggee: The debug adapter supports the 'suspendDebuggee' attribute on the 'disconnect' request. - :param boolean supportsDelayedStackTraceLoading: The debug adapter supports the delayed loading of parts of the stack, which requires that both the 'startFrame' and 'levels' arguments and an optional 'totalFrames' result of the 'StackTrace' request are supported. - :param boolean supportsLoadedSourcesRequest: The debug adapter supports the 'loadedSources' request. - :param boolean supportsLogPoints: The debug adapter supports logpoints by interpreting the 'logMessage' attribute of the SourceBreakpoint. - :param boolean supportsTerminateThreadsRequest: The debug adapter supports the 'terminateThreads' request. - :param boolean supportsSetExpression: The debug adapter supports the 'setExpression' request. - :param boolean supportsTerminateRequest: The debug adapter supports the 'terminate' request. + :param boolean supportsRestartRequest: The debug adapter supports the `restart` request. In this case a client should not implement `restart` by terminating and relaunching the adapter but by calling the `restart` request. + :param boolean supportsExceptionOptions: The debug adapter supports `exceptionOptions` on the `setExceptionBreakpoints` request. + :param boolean supportsValueFormattingOptions: The debug adapter supports a `format` attribute on the `stackTrace`, `variables`, and `evaluate` requests. + :param boolean supportsExceptionInfoRequest: The debug adapter supports the `exceptionInfo` request. + :param boolean supportTerminateDebuggee: The debug adapter supports the `terminateDebuggee` attribute on the `disconnect` request. + :param boolean supportSuspendDebuggee: The debug adapter supports the `suspendDebuggee` attribute on the `disconnect` request. + :param boolean supportsDelayedStackTraceLoading: The debug adapter supports the delayed loading of parts of the stack, which requires that both the `startFrame` and `levels` arguments and the `totalFrames` result of the `stackTrace` request are supported. + :param boolean supportsLoadedSourcesRequest: The debug adapter supports the `loadedSources` request. + :param boolean supportsLogPoints: The debug adapter supports log points by interpreting the `logMessage` attribute of the `SourceBreakpoint`. + :param boolean supportsTerminateThreadsRequest: The debug adapter supports the `terminateThreads` request. + :param boolean supportsSetExpression: The debug adapter supports the `setExpression` request. + :param boolean supportsTerminateRequest: The debug adapter supports the `terminate` request. :param boolean supportsDataBreakpoints: The debug adapter supports data breakpoints. - :param boolean supportsReadMemoryRequest: The debug adapter supports the 'readMemory' request. - :param boolean supportsWriteMemoryRequest: The debug adapter supports the 'writeMemory' request. - :param boolean supportsDisassembleRequest: The debug adapter supports the 'disassemble' request. - :param boolean supportsCancelRequest: The debug adapter supports the 'cancel' request. - :param boolean supportsBreakpointLocationsRequest: The debug adapter supports the 'breakpointLocations' request. - :param boolean supportsClipboardContext: The debug adapter supports the 'clipboard' context value in the 'evaluate' request. - :param boolean supportsSteppingGranularity: The debug adapter supports stepping granularities (argument 'granularity') for the stepping requests. + :param boolean supportsReadMemoryRequest: The debug adapter supports the `readMemory` request. + :param boolean supportsWriteMemoryRequest: The debug adapter supports the `writeMemory` request. + :param boolean supportsDisassembleRequest: The debug adapter supports the `disassemble` request. + :param boolean supportsCancelRequest: The debug adapter supports the `cancel` request. + :param boolean supportsBreakpointLocationsRequest: The debug adapter supports the `breakpointLocations` request. + :param boolean supportsClipboardContext: The debug adapter supports the `clipboard` context value in the `evaluate` request. + :param boolean supportsSteppingGranularity: The debug adapter supports stepping granularities (argument `granularity`) for the stepping requests. :param boolean supportsInstructionBreakpoints: The debug adapter supports adding breakpoints based on instruction references. - :param boolean supportsExceptionFilterOptions: The debug adapter supports 'filterOptions' as an argument on the 'setExceptionBreakpoints' request. - :param boolean supportsSingleThreadExecutionRequests: The debug adapter supports the 'singleThread' property on the execution requests ('continue', 'next', 'stepIn', 'stepOut', 'reverseContinue', 'stepBack'). + :param boolean supportsExceptionFilterOptions: The debug adapter supports `filterOptions` as an argument on the `setExceptionBreakpoints` request. + :param boolean supportsSingleThreadExecutionRequests: The debug adapter supports the `singleThread` property on the execution requests (`continue`, `next`, `stepIn`, `stepOut`, `reverseContinue`, `stepBack`). """ self.supportsConfigurationDoneRequest = supportsConfigurationDoneRequest self.supportsFunctionBreakpoints = supportsFunctionBreakpoints @@ -12761,7 +11143,6 @@ def __init__(self, supportsConfigurationDoneRequest=None, supportsFunctionBreakp self.supportsSingleThreadExecutionRequests = supportsSingleThreadExecutionRequests self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) supportsConfigurationDoneRequest = self.supportsConfigurationDoneRequest supportsFunctionBreakpoints = self.supportsFunctionBreakpoints @@ -12810,86 +11191,97 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un supportsInstructionBreakpoints = self.supportsInstructionBreakpoints supportsExceptionFilterOptions = self.supportsExceptionFilterOptions supportsSingleThreadExecutionRequests = self.supportsSingleThreadExecutionRequests - dct = { - } + dct = {} if supportsConfigurationDoneRequest is not None: - dct['supportsConfigurationDoneRequest'] = supportsConfigurationDoneRequest + dct["supportsConfigurationDoneRequest"] = supportsConfigurationDoneRequest if supportsFunctionBreakpoints is not None: - dct['supportsFunctionBreakpoints'] = supportsFunctionBreakpoints + dct["supportsFunctionBreakpoints"] = supportsFunctionBreakpoints if supportsConditionalBreakpoints is not None: - dct['supportsConditionalBreakpoints'] = supportsConditionalBreakpoints + dct["supportsConditionalBreakpoints"] = supportsConditionalBreakpoints if supportsHitConditionalBreakpoints is not None: - dct['supportsHitConditionalBreakpoints'] = supportsHitConditionalBreakpoints + dct["supportsHitConditionalBreakpoints"] = supportsHitConditionalBreakpoints if supportsEvaluateForHovers is not None: - dct['supportsEvaluateForHovers'] = supportsEvaluateForHovers + dct["supportsEvaluateForHovers"] = supportsEvaluateForHovers if exceptionBreakpointFilters is not None: - dct['exceptionBreakpointFilters'] = [ExceptionBreakpointsFilter.update_dict_ids_to_dap(o) for o in exceptionBreakpointFilters] if (update_ids_to_dap and exceptionBreakpointFilters) else exceptionBreakpointFilters + dct["exceptionBreakpointFilters"] = ( + [ExceptionBreakpointsFilter.update_dict_ids_to_dap(o) for o in exceptionBreakpointFilters] + if (update_ids_to_dap and exceptionBreakpointFilters) + else exceptionBreakpointFilters + ) if supportsStepBack is not None: - dct['supportsStepBack'] = supportsStepBack + dct["supportsStepBack"] = supportsStepBack if supportsSetVariable is not None: - dct['supportsSetVariable'] = supportsSetVariable + dct["supportsSetVariable"] = supportsSetVariable if supportsRestartFrame is not None: - dct['supportsRestartFrame'] = supportsRestartFrame + dct["supportsRestartFrame"] = supportsRestartFrame if supportsGotoTargetsRequest is not None: - dct['supportsGotoTargetsRequest'] = supportsGotoTargetsRequest + dct["supportsGotoTargetsRequest"] = supportsGotoTargetsRequest if supportsStepInTargetsRequest is not None: - dct['supportsStepInTargetsRequest'] = supportsStepInTargetsRequest + dct["supportsStepInTargetsRequest"] = supportsStepInTargetsRequest if supportsCompletionsRequest is not None: - dct['supportsCompletionsRequest'] = supportsCompletionsRequest + dct["supportsCompletionsRequest"] = supportsCompletionsRequest if completionTriggerCharacters is not None: - dct['completionTriggerCharacters'] = completionTriggerCharacters + dct["completionTriggerCharacters"] = completionTriggerCharacters if supportsModulesRequest is not None: - dct['supportsModulesRequest'] = supportsModulesRequest + dct["supportsModulesRequest"] = supportsModulesRequest if additionalModuleColumns is not None: - dct['additionalModuleColumns'] = [ColumnDescriptor.update_dict_ids_to_dap(o) for o in additionalModuleColumns] if (update_ids_to_dap and additionalModuleColumns) else additionalModuleColumns + dct["additionalModuleColumns"] = ( + [ColumnDescriptor.update_dict_ids_to_dap(o) for o in additionalModuleColumns] + if (update_ids_to_dap and additionalModuleColumns) + else additionalModuleColumns + ) if supportedChecksumAlgorithms is not None: - dct['supportedChecksumAlgorithms'] = [ChecksumAlgorithm.update_dict_ids_to_dap(o) for o in supportedChecksumAlgorithms] if (update_ids_to_dap and supportedChecksumAlgorithms) else supportedChecksumAlgorithms + dct["supportedChecksumAlgorithms"] = ( + [ChecksumAlgorithm.update_dict_ids_to_dap(o) for o in supportedChecksumAlgorithms] + if (update_ids_to_dap and supportedChecksumAlgorithms) + else supportedChecksumAlgorithms + ) if supportsRestartRequest is not None: - dct['supportsRestartRequest'] = supportsRestartRequest + dct["supportsRestartRequest"] = supportsRestartRequest if supportsExceptionOptions is not None: - dct['supportsExceptionOptions'] = supportsExceptionOptions + dct["supportsExceptionOptions"] = supportsExceptionOptions if supportsValueFormattingOptions is not None: - dct['supportsValueFormattingOptions'] = supportsValueFormattingOptions + dct["supportsValueFormattingOptions"] = supportsValueFormattingOptions if supportsExceptionInfoRequest is not None: - dct['supportsExceptionInfoRequest'] = supportsExceptionInfoRequest + dct["supportsExceptionInfoRequest"] = supportsExceptionInfoRequest if supportTerminateDebuggee is not None: - dct['supportTerminateDebuggee'] = supportTerminateDebuggee + dct["supportTerminateDebuggee"] = supportTerminateDebuggee if supportSuspendDebuggee is not None: - dct['supportSuspendDebuggee'] = supportSuspendDebuggee + dct["supportSuspendDebuggee"] = supportSuspendDebuggee if supportsDelayedStackTraceLoading is not None: - dct['supportsDelayedStackTraceLoading'] = supportsDelayedStackTraceLoading + dct["supportsDelayedStackTraceLoading"] = supportsDelayedStackTraceLoading if supportsLoadedSourcesRequest is not None: - dct['supportsLoadedSourcesRequest'] = supportsLoadedSourcesRequest + dct["supportsLoadedSourcesRequest"] = supportsLoadedSourcesRequest if supportsLogPoints is not None: - dct['supportsLogPoints'] = supportsLogPoints + dct["supportsLogPoints"] = supportsLogPoints if supportsTerminateThreadsRequest is not None: - dct['supportsTerminateThreadsRequest'] = supportsTerminateThreadsRequest + dct["supportsTerminateThreadsRequest"] = supportsTerminateThreadsRequest if supportsSetExpression is not None: - dct['supportsSetExpression'] = supportsSetExpression + dct["supportsSetExpression"] = supportsSetExpression if supportsTerminateRequest is not None: - dct['supportsTerminateRequest'] = supportsTerminateRequest + dct["supportsTerminateRequest"] = supportsTerminateRequest if supportsDataBreakpoints is not None: - dct['supportsDataBreakpoints'] = supportsDataBreakpoints + dct["supportsDataBreakpoints"] = supportsDataBreakpoints if supportsReadMemoryRequest is not None: - dct['supportsReadMemoryRequest'] = supportsReadMemoryRequest + dct["supportsReadMemoryRequest"] = supportsReadMemoryRequest if supportsWriteMemoryRequest is not None: - dct['supportsWriteMemoryRequest'] = supportsWriteMemoryRequest + dct["supportsWriteMemoryRequest"] = supportsWriteMemoryRequest if supportsDisassembleRequest is not None: - dct['supportsDisassembleRequest'] = supportsDisassembleRequest + dct["supportsDisassembleRequest"] = supportsDisassembleRequest if supportsCancelRequest is not None: - dct['supportsCancelRequest'] = supportsCancelRequest + dct["supportsCancelRequest"] = supportsCancelRequest if supportsBreakpointLocationsRequest is not None: - dct['supportsBreakpointLocationsRequest'] = supportsBreakpointLocationsRequest + dct["supportsBreakpointLocationsRequest"] = supportsBreakpointLocationsRequest if supportsClipboardContext is not None: - dct['supportsClipboardContext'] = supportsClipboardContext + dct["supportsClipboardContext"] = supportsClipboardContext if supportsSteppingGranularity is not None: - dct['supportsSteppingGranularity'] = supportsSteppingGranularity + dct["supportsSteppingGranularity"] = supportsSteppingGranularity if supportsInstructionBreakpoints is not None: - dct['supportsInstructionBreakpoints'] = supportsInstructionBreakpoints + dct["supportsInstructionBreakpoints"] = supportsInstructionBreakpoints if supportsExceptionFilterOptions is not None: - dct['supportsExceptionFilterOptions'] = supportsExceptionFilterOptions + dct["supportsExceptionFilterOptions"] = supportsExceptionFilterOptions if supportsSingleThreadExecutionRequests is not None: - dct['supportsSingleThreadExecutionRequests'] = supportsSingleThreadExecutionRequests + dct["supportsSingleThreadExecutionRequests"] = supportsSingleThreadExecutionRequests dct.update(self.kwargs) return dct @@ -12897,8 +11289,8 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ExceptionBreakpointsFilter(BaseSchema): """ - An ExceptionBreakpointsFilter is shown in the UI as an filter option for configuring how exceptions - are dealt with. + An `ExceptionBreakpointsFilter` is shown in the UI as an filter option for configuring how + exceptions are dealt with. Note: automatically generated code. Do not edit manually. """ @@ -12906,41 +11298,45 @@ class ExceptionBreakpointsFilter(BaseSchema): __props__ = { "filter": { "type": "string", - "description": "The internal ID of the filter option. This value is passed to the 'setExceptionBreakpoints' request." - }, - "label": { - "type": "string", - "description": "The name of the filter option. This will be shown in the UI." + "description": "The internal ID of the filter option. This value is passed to the `setExceptionBreakpoints` request.", }, + "label": {"type": "string", "description": "The name of the filter option. This is shown in the UI."}, "description": { "type": "string", - "description": "An optional help text providing additional information about the exception filter. This string is typically shown as a hover and must be translated." - }, - "default": { - "type": "boolean", - "description": "Initial value of the filter option. If not specified a value 'false' is assumed." + "description": "A help text providing additional information about the exception filter. This string is typically shown as a hover and can be translated.", }, + "default": {"type": "boolean", "description": "Initial value of the filter option. If not specified a value false is assumed."}, "supportsCondition": { "type": "boolean", - "description": "Controls whether a condition can be specified for this filter option. If false or missing, a condition can not be set." + "description": "Controls whether a condition can be specified for this filter option. If false or missing, a condition can not be set.", }, "conditionDescription": { "type": "string", - "description": "An optional help text providing information about the condition. This string is shown as the placeholder text for a text box and must be translated." - } + "description": "A help text providing information about the condition. This string is shown as the placeholder text for a text box and can be translated.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, filter, label, description=None, default=None, supportsCondition=None, conditionDescription=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param string filter: The internal ID of the filter option. This value is passed to the 'setExceptionBreakpoints' request. - :param string label: The name of the filter option. This will be shown in the UI. - :param string description: An optional help text providing additional information about the exception filter. This string is typically shown as a hover and must be translated. - :param boolean default: Initial value of the filter option. If not specified a value 'false' is assumed. + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + filter, + label, + description=None, + default=None, + supportsCondition=None, + conditionDescription=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) + """ + :param string filter: The internal ID of the filter option. This value is passed to the `setExceptionBreakpoints` request. + :param string label: The name of the filter option. This is shown in the UI. + :param string description: A help text providing additional information about the exception filter. This string is typically shown as a hover and can be translated. + :param boolean default: Initial value of the filter option. If not specified a value false is assumed. :param boolean supportsCondition: Controls whether a condition can be specified for this filter option. If false or missing, a condition can not be set. - :param string conditionDescription: An optional help text providing information about the condition. This string is shown as the placeholder text for a text box and must be translated. + :param string conditionDescription: A help text providing information about the condition. This string is shown as the placeholder text for a text box and can be translated. """ self.filter = filter self.label = label @@ -12950,7 +11346,6 @@ def __init__(self, filter, label, description=None, default=None, supportsCondit self.conditionDescription = conditionDescription self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) filter = self.filter # noqa (assign to builtin) label = self.label @@ -12959,17 +11354,17 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un supportsCondition = self.supportsCondition conditionDescription = self.conditionDescription dct = { - 'filter': filter, - 'label': label, + "filter": filter, + "label": label, } if description is not None: - dct['description'] = description + dct["description"] = description if default is not None: - dct['default'] = default + dct["default"] = default if supportsCondition is not None: - dct['supportsCondition'] = supportsCondition + dct["supportsCondition"] = supportsCondition if conditionDescription is not None: - dct['conditionDescription'] = conditionDescription + dct["conditionDescription"] = conditionDescription dct.update(self.kwargs) return dct @@ -12985,65 +11380,55 @@ class Message(BaseSchema): __props__ = { "id": { "type": "integer", - "description": "Unique identifier for the message." + "description": "Unique (within a debug adapter implementation) identifier for the message. The purpose of these error IDs is to help extension authors that have the requirement that every user visible error message needs a corresponding error number, so that users or customer support can find information about the specific error more easily.", }, "format": { "type": "string", - "description": "A format string for the message. Embedded variables have the form '{name}'.\nIf variable name starts with an underscore character, the variable does not contain user data (PII) and can be safely used for telemetry purposes." + "description": "A format string for the message. Embedded variables have the form `{name}`.\nIf variable name starts with an underscore character, the variable does not contain user data (PII) and can be safely used for telemetry purposes.", }, "variables": { "type": "object", "description": "An object used as a dictionary for looking up the variables in the format string.", - "additionalProperties": { - "type": "string", - "description": "Values must be strings." - } - }, - "sendTelemetry": { - "type": "boolean", - "description": "If true send to telemetry." - }, - "showUser": { - "type": "boolean", - "description": "If true show user." + "additionalProperties": {"type": "string", "description": "All dictionary values must be strings."}, }, - "url": { - "type": "string", - "description": "An optional url where additional information about this message can be found." - }, - "urlLabel": { - "type": "string", - "description": "An optional label that is presented to the user as the UI for opening the url." - } + "sendTelemetry": {"type": "boolean", "description": "If True send to telemetry."}, + "showUser": {"type": "boolean", "description": "If True show user."}, + "url": {"type": "string", "description": "A url where additional information about this message can be found."}, + "urlLabel": {"type": "string", "description": "A label that is presented to the user as the UI for opening the url."}, } - __refs__ = set(['variables']) + __refs__ = set(["variables"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, id, format, variables=None, sendTelemetry=None, showUser=None, url=None, urlLabel=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, id, format, variables=None, sendTelemetry=None, showUser=None, url=None, urlLabel=None, update_ids_from_dap=False, **kwargs + ): # noqa (update_ids_from_dap may be unused) """ - :param integer id: Unique identifier for the message. - :param string format: A format string for the message. Embedded variables have the form '{name}'. + :param integer id: Unique (within a debug adapter implementation) identifier for the message. The purpose of these error IDs is to help extension authors that have the requirement that every user visible error message needs a corresponding error number, so that users or customer support can find information about the specific error more easily. + :param string format: A format string for the message. Embedded variables have the form `{name}`. If variable name starts with an underscore character, the variable does not contain user data (PII) and can be safely used for telemetry purposes. :param MessageVariables variables: An object used as a dictionary for looking up the variables in the format string. :param boolean sendTelemetry: If true send to telemetry. :param boolean showUser: If true show user. - :param string url: An optional url where additional information about this message can be found. - :param string urlLabel: An optional label that is presented to the user as the UI for opening the url. + :param string url: A url where additional information about this message can be found. + :param string urlLabel: A label that is presented to the user as the UI for opening the url. """ self.id = id self.format = format if variables is None: self.variables = MessageVariables() else: - self.variables = MessageVariables(update_ids_from_dap=update_ids_from_dap, **variables) if variables.__class__ != MessageVariables else variables + self.variables = ( + MessageVariables(update_ids_from_dap=update_ids_from_dap, **variables) + if variables.__class__ != MessageVariables + else variables + ) self.sendTelemetry = sendTelemetry self.showUser = showUser self.url = url self.urlLabel = urlLabel self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) id = self.id # noqa (assign to builtin) format = self.format # noqa (assign to builtin) @@ -13053,19 +11438,19 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un url = self.url urlLabel = self.urlLabel dct = { - 'id': id, - 'format': format, + "id": id, + "format": format, } if variables is not None: - dct['variables'] = variables.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["variables"] = variables.to_dict(update_ids_to_dap=update_ids_to_dap) if sendTelemetry is not None: - dct['sendTelemetry'] = sendTelemetry + dct["sendTelemetry"] = sendTelemetry if showUser is not None: - dct['showUser'] = showUser + dct["showUser"] = showUser if url is not None: - dct['url'] = url + dct["url"] = url if urlLabel is not None: - dct['urlLabel'] = urlLabel + dct["urlLabel"] = urlLabel dct.update(self.kwargs) return dct @@ -13074,89 +11459,77 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un class Module(BaseSchema): """ A Module object represents a row in the modules view. - - Two attributes are mandatory: an id identifies a module in the modules view and is used in a - ModuleEvent for identifying a module for adding, updating or deleting. - - The name is used to minimally render the module in the UI. - - - Additional attributes can be added to the module. They will show up in the module View if they have - a corresponding ColumnDescriptor. - - + + The `id` attribute identifies a module in the modules view and is used in a `module` event for + identifying a module for adding, updating or deleting. + + The `name` attribute is used to minimally render the module in the UI. + + + Additional attributes can be added to the module. They show up in the module view if they have a + corresponding `ColumnDescriptor`. + + To avoid an unnecessary proliferation of additional attributes with similar semantics but different - names - - we recommend to re-use attributes from the 'recommended' list below first, and only introduce new - attributes if nothing appropriate could be found. + names, we recommend to re-use attributes from the 'recommended' list below first, and only introduce + new attributes if nothing appropriate could be found. Note: automatically generated code. Do not edit manually. """ __props__ = { - "id": { - "type": [ - "integer", - "string" - ], - "description": "Unique identifier for the module." - }, - "name": { - "type": "string", - "description": "A name of the module." - }, + "id": {"type": ["integer", "string"], "description": "Unique identifier for the module."}, + "name": {"type": "string", "description": "A name of the module."}, "path": { "type": "string", - "description": "optional but recommended attributes.\nalways try to use these first before introducing additional attributes.\n\nLogical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module." - }, - "isOptimized": { - "type": "boolean", - "description": "True if the module is optimized." + "description": "Logical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module.", }, + "isOptimized": {"type": "boolean", "description": "True if the module is optimized."}, "isUserCode": { "type": "boolean", - "description": "True if the module is considered 'user code' by a debugger that supports 'Just My Code'." - }, - "version": { - "type": "string", - "description": "Version of Module." + "description": "True if the module is considered 'user code' by a debugger that supports 'Just My Code'.", }, + "version": {"type": "string", "description": "Version of Module."}, "symbolStatus": { "type": "string", - "description": "User understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc." + "description": "User-understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc.)", }, "symbolFilePath": { "type": "string", - "description": "Logical full path to the symbol file. The exact definition is implementation defined." - }, - "dateTimeStamp": { - "type": "string", - "description": "Module created or modified." + "description": "Logical full path to the symbol file. The exact definition is implementation defined.", }, - "addressRange": { - "type": "string", - "description": "Address range covered by this module." - } + "dateTimeStamp": {"type": "string", "description": "Module created or modified, encoded as a RFC 3339 timestamp."}, + "addressRange": {"type": "string", "description": "Address range covered by this module."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, id, name, path=None, isOptimized=None, isUserCode=None, version=None, symbolStatus=None, symbolFilePath=None, dateTimeStamp=None, addressRange=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + id, + name, + path=None, + isOptimized=None, + isUserCode=None, + version=None, + symbolStatus=None, + symbolFilePath=None, + dateTimeStamp=None, + addressRange=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param ['integer', 'string'] id: Unique identifier for the module. :param string name: A name of the module. - :param string path: optional but recommended attributes. - always try to use these first before introducing additional attributes. - - Logical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module. + :param string path: Logical full path to the module. The exact definition is implementation defined, but usually this would be a full path to the on-disk file for the module. :param boolean isOptimized: True if the module is optimized. :param boolean isUserCode: True if the module is considered 'user code' by a debugger that supports 'Just My Code'. :param string version: Version of Module. - :param string symbolStatus: User understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc. + :param string symbolStatus: User-understandable description of if symbols were found for the module (ex: 'Symbols Loaded', 'Symbols not found', etc.) :param string symbolFilePath: Logical full path to the symbol file. The exact definition is implementation defined. - :param string dateTimeStamp: Module created or modified. + :param string dateTimeStamp: Module created or modified, encoded as a RFC 3339 timestamp. :param string addressRange: Address range covered by this module. """ self.id = id @@ -13171,7 +11544,6 @@ def __init__(self, id, name, path=None, isOptimized=None, isUserCode=None, versi self.addressRange = addressRange self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) id = self.id # noqa (assign to builtin) name = self.name @@ -13184,25 +11556,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un dateTimeStamp = self.dateTimeStamp addressRange = self.addressRange dct = { - 'id': id, - 'name': name, + "id": id, + "name": name, } if path is not None: - dct['path'] = path + dct["path"] = path if isOptimized is not None: - dct['isOptimized'] = isOptimized + dct["isOptimized"] = isOptimized if isUserCode is not None: - dct['isUserCode'] = isUserCode + dct["isUserCode"] = isUserCode if version is not None: - dct['version'] = version + dct["version"] = version if symbolStatus is not None: - dct['symbolStatus'] = symbolStatus + dct["symbolStatus"] = symbolStatus if symbolFilePath is not None: - dct['symbolFilePath'] = symbolFilePath + dct["symbolFilePath"] = symbolFilePath if dateTimeStamp is not None: - dct['dateTimeStamp'] = dateTimeStamp + dct["dateTimeStamp"] = dateTimeStamp if addressRange is not None: - dct['addressRange'] = addressRange + dct["addressRange"] = addressRange dct.update(self.kwargs) return dct @@ -13210,54 +11582,40 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ColumnDescriptor(BaseSchema): """ - A ColumnDescriptor specifies what module attribute to show in a column of the ModulesView, how to + A `ColumnDescriptor` specifies what module attribute to show in a column of the modules view, how to format it, - + and what the column's label should be. - + It is only used if the underlying UI actually supports this level of customization. Note: automatically generated code. Do not edit manually. """ __props__ = { - "attributeName": { - "type": "string", - "description": "Name of the attribute rendered in this column." - }, - "label": { - "type": "string", - "description": "Header UI label of column." - }, + "attributeName": {"type": "string", "description": "Name of the attribute rendered in this column."}, + "label": {"type": "string", "description": "Header UI label of column."}, "format": { "type": "string", - "description": "Format to use for the rendered values in this column. TBD how the format strings looks like." + "description": "Format to use for the rendered values in this column. TBD how the format strings looks like.", }, "type": { "type": "string", - "enum": [ - "string", - "number", - "boolean", - "unixTimestampUTC" - ], - "description": "Datatype of values in this column. Defaults to 'string' if not specified." + "enum": ["string", "number", "boolean", "unixTimestampUTC"], + "description": "Datatype of values in this column. Defaults to `string` if not specified.", }, - "width": { - "type": "integer", - "description": "Width of this column in characters (hint only)." - } + "width": {"type": "integer", "description": "Width of this column in characters (hint only)."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, attributeName, label, format=None, type=None, width=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string attributeName: Name of the attribute rendered in this column. :param string label: Header UI label of column. :param string format: Format to use for the rendered values in this column. TBD how the format strings looks like. - :param string type: Datatype of values in this column. Defaults to 'string' if not specified. + :param string type: Datatype of values in this column. Defaults to `string` if not specified. :param integer width: Width of this column in characters (hint only). """ self.attributeName = attributeName @@ -13267,7 +11625,6 @@ def __init__(self, attributeName, label, format=None, type=None, width=None, upd self.width = width self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) attributeName = self.attributeName label = self.label @@ -13275,60 +11632,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un type = self.type # noqa (assign to builtin) width = self.width dct = { - 'attributeName': attributeName, - 'label': label, + "attributeName": attributeName, + "label": label, } if format is not None: - dct['format'] = format + dct["format"] = format if type is not None: - dct['type'] = type + dct["type"] = type if width is not None: - dct['width'] = width - dct.update(self.kwargs) - return dct - - -@register -class ModulesViewDescriptor(BaseSchema): - """ - The ModulesViewDescriptor is the container for all declarative configuration options of a - ModuleView. - - For now it only specifies the columns to be shown in the modules view. - - Note: automatically generated code. Do not edit manually. - """ - - __props__ = { - "columns": { - "type": "array", - "items": { - "$ref": "#/definitions/ColumnDescriptor" - } - } - } - __refs__ = set() - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, columns, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param array columns: - """ - self.columns = columns - if update_ids_from_dap and self.columns: - for o in self.columns: - ColumnDescriptor.update_dict_ids_from_dap(o) - self.kwargs = kwargs - - - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - columns = self.columns - if columns and hasattr(columns[0], "to_dict"): - columns = [x.to_dict() for x in columns] - dct = { - 'columns': [ColumnDescriptor.update_dict_ids_to_dap(o) for o in columns] if (update_ids_to_dap and columns) else columns, - } + dct["width"] = width dct.update(self.kwargs) return dct @@ -13342,35 +11654,28 @@ class Thread(BaseSchema): """ __props__ = { - "id": { - "type": "integer", - "description": "Unique identifier for the thread." - }, - "name": { - "type": "string", - "description": "A name of the thread." - } + "id": {"type": "integer", "description": "Unique identifier for the thread."}, + "name": {"type": "string", "description": "The name of the thread."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, id, name, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer id: Unique identifier for the thread. - :param string name: A name of the thread. + :param string name: The name of the thread. """ self.id = id self.name = name if update_ids_from_dap: self.id = self._translate_id_from_dap(self.id) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'id' in dct: - dct['id'] = cls._translate_id_from_dap(dct['id']) + if "id" in dct: + dct["id"] = cls._translate_id_from_dap(dct["id"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -13380,25 +11685,25 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if id is not None: id = self._translate_id_to_dap(id) # noqa (assign to builtin) dct = { - 'id': id, - 'name': name, + "id": id, + "name": name, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'id' in dct: - dct['id'] = cls._translate_id_to_dap(dct['id']) + if "id" in dct: + dct["id"] = cls._translate_id_to_dap(dct["id"]) return dct @register class Source(BaseSchema): """ - A Source is a descriptor for source code. - - It is returned from the debug adapter as part of a StackFrame and it is used by clients when + A `Source` is a descriptor for source code. + + It is returned from the debug adapter as part of a `StackFrame` and it is used by clients when specifying breakpoints. Note: automatically generated code. Do not edit manually. @@ -13407,74 +11712,70 @@ class Source(BaseSchema): __props__ = { "name": { "type": "string", - "description": "The short name of the source. Every source returned from the debug adapter has a name.\nWhen sending a source to the debug adapter this name is optional." + "description": "The short name of the source. Every source returned from the debug adapter has a name.\nWhen sending a source to the debug adapter this name is optional.", }, "path": { "type": "string", - "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no sourceReference is specified (or its value is 0)." + "description": "The path of the source to be shown in the UI.\nIt is only used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0).", }, "sourceReference": { "type": "integer", - "description": "If sourceReference > 0 the contents of the source must be retrieved through the SourceRequest (even if a path is specified).\nA sourceReference is only valid for a session, so it must not be used to persist a source.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If the value > 0 the contents of the source must be retrieved through the `source` request (even if a path is specified).\nSince a `sourceReference` is only valid for a session, it can not be used to persist a source.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "presentationHint": { "type": "string", - "description": "An optional hint for how to present the source in the UI.\nA value of 'deemphasize' can be used to indicate that the source is not available or that it is skipped on stepping.", - "enum": [ - "normal", - "emphasize", - "deemphasize" - ] + "description": "A hint for how to present the source in the UI.\nA value of `deemphasize` can be used to indicate that the source is not available or that it is skipped on stepping.", + "enum": ["normal", "emphasize", "deemphasize"], }, "origin": { "type": "string", - "description": "The (optional) origin of this source: possible values 'internal module', 'inlined content from source map', etc." + "description": "The origin of this source. For example, 'internal module', 'inlined content from source map', etc.", }, "sources": { "type": "array", - "items": { - "$ref": "#/definitions/Source" - }, - "description": "An optional list of sources that are related to this source. These may be the source that generated this source." + "items": {"$ref": "#/definitions/Source"}, + "description": "A list of sources that are related to this source. These may be the source that generated this source.", }, "adapterData": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Optional data that a debug adapter might want to loop through the client.\nThe client should leave the data intact and persist it across sessions. The client should not interpret the data." + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Additional data that a debug adapter might want to loop through the client.\nThe client should leave the data intact and persist it across sessions. The client should not interpret the data.", }, "checksums": { "type": "array", - "items": { - "$ref": "#/definitions/Checksum" - }, - "description": "The checksums associated with this file." - } + "items": {"$ref": "#/definitions/Checksum"}, + "description": "The checksums associated with this file.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, name=None, path=None, sourceReference=None, presentationHint=None, origin=None, sources=None, adapterData=None, checksums=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + name=None, + path=None, + sourceReference=None, + presentationHint=None, + origin=None, + sources=None, + adapterData=None, + checksums=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string name: The short name of the source. Every source returned from the debug adapter has a name. When sending a source to the debug adapter this name is optional. :param string path: The path of the source to be shown in the UI. - It is only used to locate and load the content of the source if no sourceReference is specified (or its value is 0). - :param integer sourceReference: If sourceReference > 0 the contents of the source must be retrieved through the SourceRequest (even if a path is specified). - A sourceReference is only valid for a session, so it must not be used to persist a source. + It is only used to locate and load the content of the source if no `sourceReference` is specified (or its value is 0). + :param integer sourceReference: If the value > 0 the contents of the source must be retrieved through the `source` request (even if a path is specified). + Since a `sourceReference` is only valid for a session, it can not be used to persist a source. The value should be less than or equal to 2147483647 (2^31-1). - :param string presentationHint: An optional hint for how to present the source in the UI. - A value of 'deemphasize' can be used to indicate that the source is not available or that it is skipped on stepping. - :param string origin: The (optional) origin of this source: possible values 'internal module', 'inlined content from source map', etc. - :param array sources: An optional list of sources that are related to this source. These may be the source that generated this source. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] adapterData: Optional data that a debug adapter might want to loop through the client. + :param string presentationHint: A hint for how to present the source in the UI. + A value of `deemphasize` can be used to indicate that the source is not available or that it is skipped on stepping. + :param string origin: The origin of this source. For example, 'internal module', 'inlined content from source map', etc. + :param array sources: A list of sources that are related to this source. These may be the source that generated this source. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] adapterData: Additional data that a debug adapter might want to loop through the client. The client should leave the data intact and persist it across sessions. The client should not interpret the data. :param array checksums: The checksums associated with this file. """ @@ -13494,7 +11795,6 @@ def __init__(self, name=None, path=None, sourceReference=None, presentationHint= Checksum.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name path = self.path @@ -13508,24 +11808,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un checksums = self.checksums if checksums and hasattr(checksums[0], "to_dict"): checksums = [x.to_dict() for x in checksums] - dct = { - } + dct = {} if name is not None: - dct['name'] = name + dct["name"] = name if path is not None: - dct['path'] = path + dct["path"] = path if sourceReference is not None: - dct['sourceReference'] = sourceReference + dct["sourceReference"] = sourceReference if presentationHint is not None: - dct['presentationHint'] = presentationHint + dct["presentationHint"] = presentationHint if origin is not None: - dct['origin'] = origin + dct["origin"] = origin if sources is not None: - dct['sources'] = [Source.update_dict_ids_to_dap(o) for o in sources] if (update_ids_to_dap and sources) else sources + dct["sources"] = [Source.update_dict_ids_to_dap(o) for o in sources] if (update_ids_to_dap and sources) else sources if adapterData is not None: - dct['adapterData'] = adapterData + dct["adapterData"] = adapterData if checksums is not None: - dct['checksums'] = [Checksum.update_dict_ids_to_dap(o) for o in checksums] if (update_ids_to_dap and checksums) else checksums + dct["checksums"] = [Checksum.update_dict_ids_to_dap(o) for o in checksums] if (update_ids_to_dap and checksums) else checksums dct.update(self.kwargs) return dct @@ -13541,76 +11840,72 @@ class StackFrame(BaseSchema): __props__ = { "id": { "type": "integer", - "description": "An identifier for the stack frame. It must be unique across all threads.\nThis id can be used to retrieve the scopes of the frame with the 'scopesRequest' or to restart the execution of a stackframe." - }, - "name": { - "type": "string", - "description": "The name of the stack frame, typically a method name." - }, - "source": { - "description": "The optional source of the frame.", - "type": "Source" + "description": "An identifier for the stack frame. It must be unique across all threads.\nThis id can be used to retrieve the scopes of the frame with the `scopes` request or to restart the execution of a stack frame.", }, + "name": {"type": "string", "description": "The name of the stack frame, typically a method name."}, + "source": {"description": "The source of the frame.", "type": "Source"}, "line": { "type": "integer", - "description": "The line within the file of the frame. If source is null or doesn't exist, line is 0 and must be ignored." + "description": "The line within the source of the frame. If the source attribute is missing or doesn't exist, `line` is 0 and should be ignored by the client.", }, "column": { "type": "integer", - "description": "The column within the line. If source is null or doesn't exist, column is 0 and must be ignored." - }, - "endLine": { - "type": "integer", - "description": "An optional end line of the range covered by the stack frame." + "description": "Start position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If attribute `source` is missing or doesn't exist, `column` is 0 and should be ignored by the client.", }, + "endLine": {"type": "integer", "description": "The end line of the range covered by the stack frame."}, "endColumn": { "type": "integer", - "description": "An optional end column of the range covered by the stack frame." + "description": "End position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, "canRestart": { "type": "boolean", - "description": "Indicates whether this frame can be restarted with the 'restart' request. Clients should only use this if the debug adapter supports the 'restart' request (capability 'supportsRestartRequest' is true)." + "description": "Indicates whether this frame can be restarted with the `restart` request. Clients should only use this if the debug adapter supports the `restart` request and the corresponding capability `supportsRestartRequest` is True. If a debug adapter has this capability, then `canRestart` defaults to `True` if the property is absent.", }, "instructionPointerReference": { "type": "string", - "description": "Optional memory reference for the current instruction pointer in this frame." - }, - "moduleId": { - "type": [ - "integer", - "string" - ], - "description": "The module associated with this frame, if any." + "description": "A memory reference for the current instruction pointer in this frame.", }, + "moduleId": {"type": ["integer", "string"], "description": "The module associated with this frame, if any."}, "presentationHint": { "type": "string", - "enum": [ - "normal", - "label", - "subtle" - ], - "description": "An optional hint for how to present this frame in the UI.\nA value of 'label' can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of 'subtle' can be used to change the appearance of a frame in a 'subtle' way." - } + "enum": ["normal", "label", "subtle"], + "description": "A hint for how to present this frame in the UI.\nA value of `label` can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of `subtle` can be used to change the appearance of a frame in a 'subtle' way.", + }, } - __refs__ = set(['source']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, id, name, line, column, source=None, endLine=None, endColumn=None, canRestart=None, instructionPointerReference=None, moduleId=None, presentationHint=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["source"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + id, + name, + line, + column, + source=None, + endLine=None, + endColumn=None, + canRestart=None, + instructionPointerReference=None, + moduleId=None, + presentationHint=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param integer id: An identifier for the stack frame. It must be unique across all threads. - This id can be used to retrieve the scopes of the frame with the 'scopesRequest' or to restart the execution of a stackframe. + This id can be used to retrieve the scopes of the frame with the `scopes` request or to restart the execution of a stack frame. :param string name: The name of the stack frame, typically a method name. - :param integer line: The line within the file of the frame. If source is null or doesn't exist, line is 0 and must be ignored. - :param integer column: The column within the line. If source is null or doesn't exist, column is 0 and must be ignored. - :param Source source: The optional source of the frame. - :param integer endLine: An optional end line of the range covered by the stack frame. - :param integer endColumn: An optional end column of the range covered by the stack frame. - :param boolean canRestart: Indicates whether this frame can be restarted with the 'restart' request. Clients should only use this if the debug adapter supports the 'restart' request (capability 'supportsRestartRequest' is true). - :param string instructionPointerReference: Optional memory reference for the current instruction pointer in this frame. + :param integer line: The line within the source of the frame. If the source attribute is missing or doesn't exist, `line` is 0 and should be ignored by the client. + :param integer column: Start position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If attribute `source` is missing or doesn't exist, `column` is 0 and should be ignored by the client. + :param Source source: The source of the frame. + :param integer endLine: The end line of the range covered by the stack frame. + :param integer endColumn: End position of the range covered by the stack frame. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param boolean canRestart: Indicates whether this frame can be restarted with the `restart` request. Clients should only use this if the debug adapter supports the `restart` request and the corresponding capability `supportsRestartRequest` is true. If a debug adapter has this capability, then `canRestart` defaults to `true` if the property is absent. + :param string instructionPointerReference: A memory reference for the current instruction pointer in this frame. :param ['integer', 'string'] moduleId: The module associated with this frame, if any. - :param string presentationHint: An optional hint for how to present this frame in the UI. - A value of 'label' can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of 'subtle' can be used to change the appearance of a frame in a 'subtle' way. + :param string presentationHint: A hint for how to present this frame in the UI. + A value of `label` can be used to indicate that the frame is an artificial frame that is used as a visual label or separator. A value of `subtle` can be used to change the appearance of a frame in a 'subtle' way. """ self.id = id self.name = name @@ -13619,7 +11914,7 @@ def __init__(self, id, name, line, column, source=None, endLine=None, endColumn= if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.endLine = endLine self.endColumn = endColumn self.canRestart = canRestart @@ -13629,12 +11924,11 @@ def __init__(self, id, name, line, column, source=None, endLine=None, endColumn= if update_ids_from_dap: self.id = self._translate_id_from_dap(self.id) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'id' in dct: - dct['id'] = cls._translate_id_from_dap(dct['id']) + if "id" in dct: + dct["id"] = cls._translate_id_from_dap(dct["id"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -13653,40 +11947,40 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if id is not None: id = self._translate_id_to_dap(id) # noqa (assign to builtin) dct = { - 'id': id, - 'name': name, - 'line': line, - 'column': column, + "id": id, + "name": name, + "line": line, + "column": column, } if source is not None: - dct['source'] = source.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["source"] = source.to_dict(update_ids_to_dap=update_ids_to_dap) if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn if canRestart is not None: - dct['canRestart'] = canRestart + dct["canRestart"] = canRestart if instructionPointerReference is not None: - dct['instructionPointerReference'] = instructionPointerReference + dct["instructionPointerReference"] = instructionPointerReference if moduleId is not None: - dct['moduleId'] = moduleId + dct["moduleId"] = moduleId if presentationHint is not None: - dct['presentationHint'] = presentationHint + dct["presentationHint"] = presentationHint dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'id' in dct: - dct['id'] = cls._translate_id_to_dap(dct['id']) + if "id" in dct: + dct["id"] = cls._translate_id_to_dap(dct["id"]) return dct @register class Scope(BaseSchema): """ - A Scope is a named container for variables. Optionally a scope can map to a source or a range within - a source. + A `Scope` is a named container for variables. Optionally a scope can map to a source or a range + within a source. Note: automatically generated code. Do not edit manually. """ @@ -13694,78 +11988,80 @@ class Scope(BaseSchema): __props__ = { "name": { "type": "string", - "description": "Name of the scope such as 'Arguments', 'Locals', or 'Registers'. This string is shown in the UI as is and can be translated." + "description": "Name of the scope such as 'Arguments', 'Locals', or 'Registers'. This string is shown in the UI as is and can be translated.", }, "presentationHint": { "type": "string", - "description": "An optional hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI.", - "_enum": [ - "arguments", - "locals", - "registers" - ], + "description": "A hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI.", + "_enum": ["arguments", "locals", "registers"], "enumDescriptions": [ "Scope contains method arguments.", "Scope contains local variables.", - "Scope contains registers. Only a single 'registers' scope should be returned from a 'scopes' request." - ] + "Scope contains registers. Only a single `registers` scope should be returned from a `scopes` request.", + ], }, "variablesReference": { "type": "integer", - "description": "The variables of this scope can be retrieved by passing the value of variablesReference to the VariablesRequest." + "description": "The variables of this scope can be retrieved by passing the value of `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named variables in this scope.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks." + "description": "The number of named variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed variables in this scope.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks." + "description": "The number of indexed variables in this scope.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.", }, "expensive": { "type": "boolean", - "description": "If true, the number of variables in this scope is large or expensive to retrieve." - }, - "source": { - "description": "Optional source for this scope.", - "type": "Source" - }, - "line": { - "type": "integer", - "description": "Optional start line of the range covered by this scope." + "description": "If True, the number of variables in this scope is large or expensive to retrieve.", }, + "source": {"description": "The source for this scope.", "type": "Source"}, + "line": {"type": "integer", "description": "The start line of the range covered by this scope."}, "column": { "type": "integer", - "description": "Optional start column of the range covered by this scope." - }, - "endLine": { - "type": "integer", - "description": "Optional end line of the range covered by this scope." + "description": "Start position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, + "endLine": {"type": "integer", "description": "The end line of the range covered by this scope."}, "endColumn": { "type": "integer", - "description": "Optional end column of the range covered by this scope." - } + "description": "End position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", + }, } - __refs__ = set(['source']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, name, variablesReference, expensive, presentationHint=None, namedVariables=None, indexedVariables=None, source=None, line=None, column=None, endLine=None, endColumn=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["source"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + name, + variablesReference, + expensive, + presentationHint=None, + namedVariables=None, + indexedVariables=None, + source=None, + line=None, + column=None, + endLine=None, + endColumn=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string name: Name of the scope such as 'Arguments', 'Locals', or 'Registers'. This string is shown in the UI as is and can be translated. - :param integer variablesReference: The variables of this scope can be retrieved by passing the value of variablesReference to the VariablesRequest. + :param integer variablesReference: The variables of this scope can be retrieved by passing the value of `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. :param boolean expensive: If true, the number of variables in this scope is large or expensive to retrieve. - :param string presentationHint: An optional hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI. + :param string presentationHint: A hint for how to present this scope in the UI. If this attribute is missing, the scope is shown with a generic UI. :param integer namedVariables: The number of named variables in this scope. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. :param integer indexedVariables: The number of indexed variables in this scope. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. - :param Source source: Optional source for this scope. - :param integer line: Optional start line of the range covered by this scope. - :param integer column: Optional start column of the range covered by this scope. - :param integer endLine: Optional end line of the range covered by this scope. - :param integer endColumn: Optional end column of the range covered by this scope. + The client can use this information to present the variables in a paged UI and fetch them in chunks. + :param Source source: The source for this scope. + :param integer line: The start line of the range covered by this scope. + :param integer column: Start position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param integer endLine: The end line of the range covered by this scope. + :param integer endColumn: End position of the range covered by the scope. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. """ self.name = name self.variablesReference = variablesReference @@ -13776,7 +12072,7 @@ def __init__(self, name, variablesReference, expensive, presentationHint=None, n if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.line = line self.column = column self.endLine = endLine @@ -13784,12 +12080,11 @@ def __init__(self, name, variablesReference, expensive, presentationHint=None, n if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -13808,33 +12103,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'name': name, - 'variablesReference': variablesReference, - 'expensive': expensive, + "name": name, + "variablesReference": variablesReference, + "expensive": expensive, } if presentationHint is not None: - dct['presentationHint'] = presentationHint + dct["presentationHint"] = presentationHint if namedVariables is not None: - dct['namedVariables'] = namedVariables + dct["namedVariables"] = namedVariables if indexedVariables is not None: - dct['indexedVariables'] = indexedVariables + dct["indexedVariables"] = indexedVariables if source is not None: - dct['source'] = source.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["source"] = source.to_dict(update_ids_to_dap=update_ids_to_dap) if line is not None: - dct['line'] = line + dct["line"] = line if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @@ -13842,82 +12137,95 @@ def update_dict_ids_to_dap(cls, dct): class Variable(BaseSchema): """ A Variable is a name/value pair. - - Optionally a variable can have a 'type' that is shown if space permits or when hovering over the - variable's name. - - An optional 'kind' is used to render additional properties of the variable, e.g. different icons can - be used to indicate that a variable is public or private. - + + The `type` attribute is shown if space permits or when hovering over the variable's name. + + The `kind` attribute is used to render additional properties of the variable, e.g. different icons + can be used to indicate that a variable is public or private. + If the value is structured (has children), a handle is provided to retrieve the children with the - VariablesRequest. - - If the number of named or indexed children is large, the numbers should be returned via the optional - 'namedVariables' and 'indexedVariables' attributes. - - The client can use this optional information to present the children in a paged UI and fetch them in - chunks. + `variables` request. + + If the number of named or indexed children is large, the numbers should be returned via the + `namedVariables` and `indexedVariables` attributes. + + The client can use this information to present the children in a paged UI and fetch them in chunks. Note: automatically generated code. Do not edit manually. """ __props__ = { - "name": { - "type": "string", - "description": "The variable's name." - }, + "name": {"type": "string", "description": "The variable's name."}, "value": { "type": "string", - "description": "The variable's value. This can be a multi-line text, e.g. for a function the body of a function." + "description": "The variable's value.\nThis can be a multi-line text, e.g. for a function the body of a function.\nFor structured variables (which do not have a simple value), it is recommended to provide a one-line representation of the structured object. This helps to identify the structured object in the collapsed state when its children are not yet visible.\nAn empty string can be used if no value should be shown in the UI.", }, "type": { "type": "string", - "description": "The type of the variable's value. Typically shown in the UI when hovering over the value.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the variable's value. Typically shown in the UI when hovering over the value.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is True.", }, "presentationHint": { "description": "Properties of a variable that can be used to determine how to render the variable in the UI.", - "type": "VariablePresentationHint" + "type": "VariablePresentationHint", }, "evaluateName": { "type": "string", - "description": "Optional evaluatable name of this variable which can be passed to the 'EvaluateRequest' to fetch the variable's value." + "description": "The evaluatable name of this variable which can be passed to the `evaluate` request to fetch the variable's value.", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the variable is structured and its children can be retrieved by passing variablesReference to the VariablesRequest." + "description": "If `variablesReference` is > 0, the variable is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the children in a paged UI and fetch them in chunks." + "description": "The number of named child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks.", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the children in a paged UI and fetch them in chunks." + "description": "The number of indexed child variables.\nThe client can use this information to present the children in a paged UI and fetch them in chunks.", }, "memoryReference": { "type": "string", - "description": "Optional memory reference for the variable if the variable represents executable code, such as a function pointer.\nThis attribute is only required if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request." - } + "description": "A memory reference associated with this variable.\nFor pointer type variables, this is generally a reference to the memory address contained in the pointer.\nFor executable data, this reference may later be used in a `disassemble` request.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, } - __refs__ = set(['presentationHint']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, name, value, variablesReference, type=None, presentationHint=None, evaluateName=None, namedVariables=None, indexedVariables=None, memoryReference=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["presentationHint"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + name, + value, + variablesReference, + type=None, + presentationHint=None, + evaluateName=None, + namedVariables=None, + indexedVariables=None, + memoryReference=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string name: The variable's name. - :param string value: The variable's value. This can be a multi-line text, e.g. for a function the body of a function. - :param integer variablesReference: If variablesReference is > 0, the variable is structured and its children can be retrieved by passing variablesReference to the VariablesRequest. + :param string value: The variable's value. + This can be a multi-line text, e.g. for a function the body of a function. + For structured variables (which do not have a simple value), it is recommended to provide a one-line representation of the structured object. This helps to identify the structured object in the collapsed state when its children are not yet visible. + An empty string can be used if no value should be shown in the UI. + :param integer variablesReference: If `variablesReference` is > 0, the variable is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. :param string type: The type of the variable's value. Typically shown in the UI when hovering over the value. - This attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request. + This attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true. :param VariablePresentationHint presentationHint: Properties of a variable that can be used to determine how to render the variable in the UI. - :param string evaluateName: Optional evaluatable name of this variable which can be passed to the 'EvaluateRequest' to fetch the variable's value. + :param string evaluateName: The evaluatable name of this variable which can be passed to the `evaluate` request to fetch the variable's value. :param integer namedVariables: The number of named child variables. - The client can use this optional information to present the children in a paged UI and fetch them in chunks. + The client can use this information to present the children in a paged UI and fetch them in chunks. :param integer indexedVariables: The number of indexed child variables. - The client can use this optional information to present the children in a paged UI and fetch them in chunks. - :param string memoryReference: Optional memory reference for the variable if the variable represents executable code, such as a function pointer. - This attribute is only required if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request. + The client can use this information to present the children in a paged UI and fetch them in chunks. + :param string memoryReference: A memory reference associated with this variable. + For pointer type variables, this is generally a reference to the memory address contained in the pointer. + For executable data, this reference may later be used in a `disassemble` request. + This attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true. """ self.name = name self.value = value @@ -13926,7 +12234,11 @@ def __init__(self, name, value, variablesReference, type=None, presentationHint= if presentationHint is None: self.presentationHint = VariablePresentationHint() else: - self.presentationHint = VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) if presentationHint.__class__ != VariablePresentationHint else presentationHint + self.presentationHint = ( + VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) + if presentationHint.__class__ != VariablePresentationHint + else presentationHint + ) self.evaluateName = evaluateName self.namedVariables = namedVariables self.indexedVariables = indexedVariables @@ -13934,12 +12246,11 @@ def __init__(self, name, value, variablesReference, type=None, presentationHint= if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -13956,37 +12267,36 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'name': name, - 'value': value, - 'variablesReference': variablesReference, + "name": name, + "value": value, + "variablesReference": variablesReference, } if type is not None: - dct['type'] = type + dct["type"] = type if presentationHint is not None: - dct['presentationHint'] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["presentationHint"] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) if evaluateName is not None: - dct['evaluateName'] = evaluateName + dct["evaluateName"] = evaluateName if namedVariables is not None: - dct['namedVariables'] = namedVariables + dct["namedVariables"] = namedVariables if indexedVariables is not None: - dct['indexedVariables'] = indexedVariables + dct["indexedVariables"] = indexedVariables if memoryReference is not None: - dct['memoryReference'] = memoryReference + dct["memoryReference"] = memoryReference dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @register class VariablePresentationHint(BaseSchema): """ - Optional properties of a variable that can be used to determine how to render the variable in the - UI. + Properties of a variable that can be used to determine how to render the variable in the UI. Note: automatically generated code. Do not edit manually. """ @@ -14006,7 +12316,7 @@ class VariablePresentationHint(BaseSchema): "interface", "mostDerivedClass", "virtual", - "dataBreakpoint" + "dataBreakpoint", ], "enumDescriptions": [ "Indicates that the object is a property.", @@ -14018,9 +12328,9 @@ class VariablePresentationHint(BaseSchema): "Indicates that the object is an inner class.", "Indicates that the object is an interface.", "Indicates that the object is the most derived class.", - "Indicates that the object is virtual, that means it is a synthetic object introducedby the\nadapter for rendering purposes, e.g. an index range for large arrays.", - "Deprecated: Indicates that a data breakpoint is registered for the object. The 'hasDataBreakpoint' attribute should generally be used instead." - ] + "Indicates that the object is virtual, that means it is a synthetic object introduced by the adapter for rendering purposes, e.g. an index range for large arrays.", + "Deprecated: Indicates that a data breakpoint is registered for the object. The `hasDataBreakpoint` attribute should generally be used instead.", + ], }, "attributes": { "description": "Set of attributes represented as an array of strings. Before introducing additional values, try to use the listed values.", @@ -14035,62 +12345,65 @@ class VariablePresentationHint(BaseSchema): "hasObjectId", "canHaveObjectId", "hasSideEffects", - "hasDataBreakpoint" + "hasDataBreakpoint", ], "enumDescriptions": [ "Indicates that the object is static.", "Indicates that the object is a constant.", "Indicates that the object is read only.", "Indicates that the object is a raw string.", - "Indicates that the object can have an Object ID created for it.", - "Indicates that the object has an Object ID associated with it.", + "Indicates that the object can have an Object ID created for it. This is a vestigial attribute that is used by some clients; 'Object ID's are not specified in the protocol.", + "Indicates that the object has an Object ID associated with it. This is a vestigial attribute that is used by some clients; 'Object ID's are not specified in the protocol.", "Indicates that the evaluation had side effects.", - "Indicates that the object has its value tracked by a data breakpoint." - ] - } + "Indicates that the object has its value tracked by a data breakpoint.", + ], + }, }, "visibility": { "description": "Visibility of variable. Before introducing additional values, try to use the listed values.", "type": "string", - "_enum": [ - "public", - "private", - "protected", - "internal", - "final" - ] - } + "_enum": ["public", "private", "protected", "internal", "final"], + }, + "lazy": { + "description": "If True, clients can present the variable with a UI that supports a specific gesture to trigger its evaluation.\nThis mechanism can be used for properties that require executing code when retrieving their value and where the code execution can be expensive and/or produce side-effects. A typical example are properties based on a getter function.\nPlease note that in addition to the `lazy` flag, the variable's `variablesReference` is expected to refer to a variable that will provide the value through another `variable` request.", + "type": "boolean", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, kind=None, attributes=None, visibility=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__(self, kind=None, attributes=None, visibility=None, lazy=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string kind: The kind of variable. Before introducing additional values, try to use the listed values. :param array attributes: Set of attributes represented as an array of strings. Before introducing additional values, try to use the listed values. :param string visibility: Visibility of variable. Before introducing additional values, try to use the listed values. + :param boolean lazy: If true, clients can present the variable with a UI that supports a specific gesture to trigger its evaluation. + This mechanism can be used for properties that require executing code when retrieving their value and where the code execution can be expensive and/or produce side-effects. A typical example are properties based on a getter function. + Please note that in addition to the `lazy` flag, the variable's `variablesReference` is expected to refer to a variable that will provide the value through another `variable` request. """ self.kind = kind self.attributes = attributes self.visibility = visibility + self.lazy = lazy self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) kind = self.kind attributes = self.attributes if attributes and hasattr(attributes[0], "to_dict"): attributes = [x.to_dict() for x in attributes] visibility = self.visibility - dct = { - } + lazy = self.lazy + dct = {} if kind is not None: - dct['kind'] = kind + dct["kind"] = kind if attributes is not None: - dct['attributes'] = attributes + dct["attributes"] = attributes if visibility is not None: - dct['visibility'] = visibility + dct["visibility"] = visibility + if lazy is not None: + dct["lazy"] = lazy dct.update(self.kwargs) return dct @@ -14098,39 +12411,33 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class BreakpointLocation(BaseSchema): """ - Properties of a breakpoint location returned from the 'breakpointLocations' request. + Properties of a breakpoint location returned from the `breakpointLocations` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "line": { - "type": "integer", - "description": "Start line of breakpoint location." - }, + "line": {"type": "integer", "description": "Start line of breakpoint location."}, "column": { "type": "integer", - "description": "Optional start column of breakpoint location." - }, - "endLine": { - "type": "integer", - "description": "Optional end line of breakpoint location if the location covers a range." + "description": "The start position of a breakpoint location. Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, + "endLine": {"type": "integer", "description": "The end line of breakpoint location if the location covers a range."}, "endColumn": { "type": "integer", - "description": "Optional end column of breakpoint location if the location covers a range." - } + "description": "The end position of a breakpoint location (if the location covers a range). Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, line, column=None, endLine=None, endColumn=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer line: Start line of breakpoint location. - :param integer column: Optional start column of breakpoint location. - :param integer endLine: Optional end line of breakpoint location if the location covers a range. - :param integer endColumn: Optional end column of breakpoint location if the location covers a range. + :param integer column: The start position of a breakpoint location. Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param integer endLine: The end line of breakpoint location if the location covers a range. + :param integer endColumn: The end position of a breakpoint location (if the location covers a range). Position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. """ self.line = line self.column = column @@ -14138,21 +12445,20 @@ def __init__(self, line, column=None, endLine=None, endColumn=None, update_ids_f self.endColumn = endColumn self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) line = self.line column = self.column endLine = self.endLine endColumn = self.endColumn dct = { - 'line': line, + "line": line, } if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn dct.update(self.kwargs) return dct @@ -14160,49 +12466,48 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SourceBreakpoint(BaseSchema): """ - Properties of a breakpoint or logpoint passed to the setBreakpoints request. + Properties of a breakpoint or logpoint passed to the `setBreakpoints` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "line": { - "type": "integer", - "description": "The source line of the breakpoint or logpoint." - }, + "line": {"type": "integer", "description": "The source line of the breakpoint or logpoint."}, "column": { "type": "integer", - "description": "An optional source column of the breakpoint." + "description": "Start position within source line of the breakpoint or logpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "The expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is True.", }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." + "description": "The expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is True.\nIf both this property and `condition` are specified, `hitCondition` should be evaluated only if the `condition` is met, and the debug adapter should stop only if both conditions are met.", }, "logMessage": { "type": "string", - "description": "If this attribute exists and is non-empty, the backend must not 'break' (stop)\nbut log the message instead. Expressions within {} are interpolated.\nThe attribute is only honored by a debug adapter if the capability 'supportsLogPoints' is true." - } + "description": "If this attribute exists and is non-empty, the debug adapter must not 'break' (stop)\nbut log the message instead. Expressions within `{}` are interpolated.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsLogPoints` is True.\nIf either `hitCondition` or `condition` is specified, then the message should only be logged if those conditions are met.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, line, column=None, condition=None, hitCondition=None, logMessage=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer line: The source line of the breakpoint or logpoint. - :param integer column: An optional source column of the breakpoint. - :param string condition: An optional expression for conditional breakpoints. - It is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true. - :param string hitCondition: An optional expression that controls how many hits of the breakpoint are ignored. - The backend is expected to interpret the expression as needed. - The attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true. - :param string logMessage: If this attribute exists and is non-empty, the backend must not 'break' (stop) - but log the message instead. Expressions within {} are interpolated. - The attribute is only honored by a debug adapter if the capability 'supportsLogPoints' is true. + :param integer column: Start position within source line of the breakpoint or logpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param string condition: The expression for conditional breakpoints. + It is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true. + :param string hitCondition: The expression that controls how many hits of the breakpoint are ignored. + The debug adapter is expected to interpret the expression as needed. + The attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true. + If both this property and `condition` are specified, `hitCondition` should be evaluated only if the `condition` is met, and the debug adapter should stop only if both conditions are met. + :param string logMessage: If this attribute exists and is non-empty, the debug adapter must not 'break' (stop) + but log the message instead. Expressions within `{}` are interpolated. + The attribute is only honored by a debug adapter if the corresponding capability `supportsLogPoints` is true. + If either `hitCondition` or `condition` is specified, then the message should only be logged if those conditions are met. """ self.line = line self.column = column @@ -14211,7 +12516,6 @@ def __init__(self, line, column=None, condition=None, hitCondition=None, logMess self.logMessage = logMessage self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) line = self.line column = self.column @@ -14219,16 +12523,16 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un hitCondition = self.hitCondition logMessage = self.logMessage dct = { - 'line': line, + "line": line, } if column is not None: - dct['column'] = column + dct["column"] = column if condition is not None: - dct['condition'] = condition + dct["condition"] = condition if hitCondition is not None: - dct['hitCondition'] = hitCondition + dct["hitCondition"] = hitCondition if logMessage is not None: - dct['logMessage'] = logMessage + dct["logMessage"] = logMessage dct.update(self.kwargs) return dct @@ -14236,55 +12540,51 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class FunctionBreakpoint(BaseSchema): """ - Properties of a breakpoint passed to the setFunctionBreakpoints request. + Properties of a breakpoint passed to the `setFunctionBreakpoints` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "name": { - "type": "string", - "description": "The name of the function." - }, + "name": {"type": "string", "description": "The name of the function."}, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "An expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is True.", }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." - } + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, name, condition=None, hitCondition=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string name: The name of the function. - :param string condition: An optional expression for conditional breakpoints. - It is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true. - :param string hitCondition: An optional expression that controls how many hits of the breakpoint are ignored. - The backend is expected to interpret the expression as needed. - The attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true. + :param string condition: An expression for conditional breakpoints. + It is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true. + :param string hitCondition: An expression that controls how many hits of the breakpoint are ignored. + The debug adapter is expected to interpret the expression as needed. + The attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true. """ self.name = name self.condition = condition self.hitCondition = hitCondition self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name condition = self.condition hitCondition = self.hitCondition dct = { - 'name': name, + "name": name, } if condition is not None: - dct['condition'] = condition + dct["condition"] = condition if hitCondition is not None: - dct['hitCondition'] = hitCondition + dct["hitCondition"] = hitCondition dct.update(self.kwargs) return dct @@ -14297,28 +12597,24 @@ class DataBreakpointAccessType(BaseSchema): Note: automatically generated code. Do not edit manually. """ - READ = 'read' - WRITE = 'write' - READWRITE = 'readWrite' + READ = "read" + WRITE = "write" + READWRITE = "readWrite" - VALID_VALUES = set(['read', 'write', 'readWrite']) + VALID_VALUES = set(["read", "write", "readWrite"]) __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -14326,7 +12622,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class DataBreakpoint(BaseSchema): """ - Properties of a data breakpoint passed to the setDataBreakpoints request. + Properties of a data breakpoint passed to the `setDataBreakpoints` request. Note: automatically generated code. Do not edit manually. """ @@ -14334,32 +12630,26 @@ class DataBreakpoint(BaseSchema): __props__ = { "dataId": { "type": "string", - "description": "An id representing the data. This id is returned from the dataBreakpointInfo request." - }, - "accessType": { - "description": "The access type of the data.", - "type": "DataBreakpointAccessType" - }, - "condition": { - "type": "string", - "description": "An optional expression for conditional breakpoints." + "description": "An id representing the data. This id is returned from the `dataBreakpointInfo` request.", }, + "accessType": {"description": "The access type of the data.", "type": "DataBreakpointAccessType"}, + "condition": {"type": "string", "description": "An expression for conditional breakpoints."}, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed." - } + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.", + }, } - __refs__ = set(['accessType']) + __refs__ = set(["accessType"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, dataId, accessType=None, condition=None, hitCondition=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string dataId: An id representing the data. This id is returned from the dataBreakpointInfo request. + :param string dataId: An id representing the data. This id is returned from the `dataBreakpointInfo` request. :param DataBreakpointAccessType accessType: The access type of the data. - :param string condition: An optional expression for conditional breakpoints. - :param string hitCondition: An optional expression that controls how many hits of the breakpoint are ignored. - The backend is expected to interpret the expression as needed. + :param string condition: An expression for conditional breakpoints. + :param string hitCondition: An expression that controls how many hits of the breakpoint are ignored. + The debug adapter is expected to interpret the expression as needed. """ self.dataId = dataId if accessType is not None: @@ -14369,21 +12659,20 @@ def __init__(self, dataId, accessType=None, condition=None, hitCondition=None, u self.hitCondition = hitCondition self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) dataId = self.dataId accessType = self.accessType condition = self.condition hitCondition = self.hitCondition dct = { - 'dataId': dataId, + "dataId": dataId, } if accessType is not None: - dct['accessType'] = accessType + dct["accessType"] = accessType if condition is not None: - dct['condition'] = condition + dct["condition"] = condition if hitCondition is not None: - dct['hitCondition'] = hitCondition + dct["hitCondition"] = hitCondition dct.update(self.kwargs) return dct @@ -14391,7 +12680,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class InstructionBreakpoint(BaseSchema): """ - Properties of a breakpoint passed to the setInstructionBreakpoints request + Properties of a breakpoint passed to the `setInstructionBreakpoints` request Note: automatically generated code. Do not edit manually. """ @@ -14399,36 +12688,33 @@ class InstructionBreakpoint(BaseSchema): __props__ = { "instructionReference": { "type": "string", - "description": "The instruction reference of the breakpoint.\nThis should be a memory or instruction pointer reference from an EvaluateResponse, Variable, StackFrame, GotoTarget, or Breakpoint." - }, - "offset": { - "type": "integer", - "description": "An optional offset from the instruction reference.\nThis can be negative." + "description": "The instruction reference of the breakpoint.\nThis should be a memory or instruction pointer reference from an `EvaluateResponse`, `Variable`, `StackFrame`, `GotoTarget`, or `Breakpoint`.", }, + "offset": {"type": "integer", "description": "The offset from the instruction reference in bytes.\nThis can be negative."}, "condition": { "type": "string", - "description": "An optional expression for conditional breakpoints.\nIt is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true." + "description": "An expression for conditional breakpoints.\nIt is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is True.", }, "hitCondition": { "type": "string", - "description": "An optional expression that controls how many hits of the breakpoint are ignored.\nThe backend is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true." - } + "description": "An expression that controls how many hits of the breakpoint are ignored.\nThe debug adapter is expected to interpret the expression as needed.\nThe attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, instructionReference, offset=None, condition=None, hitCondition=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string instructionReference: The instruction reference of the breakpoint. - This should be a memory or instruction pointer reference from an EvaluateResponse, Variable, StackFrame, GotoTarget, or Breakpoint. - :param integer offset: An optional offset from the instruction reference. + This should be a memory or instruction pointer reference from an `EvaluateResponse`, `Variable`, `StackFrame`, `GotoTarget`, or `Breakpoint`. + :param integer offset: The offset from the instruction reference in bytes. This can be negative. - :param string condition: An optional expression for conditional breakpoints. - It is only honored by a debug adapter if the capability 'supportsConditionalBreakpoints' is true. - :param string hitCondition: An optional expression that controls how many hits of the breakpoint are ignored. - The backend is expected to interpret the expression as needed. - The attribute is only honored by a debug adapter if the capability 'supportsHitConditionalBreakpoints' is true. + :param string condition: An expression for conditional breakpoints. + It is only honored by a debug adapter if the corresponding capability `supportsConditionalBreakpoints` is true. + :param string hitCondition: An expression that controls how many hits of the breakpoint are ignored. + The debug adapter is expected to interpret the expression as needed. + The attribute is only honored by a debug adapter if the corresponding capability `supportsHitConditionalBreakpoints` is true. """ self.instructionReference = instructionReference self.offset = offset @@ -14436,21 +12722,20 @@ def __init__(self, instructionReference, offset=None, condition=None, hitConditi self.hitCondition = hitCondition self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) instructionReference = self.instructionReference offset = self.offset condition = self.condition hitCondition = self.hitCondition dct = { - 'instructionReference': instructionReference, + "instructionReference": instructionReference, } if offset is not None: - dct['offset'] = offset + dct["offset"] = offset if condition is not None: - dct['condition'] = condition + dct["condition"] = condition if hitCondition is not None: - dct['hitCondition'] = hitCondition + dct["hitCondition"] = hitCondition dct.update(self.kwargs) return dct @@ -14458,8 +12743,8 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class Breakpoint(BaseSchema): """ - Information about a Breakpoint created in setBreakpoints, setFunctionBreakpoints, - setInstructionBreakpoints, or setDataBreakpoints. + Information about a breakpoint created in `setBreakpoints`, `setFunctionBreakpoints`, + `setInstructionBreakpoints`, or `setDataBreakpoints` requests. Note: automatically generated code. Do not edit manually. """ @@ -14467,64 +12752,73 @@ class Breakpoint(BaseSchema): __props__ = { "id": { "type": "integer", - "description": "An optional identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints." + "description": "The identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints.", }, "verified": { "type": "boolean", - "description": "If true breakpoint could be set (but not necessarily at the desired location)." + "description": "If True, the breakpoint could be set (but not necessarily at the desired location).", }, "message": { "type": "string", - "description": "An optional message about the state of the breakpoint.\nThis is shown to the user and can be used to explain why a breakpoint could not be verified." - }, - "source": { - "description": "The source where the breakpoint is located.", - "type": "Source" - }, - "line": { - "type": "integer", - "description": "The start line of the actual range covered by the breakpoint." + "description": "A message about the state of the breakpoint.\nThis is shown to the user and can be used to explain why a breakpoint could not be verified.", }, + "source": {"description": "The source where the breakpoint is located.", "type": "Source"}, + "line": {"type": "integer", "description": "The start line of the actual range covered by the breakpoint."}, "column": { "type": "integer", - "description": "An optional start column of the actual range covered by the breakpoint." - }, - "endLine": { - "type": "integer", - "description": "An optional end line of the actual range covered by the breakpoint." + "description": "Start position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, + "endLine": {"type": "integer", "description": "The end line of the actual range covered by the breakpoint."}, "endColumn": { "type": "integer", - "description": "An optional end column of the actual range covered by the breakpoint.\nIf no end line is given, then the end column is assumed to be in the start line." + "description": "End position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.\nIf no end line is given, then the end column is assumed to be in the start line.", }, - "instructionReference": { + "instructionReference": {"type": "string", "description": "A memory reference to where the breakpoint is set."}, + "offset": {"type": "integer", "description": "The offset from the instruction reference.\nThis can be negative."}, + "reason": { "type": "string", - "description": "An optional memory reference to where the breakpoint is set." + "description": "A machine-readable explanation of why a breakpoint may not be verified. If a breakpoint is verified or a specific reason is not known, the adapter should omit this property. Possible values include:\n\n- `pending`: Indicates a breakpoint might be verified in the future, but the adapter cannot verify it in the current state.\n - `failed`: Indicates a breakpoint was not able to be verified, and the adapter does not believe it can be verified without intervention.", + "enum": ["pending", "failed"], }, - "offset": { - "type": "integer", - "description": "An optional offset from the instruction reference.\nThis can be negative." - } } - __refs__ = set(['source']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, verified, id=None, message=None, source=None, line=None, column=None, endLine=None, endColumn=None, instructionReference=None, offset=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param boolean verified: If true breakpoint could be set (but not necessarily at the desired location). - :param integer id: An optional identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints. - :param string message: An optional message about the state of the breakpoint. + __refs__ = set(["source"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + verified, + id=None, + message=None, + source=None, + line=None, + column=None, + endLine=None, + endColumn=None, + instructionReference=None, + offset=None, + reason=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) + """ + :param boolean verified: If true, the breakpoint could be set (but not necessarily at the desired location). + :param integer id: The identifier for the breakpoint. It is needed if breakpoint events are used to update or remove breakpoints. + :param string message: A message about the state of the breakpoint. This is shown to the user and can be used to explain why a breakpoint could not be verified. :param Source source: The source where the breakpoint is located. :param integer line: The start line of the actual range covered by the breakpoint. - :param integer column: An optional start column of the actual range covered by the breakpoint. - :param integer endLine: An optional end line of the actual range covered by the breakpoint. - :param integer endColumn: An optional end column of the actual range covered by the breakpoint. + :param integer column: Start position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param integer endLine: The end line of the actual range covered by the breakpoint. + :param integer endColumn: End position of the source range covered by the breakpoint. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If no end line is given, then the end column is assumed to be in the start line. - :param string instructionReference: An optional memory reference to where the breakpoint is set. - :param integer offset: An optional offset from the instruction reference. + :param string instructionReference: A memory reference to where the breakpoint is set. + :param integer offset: The offset from the instruction reference. This can be negative. + :param string reason: A machine-readable explanation of why a breakpoint may not be verified. If a breakpoint is verified or a specific reason is not known, the adapter should omit this property. Possible values include: + + - `pending`: Indicates a breakpoint might be verified in the future, but the adapter cannot verify it in the current state. + - `failed`: Indicates a breakpoint was not able to be verified, and the adapter does not believe it can be verified without intervention. """ self.verified = verified self.id = id @@ -14532,16 +12826,16 @@ def __init__(self, verified, id=None, message=None, source=None, line=None, colu if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.line = line self.column = column self.endLine = endLine self.endColumn = endColumn self.instructionReference = instructionReference self.offset = offset + self.reason = reason self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) verified = self.verified id = self.id # noqa (assign to builtin) @@ -14553,27 +12847,30 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un endColumn = self.endColumn instructionReference = self.instructionReference offset = self.offset + reason = self.reason dct = { - 'verified': verified, + "verified": verified, } if id is not None: - dct['id'] = id + dct["id"] = id if message is not None: - dct['message'] = message + dct["message"] = message if source is not None: - dct['source'] = source.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["source"] = source.to_dict(update_ids_to_dap=update_ids_to_dap) if line is not None: - dct['line'] = line + dct["line"] = line if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn if instructionReference is not None: - dct['instructionReference'] = instructionReference + dct["instructionReference"] = instructionReference if offset is not None: - dct['offset'] = offset + dct["offset"] = offset + if reason is not None: + dct["reason"] = reason dct.update(self.kwargs) return dct @@ -14581,33 +12878,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class SteppingGranularity(BaseSchema): """ - The granularity of one 'step' in the stepping requests 'next', 'stepIn', 'stepOut', and 'stepBack'. + The granularity of one 'step' in the stepping requests `next`, `stepIn`, `stepOut`, and `stepBack`. Note: automatically generated code. Do not edit manually. """ - STATEMENT = 'statement' - LINE = 'line' - INSTRUCTION = 'instruction' + STATEMENT = "statement" + LINE = "line" + INSTRUCTION = "instruction" - VALID_VALUES = set(['statement', 'line', 'instruction']) + VALID_VALUES = set(["statement", "line", "instruction"]) __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -14615,43 +12908,66 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class StepInTarget(BaseSchema): """ - A StepInTarget can be used in the 'stepIn' request and determines into which single target the - stepIn request should step. + A `StepInTarget` can be used in the `stepIn` request and determines into which single target the + `stepIn` request should step. Note: automatically generated code. Do not edit manually. """ __props__ = { - "id": { + "id": {"type": "integer", "description": "Unique identifier for a step-in target."}, + "label": {"type": "string", "description": "The name of the step-in target (shown in the UI)."}, + "line": {"type": "integer", "description": "The line of the step-in target."}, + "column": { "type": "integer", - "description": "Unique identifier for a stepIn target." + "description": "Start position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", + }, + "endLine": {"type": "integer", "description": "The end line of the range covered by the step-in target."}, + "endColumn": { + "type": "integer", + "description": "End position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, - "label": { - "type": "string", - "description": "The name of the stepIn target (shown in the UI)." - } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, id, label, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__(self, id, label, line=None, column=None, endLine=None, endColumn=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer id: Unique identifier for a stepIn target. - :param string label: The name of the stepIn target (shown in the UI). + :param integer id: Unique identifier for a step-in target. + :param string label: The name of the step-in target (shown in the UI). + :param integer line: The line of the step-in target. + :param integer column: Start position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param integer endLine: The end line of the range covered by the step-in target. + :param integer endColumn: End position of the range covered by the step in target. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. """ self.id = id self.label = label + self.line = line + self.column = column + self.endLine = endLine + self.endColumn = endColumn self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) id = self.id # noqa (assign to builtin) label = self.label + line = self.line + column = self.column + endLine = self.endLine + endColumn = self.endColumn dct = { - 'id': id, - 'label': label, + "id": id, + "label": label, } + if line is not None: + dct["line"] = line + if column is not None: + dct["column"] = column + if endLine is not None: + dct["endLine"] = endLine + if endColumn is not None: + dct["endColumn"] = endColumn dct.update(self.kwargs) return dct @@ -14659,56 +12975,49 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class GotoTarget(BaseSchema): """ - A GotoTarget describes a code location that can be used as a target in the 'goto' request. - - The possible goto targets can be determined via the 'gotoTargets' request. + A `GotoTarget` describes a code location that can be used as a target in the `goto` request. + + The possible goto targets can be determined via the `gotoTargets` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "id": { - "type": "integer", - "description": "Unique identifier for a goto target. This is used in the goto request." - }, - "label": { - "type": "string", - "description": "The name of the goto target (shown in the UI)." - }, - "line": { - "type": "integer", - "description": "The line of the goto target." - }, - "column": { - "type": "integer", - "description": "An optional column of the goto target." - }, - "endLine": { - "type": "integer", - "description": "An optional end line of the range covered by the goto target." - }, - "endColumn": { - "type": "integer", - "description": "An optional end column of the range covered by the goto target." - }, + "id": {"type": "integer", "description": "Unique identifier for a goto target. This is used in the `goto` request."}, + "label": {"type": "string", "description": "The name of the goto target (shown in the UI)."}, + "line": {"type": "integer", "description": "The line of the goto target."}, + "column": {"type": "integer", "description": "The column of the goto target."}, + "endLine": {"type": "integer", "description": "The end line of the range covered by the goto target."}, + "endColumn": {"type": "integer", "description": "The end column of the range covered by the goto target."}, "instructionPointerReference": { "type": "string", - "description": "Optional memory reference for the instruction pointer value represented by this target." - } + "description": "A memory reference for the instruction pointer value represented by this target.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, id, label, line, column=None, endLine=None, endColumn=None, instructionPointerReference=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param integer id: Unique identifier for a goto target. This is used in the goto request. + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + id, + label, + line, + column=None, + endLine=None, + endColumn=None, + instructionPointerReference=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) + """ + :param integer id: Unique identifier for a goto target. This is used in the `goto` request. :param string label: The name of the goto target (shown in the UI). :param integer line: The line of the goto target. - :param integer column: An optional column of the goto target. - :param integer endLine: An optional end line of the range covered by the goto target. - :param integer endColumn: An optional end column of the range covered by the goto target. - :param string instructionPointerReference: Optional memory reference for the instruction pointer value represented by this target. + :param integer column: The column of the goto target. + :param integer endLine: The end line of the range covered by the goto target. + :param integer endColumn: The end column of the range covered by the goto target. + :param string instructionPointerReference: A memory reference for the instruction pointer value represented by this target. """ self.id = id self.label = label @@ -14719,7 +13028,6 @@ def __init__(self, id, label, line, column=None, endLine=None, endColumn=None, i self.instructionPointerReference = instructionPointerReference self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) id = self.id # noqa (assign to builtin) label = self.label @@ -14729,18 +13037,18 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un endColumn = self.endColumn instructionPointerReference = self.instructionPointerReference dct = { - 'id': id, - 'label': label, - 'line': line, + "id": id, + "label": label, + "line": line, } if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn if instructionPointerReference is not None: - dct['instructionPointerReference'] = instructionPointerReference + dct["instructionPointerReference"] = instructionPointerReference dct.update(self.kwargs) return dct @@ -14748,7 +13056,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class CompletionItem(BaseSchema): """ - CompletionItems are the suggestions returned from the CompletionsRequest. + `CompletionItems` are the suggestions returned from the `completions` request. Note: automatically generated code. Do not edit manually. """ @@ -14756,61 +13064,71 @@ class CompletionItem(BaseSchema): __props__ = { "label": { "type": "string", - "description": "The label of this completion item. By default this is also the text that is inserted when selecting this completion." + "description": "The label of this completion item. By default this is also the text that is inserted when selecting this completion.", }, - "text": { + "text": {"type": "string", "description": "If text is returned and not an empty string, then it is inserted instead of the label."}, + "sortText": { "type": "string", - "description": "If text is not falsy then it is inserted instead of the label." + "description": "A string that should be used when comparing this item with other items. If not returned or an empty string, the `label` is used instead.", }, - "sortText": { + "detail": { "type": "string", - "description": "A string that should be used when comparing this item with other items. When `falsy` the label is used." + "description": "A human-readable string with additional information about this item, like type or symbol information.", }, "type": { "description": "The item's type. Typically the client uses this information to render the item in the UI with an icon.", - "type": "CompletionItemType" + "type": "CompletionItemType", }, "start": { "type": "integer", - "description": "This value determines the location (in the CompletionsRequest's 'text' attribute) where the completion text is added.\nIf missing the text is added at the location specified by the CompletionsRequest's 'column' attribute." + "description": "Start position (within the `text` attribute of the `completions` request) where the completion text is added. The position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If the start position is omitted the text is added at the location specified by the `column` attribute of the `completions` request.", }, "length": { "type": "integer", - "description": "This value determines how many characters are overwritten by the completion text.\nIf missing the value 0 is assumed which results in the completion text being inserted." + "description": "Length determines how many characters are overwritten by the completion text and it is measured in UTF-16 code units. If missing the value 0 is assumed which results in the completion text being inserted.", }, "selectionStart": { "type": "integer", - "description": "Determines the start of the new selection after the text has been inserted (or replaced).\nThe start position must in the range 0 and length of the completion text.\nIf omitted the selection starts at the end of the completion text." + "description": "Determines the start of the new selection after the text has been inserted (or replaced). `selectionStart` is measured in UTF-16 code units and must be in the range 0 and length of the completion text. If omitted the selection starts at the end of the completion text.", }, "selectionLength": { "type": "integer", - "description": "Determines the length of the new selection after the text has been inserted (or replaced).\nThe selection can not extend beyond the bounds of the completion text.\nIf omitted the length is assumed to be 0." - } + "description": "Determines the length of the new selection after the text has been inserted (or replaced) and it is measured in UTF-16 code units. The selection can not extend beyond the bounds of the completion text. If omitted the length is assumed to be 0.", + }, } - __refs__ = set(['type']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, label, text=None, sortText=None, type=None, start=None, length=None, selectionStart=None, selectionLength=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["type"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + label, + text=None, + sortText=None, + detail=None, + type=None, + start=None, + length=None, + selectionStart=None, + selectionLength=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string label: The label of this completion item. By default this is also the text that is inserted when selecting this completion. - :param string text: If text is not falsy then it is inserted instead of the label. - :param string sortText: A string that should be used when comparing this item with other items. When `falsy` the label is used. + :param string text: If text is returned and not an empty string, then it is inserted instead of the label. + :param string sortText: A string that should be used when comparing this item with other items. If not returned or an empty string, the `label` is used instead. + :param string detail: A human-readable string with additional information about this item, like type or symbol information. :param CompletionItemType type: The item's type. Typically the client uses this information to render the item in the UI with an icon. - :param integer start: This value determines the location (in the CompletionsRequest's 'text' attribute) where the completion text is added. - If missing the text is added at the location specified by the CompletionsRequest's 'column' attribute. - :param integer length: This value determines how many characters are overwritten by the completion text. - If missing the value 0 is assumed which results in the completion text being inserted. - :param integer selectionStart: Determines the start of the new selection after the text has been inserted (or replaced). - The start position must in the range 0 and length of the completion text. - If omitted the selection starts at the end of the completion text. - :param integer selectionLength: Determines the length of the new selection after the text has been inserted (or replaced). - The selection can not extend beyond the bounds of the completion text. - If omitted the length is assumed to be 0. + :param integer start: Start position (within the `text` attribute of the `completions` request) where the completion text is added. The position is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. If the start position is omitted the text is added at the location specified by the `column` attribute of the `completions` request. + :param integer length: Length determines how many characters are overwritten by the completion text and it is measured in UTF-16 code units. If missing the value 0 is assumed which results in the completion text being inserted. + :param integer selectionStart: Determines the start of the new selection after the text has been inserted (or replaced). `selectionStart` is measured in UTF-16 code units and must be in the range 0 and length of the completion text. If omitted the selection starts at the end of the completion text. + :param integer selectionLength: Determines the length of the new selection after the text has been inserted (or replaced) and it is measured in UTF-16 code units. The selection can not extend beyond the bounds of the completion text. If omitted the length is assumed to be 0. """ self.label = label self.text = text self.sortText = sortText + self.detail = detail if type is not None: assert type in CompletionItemType.VALID_VALUES self.type = type @@ -14820,33 +13138,35 @@ def __init__(self, label, text=None, sortText=None, type=None, start=None, lengt self.selectionLength = selectionLength self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) label = self.label text = self.text sortText = self.sortText + detail = self.detail type = self.type # noqa (assign to builtin) start = self.start length = self.length selectionStart = self.selectionStart selectionLength = self.selectionLength dct = { - 'label': label, + "label": label, } if text is not None: - dct['text'] = text + dct["text"] = text if sortText is not None: - dct['sortText'] = sortText + dct["sortText"] = sortText + if detail is not None: + dct["detail"] = detail if type is not None: - dct['type'] = type + dct["type"] = type if start is not None: - dct['start'] = start + dct["start"] = start if length is not None: - dct['length'] = length + dct["length"] = length if selectionStart is not None: - dct['selectionStart'] = selectionStart + dct["selectionStart"] = selectionStart if selectionLength is not None: - dct['selectionLength'] = selectionLength + dct["selectionLength"] = selectionLength dct.update(self.kwargs) return dct @@ -14860,44 +13180,62 @@ class CompletionItemType(BaseSchema): Note: automatically generated code. Do not edit manually. """ - METHOD = 'method' - FUNCTION = 'function' - CONSTRUCTOR = 'constructor' - FIELD = 'field' - VARIABLE = 'variable' - CLASS = 'class' - INTERFACE = 'interface' - MODULE = 'module' - PROPERTY = 'property' - UNIT = 'unit' - VALUE = 'value' - ENUM = 'enum' - KEYWORD = 'keyword' - SNIPPET = 'snippet' - TEXT = 'text' - COLOR = 'color' - FILE = 'file' - REFERENCE = 'reference' - CUSTOMCOLOR = 'customcolor' - - VALID_VALUES = set(['method', 'function', 'constructor', 'field', 'variable', 'class', 'interface', 'module', 'property', 'unit', 'value', 'enum', 'keyword', 'snippet', 'text', 'color', 'file', 'reference', 'customcolor']) + METHOD = "method" + FUNCTION = "function" + CONSTRUCTOR = "constructor" + FIELD = "field" + VARIABLE = "variable" + CLASS = "class" + INTERFACE = "interface" + MODULE = "module" + PROPERTY = "property" + UNIT = "unit" + VALUE = "value" + ENUM = "enum" + KEYWORD = "keyword" + SNIPPET = "snippet" + TEXT = "text" + COLOR = "color" + FILE = "file" + REFERENCE = "reference" + CUSTOMCOLOR = "customcolor" + + VALID_VALUES = set( + [ + "method", + "function", + "constructor", + "field", + "variable", + "class", + "interface", + "module", + "property", + "unit", + "value", + "enum", + "keyword", + "snippet", + "text", + "color", + "file", + "reference", + "customcolor", + ] + ) __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -14910,29 +13248,25 @@ class ChecksumAlgorithm(BaseSchema): Note: automatically generated code. Do not edit manually. """ - MD5 = 'MD5' - SHA1 = 'SHA1' - SHA256 = 'SHA256' - TIMESTAMP = 'timestamp' + MD5 = "MD5" + SHA1 = "SHA1" + SHA256 = "SHA256" + TIMESTAMP = "timestamp" - VALID_VALUES = set(['MD5', 'SHA1', 'SHA256', 'timestamp']) + VALID_VALUES = set(["MD5", "SHA1", "SHA256", "timestamp"]) __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -14946,23 +13280,17 @@ class Checksum(BaseSchema): """ __props__ = { - "algorithm": { - "description": "The algorithm used to calculate this checksum.", - "type": "ChecksumAlgorithm" - }, - "checksum": { - "type": "string", - "description": "Value of the checksum." - } + "algorithm": {"description": "The algorithm used to calculate this checksum.", "type": "ChecksumAlgorithm"}, + "checksum": {"type": "string", "description": "Value of the checksum, encoded as a hexadecimal value."}, } - __refs__ = set(['algorithm']) + __refs__ = set(["algorithm"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, algorithm, checksum, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param ChecksumAlgorithm algorithm: The algorithm used to calculate this checksum. - :param string checksum: Value of the checksum. + :param string checksum: Value of the checksum, encoded as a hexadecimal value. """ if algorithm is not None: assert algorithm in ChecksumAlgorithm.VALID_VALUES @@ -14970,13 +13298,12 @@ def __init__(self, algorithm, checksum, update_ids_from_dap=False, **kwargs): # self.checksum = checksum self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) algorithm = self.algorithm checksum = self.checksum dct = { - 'algorithm': algorithm, - 'checksum': checksum, + "algorithm": algorithm, + "checksum": checksum, } dct.update(self.kwargs) return dct @@ -14990,15 +13317,10 @@ class ValueFormat(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "hex": { - "type": "boolean", - "description": "Display the value in hex." - } - } + __props__ = {"hex": {"type": "boolean", "description": "Display the value in hex."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, hex=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -15007,13 +13329,11 @@ def __init__(self, hex=None, update_ids_from_dap=False, **kwargs): # noqa (upda self.hex = hex self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) hex = self.hex # noqa (assign to builtin) - dct = { - } + dct = {} if hex is not None: - dct['hex'] = hex + dct["hex"] = hex dct.update(self.kwargs) return dct @@ -15027,44 +13347,35 @@ class StackFrameFormat(BaseSchema): """ __props__ = { - "hex": { - "type": "boolean", - "description": "Display the value in hex." - }, - "parameters": { - "type": "boolean", - "description": "Displays parameters for the stack frame." - }, - "parameterTypes": { - "type": "boolean", - "description": "Displays the types of parameters for the stack frame." - }, - "parameterNames": { - "type": "boolean", - "description": "Displays the names of parameters for the stack frame." - }, - "parameterValues": { - "type": "boolean", - "description": "Displays the values of parameters for the stack frame." - }, - "line": { - "type": "boolean", - "description": "Displays the line number of the stack frame." - }, - "module": { - "type": "boolean", - "description": "Displays the module of the stack frame." - }, + "hex": {"type": "boolean", "description": "Display the value in hex."}, + "parameters": {"type": "boolean", "description": "Displays parameters for the stack frame."}, + "parameterTypes": {"type": "boolean", "description": "Displays the types of parameters for the stack frame."}, + "parameterNames": {"type": "boolean", "description": "Displays the names of parameters for the stack frame."}, + "parameterValues": {"type": "boolean", "description": "Displays the values of parameters for the stack frame."}, + "line": {"type": "boolean", "description": "Displays the line number of the stack frame."}, + "module": {"type": "boolean", "description": "Displays the module of the stack frame."}, "includeAll": { "type": "boolean", - "description": "Includes all stack frames, including those the debug adapter might otherwise hide." - } + "description": "Includes all stack frames, including those the debug adapter might otherwise hide.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, hex=None, parameters=None, parameterTypes=None, parameterNames=None, parameterValues=None, line=None, module=None, includeAll=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + hex=None, + parameters=None, + parameterTypes=None, + parameterNames=None, + parameterValues=None, + line=None, + module=None, + includeAll=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param boolean hex: Display the value in hex. :param boolean parameters: Displays parameters for the stack frame. @@ -15085,7 +13396,6 @@ def __init__(self, hex=None, parameters=None, parameterTypes=None, parameterName self.includeAll = includeAll self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) hex = self.hex # noqa (assign to builtin) parameters = self.parameters @@ -15095,24 +13405,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un line = self.line module = self.module includeAll = self.includeAll - dct = { - } + dct = {} if hex is not None: - dct['hex'] = hex + dct["hex"] = hex if parameters is not None: - dct['parameters'] = parameters + dct["parameters"] = parameters if parameterTypes is not None: - dct['parameterTypes'] = parameterTypes + dct["parameterTypes"] = parameterTypes if parameterNames is not None: - dct['parameterNames'] = parameterNames + dct["parameterNames"] = parameterNames if parameterValues is not None: - dct['parameterValues'] = parameterValues + dct["parameterValues"] = parameterValues if line is not None: - dct['line'] = line + dct["line"] = line if module is not None: - dct['module'] = module + dct["module"] = module if includeAll is not None: - dct['includeAll'] = includeAll + dct["includeAll"] = includeAll dct.update(self.kwargs) return dct @@ -15120,45 +13429,41 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ExceptionFilterOptions(BaseSchema): """ - An ExceptionFilterOptions is used to specify an exception filter together with a condition for the - setExceptionsFilter request. + An `ExceptionFilterOptions` is used to specify an exception filter together with a condition for the + `setExceptionBreakpoints` request. Note: automatically generated code. Do not edit manually. """ __props__ = { - "filterId": { - "type": "string", - "description": "ID of an exception filter returned by the 'exceptionBreakpointFilters' capability." - }, + "filterId": {"type": "string", "description": "ID of an exception filter returned by the `exceptionBreakpointFilters` capability."}, "condition": { "type": "string", - "description": "An optional expression for conditional exceptions.\nThe exception will break into the debugger if the result of the condition is true." - } + "description": "An expression for conditional exceptions.\nThe exception breaks into the debugger if the result of the condition is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, filterId, condition=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string filterId: ID of an exception filter returned by the 'exceptionBreakpointFilters' capability. - :param string condition: An optional expression for conditional exceptions. - The exception will break into the debugger if the result of the condition is true. + :param string filterId: ID of an exception filter returned by the `exceptionBreakpointFilters` capability. + :param string condition: An expression for conditional exceptions. + The exception breaks into the debugger if the result of the condition is true. """ self.filterId = filterId self.condition = condition self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) filterId = self.filterId condition = self.condition dct = { - 'filterId': filterId, + "filterId": filterId, } if condition is not None: - dct['condition'] = condition + dct["condition"] = condition dct.update(self.kwargs) return dct @@ -15166,7 +13471,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ExceptionOptions(BaseSchema): """ - An ExceptionOptions assigns configuration options to a set of exceptions. + An `ExceptionOptions` assigns configuration options to a set of exceptions. Note: automatically generated code. Do not edit manually. """ @@ -15174,24 +13479,19 @@ class ExceptionOptions(BaseSchema): __props__ = { "path": { "type": "array", - "items": { - "$ref": "#/definitions/ExceptionPathSegment" - }, - "description": "A path that selects a single or multiple exceptions in a tree. If 'path' is missing, the whole tree is selected.\nBy convention the first segment of the path is a category that is used to group exceptions in the UI." + "items": {"$ref": "#/definitions/ExceptionPathSegment"}, + "description": "A path that selects a single or multiple exceptions in a tree. If `path` is missing, the whole tree is selected.\nBy convention the first segment of the path is a category that is used to group exceptions in the UI.", }, - "breakMode": { - "description": "Condition when a thrown exception should result in a break.", - "type": "ExceptionBreakMode" - } + "breakMode": {"description": "Condition when a thrown exception should result in a break.", "type": "ExceptionBreakMode"}, } - __refs__ = set(['breakMode']) + __refs__ = set(["breakMode"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakMode, path=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param ExceptionBreakMode breakMode: Condition when a thrown exception should result in a break. - :param array path: A path that selects a single or multiple exceptions in a tree. If 'path' is missing, the whole tree is selected. + :param array path: A path that selects a single or multiple exceptions in a tree. If `path` is missing, the whole tree is selected. By convention the first segment of the path is a category that is used to group exceptions in the UI. """ if breakMode is not None: @@ -15203,17 +13503,16 @@ def __init__(self, breakMode, path=None, update_ids_from_dap=False, **kwargs): ExceptionPathSegment.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakMode = self.breakMode path = self.path if path and hasattr(path[0], "to_dict"): path = [x.to_dict() for x in path] dct = { - 'breakMode': breakMode, + "breakMode": breakMode, } if path is not None: - dct['path'] = [ExceptionPathSegment.update_dict_ids_to_dap(o) for o in path] if (update_ids_to_dap and path) else path + dct["path"] = [ExceptionPathSegment.update_dict_ids_to_dap(o) for o in path] if (update_ids_to_dap and path) else path dct.update(self.kwargs) return dct @@ -15222,41 +13521,37 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un class ExceptionBreakMode(BaseSchema): """ This enumeration defines all possible conditions when a thrown exception should result in a break. - + never: never breaks, - + always: always breaks, - + unhandled: breaks when exception unhandled, - + userUnhandled: breaks if the exception is not handled by user code. Note: automatically generated code. Do not edit manually. """ - NEVER = 'never' - ALWAYS = 'always' - UNHANDLED = 'unhandled' - USERUNHANDLED = 'userUnhandled' + NEVER = "never" + ALWAYS = "always" + UNHANDLED = "unhandled" + USERUNHANDLED = "userUnhandled" - VALID_VALUES = set(['never', 'always', 'unhandled', 'userUnhandled']) + VALID_VALUES = set(["never", "always", "unhandled", "userUnhandled"]) __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -15264,13 +13559,11 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class ExceptionPathSegment(BaseSchema): """ - An ExceptionPathSegment represents a segment in a path that is used to match leafs or nodes in a + An `ExceptionPathSegment` represents a segment in a path that is used to match leafs or nodes in a tree of exceptions. - - If a segment consists of more than one name, it matches the names provided if 'negate' is false or - missing or - - it matches anything except the names provided if 'negate' is true. + + If a segment consists of more than one name, it matches the names provided if `negate` is false or + missing, or it matches anything except the names provided if `negate` is true. Note: automatically generated code. Do not edit manually. """ @@ -15278,40 +13571,37 @@ class ExceptionPathSegment(BaseSchema): __props__ = { "negate": { "type": "boolean", - "description": "If false or missing this segment matches the names provided, otherwise it matches anything except the names provided." + "description": "If false or missing this segment matches the names provided, otherwise it matches anything except the names provided.", }, "names": { "type": "array", - "items": { - "type": "string" - }, - "description": "Depending on the value of 'negate' the names that should match or not match." - } + "items": {"type": "string"}, + "description": "Depending on the value of `negate` the names that should match or not match.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, names, negate=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array names: Depending on the value of 'negate' the names that should match or not match. + :param array names: Depending on the value of `negate` the names that should match or not match. :param boolean negate: If false or missing this segment matches the names provided, otherwise it matches anything except the names provided. """ self.names = names self.negate = negate self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) names = self.names if names and hasattr(names[0], "to_dict"): names = [x.to_dict() for x in names] negate = self.negate dct = { - 'names': names, + "names": names, } if negate is not None: - dct['negate'] = negate + dct["negate"] = negate dct.update(self.kwargs) return dct @@ -15325,44 +13615,40 @@ class ExceptionDetails(BaseSchema): """ __props__ = { - "message": { - "type": "string", - "description": "Message contained in the exception." - }, - "typeName": { - "type": "string", - "description": "Short type name of the exception object." - }, - "fullTypeName": { - "type": "string", - "description": "Fully-qualified type name of the exception object." - }, + "message": {"type": "string", "description": "Message contained in the exception."}, + "typeName": {"type": "string", "description": "Short type name of the exception object."}, + "fullTypeName": {"type": "string", "description": "Fully-qualified type name of the exception object."}, "evaluateName": { "type": "string", - "description": "Optional expression that can be evaluated in the current scope to obtain the exception object." - }, - "stackTrace": { - "type": "string", - "description": "Stack trace at the time the exception was thrown." + "description": "An expression that can be evaluated in the current scope to obtain the exception object.", }, + "stackTrace": {"type": "string", "description": "Stack trace at the time the exception was thrown."}, "innerException": { "type": "array", - "items": { - "$ref": "#/definitions/ExceptionDetails" - }, - "description": "Details of the exception contained by this exception, if any." - } + "items": {"$ref": "#/definitions/ExceptionDetails"}, + "description": "Details of the exception contained by this exception, if any.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, message=None, typeName=None, fullTypeName=None, evaluateName=None, stackTrace=None, innerException=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, + message=None, + typeName=None, + fullTypeName=None, + evaluateName=None, + stackTrace=None, + innerException=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string message: Message contained in the exception. :param string typeName: Short type name of the exception object. :param string fullTypeName: Fully-qualified type name of the exception object. - :param string evaluateName: Optional expression that can be evaluated in the current scope to obtain the exception object. + :param string evaluateName: An expression that can be evaluated in the current scope to obtain the exception object. :param string stackTrace: Stack trace at the time the exception was thrown. :param array innerException: Details of the exception contained by this exception, if any. """ @@ -15377,7 +13663,6 @@ def __init__(self, message=None, typeName=None, fullTypeName=None, evaluateName= ExceptionDetails.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) message = self.message typeName = self.typeName @@ -15387,20 +13672,23 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un innerException = self.innerException if innerException and hasattr(innerException[0], "to_dict"): innerException = [x.to_dict() for x in innerException] - dct = { - } + dct = {} if message is not None: - dct['message'] = message + dct["message"] = message if typeName is not None: - dct['typeName'] = typeName + dct["typeName"] = typeName if fullTypeName is not None: - dct['fullTypeName'] = fullTypeName + dct["fullTypeName"] = fullTypeName if evaluateName is not None: - dct['evaluateName'] = evaluateName + dct["evaluateName"] = evaluateName if stackTrace is not None: - dct['stackTrace'] = stackTrace + dct["stackTrace"] = stackTrace if innerException is not None: - dct['innerException'] = [ExceptionDetails.update_dict_ids_to_dap(o) for o in innerException] if (update_ids_to_dap and innerException) else innerException + dct["innerException"] = ( + [ExceptionDetails.update_dict_ids_to_dap(o) for o in innerException] + if (update_ids_to_dap and innerException) + else innerException + ) dct.update(self.kwargs) return dct @@ -15416,50 +13704,54 @@ class DisassembledInstruction(BaseSchema): __props__ = { "address": { "type": "string", - "description": "The address of the instruction. Treated as a hex value if prefixed with '0x', or as a decimal value otherwise." + "description": "The address of the instruction. Treated as a hex value if prefixed with `0x`, or as a decimal value otherwise.", }, "instructionBytes": { "type": "string", - "description": "Optional raw bytes representing the instruction and its operands, in an implementation-defined format." + "description": "Raw bytes representing the instruction and its operands, in an implementation-defined format.", }, "instruction": { "type": "string", - "description": "Text representing the instruction and its operands, in an implementation-defined format." - }, - "symbol": { - "type": "string", - "description": "Name of the symbol that corresponds with the location of this instruction, if any." + "description": "Text representing the instruction and its operands, in an implementation-defined format.", }, + "symbol": {"type": "string", "description": "Name of the symbol that corresponds with the location of this instruction, if any."}, "location": { "description": "Source location that corresponds to this instruction, if any.\nShould always be set (if available) on the first instruction returned,\nbut can be omitted afterwards if this instruction maps to the same source file as the previous instruction.", - "type": "Source" - }, - "line": { - "type": "integer", - "description": "The line within the source location that corresponds to this instruction, if any." - }, - "column": { - "type": "integer", - "description": "The column within the line that corresponds to this instruction, if any." + "type": "Source", }, - "endLine": { - "type": "integer", - "description": "The end line of the range that corresponds to this instruction, if any." + "line": {"type": "integer", "description": "The line within the source location that corresponds to this instruction, if any."}, + "column": {"type": "integer", "description": "The column within the line that corresponds to this instruction, if any."}, + "endLine": {"type": "integer", "description": "The end line of the range that corresponds to this instruction, if any."}, + "endColumn": {"type": "integer", "description": "The end column of the range that corresponds to this instruction, if any."}, + "presentationHint": { + "type": "string", + "description": "A hint for how to present the instruction in the UI.\n\nA value of `invalid` may be used to indicate this instruction is 'filler' and cannot be reached by the program. For example, unreadable memory addresses may be presented is 'invalid.'", + "enum": ["normal", "invalid"], }, - "endColumn": { - "type": "integer", - "description": "The end column of the range that corresponds to this instruction, if any." - } } - __refs__ = set(['location']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, address, instruction, instructionBytes=None, symbol=None, location=None, line=None, column=None, endLine=None, endColumn=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - :param string address: The address of the instruction. Treated as a hex value if prefixed with '0x', or as a decimal value otherwise. + __refs__ = set(["location"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + address, + instruction, + instructionBytes=None, + symbol=None, + location=None, + line=None, + column=None, + endLine=None, + endColumn=None, + presentationHint=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) + """ + :param string address: The address of the instruction. Treated as a hex value if prefixed with `0x`, or as a decimal value otherwise. :param string instruction: Text representing the instruction and its operands, in an implementation-defined format. - :param string instructionBytes: Optional raw bytes representing the instruction and its operands, in an implementation-defined format. + :param string instructionBytes: Raw bytes representing the instruction and its operands, in an implementation-defined format. :param string symbol: Name of the symbol that corresponds with the location of this instruction, if any. :param Source location: Source location that corresponds to this instruction, if any. Should always be set (if available) on the first instruction returned, @@ -15468,6 +13760,9 @@ def __init__(self, address, instruction, instructionBytes=None, symbol=None, loc :param integer column: The column within the line that corresponds to this instruction, if any. :param integer endLine: The end line of the range that corresponds to this instruction, if any. :param integer endColumn: The end column of the range that corresponds to this instruction, if any. + :param string presentationHint: A hint for how to present the instruction in the UI. + + A value of `invalid` may be used to indicate this instruction is 'filler' and cannot be reached by the program. For example, unreadable memory addresses may be presented is 'invalid.' """ self.address = address self.instruction = instruction @@ -15476,14 +13771,14 @@ def __init__(self, address, instruction, instructionBytes=None, symbol=None, loc if location is None: self.location = Source() else: - self.location = Source(update_ids_from_dap=update_ids_from_dap, **location) if location.__class__ != Source else location + self.location = Source(update_ids_from_dap=update_ids_from_dap, **location) if location.__class__ != Source else location self.line = line self.column = column self.endLine = endLine self.endColumn = endColumn + self.presentationHint = presentationHint self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) address = self.address instruction = self.instruction @@ -15494,24 +13789,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un column = self.column endLine = self.endLine endColumn = self.endColumn + presentationHint = self.presentationHint dct = { - 'address': address, - 'instruction': instruction, + "address": address, + "instruction": instruction, } if instructionBytes is not None: - dct['instructionBytes'] = instructionBytes + dct["instructionBytes"] = instructionBytes if symbol is not None: - dct['symbol'] = symbol + dct["symbol"] = symbol if location is not None: - dct['location'] = location.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["location"] = location.to_dict(update_ids_to_dap=update_ids_to_dap) if line is not None: - dct['line'] = line + dct["line"] = line if column is not None: - dct['column'] = column + dct["column"] = column if endLine is not None: - dct['endLine'] = endLine + dct["endLine"] = endLine if endColumn is not None: - dct['endColumn'] = endColumn + dct["endColumn"] = endColumn + if presentationHint is not None: + dct["presentationHint"] = presentationHint dct.update(self.kwargs) return dct @@ -15519,7 +13817,7 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un @register class InvalidatedAreas(BaseSchema): """ - Logical areas that can be invalidated by the 'invalidated' event. + Logical areas that can be invalidated by the `invalidated` event. Note: automatically generated code. Do not edit manually. """ @@ -15527,24 +13825,20 @@ class InvalidatedAreas(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) + dct = {} dct.update(self.kwargs) return dct -@register_request('setDebuggerProperty') +@register_request("setDebuggerProperty") @register class SetDebuggerPropertyRequest(BaseSchema): """ @@ -15556,55 +13850,46 @@ class SetDebuggerPropertyRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "setDebuggerProperty" - ] - }, - "arguments": { - "type": "SetDebuggerPropertyArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setDebuggerProperty"]}, + "arguments": {"type": "SetDebuggerPropertyArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetDebuggerPropertyArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetDebuggerPropertyArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setDebuggerProperty' + self.type = "request" + self.command = "setDebuggerProperty" if arguments is None: self.arguments = SetDebuggerPropertyArguments() else: - self.arguments = SetDebuggerPropertyArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetDebuggerPropertyArguments else arguments + self.arguments = ( + SetDebuggerPropertyArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetDebuggerPropertyArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -15619,48 +13904,43 @@ class SetDebuggerPropertyArguments(BaseSchema): """ __props__ = { - "ideOS": { - "type": [ - "string" - ], - "description": "OS where the ide is running. Supported values [Windows, Linux]" - }, + "ideOS": {"type": ["string"], "description": "OS where the ide is running. Supported values [Windows, Linux]"}, "dontTraceStartPatterns": { - "type": [ - "array" - ], - "description": "Patterns to match with the start of the file paths. Matching paths will be added to a list of file where trace is ignored." + "type": ["array"], + "description": "Patterns to match with the start of the file paths. Matching paths will be added to a list of file where trace is ignored.", }, "dontTraceEndPatterns": { - "type": [ - "array" - ], - "description": "Patterns to match with the end of the file paths. Matching paths will be added to a list of file where trace is ignored." + "type": ["array"], + "description": "Patterns to match with the end of the file paths. Matching paths will be added to a list of file where trace is ignored.", }, "skipSuspendOnBreakpointException": { - "type": [ - "array" - ], - "description": "List of exceptions that should be skipped when doing condition evaluations." + "type": ["array"], + "description": "List of exceptions that should be skipped when doing condition evaluations.", }, "skipPrintBreakpointException": { - "type": [ - "array" - ], - "description": "List of exceptions that should skip printing to stderr when doing condition evaluations." + "type": ["array"], + "description": "List of exceptions that should skip printing to stderr when doing condition evaluations.", }, "multiThreadsSingleNotification": { - "type": [ - "boolean" - ], - "description": "If false then a notification is generated for each thread event. If true a single event is gnenerated, and all threads follow that behavior." - } + "type": ["boolean"], + "description": "If false then a notification is generated for each thread event. If True a single event is gnenerated, and all threads follow that behavior.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, ideOS=None, dontTraceStartPatterns=None, dontTraceEndPatterns=None, skipSuspendOnBreakpointException=None, skipPrintBreakpointException=None, multiThreadsSingleNotification=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, + ideOS=None, + dontTraceStartPatterns=None, + dontTraceEndPatterns=None, + skipSuspendOnBreakpointException=None, + skipPrintBreakpointException=None, + multiThreadsSingleNotification=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param ['string'] ideOS: OS where the ide is running. Supported values [Windows, Linux] :param ['array'] dontTraceStartPatterns: Patterns to match with the start of the file paths. Matching paths will be added to a list of file where trace is ignored. @@ -15677,7 +13957,6 @@ def __init__(self, ideOS=None, dontTraceStartPatterns=None, dontTraceEndPatterns self.multiThreadsSingleNotification = multiThreadsSingleNotification self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) ideOS = self.ideOS dontTraceStartPatterns = self.dontTraceStartPatterns @@ -15685,25 +13964,24 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un skipSuspendOnBreakpointException = self.skipSuspendOnBreakpointException skipPrintBreakpointException = self.skipPrintBreakpointException multiThreadsSingleNotification = self.multiThreadsSingleNotification - dct = { - } + dct = {} if ideOS is not None: - dct['ideOS'] = ideOS + dct["ideOS"] = ideOS if dontTraceStartPatterns is not None: - dct['dontTraceStartPatterns'] = dontTraceStartPatterns + dct["dontTraceStartPatterns"] = dontTraceStartPatterns if dontTraceEndPatterns is not None: - dct['dontTraceEndPatterns'] = dontTraceEndPatterns + dct["dontTraceEndPatterns"] = dontTraceEndPatterns if skipSuspendOnBreakpointException is not None: - dct['skipSuspendOnBreakpointException'] = skipSuspendOnBreakpointException + dct["skipSuspendOnBreakpointException"] = skipSuspendOnBreakpointException if skipPrintBreakpointException is not None: - dct['skipPrintBreakpointException'] = skipPrintBreakpointException + dct["skipPrintBreakpointException"] = skipPrintBreakpointException if multiThreadsSingleNotification is not None: - dct['multiThreadsSingleNotification'] = multiThreadsSingleNotification + dct["multiThreadsSingleNotification"] = multiThreadsSingleNotification dct.update(self.kwargs) return dct -@register_response('setDebuggerProperty') +@register_response("setDebuggerProperty") @register class SetDebuggerPropertyResponse(BaseSchema): """ @@ -15716,68 +13994,45 @@ class SetDebuggerPropertyResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -15786,7 +14041,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -15796,21 +14050,21 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_event('pydevdInputRequested') +@register_event("pydevdInputRequested") @register class PydevdInputRequestedEvent(BaseSchema): """ @@ -15822,82 +14076,63 @@ class PydevdInputRequestedEvent(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "event" - ] - }, - "event": { - "type": "string", - "enum": [ - "pydevdInputRequested" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["event"]}, + "event": {"type": "string", "enum": ["pydevdInputRequested"]}, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Event-specific information." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Event-specific information.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string event: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string event: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Event-specific information. """ - self.type = 'event' - self.event = 'pydevdInputRequested' + self.type = "event" + self.event = "pydevdInputRequested" self.seq = seq self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) event = self.event seq = self.seq body = self.body dct = { - 'type': type, - 'event': event, - 'seq': seq, + "type": type, + "event": event, + "seq": seq, } if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct -@register_request('setPydevdSourceMap') +@register_request("setPydevdSourceMap") @register class SetPydevdSourceMapRequest(BaseSchema): """ Sets multiple PydevdSourceMap for a single source and clears all previous PydevdSourceMap in that source. - + i.e.: Maps paths and lines in a 1:N mapping (use case: map a single file in the IDE to multiple IPython cells). - + To clear all PydevdSourceMap for a source, specify an empty array. - + Interaction with breakpoints: When a new mapping is sent, breakpoints that match the source (or previously matched a source) are reapplied. - + Interaction with launch pathMapping: both mappings are independent. This mapping is applied after the launch pathMapping. @@ -15907,55 +14142,46 @@ class SetPydevdSourceMapRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "setPydevdSourceMap" - ] - }, - "arguments": { - "type": "SetPydevdSourceMapArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["setPydevdSourceMap"]}, + "arguments": {"type": "SetPydevdSourceMapArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param SetPydevdSourceMapArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param SetPydevdSourceMapArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'setPydevdSourceMap' + self.type = "request" + self.command = "setPydevdSourceMap" if arguments is None: self.arguments = SetPydevdSourceMapArguments() else: - self.arguments = SetPydevdSourceMapArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != SetPydevdSourceMapArguments else arguments + self.arguments = ( + SetPydevdSourceMapArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != SetPydevdSourceMapArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -15972,19 +14198,17 @@ class SetPydevdSourceMapArguments(BaseSchema): __props__ = { "source": { "description": "The source location of the PydevdSourceMap; 'source.path' must be specified (e.g.: for an ipython notebook this could be something as /home/notebook/note.py).", - "type": "Source" + "type": "Source", }, "pydevdSourceMaps": { "type": "array", - "items": { - "$ref": "#/definitions/PydevdSourceMap" - }, - "description": "The PydevdSourceMaps to be set to the given source (provide an empty array to clear the source mappings for a given path)." - } + "items": {"$ref": "#/definitions/PydevdSourceMap"}, + "description": "The PydevdSourceMaps to be set to the given source (provide an empty array to clear the source mappings for a given path).", + }, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, source, pydevdSourceMaps=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -15994,29 +14218,32 @@ def __init__(self, source, pydevdSourceMaps=None, update_ids_from_dap=False, **k if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.pydevdSourceMaps = pydevdSourceMaps if update_ids_from_dap and self.pydevdSourceMaps: for o in self.pydevdSourceMaps: PydevdSourceMap.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) source = self.source pydevdSourceMaps = self.pydevdSourceMaps if pydevdSourceMaps and hasattr(pydevdSourceMaps[0], "to_dict"): pydevdSourceMaps = [x.to_dict() for x in pydevdSourceMaps] dct = { - 'source': source.to_dict(update_ids_to_dap=update_ids_to_dap), + "source": source.to_dict(update_ids_to_dap=update_ids_to_dap), } if pydevdSourceMaps is not None: - dct['pydevdSourceMaps'] = [PydevdSourceMap.update_dict_ids_to_dap(o) for o in pydevdSourceMaps] if (update_ids_to_dap and pydevdSourceMaps) else pydevdSourceMaps + dct["pydevdSourceMaps"] = ( + [PydevdSourceMap.update_dict_ids_to_dap(o) for o in pydevdSourceMaps] + if (update_ids_to_dap and pydevdSourceMaps) + else pydevdSourceMaps + ) dct.update(self.kwargs) return dct -@register_response('setPydevdSourceMap') +@register_response("setPydevdSourceMap") @register class SetPydevdSourceMapResponse(BaseSchema): """ @@ -16029,68 +14256,45 @@ class SetPydevdSourceMapResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Contains request result if success is true and optional error details if success is false." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Contains request result if success is True and error details if success is false.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, seq=-1, message=None, body=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and optional error details if success is false. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] body: Contains request result if success is true and error details if success is false. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command @@ -16099,7 +14303,6 @@ def __init__(self, request_seq, success, command, seq=-1, message=None, body=Non self.body = body self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -16109,16 +14312,16 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message body = self.body dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message if body is not None: - dct['body'] = body + dct["body"] = body dct.update(self.kwargs) return dct @@ -16134,24 +14337,21 @@ class PydevdSourceMap(BaseSchema): __props__ = { "line": { "type": "integer", - "description": "The local line to which the mapping should map to (e.g.: for an ipython notebook this would be the first line of the cell in the file)." - }, - "endLine": { - "type": "integer", - "description": "The end line." + "description": "The local line to which the mapping should map to (e.g.: for an ipython notebook this would be the first line of the cell in the file).", }, + "endLine": {"type": "integer", "description": "The end line."}, "runtimeSource": { "description": "The path that the user has remotely -- 'source.path' must be specified (e.g.: for an ipython notebook this could be something as '')", - "type": "Source" + "type": "Source", }, "runtimeLine": { "type": "integer", - "description": "The remote line to which the mapping should map to (e.g.: for an ipython notebook this would be always 1 as it'd map the start of the cell)." - } + "description": "The remote line to which the mapping should map to (e.g.: for an ipython notebook this would be always 1 as it'd map the start of the cell).", + }, } - __refs__ = set(['runtimeSource']) + __refs__ = set(["runtimeSource"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, line, endLine, runtimeSource, runtimeLine, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16165,27 +14365,28 @@ def __init__(self, line, endLine, runtimeSource, runtimeLine, update_ids_from_da if runtimeSource is None: self.runtimeSource = Source() else: - self.runtimeSource = Source(update_ids_from_dap=update_ids_from_dap, **runtimeSource) if runtimeSource.__class__ != Source else runtimeSource + self.runtimeSource = ( + Source(update_ids_from_dap=update_ids_from_dap, **runtimeSource) if runtimeSource.__class__ != Source else runtimeSource + ) self.runtimeLine = runtimeLine self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) line = self.line endLine = self.endLine runtimeSource = self.runtimeSource runtimeLine = self.runtimeLine dct = { - 'line': line, - 'endLine': endLine, - 'runtimeSource': runtimeSource.to_dict(update_ids_to_dap=update_ids_to_dap), - 'runtimeLine': runtimeLine, + "line": line, + "endLine": endLine, + "runtimeSource": runtimeSource.to_dict(update_ids_to_dap=update_ids_to_dap), + "runtimeLine": runtimeLine, } dct.update(self.kwargs) return dct -@register_request('pydevdSystemInfo') +@register_request("pydevdSystemInfo") @register class PydevdSystemInfoRequest(BaseSchema): """ @@ -16197,57 +14398,48 @@ class PydevdSystemInfoRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "command": { - "type": "string", - "enum": [ - "pydevdSystemInfo" - ] - }, - "arguments": { - "type": "PydevdSystemInfoArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["pydevdSystemInfo"]}, + "arguments": {"type": "PydevdSystemInfoArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, seq=-1, arguments=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param PydevdSystemInfoArguments arguments: + :param string type: + :param string command: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param PydevdSystemInfoArguments arguments: """ - self.type = 'request' - self.command = 'pydevdSystemInfo' + self.type = "request" + self.command = "pydevdSystemInfo" self.seq = seq if arguments is None: self.arguments = PydevdSystemInfoArguments() else: - self.arguments = PydevdSystemInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != PydevdSystemInfoArguments else arguments + self.arguments = ( + PydevdSystemInfoArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != PydevdSystemInfoArguments + else arguments + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command seq = self.seq arguments = self.arguments dct = { - 'type': type, - 'command': command, - 'seq': seq, + "type": type, + "command": command, + "seq": seq, } if arguments is not None: - dct['arguments'] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["arguments"] = arguments.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -16263,24 +14455,20 @@ class PydevdSystemInfoArguments(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct -@register_response('pydevdSystemInfo') +@register_response("pydevdSystemInfo") @register class PydevdSystemInfoResponse(BaseSchema): """ @@ -16292,95 +14480,72 @@ class PydevdSystemInfoResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { "python": { "$ref": "#/definitions/PydevdPythonInfo", - "description": "Information about the python version running in the current process." + "description": "Information about the python version running in the current process.", }, "platform": { "$ref": "#/definitions/PydevdPlatformInfo", - "description": "Information about the plarforn on which the current process is running." - }, - "process": { - "$ref": "#/definitions/PydevdProcessInfo", - "description": "Information about the current process." + "description": "Information about the plarforn on which the current process is running.", }, - "pydevd": { - "$ref": "#/definitions/PydevdInfo", - "description": "Information about pydevd." - } + "process": {"$ref": "#/definitions/PydevdProcessInfo", "description": "Information about the current process."}, + "pydevd": {"$ref": "#/definitions/PydevdInfo", "description": "Information about pydevd."}, }, - "required": [ - "python", - "platform", - "process", - "pydevd" - ] - } + "required": ["python", "platform", "process", "pydevd"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param PydevdSystemInfoResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param PydevdSystemInfoResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = PydevdSystemInfoResponseBody() else: - self.body = PydevdSystemInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != PydevdSystemInfoResponseBody else body + self.body = ( + PydevdSystemInfoResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != PydevdSystemInfoResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -16390,15 +14555,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct @@ -16414,16 +14579,16 @@ class PydevdPythonInfo(BaseSchema): __props__ = { "version": { "type": "string", - "description": "Python version as a string in semver format: ..." + "description": "Python version as a string in semver format: ...", }, "implementation": { "description": "Python version as a string in this format ...", - "type": "PydevdPythonImplementationInfo" - } + "type": "PydevdPythonImplementationInfo", + }, } - __refs__ = set(['implementation']) + __refs__ = set(["implementation"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, version=None, implementation=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16434,19 +14599,21 @@ def __init__(self, version=None, implementation=None, update_ids_from_dap=False, if implementation is None: self.implementation = PydevdPythonImplementationInfo() else: - self.implementation = PydevdPythonImplementationInfo(update_ids_from_dap=update_ids_from_dap, **implementation) if implementation.__class__ != PydevdPythonImplementationInfo else implementation + self.implementation = ( + PydevdPythonImplementationInfo(update_ids_from_dap=update_ids_from_dap, **implementation) + if implementation.__class__ != PydevdPythonImplementationInfo + else implementation + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) version = self.version implementation = self.implementation - dct = { - } + dct = {} if version is not None: - dct['version'] = version + dct["version"] = version if implementation is not None: - dct['implementation'] = implementation.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["implementation"] = implementation.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -16460,22 +14627,16 @@ class PydevdPythonImplementationInfo(BaseSchema): """ __props__ = { - "name": { - "type": "string", - "description": "Python implementation name." - }, + "name": {"type": "string", "description": "Python implementation name."}, "version": { "type": "string", - "description": "Python version as a string in semver format: ..." + "description": "Python version as a string in semver format: ...", }, - "description": { - "type": "string", - "description": "Optional description for this python implementation." - } + "description": {"type": "string", "description": "Optional description for this python implementation."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, name=None, version=None, description=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16488,19 +14649,17 @@ def __init__(self, name=None, version=None, description=None, update_ids_from_da self.description = description self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name version = self.version description = self.description - dct = { - } + dct = {} if name is not None: - dct['name'] = name + dct["name"] = name if version is not None: - dct['version'] = version + dct["version"] = version if description is not None: - dct['description'] = description + dct["description"] = description dct.update(self.kwargs) return dct @@ -16513,15 +14672,10 @@ class PydevdPlatformInfo(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "name": { - "type": "string", - "description": "Name of the platform as returned by 'sys.platform'." - } - } + __props__ = {"name": {"type": "string", "description": "Name of the platform as returned by 'sys.platform'."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, name=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16530,13 +14684,11 @@ def __init__(self, name=None, update_ids_from_dap=False, **kwargs): # noqa (upd self.name = name self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name - dct = { - } + dct = {} if name is not None: - dct['name'] = name + dct["name"] = name dct.update(self.kwargs) return dct @@ -16550,26 +14702,14 @@ class PydevdProcessInfo(BaseSchema): """ __props__ = { - "pid": { - "type": "integer", - "description": "Process ID for the current process." - }, - "ppid": { - "type": "integer", - "description": "Parent Process ID for the current process." - }, - "executable": { - "type": "string", - "description": "Path to the executable as returned by 'sys.executable'." - }, - "bitness": { - "type": "integer", - "description": "Integer value indicating the bitness of the current process." - } + "pid": {"type": "integer", "description": "Process ID for the current process."}, + "ppid": {"type": "integer", "description": "Parent Process ID for the current process."}, + "executable": {"type": "string", "description": "Path to the executable as returned by 'sys.executable'."}, + "bitness": {"type": "integer", "description": "Integer value indicating the bitness of the current process."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, pid=None, ppid=None, executable=None, bitness=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16584,22 +14724,20 @@ def __init__(self, pid=None, ppid=None, executable=None, bitness=None, update_id self.bitness = bitness self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) pid = self.pid ppid = self.ppid executable = self.executable bitness = self.bitness - dct = { - } + dct = {} if pid is not None: - dct['pid'] = pid + dct["pid"] = pid if ppid is not None: - dct['ppid'] = ppid + dct["ppid"] = ppid if executable is not None: - dct['executable'] = executable + dct["executable"] = executable if bitness is not None: - dct['bitness'] = bitness + dct["bitness"] = bitness dct.update(self.kwargs) return dct @@ -16613,18 +14751,12 @@ class PydevdInfo(BaseSchema): """ __props__ = { - "usingCython": { - "type": "boolean", - "description": "Specifies whether the cython native module is being used." - }, - "usingFrameEval": { - "type": "boolean", - "description": "Specifies whether the frame eval native module is being used." - } + "usingCython": {"type": "boolean", "description": "Specifies whether the cython native module is being used."}, + "usingFrameEval": {"type": "boolean", "description": "Specifies whether the frame eval native module is being used."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, usingCython=None, usingFrameEval=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16635,21 +14767,19 @@ def __init__(self, usingCython=None, usingFrameEval=None, update_ids_from_dap=Fa self.usingFrameEval = usingFrameEval self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) usingCython = self.usingCython usingFrameEval = self.usingFrameEval - dct = { - } + dct = {} if usingCython is not None: - dct['usingCython'] = usingCython + dct["usingCython"] = usingCython if usingFrameEval is not None: - dct['usingFrameEval'] = usingFrameEval + dct["usingFrameEval"] = usingFrameEval dct.update(self.kwargs) return dct -@register_request('pydevdAuthorize') +@register_request("pydevdAuthorize") @register class PydevdAuthorizeRequest(BaseSchema): """ @@ -16661,55 +14791,46 @@ class PydevdAuthorizeRequest(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "request" - ] - }, - "command": { - "type": "string", - "enum": [ - "pydevdAuthorize" - ] + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, - "arguments": { - "type": "PydevdAuthorizeArguments" - } + "type": {"type": "string", "enum": ["request"]}, + "command": {"type": "string", "enum": ["pydevdAuthorize"]}, + "arguments": {"type": "PydevdAuthorizeArguments"}, } - __refs__ = set(['arguments']) + __refs__ = set(["arguments"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, arguments, seq=-1, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: - :param string command: - :param PydevdAuthorizeArguments arguments: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. + :param string type: + :param string command: + :param PydevdAuthorizeArguments arguments: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. """ - self.type = 'request' - self.command = 'pydevdAuthorize' + self.type = "request" + self.command = "pydevdAuthorize" if arguments is None: self.arguments = PydevdAuthorizeArguments() else: - self.arguments = PydevdAuthorizeArguments(update_ids_from_dap=update_ids_from_dap, **arguments) if arguments.__class__ != PydevdAuthorizeArguments else arguments + self.arguments = ( + PydevdAuthorizeArguments(update_ids_from_dap=update_ids_from_dap, **arguments) + if arguments.__class__ != PydevdAuthorizeArguments + else arguments + ) self.seq = seq self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) command = self.command arguments = self.arguments seq = self.seq dct = { - 'type': type, - 'command': command, - 'arguments': arguments.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "command": command, + "arguments": arguments.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } dct.update(self.kwargs) return dct @@ -16723,15 +14844,10 @@ class PydevdAuthorizeArguments(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "debugServerAccessToken": { - "type": "string", - "description": "The access token to access the debug server." - } - } + __props__ = {"debugServerAccessToken": {"type": "string", "description": "The access token to access the debug server."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, debugServerAccessToken=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -16740,18 +14856,16 @@ def __init__(self, debugServerAccessToken=None, update_ids_from_dap=False, **kwa self.debugServerAccessToken = debugServerAccessToken self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) debugServerAccessToken = self.debugServerAccessToken - dct = { - } + dct = {} if debugServerAccessToken is not None: - dct['debugServerAccessToken'] = debugServerAccessToken + dct["debugServerAccessToken"] = debugServerAccessToken dct.update(self.kwargs) return dct -@register_response('pydevdAuthorize') +@register_response("pydevdAuthorize") @register class PydevdAuthorizeResponse(BaseSchema): """ @@ -16763,80 +14877,63 @@ class PydevdAuthorizeResponse(BaseSchema): __props__ = { "seq": { "type": "integer", - "description": "Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request." - }, - "type": { - "type": "string", - "enum": [ - "response" - ] - }, - "request_seq": { - "type": "integer", - "description": "Sequence number of the corresponding request." + "description": "Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request.", }, + "type": {"type": "string", "enum": ["response"]}, + "request_seq": {"type": "integer", "description": "Sequence number of the corresponding request."}, "success": { "type": "boolean", - "description": "Outcome of the request.\nIf true, the request was successful and the 'body' attribute may contain the result of the request.\nIf the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error')." - }, - "command": { - "type": "string", - "description": "The command requested." + "description": "Outcome of the request.\nIf True, the request was successful and the `body` attribute may contain the result of the request.\nIf the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`).", }, + "command": {"type": "string", "description": "The command requested."}, "message": { "type": "string", - "description": "Contains the raw error in short form if 'success' is false.\nThis raw error might be interpreted by the frontend and is not shown in the UI.\nSome predefined values exist.", - "_enum": [ - "cancelled" - ], - "enumDescriptions": [ - "request was cancelled." - ] + "description": "Contains the raw error in short form if `success` is false.\nThis raw error might be interpreted by the client and is not shown in the UI.\nSome predefined values exist.", + "_enum": ["cancelled", "notStopped"], + "enumDescriptions": ["the request was cancelled.", "the request may be retried once the adapter is in a 'stopped' state."], }, "body": { "type": "object", "properties": { - "clientAccessToken": { - "type": "string", - "description": "The access token to access the client (i.e.: usually the IDE)." - } + "clientAccessToken": {"type": "string", "description": "The access token to access the client (i.e.: usually the IDE)."} }, - "required": [ - "clientAccessToken" - ] - } + "required": ["clientAccessToken"], + }, } - __refs__ = set(['body']) + __refs__ = set(["body"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, request_seq, success, command, body, seq=-1, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string type: + :param string type: :param integer request_seq: Sequence number of the corresponding request. :param boolean success: Outcome of the request. - If true, the request was successful and the 'body' attribute may contain the result of the request. - If the value is false, the attribute 'message' contains the error in short form and the 'body' may contain additional information (see 'ErrorResponse.body.error'). + If true, the request was successful and the `body` attribute may contain the result of the request. + If the value is false, the attribute `message` contains the error in short form and the `body` may contain additional information (see `ErrorResponse.body.error`). :param string command: The command requested. - :param PydevdAuthorizeResponseBody body: - :param integer seq: Sequence number (also known as message ID). For protocol messages of type 'request' this ID can be used to cancel the request. - :param string message: Contains the raw error in short form if 'success' is false. - This raw error might be interpreted by the frontend and is not shown in the UI. + :param PydevdAuthorizeResponseBody body: + :param integer seq: Sequence number of the message (also known as message ID). The `seq` for the first message sent by a client or debug adapter is 1, and for each subsequent message is 1 greater than the previous message sent by that actor. `seq` can be used to order requests, responses, and events, and to associate requests with their corresponding responses. For protocol messages of type `request` the sequence number can be used to cancel the request. + :param string message: Contains the raw error in short form if `success` is false. + This raw error might be interpreted by the client and is not shown in the UI. Some predefined values exist. """ - self.type = 'response' + self.type = "response" self.request_seq = request_seq self.success = success self.command = command if body is None: self.body = PydevdAuthorizeResponseBody() else: - self.body = PydevdAuthorizeResponseBody(update_ids_from_dap=update_ids_from_dap, **body) if body.__class__ != PydevdAuthorizeResponseBody else body + self.body = ( + PydevdAuthorizeResponseBody(update_ids_from_dap=update_ids_from_dap, **body) + if body.__class__ != PydevdAuthorizeResponseBody + else body + ) self.seq = seq self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) type = self.type # noqa (assign to builtin) request_seq = self.request_seq @@ -16846,15 +14943,15 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un seq = self.seq message = self.message dct = { - 'type': type, - 'request_seq': request_seq, - 'success': success, - 'command': command, - 'body': body.to_dict(update_ids_to_dap=update_ids_to_dap), - 'seq': seq, + "type": type, + "request_seq": request_seq, + "success": success, + "command": command, + "body": body.to_dict(update_ids_to_dap=update_ids_to_dap), + "seq": seq, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct @@ -16867,33 +14964,26 @@ class ErrorResponseBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "error": { - "description": "An optional, structured error message.", - "type": "Message" - } - } - __refs__ = set(['error']) + __props__ = {"error": {"description": "A structured error message.", "type": "Message"}} + __refs__ = set(["error"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, error=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param Message error: An optional, structured error message. + :param Message error: A structured error message. """ if error is None: self.error = Message() else: - self.error = Message(update_ids_from_dap=update_ids_from_dap, **error) if error.__class__ != Message else error + self.error = Message(update_ids_from_dap=update_ids_from_dap, **error) if error.__class__ != Message else error self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) error = self.error - dct = { - } + dct = {} if error is not None: - dct['error'] = error.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["error"] = error.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -16909,7 +14999,7 @@ class StoppedEventBody(BaseSchema): __props__ = { "reason": { "type": "string", - "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the 'description' attribute is missing (but it must not be translated).", + "description": "The reason for the event.\nFor backward compatibility this string is shown in the UI if the `description` attribute is missing (but it must not be translated).", "_enum": [ "step", "breakpoint", @@ -16919,53 +15009,59 @@ class StoppedEventBody(BaseSchema): "goto", "function breakpoint", "data breakpoint", - "instruction breakpoint" - ] + "instruction breakpoint", + ], }, "description": { "type": "string", - "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and must be translated." - }, - "threadId": { - "type": "integer", - "description": "The thread which was stopped." + "description": "The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and can be translated.", }, + "threadId": {"type": "integer", "description": "The thread which was stopped."}, "preserveFocusHint": { "type": "boolean", - "description": "A value of true hints to the frontend that this event should not change the focus." + "description": "A value of True hints to the client that this event should not change the focus.", }, "text": { "type": "string", - "description": "Additional information. E.g. if reason is 'exception', text contains the exception name. This string is shown in the UI." + "description": "Additional information. E.g. if reason is `exception`, text contains the exception name. This string is shown in the UI.", }, "allThreadsStopped": { "type": "boolean", - "description": "If 'allThreadsStopped' is true, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given threadId can be expanded." + "description": "If `allThreadsStopped` is True, a debug adapter can announce that all threads have stopped.\n- The client should use this information to enable that all threads can be expanded to access their stacktraces.\n- If the attribute is missing or false, only the thread with the given `threadId` can be expanded.", }, "hitBreakpointIds": { "type": "array", - "items": { - "type": "integer" - }, - "description": "Ids of the breakpoints that triggered the event. In most cases there will be only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location." - } + "items": {"type": "integer"}, + "description": "Ids of the breakpoints that triggered the event. In most cases there is only a single breakpoint but here are some examples for multiple breakpoints:\n- Different types of breakpoints map to the same location.\n- Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime.\n- Multiple function breakpoints with different function names map to the same location.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, reason, description=None, threadId=None, preserveFocusHint=None, text=None, allThreadsStopped=None, hitBreakpointIds=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + reason, + description=None, + threadId=None, + preserveFocusHint=None, + text=None, + allThreadsStopped=None, + hitBreakpointIds=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string reason: The reason for the event. - For backward compatibility this string is shown in the UI if the 'description' attribute is missing (but it must not be translated). - :param string description: The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and must be translated. + For backward compatibility this string is shown in the UI if the `description` attribute is missing (but it must not be translated). + :param string description: The full reason for the event, e.g. 'Paused on exception'. This string is shown in the UI as is and can be translated. :param integer threadId: The thread which was stopped. - :param boolean preserveFocusHint: A value of true hints to the frontend that this event should not change the focus. - :param string text: Additional information. E.g. if reason is 'exception', text contains the exception name. This string is shown in the UI. - :param boolean allThreadsStopped: If 'allThreadsStopped' is true, a debug adapter can announce that all threads have stopped. + :param boolean preserveFocusHint: A value of true hints to the client that this event should not change the focus. + :param string text: Additional information. E.g. if reason is `exception`, text contains the exception name. This string is shown in the UI. + :param boolean allThreadsStopped: If `allThreadsStopped` is true, a debug adapter can announce that all threads have stopped. - The client should use this information to enable that all threads can be expanded to access their stacktraces. - - If the attribute is missing or false, only the thread with the given threadId can be expanded. - :param array hitBreakpointIds: Ids of the breakpoints that triggered the event. In most cases there will be only a single breakpoint but here are some examples for multiple breakpoints: + - If the attribute is missing or false, only the thread with the given `threadId` can be expanded. + :param array hitBreakpointIds: Ids of the breakpoints that triggered the event. In most cases there is only a single breakpoint but here are some examples for multiple breakpoints: - Different types of breakpoints map to the same location. - Multiple source breakpoints get collapsed to the same instruction by the compiler/runtime. - Multiple function breakpoints with different function names map to the same location. @@ -16980,12 +15076,11 @@ def __init__(self, reason, description=None, threadId=None, preserveFocusHint=No if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -17002,27 +15097,27 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'reason': reason, + "reason": reason, } if description is not None: - dct['description'] = description + dct["description"] = description if threadId is not None: - dct['threadId'] = threadId + dct["threadId"] = threadId if preserveFocusHint is not None: - dct['preserveFocusHint'] = preserveFocusHint + dct["preserveFocusHint"] = preserveFocusHint if text is not None: - dct['text'] = text + dct["text"] = text if allThreadsStopped is not None: - dct['allThreadsStopped'] = allThreadsStopped + dct["allThreadsStopped"] = allThreadsStopped if hitBreakpointIds is not None: - dct['hitBreakpointIds'] = hitBreakpointIds + dct["hitBreakpointIds"] = hitBreakpointIds dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct @@ -17035,35 +15130,31 @@ class ContinuedEventBody(BaseSchema): """ __props__ = { - "threadId": { - "type": "integer", - "description": "The thread which was continued." - }, + "threadId": {"type": "integer", "description": "The thread which was continued."}, "allThreadsContinued": { "type": "boolean", - "description": "If 'allThreadsContinued' is true, a debug adapter can announce that all threads have continued." - } + "description": "If `allThreadsContinued` is True, a debug adapter can announce that all threads have continued.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threadId, allThreadsContinued=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param integer threadId: The thread which was continued. - :param boolean allThreadsContinued: If 'allThreadsContinued' is true, a debug adapter can announce that all threads have continued. + :param boolean allThreadsContinued: If `allThreadsContinued` is true, a debug adapter can announce that all threads have continued. """ self.threadId = threadId self.allThreadsContinued = allThreadsContinued if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -17073,17 +15164,17 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'threadId': threadId, + "threadId": threadId, } if allThreadsContinued is not None: - dct['allThreadsContinued'] = allThreadsContinued + dct["allThreadsContinued"] = allThreadsContinued dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct @@ -17095,15 +15186,10 @@ class ExitedEventBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "exitCode": { - "type": "integer", - "description": "The exit code returned from the debuggee." - } - } + __props__ = {"exitCode": {"type": "integer", "description": "The exit code returned from the debuggee."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, exitCode, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -17112,11 +15198,10 @@ def __init__(self, exitCode, update_ids_from_dap=False, **kwargs): # noqa (upda self.exitCode = exitCode self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) exitCode = self.exitCode dct = { - 'exitCode': exitCode, + "exitCode": exitCode, } dct.update(self.kwargs) return dct @@ -17132,37 +15217,27 @@ class TerminatedEventBody(BaseSchema): __props__ = { "restart": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "A debug adapter may set 'restart' to true (or to an arbitrary object) to request that the front end restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute '__restart' to the 'launch' and 'attach' requests." + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "A debug adapter may set `restart` to True (or to an arbitrary object) to request that the client restarts the session.\nThe value is not interpreted by the client and passed unmodified as an attribute `__restart` to the `launch` and `attach` requests.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, restart=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] restart: A debug adapter may set 'restart' to true (or to an arbitrary object) to request that the front end restarts the session. - The value is not interpreted by the client and passed unmodified as an attribute '__restart' to the 'launch' and 'attach' requests. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] restart: A debug adapter may set `restart` to true (or to an arbitrary object) to request that the client restarts the session. + The value is not interpreted by the client and passed unmodified as an attribute `__restart` to the `launch` and `attach` requests. """ self.restart = restart self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) restart = self.restart - dct = { - } + dct = {} if restart is not None: - dct['restart'] = restart + dct["restart"] = restart dct.update(self.kwargs) return dct @@ -17176,22 +15251,12 @@ class ThreadEventBody(BaseSchema): """ __props__ = { - "reason": { - "type": "string", - "description": "The reason for the event.", - "_enum": [ - "started", - "exited" - ] - }, - "threadId": { - "type": "integer", - "description": "The identifier of the thread." - } + "reason": {"type": "string", "description": "The reason for the event.", "_enum": ["started", "exited"]}, + "threadId": {"type": "integer", "description": "The identifier of the thread."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, reason, threadId, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -17203,12 +15268,11 @@ def __init__(self, reason, threadId, update_ids_from_dap=False, **kwargs): # no if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -17218,16 +15282,16 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if threadId is not None: threadId = self._translate_id_to_dap(threadId) dct = { - 'reason': reason, - 'threadId': threadId, + "reason": reason, + "threadId": threadId, } dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct @@ -17242,83 +15306,68 @@ class OutputEventBody(BaseSchema): __props__ = { "category": { "type": "string", - "description": "The output category. If not specified or if the category is not understand by the client, 'console' is assumed.", - "_enum": [ - "console", - "important", - "stdout", - "stderr", - "telemetry" - ], + "description": "The output category. If not specified or if the category is not understood by the client, `console` is assumed.", + "_enum": ["console", "important", "stdout", "stderr", "telemetry"], "enumDescriptions": [ "Show the output in the client's default message UI, e.g. a 'debug console'. This category should only be used for informational output from the debugger (as opposed to the debuggee).", - "A hint for the client to show the ouput in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the 'console' category.", + "A hint for the client to show the output in the client's UI for important and highly visible information, e.g. as a popup notification. This category should only be used for important messages from the debugger (as opposed to the debuggee). Since this category value is a hint, clients might ignore the hint and assume the `console` category.", "Show the output as normal program output from the debuggee.", "Show the output as error program output from the debuggee.", - "Send the output to telemetry instead of showing it to the user." - ] - }, - "output": { - "type": "string", - "description": "The output to report." + "Send the output to telemetry instead of showing it to the user.", + ], }, + "output": {"type": "string", "description": "The output to report."}, "group": { "type": "string", "description": "Support for keeping an output log organized by grouping related messages.", - "enum": [ - "start", - "startCollapsed", - "end" - ], + "enum": ["start", "startCollapsed", "end"], "enumDescriptions": [ - "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe 'output' attribute becomes the name of the group and is not indented.", - "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe 'output' attribute becomes the name of the group and is not indented.", - "End the current group and decreases the indentation of subsequent output events.\nA non empty 'output' attribute is shown as the unindented end of the group." - ] + "Start a new group in expanded mode. Subsequent output events are members of the group and should be shown indented.\nThe `output` attribute becomes the name of the group and is not indented.", + "Start a new group in collapsed mode. Subsequent output events are members of the group and should be shown indented (as soon as the group is expanded).\nThe `output` attribute becomes the name of the group and is not indented.", + "End the current group and decrease the indentation of subsequent output events.\nA non-empty `output` attribute is shown as the unindented end of the group.", + ], }, "variablesReference": { "type": "integer", - "description": "If an attribute 'variablesReference' exists and its value is > 0, the output contains objects which can be retrieved by passing 'variablesReference' to the 'variables' request. The value should be less than or equal to 2147483647 (2^31-1)." - }, - "source": { - "description": "An optional source location where the output was produced.", - "type": "Source" - }, - "line": { - "type": "integer", - "description": "An optional source location line where the output was produced." + "description": "If an attribute `variablesReference` exists and its value is > 0, the output contains objects which can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, + "source": {"description": "The source location where the output was produced.", "type": "Source"}, + "line": {"type": "integer", "description": "The source location's line where the output was produced."}, "column": { "type": "integer", - "description": "An optional source location column where the output was produced." + "description": "The position in `line` where the output was produced. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based.", }, "data": { - "type": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ], - "description": "Optional data to report. For the 'telemetry' category the data will be sent to telemetry, for the other categories the data is shown in JSON format." - } + "type": ["array", "boolean", "integer", "null", "number", "object", "string"], + "description": "Additional data to report. For the `telemetry` category the data is sent to telemetry, for the other categories the data is shown in JSON format.", + }, } - __refs__ = set(['source']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, output, category=None, group=None, variablesReference=None, source=None, line=None, column=None, data=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["source"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + output, + category=None, + group=None, + variablesReference=None, + source=None, + line=None, + column=None, + data=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string output: The output to report. - :param string category: The output category. If not specified or if the category is not understand by the client, 'console' is assumed. + :param string category: The output category. If not specified or if the category is not understood by the client, `console` is assumed. :param string group: Support for keeping an output log organized by grouping related messages. - :param integer variablesReference: If an attribute 'variablesReference' exists and its value is > 0, the output contains objects which can be retrieved by passing 'variablesReference' to the 'variables' request. The value should be less than or equal to 2147483647 (2^31-1). - :param Source source: An optional source location where the output was produced. - :param integer line: An optional source location line where the output was produced. - :param integer column: An optional source location column where the output was produced. - :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] data: Optional data to report. For the 'telemetry' category the data will be sent to telemetry, for the other categories the data is shown in JSON format. + :param integer variablesReference: If an attribute `variablesReference` exists and its value is > 0, the output contains objects which can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. + :param Source source: The source location where the output was produced. + :param integer line: The source location's line where the output was produced. + :param integer column: The position in `line` where the output was produced. It is measured in UTF-16 code units and the client capability `columnsStartAt1` determines whether it is 0- or 1-based. + :param ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'] data: Additional data to report. For the `telemetry` category the data is sent to telemetry, for the other categories the data is shown in JSON format. """ self.output = output self.category = category @@ -17327,19 +15376,18 @@ def __init__(self, output, category=None, group=None, variablesReference=None, s if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.line = line self.column = column self.data = data if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -17355,29 +15403,29 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'output': output, + "output": output, } if category is not None: - dct['category'] = category + dct["category"] = category if group is not None: - dct['group'] = group + dct["group"] = group if variablesReference is not None: - dct['variablesReference'] = variablesReference + dct["variablesReference"] = variablesReference if source is not None: - dct['source'] = source.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["source"] = source.to_dict(update_ids_to_dap=update_ids_to_dap) if line is not None: - dct['line'] = line + dct["line"] = line if column is not None: - dct['column'] = column + dct["column"] = column if data is not None: - dct['data'] = data + dct["data"] = data dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @@ -17390,43 +15438,36 @@ class BreakpointEventBody(BaseSchema): """ __props__ = { - "reason": { - "type": "string", - "description": "The reason for the event.", - "_enum": [ - "changed", - "new", - "removed" - ] - }, + "reason": {"type": "string", "description": "The reason for the event.", "_enum": ["changed", "new", "removed"]}, "breakpoint": { - "description": "The 'id' attribute is used to find the target breakpoint and the other attributes are used as the new values.", - "type": "Breakpoint" - } + "description": "The `id` attribute is used to find the target breakpoint, the other attributes are used as the new values.", + "type": "Breakpoint", + }, } - __refs__ = set(['breakpoint']) + __refs__ = set(["breakpoint"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, reason, breakpoint, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string reason: The reason for the event. - :param Breakpoint breakpoint: The 'id' attribute is used to find the target breakpoint and the other attributes are used as the new values. + :param Breakpoint breakpoint: The `id` attribute is used to find the target breakpoint, the other attributes are used as the new values. """ self.reason = reason if breakpoint is None: self.breakpoint = Breakpoint() else: - self.breakpoint = Breakpoint(update_ids_from_dap=update_ids_from_dap, **breakpoint) if breakpoint.__class__ != Breakpoint else breakpoint + self.breakpoint = ( + Breakpoint(update_ids_from_dap=update_ids_from_dap, **breakpoint) if breakpoint.__class__ != Breakpoint else breakpoint + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) reason = self.reason breakpoint = self.breakpoint # noqa (assign to builtin) dct = { - 'reason': reason, - 'breakpoint': breakpoint.to_dict(update_ids_to_dap=update_ids_to_dap), + "reason": reason, + "breakpoint": breakpoint.to_dict(update_ids_to_dap=update_ids_to_dap), } dct.update(self.kwargs) return dct @@ -17440,44 +15481,35 @@ class ModuleEventBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "reason": { - "type": "string", - "description": "The reason for the event.", - "enum": [ - "new", - "changed", - "removed" - ] - }, + __props__ = { + "reason": {"type": "string", "description": "The reason for the event.", "enum": ["new", "changed", "removed"]}, "module": { - "description": "The new, changed, or removed module. In case of 'removed' only the module id is used.", - "type": "Module" - } + "description": "The new, changed, or removed module. In case of `removed` only the module id is used.", + "type": "Module", + }, } - __refs__ = set(['module']) + __refs__ = set(["module"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, reason, module, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string reason: The reason for the event. - :param Module module: The new, changed, or removed module. In case of 'removed' only the module id is used. + :param Module module: The new, changed, or removed module. In case of `removed` only the module id is used. """ self.reason = reason if module is None: self.module = Module() else: - self.module = Module(update_ids_from_dap=update_ids_from_dap, **module) if module.__class__ != Module else module + self.module = Module(update_ids_from_dap=update_ids_from_dap, **module) if module.__class__ != Module else module self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) reason = self.reason module = self.module dct = { - 'reason': reason, - 'module': module.to_dict(update_ids_to_dap=update_ids_to_dap), + "reason": reason, + "module": module.to_dict(update_ids_to_dap=update_ids_to_dap), } dct.update(self.kwargs) return dct @@ -17492,23 +15524,12 @@ class LoadedSourceEventBody(BaseSchema): """ __props__ = { - "reason": { - "type": "string", - "description": "The reason for the event.", - "enum": [ - "new", - "changed", - "removed" - ] - }, - "source": { - "description": "The new, changed, or removed source.", - "type": "Source" - } + "reason": {"type": "string", "description": "The reason for the event.", "enum": ["new", "changed", "removed"]}, + "source": {"description": "The new, changed, or removed source.", "type": "Source"}, } - __refs__ = set(['source']) + __refs__ = set(["source"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, reason, source, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -17519,16 +15540,15 @@ def __init__(self, reason, source, update_ids_from_dap=False, **kwargs): # noqa if source is None: self.source = Source() else: - self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source + self.source = Source(update_ids_from_dap=update_ids_from_dap, **source) if source.__class__ != Source else source self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) reason = self.reason source = self.source dct = { - 'reason': reason, - 'source': source.to_dict(update_ids_to_dap=update_ids_to_dap), + "reason": reason, + "source": source.to_dict(update_ids_to_dap=update_ids_to_dap), } dct.update(self.kwargs) return dct @@ -17545,43 +15565,38 @@ class ProcessEventBody(BaseSchema): __props__ = { "name": { "type": "string", - "description": "The logical name of the process. This is usually the full path to process's executable file. Example: /home/example/myproj/program.js." + "description": "The logical name of the process. This is usually the full path to process's executable file. Example: /home/example/myproj/program.js.", }, "systemProcessId": { "type": "integer", - "description": "The system process id of the debugged process. This property will be missing for non-system processes." - }, - "isLocalProcess": { - "type": "boolean", - "description": "If true, the process is running on the same computer as the debug adapter." + "description": "The system process id of the debugged process. This property is missing for non-system processes.", }, + "isLocalProcess": {"type": "boolean", "description": "If True, the process is running on the same computer as the debug adapter."}, "startMethod": { "type": "string", - "enum": [ - "launch", - "attach", - "attachForSuspendedLaunch" - ], + "enum": ["launch", "attach", "attachForSuspendedLaunch"], "description": "Describes how the debug engine started debugging this process.", "enumDescriptions": [ "Process was launched under the debugger.", "Debugger attached to an existing process.", - "A project launcher component has launched a new process in a suspended state and then asked the debugger to attach." - ] + "A project launcher component has launched a new process in a suspended state and then asked the debugger to attach.", + ], }, "pointerSize": { "type": "integer", - "description": "The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display." - } + "description": "The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, name, systemProcessId=None, isLocalProcess=None, startMethod=None, pointerSize=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, name, systemProcessId=None, isLocalProcess=None, startMethod=None, pointerSize=None, update_ids_from_dap=False, **kwargs + ): # noqa (update_ids_from_dap may be unused) """ :param string name: The logical name of the process. This is usually the full path to process's executable file. Example: /home/example/myproj/program.js. - :param integer systemProcessId: The system process id of the debugged process. This property will be missing for non-system processes. + :param integer systemProcessId: The system process id of the debugged process. This property is missing for non-system processes. :param boolean isLocalProcess: If true, the process is running on the same computer as the debug adapter. :param string startMethod: Describes how the debug engine started debugging this process. :param integer pointerSize: The size of a pointer or address for this process, in bits. This value may be used by clients when formatting addresses for display. @@ -17593,7 +15608,6 @@ def __init__(self, name, systemProcessId=None, isLocalProcess=None, startMethod= self.pointerSize = pointerSize self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) name = self.name systemProcessId = self.systemProcessId @@ -17601,16 +15615,16 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un startMethod = self.startMethod pointerSize = self.pointerSize dct = { - 'name': name, + "name": name, } if systemProcessId is not None: - dct['systemProcessId'] = systemProcessId + dct["systemProcessId"] = systemProcessId if isLocalProcess is not None: - dct['isLocalProcess'] = isLocalProcess + dct["isLocalProcess"] = isLocalProcess if startMethod is not None: - dct['startMethod'] = startMethod + dct["startMethod"] = startMethod if pointerSize is not None: - dct['pointerSize'] = pointerSize + dct["pointerSize"] = pointerSize dct.update(self.kwargs) return dct @@ -17623,15 +15637,10 @@ class CapabilitiesEventBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "capabilities": { - "description": "The set of updated capabilities.", - "type": "Capabilities" - } - } - __refs__ = set(['capabilities']) + __props__ = {"capabilities": {"description": "The set of updated capabilities.", "type": "Capabilities"}} + __refs__ = set(["capabilities"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, capabilities, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -17640,14 +15649,17 @@ def __init__(self, capabilities, update_ids_from_dap=False, **kwargs): # noqa ( if capabilities is None: self.capabilities = Capabilities() else: - self.capabilities = Capabilities(update_ids_from_dap=update_ids_from_dap, **capabilities) if capabilities.__class__ != Capabilities else capabilities + self.capabilities = ( + Capabilities(update_ids_from_dap=update_ids_from_dap, **capabilities) + if capabilities.__class__ != Capabilities + else capabilities + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) capabilities = self.capabilities dct = { - 'capabilities': capabilities.to_dict(update_ids_to_dap=update_ids_to_dap), + "capabilities": capabilities.to_dict(update_ids_to_dap=update_ids_to_dap), } dct.update(self.kwargs) return dct @@ -17664,46 +15676,44 @@ class ProgressStartEventBody(BaseSchema): __props__ = { "progressId": { "type": "string", - "description": "An ID that must be used in subsequent 'progressUpdate' and 'progressEnd' events to make them refer to the same progress reporting.\nIDs must be unique within a debug session." + "description": "An ID that can be used in subsequent `progressUpdate` and `progressEnd` events to make them refer to the same progress reporting.\nIDs must be unique within a debug session.", }, "title": { "type": "string", - "description": "Mandatory (short) title of the progress reporting. Shown in the UI to describe the long running operation." + "description": "Short title of the progress reporting. Shown in the UI to describe the long running operation.", }, "requestId": { "type": "integer", - "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit\nprogress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter." + "description": "The request ID that this progress report is related to. If specified a debug adapter is expected to emit progress events for the long running request until the request has been either completed or cancelled.\nIf the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter.", }, "cancellable": { "type": "boolean", - "description": "If true, the request that reports progress may be canceled with a 'cancel' request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting." - }, - "message": { - "type": "string", - "description": "Optional, more detailed progress message." + "description": "If True, the request that reports progress may be cancelled with a `cancel` request.\nSo this property basically controls whether the client should use UX that supports cancellation.\nClients that don't support cancellation are allowed to ignore the setting.", }, + "message": {"type": "string", "description": "More detailed progress message."}, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." - } + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, progressId, title, requestId=None, cancellable=None, message=None, percentage=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, progressId, title, requestId=None, cancellable=None, message=None, percentage=None, update_ids_from_dap=False, **kwargs + ): # noqa (update_ids_from_dap may be unused) """ - :param string progressId: An ID that must be used in subsequent 'progressUpdate' and 'progressEnd' events to make them refer to the same progress reporting. + :param string progressId: An ID that can be used in subsequent `progressUpdate` and `progressEnd` events to make them refer to the same progress reporting. IDs must be unique within a debug session. - :param string title: Mandatory (short) title of the progress reporting. Shown in the UI to describe the long running operation. - :param integer requestId: The request ID that this progress report is related to. If specified a debug adapter is expected to emit - progress events for the long running request until the request has been either completed or cancelled. + :param string title: Short title of the progress reporting. Shown in the UI to describe the long running operation. + :param integer requestId: The request ID that this progress report is related to. If specified a debug adapter is expected to emit progress events for the long running request until the request has been either completed or cancelled. If the request ID is omitted, the progress report is assumed to be related to some general activity of the debug adapter. - :param boolean cancellable: If true, the request that reports progress may be canceled with a 'cancel' request. + :param boolean cancellable: If true, the request that reports progress may be cancelled with a `cancel` request. So this property basically controls whether the client should use UX that supports cancellation. Clients that don't support cancellation are allowed to ignore the setting. - :param string message: Optional, more detailed progress message. - :param number percentage: Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown. + :param string message: More detailed progress message. + :param number percentage: Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown. """ self.progressId = progressId self.title = title @@ -17713,7 +15723,6 @@ def __init__(self, progressId, title, requestId=None, cancellable=None, message= self.percentage = percentage self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) progressId = self.progressId title = self.title @@ -17722,17 +15731,17 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un message = self.message percentage = self.percentage dct = { - 'progressId': progressId, - 'title': title, + "progressId": progressId, + "title": title, } if requestId is not None: - dct['requestId'] = requestId + dct["requestId"] = requestId if cancellable is not None: - dct['cancellable'] = cancellable + dct["cancellable"] = cancellable if message is not None: - dct['message'] = message + dct["message"] = message if percentage is not None: - dct['percentage'] = percentage + dct["percentage"] = percentage dct.update(self.kwargs) return dct @@ -17746,46 +15755,39 @@ class ProgressUpdateEventBody(BaseSchema): """ __props__ = { - "progressId": { - "type": "string", - "description": "The ID that was introduced in the initial 'progressStart' event." - }, - "message": { - "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." - }, + "progressId": {"type": "string", "description": "The ID that was introduced in the initial `progressStart` event."}, + "message": {"type": "string", "description": "More detailed progress message. If omitted, the previous message (if any) is used."}, "percentage": { "type": "number", - "description": "Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown." - } + "description": "Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, progressId, message=None, percentage=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string progressId: The ID that was introduced in the initial 'progressStart' event. - :param string message: Optional, more detailed progress message. If omitted, the previous message (if any) is used. - :param number percentage: Optional progress percentage to display (value range: 0 to 100). If omitted no percentage will be shown. + :param string progressId: The ID that was introduced in the initial `progressStart` event. + :param string message: More detailed progress message. If omitted, the previous message (if any) is used. + :param number percentage: Progress percentage to display (value range: 0 to 100). If omitted no percentage is shown. """ self.progressId = progressId self.message = message self.percentage = percentage self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) progressId = self.progressId message = self.message percentage = self.percentage dct = { - 'progressId': progressId, + "progressId": progressId, } if message is not None: - dct['message'] = message + dct["message"] = message if percentage is not None: - dct['percentage'] = percentage + dct["percentage"] = percentage dct.update(self.kwargs) return dct @@ -17799,37 +15801,30 @@ class ProgressEndEventBody(BaseSchema): """ __props__ = { - "progressId": { - "type": "string", - "description": "The ID that was introduced in the initial 'ProgressStartEvent'." - }, - "message": { - "type": "string", - "description": "Optional, more detailed progress message. If omitted, the previous message (if any) is used." - } + "progressId": {"type": "string", "description": "The ID that was introduced in the initial `ProgressStartEvent`."}, + "message": {"type": "string", "description": "More detailed progress message. If omitted, the previous message (if any) is used."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, progressId, message=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param string progressId: The ID that was introduced in the initial 'ProgressStartEvent'. - :param string message: Optional, more detailed progress message. If omitted, the previous message (if any) is used. + :param string progressId: The ID that was introduced in the initial `ProgressStartEvent`. + :param string message: More detailed progress message. If omitted, the previous message (if any) is used. """ self.progressId = progressId self.message = message self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) progressId = self.progressId message = self.message dct = { - 'progressId': progressId, + "progressId": progressId, } if message is not None: - dct['message'] = message + dct["message"] = message dct.update(self.kwargs) return dct @@ -17845,29 +15840,24 @@ class InvalidatedEventBody(BaseSchema): __props__ = { "areas": { "type": "array", - "description": "Optional set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honouring the areas but there are no guarantees. If this property is missing, empty, or if values are not understand the client should assume a single value 'all'.", - "items": { - "$ref": "#/definitions/InvalidatedAreas" - } - }, - "threadId": { - "type": "integer", - "description": "If specified, the client only needs to refetch data related to this thread." + "description": "Set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honoring the areas but there are no guarantees. If this property is missing, empty, or if values are not understood, the client should assume a single value `all`.", + "items": {"$ref": "#/definitions/InvalidatedAreas"}, }, + "threadId": {"type": "integer", "description": "If specified, the client only needs to refetch data related to this thread."}, "stackFrameId": { "type": "integer", - "description": "If specified, the client only needs to refetch data related to this stack frame (and the 'threadId' is ignored)." - } + "description": "If specified, the client only needs to refetch data related to this stack frame (and the `threadId` is ignored).", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, areas=None, threadId=None, stackFrameId=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array areas: Optional set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honouring the areas but there are no guarantees. If this property is missing, empty, or if values are not understand the client should assume a single value 'all'. + :param array areas: Set of logical areas that got invalidated. This property has a hint characteristic: a client can only be expected to make a 'best effort' in honoring the areas but there are no guarantees. If this property is missing, empty, or if values are not understood, the client should assume a single value `all`. :param integer threadId: If specified, the client only needs to refetch data related to this thread. - :param integer stackFrameId: If specified, the client only needs to refetch data related to this stack frame (and the 'threadId' is ignored). + :param integer stackFrameId: If specified, the client only needs to refetch data related to this stack frame (and the `threadId` is ignored). """ self.areas = areas if update_ids_from_dap and self.areas: @@ -17878,12 +15868,11 @@ def __init__(self, areas=None, threadId=None, stackFrameId=None, update_ids_from if update_ids_from_dap: self.threadId = self._translate_id_from_dap(self.threadId) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_from_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_from_dap(dct["threadId"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -17895,21 +15884,20 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if update_ids_to_dap: if threadId is not None: threadId = self._translate_id_to_dap(threadId) - dct = { - } + dct = {} if areas is not None: - dct['areas'] = [InvalidatedAreas.update_dict_ids_to_dap(o) for o in areas] if (update_ids_to_dap and areas) else areas + dct["areas"] = [InvalidatedAreas.update_dict_ids_to_dap(o) for o in areas] if (update_ids_to_dap and areas) else areas if threadId is not None: - dct['threadId'] = threadId + dct["threadId"] = threadId if stackFrameId is not None: - dct['stackFrameId'] = stackFrameId + dct["stackFrameId"] = stackFrameId dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'threadId' in dct: - dct['threadId'] = cls._translate_id_to_dap(dct['threadId']) + if "threadId" in dct: + dct["threadId"] = cls._translate_id_to_dap(dct["threadId"]) return dct @@ -17922,22 +15910,13 @@ class MemoryEventBody(BaseSchema): """ __props__ = { - "memoryReference": { - "type": "string", - "description": "Memory reference of a memory range that has been updated." - }, - "offset": { - "type": "integer", - "description": "Starting offset in bytes where memory has been updated. Can be negative." - }, - "count": { - "type": "integer", - "description": "Number of bytes updated." - } + "memoryReference": {"type": "string", "description": "Memory reference of a memory range that has been updated."}, + "offset": {"type": "integer", "description": "Starting offset in bytes where memory has been updated. Can be negative."}, + "count": {"type": "integer", "description": "Number of bytes updated."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, memoryReference, offset, count, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -17950,15 +15929,14 @@ def __init__(self, memoryReference, offset, count, update_ids_from_dap=False, ** self.count = count self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) memoryReference = self.memoryReference offset = self.offset count = self.count dct = { - 'memoryReference': memoryReference, - 'offset': offset, - 'count': count, + "memoryReference": memoryReference, + "offset": offset, + "count": count, } dct.update(self.kwargs) return dct @@ -17975,19 +15953,15 @@ class RunInTerminalRequestArgumentsEnv(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -18001,18 +15975,15 @@ class RunInTerminalResponseBody(BaseSchema): """ __props__ = { - "processId": { - "type": "integer", - "description": "The process ID. The value should be less than or equal to 2147483647 (2^31-1)." - }, + "processId": {"type": "integer", "description": "The process ID. The value should be less than or equal to 2147483647 (2^31-1)."}, "shellProcessId": { "type": "integer", - "description": "The process ID of the terminal shell. The value should be less than or equal to 2147483647 (2^31-1)." - } + "description": "The process ID of the terminal shell. The value should be less than or equal to 2147483647 (2^31-1).", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, processId=None, shellProcessId=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18023,16 +15994,38 @@ def __init__(self, processId=None, shellProcessId=None, update_ids_from_dap=Fals self.shellProcessId = shellProcessId self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) processId = self.processId shellProcessId = self.shellProcessId - dct = { - } + dct = {} if processId is not None: - dct['processId'] = processId + dct["processId"] = processId if shellProcessId is not None: - dct['shellProcessId'] = shellProcessId + dct["shellProcessId"] = shellProcessId + dct.update(self.kwargs) + return dct + + +@register +class StartDebuggingRequestArgumentsConfiguration(BaseSchema): + """ + "configuration" of StartDebuggingRequestArguments + + Note: automatically generated code. Do not edit manually. + """ + + __props__ = {} + __refs__ = set() + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + """ """ + + self.kwargs = kwargs + + def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) + dct = {} dct.update(self.kwargs) return dct @@ -18048,15 +16041,13 @@ class BreakpointLocationsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/BreakpointLocation" - }, - "description": "Sorted set of possible breakpoint locations." + "items": {"$ref": "#/definitions/BreakpointLocation"}, + "description": "Sorted set of possible breakpoint locations.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18068,13 +16059,14 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u BreakpointLocation.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [BreakpointLocation.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [BreakpointLocation.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct @@ -18091,20 +16083,18 @@ class SetBreakpointsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the 'breakpoints' (or the deprecated 'lines') array in the arguments." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints.\nThe array elements are in the same order as the elements of the `breakpoints` (or the deprecated `lines`) array in the arguments.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param array breakpoints: Information about the breakpoints. - The array elements are in the same order as the elements of the 'breakpoints' (or the deprecated 'lines') array in the arguments. + The array elements are in the same order as the elements of the `breakpoints` (or the deprecated `lines`) array in the arguments. """ self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: @@ -18112,13 +16102,14 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u Breakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct @@ -18135,19 +16126,17 @@ class SetFunctionBreakpointsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array breakpoints: Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array. + :param array breakpoints: Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array. """ self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: @@ -18155,13 +16144,14 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u Breakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct @@ -18178,20 +16168,18 @@ class SetExceptionBreakpointsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the 'filters', 'filterOptions', 'exceptionOptions' arrays in the arguments. If both 'filters' and 'filterOptions' are given, the returned array must start with 'filters' information first, followed by 'filterOptions' information." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the exception breakpoints or filters.\nThe breakpoints returned are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays in the arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param array breakpoints: Information about the exception breakpoints or filters. - The breakpoints returned are in the same order as the elements of the 'filters', 'filterOptions', 'exceptionOptions' arrays in the arguments. If both 'filters' and 'filterOptions' are given, the returned array must start with 'filters' information first, followed by 'filterOptions' information. + The breakpoints returned are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays in the arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information. """ self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: @@ -18199,15 +16187,15 @@ def __init__(self, breakpoints=None, update_ids_from_dap=False, **kwargs): # no Breakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] - dct = { - } + dct = {} if breakpoints is not None: - dct['breakpoints'] = [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints + dct["breakpoints"] = ( + [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints + ) dct.update(self.kwargs) return dct @@ -18222,38 +16210,33 @@ class DataBreakpointInfoResponseBody(BaseSchema): __props__ = { "dataId": { - "type": [ - "string", - "null" - ], - "description": "An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available." + "type": ["string", "null"], + "description": "An identifier for the data on which a data breakpoint can be registered with the `setDataBreakpoints` request or null if no data breakpoint is available. If a `variablesReference` or `frameId` is passed, the `dataId` is valid in the current suspended state, otherwise it's valid indefinitely. See 'Lifetime of Object References' in the Overview section for details. Breakpoints set using the `dataId` in the `setDataBreakpoints` request may outlive the lifetime of the associated `dataId`.", }, "description": { "type": "string", - "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available." + "description": "UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available.", }, "accessTypes": { "type": "array", - "items": { - "$ref": "#/definitions/DataBreakpointAccessType" - }, - "description": "Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information." + "items": {"$ref": "#/definitions/DataBreakpointAccessType"}, + "description": "Attribute lists the available access types for a potential data breakpoint. A UI client could surface this information.", }, "canPersist": { "type": "boolean", - "description": "Optional attribute indicating that a potential data breakpoint could be persisted across sessions." - } + "description": "Attribute indicates that a potential data breakpoint could be persisted across sessions.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, dataId, description, accessTypes=None, canPersist=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param ['string', 'null'] dataId: An identifier for the data on which a data breakpoint can be registered with the setDataBreakpoints request or null if no data breakpoint is available. + :param ['string', 'null'] dataId: An identifier for the data on which a data breakpoint can be registered with the `setDataBreakpoints` request or null if no data breakpoint is available. If a `variablesReference` or `frameId` is passed, the `dataId` is valid in the current suspended state, otherwise it's valid indefinitely. See 'Lifetime of Object References' in the Overview section for details. Breakpoints set using the `dataId` in the `setDataBreakpoints` request may outlive the lifetime of the associated `dataId`. :param string description: UI string that describes on what data the breakpoint is set on or why a data breakpoint is not available. - :param array accessTypes: Optional attribute listing the available access types for a potential data breakpoint. A UI frontend could surface this information. - :param boolean canPersist: Optional attribute indicating that a potential data breakpoint could be persisted across sessions. + :param array accessTypes: Attribute lists the available access types for a potential data breakpoint. A UI client could surface this information. + :param boolean canPersist: Attribute indicates that a potential data breakpoint could be persisted across sessions. """ self.dataId = dataId self.description = description @@ -18264,7 +16247,6 @@ def __init__(self, dataId, description, accessTypes=None, canPersist=None, updat self.canPersist = canPersist self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) dataId = self.dataId description = self.description @@ -18273,13 +16255,17 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un accessTypes = [x.to_dict() for x in accessTypes] canPersist = self.canPersist dct = { - 'dataId': dataId, - 'description': description, + "dataId": dataId, + "description": description, } if accessTypes is not None: - dct['accessTypes'] = [DataBreakpointAccessType.update_dict_ids_to_dap(o) for o in accessTypes] if (update_ids_to_dap and accessTypes) else accessTypes + dct["accessTypes"] = ( + [DataBreakpointAccessType.update_dict_ids_to_dap(o) for o in accessTypes] + if (update_ids_to_dap and accessTypes) + else accessTypes + ) if canPersist is not None: - dct['canPersist'] = canPersist + dct["canPersist"] = canPersist dct.update(self.kwargs) return dct @@ -18295,19 +16281,17 @@ class SetDataBreakpointsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the data breakpoints. The array elements correspond to the elements of the input argument `breakpoints` array.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array breakpoints: Information about the data breakpoints. The array elements correspond to the elements of the input argument 'breakpoints' array. + :param array breakpoints: Information about the data breakpoints. The array elements correspond to the elements of the input argument `breakpoints` array. """ self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: @@ -18315,13 +16299,14 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u Breakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct @@ -18338,19 +16323,17 @@ class SetInstructionBreakpointsResponseBody(BaseSchema): __props__ = { "breakpoints": { "type": "array", - "items": { - "$ref": "#/definitions/Breakpoint" - }, - "description": "Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array." + "items": {"$ref": "#/definitions/Breakpoint"}, + "description": "Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array breakpoints: Information about the breakpoints. The array elements correspond to the elements of the 'breakpoints' array. + :param array breakpoints: Information about the breakpoints. The array elements correspond to the elements of the `breakpoints` array. """ self.breakpoints = breakpoints if update_ids_from_dap and self.breakpoints: @@ -18358,13 +16341,14 @@ def __init__(self, breakpoints, update_ids_from_dap=False, **kwargs): # noqa (u Breakpoint.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) breakpoints = self.breakpoints if breakpoints and hasattr(breakpoints[0], "to_dict"): breakpoints = [x.to_dict() for x in breakpoints] dct = { - 'breakpoints': [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] if (update_ids_to_dap and breakpoints) else breakpoints, + "breakpoints": [Breakpoint.update_dict_ids_to_dap(o) for o in breakpoints] + if (update_ids_to_dap and breakpoints) + else breakpoints, } dct.update(self.kwargs) return dct @@ -18381,27 +16365,25 @@ class ContinueResponseBody(BaseSchema): __props__ = { "allThreadsContinued": { "type": "boolean", - "description": "The value true (or a missing property) signals to the client that all threads have been resumed. The value false must be returned if not all threads were resumed." + "description": "The value True (or a missing property) signals to the client that all threads have been resumed. The value false indicates that not all threads were resumed.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, allThreadsContinued=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param boolean allThreadsContinued: The value true (or a missing property) signals to the client that all threads have been resumed. The value false must be returned if not all threads were resumed. + :param boolean allThreadsContinued: The value true (or a missing property) signals to the client that all threads have been resumed. The value false indicates that not all threads were resumed. """ self.allThreadsContinued = allThreadsContinued self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) allThreadsContinued = self.allThreadsContinued - dct = { - } + dct = {} if allThreadsContinued is not None: - dct['allThreadsContinued'] = allThreadsContinued + dct["allThreadsContinued"] = allThreadsContinued dct.update(self.kwargs) return dct @@ -18417,25 +16399,23 @@ class StackTraceResponseBody(BaseSchema): __props__ = { "stackFrames": { "type": "array", - "items": { - "$ref": "#/definitions/StackFrame" - }, - "description": "The frames of the stackframe. If the array has length zero, there are no stackframes available.\nThis means that there is no location information available." + "items": {"$ref": "#/definitions/StackFrame"}, + "description": "The frames of the stack frame. If the array has length zero, there are no stack frames available.\nThis means that there is no location information available.", }, "totalFrames": { "type": "integer", - "description": "The total number of frames available in the stack. If omitted or if totalFrames is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing totalFrames values for subsequent requests can be used to enforce paging in the client." - } + "description": "The total number of frames available in the stack. If omitted or if `totalFrames` is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing `totalFrames` values for subsequent requests can be used to enforce paging in the client.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, stackFrames, totalFrames=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array stackFrames: The frames of the stackframe. If the array has length zero, there are no stackframes available. + :param array stackFrames: The frames of the stack frame. If the array has length zero, there are no stack frames available. This means that there is no location information available. - :param integer totalFrames: The total number of frames available in the stack. If omitted or if totalFrames is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing totalFrames values for subsequent requests can be used to enforce paging in the client. + :param integer totalFrames: The total number of frames available in the stack. If omitted or if `totalFrames` is larger than the available frames, a client is expected to request frames until a request returns less frames than requested (which indicates the end of the stack). Returning monotonically increasing `totalFrames` values for subsequent requests can be used to enforce paging in the client. """ self.stackFrames = stackFrames if update_ids_from_dap and self.stackFrames: @@ -18444,17 +16424,18 @@ def __init__(self, stackFrames, totalFrames=None, update_ids_from_dap=False, **k self.totalFrames = totalFrames self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) stackFrames = self.stackFrames if stackFrames and hasattr(stackFrames[0], "to_dict"): stackFrames = [x.to_dict() for x in stackFrames] totalFrames = self.totalFrames dct = { - 'stackFrames': [StackFrame.update_dict_ids_to_dap(o) for o in stackFrames] if (update_ids_to_dap and stackFrames) else stackFrames, + "stackFrames": [StackFrame.update_dict_ids_to_dap(o) for o in stackFrames] + if (update_ids_to_dap and stackFrames) + else stackFrames, } if totalFrames is not None: - dct['totalFrames'] = totalFrames + dct["totalFrames"] = totalFrames dct.update(self.kwargs) return dct @@ -18470,19 +16451,17 @@ class ScopesResponseBody(BaseSchema): __props__ = { "scopes": { "type": "array", - "items": { - "$ref": "#/definitions/Scope" - }, - "description": "The scopes of the stackframe. If the array has length zero, there are no scopes available." + "items": {"$ref": "#/definitions/Scope"}, + "description": "The scopes of the stack frame. If the array has length zero, there are no scopes available.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, scopes, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array scopes: The scopes of the stackframe. If the array has length zero, there are no scopes available. + :param array scopes: The scopes of the stack frame. If the array has length zero, there are no scopes available. """ self.scopes = scopes if update_ids_from_dap and self.scopes: @@ -18490,13 +16469,12 @@ def __init__(self, scopes, update_ids_from_dap=False, **kwargs): # noqa (update Scope.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) scopes = self.scopes if scopes and hasattr(scopes[0], "to_dict"): scopes = [x.to_dict() for x in scopes] dct = { - 'scopes': [Scope.update_dict_ids_to_dap(o) for o in scopes] if (update_ids_to_dap and scopes) else scopes, + "scopes": [Scope.update_dict_ids_to_dap(o) for o in scopes] if (update_ids_to_dap and scopes) else scopes, } dct.update(self.kwargs) return dct @@ -18513,15 +16491,13 @@ class VariablesResponseBody(BaseSchema): __props__ = { "variables": { "type": "array", - "items": { - "$ref": "#/definitions/Variable" - }, - "description": "All (or a range) of variables for the given variable reference." + "items": {"$ref": "#/definitions/Variable"}, + "description": "All (or a range) of variables for the given variable reference.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, variables, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18533,13 +16509,12 @@ def __init__(self, variables, update_ids_from_dap=False, **kwargs): # noqa (upd Variable.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) variables = self.variables if variables and hasattr(variables[0], "to_dict"): variables = [x.to_dict() for x in variables] dct = { - 'variables': [Variable.update_dict_ids_to_dap(o) for o in variables] if (update_ids_to_dap and variables) else variables, + "variables": [Variable.update_dict_ids_to_dap(o) for o in variables] if (update_ids_to_dap and variables) else variables, } dct.update(self.kwargs) return dct @@ -18554,58 +16529,68 @@ class SetVariableResponseBody(BaseSchema): """ __props__ = { - "value": { - "type": "string", - "description": "The new value of the variable." - }, - "type": { - "type": "string", - "description": "The type of the new value. Typically shown in the UI when hovering over the value." - }, + "value": {"type": "string", "description": "The new value of the variable."}, + "type": {"type": "string", "description": "The type of the new value. Typically shown in the UI when hovering over the value."}, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the new value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the new value is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." - } + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] - def __init__(self, value, type=None, variablesReference=None, namedVariables=None, indexedVariables=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + def __init__( + self, + value, + type=None, + variablesReference=None, + namedVariables=None, + indexedVariables=None, + memoryReference=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string value: The new value of the variable. :param string type: The type of the new value. Typically shown in the UI when hovering over the value. - :param integer variablesReference: If variablesReference is > 0, the new value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest. - The value should be less than or equal to 2147483647 (2^31-1). + :param integer variablesReference: If `variablesReference` is > 0, the new value is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. :param integer namedVariables: The number of named child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). :param integer indexedVariables: The number of indexed child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). + :param string memoryReference: A memory reference to a location appropriate for this result. + For pointer type eval results, this is generally a reference to the memory address contained in the pointer. + This attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true. """ self.value = value self.type = type self.variablesReference = variablesReference self.namedVariables = namedVariables self.indexedVariables = indexedVariables + self.memoryReference = memoryReference if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -18614,27 +16599,30 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un variablesReference = self.variablesReference namedVariables = self.namedVariables indexedVariables = self.indexedVariables + memoryReference = self.memoryReference if update_ids_to_dap: if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'value': value, + "value": value, } if type is not None: - dct['type'] = type + dct["type"] = type if variablesReference is not None: - dct['variablesReference'] = variablesReference + dct["variablesReference"] = variablesReference if namedVariables is not None: - dct['namedVariables'] = namedVariables + dct["namedVariables"] = namedVariables if indexedVariables is not None: - dct['indexedVariables'] = indexedVariables + dct["indexedVariables"] = indexedVariables + if memoryReference is not None: + dct["memoryReference"] = memoryReference dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @@ -18647,37 +16635,30 @@ class SourceResponseBody(BaseSchema): """ __props__ = { - "content": { - "type": "string", - "description": "Content of the source reference." - }, - "mimeType": { - "type": "string", - "description": "Optional content type (mime type) of the source." - } + "content": {"type": "string", "description": "Content of the source reference."}, + "mimeType": {"type": "string", "description": "Content type (MIME type) of the source."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, content, mimeType=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string content: Content of the source reference. - :param string mimeType: Optional content type (mime type) of the source. + :param string mimeType: Content type (MIME type) of the source. """ self.content = content self.mimeType = mimeType self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) content = self.content mimeType = self.mimeType dct = { - 'content': content, + "content": content, } if mimeType is not None: - dct['mimeType'] = mimeType + dct["mimeType"] = mimeType dct.update(self.kwargs) return dct @@ -18690,18 +16671,10 @@ class ThreadsResponseBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "threads": { - "type": "array", - "items": { - "$ref": "#/definitions/Thread" - }, - "description": "All threads." - } - } + __props__ = {"threads": {"type": "array", "items": {"$ref": "#/definitions/Thread"}, "description": "All threads."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, threads, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18713,13 +16686,12 @@ def __init__(self, threads, update_ids_from_dap=False, **kwargs): # noqa (updat Thread.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) threads = self.threads if threads and hasattr(threads[0], "to_dict"): threads = [x.to_dict() for x in threads] dct = { - 'threads': [Thread.update_dict_ids_to_dap(o) for o in threads] if (update_ids_to_dap and threads) else threads, + "threads": [Thread.update_dict_ids_to_dap(o) for o in threads] if (update_ids_to_dap and threads) else threads, } dct.update(self.kwargs) return dct @@ -18734,21 +16706,12 @@ class ModulesResponseBody(BaseSchema): """ __props__ = { - "modules": { - "type": "array", - "items": { - "$ref": "#/definitions/Module" - }, - "description": "All modules or range of modules." - }, - "totalModules": { - "type": "integer", - "description": "The total number of modules available." - } + "modules": {"type": "array", "items": {"$ref": "#/definitions/Module"}, "description": "All modules or range of modules."}, + "totalModules": {"type": "integer", "description": "The total number of modules available."}, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, modules, totalModules=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18762,17 +16725,16 @@ def __init__(self, modules, totalModules=None, update_ids_from_dap=False, **kwar self.totalModules = totalModules self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) modules = self.modules if modules and hasattr(modules[0], "to_dict"): modules = [x.to_dict() for x in modules] totalModules = self.totalModules dct = { - 'modules': [Module.update_dict_ids_to_dap(o) for o in modules] if (update_ids_to_dap and modules) else modules, + "modules": [Module.update_dict_ids_to_dap(o) for o in modules] if (update_ids_to_dap and modules) else modules, } if totalModules is not None: - dct['totalModules'] = totalModules + dct["totalModules"] = totalModules dct.update(self.kwargs) return dct @@ -18785,18 +16747,10 @@ class LoadedSourcesResponseBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "sources": { - "type": "array", - "items": { - "$ref": "#/definitions/Source" - }, - "description": "Set of loaded sources." - } - } + __props__ = {"sources": {"type": "array", "items": {"$ref": "#/definitions/Source"}, "description": "Set of loaded sources."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, sources, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -18808,13 +16762,12 @@ def __init__(self, sources, update_ids_from_dap=False, **kwargs): # noqa (updat Source.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) sources = self.sources if sources and hasattr(sources[0], "to_dict"): sources = [x.to_dict() for x in sources] dct = { - 'sources': [Source.update_dict_ids_to_dap(o) for o in sources] if (update_ids_to_dap and sources) else sources, + "sources": [Source.update_dict_ids_to_dap(o) for o in sources] if (update_ids_to_dap and sources) else sources, } dct.update(self.kwargs) return dct @@ -18829,56 +16782,63 @@ class EvaluateResponseBody(BaseSchema): """ __props__ = { - "result": { - "type": "string", - "description": "The result of the evaluate request." - }, + "result": {"type": "string", "description": "The result of the evaluate request."}, "type": { "type": "string", - "description": "The optional type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the evaluate result.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is True.", }, "presentationHint": { - "description": "Properties of a evaluate result that can be used to determine how to render the result in the UI.", - "type": "VariablePresentationHint" + "description": "Properties of an evaluate result that can be used to determine how to render the result in the UI.", + "type": "VariablePresentationHint", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the evaluate result is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "memoryReference": { "type": "string", - "description": "Optional memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute should be returned by a debug adapter if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request." - } + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, } - __refs__ = set(['presentationHint']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, result, variablesReference, type=None, presentationHint=None, namedVariables=None, indexedVariables=None, memoryReference=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["presentationHint"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + result, + variablesReference, + type=None, + presentationHint=None, + namedVariables=None, + indexedVariables=None, + memoryReference=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string result: The result of the evaluate request. - :param integer variablesReference: If variablesReference is > 0, the evaluate result is structured and its children can be retrieved by passing variablesReference to the VariablesRequest. - The value should be less than or equal to 2147483647 (2^31-1). - :param string type: The optional type of the evaluate result. - This attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request. - :param VariablePresentationHint presentationHint: Properties of a evaluate result that can be used to determine how to render the result in the UI. + :param integer variablesReference: If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. + :param string type: The type of the evaluate result. + This attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true. + :param VariablePresentationHint presentationHint: Properties of an evaluate result that can be used to determine how to render the result in the UI. :param integer namedVariables: The number of named child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). :param integer indexedVariables: The number of indexed child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). - :param string memoryReference: Optional memory reference to a location appropriate for this result. + :param string memoryReference: A memory reference to a location appropriate for this result. For pointer type eval results, this is generally a reference to the memory address contained in the pointer. - This attribute should be returned by a debug adapter if the client has passed the value true for the 'supportsMemoryReferences' capability of the 'initialize' request. + This attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true. """ self.result = result self.variablesReference = variablesReference @@ -18886,19 +16846,22 @@ def __init__(self, result, variablesReference, type=None, presentationHint=None, if presentationHint is None: self.presentationHint = VariablePresentationHint() else: - self.presentationHint = VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) if presentationHint.__class__ != VariablePresentationHint else presentationHint + self.presentationHint = ( + VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) + if presentationHint.__class__ != VariablePresentationHint + else presentationHint + ) self.namedVariables = namedVariables self.indexedVariables = indexedVariables self.memoryReference = memoryReference if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -18913,26 +16876,26 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'result': result, - 'variablesReference': variablesReference, + "result": result, + "variablesReference": variablesReference, } if type is not None: - dct['type'] = type + dct["type"] = type if presentationHint is not None: - dct['presentationHint'] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["presentationHint"] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) if namedVariables is not None: - dct['namedVariables'] = namedVariables + dct["namedVariables"] = namedVariables if indexedVariables is not None: - dct['indexedVariables'] = indexedVariables + dct["indexedVariables"] = indexedVariables if memoryReference is not None: - dct['memoryReference'] = memoryReference + dct["memoryReference"] = memoryReference dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @@ -18945,68 +16908,86 @@ class SetExpressionResponseBody(BaseSchema): """ __props__ = { - "value": { - "type": "string", - "description": "The new value of the expression." - }, + "value": {"type": "string", "description": "The new value of the expression."}, "type": { "type": "string", - "description": "The optional type of the value.\nThis attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request." + "description": "The type of the value.\nThis attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is True.", }, "presentationHint": { "description": "Properties of a value that can be used to determine how to render the result in the UI.", - "type": "VariablePresentationHint" + "type": "VariablePresentationHint", }, "variablesReference": { "type": "integer", - "description": "If variablesReference is > 0, the value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details.", }, "namedVariables": { "type": "integer", - "description": "The number of named child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." + "description": "The number of named child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", }, "indexedVariables": { "type": "integer", - "description": "The number of indexed child variables.\nThe client can use this optional information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1)." - } + "description": "The number of indexed child variables.\nThe client can use this information to present the variables in a paged UI and fetch them in chunks.\nThe value should be less than or equal to 2147483647 (2^31-1).", + }, + "memoryReference": { + "type": "string", + "description": "A memory reference to a location appropriate for this result.\nFor pointer type eval results, this is generally a reference to the memory address contained in the pointer.\nThis attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is True.", + }, } - __refs__ = set(['presentationHint']) - - __slots__ = list(__props__.keys()) + ['kwargs'] - - def __init__(self, value, type=None, presentationHint=None, variablesReference=None, namedVariables=None, indexedVariables=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) + __refs__ = set(["presentationHint"]) + + __slots__ = list(__props__.keys()) + ["kwargs"] + + def __init__( + self, + value, + type=None, + presentationHint=None, + variablesReference=None, + namedVariables=None, + indexedVariables=None, + memoryReference=None, + update_ids_from_dap=False, + **kwargs, + ): # noqa (update_ids_from_dap may be unused) """ :param string value: The new value of the expression. - :param string type: The optional type of the value. - This attribute should only be returned by a debug adapter if the client has passed the value true for the 'supportsVariableType' capability of the 'initialize' request. + :param string type: The type of the value. + This attribute should only be returned by a debug adapter if the corresponding capability `supportsVariableType` is true. :param VariablePresentationHint presentationHint: Properties of a value that can be used to determine how to render the result in the UI. - :param integer variablesReference: If variablesReference is > 0, the value is structured and its children can be retrieved by passing variablesReference to the VariablesRequest. - The value should be less than or equal to 2147483647 (2^31-1). + :param integer variablesReference: If `variablesReference` is > 0, the evaluate result is structured and its children can be retrieved by passing `variablesReference` to the `variables` request as long as execution remains suspended. See 'Lifetime of Object References' in the Overview section for details. :param integer namedVariables: The number of named child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). :param integer indexedVariables: The number of indexed child variables. - The client can use this optional information to present the variables in a paged UI and fetch them in chunks. + The client can use this information to present the variables in a paged UI and fetch them in chunks. The value should be less than or equal to 2147483647 (2^31-1). + :param string memoryReference: A memory reference to a location appropriate for this result. + For pointer type eval results, this is generally a reference to the memory address contained in the pointer. + This attribute may be returned by a debug adapter if corresponding capability `supportsMemoryReferences` is true. """ self.value = value self.type = type if presentationHint is None: self.presentationHint = VariablePresentationHint() else: - self.presentationHint = VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) if presentationHint.__class__ != VariablePresentationHint else presentationHint + self.presentationHint = ( + VariablePresentationHint(update_ids_from_dap=update_ids_from_dap, **presentationHint) + if presentationHint.__class__ != VariablePresentationHint + else presentationHint + ) self.variablesReference = variablesReference self.namedVariables = namedVariables self.indexedVariables = indexedVariables + self.memoryReference = memoryReference if update_ids_from_dap: self.variablesReference = self._translate_id_from_dap(self.variablesReference) self.kwargs = kwargs - - + @classmethod def update_dict_ids_from_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_from_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_from_dap(dct["variablesReference"]) return dct def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) @@ -19016,29 +16997,32 @@ def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be un variablesReference = self.variablesReference namedVariables = self.namedVariables indexedVariables = self.indexedVariables + memoryReference = self.memoryReference if update_ids_to_dap: if variablesReference is not None: variablesReference = self._translate_id_to_dap(variablesReference) dct = { - 'value': value, + "value": value, } if type is not None: - dct['type'] = type + dct["type"] = type if presentationHint is not None: - dct['presentationHint'] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["presentationHint"] = presentationHint.to_dict(update_ids_to_dap=update_ids_to_dap) if variablesReference is not None: - dct['variablesReference'] = variablesReference + dct["variablesReference"] = variablesReference if namedVariables is not None: - dct['namedVariables'] = namedVariables + dct["namedVariables"] = namedVariables if indexedVariables is not None: - dct['indexedVariables'] = indexedVariables + dct["indexedVariables"] = indexedVariables + if memoryReference is not None: + dct["memoryReference"] = memoryReference dct.update(self.kwargs) - return dct - + return dct + @classmethod def update_dict_ids_to_dap(cls, dct): - if 'variablesReference' in dct: - dct['variablesReference'] = cls._translate_id_to_dap(dct['variablesReference']) + if "variablesReference" in dct: + dct["variablesReference"] = cls._translate_id_to_dap(dct["variablesReference"]) return dct @@ -19053,19 +17037,17 @@ class StepInTargetsResponseBody(BaseSchema): __props__ = { "targets": { "type": "array", - "items": { - "$ref": "#/definitions/StepInTarget" - }, - "description": "The possible stepIn targets of the specified source location." + "items": {"$ref": "#/definitions/StepInTarget"}, + "description": "The possible step-in targets of the specified source location.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param array targets: The possible stepIn targets of the specified source location. + :param array targets: The possible step-in targets of the specified source location. """ self.targets = targets if update_ids_from_dap and self.targets: @@ -19073,13 +17055,12 @@ def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (updat StepInTarget.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) targets = self.targets if targets and hasattr(targets[0], "to_dict"): targets = [x.to_dict() for x in targets] dct = { - 'targets': [StepInTarget.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, + "targets": [StepInTarget.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, } dct.update(self.kwargs) return dct @@ -19096,15 +17077,13 @@ class GotoTargetsResponseBody(BaseSchema): __props__ = { "targets": { "type": "array", - "items": { - "$ref": "#/definitions/GotoTarget" - }, - "description": "The possible goto targets of the specified location." + "items": {"$ref": "#/definitions/GotoTarget"}, + "description": "The possible goto targets of the specified location.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -19116,13 +17095,12 @@ def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (updat GotoTarget.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) targets = self.targets if targets and hasattr(targets[0], "to_dict"): targets = [x.to_dict() for x in targets] dct = { - 'targets': [GotoTarget.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, + "targets": [GotoTarget.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, } dct.update(self.kwargs) return dct @@ -19137,17 +17115,11 @@ class CompletionsResponseBody(BaseSchema): """ __props__ = { - "targets": { - "type": "array", - "items": { - "$ref": "#/definitions/CompletionItem" - }, - "description": "The possible completions for ." - } + "targets": {"type": "array", "items": {"$ref": "#/definitions/CompletionItem"}, "description": "The possible completions for ."} } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -19159,13 +17131,12 @@ def __init__(self, targets, update_ids_from_dap=False, **kwargs): # noqa (updat CompletionItem.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) targets = self.targets if targets and hasattr(targets[0], "to_dict"): targets = [x.to_dict() for x in targets] dct = { - 'targets': [CompletionItem.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, + "targets": [CompletionItem.update_dict_ids_to_dap(o) for o in targets] if (update_ids_to_dap and targets) else targets, } dct.update(self.kwargs) return dct @@ -19180,32 +17151,20 @@ class ExceptionInfoResponseBody(BaseSchema): """ __props__ = { - "exceptionId": { - "type": "string", - "description": "ID of the exception that was thrown." - }, - "description": { - "type": "string", - "description": "Descriptive text for the exception provided by the debug adapter." - }, - "breakMode": { - "description": "Mode that caused the exception notification to be raised.", - "type": "ExceptionBreakMode" - }, - "details": { - "description": "Detailed information about the exception.", - "type": "ExceptionDetails" - } + "exceptionId": {"type": "string", "description": "ID of the exception that was thrown."}, + "description": {"type": "string", "description": "Descriptive text for the exception."}, + "breakMode": {"description": "Mode that caused the exception notification to be raised.", "type": "ExceptionBreakMode"}, + "details": {"description": "Detailed information about the exception.", "type": "ExceptionDetails"}, } - __refs__ = set(['breakMode', 'details']) + __refs__ = set(["breakMode", "details"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, exceptionId, breakMode, description=None, details=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string exceptionId: ID of the exception that was thrown. :param ExceptionBreakMode breakMode: Mode that caused the exception notification to be raised. - :param string description: Descriptive text for the exception provided by the debug adapter. + :param string description: Descriptive text for the exception. :param ExceptionDetails details: Detailed information about the exception. """ self.exceptionId = exceptionId @@ -19216,23 +17175,24 @@ def __init__(self, exceptionId, breakMode, description=None, details=None, updat if details is None: self.details = ExceptionDetails() else: - self.details = ExceptionDetails(update_ids_from_dap=update_ids_from_dap, **details) if details.__class__ != ExceptionDetails else details + self.details = ( + ExceptionDetails(update_ids_from_dap=update_ids_from_dap, **details) if details.__class__ != ExceptionDetails else details + ) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) exceptionId = self.exceptionId breakMode = self.breakMode description = self.description details = self.details dct = { - 'exceptionId': exceptionId, - 'breakMode': breakMode, + "exceptionId": exceptionId, + "breakMode": breakMode, } if description is not None: - dct['description'] = description + dct["description"] = description if details is not None: - dct['details'] = details.to_dict(update_ids_to_dap=update_ids_to_dap) + dct["details"] = details.to_dict(update_ids_to_dap=update_ids_to_dap) dct.update(self.kwargs) return dct @@ -19248,46 +17208,45 @@ class ReadMemoryResponseBody(BaseSchema): __props__ = { "address": { "type": "string", - "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with '0x', or as a decimal value otherwise." + "description": "The address of the first byte of data returned.\nTreated as a hex value if prefixed with `0x`, or as a decimal value otherwise.", }, "unreadableBytes": { "type": "integer", - "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that must be skipped before a subsequent 'readMemory' request will succeed." + "description": "The number of unreadable bytes encountered after the last successfully read byte.\nThis can be used to determine the number of bytes that should be skipped before a subsequent `readMemory` request succeeds.", }, "data": { "type": "string", - "description": "The bytes read from memory, encoded using base64." - } + "description": "The bytes read from memory, encoded using base64. If the decoded length of `data` is less than the requested `count` in the original `readMemory` request, and `unreadableBytes` is zero or omitted, then the client should assume it's reached the end of readable memory.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, address, unreadableBytes=None, data=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ :param string address: The address of the first byte of data returned. - Treated as a hex value if prefixed with '0x', or as a decimal value otherwise. + Treated as a hex value if prefixed with `0x`, or as a decimal value otherwise. :param integer unreadableBytes: The number of unreadable bytes encountered after the last successfully read byte. - This can be used to determine the number of bytes that must be skipped before a subsequent 'readMemory' request will succeed. - :param string data: The bytes read from memory, encoded using base64. + This can be used to determine the number of bytes that should be skipped before a subsequent `readMemory` request succeeds. + :param string data: The bytes read from memory, encoded using base64. If the decoded length of `data` is less than the requested `count` in the original `readMemory` request, and `unreadableBytes` is zero or omitted, then the client should assume it's reached the end of readable memory. """ self.address = address self.unreadableBytes = unreadableBytes self.data = data self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) address = self.address unreadableBytes = self.unreadableBytes data = self.data dct = { - 'address': address, + "address": address, } if unreadableBytes is not None: - dct['unreadableBytes'] = unreadableBytes + dct["unreadableBytes"] = unreadableBytes if data is not None: - dct['data'] = data + dct["data"] = data dct.update(self.kwargs) return dct @@ -19303,36 +17262,34 @@ class WriteMemoryResponseBody(BaseSchema): __props__ = { "offset": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the offset of the first byte of data successfully written. Can be negative." + "description": "Property that should be returned when `allowPartial` is True to indicate the offset of the first byte of data successfully written. Can be negative.", }, "bytesWritten": { "type": "integer", - "description": "Optional property that should be returned when 'allowPartial' is true to indicate the number of bytes starting from address that were successfully written." - } + "description": "Property that should be returned when `allowPartial` is True to indicate the number of bytes starting from address that were successfully written.", + }, } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, offset=None, bytesWritten=None, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ - :param integer offset: Optional property that should be returned when 'allowPartial' is true to indicate the offset of the first byte of data successfully written. Can be negative. - :param integer bytesWritten: Optional property that should be returned when 'allowPartial' is true to indicate the number of bytes starting from address that were successfully written. + :param integer offset: Property that should be returned when `allowPartial` is true to indicate the offset of the first byte of data successfully written. Can be negative. + :param integer bytesWritten: Property that should be returned when `allowPartial` is true to indicate the number of bytes starting from address that were successfully written. """ self.offset = offset self.bytesWritten = bytesWritten self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) offset = self.offset bytesWritten = self.bytesWritten - dct = { - } + dct = {} if offset is not None: - dct['offset'] = offset + dct["offset"] = offset if bytesWritten is not None: - dct['bytesWritten'] = bytesWritten + dct["bytesWritten"] = bytesWritten dct.update(self.kwargs) return dct @@ -19348,15 +17305,13 @@ class DisassembleResponseBody(BaseSchema): __props__ = { "instructions": { "type": "array", - "items": { - "$ref": "#/definitions/DisassembledInstruction" - }, - "description": "The list of disassembled instructions." + "items": {"$ref": "#/definitions/DisassembledInstruction"}, + "description": "The list of disassembled instructions.", } } __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, instructions, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -19368,13 +17323,14 @@ def __init__(self, instructions, update_ids_from_dap=False, **kwargs): # noqa ( DisassembledInstruction.update_dict_ids_from_dap(o) self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) instructions = self.instructions if instructions and hasattr(instructions[0], "to_dict"): instructions = [x.to_dict() for x in instructions] dct = { - 'instructions': [DisassembledInstruction.update_dict_ids_to_dap(o) for o in instructions] if (update_ids_to_dap and instructions) else instructions, + "instructions": [DisassembledInstruction.update_dict_ids_to_dap(o) for o in instructions] + if (update_ids_to_dap and instructions) + else instructions, } dct.update(self.kwargs) return dct @@ -19391,19 +17347,15 @@ class MessageVariables(BaseSchema): __props__ = {} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) - """ - - """ - - self.kwargs = kwargs + """ """ + self.kwargs = kwargs def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) - dct = { - } + dct = {} dct.update(self.kwargs) return dct @@ -19417,26 +17369,17 @@ class PydevdSystemInfoResponseBody(BaseSchema): """ __props__ = { - "python": { - "description": "Information about the python version running in the current process.", - "type": "PydevdPythonInfo" - }, + "python": {"description": "Information about the python version running in the current process.", "type": "PydevdPythonInfo"}, "platform": { "description": "Information about the plarforn on which the current process is running.", - "type": "PydevdPlatformInfo" + "type": "PydevdPlatformInfo", }, - "process": { - "description": "Information about the current process.", - "type": "PydevdProcessInfo" - }, - "pydevd": { - "description": "Information about pydevd.", - "type": "PydevdInfo" - } + "process": {"description": "Information about the current process.", "type": "PydevdProcessInfo"}, + "pydevd": {"description": "Information about pydevd.", "type": "PydevdInfo"}, } - __refs__ = set(['python', 'platform', 'process', 'pydevd']) + __refs__ = set(["python", "platform", "process", "pydevd"]) - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, python, platform, process, pydevd, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -19448,32 +17391,39 @@ def __init__(self, python, platform, process, pydevd, update_ids_from_dap=False, if python is None: self.python = PydevdPythonInfo() else: - self.python = PydevdPythonInfo(update_ids_from_dap=update_ids_from_dap, **python) if python.__class__ != PydevdPythonInfo else python + self.python = ( + PydevdPythonInfo(update_ids_from_dap=update_ids_from_dap, **python) if python.__class__ != PydevdPythonInfo else python + ) if platform is None: self.platform = PydevdPlatformInfo() else: - self.platform = PydevdPlatformInfo(update_ids_from_dap=update_ids_from_dap, **platform) if platform.__class__ != PydevdPlatformInfo else platform + self.platform = ( + PydevdPlatformInfo(update_ids_from_dap=update_ids_from_dap, **platform) + if platform.__class__ != PydevdPlatformInfo + else platform + ) if process is None: self.process = PydevdProcessInfo() else: - self.process = PydevdProcessInfo(update_ids_from_dap=update_ids_from_dap, **process) if process.__class__ != PydevdProcessInfo else process + self.process = ( + PydevdProcessInfo(update_ids_from_dap=update_ids_from_dap, **process) if process.__class__ != PydevdProcessInfo else process + ) if pydevd is None: self.pydevd = PydevdInfo() else: - self.pydevd = PydevdInfo(update_ids_from_dap=update_ids_from_dap, **pydevd) if pydevd.__class__ != PydevdInfo else pydevd + self.pydevd = PydevdInfo(update_ids_from_dap=update_ids_from_dap, **pydevd) if pydevd.__class__ != PydevdInfo else pydevd self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) python = self.python platform = self.platform process = self.process pydevd = self.pydevd dct = { - 'python': python.to_dict(update_ids_to_dap=update_ids_to_dap), - 'platform': platform.to_dict(update_ids_to_dap=update_ids_to_dap), - 'process': process.to_dict(update_ids_to_dap=update_ids_to_dap), - 'pydevd': pydevd.to_dict(update_ids_to_dap=update_ids_to_dap), + "python": python.to_dict(update_ids_to_dap=update_ids_to_dap), + "platform": platform.to_dict(update_ids_to_dap=update_ids_to_dap), + "process": process.to_dict(update_ids_to_dap=update_ids_to_dap), + "pydevd": pydevd.to_dict(update_ids_to_dap=update_ids_to_dap), } dct.update(self.kwargs) return dct @@ -19487,15 +17437,10 @@ class PydevdAuthorizeResponseBody(BaseSchema): Note: automatically generated code. Do not edit manually. """ - __props__ = { - "clientAccessToken": { - "type": "string", - "description": "The access token to access the client (i.e.: usually the IDE)." - } - } + __props__ = {"clientAccessToken": {"type": "string", "description": "The access token to access the client (i.e.: usually the IDE)."}} __refs__ = set() - __slots__ = list(__props__.keys()) + ['kwargs'] + __slots__ = list(__props__.keys()) + ["kwargs"] def __init__(self, clientAccessToken, update_ids_from_dap=False, **kwargs): # noqa (update_ids_from_dap may be unused) """ @@ -19504,11 +17449,10 @@ def __init__(self, clientAccessToken, update_ids_from_dap=False, **kwargs): # n self.clientAccessToken = clientAccessToken self.kwargs = kwargs - def to_dict(self, update_ids_to_dap=False): # noqa (update_ids_to_dap may be unused) clientAccessToken = self.clientAccessToken dct = { - 'clientAccessToken': clientAccessToken, + "clientAccessToken": clientAccessToken, } dct.update(self.kwargs) return dct diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py index 28b729266..b3dda5ad8 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/_debug_adapter/pydevd_schema_log.py @@ -3,12 +3,12 @@ from _pydevd_bundle.pydevd_constants import ForkSafeLock _pid = os.getpid() -_pid_msg = '%s: ' % (_pid,) +_pid_msg = "%s: " % (_pid,) _debug_lock = ForkSafeLock() DEBUG = False -DEBUG_FILE = os.path.join(os.path.dirname(__file__), '__debug_output__.txt') +DEBUG_FILE = os.path.join(os.path.dirname(__file__), "__debug_output__.txt") def debug(msg): @@ -16,15 +16,15 @@ def debug(msg): with _debug_lock: _pid_prefix = _pid_msg if isinstance(msg, bytes): - _pid_prefix = _pid_prefix.encode('utf-8') + _pid_prefix = _pid_prefix.encode("utf-8") - if not msg.endswith(b'\r') and not msg.endswith(b'\n'): - msg += b'\n' - mode = 'a+b' + if not msg.endswith(b"\r") and not msg.endswith(b"\n"): + msg += b"\n" + mode = "a+b" else: - if not msg.endswith('\r') and not msg.endswith('\n'): - msg += '\n' - mode = 'a+' + if not msg.endswith("\r") and not msg.endswith("\n"): + msg += "\n" + mode = "a+" with open(DEBUG_FILE, mode) as stream: stream.write(_pid_prefix) stream.write(msg) @@ -36,11 +36,10 @@ def debug_exception(msg=None): debug(msg) with _debug_lock: - - with open(DEBUG_FILE, 'a+') as stream: + with open(DEBUG_FILE, "a+") as stream: _pid_prefix = _pid_msg if isinstance(msg, bytes): - _pid_prefix = _pid_prefix.encode('utf-8') + _pid_prefix = _pid_prefix.encode("utf-8") stream.write(_pid_prefix) traceback.print_exc(file=stream) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py index e6ba30023..760036e0b 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevconsole_code.py @@ -76,8 +76,7 @@ import __future__ -_features = [getattr(__future__, fname) - for fname in __future__.all_feature_names] +_features = [getattr(__future__, fname) for fname in __future__.all_feature_names] __all__ = ["compile_command", "Compile", "CommandCompiler"] @@ -88,7 +87,7 @@ def _maybe_compile(compiler, source, filename, symbol): # Check for source consisting of only blank lines and comments for line in source.split("\n"): line = line.strip() - if line and line[0] != '#': + if line and line[0] != "#": break # Leave it alone else: if symbol != "eval": @@ -157,6 +156,7 @@ def __init__(self): try: from ast import PyCF_ALLOW_TOP_LEVEL_AWAIT + self.flags |= PyCF_ALLOW_TOP_LEVEL_AWAIT except: pass @@ -176,7 +176,9 @@ class CommandCompiler: the instance 'remembers' and compiles all subsequent program texts with the statement in force.""" - def __init__(self,): + def __init__( + self, + ): self.compiler = Compile() def __call__(self, source, filename="", symbol="single"): @@ -200,6 +202,7 @@ def __call__(self, source, filename="", symbol="single"): """ return _maybe_compile(self.compiler, source, filename, symbol) + # END --------------------------- from codeop import CommandCompiler, compile_command # END --------------------------- from codeop import CommandCompiler, compile_command # END --------------------------- from codeop import CommandCompiler, compile_command @@ -207,14 +210,12 @@ def __call__(self, source, filename="", symbol="single"): # END --------------------------- from codeop import CommandCompiler, compile_command -__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact", - "compile_command"] +__all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact", "compile_command"] from _pydev_bundle._pydev_saved_modules import threading class _EvalAwaitInNewEventLoop(threading.Thread): - def __init__(self, compiled, updated_globals, updated_locals): threading.Thread.__init__(self) self.daemon = True @@ -232,6 +233,7 @@ async def _async_func(self): def run(self): try: import asyncio + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) self.evaluated_value = asyncio.run(self._async_func()) @@ -315,7 +317,7 @@ def runcode(self, code): """ try: is_async = False - if hasattr(inspect, 'CO_COROUTINE'): + if hasattr(inspect, "CO_COROUTINE"): is_async = inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE if is_async: @@ -362,7 +364,7 @@ def showsyntaxerror(self, filename=None): sys.last_value = value if sys.excepthook is sys.__excepthook__: lines = traceback.format_exception_only(type, value) - self.write(''.join(lines)) + self.write("".join(lines)) else: # If someone has set sys.excepthook, we let that take precedence # over self.write @@ -381,7 +383,7 @@ def showtraceback(self): try: lines = traceback.format_exception(ei[0], ei[1], last_tb.tb_next) if sys.excepthook is sys.__excepthook__: - self.write(''.join(lines)) + self.write("".join(lines)) else: # If someone has set sys.excepthook, we let that take precedence # over self.write @@ -451,9 +453,7 @@ def interact(self, banner=None, exitmsg=None): sys.ps2 = "... " cprt = 'Type "help", "copyright", "credits" or "license" for more information.' if banner is None: - self.write("Python %s on %s\n%s\n(%s)\n" % - (sys.version, sys.platform, cprt, - self.__class__.__name__)) + self.write("Python %s on %s\n%s\n(%s)\n" % (sys.version, sys.platform, cprt, self.__class__.__name__)) elif banner: self.write("%s\n" % str(banner)) more = 0 @@ -475,9 +475,9 @@ def interact(self, banner=None, exitmsg=None): self.resetbuffer() more = 0 if exitmsg is None: - self.write('now exiting %s...\n' % self.__class__.__name__) - elif exitmsg != '': - self.write('%s\n' % exitmsg) + self.write("now exiting %s...\n" % self.__class__.__name__) + elif exitmsg != "": + self.write("%s\n" % exitmsg) def push(self, line): """Push a line to the interpreter. @@ -544,11 +544,10 @@ def interact(banner=None, readfunc=None, local=None, exitmsg=None): import argparse parser = argparse.ArgumentParser() - parser.add_argument('-q', action='store_true', - help="don't print version and copyright messages") + parser.add_argument("-q", action="store_true", help="don't print version and copyright messages") args = parser.parse_args() if args.q or sys.flags.quiet: - banner = '' + banner = "" else: banner = None interact(banner) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py index ac866735b..8bfb1e4c0 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info.py @@ -1,19 +1,41 @@ # Defines which version of the PyDBAdditionalThreadInfo we'll use. -from _pydevd_bundle.pydevd_constants import ENV_FALSE_LOWER_VALUES, USE_CYTHON_FLAG, \ - ENV_TRUE_LOWER_VALUES +from _pydevd_bundle.pydevd_constants import ENV_FALSE_LOWER_VALUES, USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES if USE_CYTHON_FLAG in ENV_TRUE_LOWER_VALUES: # We must import the cython version if forcing cython - from _pydevd_bundle.pydevd_cython_wrapper import PyDBAdditionalThreadInfo, set_additional_thread_info, _set_additional_thread_info_lock # @UnusedImport + from _pydevd_bundle.pydevd_cython_wrapper import ( + PyDBAdditionalThreadInfo, + set_additional_thread_info, + _set_additional_thread_info_lock, # @UnusedImport + any_thread_stepping, + remove_additional_info, + ) # @UnusedImport elif USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES: # Use the regular version if not forcing cython - from _pydevd_bundle.pydevd_additional_thread_info_regular import PyDBAdditionalThreadInfo, set_additional_thread_info, _set_additional_thread_info_lock # @UnusedImport @Reimport + from _pydevd_bundle.pydevd_additional_thread_info_regular import ( + PyDBAdditionalThreadInfo, + set_additional_thread_info, + _set_additional_thread_info_lock, # @UnusedImport @Reimport + any_thread_stepping, + remove_additional_info, + ) # @UnusedImport @Reimport else: # Regular: use fallback if not found (message is already given elsewhere). try: - from _pydevd_bundle.pydevd_cython_wrapper import PyDBAdditionalThreadInfo, set_additional_thread_info, _set_additional_thread_info_lock + from _pydevd_bundle.pydevd_cython_wrapper import ( + PyDBAdditionalThreadInfo, + set_additional_thread_info, + _set_additional_thread_info_lock, + any_thread_stepping, + remove_additional_info, + ) except ImportError: - from _pydevd_bundle.pydevd_additional_thread_info_regular import PyDBAdditionalThreadInfo, set_additional_thread_info, _set_additional_thread_info_lock # @UnusedImport - + from _pydevd_bundle.pydevd_additional_thread_info_regular import ( + PyDBAdditionalThreadInfo, + set_additional_thread_info, + _set_additional_thread_info_lock, # @UnusedImport + any_thread_stepping, + remove_additional_info, + ) # @UnusedImport diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py index 2ed13138f..0d437ec4e 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_additional_thread_info_regular.py @@ -1,62 +1,70 @@ -from _pydevd_bundle.pydevd_constants import (STATE_RUN, PYTHON_SUSPEND, SUPPORT_GEVENT, ForkSafeLock, - _current_frames) +from _pydevd_bundle.pydevd_constants import ( + STATE_RUN, + PYTHON_SUSPEND, + SUPPORT_GEVENT, + ForkSafeLock, + _current_frames, + STATE_SUSPEND, + get_global_debugger, + get_thread_id, +) from _pydev_bundle import pydev_log -# IFDEF CYTHON -# pydev_log.debug("Using Cython speedups") -# ELSE -from _pydevd_bundle.pydevd_frame import PyDBFrame -# ENDIF +from _pydev_bundle._pydev_saved_modules import threading +import weakref version = 11 -#======================================================================================================================= +# ======================================================================================================================= # PyDBAdditionalThreadInfo -#======================================================================================================================= +# ======================================================================================================================= +# fmt: off # IFDEF CYTHON # cdef class PyDBAdditionalThreadInfo: # ELSE class PyDBAdditionalThreadInfo(object): # ENDIF +# fmt: on # Note: the params in cython are declared in pydevd_cython.pxd. + # fmt: off # IFDEF CYTHON # ELSE __slots__ = [ - 'pydev_state', - 'pydev_step_stop', - 'pydev_original_step_cmd', - 'pydev_step_cmd', - 'pydev_notify_kill', - 'pydev_django_resolve_frame', - 'pydev_call_from_jinja2', - 'pydev_call_inside_jinja2', - 'is_tracing', - 'conditional_breakpoint_exception', - 'pydev_message', - 'suspend_type', - 'pydev_next_line', - 'pydev_func_name', - 'suspended_at_unhandled', - 'trace_suspend_type', - 'top_level_thread_tracer_no_back_frames', - 'top_level_thread_tracer_unhandled', - 'thread_tracer', - 'step_in_initial_location', - + "pydev_state", + "pydev_step_stop", + "pydev_original_step_cmd", + "pydev_step_cmd", + "pydev_notify_kill", + "pydev_django_resolve_frame", + "pydev_call_from_jinja2", + "pydev_call_inside_jinja2", + "is_tracing", + "conditional_breakpoint_exception", + "pydev_message", + "suspend_type", + "pydev_next_line", + "pydev_func_name", + "suspended_at_unhandled", + "trace_suspend_type", + "top_level_thread_tracer_no_back_frames", + "top_level_thread_tracer_unhandled", + "thread_tracer", + "step_in_initial_location", # Used for CMD_SMART_STEP_INTO (to know which smart step into variant to use) - 'pydev_smart_parent_offset', - 'pydev_smart_child_offset', - + "pydev_smart_parent_offset", + "pydev_smart_child_offset", # Used for CMD_SMART_STEP_INTO (list[_pydevd_bundle.pydevd_bytecode_utils.Variant]) # Filled when the cmd_get_smart_step_into_variants is requested (so, this is a copy # of the last request for a given thread and pydev_smart_parent_offset/pydev_smart_child_offset relies on it). - 'pydev_smart_step_into_variants', - 'target_id_to_smart_step_into_variant', - - 'pydev_use_scoped_step_frame', + "pydev_smart_step_into_variants", + "target_id_to_smart_step_into_variant", + "pydev_use_scoped_step_frame", + "weak_thread", + "is_in_wait_loop", ] # ENDIF + # fmt: on def __init__(self): self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND @@ -77,12 +85,12 @@ def __init__(self): self.pydev_call_inside_jinja2 = None self.is_tracing = 0 self.conditional_breakpoint_exception = None - self.pydev_message = '' + self.pydev_message = "" self.suspend_type = PYTHON_SUSPEND self.pydev_next_line = -1 - self.pydev_func_name = '.invalid.' # Must match the type in cython + self.pydev_func_name = ".invalid." # Must match the type in cython self.suspended_at_unhandled = False - self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' self.top_level_thread_tracer_no_back_frames = [] self.top_level_thread_tracer_unhandled = None self.thread_tracer = None @@ -103,22 +111,80 @@ def __init__(self): # # See: https://github.com/microsoft/debugpy/issues/869#issuecomment-1132141003 self.pydev_use_scoped_step_frame = False + self.weak_thread = None + + # Purpose: detect if this thread is suspended and actually in the wait loop + # at this time (otherwise it may be suspended but still didn't reach a point. + # to pause). + self.is_in_wait_loop = False + + # fmt: off + # IFDEF CYTHON + # cpdef object _get_related_thread(self): + # ELSE + def _get_related_thread(self): + # ENDIF + # fmt: on + if self.pydev_notify_kill: # Already killed + return None + + if self.weak_thread is None: + return None + + thread = self.weak_thread() + if thread is None: + return False + + if thread._is_stopped: + return None + + if thread._ident is None: # Can this happen? + pydev_log.critical("thread._ident is None in _get_related_thread!") + return None + + if threading._active.get(thread._ident) is not thread: + return None + return thread + + # fmt: off + # IFDEF CYTHON + # cpdef bint _is_stepping(self): + # ELSE + def _is_stepping(self): + # ENDIF + # fmt: on + if self.pydev_state == STATE_RUN and self.pydev_step_cmd != -1: + # This means actually stepping in a step operation. + return True + + if self.pydev_state == STATE_SUSPEND and self.is_in_wait_loop: + # This means stepping because it was suspended but still didn't + # reach a suspension point. + return True + + return False + + # fmt: off + # IFDEF CYTHON + # cpdef get_topmost_frame(self, thread): + # ELSE def get_topmost_frame(self, thread): - ''' + # ENDIF + # fmt: on + """ Gets the topmost frame for the given thread. Note that it may be None and callers should remove the reference to the frame as soon as possible to avoid disturbing user code. - ''' + """ # sys._current_frames(): dictionary with thread id -> topmost frame current_frames = _current_frames() - topmost_frame = current_frames.get(thread.ident) + topmost_frame = current_frames.get(thread._ident) if topmost_frame is None: # Note: this is expected for dummy threads (so, getting the topmost frame should be # treated as optional). pydev_log.info( - 'Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n' - 'GEVENT_SUPPORT: %s', + "Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n" "GEVENT_SUPPORT: %s", thread, thread.ident, id(thread), @@ -128,15 +194,30 @@ def get_topmost_frame(self, thread): return topmost_frame + # fmt: off + # IFDEF CYTHON + # cpdef update_stepping_info(self): + # ELSE + def update_stepping_info(self): + # ENDIF + # fmt: on + _update_stepping_info(self) + def __str__(self): - return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( - self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + return "State:%s Stop:%s Cmd: %s Kill:%s" % (self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) _set_additional_thread_info_lock = ForkSafeLock() +_next_additional_info = [PyDBAdditionalThreadInfo()] +# fmt: off +# IFDEF CYTHON +# cpdef set_additional_thread_info(thread): +# ELSE def set_additional_thread_info(thread): +# ENDIF +# fmt: on try: additional_info = thread.additional_info if additional_info is None: @@ -145,9 +226,102 @@ def set_additional_thread_info(thread): with _set_additional_thread_info_lock: # If it's not there, set it within a lock to avoid any racing # conditions. - additional_info = getattr(thread, 'additional_info', None) + try: + additional_info = thread.additional_info + except: + additional_info = None + if additional_info is None: - additional_info = PyDBAdditionalThreadInfo() - thread.additional_info = additional_info + # Note: don't call PyDBAdditionalThreadInfo constructor at this + # point as it can piggy-back into the debugger which could + # get here again, rather get the global ref which was pre-created + # and add a new entry only after we set thread.additional_info. + additional_info = _next_additional_info[0] + thread.additional_info = additional_info + additional_info.weak_thread = weakref.ref(thread) + add_additional_info(additional_info) + del _next_additional_info[:] + _next_additional_info.append(PyDBAdditionalThreadInfo()) return additional_info + + +# fmt: off +# IFDEF CYTHON +# cdef set _all_infos +# cdef set _infos_stepping +# cdef object _update_infos_lock +# ELSE +# ENDIF +# fmt: on + +_all_infos = set() +_infos_stepping = set() +_update_infos_lock = ForkSafeLock() + + +# fmt: off +# IFDEF CYTHON +# cdef _update_stepping_info(PyDBAdditionalThreadInfo info): +# ELSE +def _update_stepping_info(info): +# ENDIF +# fmt: on + + global _infos_stepping + global _all_infos + + with _update_infos_lock: + # Removes entries that are no longer valid. + new_all_infos = set() + for info in _all_infos: + if info._get_related_thread() is not None: + new_all_infos.add(info) + _all_infos = new_all_infos + + new_stepping = set() + for info in _all_infos: + if info._is_stepping(): + new_stepping.add(info) + _infos_stepping = new_stepping + + py_db = get_global_debugger() + if py_db is not None and not py_db.pydb_disposed: + thread = info.weak_thread() + if thread is not None: + thread_id = get_thread_id(thread) + _queue, event = py_db.get_internal_queue_and_event(thread_id) + event.set() + +# fmt: off +# IFDEF CYTHON +# cpdef add_additional_info(PyDBAdditionalThreadInfo info): +# ELSE +def add_additional_info(info): +# ENDIF +# fmt: on + with _update_infos_lock: + _all_infos.add(info) + if info._is_stepping(): + _infos_stepping.add(info) + +# fmt: off +# IFDEF CYTHON +# cpdef remove_additional_info(PyDBAdditionalThreadInfo info): +# ELSE +def remove_additional_info(info): +# ENDIF +# fmt: on + with _update_infos_lock: + _all_infos.discard(info) + _infos_stepping.discard(info) + + +# fmt: off +# IFDEF CYTHON +# cpdef bint any_thread_stepping(): +# ELSE +def any_thread_stepping(): +# ENDIF +# fmt: on + return bool(_infos_stepping) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py index 0b21c59b8..c8b2100c0 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_api.py @@ -5,17 +5,44 @@ from _pydev_bundle._pydev_saved_modules import threading from _pydevd_bundle import pydevd_utils, pydevd_source_mapping from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info -from _pydevd_bundle.pydevd_comm import (InternalGetThreadStack, internal_get_completions, - InternalSetNextStatementThread, internal_reload_code, - InternalGetVariable, InternalGetArray, InternalLoadFullValue, - internal_get_description, internal_get_frame, internal_evaluate_expression, InternalConsoleExec, - internal_get_variable_json, internal_change_variable, internal_change_variable_json, - internal_evaluate_expression_json, internal_set_expression_json, internal_get_exception_details_json, - internal_step_in_thread, internal_smart_step_into) -from _pydevd_bundle.pydevd_comm_constants import (CMD_THREAD_SUSPEND, file_system_encoding, - CMD_STEP_INTO_MY_CODE, CMD_STOP_ON_START, CMD_SMART_STEP_INTO) -from _pydevd_bundle.pydevd_constants import (get_current_thread_id, set_protocol, get_protocol, - HTTP_JSON_PROTOCOL, JSON_PROTOCOL, DebugInfoHolder, IS_WINDOWS) +from _pydevd_bundle.pydevd_comm import ( + InternalGetThreadStack, + internal_get_completions, + InternalSetNextStatementThread, + internal_reload_code, + InternalGetVariable, + InternalGetArray, + InternalLoadFullValue, + internal_get_description, + internal_get_frame, + internal_evaluate_expression, + InternalConsoleExec, + internal_get_variable_json, + internal_change_variable, + internal_change_variable_json, + internal_evaluate_expression_json, + internal_set_expression_json, + internal_get_exception_details_json, + internal_step_in_thread, + internal_smart_step_into, +) +from _pydevd_bundle.pydevd_comm_constants import ( + CMD_THREAD_SUSPEND, + file_system_encoding, + CMD_STEP_INTO_MY_CODE, + CMD_STOP_ON_START, + CMD_SMART_STEP_INTO, +) +from _pydevd_bundle.pydevd_constants import ( + get_current_thread_id, + set_protocol, + get_protocol, + HTTP_JSON_PROTOCOL, + JSON_PROTOCOL, + DebugInfoHolder, + IS_WINDOWS, + PYDEVD_USE_SYS_MONITORING, +) from _pydevd_bundle.pydevd_net_command_factory_json import NetCommandFactoryJson from _pydevd_bundle.pydevd_net_command_factory_xml import NetCommandFactory import pydevd_file_utils @@ -32,6 +59,7 @@ from _pydevd_bundle.pydevd_daemon_thread import run_as_pydevd_daemon_thread from _pydevd_bundle.pydevd_thread_lifecycle import pydevd_find_thread_by_id, resume_threads import tokenize +from _pydevd_sys_monitoring import pydevd_sys_monitoring try: import dis @@ -47,7 +75,7 @@ def _get_code_lines(code): path = code with tokenize.open(path) as f: src = f.read() - code = compile(src, path, 'exec', 0, dont_inherit=True) + code = compile(src, path, "exec", 0, dont_inherit=True) return _get_code_lines(code) def iterate(): @@ -68,10 +96,8 @@ def iterate(): class PyDevdAPI(object): - class VariablePresentation(object): - - def __init__(self, special='group', function='group', class_='group', protected='inline'): + def __init__(self, special="group", function="group", class_="group", protected="inline"): self._presentation = { DAPGrouper.SCOPE_SPECIAL_VARS: special, DAPGrouper.SCOPE_FUNCTION_VARS: function, @@ -107,11 +133,11 @@ def set_protocol(self, py_db, seq, protocol): return py_db.cmd_factory.make_protocol_set_message(seq) def set_ide_os_and_breakpoints_by(self, py_db, seq, ide_os, breakpoints_by): - ''' + """ :param ide_os: 'WINDOWS' or 'UNIX' :param breakpoints_by: 'ID' or 'LINE' - ''' - if breakpoints_by == 'ID': + """ + if breakpoints_by == "ID": py_db._set_breakpoints_with_id = True else: py_db._set_breakpoints_with_id = False @@ -121,16 +147,16 @@ def set_ide_os_and_breakpoints_by(self, py_db, seq, ide_os, breakpoints_by): return py_db.cmd_factory.make_version_message(seq) def set_ide_os(self, ide_os): - ''' + """ :param ide_os: 'WINDOWS' or 'UNIX' - ''' + """ pydevd_file_utils.set_ide_os(ide_os) def set_gui_event_loop(self, py_db, gui_event_loop): py_db._gui_event_loop = gui_event_loop def send_error_message(self, py_db, msg): - cmd = py_db.cmd_factory.make_warning_message('pydevd: %s\n' % (msg,)) + cmd = py_db.cmd_factory.make_warning_message("pydevd: %s\n" % (msg,)) py_db.writer.add_command(cmd) def set_show_return_values(self, py_db, show_return_values): @@ -147,14 +173,14 @@ def list_threads(self, py_db, seq): # Response is the command with the list of threads to be added to the writer thread. return py_db.cmd_factory.make_list_threads_message(py_db, seq) - def request_suspend_thread(self, py_db, thread_id='*'): + def request_suspend_thread(self, py_db, thread_id="*"): # Yes, thread suspend is done at this point, not through an internal command. threads = [] - suspend_all = thread_id.strip() == '*' + suspend_all = thread_id.strip() == "*" if suspend_all: threads = pydevd_utils.get_non_pydevd_threads() - elif thread_id.startswith('__frame__:'): + elif thread_id.startswith("__frame__:"): sys.stderr.write("Can't suspend tasklet: %s\n" % (thread_id,)) else: @@ -174,40 +200,42 @@ def request_suspend_thread(self, py_db, thread_id='*'): break def set_enable_thread_notifications(self, py_db, enable): - ''' + """ When disabled, no thread notifications (for creation/removal) will be issued until it's re-enabled. Note that when it's re-enabled, a creation notification will be sent for all existing threads even if it was previously sent (this is meant to be used on disconnect/reconnect). - ''' + """ py_db.set_enable_thread_notifications(enable) def request_disconnect(self, py_db, resume_threads): self.set_enable_thread_notifications(py_db, False) - self.remove_all_breakpoints(py_db, '*') + self.remove_all_breakpoints(py_db, "*") self.remove_all_exception_breakpoints(py_db) self.notify_disconnect(py_db) if resume_threads: - self.request_resume_thread(thread_id='*') + self.request_resume_thread(thread_id="*") def request_resume_thread(self, thread_id): resume_threads(thread_id) def request_completions(self, py_db, seq, thread_id, frame_id, act_tok, line=-1, column=-1): py_db.post_method_as_internal_command( - thread_id, internal_get_completions, seq, thread_id, frame_id, act_tok, line=line, column=column) + thread_id, internal_get_completions, seq, thread_id, frame_id, act_tok, line=line, column=column + ) - def request_stack(self, py_db, seq, thread_id, fmt=None, timeout=.5, start_frame=0, levels=0): + def request_stack(self, py_db, seq, thread_id, fmt=None, timeout=0.5, start_frame=0, levels=0): # If it's already suspended, get it right away. internal_get_thread_stack = InternalGetThreadStack( - seq, thread_id, py_db, set_additional_thread_info, fmt=fmt, timeout=timeout, start_frame=start_frame, levels=levels) + seq, thread_id, py_db, set_additional_thread_info, fmt=fmt, timeout=timeout, start_frame=start_frame, levels=levels + ) if internal_get_thread_stack.can_be_executed_by(get_current_thread_id(threading.current_thread())): internal_get_thread_stack.do_it(py_db) else: - py_db.post_internal_command(internal_get_thread_stack, '*') + py_db.post_internal_command(internal_get_thread_stack, "*") def request_exception_info_json(self, py_db, request, thread_id, thread, max_frames): py_db.post_method_as_internal_command( @@ -231,15 +259,16 @@ def request_step(self, py_db, thread_id, step_cmd_id): step_cmd_id, set_additional_thread_info=set_additional_thread_info, ) - elif thread_id.startswith('__frame__:'): + elif thread_id.startswith("__frame__:"): sys.stderr.write("Can't make tasklet step command: %s\n" % (thread_id,)) def request_smart_step_into(self, py_db, seq, thread_id, offset, child_offset): t = pydevd_find_thread_by_id(thread_id) if t: py_db.post_method_as_internal_command( - thread_id, internal_smart_step_into, thread_id, offset, child_offset, set_additional_thread_info=set_additional_thread_info) - elif thread_id.startswith('__frame__:'): + thread_id, internal_smart_step_into, thread_id, offset, child_offset, set_additional_thread_info=set_additional_thread_info + ) + elif thread_id.startswith("__frame__:"): sys.stderr.write("Can't set next statement in tasklet: %s\n" % (thread_id,)) def request_smart_step_into_by_func_name(self, py_db, seq, thread_id, line, func_name): @@ -247,7 +276,7 @@ def request_smart_step_into_by_func_name(self, py_db, seq, thread_id, line, func self.request_set_next(py_db, seq, thread_id, CMD_SMART_STEP_INTO, None, line, func_name) def request_set_next(self, py_db, seq, thread_id, set_next_cmd_id, original_filename, line, func_name): - ''' + """ set_next_cmd_id may actually be one of: CMD_RUN_TO_LINE @@ -261,52 +290,49 @@ def request_set_next(self, py_db, seq, thread_id, set_next_cmd_id, original_file place (the set next just needs the line afterwards as it executes locally, but for the Jupyter integration, the source mapping may change the actual lines and not only the filename). - ''' + """ t = pydevd_find_thread_by_id(thread_id) if t: if original_filename is not None: translated_filename = self.filename_to_server(original_filename) # Apply user path mapping. - pydev_log.debug('Set next (after path translation) in: %s line: %s', translated_filename, line) + pydev_log.debug("Set next (after path translation) in: %s line: %s", translated_filename, line) func_name = self.to_str(func_name) assert translated_filename.__class__ == str # i.e.: bytes on py2 and str on py3 assert func_name.__class__ == str # i.e.: bytes on py2 and str on py3 # Apply source mapping (i.e.: ipython). - _source_mapped_filename, new_line, multi_mapping_applied = py_db.source_mapping.map_to_server( - translated_filename, line) + _source_mapped_filename, new_line, multi_mapping_applied = py_db.source_mapping.map_to_server(translated_filename, line) if multi_mapping_applied: - pydev_log.debug('Set next (after source mapping) in: %s line: %s', translated_filename, line) + pydev_log.debug("Set next (after source mapping) in: %s line: %s", translated_filename, line) line = new_line int_cmd = InternalSetNextStatementThread(thread_id, set_next_cmd_id, line, func_name, seq=seq) py_db.post_internal_command(int_cmd, thread_id) - elif thread_id.startswith('__frame__:'): + elif thread_id.startswith("__frame__:"): sys.stderr.write("Can't set next statement in tasklet: %s\n" % (thread_id,)) def request_reload_code(self, py_db, seq, module_name, filename): - ''' + """ :param seq: if -1 no message will be sent back when the reload is done. Note: either module_name or filename may be None (but not both at the same time). - ''' - thread_id = '*' # Any thread + """ + thread_id = "*" # Any thread # Note: not going for the main thread because in this case it'd only do the load # when we stopped on a breakpoint. - py_db.post_method_as_internal_command( - thread_id, internal_reload_code, seq, module_name, filename) + py_db.post_method_as_internal_command(thread_id, internal_reload_code, seq, module_name, filename) def request_change_variable(self, py_db, seq, thread_id, frame_id, scope, attr, value): - ''' + """ :param scope: 'FRAME' or 'GLOBAL' - ''' - py_db.post_method_as_internal_command( - thread_id, internal_change_variable, seq, thread_id, frame_id, scope, attr, value) + """ + py_db.post_method_as_internal_command(thread_id, internal_change_variable, seq, thread_id, frame_id, scope, attr, value) def request_get_variable(self, py_db, seq, thread_id, frame_id, scope, attrs): - ''' + """ :param scope: 'FRAME' or 'GLOBAL' - ''' + """ int_cmd = InternalGetVariable(seq, thread_id, frame_id, scope, attrs) py_db.post_internal_command(int_cmd, thread_id) @@ -319,27 +345,25 @@ def request_load_full_value(self, py_db, seq, thread_id, frame_id, vars): py_db.post_internal_command(int_cmd, thread_id) def request_get_description(self, py_db, seq, thread_id, frame_id, expression): - py_db.post_method_as_internal_command( - thread_id, internal_get_description, seq, thread_id, frame_id, expression) + py_db.post_method_as_internal_command(thread_id, internal_get_description, seq, thread_id, frame_id, expression) def request_get_frame(self, py_db, seq, thread_id, frame_id): - py_db.post_method_as_internal_command( - thread_id, internal_get_frame, seq, thread_id, frame_id) + py_db.post_method_as_internal_command(thread_id, internal_get_frame, seq, thread_id, frame_id) def to_str(self, s): - ''' + """ -- in py3 raises an error if it's not str already. - ''' + """ if s.__class__ != str: - raise AssertionError('Expected to have str on Python 3. Found: %s (%s)' % (s, s.__class__)) + raise AssertionError("Expected to have str on Python 3. Found: %s (%s)" % (s, s.__class__)) return s def filename_to_str(self, filename): - ''' + """ -- in py3 raises an error if it's not str already. - ''' + """ if filename.__class__ != str: - raise AssertionError('Expected to have str on Python 3. Found: %s (%s)' % (filename, filename.__class__)) + raise AssertionError("Expected to have str on Python 3. Found: %s (%s)" % (filename, filename.__class__)) return filename def filename_to_server(self, filename): @@ -348,17 +372,16 @@ def filename_to_server(self, filename): return filename class _DummyFrame(object): - ''' + """ Dummy frame to be used with PyDB.apply_files_filter (as we don't really have the related frame as breakpoints are added before execution). - ''' + """ class _DummyCode(object): - def __init__(self, filename): self.co_firstlineno = 1 self.co_filename = filename - self.co_name = 'invalid func name ' + self.co_name = "invalid func name " def __init__(self, filename): self.f_code = self._DummyCode(filename) @@ -374,14 +397,13 @@ def __init__(self, filename): ADD_BREAKPOINT_INVALID_LINE = 4 class _AddBreakpointResult(object): - # :see: ADD_BREAKPOINT_NO_ERROR = 0 # :see: ADD_BREAKPOINT_FILE_NOT_FOUND = 1 # :see: ADD_BREAKPOINT_FILE_EXCLUDED_BY_FILTERS = 2 # :see: ADD_BREAKPOINT_LAZY_VALIDATION = 3 # :see: ADD_BREAKPOINT_INVALID_LINE = 4 - __slots__ = ['error_code', 'breakpoint_id', 'translated_filename', 'translated_line', 'original_line'] + __slots__ = ["error_code", "breakpoint_id", "translated_filename", "translated_line", "original_line"] def __init__(self, breakpoint_id, translated_filename, translated_line, original_line): self.error_code = PyDevdAPI.ADD_BREAKPOINT_NO_ERROR @@ -391,9 +413,22 @@ def __init__(self, breakpoint_id, translated_filename, translated_line, original self.original_line = original_line def add_breakpoint( - self, py_db, original_filename, breakpoint_type, breakpoint_id, line, condition, func_name, - expression, suspend_policy, hit_condition, is_logpoint, adjust_line=False, on_changed_breakpoint_state=None): - ''' + self, + py_db, + original_filename, + breakpoint_type, + breakpoint_id, + line, + condition, + func_name, + expression, + suspend_policy, + hit_condition, + is_logpoint, + adjust_line=False, + on_changed_breakpoint_state=None, + ): + """ :param str original_filename: Note: must be sent as it was received in the protocol. It may be translated in this function and its final value will be available in the returned _AddBreakpointResult. @@ -446,30 +481,41 @@ def add_breakpoint( implementation may internally reuse the same instance multiple times). :return _AddBreakpointResult: - ''' - assert original_filename.__class__ == str, 'Expected str, found: %s' % (original_filename.__class__,) # i.e.: bytes on py2 and str on py3 + """ + assert original_filename.__class__ == str, "Expected str, found: %s" % ( + original_filename.__class__, + ) # i.e.: bytes on py2 and str on py3 original_filename_normalized = pydevd_file_utils.normcase_from_client(original_filename) - pydev_log.debug('Request for breakpoint in: %s line: %s', original_filename, line) + pydev_log.debug("Request for breakpoint in: %s line: %s", original_filename, line) original_line = line # Parameters to reapply breakpoint. - api_add_breakpoint_params = (original_filename, breakpoint_type, breakpoint_id, line, condition, func_name, - expression, suspend_policy, hit_condition, is_logpoint) + api_add_breakpoint_params = ( + original_filename, + breakpoint_type, + breakpoint_id, + line, + condition, + func_name, + expression, + suspend_policy, + hit_condition, + is_logpoint, + ) translated_filename = self.filename_to_server(original_filename) # Apply user path mapping. - pydev_log.debug('Breakpoint (after path translation) in: %s line: %s', translated_filename, line) + pydev_log.debug("Breakpoint (after path translation) in: %s line: %s", translated_filename, line) func_name = self.to_str(func_name) assert translated_filename.__class__ == str # i.e.: bytes on py2 and str on py3 assert func_name.__class__ == str # i.e.: bytes on py2 and str on py3 # Apply source mapping (i.e.: ipython). - source_mapped_filename, new_line, multi_mapping_applied = py_db.source_mapping.map_to_server( - translated_filename, line) + source_mapped_filename, new_line, multi_mapping_applied = py_db.source_mapping.map_to_server(translated_filename, line) if multi_mapping_applied: - pydev_log.debug('Breakpoint (after source mapping) in: %s line: %s', source_mapped_filename, new_line) + pydev_log.debug("Breakpoint (after source mapping) in: %s line: %s", source_mapped_filename, new_line) # Note that source mapping is internal and does not change the resulting filename nor line # (we want the outside world to see the line in the original file and not in the ipython # cell, otherwise the editor wouldn't be correct as the returned line is the line to @@ -485,7 +531,7 @@ def add_breakpoint( translated_absolute_filename = pydevd_file_utils.absolute_path(translated_filename) canonical_normalized_filename = pydevd_file_utils.canonical_normalized_path(translated_filename) - if adjust_line and not translated_absolute_filename.startswith('<'): + if adjust_line and not translated_absolute_filename.startswith("<"): # Validate file_to_line_to_breakpoints and adjust their positions. try: lines = sorted(_get_code_lines(translated_absolute_filename)) @@ -500,9 +546,12 @@ def add_breakpoint( result = self._AddBreakpointResult(breakpoint_id, original_filename, line, original_line) - py_db.api_received_breakpoints[(original_filename_normalized, breakpoint_id)] = (canonical_normalized_filename, api_add_breakpoint_params) + py_db.api_received_breakpoints[(original_filename_normalized, breakpoint_id)] = ( + canonical_normalized_filename, + api_add_breakpoint_params, + ) - if not translated_absolute_filename.startswith('<'): + if not translated_absolute_filename.startswith("<"): # Note: if a mapping pointed to a file starting with '<', don't validate. if not pydevd_file_utils.exists(translated_absolute_filename): @@ -510,10 +559,10 @@ def add_breakpoint( return result if ( - py_db.is_files_filter_enabled and - not py_db.get_require_module_for_filters() and - py_db.apply_files_filter(self._DummyFrame(translated_absolute_filename), translated_absolute_filename, False) - ): + py_db.is_files_filter_enabled + and not py_db.get_require_module_for_filters() + and py_db.apply_files_filter(self._DummyFrame(translated_absolute_filename), translated_absolute_filename, False) + ): # Note that if `get_require_module_for_filters()` returns False, we don't do this check. # This is because we don't have the module name given a file at this point (in # runtime it's gotten from the frame.f_globals). @@ -525,9 +574,10 @@ def add_breakpoint( # breakpoint even with the error code. result.error_code = self.ADD_BREAKPOINT_FILE_EXCLUDED_BY_FILTERS - if breakpoint_type == 'python-line': + if breakpoint_type == "python-line": added_breakpoint = LineBreakpoint( - breakpoint_id, line, condition, func_name, expression, suspend_policy, hit_condition=hit_condition, is_logpoint=is_logpoint) + breakpoint_id, line, condition, func_name, expression, suspend_policy, hit_condition=hit_condition, is_logpoint=is_logpoint + ) file_to_line_to_breakpoints = py_db.breakpoints file_to_id_to_breakpoint = py_db.file_to_id_to_line_breakpoint @@ -538,9 +588,20 @@ def add_breakpoint( plugin = py_db.get_plugin_lazy_init() if plugin is not None: add_plugin_breakpoint_result = plugin.add_breakpoint( - 'add_line_breakpoint', py_db, breakpoint_type, canonical_normalized_filename, - breakpoint_id, line, condition, expression, func_name, hit_condition=hit_condition, is_logpoint=is_logpoint, - add_breakpoint_result=result, on_changed_breakpoint_state=on_changed_breakpoint_state) + "add_line_breakpoint", + py_db, + breakpoint_type, + canonical_normalized_filename, + breakpoint_id, + line, + condition, + expression, + func_name, + hit_condition=hit_condition, + is_logpoint=is_logpoint, + add_breakpoint_result=result, + on_changed_breakpoint_state=on_changed_breakpoint_state, + ) if add_plugin_breakpoint_result is not None: supported_type = True @@ -552,7 +613,7 @@ def add_breakpoint( if not supported_type: raise NameError(breakpoint_type) - pydev_log.debug('Added breakpoint:%s - line:%s - func_name:%s\n', canonical_normalized_filename, line, func_name) + pydev_log.debug("Added breakpoint:%s - line:%s - func_name:%s\n", canonical_normalized_filename, line, func_name) if canonical_normalized_filename in file_to_id_to_breakpoint: id_to_pybreakpoint = file_to_id_to_breakpoint[canonical_normalized_filename] @@ -562,46 +623,44 @@ def add_breakpoint( id_to_pybreakpoint[breakpoint_id] = added_breakpoint py_db.consolidate_breakpoints(canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints) if py_db.plugin is not None: - py_db.has_plugin_line_breaks = py_db.plugin.has_line_breaks() - py_db.plugin.after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints) + py_db.has_plugin_line_breaks = py_db.plugin.has_line_breaks(py_db) + py_db.plugin.after_breakpoints_consolidated( + py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints + ) py_db.on_breakpoints_changed() return result def reapply_breakpoints(self, py_db): - ''' + """ Reapplies all the received breakpoints as they were received by the API (so, new translations are applied). - ''' - pydev_log.debug('Reapplying breakpoints.') + """ + pydev_log.debug("Reapplying breakpoints.") values = list(py_db.api_received_breakpoints.values()) # Create a copy with items to reapply. - self.remove_all_breakpoints(py_db, '*') + self.remove_all_breakpoints(py_db, "*") for val in values: _new_filename, api_add_breakpoint_params = val self.add_breakpoint(py_db, *api_add_breakpoint_params) def remove_all_breakpoints(self, py_db, received_filename): - ''' + """ Removes all the breakpoints from a given file or from all files if received_filename == '*'. :param str received_filename: Note: must be sent as it was received in the protocol. It may be translated in this function. - ''' + """ assert received_filename.__class__ == str # i.e.: bytes on py2 and str on py3 changed = False - lst = [ - py_db.file_to_id_to_line_breakpoint, - py_db.file_to_id_to_plugin_breakpoint, - py_db.breakpoints - ] - if hasattr(py_db, 'django_breakpoints'): + lst = [py_db.file_to_id_to_line_breakpoint, py_db.file_to_id_to_plugin_breakpoint, py_db.breakpoints] + if hasattr(py_db, "django_breakpoints"): lst.append(py_db.django_breakpoints) - if hasattr(py_db, 'jinja2_breakpoints'): + if hasattr(py_db, "jinja2_breakpoints"): lst.append(py_db.jinja2_breakpoints) - if received_filename == '*': + if received_filename == "*": py_db.api_received_breakpoints.clear() for file_to_id_to_breakpoint in lst: @@ -631,7 +690,7 @@ def remove_all_breakpoints(self, py_db, received_filename): py_db.on_breakpoints_changed(removed=True) def remove_breakpoint(self, py_db, received_filename, breakpoint_type, breakpoint_id): - ''' + """ :param str received_filename: Note: must be sent as it was received in the protocol. It may be translated in this function. @@ -640,7 +699,7 @@ def remove_breakpoint(self, py_db, received_filename, breakpoint_type, breakpoin One of: 'python-line', 'django-line', 'jinja2-line'. :param int breakpoint_id: - ''' + """ received_filename_normalized = pydevd_file_utils.normcase_from_client(received_filename) for key, val in list(py_db.api_received_breakpoints.items()): original_filename_normalized, existing_breakpoint_id = key @@ -649,14 +708,13 @@ def remove_breakpoint(self, py_db, received_filename, breakpoint_type, breakpoin del py_db.api_received_breakpoints[key] break else: - pydev_log.info( - 'Did not find breakpoint to remove: %s (breakpoint id: %s)', received_filename, breakpoint_id) + pydev_log.info("Did not find breakpoint to remove: %s (breakpoint id: %s)", received_filename, breakpoint_id) file_to_id_to_breakpoint = None received_filename = self.filename_to_server(received_filename) canonical_normalized_filename = pydevd_file_utils.canonical_normalized_path(received_filename) - if breakpoint_type == 'python-line': + if breakpoint_type == "python-line": file_to_line_to_breakpoints = py_db.breakpoints file_to_id_to_breakpoint = py_db.file_to_id_to_line_breakpoint @@ -667,25 +725,33 @@ def remove_breakpoint(self, py_db, received_filename, breakpoint_type, breakpoin file_to_line_to_breakpoints = result if file_to_id_to_breakpoint is None: - pydev_log.critical('Error removing breakpoint. Cannot handle breakpoint of type %s', breakpoint_type) + pydev_log.critical("Error removing breakpoint. Cannot handle breakpoint of type %s", breakpoint_type) else: try: id_to_pybreakpoint = file_to_id_to_breakpoint.get(canonical_normalized_filename, {}) if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: existing = id_to_pybreakpoint[breakpoint_id] - pydev_log.info('Removed breakpoint:%s - line:%s - func_name:%s (id: %s)\n' % ( - canonical_normalized_filename, existing.line, existing.func_name, breakpoint_id)) + pydev_log.info( + "Removed breakpoint:%s - line:%s - func_name:%s (id: %s)\n" + % (canonical_normalized_filename, existing.line, existing.func_name, breakpoint_id) + ) del id_to_pybreakpoint[breakpoint_id] py_db.consolidate_breakpoints(canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints) if py_db.plugin is not None: - py_db.has_plugin_line_breaks = py_db.plugin.has_line_breaks() - py_db.plugin.after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints) + py_db.has_plugin_line_breaks = py_db.plugin.has_line_breaks(py_db) + py_db.plugin.after_breakpoints_consolidated( + py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints + ) except KeyError: - pydev_log.info("Error removing breakpoint: Breakpoint id not found: %s id: %s. Available ids: %s\n", - canonical_normalized_filename, breakpoint_id, list(id_to_pybreakpoint)) + pydev_log.info( + "Error removing breakpoint: Breakpoint id not found: %s id: %s. Available ids: %s\n", + canonical_normalized_filename, + breakpoint_id, + list(id_to_pybreakpoint), + ) py_db.on_breakpoints_changed(removed=True) @@ -697,31 +763,27 @@ def set_function_breakpoints(self, py_db, function_breakpoints): py_db.function_breakpoint_name_to_breakpoint = function_breakpoint_name_to_breakpoint py_db.on_breakpoints_changed() - def request_exec_or_evaluate( - self, py_db, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result): + def request_exec_or_evaluate(self, py_db, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result): py_db.post_method_as_internal_command( - thread_id, internal_evaluate_expression, - seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result) + thread_id, internal_evaluate_expression, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result + ) - def request_exec_or_evaluate_json( - self, py_db, request, thread_id): - py_db.post_method_as_internal_command( - thread_id, internal_evaluate_expression_json, request, thread_id) + def request_exec_or_evaluate_json(self, py_db, request, thread_id): + py_db.post_method_as_internal_command(thread_id, internal_evaluate_expression_json, request, thread_id) def request_set_expression_json(self, py_db, request, thread_id): - py_db.post_method_as_internal_command( - thread_id, internal_set_expression_json, request, thread_id) + py_db.post_method_as_internal_command(thread_id, internal_set_expression_json, request, thread_id) def request_console_exec(self, py_db, seq, thread_id, frame_id, expression): int_cmd = InternalConsoleExec(seq, thread_id, frame_id, expression) py_db.post_internal_command(int_cmd, thread_id) def request_load_source(self, py_db, seq, filename): - ''' + """ :param str filename: Note: must be sent as it was received in the protocol. It may be translated in this function. - ''' + """ try: filename = self.filename_to_server(filename) assert filename.__class__ == str # i.e.: bytes on py2 and str on py3 @@ -735,13 +797,13 @@ def request_load_source(self, py_db, seq, filename): py_db.writer.add_command(cmd) def get_decompiled_source_from_frame_id(self, py_db, frame_id): - ''' + """ :param py_db: :param frame_id: :throws Exception: If unable to get the frame in the currently paused frames or if some error happened when decompiling. - ''' + """ variable = py_db.suspended_frames_manager.get_variable(int(frame_id)) frame = variable.value @@ -749,7 +811,7 @@ def get_decompiled_source_from_frame_id(self, py_db, frame_id): lines = (linecache.getline(frame.f_code.co_filename, i) for i in itertools.count(1)) lines = itertools.takewhile(bool, lines) # empty lines are '\n', EOF is '' - source = ''.join(lines) + source = "".join(lines) if not source: source = code_to_bytecode_representation(frame.f_code) @@ -765,17 +827,17 @@ def request_load_source_from_frame_id(self, py_db, seq, frame_id): py_db.writer.add_command(cmd) def add_python_exception_breakpoint( - self, - py_db, - exception, - condition, - expression, - notify_on_handled_exceptions, - notify_on_unhandled_exceptions, - notify_on_user_unhandled_exceptions, - notify_on_first_raise_only, - ignore_libraries, - ): + self, + py_db, + exception, + condition, + expression, + notify_on_handled_exceptions, + notify_on_unhandled_exceptions, + notify_on_user_unhandled_exceptions, + notify_on_first_raise_only, + ignore_libraries, + ): exception_breakpoint = py_db.add_break_on_exception( exception, condition=condition, @@ -794,10 +856,10 @@ def add_plugins_exception_breakpoint(self, py_db, breakpoint_type, exception): supported_type = False plugin = py_db.get_plugin_lazy_init() if plugin is not None: - supported_type = plugin.add_breakpoint('add_exception_breakpoint', py_db, breakpoint_type, exception) + supported_type = plugin.add_breakpoint("add_exception_breakpoint", py_db, breakpoint_type, exception) if supported_type: - py_db.has_plugin_exception_breaks = py_db.plugin.has_exception_breaks() + py_db.has_plugin_exception_breaks = py_db.plugin.has_exception_breaks(py_db) py_db.on_breakpoints_changed() else: raise NameError(breakpoint_type) @@ -830,9 +892,9 @@ def remove_plugins_exception_breakpoint(self, py_db, exception_type, exception): supported_type = plugin.remove_exception_breakpoint(py_db, exception_type, exception) if supported_type: - py_db.has_plugin_exception_breaks = py_db.plugin.has_exception_breaks() + py_db.has_plugin_exception_breaks = py_db.plugin.has_exception_breaks(py_db) else: - pydev_log.info('No exception of type: %s was previously registered.', exception_type) + pydev_log.info("No exception of type: %s was previously registered.", exception_type) py_db.on_breakpoints_changed(removed=True) @@ -847,9 +909,9 @@ def remove_all_exception_breakpoints(self, py_db): py_db.on_breakpoints_changed(removed=True) def set_project_roots(self, py_db, project_roots): - ''' + """ :param str project_roots: - ''' + """ py_db.set_project_roots(project_roots) def set_stepping_resumes_all_threads(self, py_db, stepping_resumes_all_threads): @@ -859,27 +921,25 @@ def set_stepping_resumes_all_threads(self, py_db, stepping_resumes_all_threads): from _pydevd_bundle.pydevd_filtering import ExcludeFilter # noqa def set_exclude_filters(self, py_db, exclude_filters): - ''' + """ :param list(PyDevdAPI.ExcludeFilter) exclude_filters: - ''' + """ py_db.set_exclude_filters(exclude_filters) def set_use_libraries_filter(self, py_db, use_libraries_filter): py_db.set_use_libraries_filter(use_libraries_filter) def request_get_variable_json(self, py_db, request, thread_id): - ''' + """ :param VariablesRequest request: - ''' - py_db.post_method_as_internal_command( - thread_id, internal_get_variable_json, request) + """ + py_db.post_method_as_internal_command(thread_id, internal_get_variable_json, request) def request_change_variable_json(self, py_db, request, thread_id): - ''' + """ :param SetVariableRequest request: - ''' - py_db.post_method_as_internal_command( - thread_id, internal_change_variable_json, request) + """ + py_db.post_method_as_internal_command(thread_id, internal_change_variable_json, request) def set_dont_trace_start_end_patterns(self, py_db, start_patterns, end_patterns): # Note: start/end patterns normalized internally. @@ -889,8 +949,7 @@ def set_dont_trace_start_end_patterns(self, py_db, start_patterns, end_patterns) # After it's set the first time, we can still change it, but we need to reset the # related caches. reset_caches = False - dont_trace_start_end_patterns_previously_set = \ - py_db.dont_trace_external_files.__name__ == 'custom_dont_trace_external_files' + dont_trace_start_end_patterns_previously_set = py_db.dont_trace_external_files.__name__ == "custom_dont_trace_external_files" if not dont_trace_start_end_patterns_previously_set and not start_patterns and not end_patterns: # If it wasn't set previously and start and end patterns are empty we don't need to do anything. @@ -899,8 +958,10 @@ def set_dont_trace_start_end_patterns(self, py_db, start_patterns, end_patterns) if not py_db.is_cache_file_type_empty(): # i.e.: custom function set in set_dont_trace_start_end_patterns. if dont_trace_start_end_patterns_previously_set: - reset_caches = py_db.dont_trace_external_files.start_patterns != start_patterns or \ - py_db.dont_trace_external_files.end_patterns != end_patterns + reset_caches = ( + py_db.dont_trace_external_files.start_patterns != start_patterns + or py_db.dont_trace_external_files.end_patterns != end_patterns + ) else: reset_caches = True @@ -919,11 +980,15 @@ def custom_dont_trace_external_files(abs_path): def stop_on_entry(self): main_thread = pydevd_utils.get_main_thread() if main_thread is None: - pydev_log.critical('Could not find main thread while setting Stop on Entry.') + pydev_log.critical("Could not find main thread while setting Stop on Entry.") else: info = set_additional_thread_info(main_thread) info.pydev_original_step_cmd = CMD_STOP_ON_START info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + info.update_stepping_info() + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.update_monitor_events(suspend_requested=True) + pydevd_sys_monitoring.restart_events() def set_ignore_system_exit_codes(self, py_db, ignore_system_exit_codes): py_db.set_ignore_system_exit_codes(ignore_system_exit_codes) @@ -931,7 +996,7 @@ def set_ignore_system_exit_codes(self, py_db, ignore_system_exit_codes): SourceMappingEntry = pydevd_source_mapping.SourceMappingEntry def set_source_mapping(self, py_db, source_filename, mapping): - ''' + """ :param str source_filename: The filename for the source mapping (bytes on py2 and str on py3). This filename will be made absolute in this function. @@ -942,7 +1007,7 @@ def set_source_mapping(self, py_db, source_filename, mapping): :return str: An error message if it was not possible to set the mapping or an empty string if everything is ok. - ''' + """ source_filename = self.filename_to_server(source_filename) absolute_source_filename = pydevd_file_utils.absolute_path(source_filename) for map_entry in mapping: @@ -952,16 +1017,16 @@ def set_source_mapping(self, py_db, source_filename, mapping): return error_msg self.reapply_breakpoints(py_db) - return '' + return "" def set_variable_presentation(self, py_db, variable_presentation): assert isinstance(variable_presentation, self.VariablePresentation) py_db.variable_presentation = variable_presentation def get_ppid(self): - ''' + """ Provides the parent pid (even for older versions of Python on Windows). - ''' + """ ppid = None try: @@ -985,7 +1050,6 @@ def _get_windows_ppid(self): def _terminate_child_processes_windows(self, dont_terminate_child_pids): this_pid = os.getpid() for _ in range(50): # Try this at most 50 times before giving up. - # Note: we can't kill the process itself with taskkill, so, we # list immediate children, kill that tree and then exit this process. @@ -999,11 +1063,7 @@ def _terminate_child_processes_windows(self, dont_terminate_child_pids): break else: for pid in children_pids: - self._call( - ['taskkill', '/F', '/PID', str(pid), '/T'], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) + self._call(["taskkill", "/F", "/PID", str(pid), "/T"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) del children_pids[:] @@ -1014,22 +1074,14 @@ def list_children_and_stop_forking(initial_pid, stop=True): children_pids = [] if stop: # Ask to stop forking (shouldn't be called for this process, only subprocesses). - self._call( - ['kill', '-STOP', str(initial_pid)], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) + self._call(["kill", "-STOP", str(initial_pid)], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - list_popen = self._popen( - ['pgrep', '-P', str(initial_pid)], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) + list_popen = self._popen(["pgrep", "-P", str(initial_pid)], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if list_popen is not None: stdout, _ = list_popen.communicate() for line in stdout.splitlines(): - line = line.decode('ascii').strip() + line = line.decode("ascii").strip() if line: pid = str(line) if pid in dont_terminate_child_pids: @@ -1042,7 +1094,6 @@ def list_children_and_stop_forking(initial_pid, stop=True): previously_found = set() for _ in range(50): # Try this at most 50 times before giving up. - children_pids = list_children_and_stop_forking(this_pid, stop=False) found_new = False @@ -1050,11 +1101,7 @@ def list_children_and_stop_forking(initial_pid, stop=True): if pid not in previously_found: found_new = True previously_found.add(pid) - self._call( - ['kill', '-KILL', str(pid)], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE - ) + self._call(["kill", "-KILL", str(pid)], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if not found_new: break @@ -1064,7 +1111,7 @@ def _popen(self, cmdline, **kwargs): return subprocess.Popen(cmdline, **kwargs) except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: - pydev_log.exception('Error running: %s' % (' '.join(cmdline))) + pydev_log.exception("Error running: %s" % (" ".join(cmdline))) return None def _call(self, cmdline, **kwargs): @@ -1072,7 +1119,7 @@ def _call(self, cmdline, **kwargs): subprocess.check_call(cmdline, **kwargs) except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: - pydev_log.exception('Error running: %s' % (' '.join(cmdline))) + pydev_log.exception("Error running: %s" % (" ".join(cmdline))) def set_terminate_child_processes(self, py_db, terminate_child_processes): py_db.terminate_child_processes = terminate_child_processes @@ -1081,19 +1128,19 @@ def set_terminate_keyboard_interrupt(self, py_db, terminate_keyboard_interrupt): py_db.terminate_keyboard_interrupt = terminate_keyboard_interrupt def terminate_process(self, py_db): - ''' + """ Terminates the current process (and child processes if the option to also terminate child processes is enabled). - ''' + """ try: if py_db.terminate_child_processes: - pydev_log.debug('Terminating child processes.') + pydev_log.debug("Terminating child processes.") if IS_WINDOWS: self._terminate_child_processes_windows(py_db.dont_terminate_child_pids) else: self._terminate_child_processes_linux_and_mac(py_db.dont_terminate_child_pids) finally: - pydev_log.debug('Exiting process (os._exit(0)).') + pydev_log.debug("Exiting process (os._exit(0)).") os._exit(0) def _terminate_if_commands_processed(self, py_db): @@ -1120,16 +1167,18 @@ def _list_ppid_and_pid(): _TH32CS_SNAPPROCESS = 0x00000002 class PROCESSENTRY32(ctypes.Structure): - _fields_ = [("dwSize", ctypes.c_uint32), - ("cntUsage", ctypes.c_uint32), - ("th32ProcessID", ctypes.c_uint32), - ("th32DefaultHeapID", ctypes.c_size_t), - ("th32ModuleID", ctypes.c_uint32), - ("cntThreads", ctypes.c_uint32), - ("th32ParentProcessID", ctypes.c_uint32), - ("pcPriClassBase", ctypes.c_long), - ("dwFlags", ctypes.c_uint32), - ("szExeFile", ctypes.c_char * 260)] + _fields_ = [ + ("dwSize", ctypes.c_uint32), + ("cntUsage", ctypes.c_uint32), + ("th32ProcessID", ctypes.c_uint32), + ("th32DefaultHeapID", ctypes.c_size_t), + ("th32ModuleID", ctypes.c_uint32), + ("cntThreads", ctypes.c_uint32), + ("th32ParentProcessID", ctypes.c_uint32), + ("pcPriClassBase", ctypes.c_long), + ("dwFlags", ctypes.c_uint32), + ("szExeFile", ctypes.c_char * 260), + ] kernel32 = ctypes.windll.kernel32 snapshot = kernel32.CreateToolhelp32Snapshot(_TH32CS_SNAPPROCESS, 0) @@ -1138,7 +1187,7 @@ class PROCESSENTRY32(ctypes.Structure): process_entry = PROCESSENTRY32() process_entry.dwSize = ctypes.sizeof(PROCESSENTRY32) if not kernel32.Process32First(ctypes.c_void_p(snapshot), ctypes.byref(process_entry)): - pydev_log.critical('Process32First failed (getting process from CreateToolhelp32Snapshot).') + pydev_log.critical("Process32First failed (getting process from CreateToolhelp32Snapshot).") else: while True: ppid_and_pids.append((process_entry.th32ParentProcessID, process_entry.th32ProcessID)) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py index d92fccf52..7d4d02202 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_breakpoints.py @@ -5,7 +5,6 @@ class ExceptionBreakpoint(object): - def __init__( self, qname, @@ -15,8 +14,8 @@ def __init__( notify_on_unhandled_exceptions, notify_on_user_unhandled_exceptions, notify_on_first_raise_only, - ignore_libraries - ): + ignore_libraries, + ): exctype = get_exception_class(qname) self.qname = qname if exctype is not None: @@ -46,7 +45,6 @@ def handle_hit_condition(self, frame): class LineBreakpoint(object): - def __init__(self, breakpoint_id, line, condition, func_name, expression, suspend_policy="NONE", hit_condition=None, is_logpoint=False): self.breakpoint_id = breakpoint_id self.line = line @@ -69,7 +67,7 @@ def handle_hit_condition(self, frame): ret = False with self._hit_condition_lock: self._hit_count += 1 - expr = self.hit_condition.replace('@HIT@', str(self._hit_count)) + expr = self.hit_condition.replace("@HIT@", str(self._hit_count)) try: ret = bool(eval(expr, frame.f_globals, frame.f_locals)) except Exception: @@ -78,7 +76,6 @@ def handle_hit_condition(self, frame): class FunctionBreakpoint(object): - def __init__(self, func_name, condition, expression, suspend_policy="NONE", hit_condition=None, is_logpoint=False): self.condition = condition self.func_name = func_name @@ -99,7 +96,7 @@ def handle_hit_condition(self, frame): ret = False with self._hit_condition_lock: self._hit_count += 1 - expr = self.hit_condition.replace('@HIT@', str(self._hit_count)) + expr = self.hit_condition.replace("@HIT@", str(self._hit_count)) try: ret = bool(eval(expr, frame.f_globals, frame.f_locals)) except Exception: @@ -111,7 +108,7 @@ def get_exception_breakpoint(exctype, exceptions): if not exctype: exception_full_qname = None else: - exception_full_qname = str(exctype.__module__) + '.' + exctype.__name__ + exception_full_qname = str(exctype.__module__) + "." + exctype.__name__ exc = None if exceptions is not None: @@ -170,9 +167,9 @@ def stop_on_unhandled_exception(py_db, thread, additional_info, arg): try: additional_info.pydev_message = exception_breakpoint.qname except: - additional_info.pydev_message = exception_breakpoint.qname.encode('utf-8') + additional_info.pydev_message = exception_breakpoint.qname.encode("utf-8") - pydev_log.debug('Handling post-mortem stop on exception breakpoint %s' % (exception_breakpoint.qname,)) + pydev_log.debug("Handling post-mortem stop on exception breakpoint %s" % (exception_breakpoint.qname,)) py_db.do_stop_on_unhandled_exception(thread, user_frame, frames_byid, arg) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py index e8c9f5479..8a470444a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils.py @@ -6,7 +6,7 @@ from _pydev_bundle import pydev_log from types import CodeType -from _pydevd_frame_eval.vendored.bytecode.instr import _Variable +from _pydevd_frame_eval.vendored.bytecode.instr import _Variable, Label from _pydevd_frame_eval.vendored import bytecode from _pydevd_frame_eval.vendored.bytecode import cfg as bytecode_cfg import dis @@ -15,69 +15,85 @@ from _pydevd_bundle.pydevd_constants import KeyifyList, DebugInfoHolder, IS_PY311_OR_GREATER from bisect import bisect from collections import deque +import traceback # When True, throws errors on unknown bytecodes, when False, ignore those as if they didn't change the stack. STRICT_MODE = False +GO_INTO_INNER_CODES = True + DEBUG = False -_BINARY_OPS = set([opname for opname in dis.opname if opname.startswith('BINARY_')]) +_BINARY_OPS = set([opname for opname in dis.opname if opname.startswith("BINARY_")]) _BINARY_OP_MAP = { - 'BINARY_POWER': '__pow__', - 'BINARY_MULTIPLY': '__mul__', - 'BINARY_MATRIX_MULTIPLY': '__matmul__', - 'BINARY_FLOOR_DIVIDE': '__floordiv__', - 'BINARY_TRUE_DIVIDE': '__div__', - 'BINARY_MODULO': '__mod__', - 'BINARY_ADD': '__add__', - 'BINARY_SUBTRACT': '__sub__', - 'BINARY_LSHIFT': '__lshift__', - 'BINARY_RSHIFT': '__rshift__', - 'BINARY_AND': '__and__', - 'BINARY_OR': '__or__', - 'BINARY_XOR': '__xor__', - 'BINARY_SUBSCR': '__getitem__', - 'BINARY_DIVIDE': '__div__' + "BINARY_POWER": "__pow__", + "BINARY_MULTIPLY": "__mul__", + "BINARY_MATRIX_MULTIPLY": "__matmul__", + "BINARY_FLOOR_DIVIDE": "__floordiv__", + "BINARY_TRUE_DIVIDE": "__div__", + "BINARY_MODULO": "__mod__", + "BINARY_ADD": "__add__", + "BINARY_SUBTRACT": "__sub__", + "BINARY_LSHIFT": "__lshift__", + "BINARY_RSHIFT": "__rshift__", + "BINARY_AND": "__and__", + "BINARY_OR": "__or__", + "BINARY_XOR": "__xor__", + "BINARY_SUBSCR": "__getitem__", + "BINARY_DIVIDE": "__div__", } _COMP_OP_MAP = { - '<': '__lt__', - '<=': '__le__', - '==': '__eq__', - '!=': '__ne__', - '>': '__gt__', - '>=': '__ge__', - 'in': '__contains__', - 'not in': '__contains__', + "<": "__lt__", + "<=": "__le__", + "==": "__eq__", + "!=": "__ne__", + ">": "__gt__", + ">=": "__ge__", + "in": "__contains__", + "not in": "__contains__", } class Target(object): - __slots__ = ['arg', 'lineno', 'offset', 'children_targets'] - - def __init__(self, arg, lineno, offset, children_targets=()): + __slots__ = ["arg", "lineno", "endlineno", "startcol", "endcol", "offset", "children_targets"] + + def __init__( + self, + arg, + lineno, + offset, + children_targets=(), + # These are optional (only Python 3.11 onwards). + endlineno=-1, + startcol=-1, + endcol=-1, + ): self.arg = arg self.lineno = lineno + self.endlineno = endlineno + self.startcol = startcol + self.endcol = endcol + self.offset = offset self.children_targets = children_targets def __repr__(self): ret = [] for s in self.__slots__: - ret.append('%s: %s' % (s, getattr(self, s))) - return 'Target(%s)' % ', '.join(ret) + ret.append("%s: %s" % (s, getattr(self, s))) + return "Target(%s)" % ", ".join(ret) __str__ = __repr__ class _TargetIdHashable(object): - def __init__(self, target): self.target = target def __eq__(self, other): - if not hasattr(other, 'target'): + if not hasattr(other, "target"): return return other.target is self.target @@ -89,9 +105,9 @@ def __hash__(self): class _StackInterpreter(object): - ''' + """ Good reference: https://github.com/python/cpython/blob/fcb55c0037baab6f98f91ee38ce84b6f874f034a/Python/ceval.c - ''' + """ def __init__(self, bytecode): self.bytecode = bytecode @@ -102,38 +118,42 @@ def __init__(self, bytecode): self.func_name_id_to_code_object = {} def __str__(self): - return 'Stack:\nFunction calls:\n%s\nLoad attrs:\n%s\n' % (self.function_calls, list(self.load_attrs.values())) + return "Stack:\nFunction calls:\n%s\nLoad attrs:\n%s\n" % (self.function_calls, list(self.load_attrs.values())) def _getname(self, instr): if instr.opcode in _opcode.hascompare: cmp_op = dis.cmp_op[instr.arg] - if cmp_op not in ('exception match', 'BAD'): + if cmp_op not in ("exception match", "BAD"): return _COMP_OP_MAP.get(cmp_op, cmp_op) return instr.arg def _getcallname(self, instr): - if instr.name == 'BINARY_SUBSCR': - return '__getitem__().__call__' - if instr.name == 'CALL_FUNCTION': + if instr.name == "BINARY_SUBSCR": + return "__getitem__().__call__" + if instr.name == "CALL_FUNCTION": # Note: previously a '__call__().__call__' was returned, but this was a bit weird # and on Python 3.9 this construct could appear for some internal things where # it wouldn't be expected. # Note: it'd be what we had in func()(). return None - if instr.name == 'MAKE_FUNCTION': - return '__func__().__call__' - if instr.name == 'LOAD_ASSERTION_ERROR': - return 'AssertionError' + if instr.name == "MAKE_FUNCTION": + return "__func__().__call__" + if instr.name == "LOAD_ASSERTION_ERROR": + return "AssertionError" name = self._getname(instr) if isinstance(name, CodeType): name = name.co_qualname # Note: only available for Python 3.11 if isinstance(name, _Variable): name = name.name + if isinstance(name, tuple): + # Load attr in Python 3.12 comes with (bool, name) + if len(name) == 2 and isinstance(name[0], bool) and isinstance(name[1], str): + name = name[1] if not isinstance(name, str): return None - if name.endswith('>'): # xxx., xxx., ... - return name.split('.')[-1] + if name.endswith(">"): # xxx., xxx., ... + return name.split(".")[-1] return name def _no_stack_change(self, instr): @@ -203,17 +223,16 @@ def _handle_call_from_instr(self, func_name_instr, func_call_instr): target = None if not call_name: pass # Ignore if we can't identify a name - elif call_name in ('', '', '', ''): + elif call_name in ("", "", "", ""): code_obj = self.func_name_id_to_code_object[_TargetIdHashable(func_name_instr)] - if code_obj is not None: + if code_obj is not None and GO_INTO_INNER_CODES: children_targets = _get_smart_step_into_targets(code_obj) if children_targets: # i.e.: we have targets inside of a or . # Note that to actually match this in the debugger we need to do matches on 2 frames, # the one with the and then the actual target inside the . target = Target(call_name, func_name_instr.lineno, func_call_instr.offset, children_targets) - self.function_calls.append( - target) + self.function_calls.append(target) else: # Ok, regular call @@ -221,7 +240,7 @@ def _handle_call_from_instr(self, func_name_instr, func_call_instr): self.function_calls.append(target) if DEBUG and target is not None: - print('Created target', target) + print("Created target", target) self._stack.append(func_call_instr) # Keep the func call as the result def on_COMPARE_OP(self, instr): @@ -235,7 +254,7 @@ def on_COMPARE_OP(self, instr): return cmp_op = dis.cmp_op[instr.arg] - if cmp_op not in ('exception match', 'BAD'): + if cmp_op not in ("exception match", "BAD"): self.function_calls.append(Target(self._getname(instr), instr.lineno, instr.offset)) self._stack.append(instr) @@ -300,7 +319,7 @@ def on_MAKE_FUNCTION(self, instr): _func_defaults = self._stack.pop() call_name = self._getcallname(qualname) - if call_name in ('', '', '', ''): + if call_name in ("", "", "", ""): if isinstance(code_obj_instr.arg, CodeType): self.func_name_id_to_code_object[_TargetIdHashable(qualname)] = code_obj_instr.arg self._stack.append(qualname) @@ -308,6 +327,9 @@ def on_MAKE_FUNCTION(self, instr): def on_LOAD_FAST(self, instr): self._stack.append(instr) + on_LOAD_FAST_AND_CLEAR = on_LOAD_FAST + on_LOAD_FAST_CHECK = on_LOAD_FAST + def on_LOAD_ASSERTION_ERROR(self, instr): self._stack.append(instr) @@ -321,14 +343,49 @@ def on_CALL_METHOD(self, instr): func_name_instr = self._stack.pop() self._handle_call_from_instr(func_name_instr, instr) + def on_CALL(self, instr): + # pop the actual args + for _ in range(instr.arg): + self._stack.pop() + + func_name_instr = self._stack.pop() + if self._getcallname(func_name_instr) is None: + func_name_instr = self._stack.pop() + + if self._stack: + peeked = self._stack[-1] + if peeked.name == "PUSH_NULL": + self._stack.pop() + + self._handle_call_from_instr(func_name_instr, instr) + + def on_CALL_INTRINSIC_1(self, instr): + try: + func_name_instr = self._stack.pop() + except IndexError: + return + + if self._stack: + peeked = self._stack[-1] + if peeked.name == "PUSH_NULL": + self._stack.pop() + + self._handle_call_from_instr(func_name_instr, instr) + def on_PUSH_NULL(self, instr): self._stack.append(instr) + def on_KW_NAMES(self, instr): + return + + def on_RETURN_CONST(self, instr): + return + def on_CALL_FUNCTION(self, instr): arg = instr.arg - argc = arg & 0xff # positional args - argc += ((arg >> 8) * 2) # keyword args + argc = arg & 0xFF # positional args + argc += (arg >> 8) * 2 # keyword args # pop the actual args for _ in range(argc): @@ -350,8 +407,8 @@ def on_CALL_FUNCTION_KW(self, instr): # pop the actual args arg = instr.arg - argc = arg & 0xff # positional args - argc += ((arg >> 8) * 2) # keyword args + argc = arg & 0xFF # positional args + argc += (arg >> 8) * 2 # keyword args for _ in range(argc): self._stack.pop() @@ -366,8 +423,8 @@ def on_CALL_FUNCTION_VAR(self, instr): # pop the actual args arg = instr.arg - argc = arg & 0xff # positional args - argc += ((arg >> 8) * 2) # keyword args + argc = arg & 0xFF # positional args + argc += (arg >> 8) * 2 # keyword args for _ in range(argc): self._stack.pop() @@ -381,8 +438,8 @@ def on_CALL_FUNCTION_VAR_KW(self, instr): arg = instr.arg - argc = arg & 0xff # positional args - argc += ((arg >> 8) * 2) # keyword args + argc = arg & 0xFF # positional args + argc += (arg >> 8) * 2 # keyword args # also pop **kwargs self._stack.pop() @@ -401,9 +458,9 @@ def on_CALL_FUNCTION_EX(self, instr): func_name_instr = self._stack.pop() self._handle_call_from_instr(func_name_instr, instr) - on_YIELD_VALUE = _no_stack_change on_GET_AITER = _no_stack_change on_GET_ANEXT = _no_stack_change + on_END_FOR = _no_stack_change on_END_ASYNC_FOR = _no_stack_change on_BEFORE_ASYNC_WITH = _no_stack_change on_SETUP_ASYNC_WITH = _no_stack_change @@ -435,6 +492,13 @@ def on_JUMP_IF_NOT_EXC_MATCH(self, instr): except IndexError: return + def on_SWAP(self, instr): + i = instr.arg + try: + self._stack[-i], self._stack[-1] = self._stack[-1], self._stack[-i] + except: + pass + def on_ROT_TWO(self, instr): try: p0 = self._stack.pop() @@ -520,6 +584,7 @@ def on_BUILD_CONST_KEY_MAP(self, instr): self.on_POP_TOP(instr) # value self._stack.append(instr) + on_YIELD_VALUE = on_POP_TOP on_RETURN_VALUE = on_POP_TOP on_POP_JUMP_IF_FALSE = on_POP_TOP on_POP_JUMP_IF_TRUE = on_POP_TOP @@ -575,6 +640,8 @@ def on_RAISE_VARARGS(self, instr): on_POP_BLOCK = _no_stack_change on_JUMP_FORWARD = _no_stack_change + on_JUMP_BACKWARD = _no_stack_change + on_JUMP_BACKWARD_NO_INTERRUPT = _no_stack_change on_POP_EXCEPT = _no_stack_change on_SETUP_EXCEPT = _no_stack_change on_WITH_EXCEPT_START = _no_stack_change @@ -662,6 +729,7 @@ def on_DELETE_SUBSCR(self, instr): # some evaluation. on_PRINT_EXPR = on_POP_TOP + on_LABEL = _no_stack_change on_UNARY_POSITIVE = _no_stack_change on_UNARY_NEGATIVE = _no_stack_change on_UNARY_NOT = _no_stack_change @@ -672,9 +740,9 @@ def on_DELETE_SUBSCR(self, instr): def _get_smart_step_into_targets(code): - ''' + """ :return list(Target) - ''' + """ b = bytecode.Bytecode.from_code(code) cfg = bytecode_cfg.ControlFlowGraph.from_bytecode(b) @@ -682,33 +750,39 @@ def _get_smart_step_into_targets(code): for block in cfg: if DEBUG: - print('\nStart block----') + print("\nStart block----") stack = _StackInterpreter(block) for instr in block: + if isinstance(instr, (Label,)): + # No name for these + continue try: - func_name = 'on_%s' % (instr.name,) + func_name = "on_%s" % (instr.name,) func = getattr(stack, func_name, None) - if DEBUG: - if instr.name != 'CACHE': # Filter the ones we don't want to see. - print('\nWill handle: ', instr, '>>', stack._getname(instr), '<<') - print('Current stack:') - for entry in stack._stack: - print(' arg:', stack._getname(entry), '(', entry, ')') - if func is None: if STRICT_MODE: - raise AssertionError('%s not found.' % (func_name,)) + raise AssertionError("%s not found." % (func_name,)) else: + if DEBUG: + print("Skipping: %s." % (func_name,)) + continue func(instr) + + if DEBUG: + if instr.name != "CACHE": # Filter the ones we don't want to see. + print("\nHandled: ", instr, ">>", stack._getname(instr), "<<") + print("New stack:") + for entry in stack._stack: + print(" arg:", stack._getname(entry), "(", entry, ")") except: if STRICT_MODE: raise # Error in strict mode. else: # In non-strict mode, log it (if in verbose mode) and keep on going. if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 2: - pydev_log.exception('Exception computing step into targets (handled).') + pydev_log.exception("Exception computing step into targets (handled).") ret.extend(stack.function_calls) # No longer considering attr loads as calls (while in theory sometimes it's possible @@ -717,6 +791,8 @@ def _get_smart_step_into_targets(code): # step into from stepping into properties). # ret.extend(stack.load_attrs.values()) + if DEBUG: + print("\nEnd block----") return ret @@ -725,12 +801,15 @@ def _get_smart_step_into_targets(code): # to inspect the parent frame for frame.f_lasti to know where we actually are (as the # caller name may not always match the new frame name). class Variant(object): - __slots__ = ['name', 'is_visited', 'line', 'offset', 'call_order', 'children_variants', 'parent'] + __slots__ = ["name", "is_visited", "line", "offset", "call_order", "children_variants", "parent", "endlineno", "startcol", "endcol"] - def __init__(self, name, is_visited, line, offset, call_order, children_variants=None): + def __init__(self, name, is_visited, line, offset, call_order, children_variants=None, endlineno=-1, startcol=-1, endcol=-1): self.name = name self.is_visited = is_visited self.line = line + self.endlineno = endlineno + self.startcol = startcol + self.endcol = endcol self.offset = offset self.call_order = call_order self.children_variants = children_variants @@ -742,32 +821,32 @@ def __init__(self, name, is_visited, line, offset, call_order, children_variants def __repr__(self): ret = [] for s in self.__slots__: - if s == 'parent': + if s == "parent": try: parent = self.parent except AttributeError: - ret.append('%s: ' % (s,)) + ret.append("%s: " % (s,)) else: if parent is None: - ret.append('parent: None') + ret.append("parent: None") else: - ret.append('parent: %s (%s)' % (parent.name, parent.offset)) + ret.append("parent: %s (%s)" % (parent.name, parent.offset)) continue - if s == 'children_variants': - ret.append('children_variants: %s' % (len(self.children_variants) if self.children_variants else 0)) + if s == "children_variants": + ret.append("children_variants: %s" % (len(self.children_variants) if self.children_variants else 0)) continue try: - ret.append('%s: %s' % (s, getattr(self, s))) + ret.append("%s= %s" % (s, getattr(self, s))) except AttributeError: - ret.append('%s: ' % (s,)) - return 'Variant(%s)' % ', '.join(ret) + ret.append("%s: " % (s,)) + return "Variant(%s)" % ", ".join(ret) __str__ = __repr__ -def _convert_target_to_variant(target, start_line, end_line, call_order_cache, lasti, base): +def _convert_target_to_variant(target, start_line, end_line, call_order_cache: dict, lasti: int, base: int): name = target.arg if not isinstance(name, str): return @@ -784,10 +863,21 @@ def _convert_target_to_variant(target, start_line, end_line, call_order_cache, l children_variants = None if children_targets: children_variants = [ - _convert_target_to_variant(child, start_line, end_line, call_order_cache, lasti, base) - for child in target.children_targets] - - return Variant(name, is_visited, target.lineno - base, target.offset, call_order, children_variants) + _convert_target_to_variant(child, start_line, end_line, call_order_cache, lasti, base) for child in target.children_targets + ] + + return Variant( + name, + is_visited, + target.lineno - base, + target.offset, + call_order, + children_variants, + # Only really matter in Python 3.11 + target.endlineno - base if target.endlineno >= 0 else -1, + target.startcol, + target.endcol, + ) def calculate_smart_step_into_variants(frame, start_line, end_line, base=0): @@ -801,13 +891,18 @@ def calculate_smart_step_into_variants(frame, start_line, end_line, base=0): :note: it's guaranteed that the offsets appear in order. :raise: :py:class:`RuntimeError` if failed to parse the bytecode or if dis cannot be used. """ + if IS_PY311_OR_GREATER: + from . import pydevd_bytecode_utils_py311 + + return pydevd_bytecode_utils_py311.calculate_smart_step_into_variants(frame, start_line, end_line, base) + variants = [] code = frame.f_code lasti = frame.f_lasti call_order_cache = {} if DEBUG: - print('dis.dis:') + print("dis.dis:") if IS_PY311_OR_GREATER: dis.dis(code, show_caches=False) else: @@ -834,7 +929,7 @@ def get_smart_step_into_variant_from_frame_offset(frame_f_lasti, variants): if not variants: return None - i = bisect(KeyifyList(variants, lambda entry:entry.offset), frame_f_lasti) + i = bisect(KeyifyList(variants, lambda entry: entry.offset), frame_f_lasti) if i == 0: return None diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py new file mode 100644 index 000000000..7ebaa7fb3 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_bytecode_utils_py311.py @@ -0,0 +1,105 @@ +from _pydevd_bundle.pydevd_constants import IS_PY311_OR_GREATER +import dis +from types import CodeType +from collections import namedtuple + +DEBUG = False + +_Pos = namedtuple("_Pos", "lineno endlineno startcol endcol") + + +def _is_inside(item_pos: _Pos, container_pos: _Pos): + if item_pos.lineno < container_pos.lineno or item_pos.endlineno > container_pos.endlineno: + return False + + if item_pos.lineno == container_pos.lineno: + if item_pos.startcol < container_pos.startcol: + return False + + if item_pos.endlineno == container_pos.endlineno: + if item_pos.endcol > container_pos.endcol: + return False + + # Not outside, must be inside. + return True + + +def _get_smart_step_into_targets(code): + import linecache + from .pydevd_bytecode_utils import Target + + filename = code.co_filename + + targets_root = [] + children = [] + for instr in dis.Bytecode(code): + if instr.opname == "LOAD_CONST": + if isinstance(instr.argval, CodeType): + children.append(_get_smart_step_into_targets(instr.argval)) + + elif instr.opname in ("CALL", "CALL_INTRINSIC_1"): + positions = instr.positions + if positions.lineno is None: + continue + if positions.end_lineno is None: + continue + lines = [] + for lineno in range(positions.lineno, positions.end_lineno + 1): + lines.append(linecache.getline(filename, lineno)) + + startcol = positions.col_offset + endcol = positions.end_col_offset + + if positions.lineno == positions.end_lineno: + lines[0] = lines[0][startcol:endcol] + else: + lines[0] = lines[0][startcol:] + lines[-1] = lines[-1][:endcol] + + pos = _Pos(positions.lineno, positions.end_lineno, startcol, endcol) + targets_root.append(Target("".join(lines), positions.lineno, instr.offset, [], positions.end_lineno, startcol, endcol)) + + for targets in children: + for child_target in targets: + pos = _Pos(child_target.lineno, child_target.endlineno, child_target.startcol, child_target.endcol) + + for outer_target in targets_root: + outer_pos = _Pos(outer_target.lineno, outer_target.endlineno, outer_target.startcol, outer_target.endcol) + if _is_inside(pos, outer_pos): + outer_target.children_targets.append(child_target) + break + return targets_root + + +def calculate_smart_step_into_variants(frame, start_line, end_line, base=0): + """ + Calculate smart step into variants for the given line range. + :param frame: + :type frame: :py:class:`types.FrameType` + :param start_line: + :param end_line: + :return: A list of call names from the first to the last. + :note: it's guaranteed that the offsets appear in order. + :raise: :py:class:`RuntimeError` if failed to parse the bytecode or if dis cannot be used. + """ + from .pydevd_bytecode_utils import _convert_target_to_variant + + variants = [] + code = frame.f_code + lasti = frame.f_lasti + + call_order_cache = {} + if DEBUG: + print("dis.dis:") + if IS_PY311_OR_GREATER: + dis.dis(code, show_caches=False) + else: + dis.dis(code) + + for target in _get_smart_step_into_targets(code): + variant = _convert_target_to_variant(target, start_line, end_line, call_order_cache, lasti, base) + if variant is None: + continue + variants.append(variant) + + return variants diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py index 40feb7675..6b6e97752 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_code_to_source.py @@ -15,7 +15,6 @@ class _Stack(object): - def __init__(self): self._contents = [] @@ -35,9 +34,8 @@ def pop(self): class _Token(object): - def __init__(self, i_line, instruction=None, tok=_SENTINEL, priority=0, after=None, end_of_line=False): - ''' + """ :param i_line: :param instruction: :param tok: @@ -45,18 +43,18 @@ def __init__(self, i_line, instruction=None, tok=_SENTINEL, priority=0, after=No :param after: :param end_of_line: Marker to signal only after all the other tokens have been written. - ''' + """ self.i_line = i_line if tok is not _SENTINEL: self.tok = tok else: if instruction is not None: if inspect.iscode(instruction.argval): - self.tok = '' + self.tok = "" else: self.tok = str(instruction.argval) else: - raise AssertionError('Either the tok or the instruction is needed.') + raise AssertionError("Either the tok or the instruction is needed.") self.instruction = instruction self.priority = priority self.end_of_line = end_of_line @@ -72,7 +70,7 @@ def mark_after(self, v): self._after_handler_tokens.add(v) else: - raise AssertionError('Unhandled: %s' % (v,)) + raise AssertionError("Unhandled: %s" % (v,)) def get_after_tokens(self): ret = self._after_tokens.copy() @@ -81,13 +79,12 @@ def get_after_tokens(self): return ret def __repr__(self): - return 'Token(%s, after: %s)' % (self.tok, self.get_after_tokens()) + return "Token(%s, after: %s)" % (self.tok, self.get_after_tokens()) __str__ = __repr__ class _Writer(object): - def __init__(self): self.line_to_contents = {} self.all_tokens = set() @@ -114,7 +111,6 @@ def write(self, line, token): class _BaseHandler(object): - def __init__(self, i_line, instruction, stack, writer, disassembler): self.i_line = i_line self.instruction = instruction @@ -149,13 +145,11 @@ def _register(cls): class _BasePushHandler(_BaseHandler): - def _handle(self): self.stack.push(self) class _BaseLoadHandler(_BasePushHandler): - def _handle(self): _BasePushHandler._handle(self) self.tokens = [_Token(self.i_line, self.instruction)] @@ -188,9 +182,10 @@ class _LoadFast(_BaseLoadHandler): @_register class _GetIter(_BaseHandler): - ''' + """ Implements TOS = iter(TOS). - ''' + """ + opname = "GET_ITER" iter_target = None @@ -202,11 +197,12 @@ def _handle(self): @_register class _ForIter(_BaseHandler): - ''' + """ TOS is an iterator. Call its __next__() method. If this yields a new value, push it on the stack (leaving the iterator below it). If the iterator indicates it is exhausted TOS is popped, and the byte code counter is incremented by delta. - ''' + """ + opname = "FOR_ITER" iter_in = None @@ -216,7 +212,7 @@ def _handle(self): self.stack.push(self) def store_in_name(self, store_name): - for_token = _Token(self.i_line, None, 'for ') + for_token = _Token(self.i_line, None, "for ") self.tokens.append(for_token) prev = for_token @@ -224,7 +220,7 @@ def store_in_name(self, store_name): self.tokens.append(t_name) prev = t_name - in_token = _Token(store_name.i_line, None, ' in ', after=prev) + in_token = _Token(store_name.i_line, None, " in ", after=prev) self.tokens.append(in_token) prev = in_token @@ -236,7 +232,7 @@ def store_in_name(self, store_name): prev = t self.tokens.extend(self.iter_in.tokens) - colon_token = _Token(self.i_line, None, ':', after=prev) + colon_token = _Token(self.i_line, None, ":", after=prev) self.tokens.append(colon_token) prev = for_token @@ -245,10 +241,10 @@ def store_in_name(self, store_name): @_register class _StoreName(_BaseHandler): - ''' + """ Implements name = TOS. namei is the index of name in the attribute co_names of the code object. The compiler tries to use STORE_FAST or STORE_GLOBAL if possible. - ''' + """ opname = "STORE_NAME" @@ -264,7 +260,7 @@ def _handle(self): line = min(line, t.i_line) t_name = _Token(line, self.instruction) - t_equal = _Token(line, None, '=', after=t_name) + t_equal = _Token(line, None, "=", after=t_name) self.tokens.append(t_name) self.tokens.append(t_equal) @@ -286,7 +282,7 @@ class _ReturnValue(_BaseHandler): def _handle(self): v = self.stack.pop() - return_token = _Token(self.i_line, None, 'return ', end_of_line=True) + return_token = _Token(self.i_line, None, "return ", end_of_line=True) self.tokens.append(return_token) for token in v.tokens: token.mark_after(return_token) @@ -324,7 +320,7 @@ def _handle(self): for t in name.tokens: self.tokens.append(t) - tok_open_parens = _Token(name.i_line, None, '(', after=name) + tok_open_parens = _Token(name.i_line, None, "(", after=name) self.tokens.append(tok_open_parens) prev = tok_open_parens @@ -337,11 +333,11 @@ def _handle(self): prev = arg if i > 0: - comma_token = _Token(prev.i_line, None, ',', after=prev) + comma_token = _Token(prev.i_line, None, ",", after=prev) self.tokens.append(comma_token) prev = comma_token - tok_close_parens = _Token(max_line, None, ')', after=prev) + tok_close_parens = _Token(max_line, None, ")", after=prev) self.tokens.append(tok_close_parens) self._write_tokens() @@ -380,10 +376,10 @@ def _handle(self): if self.instruction.argval & 0x01: default_node = stack.pop() - is_lambda = self.is_lambda = '' in [x.tok for x in self.qualified_name.tokens] + is_lambda = self.is_lambda = "" in [x.tok for x in self.qualified_name.tokens] if not is_lambda: - def_token = _Token(self.i_line, None, 'def ') + def_token = _Token(self.i_line, None, "def ") self.tokens.append(def_token) for token in self.qualified_name.tokens: @@ -392,20 +388,22 @@ def _handle(self): token.mark_after(def_token) prev = token - open_parens_token = _Token(self.i_line, None, '(', after=prev) + open_parens_token = _Token(self.i_line, None, "(", after=prev) self.tokens.append(open_parens_token) prev = open_parens_token code = self.code.instruction.argval if default_node: - defaults = ([_SENTINEL] * (len(code.co_varnames) - len(default_node.instruction.argval))) + list(default_node.instruction.argval) + defaults = ([_SENTINEL] * (len(code.co_varnames) - len(default_node.instruction.argval))) + list( + default_node.instruction.argval + ) else: defaults = [_SENTINEL] * len(code.co_varnames) for i, arg in enumerate(code.co_varnames): if i > 0: - comma_token = _Token(prev.i_line, None, ', ', after=prev) + comma_token = _Token(prev.i_line, None, ", ", after=prev) self.tokens.append(comma_token) prev = comma_token @@ -414,7 +412,7 @@ def _handle(self): default = defaults[i] if default is not _SENTINEL: - eq_token = _Token(default_node.i_line, None, '=', after=prev) + eq_token = _Token(default_node.i_line, None, "=", after=prev) self.tokens.append(eq_token) prev = eq_token @@ -422,7 +420,7 @@ def _handle(self): self.tokens.append(default_token) prev = default_token - tok_close_parens = _Token(prev.i_line, None, '):', after=prev) + tok_close_parens = _Token(prev.i_line, None, "):", after=prev) self.tokens.append(tok_close_parens) self._write_tokens() @@ -441,12 +439,10 @@ def _print_after_info(line_contents, stream=None): for token in line_contents: after_tokens = token.get_after_tokens() if after_tokens: - s = '%s after: %s\n' % ( - repr(token.tok), - ('"' + '", "'.join(t.tok for t in token.get_after_tokens()) + '"')) + s = "%s after: %s\n" % (repr(token.tok), ('"' + '", "'.join(t.tok for t in token.get_after_tokens()) + '"')) stream.write(s) else: - stream.write('%s (NO REQUISITES)' % repr(token.tok)) + stream.write("%s (NO REQUISITES)" % repr(token.tok)) def _compose_line_contents(line_contents, previous_line_tokens): @@ -495,13 +491,12 @@ def _compose_line_contents(line_contents, previous_line_tokens): stream = StringIO() _print_after_info(line_contents, stream) - pydev_log.critical('Error. After markers are not correct:\n%s', stream.getvalue()) + pydev_log.critical("Error. After markers are not correct:\n%s", stream.getvalue()) break - return ''.join(lst) + return "".join(lst) class _PyCodeToSource(object): - def __init__(self, co, memo=None): if memo is None: memo = {} @@ -542,7 +537,7 @@ def build_line_to_contents(self): def merge_code(self, code): if DEBUG: - print('merge code ----') + print("merge code ----") # for d in dir(code): # if not d.startswith('_'): # print(d, getattr(code, d)) @@ -552,7 +547,7 @@ def merge_code(self, code): lines.append(line) self.writer.get_line(line).extend(contents) if DEBUG: - print('end merge code ----') + print("end merge code ----") return lines def disassemble(self): @@ -560,14 +555,14 @@ def disassemble(self): line_to_contents = self.build_line_to_contents() stream = StringIO() last_line = 0 - indent = '' + indent = "" previous_line_tokens = set() for i_line, contents in sorted(line_to_contents.items()): while last_line < i_line - 1: if show_lines: - stream.write(u"%s.\n" % (last_line + 1,)) + stream.write("%s.\n" % (last_line + 1,)) else: - stream.write(u"\n") + stream.write("\n") last_line += 1 line_contents = [] @@ -575,24 +570,24 @@ def disassemble(self): for part in contents: if part is INDENT_MARKER: if DEBUG: - print('found indent', i_line) - indent += ' ' + print("found indent", i_line) + indent += " " continue if part is DEDENT_MARKER: if DEBUG: - print('found dedent', i_line) + print("found dedent", i_line) dedents_found += 1 continue line_contents.append(part) s = indent + _compose_line_contents(line_contents, previous_line_tokens) if show_lines: - stream.write(u"%s. %s\n" % (i_line, s)) + stream.write("%s. %s\n" % (i_line, s)) else: - stream.write(u"%s\n" % s) + stream.write("%s\n" % s) if dedents_found: - indent = indent[:-(4 * dedents_found)] + indent = indent[: -(4 * dedents_found)] last_line = i_line return stream.getvalue() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py index 86744d76f..2958565ae 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_collect_bytecode_info.py @@ -4,22 +4,20 @@ from collections import namedtuple from _pydev_bundle import pydev_log -from opcode import (EXTENDED_ARG, HAVE_ARGUMENT, cmp_op, hascompare, hasconst, - hasfree, hasjrel, haslocal, hasname, opname) +from opcode import EXTENDED_ARG, HAVE_ARGUMENT, cmp_op, hascompare, hasconst, hasfree, hasjrel, haslocal, hasname, opname from io import StringIO class TryExceptInfo(object): - def __init__(self, try_line, ignore=False): - ''' + """ :param try_line: :param ignore: Usually we should ignore any block that's not a try..except (this can happen for finally blocks, with statements, etc, for which we create temporary entries). - ''' + """ self.try_line = try_line self.ignore = ignore self.except_line = -1 @@ -38,29 +36,28 @@ def is_line_in_except_block(self, line): def __str__(self): lst = [ - '{try:', + "{try:", str(self.try_line), - ' except ', + " except ", str(self.except_line), - ' end block ', + " end block ", str(self.except_end_line), ] if self.raise_lines_in_except: - lst.append(' raises: %s' % (', '.join(str(x) for x in self.raise_lines_in_except),)) + lst.append(" raises: %s" % (", ".join(str(x) for x in self.raise_lines_in_except),)) - lst.append('}') - return ''.join(lst) + lst.append("}") + return "".join(lst) __repr__ = __str__ class ReturnInfo(object): - def __init__(self, return_line): self.return_line = return_line def __str__(self): - return '{return: %s}' % (self.return_line,) + return "{return: %s}" % (self.return_line,) __repr__ = __str__ @@ -75,15 +72,14 @@ def _get_line(op_offset_to_line, op_offset, firstlineno, search=False): return ret else: op_offset -= 1 - raise AssertionError('Unable to find line for offset: %s.Info: %s' % ( - op_offset_original, op_offset_to_line)) + raise AssertionError("Unable to find line for offset: %s.Info: %s" % (op_offset_original, op_offset_to_line)) def debug(s): pass -_Instruction = namedtuple('_Instruction', 'opname, opcode, starts_line, argval, is_jump_target, offset, argrepr') +_Instruction = namedtuple("_Instruction", "opname, opcode, starts_line, argval, is_jump_target, offset, argrepr") def _iter_as_bytecode_as_instructions_py2(co): @@ -107,7 +103,15 @@ def _iter_as_bytecode_as_instructions_py2(co): i = i + 1 if op < HAVE_ARGUMENT: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), None, is_jump_target, initial_bytecode_offset, '') + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + None, + is_jump_target, + initial_bytecode_offset, + "", + ) else: oparg = ord(code[i]) + ord(code[i + 1]) * 256 + extended_arg @@ -118,22 +122,78 @@ def _iter_as_bytecode_as_instructions_py2(co): extended_arg = oparg * 65536 if op in hasconst: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), co.co_consts[oparg], is_jump_target, initial_bytecode_offset, repr(co.co_consts[oparg])) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + co.co_consts[oparg], + is_jump_target, + initial_bytecode_offset, + repr(co.co_consts[oparg]), + ) elif op in hasname: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), co.co_names[oparg], is_jump_target, initial_bytecode_offset, str(co.co_names[oparg])) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + co.co_names[oparg], + is_jump_target, + initial_bytecode_offset, + str(co.co_names[oparg]), + ) elif op in hasjrel: argval = i + oparg - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), argval, is_jump_target, initial_bytecode_offset, "to " + repr(argval)) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + argval, + is_jump_target, + initial_bytecode_offset, + "to " + repr(argval), + ) elif op in haslocal: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), co.co_varnames[oparg], is_jump_target, initial_bytecode_offset, str(co.co_varnames[oparg])) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + co.co_varnames[oparg], + is_jump_target, + initial_bytecode_offset, + str(co.co_varnames[oparg]), + ) elif op in hascompare: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), cmp_op[oparg], is_jump_target, initial_bytecode_offset, cmp_op[oparg]) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + cmp_op[oparg], + is_jump_target, + initial_bytecode_offset, + cmp_op[oparg], + ) elif op in hasfree: if free is None: free = co.co_cellvars + co.co_freevars - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), free[oparg], is_jump_target, initial_bytecode_offset, str(free[oparg])) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + free[oparg], + is_jump_target, + initial_bytecode_offset, + str(free[oparg]), + ) else: - yield _Instruction(curr_op_name, op, _get_line(op_offset_to_line, initial_bytecode_offset, 0), oparg, is_jump_target, initial_bytecode_offset, str(oparg)) + yield _Instruction( + curr_op_name, + op, + _get_line(op_offset_to_line, initial_bytecode_offset, 0), + oparg, + is_jump_target, + initial_bytecode_offset, + str(oparg), + ) def iter_instructions(co): @@ -153,7 +213,7 @@ def iter_instructions(co): def collect_return_info(co, use_func_first_line=False): - if not hasattr(co, 'co_lines') and not hasattr(co, 'co_lnotab'): + if not hasattr(co, "co_lines") and not hasattr(co, "co_lnotab"): return [] if use_func_first_line: @@ -165,7 +225,7 @@ def collect_return_info(co, use_func_first_line=False): op_offset_to_line = dict(dis.findlinestarts(co)) for instruction in iter_instructions(co): curr_op_name = instruction.opname - if curr_op_name == 'RETURN_VALUE': + if curr_op_name in ("RETURN_VALUE", "RETURN_CONST"): lst.append(ReturnInfo(_get_line(op_offset_to_line, instruction.offset, firstlineno, search=True))) return lst @@ -174,35 +234,36 @@ def collect_return_info(co, use_func_first_line=False): if sys.version_info[:2] <= (3, 9): class _TargetInfo(object): - def __init__(self, except_end_instruction, jump_if_not_exc_instruction=None): self.except_end_instruction = except_end_instruction self.jump_if_not_exc_instruction = jump_if_not_exc_instruction def __str__(self): - msg = ['_TargetInfo('] + msg = ["_TargetInfo("] msg.append(self.except_end_instruction.opname) if self.jump_if_not_exc_instruction: - msg.append(' - ') + msg.append(" - ") msg.append(self.jump_if_not_exc_instruction.opname) - msg.append('(') + msg.append("(") msg.append(str(self.jump_if_not_exc_instruction.argval)) - msg.append(')') - msg.append(')') - return ''.join(msg) + msg.append(")") + msg.append(")") + return "".join(msg) def _get_except_target_info(instructions, exception_end_instruction_index, offset_to_instruction_idx): - next_3 = [j_instruction.opname for j_instruction in instructions[exception_end_instruction_index:exception_end_instruction_index + 3]] + next_3 = [ + j_instruction.opname for j_instruction in instructions[exception_end_instruction_index : exception_end_instruction_index + 3] + ] # print('next_3:', [(j_instruction.opname, j_instruction.argval) for j_instruction in instructions[exception_end_instruction_index:exception_end_instruction_index + 3]]) - if next_3 == ['POP_TOP', 'POP_TOP', 'POP_TOP']: # try..except without checking exception. + if next_3 == ["POP_TOP", "POP_TOP", "POP_TOP"]: # try..except without checking exception. try: jump_instruction = instructions[exception_end_instruction_index - 1] - if jump_instruction.opname not in ('JUMP_FORWARD', 'JUMP_ABSOLUTE'): + if jump_instruction.opname not in ("JUMP_FORWARD", "JUMP_ABSOLUTE"): return None except IndexError: pass - if jump_instruction.opname == 'JUMP_ABSOLUTE': + if jump_instruction.opname == "JUMP_ABSOLUTE": # On latest versions of Python 3 the interpreter has a go-backwards step, # used to show the initial line of a for/while, etc (which is this # JUMP_ABSOLUTE)... we're not really interested in it, but rather on where @@ -211,7 +272,7 @@ def _get_except_target_info(instructions, exception_end_instruction_index, offse idx = offset_to_instruction_idx[except_end_instruction.argval] # Search for the POP_EXCEPT which should be at the end of the block. for pop_except_instruction in reversed(instructions[:idx]): - if pop_except_instruction.opname == 'POP_EXCEPT': + if pop_except_instruction.opname == "POP_EXCEPT": except_end_instruction = pop_except_instruction return _TargetInfo(except_end_instruction) else: @@ -226,25 +287,25 @@ def _get_except_target_info(instructions, exception_end_instruction_index, offse # block finishes). except_end_instruction = instructions[i - 1] except: - pydev_log.critical('Error when computing try..except block end.') + pydev_log.critical("Error when computing try..except block end.") return None return _TargetInfo(except_end_instruction) - elif next_3 and next_3[0] == 'DUP_TOP': # try..except AssertionError. - iter_in = instructions[exception_end_instruction_index + 1:] + elif next_3 and next_3[0] == "DUP_TOP": # try..except AssertionError. + iter_in = instructions[exception_end_instruction_index + 1 :] for j, jump_if_not_exc_instruction in enumerate(iter_in): - if jump_if_not_exc_instruction.opname == 'JUMP_IF_NOT_EXC_MATCH': + if jump_if_not_exc_instruction.opname == "JUMP_IF_NOT_EXC_MATCH": # Python 3.9 except_end_instruction = instructions[offset_to_instruction_idx[jump_if_not_exc_instruction.argval]] return _TargetInfo(except_end_instruction, jump_if_not_exc_instruction) - elif jump_if_not_exc_instruction.opname == 'COMPARE_OP' and jump_if_not_exc_instruction.argval == 'exception match': + elif jump_if_not_exc_instruction.opname == "COMPARE_OP" and jump_if_not_exc_instruction.argval == "exception match": # Python 3.8 and before try: next_instruction = iter_in[j + 1] except: continue - if next_instruction.opname == 'POP_JUMP_IF_FALSE': + if next_instruction.opname == "POP_JUMP_IF_FALSE": except_end_instruction = instructions[offset_to_instruction_idx[next_instruction.argval]] return _TargetInfo(except_end_instruction, next_instruction) else: @@ -256,7 +317,7 @@ def _get_except_target_info(instructions, exception_end_instruction_index, offse def collect_try_except_info(co, use_func_first_line=False): # We no longer have 'END_FINALLY', so, we need to do things differently in Python 3.9 - if not hasattr(co, 'co_lines') and not hasattr(co, 'co_lnotab'): + if not hasattr(co, "co_lines") and not hasattr(co, "co_lnotab"): return [] if use_func_first_line: @@ -277,11 +338,11 @@ def collect_try_except_info(co, use_func_first_line=False): for i, instruction in enumerate(instructions): curr_op_name = instruction.opname - if curr_op_name in ('SETUP_FINALLY', 'SETUP_EXCEPT'): # SETUP_EXCEPT before Python 3.8, SETUP_FINALLY Python 3.8 onwards. + if curr_op_name in ("SETUP_FINALLY", "SETUP_EXCEPT"): # SETUP_EXCEPT before Python 3.8, SETUP_FINALLY Python 3.8 onwards. exception_end_instruction_index = offset_to_instruction_idx[instruction.argval] jump_instruction = instructions[exception_end_instruction_index - 1] - if jump_instruction.opname not in ('JUMP_FORWARD', 'JUMP_ABSOLUTE'): + if jump_instruction.opname not in ("JUMP_FORWARD", "JUMP_ABSOLUTE"): continue except_end_instruction = None @@ -304,66 +365,64 @@ def collect_try_except_info(co, use_func_first_line=False): if except_end_instruction is not None: try_except_info = TryExceptInfo( - _get_line(op_offset_to_line, instruction.offset, firstlineno, search=True), - ignore=False + _get_line(op_offset_to_line, instruction.offset, firstlineno, search=True), ignore=False ) try_except_info.except_bytecode_offset = instruction.argval try_except_info.except_line = _get_line( - op_offset_to_line, - try_except_info.except_bytecode_offset, - firstlineno, - search=True + op_offset_to_line, try_except_info.except_bytecode_offset, firstlineno, search=True ) try_except_info.except_end_bytecode_offset = except_end_instruction.offset try_except_info.except_end_line = _get_line(op_offset_to_line, except_end_instruction.offset, firstlineno, search=True) try_except_info_lst.append(try_except_info) - for raise_instruction in instructions[i:offset_to_instruction_idx[try_except_info.except_end_bytecode_offset]]: - if raise_instruction.opname == 'RAISE_VARARGS': + for raise_instruction in instructions[i : offset_to_instruction_idx[try_except_info.except_end_bytecode_offset]]: + if raise_instruction.opname == "RAISE_VARARGS": if raise_instruction.argval == 0: try_except_info.raise_lines_in_except.append( - _get_line(op_offset_to_line, raise_instruction.offset, firstlineno, search=True)) + _get_line(op_offset_to_line, raise_instruction.offset, firstlineno, search=True) + ) return try_except_info_lst elif sys.version_info[:2] == (3, 10): class _TargetInfo(object): - def __init__(self, except_end_instruction, jump_if_not_exc_instruction=None): self.except_end_instruction = except_end_instruction self.jump_if_not_exc_instruction = jump_if_not_exc_instruction def __str__(self): - msg = ['_TargetInfo('] + msg = ["_TargetInfo("] msg.append(self.except_end_instruction.opname) if self.jump_if_not_exc_instruction: - msg.append(' - ') + msg.append(" - ") msg.append(self.jump_if_not_exc_instruction.opname) - msg.append('(') + msg.append("(") msg.append(str(self.jump_if_not_exc_instruction.argval)) - msg.append(')') - msg.append(')') - return ''.join(msg) + msg.append(")") + msg.append(")") + return "".join(msg) def _get_except_target_info(instructions, exception_end_instruction_index, offset_to_instruction_idx): - next_3 = [j_instruction.opname for j_instruction in instructions[exception_end_instruction_index:exception_end_instruction_index + 3]] + next_3 = [ + j_instruction.opname for j_instruction in instructions[exception_end_instruction_index : exception_end_instruction_index + 3] + ] # print('next_3:', [(j_instruction.opname, j_instruction.argval) for j_instruction in instructions[exception_end_instruction_index:exception_end_instruction_index + 3]]) - if next_3 == ['POP_TOP', 'POP_TOP', 'POP_TOP']: # try..except without checking exception. + if next_3 == ["POP_TOP", "POP_TOP", "POP_TOP"]: # try..except without checking exception. # Previously there was a jump which was able to point where the exception would end. This # is no longer true, now a bare except doesn't really have any indication in the bytecode # where the end would be expected if the exception wasn't raised, so, we just blindly # search for a POP_EXCEPT from the current position. - for pop_except_instruction in instructions[exception_end_instruction_index + 3:]: - if pop_except_instruction.opname == 'POP_EXCEPT': + for pop_except_instruction in instructions[exception_end_instruction_index + 3 :]: + if pop_except_instruction.opname == "POP_EXCEPT": except_end_instruction = pop_except_instruction return _TargetInfo(except_end_instruction) - elif next_3 and next_3[0] == 'DUP_TOP': # try..except AssertionError. - iter_in = instructions[exception_end_instruction_index + 1:] + elif next_3 and next_3[0] == "DUP_TOP": # try..except AssertionError. + iter_in = instructions[exception_end_instruction_index + 1 :] for jump_if_not_exc_instruction in iter_in: - if jump_if_not_exc_instruction.opname == 'JUMP_IF_NOT_EXC_MATCH': + if jump_if_not_exc_instruction.opname == "JUMP_IF_NOT_EXC_MATCH": # Python 3.9 except_end_instruction = instructions[offset_to_instruction_idx[jump_if_not_exc_instruction.argval]] return _TargetInfo(except_end_instruction, jump_if_not_exc_instruction) @@ -376,7 +435,7 @@ def _get_except_target_info(instructions, exception_end_instruction_index, offse def collect_try_except_info(co, use_func_first_line=False): # We no longer have 'END_FINALLY', so, we need to do things differently in Python 3.9 - if not hasattr(co, 'co_lines') and not hasattr(co, 'co_lnotab'): + if not hasattr(co, "co_lines") and not hasattr(co, "co_lnotab"): return [] if use_func_first_line: @@ -397,11 +456,11 @@ def collect_try_except_info(co, use_func_first_line=False): for i, instruction in enumerate(instructions): curr_op_name = instruction.opname - if curr_op_name == 'SETUP_FINALLY': + if curr_op_name == "SETUP_FINALLY": exception_end_instruction_index = offset_to_instruction_idx[instruction.argval] jump_instruction = instructions[exception_end_instruction_index] - if jump_instruction.opname != 'DUP_TOP': + if jump_instruction.opname != "DUP_TOP": continue except_end_instruction = None @@ -424,15 +483,11 @@ def collect_try_except_info(co, use_func_first_line=False): if except_end_instruction is not None: try_except_info = TryExceptInfo( - _get_line(op_offset_to_line, instruction.offset, firstlineno, search=True), - ignore=False + _get_line(op_offset_to_line, instruction.offset, firstlineno, search=True), ignore=False ) try_except_info.except_bytecode_offset = instruction.argval try_except_info.except_line = _get_line( - op_offset_to_line, - try_except_info.except_bytecode_offset, - firstlineno, - search=True + op_offset_to_line, try_except_info.except_bytecode_offset, firstlineno, search=True ) try_except_info.except_end_bytecode_offset = except_end_instruction.offset @@ -444,7 +499,7 @@ def collect_try_except_info(co, use_func_first_line=False): except_end_line = -1 start_i = offset_to_instruction_idx[try_except_info.except_bytecode_offset] end_i = offset_to_instruction_idx[except_end_instruction.offset] - for instruction in instructions[start_i: end_i + 1]: + for instruction in instructions[start_i : end_i + 1]: found_at_line = op_offset_to_line.get(instruction.offset) if found_at_line is not None and found_at_line > except_end_line: except_end_line = found_at_line @@ -452,29 +507,30 @@ def collect_try_except_info(co, use_func_first_line=False): try_except_info_lst.append(try_except_info) - for raise_instruction in instructions[i:offset_to_instruction_idx[try_except_info.except_end_bytecode_offset]]: - if raise_instruction.opname == 'RAISE_VARARGS': + for raise_instruction in instructions[i : offset_to_instruction_idx[try_except_info.except_end_bytecode_offset]]: + if raise_instruction.opname == "RAISE_VARARGS": if raise_instruction.argval == 0: try_except_info.raise_lines_in_except.append( - _get_line(op_offset_to_line, raise_instruction.offset, firstlineno, search=True)) + _get_line(op_offset_to_line, raise_instruction.offset, firstlineno, search=True) + ) return try_except_info_lst elif sys.version_info[:2] >= (3, 11): def collect_try_except_info(co, use_func_first_line=False): - ''' + """ Note: if the filename is available and we can get the source, `collect_try_except_info_from_source` is preferred (this is kept as a fallback for cases where sources aren't available). - ''' + """ return [] + import ast as ast_module class _Visitor(ast_module.NodeVisitor): - def __init__(self): self.try_except_infos = [] self._stack = [] @@ -482,7 +538,7 @@ def __init__(self): self.max_line = -1 def generic_visit(self, node): - if hasattr(node, 'lineno'): + if hasattr(node, "lineno"): if node.lineno > self.max_line: self.max_line = node.lineno return ast_module.NodeVisitor.generic_visit(self, node) @@ -505,7 +561,7 @@ def visit_ExceptHandler(self, node): info.except_line = node.lineno self._in_except_stack.append(info) self.generic_visit(node) - if hasattr(node, 'end_lineno'): + if hasattr(node, "end_lineno"): info.except_end_line = node.end_lineno else: info.except_end_line = self.max_line @@ -515,26 +571,26 @@ def visit_ExceptHandler(self, node): def visit_Raise(self, node): for info in self._in_except_stack: - if node.exc is None: - info.raise_lines_in_except.append(node.lineno) + if node.exc is None: + info.raise_lines_in_except.append(node.lineno) self.generic_visit(node) else: def visit_Raise(self, node): for info in self._in_except_stack: - if node.type is None and node.tback is None: - info.raise_lines_in_except.append(node.lineno) + if node.type is None and node.tback is None: + info.raise_lines_in_except.append(node.lineno) self.generic_visit(node) def collect_try_except_info_from_source(filename): - with open(filename, 'rb') as stream: + with open(filename, "rb") as stream: contents = stream.read() return collect_try_except_info_from_contents(contents, filename) -def collect_try_except_info_from_contents(contents, filename=''): +def collect_try_except_info_from_contents(contents, filename=""): ast = ast_module.parse(contents, filename) visitor = _Visitor() visitor.visit(ast) @@ -546,12 +602,16 @@ def collect_try_except_info_from_contents(contents, filename=''): class _MsgPart(object): - def __init__(self, line, tok): assert line >= 0 self.line = line self.tok = tok + def __str__(self) -> str: + return "_MsgPart(line: %s tok: %s)" % (self.line, self.tok) + + __repr__ = __str__ + @classmethod def add_to_line_to_contents(cls, obj, line_to_contents, line=None): if isinstance(obj, (list, tuple)): @@ -580,7 +640,6 @@ def add_to_line_to_contents(cls, obj, line_to_contents, line=None): class _Disassembler(object): - def __init__(self, co, firstlineno, level=0): self.co = co self.firstlineno = firstlineno @@ -611,7 +670,7 @@ def min_line(self, *args): elif isinstance(arg, _MsgPart): m = min(m, arg.line) - elif hasattr(arg, 'offset'): + elif hasattr(arg, "offset"): m = min(m, self.op_offset_to_line[arg.offset]) return m @@ -624,23 +683,23 @@ def max_line(self, *args): elif isinstance(arg, _MsgPart): m = max(m, arg.line) - elif hasattr(arg, 'offset'): + elif hasattr(arg, "offset"): m = max(m, self.op_offset_to_line[arg.offset]) return m def _lookahead(self): - ''' + """ This handles and converts some common constructs from bytecode to actual source code. It may change the list of instructions. - ''' + """ msg = self._create_msg_part found = [] fullrepr = None # Collect all the load instructions for next_instruction in self.instructions: - if next_instruction.opname in ('LOAD_GLOBAL', 'LOAD_FAST', 'LOAD_CONST', 'LOAD_NAME'): + if next_instruction.opname in ("LOAD_GLOBAL", "LOAD_FAST", "LOAD_CONST", "LOAD_NAME"): found.append(next_instruction) else: break @@ -648,7 +707,7 @@ def _lookahead(self): if not found: return None - if next_instruction.opname == 'LOAD_ATTR': + if next_instruction.opname == "LOAD_ATTR": prev_instruction = found[-1] # Remove the current LOAD_ATTR assert self.instructions.pop(len(found)) is next_instruction @@ -661,15 +720,11 @@ def _lookahead(self): prev_instruction.argval, False, # prev_instruction.is_jump_target, prev_instruction.offset, - ( - msg(prev_instruction), - msg(prev_instruction, '.'), - msg(next_instruction) - ), + (msg(prev_instruction), msg(prev_instruction, "."), msg(next_instruction)), ) return RESTART_FROM_LOOKAHEAD - if next_instruction.opname in ('CALL_FUNCTION', 'PRECALL'): + if next_instruction.opname in ("CALL_FUNCTION", "PRECALL", "CALL"): if len(found) == next_instruction.argval + 1: force_restart = False delta = 0 @@ -681,7 +736,7 @@ def _lookahead(self): return None # This is odd del_upto = delta + next_instruction.argval + 2 # +2 = NAME / CALL_FUNCTION - if next_instruction.opname == 'PRECALL': + if next_instruction.opname == "PRECALL": del_upto += 1 # Also remove the CALL right after the PRECALL. del self.instructions[delta:del_upto] @@ -690,31 +745,33 @@ def _lookahead(self): args = list(found) fullrepr = [ msg(call_func), - msg(call_func, '('), + msg(call_func, "("), ] prev = call_func for i, arg in enumerate(args): if i > 0: - fullrepr.append(msg(prev, ', ')) + fullrepr.append(msg(prev, ", ")) prev = arg fullrepr.append(msg(arg)) - fullrepr.append(msg(prev, ')')) + fullrepr.append(msg(prev, ")")) if force_restart: - self.instructions.insert(delta, _Instruction( - call_func.opname, - call_func.opcode, - call_func.starts_line, - call_func.argval, - False, # call_func.is_jump_target, - call_func.offset, - tuple(fullrepr), - )) + self.instructions.insert( + delta, + _Instruction( + call_func.opname, + call_func.opcode, + call_func.starts_line, + call_func.argval, + False, # call_func.is_jump_target, + call_func.offset, + tuple(fullrepr), + ), + ) return RESTART_FROM_LOOKAHEAD - elif next_instruction.opname == 'BUILD_TUPLE': - + elif next_instruction.opname == "BUILD_TUPLE": if len(found) == next_instruction.argval: force_restart = False delta = 0 @@ -725,7 +782,7 @@ def _lookahead(self): else: return None # This is odd - del self.instructions[delta:delta + next_instruction.argval + 1] # +1 = BUILD_TUPLE + del self.instructions[delta : delta + next_instruction.argval + 1] # +1 = BUILD_TUPLE found = iter(found[delta:]) @@ -737,44 +794,47 @@ def _lookahead(self): prev = first_instruction fullrepr = [] - fullrepr.append(msg(prev, '(')) + fullrepr.append(msg(prev, "(")) for i, arg in enumerate(args): if i > 0: - fullrepr.append(msg(prev, ', ')) + fullrepr.append(msg(prev, ", ")) prev = arg fullrepr.append(msg(arg)) - fullrepr.append(msg(prev, ')')) + fullrepr.append(msg(prev, ")")) if force_restart: - self.instructions.insert(delta, _Instruction( - first_instruction.opname, - first_instruction.opcode, - first_instruction.starts_line, - first_instruction.argval, - False, # first_instruction.is_jump_target, - first_instruction.offset, - tuple(fullrepr), - )) + self.instructions.insert( + delta, + _Instruction( + first_instruction.opname, + first_instruction.opcode, + first_instruction.starts_line, + first_instruction.argval, + False, # first_instruction.is_jump_target, + first_instruction.offset, + tuple(fullrepr), + ), + ) return RESTART_FROM_LOOKAHEAD if fullrepr is not None and self.instructions: - if self.instructions[0].opname == 'POP_TOP': + if self.instructions[0].opname == "POP_TOP": self.instructions.pop(0) - if self.instructions[0].opname in ('STORE_FAST', 'STORE_NAME'): + if self.instructions[0].opname in ("STORE_FAST", "STORE_NAME"): next_instruction = self.instructions.pop(0) - return msg(next_instruction), msg(next_instruction, ' = '), fullrepr + return msg(next_instruction), msg(next_instruction, " = "), fullrepr - if self.instructions[0].opname == 'RETURN_VALUE': + if self.instructions[0].opname == "RETURN_VALUE": next_instruction = self.instructions.pop(0) - return msg(next_instruction, 'return ', line=self.min_line(next_instruction, fullrepr)), fullrepr + return msg(next_instruction, "return ", line=self.min_line(next_instruction, fullrepr)), fullrepr return fullrepr def _decorate_jump_target(self, instruction, instruction_repr): if instruction.is_jump_target: - return ('|', str(instruction.offset), '|', instruction_repr) + return ("|", str(instruction.offset), "|", instruction_repr) return instruction_repr @@ -784,10 +844,9 @@ def _create_msg_part(self, instruction, tok=None, line=None): line = self.op_offset_to_line[instruction.offset] argrepr = instruction.argrepr - if isinstance(argrepr, str) and argrepr.startswith('NULL + '): + if isinstance(argrepr, str) and argrepr.startswith("NULL + "): argrepr = argrepr[7:] - return _MsgPart( - line, tok if tok is not None else dec(instruction, argrepr)) + return _MsgPart(line, tok if tok is not None else dec(instruction, argrepr)) def _next_instruction_to_str(self, line_to_contents): # indent = '' @@ -804,51 +863,55 @@ def _next_instruction_to_str(self, line_to_contents): instruction = self.instructions.pop(0) - if instruction.opname in 'RESUME': + if instruction.opname in ("RESUME", "NULL"): return None - if instruction.opname in ('LOAD_GLOBAL', 'LOAD_FAST', 'LOAD_CONST', 'LOAD_NAME'): + if instruction.opname == "RETURN_CONST": + return (msg(instruction, "return ", line=self.min_line(instruction)), msg(instruction)) + + if instruction.opname in ("LOAD_GLOBAL", "LOAD_FAST", "LOAD_CONST", "LOAD_NAME"): next_instruction = self.instructions[0] - if next_instruction.opname in ('STORE_FAST', 'STORE_NAME'): + if next_instruction.opname in ("STORE_FAST", "STORE_NAME"): self.instructions.pop(0) - return ( - msg(next_instruction), - msg(next_instruction, ' = '), - msg(instruction)) + return (msg(next_instruction), msg(next_instruction, " = "), msg(instruction)) - if next_instruction.opname == 'RETURN_VALUE': + if next_instruction.opname == "RETURN_VALUE": self.instructions.pop(0) - return (msg(instruction, 'return ', line=self.min_line(instruction)), msg(instruction)) + return (msg(instruction, "return ", line=self.min_line(instruction)), msg(instruction)) - if next_instruction.opname == 'RAISE_VARARGS' and next_instruction.argval == 1: + if next_instruction.opname == "RAISE_VARARGS" and next_instruction.argval == 1: self.instructions.pop(0) - return (msg(instruction, 'raise ', line=self.min_line(instruction)), msg(instruction)) + return (msg(instruction, "raise ", line=self.min_line(instruction)), msg(instruction)) - if instruction.opname == 'LOAD_CONST': + if instruction.opname == "LOAD_CONST": if inspect.iscode(instruction.argval): - - code_line_to_contents = _Disassembler( - instruction.argval, self.firstlineno, self.level + 1 - ).build_line_to_contents() + code_line_to_contents = _Disassembler(instruction.argval, self.firstlineno, self.level + 1).build_line_to_contents() for contents in code_line_to_contents.values(): - contents.insert(0, ' ') + contents.insert(0, " ") for line, contents in code_line_to_contents.items(): line_to_contents.setdefault(line, []).extend(contents) - return msg(instruction, 'LOAD_CONST(code)') + return msg(instruction, "LOAD_CONST(code)") - if instruction.opname == 'RAISE_VARARGS': + if instruction.opname == "RAISE_VARARGS": if instruction.argval == 0: - return msg(instruction, 'raise') + return msg(instruction, "raise") - if instruction.opname == 'SETUP_FINALLY': - return msg(instruction, ('try(', instruction.argrepr, '):')) + if instruction.opname == "SETUP_FINALLY": + return msg(instruction, ("try(", instruction.argrepr, "):")) if instruction.argrepr: - return msg(instruction, (instruction.opname, '(', instruction.argrepr, ')')) + return msg(instruction, (instruction.opname, "(", instruction.argrepr, ")")) if instruction.argval: - return msg(instruction, '%s{%s}' % (instruction.opname, instruction.argval,)) + return msg( + instruction, + "%s{%s}" + % ( + instruction.opname, + instruction.argval, + ), + ) return msg(instruction, instruction.opname) @@ -882,22 +945,22 @@ def disassemble(self): for line, contents in sorted(line_to_contents.items()): while last_line < line - 1: if show_lines: - stream.write('%s.\n' % (last_line + 1,)) + stream.write("%s.\n" % (last_line + 1,)) else: - stream.write('\n') + stream.write("\n") last_line += 1 if show_lines: - stream.write('%s. ' % (line,)) + stream.write("%s. " % (line,)) for i, content in enumerate(contents): if content == SEPARATOR: if i != len(contents) - 1: - stream.write(', ') + stream.write(", ") else: stream.write(content) - stream.write('\n') + stream.write("\n") last_line = line @@ -905,7 +968,7 @@ def disassemble(self): def code_to_bytecode_representation(co, use_func_first_line=False): - ''' + """ A simple disassemble of bytecode. It does not attempt to provide the full Python source code, rather, it provides a low-level @@ -914,7 +977,7 @@ def code_to_bytecode_representation(co, use_func_first_line=False): Note that it does show jump locations/targets and converts some common bytecode constructs to Python code to make it a bit easier to understand. - ''' + """ # Reference for bytecodes: # https://docs.python.org/3/library/dis.html if use_func_first_line: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py index b9ac9053e..b8a3a043f 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm.py @@ -1,4 +1,4 @@ -''' pydevd - a debugging daemon +""" pydevd - a debugging daemon This is the daemon you launch for python remote debugging. Protocol: @@ -61,24 +61,38 @@ * JAVA - remote debugger, the java end * PYDB - pydevd, the python end -''' +""" import linecache import os from _pydev_bundle.pydev_imports import _queue -from _pydev_bundle._pydev_saved_modules import time -from _pydev_bundle._pydev_saved_modules import threading +from _pydev_bundle._pydev_saved_modules import time, ThreadingEvent from _pydev_bundle._pydev_saved_modules import socket as socket_module -from _pydevd_bundle.pydevd_constants import (DebugInfoHolder, IS_WINDOWS, IS_JYTHON, IS_WASM, - IS_PY36_OR_GREATER, STATE_RUN, ASYNC_EVAL_TIMEOUT_SEC, - get_global_debugger, GetGlobalDebugger, set_global_debugger, # Keep for backward compatibility @UnusedImport - silence_warnings_decorator, filter_all_warnings, IS_PY311_OR_GREATER) +from _pydevd_bundle.pydevd_constants import ( + DebugInfoHolder, + IS_WINDOWS, + IS_JYTHON, + IS_WASM, + IS_PY36_OR_GREATER, + STATE_RUN, + ASYNC_EVAL_TIMEOUT_SEC, + get_global_debugger, + GetGlobalDebugger, + set_global_debugger, # Keep for backward compatibility @UnusedImport + silence_warnings_decorator, + filter_all_warnings, + IS_PY311_OR_GREATER, +) from _pydev_bundle.pydev_override import overrides import weakref from _pydev_bundle._pydev_completer import extract_token_and_qualifier -from _pydevd_bundle._debug_adapter.pydevd_schema import VariablesResponseBody, \ - SetVariableResponseBody, StepInTarget, StepInTargetsResponseBody +from _pydevd_bundle._debug_adapter.pydevd_schema import ( + VariablesResponseBody, + SetVariableResponseBody, + StepInTarget, + StepInTargetsResponseBody, +) from _pydevd_bundle._debug_adapter import pydevd_base_schema, pydevd_schema from _pydevd_bundle.pydevd_net_command import NetCommand from _pydevd_bundle.pydevd_xml import ExceptionOnEvaluate @@ -97,8 +111,16 @@ from _pydevd_bundle import pydevd_vm_type import sys import traceback -from _pydevd_bundle.pydevd_utils import quote_smart as quote, compare_object_attrs_key, \ - notify_about_gevent_if_needed, isinstance_checked, ScopeRequest, getattr_checked, Timer +from _pydevd_bundle.pydevd_utils import ( + quote_smart as quote, + compare_object_attrs_key, + notify_about_gevent_if_needed, + isinstance_checked, + ScopeRequest, + getattr_checked, + Timer, + is_current_thread_main_thread, +) from _pydev_bundle import pydev_log, fsnotify from _pydev_bundle.pydev_log import exception as pydev_log_exception from _pydev_bundle import _pydev_completer @@ -112,8 +134,9 @@ from _pydevd_bundle.pydevd_comm_constants import * # @UnusedWildImport # Socket import aliases: -AF_INET, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = ( +AF_INET, AF_INET6, SOCK_STREAM, SHUT_WR, SOL_SOCKET, IPPROTO_TCP, socket = ( socket_module.AF_INET, + socket_module.AF_INET6, socket_module.SOCK_STREAM, socket_module.SHUT_WR, socket_module.SOL_SOCKET, @@ -128,7 +151,7 @@ class ReaderThread(PyDBDaemonThread): - ''' reader thread reads and dispatches commands in an infinite loop ''' + """reader thread reads and dispatches commands in an infinite loop""" def __init__(self, sock, py_db, PyDevJsonCommandProcessor, process_net_command, terminate_on_socket_close=True): assert sock is not None @@ -136,7 +159,7 @@ def __init__(self, sock, py_db, PyDevJsonCommandProcessor, process_net_command, self.__terminate_on_socket_close = terminate_on_socket_close self.sock = sock - self._buffer = b'' + self._buffer = b"" self.name = "pydevd.Reader" self.process_net_command = process_net_command self.process_net_command_json = PyDevJsonCommandProcessor(self._from_json).process_net_command_json @@ -175,7 +198,7 @@ def _read(self, size): buffer_len = len(self._buffer) if buffer_len == size: ret = self._buffer - self._buffer = b'' + self._buffer = b"" return ret if buffer_len > size: @@ -186,14 +209,14 @@ def _read(self, size): try: r = self.sock.recv(max(size - buffer_len, 1024)) except OSError: - return b'' + return b"" if not r: - return b'' + return b"" self._buffer += r def _read_line(self): while True: - i = self._buffer.find(b'\n') + i = self._buffer.find(b"\n") if i != -1: i += 1 # Add the newline to the return ret = self._buffer[:i] @@ -203,9 +226,9 @@ def _read_line(self): try: r = self.sock.recv(1024) except OSError: - return b'' + return b"" if not r: - return b'' + return b"" self._buffer += r @overrides(PyDBDaemonThread._on_run) @@ -222,26 +245,26 @@ def _on_run(self): line = self._read_line() if len(line) == 0: - pydev_log.debug('ReaderThread: empty contents received (len(line) == 0).') + pydev_log.debug("ReaderThread: empty contents received (len(line) == 0).") self._terminate_on_socket_close() return # Finished communication. if self._kill_received: continue - if line.startswith(b'Content-Length:'): - content_len = int(line.strip().split(b':', 1)[1]) + if line.startswith(b"Content-Length:"): + content_len = int(line.strip().split(b":", 1)[1]) continue if content_len != -1: # If we previously received a content length, read until a '\r\n'. - if line == b'\r\n': + if line == b"\r\n": json_contents = self._read(content_len) content_len = -1 if len(json_contents) == 0: - pydev_log.debug('ReaderThread: empty contents received (len(json_contents) == 0).') + pydev_log.debug("ReaderThread: empty contents received (len(json_contents) == 0).") self._terminate_on_socket_close() return # Finished communication. @@ -254,13 +277,13 @@ def _on_run(self): continue else: # No content len, regular line-based protocol message (remove trailing new-line). - if line.endswith(b'\n\n'): + if line.endswith(b"\n\n"): line = line[:-2] - elif line.endswith(b'\n'): + elif line.endswith(b"\n"): line = line[:-1] - elif line.endswith(b'\r'): + elif line.endswith(b"\r"): line = line[:-1] except: if not self._kill_received: @@ -271,17 +294,17 @@ def _on_run(self): # Note: the java backend is always expected to pass utf-8 encoded strings. We now work with str # internally and thus, we may need to convert to the actual encoding where needed (i.e.: filenames # on python 2 may need to be converted to the filesystem encoding). - if hasattr(line, 'decode'): - line = line.decode('utf-8') + if hasattr(line, "decode"): + line = line.decode("utf-8") if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3: - pydev_log.debug('debugger: received >>%s<<\n', line) + pydev_log.debug("debugger: received >>%s<<\n", line) - args = line.split('\t', 2) + args = line.split("\t", 2) try: cmd_id = int(args[0]) if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 3: - pydev_log.debug('Received command: %s %s\n', ID_TO_MEANING.get(str(cmd_id), '???'), line) + pydev_log.debug("Received command: %s %s\n", ID_TO_MEANING.get(str(cmd_id), "???"), line) self.process_command(cmd_id, int(args[1]), args[2]) except: if sys is not None and pydev_log_exception is not None: # Could happen at interpreter shutdown @@ -294,7 +317,7 @@ def _on_run(self): self._terminate_on_socket_close() finally: - pydev_log.debug('ReaderThread: exit') + pydev_log.debug("ReaderThread: exit") def _terminate_on_socket_close(self): if self.__terminate_on_socket_close: @@ -305,7 +328,6 @@ def process_command(self, cmd_id, seq, text): class FSNotifyThread(PyDBDaemonThread): - def __init__(self, py_db, api, watch_dirs): PyDBDaemonThread.__init__(self, py_db) self.api = api @@ -316,7 +338,7 @@ def __init__(self, py_db, api, watch_dirs): @overrides(PyDBDaemonThread._on_run) def _on_run(self): try: - pydev_log.info('Watching directories for code reload:\n---\n%s\n---' % ('\n'.join(sorted(self.watch_dirs)))) + pydev_log.info("Watching directories for code reload:\n---\n%s\n---" % ("\n".join(sorted(self.watch_dirs)))) # i.e.: The first call to set_tracked_paths will do a full scan, so, do it in the thread # too (after everything is configured). @@ -325,12 +347,12 @@ def _on_run(self): for change_enum, change_path in self.watcher.iter_changes(): # We're only interested in modified events if change_enum == fsnotify.Change.modified: - pydev_log.info('Modified: %s', change_path) + pydev_log.info("Modified: %s", change_path) self.api.request_reload_code(self.py_db, -1, None, change_path) else: - pydev_log.info('Ignored (add or remove) change in: %s', change_path) + pydev_log.info("Ignored (add or remove) change in: %s", change_path) except: - pydev_log.exception('Error when waiting for filesystem changes in FSNotifyThread.') + pydev_log.exception("Error when waiting for filesystem changes in FSNotifyThread.") @overrides(PyDBDaemonThread.do_kill_pydev_thread) def do_kill_pydev_thread(self): @@ -339,7 +361,7 @@ def do_kill_pydev_thread(self): class WriterThread(PyDBDaemonThread): - ''' writer thread writes out the commands in an infinite loop ''' + """writer thread writes out the commands in an infinite loop""" def __init__(self, sock, py_db, terminate_on_socket_close=True): PyDBDaemonThread.__init__(self, py_db) @@ -347,19 +369,19 @@ def __init__(self, sock, py_db, terminate_on_socket_close=True): self.__terminate_on_socket_close = terminate_on_socket_close self.name = "pydevd.Writer" self._cmd_queue = _queue.Queue() - if pydevd_vm_type.get_vm_type() == 'python': + if pydevd_vm_type.get_vm_type() == "python": self.timeout = 0 else: self.timeout = 0.1 def add_command(self, cmd): - ''' cmd is NetCommand ''' + """cmd is NetCommand""" if not self._kill_received: # we don't take new data after everybody die self._cmd_queue.put(cmd, False) @overrides(PyDBDaemonThread._on_run) def _on_run(self): - ''' just loop and write responses ''' + """just loop and write responses""" try: while True: @@ -368,7 +390,7 @@ def _on_run(self): cmd = self._cmd_queue.get(True, 0.1) except _queue.Empty: if self._kill_received: - pydev_log.debug('WriterThread: kill_received (sock.shutdown(SHUT_WR))') + pydev_log.debug("WriterThread: kill_received (sock.shutdown(SHUT_WR))") try: self.sock.shutdown(SHUT_WR) except: @@ -400,7 +422,7 @@ def _on_run(self): cmd.send(self.sock) if cmd.id == CMD_EXIT: - pydev_log.debug('WriterThread: CMD_EXIT received') + pydev_log.debug("WriterThread: CMD_EXIT received") break if time is None: break # interpreter shutdown @@ -411,7 +433,7 @@ def _on_run(self): if DebugInfoHolder.DEBUG_TRACE_LEVEL > 0: pydev_log_exception() finally: - pydev_log.debug('WriterThread: exit') + pydev_log.debug("WriterThread: exit") def empty(self): return self._cmd_queue.empty() @@ -444,11 +466,17 @@ def create_server_socket(host, port): def start_server(port): - ''' binds to a port, waits for the debugger to connect ''' - s = create_server_socket(host='', port=port) + """binds to a port, waits for the debugger to connect""" + s = create_server_socket(host="", port=port) try: s.listen(1) + # Let the user know it's halted waiting for the connection. + host, port = s.getsockname() + msg = f"pydevd: waiting for connection at: {host}:{port}" + print(msg, file=sys.stderr) + pydev_log.info(msg) + new_socket, _addr = s.accept() pydev_log.info("Connection accepted") # closing server socket is not necessary but we don't need it @@ -460,10 +488,20 @@ def start_server(port): def start_client(host, port): - ''' connects to a host/port ''' + """connects to a host/port""" pydev_log.info("Connecting to %s:%s", host, port) - s = socket(AF_INET, SOCK_STREAM) + address_family = AF_INET + for res in socket_module.getaddrinfo(host, port, 0, SOCK_STREAM): + if res[0] == AF_INET: + address_family = res[0] + # Prefer IPv4 addresses for backward compat. + break + if res[0] == AF_INET6: + # Don't break after this - if the socket is dual-stack prefer IPv4. + address_family = res[0] + + s = socket(address_family, SOCK_STREAM) # Set TCP keepalive on an open socket. # It activates after 1 second (TCP_KEEPIDLE,) of idleness, @@ -488,11 +526,11 @@ def start_client(host, port): try: # 10 seconds default timeout - timeout = int(os.environ.get('PYDEVD_CONNECT_TIMEOUT', 10)) + timeout = int(os.environ.get("PYDEVD_CONNECT_TIMEOUT", 10)) s.settimeout(timeout) s.connect((host, port)) s.settimeout(None) # no timeout after connected - pydev_log.info("Connected.") + pydev_log.info(f"Connected to: {s}.") return s except: pydev_log.exception("Could not connect to %s: %s", host, port) @@ -504,12 +542,12 @@ def start_client(host, port): class InternalThreadCommand(object): - ''' internal commands are generated/executed by the debugger. + """internal commands are generated/executed by the debugger. The reason for their existence is that some commands have to be executed on specific threads. These are the InternalThreadCommands that get get posted to PyDB. - ''' + """ def __init__(self, thread_id, method=None, *args, **kwargs): self.thread_id = thread_id @@ -518,9 +556,8 @@ def __init__(self, thread_id, method=None, *args, **kwargs): self.kwargs = kwargs def can_be_executed_by(self, thread_id): - '''By default, it must be in the same thread to be executed - ''' - return self.thread_id == thread_id or self.thread_id.endswith('|' + thread_id) + """By default, it must be in the same thread to be executed""" + return self.thread_id == thread_id or self.thread_id.endswith("|" + thread_id) def do_it(self, dbg): try: @@ -533,15 +570,14 @@ def do_it(self, dbg): self.kwargs = None def __str__(self): - return 'InternalThreadCommands(%s, %s, %s)' % (self.method, self.args, self.kwargs) + return "InternalThreadCommands(%s, %s, %s)" % (self.method, self.args, self.kwargs) __repr__ = __str__ class InternalThreadCommandForAnyThread(InternalThreadCommand): - def __init__(self, thread_id, method=None, *args, **kwargs): - assert thread_id == '*' + assert thread_id == "*" InternalThreadCommand.__init__(self, thread_id, method, *args, **kwargs) @@ -572,8 +608,8 @@ def internal_reload_code(dbg, seq, module_name, filename): if module_name is not None: module_name = module_name if module_name not in sys.modules: - if '.' in module_name: - new_module_name = module_name.split('.')[-1] + if "." in module_name: + new_module_name = module_name.split(".")[-1] if new_module_name in sys.modules: module_name = new_module_name @@ -585,9 +621,9 @@ def internal_reload_code(dbg, seq, module_name, filename): if filename: filename = pydevd_file_utils.normcase(filename) for module_name, module in sys.modules.copy().items(): - f = getattr_checked(module, '__file__') + f = getattr_checked(module, "__file__") if f is not None: - if f.endswith(('.pyc', '.pyo')): + if f.endswith((".pyc", ".pyo")): f = f[:-1] if pydevd_file_utils.normcase(f) == filename: @@ -595,11 +631,11 @@ def internal_reload_code(dbg, seq, module_name, filename): if not modules_to_reload: if filename and module_name: - _send_io_message(dbg, 'code reload: Unable to find module %s to reload for path: %s\n' % (module_name, filename)) + _send_io_message(dbg, "code reload: Unable to find module %s to reload for path: %s\n" % (module_name, filename)) elif filename: - _send_io_message(dbg, 'code reload: Unable to find module to reload for path: %s\n' % (filename,)) + _send_io_message(dbg, "code reload: Unable to find module to reload for path: %s\n" % (filename,)) elif module_name: - _send_io_message(dbg, 'code reload: Unable to find module to reload: %s\n' % (module_name,)) + _send_io_message(dbg, "code reload: Unable to find module to reload: %s\n" % (module_name,)) else: # Too much info... @@ -609,25 +645,25 @@ def internal_reload_code(dbg, seq, module_name, filename): found_module_to_reload = True if pydevd_reload.xreload(module): - _send_io_message(dbg, 'code reload: reload finished\n') + _send_io_message(dbg, "code reload: reload finished\n") else: - _send_io_message(dbg, 'code reload: reload finished without applying any change\n') + _send_io_message(dbg, "code reload: reload finished without applying any change\n") cmd = dbg.cmd_factory.make_reloaded_code_message(seq, found_module_to_reload) dbg.writer.add_command(cmd) except: - pydev_log.exception('Error reloading code') + pydev_log.exception("Error reloading code") class InternalGetThreadStack(InternalThreadCommand): - ''' + """ This command will either wait for a given thread to be paused to get its stack or will provide it anyways after a timeout (in which case the stack will be gotten but local variables won't be available and it'll not be possible to interact with the frame as it's not actually stopped in a breakpoint). - ''' + """ - def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout=.5, start_frame=0, levels=0): + def __init__(self, seq, thread_id, py_db, set_additional_thread_info, fmt, timeout=0.5, start_frame=0, levels=0): InternalThreadCommand.__init__(self, thread_id) self._py_db = weakref.ref(py_db) self._timeout = time.time() + timeout @@ -648,12 +684,20 @@ def can_be_executed_by(self, _thread_id): py_db = self._py_db() t = pydevd_find_thread_by_id(self.thread_id) frame = None - if t and not getattr(t, 'pydev_do_not_trace', None): + if t and not getattr(t, "pydev_do_not_trace", None): additional_info = self._set_additional_thread_info(t) frame = additional_info.get_topmost_frame(t) try: self._cmd = py_db.cmd_factory.make_get_thread_stack_message( - py_db, self.seq, self.thread_id, frame, self._fmt, must_be_suspended=not timed_out, start_frame=self._start_frame, levels=self._levels) + py_db, + self.seq, + self.thread_id, + frame, + self._fmt, + must_be_suspended=not timed_out, + start_frame=self._start_frame, + levels=self._levels, + ) finally: frame = None t = None @@ -675,9 +719,10 @@ def internal_step_in_thread(py_db, thread_id, cmd_id, set_additional_thread_info info.pydev_step_cmd = cmd_id info.pydev_step_stop = None info.pydev_state = STATE_RUN + info.update_stepping_info() if py_db.stepping_resumes_all_threads: - resume_threads('*', except_thread=thread_to_step) + resume_threads("*", except_thread=thread_to_step) def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additional_thread_info): @@ -690,21 +735,21 @@ def internal_smart_step_into(py_db, thread_id, offset, child_offset, set_additio info.pydev_smart_parent_offset = int(offset) info.pydev_smart_child_offset = int(child_offset) info.pydev_state = STATE_RUN + info.update_stepping_info() if py_db.stepping_resumes_all_threads: - resume_threads('*', except_thread=thread_to_step) + resume_threads("*", except_thread=thread_to_step) class InternalSetNextStatementThread(InternalThreadCommand): - def __init__(self, thread_id, cmd_id, line, func_name, seq=0): - ''' + """ cmd_id may actually be one of: CMD_RUN_TO_LINE CMD_SET_NEXT_STATEMENT CMD_SMART_STEP_INTO - ''' + """ self.thread_id = thread_id self.cmd_id = cmd_id self.line = line @@ -725,13 +770,14 @@ def do_it(self, dbg): info.pydev_smart_parent_offset = -1 info.pydev_smart_child_offset = -1 info.pydev_state = STATE_RUN + info.update_stepping_info() @silence_warnings_decorator def internal_get_variable_json(py_db, request): - ''' - :param VariablesRequest request: - ''' + """ + :param VariablesRequest request: + """ arguments = request.arguments # : :type arguments: VariablesArguments variables_reference = arguments.variablesReference scope = None @@ -740,7 +786,7 @@ def internal_get_variable_json(py_db, request): variables_reference = variables_reference.variable_reference fmt = arguments.format - if hasattr(fmt, 'to_dict'): + if hasattr(fmt, "to_dict"): fmt = fmt.to_dict() variables = [] @@ -755,25 +801,20 @@ def internal_get_variable_json(py_db, request): except: try: exc, exc_type, tb = sys.exc_info() - err = ''.join(traceback.format_exception(exc, exc_type, tb)) - variables = [{ - 'name': '', - 'value': err, - 'type': '', - 'variablesReference': 0 - }] + err = "".join(traceback.format_exception(exc, exc_type, tb)) + variables = [{"name": "", "value": err, "type": "", "variablesReference": 0}] except: - err = '' + err = "" pydev_log.exception(err) variables = [] body = VariablesResponseBody(variables) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) class InternalGetVariable(InternalThreadCommand): - ''' gets the value of a variable ''' + """gets the value of a variable""" def __init__(self, seq, thread_id, frame_id, scope, attrs): self.sequence = seq @@ -784,12 +825,13 @@ def __init__(self, seq, thread_id, frame_id, scope, attrs): @silence_warnings_decorator def do_it(self, dbg): - ''' Converts request into python variable ''' + """Converts request into python variable""" try: xml = StringIO() xml.write("") type_name, val_dict = pydevd_vars.resolve_compound_variable_fields( - dbg, self.thread_id, self.frame_id, self.scope, self.attributes) + dbg, self.thread_id, self.frame_id, self.scope, self.attributes + ) if val_dict is None: val_dict = {} @@ -811,13 +853,11 @@ def do_it(self, dbg): xml.close() dbg.writer.add_command(cmd) except Exception: - cmd = dbg.cmd_factory.make_error_message( - self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),)) + cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error resolving variables %s" % (get_exception_traceback_str(),)) dbg.writer.add_command(cmd) class InternalGetArray(InternalThreadCommand): - def __init__(self, seq, roffset, coffset, rows, cols, format, thread_id, frame_id, scope, attrs): self.sequence = seq self.thread_id = thread_id @@ -844,7 +884,7 @@ def do_it(self, dbg): def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value): - ''' Changes the value of a variable ''' + """Changes the value of a variable""" try: frame = dbg.find_frame(thread_id, frame_id) if frame is not None: @@ -857,18 +897,20 @@ def internal_change_variable(dbg, seq, thread_id, frame_id, scope, attr, value): cmd = dbg.cmd_factory.make_variable_changed_message(seq, xml) dbg.writer.add_command(cmd) except Exception: - cmd = dbg.cmd_factory.make_error_message(seq, "Error changing variable attr:%s expression:%s traceback:%s" % (attr, value, get_exception_traceback_str())) + cmd = dbg.cmd_factory.make_error_message( + seq, "Error changing variable attr:%s expression:%s traceback:%s" % (attr, value, get_exception_traceback_str()) + ) dbg.writer.add_command(cmd) def internal_change_variable_json(py_db, request): - ''' + """ The pydevd_vars.change_attr_expression(thread_id, frame_id, attr, value, dbg) can only deal with changing at a frame level, so, currently changing the contents of something in a different scope is currently not supported. :param SetVariableRequest request: - ''' + """ # : :type arguments: SetVariableArguments arguments = request.arguments variables_reference = arguments.variablesReference @@ -878,7 +920,7 @@ def internal_change_variable_json(py_db, request): variables_reference = variables_reference.variable_reference fmt = arguments.format - if hasattr(fmt, 'to_dict'): + if hasattr(fmt, "to_dict"): fmt = fmt.to_dict() try: @@ -888,44 +930,38 @@ def internal_change_variable_json(py_db, request): if variable is None: _write_variable_response( - py_db, request, value='', success=False, message='Unable to find variable container to change: %s.' % (variables_reference,)) + py_db, request, value="", success=False, message="Unable to find variable container to change: %s." % (variables_reference,) + ) return child_var = variable.change_variable(arguments.name, arguments.value, py_db, fmt=fmt) if child_var is None: - _write_variable_response( - py_db, request, value='', success=False, message='Unable to change: %s.' % (arguments.name,)) + _write_variable_response(py_db, request, value="", success=False, message="Unable to change: %s." % (arguments.name,)) return var_data = child_var.get_var_data(fmt=fmt) body = SetVariableResponseBody( - value=var_data['value'], - type=var_data['type'], - variablesReference=var_data.get('variablesReference'), - namedVariables=var_data.get('namedVariables'), - indexedVariables=var_data.get('indexedVariables'), + value=var_data["value"], + type=var_data["type"], + variablesReference=var_data.get("variablesReference"), + namedVariables=var_data.get("namedVariables"), + indexedVariables=var_data.get("indexedVariables"), ) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) def _write_variable_response(py_db, request, value, success, message): - body = SetVariableResponseBody('') - variables_response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body':body, - 'success': False, - 'message': message - }) + body = SetVariableResponseBody("") + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": message}) cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True) py_db.writer.add_command(cmd) @silence_warnings_decorator def internal_get_frame(dbg, seq, thread_id, frame_id): - ''' Converts request into python variable ''' + """Converts request into python variable""" try: frame = dbg.find_frame(thread_id, frame_id) if frame is not None: @@ -972,21 +1008,33 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l for child_variant in variant.children_variants: # If there are child variants, the current one is just an intermediary, so, # just create variants for the child (notifying properly about the parent too). - xml += '' % ( - quote(child_variant.name), - str(child_variant.is_visited).lower(), - child_variant.line, - variant.offset, - child_variant.offset, - child_variant.call_order, + xml += ( + '' + % ( + quote(child_variant.name), + str(child_variant.is_visited).lower(), + child_variant.line, + variant.offset, + child_variant.offset, + child_variant.call_order, + variant.endlineno, + variant.startcol, + variant.endcol, + ) ) else: - xml += '' % ( - quote(variant.name), - str(variant.is_visited).lower(), - variant.line, - variant.offset, - variant.call_order, + xml += ( + '' + % ( + quote(variant.name), + str(variant.is_visited).lower(), + variant.line, + variant.offset, + variant.call_order, + variant.endlineno, + variant.startcol, + variant.endcol, + ) ) xml += "" @@ -994,10 +1042,10 @@ def internal_get_smart_step_into_variants(dbg, seq, thread_id, frame_id, start_l dbg.writer.add_command(cmd) except: # Error is expected (if `dis` module cannot be used -- i.e.: Jython). - pydev_log.exception('Error calculating Smart Step Into Variants.') + pydev_log.exception("Error calculating Smart Step Into Variants.") cmd = dbg.cmd_factory.make_error_message( - seq, "Error getting smart step into variants for frame: %s from thread: %s" - % (frame_id, thread_id)) + seq, "Error getting smart step into variants for frame: %s from thread: %s" % (frame_id, thread_id) + ) dbg.writer.add_command(cmd) @@ -1009,12 +1057,8 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se if thread is None or frame is None: body = StepInTargetsResponseBody([]) variables_response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': body, - 'success': False, - 'message': 'Thread to get step in targets seems to have resumed already.' - }) + request, kwargs={"body": body, "success": False, "message": "Thread to get step in targets seems to have resumed already."} + ) cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True) dbg.writer.add_command(cmd) return @@ -1037,7 +1081,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se target_id = next(counter) if child_variant.call_order > 1: - targets.append(StepInTarget(id=target_id, label='%s (call %s)' % (child_variant.name, child_variant.call_order),)) + targets.append( + StepInTarget( + id=target_id, + label="%s (call %s)" % (child_variant.name, child_variant.call_order), + ) + ) else: targets.append(StepInTarget(id=target_id, label=child_variant.name)) target_id_to_variant[target_id] = child_variant @@ -1047,7 +1096,12 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se else: target_id = next(counter) if variant.call_order > 1: - targets.append(StepInTarget(id=target_id, label='%s (call %s)' % (variant.name, variant.call_order),)) + targets.append( + StepInTarget( + id=target_id, + label="%s (call %s)" % (variant.name, variant.call_order), + ) + ) else: targets.append(StepInTarget(id=target_id, label=variant.name)) target_id_to_variant[target_id] = variant @@ -1060,26 +1114,20 @@ def internal_get_step_in_targets_json(dbg, seq, thread_id, frame_id, request, se info.target_id_to_smart_step_into_variant = target_id_to_variant body = StepInTargetsResponseBody(targets=targets) - response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + response = pydevd_base_schema.build_response(request, kwargs={"body": body}) cmd = NetCommand(CMD_RETURN, 0, response, is_json=True) dbg.writer.add_command(cmd) except Exception as e: # Error is expected (if `dis` module cannot be used -- i.e.: Jython). - pydev_log.exception('Error calculating Smart Step Into Variants.') + pydev_log.exception("Error calculating Smart Step Into Variants.") body = StepInTargetsResponseBody([]) - variables_response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': body, - 'success': False, - 'message': str(e) - }) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": str(e)}) cmd = NetCommand(CMD_RETURN, 0, variables_response, is_json=True) dbg.writer.add_command(cmd) def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id): - ''' gets the valid line numbers for use with set next statement ''' + """gets the valid line numbers for use with set next statement""" try: frame = dbg.find_frame(thread_id, frame_id) if frame is not None: @@ -1105,18 +1153,17 @@ def internal_get_next_statement_targets(dbg, seq, thread_id, frame_id): dbg.writer.add_command(cmd) -def _evaluate_response(py_db, request, result, error_message=''): +def _evaluate_response(py_db, request, result, error_message=""): is_error = isinstance(result, ExceptionOnEvaluate) if is_error: result = result.result if not error_message: body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) else: body = pydevd_schema.EvaluateResponseBody(result=result, variablesReference=0) - variables_response = pydevd_base_schema.build_response(request, kwargs={ - 'body':body, 'success':False, 'message': error_message}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) @@ -1124,9 +1171,9 @@ def _evaluate_response(py_db, request, result, error_message=''): def internal_evaluate_expression_json(py_db, request, thread_id): - ''' + """ :param EvaluateRequest request: - ''' + """ global _global_frame # : :type arguments: EvaluateArguments @@ -1135,11 +1182,11 @@ def internal_evaluate_expression_json(py_db, request, thread_id): frame_id = arguments.frameId context = arguments.context fmt = arguments.format - if hasattr(fmt, 'to_dict'): + if hasattr(fmt, "to_dict"): fmt = fmt.to_dict() ctx = NULL - if context == 'repl': + if context == "repl": if not py_db.is_output_redirected: ctx = pydevd_io.redirect_stream_to_pydb_io_messages_context() else: @@ -1166,14 +1213,16 @@ def __create_frame(): eval_result = pydevd_vars.evaluate_expression(py_db, frame, expression, is_exec=False) is_error = isinstance_checked(eval_result, ExceptionOnEvaluate) if is_error: - if context == 'hover': # In a hover it doesn't make sense to do an exec. - _evaluate_response(py_db, request, result='', error_message='Exception occurred during evaluation.') + if context == "hover": # In a hover it doesn't make sense to do an exec. + _evaluate_response(py_db, request, result="", error_message="Exception occurred during evaluation.") return - elif context == 'watch': + elif context == "watch": # If it's a watch, don't show it as an exception object, rather, format # it and show it as a string (with success=False). - msg = '%s: %s' % ( - eval_result.result.__class__.__name__, eval_result.result,) + msg = "%s: %s" % ( + eval_result.result.__class__.__name__, + eval_result.result, + ) _evaluate_response(py_db, request, result=msg, error_message=msg) return else: @@ -1182,10 +1231,10 @@ def __create_frame(): try: pydevd_vars.compile_as_eval(expression) except Exception: - try_exec = context == 'repl' + try_exec = context == "repl" else: try_exec = False - if context == 'repl': + if context == "repl": # In the repl we should show the exception to the user. _evaluate_response_return_exception(py_db, request, eval_result.etype, eval_result.result, eval_result.tb) return @@ -1197,29 +1246,29 @@ def __create_frame(): _evaluate_response_return_exception(py_db, request, *sys.exc_info()) return # No result on exec. - _evaluate_response(py_db, request, result='') + _evaluate_response(py_db, request, result="") return # Ok, we have the result (could be an error), let's put it into the saved variables. frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id) if frame_tracker is None: # This is not really expected. - _evaluate_response(py_db, request, result='', error_message='Thread id: %s is not current thread id.' % (thread_id,)) + _evaluate_response(py_db, request, result="", error_message="Thread id: %s is not current thread id." % (thread_id,)) return safe_repr_custom_attrs = {} - if context == 'clipboard': + if context == "clipboard": safe_repr_custom_attrs = dict( - maxstring_outer=2 ** 64, - maxstring_inner=2 ** 64, - maxother_outer=2 ** 64, - maxother_inner=2 ** 64, + maxstring_outer=2**64, + maxstring_inner=2**64, + maxother_outer=2**64, + maxother_inner=2**64, ) - if context == 'repl' and eval_result is None: + if context == "repl" and eval_result is None: # We don't want "None" to appear when typing in the repl. body = pydevd_schema.EvaluateResponseBody( - result='', + result="", variablesReference=0, ) @@ -1228,14 +1277,14 @@ def __create_frame(): var_data = variable.get_var_data(fmt=fmt, context=context, **safe_repr_custom_attrs) body = pydevd_schema.EvaluateResponseBody( - result=var_data['value'], - variablesReference=var_data.get('variablesReference', 0), - type=var_data.get('type'), - presentationHint=var_data.get('presentationHint'), - namedVariables=var_data.get('namedVariables'), - indexedVariables=var_data.get('indexedVariables'), + result=var_data["value"], + variablesReference=var_data.get("variablesReference", 0), + type=var_data.get("type"), + presentationHint=var_data.get("presentationHint"), + namedVariables=var_data.get("namedVariables"), + indexedVariables=var_data.get("indexedVariables"), ) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) @@ -1252,7 +1301,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t if tb is None: tb = initial_tb - err = ''.join(traceback.format_exception(exc_type, exc, tb)) + err = "".join(traceback.format_exception(exc_type, exc, tb)) # Make sure we don't keep references to them. exc = None @@ -1261,7 +1310,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t temp_tb = None initial_tb = None except: - err = '' + err = "" pydev_log.exception(err) # Currently there is an issue in VSC where returning success=false for an @@ -1272,7 +1321,7 @@ def _evaluate_response_return_exception(py_db, request, exc_type, exc, initial_t @silence_warnings_decorator def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result): - ''' gets the value of a variable ''' + """gets the value of a variable""" try: frame = dbg.find_frame(thread_id, frame_id) if frame is not None: @@ -1294,9 +1343,8 @@ def internal_evaluate_expression(dbg, seq, thread_id, frame_id, expression, is_e def _set_expression_response(py_db, request, result, error_message): - body = pydevd_schema.SetExpressionResponseBody(result='', variablesReference=0) - variables_response = pydevd_base_schema.build_response(request, kwargs={ - 'body':body, 'success':False, 'message': error_message}) + body = pydevd_schema.SetExpressionResponseBody(result="", variablesReference=0) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body, "success": False, "message": error_message}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) @@ -1308,23 +1356,23 @@ def internal_set_expression_json(py_db, request, thread_id): frame_id = arguments.frameId value = arguments.value fmt = arguments.format - if hasattr(fmt, 'to_dict'): + if hasattr(fmt, "to_dict"): fmt = fmt.to_dict() frame = py_db.find_frame(thread_id, frame_id) - exec_code = '%s = (%s)' % (expression, value) + exec_code = "%s = (%s)" % (expression, value) result = pydevd_vars.evaluate_expression(py_db, frame, exec_code, is_exec=True) is_error = isinstance(result, ExceptionOnEvaluate) if is_error: - _set_expression_response(py_db, request, result, error_message='Error executing: %s' % (exec_code,)) + _set_expression_response(py_db, request, result, error_message="Error executing: %s" % (exec_code,)) return # Ok, we have the result (could be an error), let's put it into the saved variables. frame_tracker = py_db.suspended_frames_manager.get_frame_tracker(thread_id) if frame_tracker is None: # This is not really expected. - _set_expression_response(py_db, request, result, error_message='Thread id: %s is not current thread id.' % (thread_id,)) + _set_expression_response(py_db, request, result, error_message="Thread id: %s is not current thread id." % (thread_id,)) return # Now that the exec is done, get the actual value changed to return. @@ -1333,31 +1381,31 @@ def internal_set_expression_json(py_db, request, thread_id): var_data = variable.get_var_data(fmt=fmt) body = pydevd_schema.SetExpressionResponseBody( - value=var_data['value'], - variablesReference=var_data.get('variablesReference', 0), - type=var_data.get('type'), - presentationHint=var_data.get('presentationHint'), - namedVariables=var_data.get('namedVariables'), - indexedVariables=var_data.get('indexedVariables'), + value=var_data["value"], + variablesReference=var_data.get("variablesReference", 0), + type=var_data.get("type"), + presentationHint=var_data.get("presentationHint"), + namedVariables=var_data.get("namedVariables"), + indexedVariables=var_data.get("indexedVariables"), ) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body':body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) py_db.writer.add_command(NetCommand(CMD_RETURN, 0, variables_response, is_json=True)) def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, column=-1): - ''' + """ Note that if the column is >= 0, the act_tok is considered text and the actual activation token/qualifier is computed in this command. - ''' + """ try: remove_path = None try: - qualifier = '' + qualifier = "" if column >= 0: token_and_qualifier = extract_token_and_qualifier(act_tok, line, column) act_tok = token_and_qualifier[0] if act_tok: - act_tok += '.' + act_tok += "." qualifier = token_and_qualifier[1] frame = dbg.find_frame(thread_id, frame_id) @@ -1367,11 +1415,12 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co # Note that qualifier and start are only actually valid for the # Debug Adapter Protocol (for the line-based protocol, the IDE # is required to filter the completions returned). - cmd = dbg.cmd_factory.make_get_completions_message( - seq, completions, qualifier, start=column - len(qualifier)) + cmd = dbg.cmd_factory.make_get_completions_message(seq, completions, qualifier, start=column - len(qualifier)) dbg.writer.add_command(cmd) else: - cmd = dbg.cmd_factory.make_error_message(seq, "internal_get_completions: Frame not found: %s from thread: %s" % (frame_id, thread_id)) + cmd = dbg.cmd_factory.make_error_message( + seq, "internal_get_completions: Frame not found: %s from thread: %s" % (frame_id, thread_id) + ) dbg.writer.add_command(cmd) finally: @@ -1380,18 +1429,17 @@ def internal_get_completions(dbg, seq, thread_id, frame_id, act_tok, line=-1, co except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) + sys.stderr.write("%s\n" % (exc,)) cmd = dbg.cmd_factory.make_error_message(seq, "Error evaluating expression " + exc) dbg.writer.add_command(cmd) def internal_get_description(dbg, seq, thread_id, frame_id, expression): - ''' Fetch the variable description stub from the debug console - ''' + """Fetch the variable description stub from the debug console""" try: frame = dbg.find_frame(thread_id, frame_id) description = pydevd_console.get_description(frame, thread_id, frame_id, expression) - description = pydevd_xml.make_valid_xml_value(quote(description, '/>_= \t')) + description = pydevd_xml.make_valid_xml_value(quote(description, "/>_= \t")) description_xml = '' % description cmd = dbg.cmd_factory.make_get_description_message(seq, description_xml) dbg.writer.add_command(cmd) @@ -1402,15 +1450,15 @@ def internal_get_description(dbg, seq, thread_id, frame_id, expression): def build_exception_info_response(dbg, thread_id, thread, request_seq, set_additional_thread_info, iter_visible_frames_info, max_frames): - ''' + """ :return ExceptionInfoResponse - ''' + """ additional_info = set_additional_thread_info(thread) topmost_frame = additional_info.get_topmost_frame(thread) - current_paused_frame_name = '' + current_paused_frame_name = "" - source_path = '' # This is an extra bit of data used by Visual Studio + source_path = "" # This is an extra bit of data used by Visual Studio stack_str_lst = [] name = None description = None @@ -1446,19 +1494,27 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit except: pass - for frame_id, frame, method_name, original_filename, filename_in_utf8, lineno, _applied_mapping, show_as_current_frame, line_col_info in \ - iter_visible_frames_info(dbg, frames_list): - + for ( + frame_id, + frame, + method_name, + original_filename, + filename_in_utf8, + lineno, + _applied_mapping, + show_as_current_frame, + line_col_info, + ) in iter_visible_frames_info(dbg, frames_list): line_text = linecache.getline(original_filename, lineno) # Never filter out plugin frames! - if not getattr(frame, 'IS_PLUGIN_FRAME', False): + if not getattr(frame, "IS_PLUGIN_FRAME", False): if dbg.is_files_filter_enabled and dbg.apply_files_filter(frame, original_filename, False): continue if show_as_current_frame: current_paused_frame_name = method_name - method_name += ' (Current frame)' + method_name += " (Current frame)" frames.append((filename_in_utf8, lineno, method_name, line_text, line_col_info)) if not source_path and frames: @@ -1474,11 +1530,11 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit frame_summary.end_colno = line_col_info.end_colno stack_summary.append(frame_summary) - stack_str = ''.join(stack_summary.format()) + stack_str = "".join(stack_summary.format()) else: # Note: remove col info (just used in 3.11). - stack_str = ''.join(traceback.format_list((x[:-1] for x in frames[-max_frames:]))) + stack_str = "".join(traceback.format_list((x[:-1] for x in frames[-max_frames:]))) try: stype = frames_list.exc_type.__qualname__ @@ -1486,12 +1542,12 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit if smod not in ("__main__", "builtins"): if not isinstance(smod, str): smod = "" - stype = smod + '.' + stype + stype = smod + "." + stype except Exception: - stype = '' - pydev_log.exception('Error getting exception type.') + stype = "" + pydev_log.exception("Error getting exception type.") - stack_str += '%s: %s\n' % (stype, frames_list.exc_desc) + stack_str += "%s: %s\n" % (stype, frames_list.exc_desc) stack_str += frames_list.exc_context_msg stack_str_lst.append(stack_str) @@ -1500,18 +1556,18 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit break except: - pydev_log.exception('Error on build_exception_info_response.') + pydev_log.exception("Error on build_exception_info_response.") finally: topmost_frame = None - full_stack_str = ''.join(reversed(stack_str_lst)) + full_stack_str = "".join(reversed(stack_str_lst)) if not name: - name = 'exception: type unknown' + name = "exception: type unknown" if not description: - description = 'exception: no description' + description = "exception: no description" if current_paused_frame_name: - name += ' (note: full exception trace is shown but execution is paused at: %s)' % (current_paused_frame_name,) + name += " (note: full exception trace is shown but execution is paused at: %s)" % (current_paused_frame_name,) if thread.stop_reason == CMD_STEP_CAUGHT_EXCEPTION: break_mode = pydevd_schema.ExceptionBreakMode.ALWAYS @@ -1521,7 +1577,7 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit response = pydevd_schema.ExceptionInfoResponse( request_seq=request_seq, success=True, - command='exceptionInfo', + command="exceptionInfo", body=pydevd_schema.ExceptionInfoResponseBody( exceptionId=name, description=description, @@ -1533,29 +1589,28 @@ def build_exception_info_response(dbg, thread_id, thread, request_seq, set_addit source=source_path, # Note: ExceptionDetails actually accepts an 'innerException', but # when passing it, VSCode is not showing the stack trace at all. - ) - ) + ), + ), ) return response -def internal_get_exception_details_json(dbg, request, thread_id, thread, max_frames, set_additional_thread_info=None, iter_visible_frames_info=None): - ''' Fetch exception details - ''' +def internal_get_exception_details_json( + dbg, request, thread_id, thread, max_frames, set_additional_thread_info=None, iter_visible_frames_info=None +): + """Fetch exception details""" try: - response = build_exception_info_response(dbg, thread_id, thread, request.seq, set_additional_thread_info, iter_visible_frames_info, max_frames) + response = build_exception_info_response( + dbg, thread_id, thread, request.seq, set_additional_thread_info, iter_visible_frames_info, max_frames + ) except: exc = get_exception_traceback_str() - response = pydevd_base_schema.build_response(request, kwargs={ - 'success': False, - 'message': exc, - 'body':{} - }) + response = pydevd_base_schema.build_response(request, kwargs={"success": False, "message": exc, "body": {}}) dbg.writer.add_command(NetCommand(CMD_RETURN, 0, response, is_json=True)) class InternalGetBreakpointException(InternalThreadCommand): - ''' Send details of exception raised while evaluating conditional breakpoint ''' + """Send details of exception raised while evaluating conditional breakpoint""" def __init__(self, thread_id, exc_type, stacktrace): self.sequence = 0 @@ -1575,27 +1630,31 @@ def do_it(self, dbg): # convert it to utf8 filename = filename.decode(file_system_encoding).encode("utf-8") - callstack += '' \ - % (self.thread_id, makeValid(filename), line, makeValid(methodname), makeValid(methodobj)) + callstack += '' % ( + self.thread_id, + makeValid(filename), + line, + makeValid(methodname), + makeValid(methodobj), + ) callstack += "" cmd = dbg.cmd_factory.make_send_breakpoint_exception_message(self.sequence, self.exc_type + "\t" + callstack) dbg.writer.add_command(cmd) except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) + sys.stderr.write("%s\n" % (exc,)) cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Exception: " + exc) dbg.writer.add_command(cmd) class InternalSendCurrExceptionTrace(InternalThreadCommand): - ''' Send details of the exception that was caught and where we've broken in. - ''' + """Send details of the exception that was caught and where we've broken in.""" def __init__(self, thread_id, arg, curr_frame_id): - ''' + """ :param arg: exception type, description, traceback object - ''' + """ self.sequence = 0 self.thread_id = thread_id self.curr_frame_id = curr_frame_id @@ -1608,14 +1667,13 @@ def do_it(self, dbg): dbg.writer.add_command(cmd) except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) + sys.stderr.write("%s\n" % (exc,)) cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace: " + exc) dbg.writer.add_command(cmd) class InternalSendCurrExceptionTraceProceeded(InternalThreadCommand): - ''' Send details of the exception that was caught and where we've broken in. - ''' + """Send details of the exception that was caught and where we've broken in.""" def __init__(self, thread_id): self.sequence = 0 @@ -1627,13 +1685,13 @@ def do_it(self, dbg): dbg.writer.add_command(cmd) except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) + sys.stderr.write("%s\n" % (exc,)) cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error Sending Current Exception Trace Proceeded: " + exc) dbg.writer.add_command(cmd) class InternalEvaluateConsoleExpression(InternalThreadCommand): - ''' Execute the given command in the debug console ''' + """Execute the given command in the debug console""" def __init__(self, seq, thread_id, frame_id, line, buffer_output=True): self.sequence = seq @@ -1643,22 +1701,24 @@ def __init__(self, seq, thread_id, frame_id, line, buffer_output=True): self.buffer_output = buffer_output def do_it(self, dbg): - ''' Create an XML for console output, error and more (true/false) + """Create an XML for console output, error and more (true/false) true/false - ''' + """ try: frame = dbg.find_frame(self.thread_id, self.frame_id) if frame is not None: console_message = pydevd_console.execute_console_command( - frame, self.thread_id, self.frame_id, self.line, self.buffer_output) + frame, self.thread_id, self.frame_id, self.line, self.buffer_output + ) cmd = dbg.cmd_factory.make_send_console_message(self.sequence, console_message.to_xml()) else: from _pydevd_bundle.pydevd_console import ConsoleMessage + console_message = ConsoleMessage() console_message.add_console_message( pydevd_console.CONSOLE_ERROR, @@ -1672,8 +1732,7 @@ def do_it(self, dbg): class InternalRunCustomOperation(InternalThreadCommand): - ''' Run a custom command on an expression - ''' + """Run a custom command on an expression""" def __init__(self, seq, thread_id, frame_id, scope, attrs, style, encoded_code_or_file, fnname): self.sequence = seq @@ -1687,8 +1746,9 @@ def __init__(self, seq, thread_id, frame_id, scope, attrs, style, encoded_code_o def do_it(self, dbg): try: - res = pydevd_vars.custom_operation(dbg, self.thread_id, self.frame_id, self.scope, self.attrs, - self.style, self.code_or_file, self.fnname) + res = pydevd_vars.custom_operation( + dbg, self.thread_id, self.frame_id, self.scope, self.attrs, self.style, self.code_or_file, self.fnname + ) resEncoded = quote_plus(res) cmd = dbg.cmd_factory.make_custom_operation_message(self.sequence, resEncoded) dbg.writer.add_command(cmd) @@ -1699,8 +1759,7 @@ def do_it(self, dbg): class InternalConsoleGetCompletions(InternalThreadCommand): - ''' Fetch the completions in the debug console - ''' + """Fetch the completions in the debug console""" def __init__(self, seq, thread_id, frame_id, act_tok): self.sequence = seq @@ -1709,8 +1768,7 @@ def __init__(self, seq, thread_id, frame_id, act_tok): self.act_tok = act_tok def do_it(self, dbg): - ''' Get completions and write back to the client - ''' + """Get completions and write back to the client""" try: frame = dbg.find_frame(self.thread_id, self.frame_id) completions_xml = pydevd_console.get_completions(frame, self.act_tok) @@ -1723,7 +1781,7 @@ def do_it(self, dbg): class InternalConsoleExec(InternalThreadCommand): - ''' gets the value of a variable ''' + """gets the value of a variable""" def __init__(self, seq, thread_id, frame_id, expression): self.sequence = seq @@ -1731,24 +1789,40 @@ def __init__(self, seq, thread_id, frame_id, expression): self.frame_id = frame_id self.expression = expression - def do_it(self, dbg): - ''' Converts request into python variable ''' + def init_matplotlib_in_debug_console(self, py_db): + # import hook and patches for matplotlib support in debug console + from _pydev_bundle.pydev_import_hook import import_hook_manager + + if is_current_thread_main_thread(): + for module in list(py_db.mpl_modules_for_patching): + import_hook_manager.add_module_name(module, py_db.mpl_modules_for_patching.pop(module)) + + def do_it(self, py_db): + if not py_db.mpl_hooks_in_debug_console and not py_db.gui_in_use: + # add import hooks for matplotlib patches if only debug console was started + try: + self.init_matplotlib_in_debug_console(py_db) + py_db.gui_in_use = True + except: + pydev_log.debug("Matplotlib support in debug console failed", traceback.format_exc()) + py_db.mpl_hooks_in_debug_console = True + try: try: - # don't trace new threads created by console command + # Don't trace new threads created by console command. disable_trace_thread_modules() - result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression, dbg) + result = pydevconsole.console_exec(self.thread_id, self.frame_id, self.expression, py_db) xml = "" xml += pydevd_xml.var_to_xml(result, "") xml += "" - cmd = dbg.cmd_factory.make_evaluate_expression_message(self.sequence, xml) - dbg.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_evaluate_expression_message(self.sequence, xml) + py_db.writer.add_command(cmd) except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) - cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error evaluating console expression " + exc) - dbg.writer.add_command(cmd) + sys.stderr.write("%s\n" % (exc,)) + cmd = py_db.cmd_factory.make_error_message(self.sequence, "Error evaluating console expression " + exc) + py_db.writer.add_command(cmd) finally: enable_trace_thread_modules() @@ -1757,9 +1831,9 @@ def do_it(self, dbg): class InternalLoadFullValue(InternalThreadCommand): - ''' + """ Loads values asynchronously - ''' + """ def __init__(self, seq, thread_id, frame_id, vars): self.sequence = seq @@ -1769,14 +1843,14 @@ def __init__(self, seq, thread_id, frame_id, vars): @silence_warnings_decorator def do_it(self, dbg): - '''Starts a thread that will load values asynchronously''' + """Starts a thread that will load values asynchronously""" try: var_objects = [] for variable in self.vars: variable = variable.strip() if len(variable) > 0: - if '\t' in variable: # there are attributes beyond scope - scope, attrs = variable.split('\t', 1) + if "\t" in variable: # there are attributes beyond scope + scope, attrs = variable.split("\t", 1) name = attrs[0] else: scope, attrs = (variable, None) @@ -1788,22 +1862,22 @@ def do_it(self, dbg): t.start() except: exc = get_exception_traceback_str() - sys.stderr.write('%s\n' % (exc,)) + sys.stderr.write("%s\n" % (exc,)) cmd = dbg.cmd_factory.make_error_message(self.sequence, "Error evaluating variable %s " % exc) dbg.writer.add_command(cmd) class AbstractGetValueAsyncThread(PyDBDaemonThread): - ''' + """ Abstract class for a thread, which evaluates values for async variables - ''' + """ def __init__(self, py_db, frame_accessor, seq, var_objects): PyDBDaemonThread.__init__(self, py_db) self.frame_accessor = frame_accessor self.seq = seq self.var_objs = var_objects - self.cancel_event = threading.Event() + self.cancel_event = ThreadingEvent() def send_result(self, xml): raise NotImplementedError() @@ -1813,7 +1887,7 @@ def _on_run(self): start = time.time() xml = StringIO() xml.write("") - for (var_obj, name) in self.var_objs: + for var_obj, name in self.var_objs: current_time = time.time() if current_time - start > ASYNC_EVAL_TIMEOUT_SEC or self.cancel_event.is_set(): break @@ -1824,10 +1898,10 @@ def _on_run(self): class GetValueAsyncThreadDebug(AbstractGetValueAsyncThread): - ''' + """ A thread for evaluation async values, which returns result for debugger Create message and send it via writer thread - ''' + """ def send_result(self, xml): if self.frame_accessor is not None: @@ -1836,12 +1910,11 @@ def send_result(self, xml): class GetValueAsyncThreadConsole(AbstractGetValueAsyncThread): - ''' + """ A thread for evaluation async values, which returns result for Console Send result directly to Console's server - ''' + """ def send_result(self, xml): if self.frame_accessor is not None: self.frame_accessor.ReturnFullValue(self.seq, xml.getvalue()) - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py index ad05a3250..7de3d8ef8 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_comm_constants.py @@ -110,99 +110,91 @@ VERSION_STRING = "@@BUILD_NUMBER@@" from _pydev_bundle._pydev_filesystem_encoding import getfilesystemencoding + file_system_encoding = getfilesystemencoding() -filesystem_encoding_is_utf8 = file_system_encoding.lower() in ('utf-8', 'utf_8', 'utf8') +filesystem_encoding_is_utf8 = file_system_encoding.lower() in ("utf-8", "utf_8", "utf8") ID_TO_MEANING = { - '101': 'CMD_RUN', - '102': 'CMD_LIST_THREADS', - '103': 'CMD_THREAD_CREATE', - '104': 'CMD_THREAD_KILL', - '105': 'CMD_THREAD_SUSPEND', - '106': 'CMD_THREAD_RUN', - '107': 'CMD_STEP_INTO', - '108': 'CMD_STEP_OVER', - '109': 'CMD_STEP_RETURN', - '110': 'CMD_GET_VARIABLE', - '111': 'CMD_SET_BREAK', - '112': 'CMD_REMOVE_BREAK', - '113': 'CMD_EVALUATE_EXPRESSION', - '114': 'CMD_GET_FRAME', - '115': 'CMD_EXEC_EXPRESSION', - '116': 'CMD_WRITE_TO_CONSOLE', - '117': 'CMD_CHANGE_VARIABLE', - '118': 'CMD_RUN_TO_LINE', - '119': 'CMD_RELOAD_CODE', - '120': 'CMD_GET_COMPLETIONS', - '121': 'CMD_CONSOLE_EXEC', - '122': 'CMD_ADD_EXCEPTION_BREAK', - '123': 'CMD_REMOVE_EXCEPTION_BREAK', - '124': 'CMD_LOAD_SOURCE', - '125': 'CMD_ADD_DJANGO_EXCEPTION_BREAK', - '126': 'CMD_REMOVE_DJANGO_EXCEPTION_BREAK', - '127': 'CMD_SET_NEXT_STATEMENT', - '128': 'CMD_SMART_STEP_INTO', - '129': 'CMD_EXIT', - '130': 'CMD_SIGNATURE_CALL_TRACE', - - '131': 'CMD_SET_PY_EXCEPTION', - '132': 'CMD_GET_FILE_CONTENTS', - '133': 'CMD_SET_PROPERTY_TRACE', - '134': 'CMD_EVALUATE_CONSOLE_EXPRESSION', - '135': 'CMD_RUN_CUSTOM_OPERATION', - '136': 'CMD_GET_BREAKPOINT_EXCEPTION', - '137': 'CMD_STEP_CAUGHT_EXCEPTION', - '138': 'CMD_SEND_CURR_EXCEPTION_TRACE', - '139': 'CMD_SEND_CURR_EXCEPTION_TRACE_PROCEEDED', - '140': 'CMD_IGNORE_THROWN_EXCEPTION_AT', - '141': 'CMD_ENABLE_DONT_TRACE', - '142': 'CMD_SHOW_CONSOLE', - '143': 'CMD_GET_ARRAY', - '144': 'CMD_STEP_INTO_MY_CODE', - '145': 'CMD_GET_CONCURRENCY_EVENT', - '146': 'CMD_SHOW_RETURN_VALUES', - '147': 'CMD_INPUT_REQUESTED', - '148': 'CMD_GET_DESCRIPTION', - - '149': 'CMD_PROCESS_CREATED', # Note: this is actually a notification of a sub-process created. - '150': 'CMD_SHOW_CYTHON_WARNING', - '151': 'CMD_LOAD_FULL_VALUE', - '152': 'CMD_GET_THREAD_STACK', - '153': 'CMD_THREAD_DUMP_TO_STDERR', - '154': 'CMD_STOP_ON_START', - '155': 'CMD_GET_EXCEPTION_DETAILS', - '156': 'CMD_PYDEVD_JSON_CONFIG', - '157': 'CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION', - '158': 'CMD_THREAD_RESUME_SINGLE_NOTIFICATION', - - '159': 'CMD_STEP_OVER_MY_CODE', - '160': 'CMD_STEP_RETURN_MY_CODE', - - '161': 'CMD_SET_PY_EXCEPTION_JSON', - '162': 'CMD_SET_PATH_MAPPING_JSON', - '163': 'CMD_GET_SMART_STEP_INTO_VARIANTS', - - '200': 'CMD_REDIRECT_OUTPUT', - '201': 'CMD_GET_NEXT_STATEMENT_TARGETS', - '202': 'CMD_SET_PROJECT_ROOTS', - '203': 'CMD_MODULE_EVENT', - '204': 'CMD_PROCESS_EVENT', # DAP process event. - - '205': 'CMD_AUTHENTICATE', - - '206': 'CMD_STEP_INTO_COROUTINE', - - '207': 'CMD_LOAD_SOURCE_FROM_FRAME_ID', - - '501': 'CMD_VERSION', - '502': 'CMD_RETURN', - '503': 'CMD_SET_PROTOCOL', - '901': 'CMD_ERROR', + "101": "CMD_RUN", + "102": "CMD_LIST_THREADS", + "103": "CMD_THREAD_CREATE", + "104": "CMD_THREAD_KILL", + "105": "CMD_THREAD_SUSPEND", + "106": "CMD_THREAD_RUN", + "107": "CMD_STEP_INTO", + "108": "CMD_STEP_OVER", + "109": "CMD_STEP_RETURN", + "110": "CMD_GET_VARIABLE", + "111": "CMD_SET_BREAK", + "112": "CMD_REMOVE_BREAK", + "113": "CMD_EVALUATE_EXPRESSION", + "114": "CMD_GET_FRAME", + "115": "CMD_EXEC_EXPRESSION", + "116": "CMD_WRITE_TO_CONSOLE", + "117": "CMD_CHANGE_VARIABLE", + "118": "CMD_RUN_TO_LINE", + "119": "CMD_RELOAD_CODE", + "120": "CMD_GET_COMPLETIONS", + "121": "CMD_CONSOLE_EXEC", + "122": "CMD_ADD_EXCEPTION_BREAK", + "123": "CMD_REMOVE_EXCEPTION_BREAK", + "124": "CMD_LOAD_SOURCE", + "125": "CMD_ADD_DJANGO_EXCEPTION_BREAK", + "126": "CMD_REMOVE_DJANGO_EXCEPTION_BREAK", + "127": "CMD_SET_NEXT_STATEMENT", + "128": "CMD_SMART_STEP_INTO", + "129": "CMD_EXIT", + "130": "CMD_SIGNATURE_CALL_TRACE", + "131": "CMD_SET_PY_EXCEPTION", + "132": "CMD_GET_FILE_CONTENTS", + "133": "CMD_SET_PROPERTY_TRACE", + "134": "CMD_EVALUATE_CONSOLE_EXPRESSION", + "135": "CMD_RUN_CUSTOM_OPERATION", + "136": "CMD_GET_BREAKPOINT_EXCEPTION", + "137": "CMD_STEP_CAUGHT_EXCEPTION", + "138": "CMD_SEND_CURR_EXCEPTION_TRACE", + "139": "CMD_SEND_CURR_EXCEPTION_TRACE_PROCEEDED", + "140": "CMD_IGNORE_THROWN_EXCEPTION_AT", + "141": "CMD_ENABLE_DONT_TRACE", + "142": "CMD_SHOW_CONSOLE", + "143": "CMD_GET_ARRAY", + "144": "CMD_STEP_INTO_MY_CODE", + "145": "CMD_GET_CONCURRENCY_EVENT", + "146": "CMD_SHOW_RETURN_VALUES", + "147": "CMD_INPUT_REQUESTED", + "148": "CMD_GET_DESCRIPTION", + "149": "CMD_PROCESS_CREATED", # Note: this is actually a notification of a sub-process created. + "150": "CMD_SHOW_CYTHON_WARNING", + "151": "CMD_LOAD_FULL_VALUE", + "152": "CMD_GET_THREAD_STACK", + "153": "CMD_THREAD_DUMP_TO_STDERR", + "154": "CMD_STOP_ON_START", + "155": "CMD_GET_EXCEPTION_DETAILS", + "156": "CMD_PYDEVD_JSON_CONFIG", + "157": "CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION", + "158": "CMD_THREAD_RESUME_SINGLE_NOTIFICATION", + "159": "CMD_STEP_OVER_MY_CODE", + "160": "CMD_STEP_RETURN_MY_CODE", + "161": "CMD_SET_PY_EXCEPTION_JSON", + "162": "CMD_SET_PATH_MAPPING_JSON", + "163": "CMD_GET_SMART_STEP_INTO_VARIANTS", + "200": "CMD_REDIRECT_OUTPUT", + "201": "CMD_GET_NEXT_STATEMENT_TARGETS", + "202": "CMD_SET_PROJECT_ROOTS", + "203": "CMD_MODULE_EVENT", + "204": "CMD_PROCESS_EVENT", # DAP process event. + "205": "CMD_AUTHENTICATE", + "206": "CMD_STEP_INTO_COROUTINE", + "207": "CMD_LOAD_SOURCE_FROM_FRAME_ID", + "501": "CMD_VERSION", + "502": "CMD_RETURN", + "503": "CMD_SET_PROTOCOL", + "901": "CMD_ERROR", } def constant_to_str(constant): s = ID_TO_MEANING.get(str(constant)) if not s: - s = '' % (constant,) + s = "" % (constant,) return s diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py index b46c98b1e..8fb3e03ce 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_command_line_handling.py @@ -3,13 +3,13 @@ class ArgHandlerWithParam: - ''' + """ Handler for some arguments which needs a value - ''' + """ def __init__(self, arg_name, convert_val=None, default_val=None): self.arg_name = arg_name - self.arg_v_rep = '--%s' % (arg_name,) + self.arg_v_rep = "--%s" % (arg_name,) self.convert_val = convert_val self.default_val = default_val @@ -17,7 +17,7 @@ def to_argv(self, lst, setup): v = setup.get(self.arg_name) if v is not None and v != self.default_val: lst.append(self.arg_v_rep) - lst.append('%s' % (v,)) + lst.append("%s" % (v,)) def handle_argv(self, argv, i, setup): assert argv[i] == self.arg_v_rep @@ -32,13 +32,13 @@ def handle_argv(self, argv, i, setup): class ArgHandlerBool: - ''' + """ If a given flag is received, mark it as 'True' in setup. - ''' + """ def __init__(self, arg_name, default_val=False): self.arg_name = arg_name - self.arg_v_rep = '--%s' % (arg_name,) + self.arg_v_rep = "--%s" % (arg_name,) self.default_val = default_val def to_argv(self, lst, setup): @@ -56,42 +56,38 @@ def convert_ppid(ppid): ret = int(ppid) if ret != 0: if ret == os.getpid(): - raise AssertionError( - 'ppid passed is the same as the current process pid (%s)!' % (ret,)) + raise AssertionError("ppid passed is the same as the current process pid (%s)!" % (ret,)) return ret ACCEPTED_ARG_HANDLERS = [ - ArgHandlerWithParam('port', int, 0), - ArgHandlerWithParam('ppid', convert_ppid, 0), - ArgHandlerWithParam('vm_type'), - ArgHandlerWithParam('client'), - ArgHandlerWithParam('access-token'), - ArgHandlerWithParam('client-access-token'), - ArgHandlerWithParam('debug-mode'), - ArgHandlerWithParam('preimport'), - + ArgHandlerWithParam("port", int, 0), + ArgHandlerWithParam("ppid", convert_ppid, 0), + ArgHandlerWithParam("vm_type"), + ArgHandlerWithParam("client"), + ArgHandlerWithParam("access-token"), + ArgHandlerWithParam("client-access-token"), + ArgHandlerWithParam("debug-mode"), + ArgHandlerWithParam("preimport"), # Logging - ArgHandlerWithParam('log-file'), - ArgHandlerWithParam('log-level', int, None), - - ArgHandlerBool('server'), - ArgHandlerBool('multiproc'), # Used by PyCharm (reuses connection: ssh tunneling) - ArgHandlerBool('multiprocess'), # Used by PyDev (creates new connection to ide) - ArgHandlerBool('save-signatures'), - ArgHandlerBool('save-threading'), - ArgHandlerBool('save-asyncio'), - ArgHandlerBool('print-in-debugger-startup'), - ArgHandlerBool('cmd-line'), - ArgHandlerBool('module'), - ArgHandlerBool('skip-notify-stdin'), - + ArgHandlerWithParam("log-file"), + ArgHandlerWithParam("log-level", int, None), + ArgHandlerBool("server"), + ArgHandlerBool("multiproc"), # Used by PyCharm (reuses connection: ssh tunneling) + ArgHandlerBool("multiprocess"), # Used by PyDev (creates new connection to ide) + ArgHandlerBool("save-signatures"), + ArgHandlerBool("save-threading"), + ArgHandlerBool("save-asyncio"), + ArgHandlerBool("print-in-debugger-startup"), + ArgHandlerBool("cmd-line"), + ArgHandlerBool("module"), + ArgHandlerBool("skip-notify-stdin"), # The ones below should've been just one setting to specify the protocol, but for compatibility # reasons they're passed as a flag but are mutually exclusive. - ArgHandlerBool('json-dap'), # Protocol used by ptvsd to communicate with pydevd (a single json message in each read) - ArgHandlerBool('json-dap-http'), # Actual DAP (json messages over http protocol). - ArgHandlerBool('protocol-quoted-line'), # Custom protocol with quoted lines. - ArgHandlerBool('protocol-http'), # Custom protocol with http. + ArgHandlerBool("json-dap"), # Protocol used by ptvsd to communicate with pydevd (a single json message in each read) + ArgHandlerBool("json-dap-http"), # Actual DAP (json messages over http protocol). + ArgHandlerBool("protocol-quoted-line"), # Custom protocol with quoted lines. + ArgHandlerBool("protocol-http"), # Custom protocol with http. ] ARGV_REP_TO_HANDLER = {} @@ -101,16 +97,17 @@ def convert_ppid(ppid): def get_pydevd_file(): import pydevd + f = pydevd.__file__ - if f.endswith('.pyc'): + if f.endswith(".pyc"): f = f[:-1] - elif f.endswith('$py.class'): - f = f[:-len('$py.class')] + '.py' + elif f.endswith("$py.class"): + f = f[: -len("$py.class")] + ".py" return f def setup_to_argv(setup, skip_names=None): - ''' + """ :param dict setup: A dict previously gotten from process_command_line. @@ -118,7 +115,7 @@ def setup_to_argv(setup, skip_names=None): The names in the setup which shouldn't be converted to argv. :note: does not handle --file nor --DEBUG. - ''' + """ if skip_names is None: skip_names = set() ret = [get_pydevd_file()] @@ -130,13 +127,13 @@ def setup_to_argv(setup, skip_names=None): def process_command_line(argv): - """ parses the arguments. - removes our arguments from the command line """ + """parses the arguments. + removes our arguments from the command line""" setup = {} for handler in ACCEPTED_ARG_HANDLERS: setup[handler.arg_name] = handler.default_val - setup['file'] = '' - setup['qt-support'] = '' + setup["file"] = "" + setup["qt-support"] = "" initial_argv = tuple(argv) @@ -147,39 +144,38 @@ def process_command_line(argv): if handler is not None: handler.handle_argv(argv, i, setup) - elif argv[i].startswith('--qt-support'): + elif argv[i].startswith("--qt-support"): # The --qt-support is special because we want to keep backward compatibility: # Previously, just passing '--qt-support' meant that we should use the auto-discovery mode # whereas now, if --qt-support is passed, it should be passed as --qt-support=, where # mode can be one of 'auto', 'none', 'pyqt5', 'pyqt4', 'pyside', 'pyside2'. - if argv[i] == '--qt-support': - setup['qt-support'] = 'auto' + if argv[i] == "--qt-support": + setup["qt-support"] = "auto" - elif argv[i].startswith('--qt-support='): - qt_support = argv[i][len('--qt-support='):] - valid_modes = ('none', 'auto', 'pyqt5', 'pyqt4', 'pyside', 'pyside2') + elif argv[i].startswith("--qt-support="): + qt_support = argv[i][len("--qt-support=") :] + valid_modes = ("none", "auto", "pyqt5", "pyqt4", "pyside", "pyside2") if qt_support not in valid_modes: raise ValueError("qt-support mode invalid: " + qt_support) - if qt_support == 'none': + if qt_support == "none": # On none, actually set an empty string to evaluate to False. - setup['qt-support'] = '' + setup["qt-support"] = "" else: - setup['qt-support'] = qt_support + setup["qt-support"] = qt_support else: raise ValueError("Unexpected definition for qt-support flag: " + argv[i]) del argv[i] - elif argv[i] == '--file': + elif argv[i] == "--file": # --file is special because it's the last one (so, no handler for it). del argv[i] - setup['file'] = argv[i] + setup["file"] = argv[i] i = len(argv) # pop out, file is our last argument - elif argv[i] == '--DEBUG': - sys.stderr.write('pydevd: --DEBUG parameter deprecated. Use `--debug-level=3` instead.\n') + elif argv[i] == "--DEBUG": + sys.stderr.write("pydevd: --DEBUG parameter deprecated. Use `--debug-level=3` instead.\n") else: raise ValueError("Unexpected option: %s when processing: %s" % (argv[i], initial_argv)) return setup - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py index 95fc0543c..af5a8b99c 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_concurrency_logger.py @@ -17,12 +17,12 @@ threadingCurrentThread = threading.current_thread -DONT_TRACE_THREADING = ['threading.py', 'pydevd.py'] -INNER_METHODS = ['_stop'] -INNER_FILES = ['threading.py'] -THREAD_METHODS = ['start', '_stop', 'join'] -LOCK_METHODS = ['__init__', 'acquire', 'release', '__enter__', '__exit__'] -QUEUE_METHODS = ['put', 'get'] +DONT_TRACE_THREADING = ["threading.py", "pydevd.py"] +INNER_METHODS = ["_stop"] +INNER_FILES = ["threading.py"] +THREAD_METHODS = ["start", "_stop", "join"] +LOCK_METHODS = ["__init__", "acquire", "release", "__enter__", "__exit__"] +QUEUE_METHODS = ["put", "get"] # return time since epoch in milliseconds cur_time = lambda: int(round(time.time() * 1000000)) @@ -60,9 +60,9 @@ def get_text_list_for_frame(frame): # the variables are all gotten 'on-demand' # variables = pydevd_xml.frame_vars_to_xml(curFrame.f_locals) - variables = '' - cmdTextList.append('' % (quote(my_file, '/>_= \t'), myLine)) + variables = "" + cmdTextList.append('' % (quote(my_file, "/>_= \t"), myLine)) cmdTextList.append(variables) cmdTextList.append("") curFrame = curFrame.f_back @@ -76,9 +76,9 @@ def send_concurrency_message(event_class, time, name, thread_id, type, event, fi dbg = GlobalDebuggerHolder.global_dbg if dbg is None: return - cmdTextList = [''] + cmdTextList = [""] - cmdTextList.append('<' + event_class) + cmdTextList.append("<" + event_class) cmdTextList.append(' time="%s"' % pydevd_xml.make_valid_xml_value(str(time))) cmdTextList.append(' name="%s"' % pydevd_xml.make_valid_xml_value(name)) cmdTextList.append(' thread_id="%s"' % pydevd_xml.make_valid_xml_value(thread_id)) @@ -90,24 +90,24 @@ def send_concurrency_message(event_class, time, name, thread_id, type, event, fi cmdTextList.append(' event="%s"' % pydevd_xml.make_valid_xml_value(event)) cmdTextList.append(' file="%s"' % pydevd_xml.make_valid_xml_value(file)) cmdTextList.append(' line="%s"' % pydevd_xml.make_valid_xml_value(str(line))) - cmdTextList.append('>') + cmdTextList.append(">") cmdTextList += get_text_list_for_frame(frame) - cmdTextList.append('') + cmdTextList.append("") - text = ''.join(cmdTextList) + text = "".join(cmdTextList) if dbg.writer is not None: dbg.writer.add_command(NetCommand(145, 0, text)) def log_new_thread(global_debugger, t): event_time = cur_time() - global_debugger.thread_analyser.start_time - send_concurrency_message("threading_event", event_time, t.name, get_thread_id(t), "thread", - "start", "code_name", 0, None, parent=get_thread_id(t)) + send_concurrency_message( + "threading_event", event_time, t.name, get_thread_id(t), "thread", "start", "code_name", 0, None, parent=get_thread_id(t) + ) class ThreadingLogger: - def __init__(self): self.start_time = cur_time() @@ -141,15 +141,15 @@ def log_event(self, frame): if isinstance(self_obj, threading.Thread): if not hasattr(self_obj, "_pydev_run_patched"): wrap_attr(self_obj, "run") - if (method_name in THREAD_METHODS) and (back_base not in DONT_TRACE_THREADING or \ - (method_name in INNER_METHODS and back_base in INNER_FILES)): + if (method_name in THREAD_METHODS) and ( + back_base not in DONT_TRACE_THREADING or (method_name in INNER_METHODS and back_base in INNER_FILES) + ): thread_id = get_thread_id(self_obj) name = self_obj.getName() real_method = frame.f_code.co_name parent = None if real_method == "_stop": - if back_base in INNER_FILES and \ - back.f_code.co_name == "_wait_for_tstate_lock": + if back_base in INNER_FILES and back.f_code.co_name == "_wait_for_tstate_lock": back = back.f_back.f_back real_method = "stop" if hasattr(self_obj, "_pydev_join_called"): @@ -164,8 +164,18 @@ def log_event(self, frame): if real_method == "start": parent = get_thread_id(t) - send_concurrency_message("threading_event", event_time, name, thread_id, "thread", - real_method, back.f_code.co_filename, back.f_lineno, back, parent=parent) + send_concurrency_message( + "threading_event", + event_time, + name, + thread_id, + "thread", + real_method, + back.f_code.co_filename, + back.f_lineno, + back, + parent=parent, + ) # print(event_time, self_obj.getName(), thread_id, "thread", # real_method, back.f_code.co_filename, back.f_lineno) @@ -184,8 +194,18 @@ def log_event(self, frame): send_massage = False # we can't detect stop after join in Python 2 yet if send_massage: - send_concurrency_message("threading_event", event_time, "Thread", my_thread_id, "thread", - "stop", my_back.f_code.co_filename, my_back.f_lineno, my_back, parent=None) + send_concurrency_message( + "threading_event", + event_time, + "Thread", + my_thread_id, + "thread", + "stop", + my_back.f_code.co_filename, + my_back.f_lineno, + my_back, + parent=None, + ) if self_obj.__class__ == ObjectWrapper: if back_base in DONT_TRACE_THREADING: @@ -197,11 +217,19 @@ def log_event(self, frame): # back_back_base is the file, where the method was called froms return if method_name == "__init__": - send_concurrency_message("threading_event", event_time, t.name, get_thread_id(t), "lock", - method_name, back.f_code.co_filename, back.f_lineno, back, lock_id=str(id(frame.f_locals["self"]))) - if "attr" in frame.f_locals and \ - (frame.f_locals["attr"] in LOCK_METHODS or - frame.f_locals["attr"] in QUEUE_METHODS): + send_concurrency_message( + "threading_event", + event_time, + t.name, + get_thread_id(t), + "lock", + method_name, + back.f_code.co_filename, + back.f_lineno, + back, + lock_id=str(id(frame.f_locals["self"])), + ) + if "attr" in frame.f_locals and (frame.f_locals["attr"] in LOCK_METHODS or frame.f_locals["attr"] in QUEUE_METHODS): real_method = frame.f_locals["attr"] if method_name == "call_begin": real_method += "_begin" @@ -212,13 +240,33 @@ def log_event(self, frame): if real_method == "release_end": # do not log release end. Maybe use it later return - send_concurrency_message("threading_event", event_time, t.name, get_thread_id(t), "lock", - real_method, back.f_code.co_filename, back.f_lineno, back, lock_id=str(id(self_obj))) + send_concurrency_message( + "threading_event", + event_time, + t.name, + get_thread_id(t), + "lock", + real_method, + back.f_code.co_filename, + back.f_lineno, + back, + lock_id=str(id(self_obj)), + ) if real_method in ("put_end", "get_end"): # fake release for queue, cause we don't call it directly - send_concurrency_message("threading_event", event_time, t.name, get_thread_id(t), "lock", - "release", back.f_code.co_filename, back.f_lineno, back, lock_id=str(id(self_obj))) + send_concurrency_message( + "threading_event", + event_time, + t.name, + get_thread_id(t), + "lock", + "release", + back.f_code.co_filename, + back.f_lineno, + back, + lock_id=str(id(self_obj)), + ) # print(event_time, t.name, get_thread_id(t), "lock", # real_method, back.f_code.co_filename, back.f_lineno) @@ -227,7 +275,6 @@ def log_event(self, frame): class NameManager: - def __init__(self, name_prefix): self.tasks = {} self.last = 0 @@ -241,14 +288,13 @@ def get(self, id): class AsyncioLogger: - def __init__(self): self.task_mgr = NameManager("Task") self.coro_mgr = NameManager("Coro") self.start_time = cur_time() def get_task_id(self, frame): - asyncio = sys.modules.get('asyncio') + asyncio = sys.modules.get("asyncio") if asyncio is None: # If asyncio was not imported, there's nothing to be done # (also fixes issue where multiprocessing is imported due @@ -275,7 +321,7 @@ def log_event(self, frame): if not hasattr(frame, "f_back") or frame.f_back is None: return - asyncio = sys.modules.get('asyncio') + asyncio = sys.modules.get("asyncio") if asyncio is None: # If asyncio was not imported, there's nothing to be done # (also fixes issue where multiprocessing is imported due @@ -291,15 +337,25 @@ def log_event(self, frame): if method_name == "set_result": task_id = id(self_obj) task_name = self.task_mgr.get(str(task_id)) - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "thread", "stop", frame.f_code.co_filename, - frame.f_lineno, frame) + send_concurrency_message( + "asyncio_event", event_time, task_name, task_name, "thread", "stop", frame.f_code.co_filename, frame.f_lineno, frame + ) method_name = back.f_code.co_name if method_name == "__init__": task_id = id(self_obj) task_name = self.task_mgr.get(str(task_id)) - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "thread", "start", frame.f_code.co_filename, - frame.f_lineno, frame) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "thread", + "start", + frame.f_code.co_filename, + frame.f_lineno, + frame, + ) method_name = frame.f_code.co_name if isinstance(self_obj, asyncio.Lock): @@ -309,8 +365,18 @@ def log_event(self, frame): if method_name == "acquire": if not self_obj._waiters and not self_obj.locked(): - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - method_name + "_begin", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + method_name + "_begin", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) if self_obj.locked(): method_name += "_begin" else: @@ -318,8 +384,18 @@ def log_event(self, frame): elif method_name == "release": method_name += "_end" - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - method_name, frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + method_name, + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) if isinstance(self_obj, asyncio.Queue): if method_name in ("put", "get", "_put", "_get"): @@ -327,20 +403,80 @@ def log_event(self, frame): task_name = self.task_mgr.get(str(task_id)) if method_name == "put": - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "acquire_begin", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "acquire_begin", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) elif method_name == "_put": - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "acquire_end", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "release", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "acquire_end", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "release", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) elif method_name == "get": back = frame.f_back if back.f_code.co_name != "send": - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "acquire_begin", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "acquire_begin", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) else: - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "acquire_end", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) - send_concurrency_message("asyncio_event", event_time, task_name, task_name, "lock", - "release", frame.f_code.co_filename, frame.f_lineno, frame, lock_id=str(id(self_obj))) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "acquire_end", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) + send_concurrency_message( + "asyncio_event", + event_time, + task_name, + task_name, + "lock", + "release", + frame.f_code.co_filename, + frame.f_lineno, + frame, + lock_id=str(id(self_obj)), + ) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py index 526bb0c15..e71f3e591 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_concurrency_analyser/pydevd_thread_wrappers.py @@ -2,7 +2,6 @@ def wrapper(fun): - def pydev_after_run_call(): pass @@ -20,11 +19,11 @@ def wrap_attr(obj, attr): class ObjectWrapper(object): - def __init__(self, obj): self.wrapped_object = obj try: import functools + functools.update_wrapper(self, obj) except: pass @@ -62,7 +61,6 @@ def __exit__(self, exc_type, exc_val, exc_tb): def factory_wrapper(fun): - def inner(*args, **kwargs): obj = fun(*args, **kwargs) return ObjectWrapper(obj) @@ -80,4 +78,5 @@ def wrap_threads(): # queue patching import queue # @UnresolvedImport + queue.Queue = factory_wrapper(queue.Queue) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py index 925e010a5..9221f68cc 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_console.py @@ -1,5 +1,5 @@ -'''An helper file for the pydev debugger (REPL) console -''' +"""An helper file for the pydev debugger (REPL) console +""" import sys import traceback from _pydevd_bundle.pydevconsole_code import InteractiveConsole, _EvalAwaitInNewEventLoop @@ -18,12 +18,11 @@ CONSOLE_ERROR = "error" -#======================================================================================================================= +# ======================================================================================================================= # ConsoleMessage -#======================================================================================================================= +# ======================================================================================================================= class ConsoleMessage: - """Console Messages - """ + """Console Messages""" def __init__(self): self.more = False @@ -31,8 +30,7 @@ def __init__(self): self.console_messages = [] def add_console_message(self, message_type, message): - """add messages in the console_messages list - """ + """add messages in the console_messages list""" for m in message.split("\n"): if m.strip(): self.console_messages.append((message_type, m)) @@ -53,30 +51,29 @@ def to_xml(self): """ makeValid = make_valid_xml_value - xml = '%s' % (self.more) + xml = "%s" % (self.more) for message_type, message in self.console_messages: xml += '<%s message="%s">' % (message_type, makeValid(message), message_type) - xml += '' + xml += "" return xml -#======================================================================================================================= +# ======================================================================================================================= # _DebugConsoleStdIn -#======================================================================================================================= +# ======================================================================================================================= class _DebugConsoleStdIn(BaseStdIn): - @overrides(BaseStdIn.readline) def readline(self, *args, **kwargs): - sys.stderr.write('Warning: Reading from stdin is still not supported in this console.\n') - return '\n' + sys.stderr.write("Warning: Reading from stdin is still not supported in this console.\n") + return "\n" -#======================================================================================================================= +# ======================================================================================================================= # DebugConsole -#======================================================================================================================= +# ======================================================================================================================= class DebugConsole(InteractiveConsole, BaseInterpreterInterface): """Wrapper around code.InteractiveConsole, in order to send errors and outputs to the debug console @@ -159,7 +156,7 @@ def runcode(self, code): updated_locals = None is_async = False - if hasattr(inspect, 'CO_COROUTINE'): + if hasattr(inspect, "CO_COROUTINE"): is_async = inspect.CO_COROUTINE & code.co_flags == inspect.CO_COROUTINE if is_async: @@ -194,11 +191,10 @@ def get_namespace(self): return dbg_namespace -#======================================================================================================================= +# ======================================================================================================================= # InteractiveConsoleCache -#======================================================================================================================= +# ======================================================================================================================= class InteractiveConsoleCache: - thread_id = None frame_id = None interactive_console_instance = None @@ -263,8 +259,7 @@ def get_description(frame, thread_id, frame_id, expression): def get_completions(frame, act_tok): - """ fetch all completions, create xml for the same + """fetch all completions, create xml for the same return the completions xml """ return _pydev_completer.generate_completions_as_xml(frame, act_tok) - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py index 01d1951f5..4ebe83ed5 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_constants.py @@ -1,6 +1,6 @@ -''' +""" This module holds the constants used for specifying the states of the debugger. -''' +""" from __future__ import nested_scopes import platform import weakref @@ -28,6 +28,7 @@ # Preload codecs to avoid imports to them later on which can potentially halt the debugger. import codecs as _codecs + for _codec in ["ascii", "utf8", "utf-8", "latin1", "latin-1", "idna"]: _codecs.lookup(_codec) @@ -47,22 +48,22 @@ class DebugInfoHolder: # In PyPy " ..." can appear and should be ignored for the user. # has special heuristics to know whether it should be traced or not (it's part of # user code when it's the used in python -c and part of the library otherwise). # Any filename that starts with these strings is considered user (project) code. Note # that files for which we have a source mapping are also considered as a part of the project. -USER_CODE_BASENAMES_STARTING_WITH = (' (2 ** 32) +IS_64BIT_PROCESS = sys.maxsize > (2**32) IS_JYTHON = pydevd_vm_type.get_vm_type() == pydevd_vm_type.PydevdVmType.JYTHON -IS_PYPY = platform.python_implementation() == 'PyPy' +IS_PYPY = platform.python_implementation() == "PyPy" if IS_JYTHON: import java.lang.System # @UnresolvedImport + IS_WINDOWS = java.lang.System.getProperty("os.name").lower().startswith("windows") -USE_CUSTOM_SYS_CURRENT_FRAMES = not hasattr(sys, '_current_frames') or IS_PYPY +USE_CUSTOM_SYS_CURRENT_FRAMES = not hasattr(sys, "_current_frames") or IS_PYPY USE_CUSTOM_SYS_CURRENT_FRAMES_MAP = USE_CUSTOM_SYS_CURRENT_FRAMES and (IS_PYPY or IS_IRONPYTHON) if USE_CUSTOM_SYS_CURRENT_FRAMES: - # Some versions of Jython don't have it (but we can provide a replacement) if IS_JYTHON: from java.lang import NoSuchFieldException from org.python.core import ThreadStateMapping + try: - cachedThreadState = ThreadStateMapping.getDeclaredField('globalThreadStates') # Dev version + cachedThreadState = ThreadStateMapping.getDeclaredField("globalThreadStates") # Dev version except NoSuchFieldException: - cachedThreadState = ThreadStateMapping.getDeclaredField('cachedThreadState') # Release Jython 2.7.0 + cachedThreadState = ThreadStateMapping.getDeclaredField("cachedThreadState") # Release Jython 2.7.0 cachedThreadState.accessible = True thread_states = cachedThreadState.get(ThreadStateMapping) @@ -148,7 +151,7 @@ def _current_frames(): return constructed_tid_to_last_frame else: - raise RuntimeError('Unable to proceed (sys._current_frames not available in this Python implementation).') + raise RuntimeError("Unable to proceed (sys._current_frames not available in this Python implementation).") else: _current_frames = sys._current_frames @@ -156,38 +159,54 @@ def _current_frames(): CYTHON_SUPPORTED = False python_implementation = platform.python_implementation() -if python_implementation == 'CPython': +if python_implementation == "CPython": # Only available for CPython! CYTHON_SUPPORTED = True -#======================================================================================================================= +# ======================================================================================================================= # Python 3? -#======================================================================================================================= +# ======================================================================================================================= IS_PY36_OR_GREATER = sys.version_info >= (3, 6) IS_PY37_OR_GREATER = sys.version_info >= (3, 7) IS_PY38_OR_GREATER = sys.version_info >= (3, 8) IS_PY39_OR_GREATER = sys.version_info >= (3, 9) IS_PY310_OR_GREATER = sys.version_info >= (3, 10) IS_PY311_OR_GREATER = sys.version_info >= (3, 11) +IS_PY312_OR_GREATER = sys.version_info >= (3, 12) + +# Not currently supported in Python 3.12. +SUPPORT_ATTACH_TO_PID = not IS_PY312_OR_GREATER def version_str(v): - return '.'.join((str(x) for x in v[:3])) + ''.join((str(x) for x in v[3:])) + return ".".join((str(x) for x in v[:3])) + "".join((str(x) for x in v[3:])) PY_VERSION_STR = version_str(sys.version_info) try: PY_IMPL_VERSION_STR = version_str(sys.implementation.version) except AttributeError: - PY_IMPL_VERSION_STR = '' + PY_IMPL_VERSION_STR = "" try: PY_IMPL_NAME = sys.implementation.name except AttributeError: - PY_IMPL_NAME = '' - -ENV_TRUE_LOWER_VALUES = ('yes', 'true', '1') -ENV_FALSE_LOWER_VALUES = ('no', 'false', '0') + PY_IMPL_NAME = "" + +ENV_TRUE_LOWER_VALUES = ("yes", "true", "1") +ENV_FALSE_LOWER_VALUES = ("no", "false", "0") + +PYDEVD_USE_SYS_MONITORING = IS_PY312_OR_GREATER and hasattr(sys, "monitoring") +if PYDEVD_USE_SYS_MONITORING: # Default gotten, let's see if it was somehow customize by the user. + _use_sys_monitoring_env_var = os.getenv("PYDEVD_USE_SYS_MONITORING", "").lower() + if _use_sys_monitoring_env_var: + # Check if the user specified something. + if _use_sys_monitoring_env_var in ENV_FALSE_LOWER_VALUES: + PYDEVD_USE_SYS_MONITORING = False + elif _use_sys_monitoring_env_var in ENV_TRUE_LOWER_VALUES: + PYDEVD_USE_SYS_MONITORING = True + else: + raise RuntimeError("Unrecognized value for PYDEVD_USE_SYS_MONITORING: %s" % (_use_sys_monitoring_env_var,)) def is_true_in_env(env_key): @@ -198,7 +217,7 @@ def is_true_in_env(env_key): return True return False else: - return os.getenv(env_key, '').lower() in ENV_TRUE_LOWER_VALUES + return os.getenv(env_key, "").lower() in ENV_TRUE_LOWER_VALUES def as_float_in_env(env_key, default): @@ -208,9 +227,7 @@ def as_float_in_env(env_key, default): try: return float(value) except Exception: - raise RuntimeError( - 'Error: expected the env variable: %s to be set to a float value. Found: %s' % ( - env_key, value)) + raise RuntimeError("Error: expected the env variable: %s to be set to a float value. Found: %s" % (env_key, value)) def as_int_in_env(env_key, default): @@ -220,52 +237,52 @@ def as_int_in_env(env_key, default): try: return int(value) except Exception: - raise RuntimeError( - 'Error: expected the env variable: %s to be set to a int value. Found: %s' % ( - env_key, value)) + raise RuntimeError("Error: expected the env variable: %s to be set to a int value. Found: %s" % (env_key, value)) # If true in env, use gevent mode. -SUPPORT_GEVENT = is_true_in_env('GEVENT_SUPPORT') +SUPPORT_GEVENT = is_true_in_env("GEVENT_SUPPORT") # Opt-in support to show gevent paused greenlets. False by default because if too many greenlets are # paused the UI can slow-down (i.e.: if 1000 greenlets are paused, each one would be shown separate # as a different thread, but if the UI isn't optimized for that the experience is lacking...). -GEVENT_SHOW_PAUSED_GREENLETS = is_true_in_env('GEVENT_SHOW_PAUSED_GREENLETS') +GEVENT_SHOW_PAUSED_GREENLETS = is_true_in_env("GEVENT_SHOW_PAUSED_GREENLETS") -DISABLE_FILE_VALIDATION = is_true_in_env('PYDEVD_DISABLE_FILE_VALIDATION') +DISABLE_FILE_VALIDATION = is_true_in_env("PYDEVD_DISABLE_FILE_VALIDATION") GEVENT_SUPPORT_NOT_SET_MSG = os.getenv( - 'GEVENT_SUPPORT_NOT_SET_MSG', - 'It seems that the gevent monkey-patching is being used.\n' - 'Please set an environment variable with:\n' - 'GEVENT_SUPPORT=True\n' - 'to enable gevent support in the debugger.' + "GEVENT_SUPPORT_NOT_SET_MSG", + "It seems that the gevent monkey-patching is being used.\n" + "Please set an environment variable with:\n" + "GEVENT_SUPPORT=True\n" + "to enable gevent support in the debugger.", ) USE_LIB_COPY = SUPPORT_GEVENT -INTERACTIVE_MODE_AVAILABLE = sys.platform in ('darwin', 'win32') or os.getenv('DISPLAY') is not None +INTERACTIVE_MODE_AVAILABLE = sys.platform in ("darwin", "win32") or os.getenv("DISPLAY") is not None # If true in env, forces cython to be used (raises error if not available). # If false in env, disables it. # If not specified, uses default heuristic to determine if it should be loaded. -USE_CYTHON_FLAG = os.getenv('PYDEVD_USE_CYTHON') +USE_CYTHON_FLAG = os.getenv("PYDEVD_USE_CYTHON") if USE_CYTHON_FLAG is not None: USE_CYTHON_FLAG = USE_CYTHON_FLAG.lower() if USE_CYTHON_FLAG not in ENV_TRUE_LOWER_VALUES and USE_CYTHON_FLAG not in ENV_FALSE_LOWER_VALUES: - raise RuntimeError('Unexpected value for PYDEVD_USE_CYTHON: %s (enable with one of: %s, disable with one of: %s)' % ( - USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES, ENV_FALSE_LOWER_VALUES)) + raise RuntimeError( + "Unexpected value for PYDEVD_USE_CYTHON: %s (enable with one of: %s, disable with one of: %s)" + % (USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES, ENV_FALSE_LOWER_VALUES) + ) else: if not CYTHON_SUPPORTED: - USE_CYTHON_FLAG = 'no' + USE_CYTHON_FLAG = "no" # If true in env, forces frame eval to be used (raises error if not available). # If false in env, disables it. # If not specified, uses default heuristic to determine if it should be loaded. -PYDEVD_USE_FRAME_EVAL = os.getenv('PYDEVD_USE_FRAME_EVAL', '').lower() +PYDEVD_USE_FRAME_EVAL = os.getenv("PYDEVD_USE_FRAME_EVAL", "").lower() # Values used to determine how much container items will be shown. # PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS: @@ -281,48 +298,48 @@ def as_int_in_env(env_key, default): # PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS # - Defines the maximum number of items for dicts and sets. # -PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS = as_int_in_env('PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS', 100) -PYDEVD_CONTAINER_BUCKET_SIZE = as_int_in_env('PYDEVD_CONTAINER_BUCKET_SIZE', 1000) -PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS = as_int_in_env('PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS', 500) -PYDEVD_CONTAINER_NUMPY_MAX_ITEMS = as_int_in_env('PYDEVD_CONTAINER_NUMPY_MAX_ITEMS', 500) +PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS = as_int_in_env("PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS", 100) +PYDEVD_CONTAINER_BUCKET_SIZE = as_int_in_env("PYDEVD_CONTAINER_BUCKET_SIZE", 1000) +PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS = as_int_in_env("PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS", 500) +PYDEVD_CONTAINER_NUMPY_MAX_ITEMS = as_int_in_env("PYDEVD_CONTAINER_NUMPY_MAX_ITEMS", 500) -PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING = is_true_in_env('PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING') +PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING = is_true_in_env("PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING") # If specified in PYDEVD_IPYTHON_CONTEXT it must be a string with the basename # and then the name of 2 methods in which the evaluate is done. -PYDEVD_IPYTHON_CONTEXT = ('interactiveshell.py', 'run_code', 'run_ast_nodes') -_ipython_ctx = os.getenv('PYDEVD_IPYTHON_CONTEXT') +PYDEVD_IPYTHON_CONTEXT = ("interactiveshell.py", "run_code", "run_ast_nodes") +_ipython_ctx = os.getenv("PYDEVD_IPYTHON_CONTEXT") if _ipython_ctx: - PYDEVD_IPYTHON_CONTEXT = tuple(x.strip() for x in _ipython_ctx.split(',')) - assert len(PYDEVD_IPYTHON_CONTEXT) == 3, 'Invalid PYDEVD_IPYTHON_CONTEXT: %s' % (_ipython_ctx,) + PYDEVD_IPYTHON_CONTEXT = tuple(x.strip() for x in _ipython_ctx.split(",")) + assert len(PYDEVD_IPYTHON_CONTEXT) == 3, "Invalid PYDEVD_IPYTHON_CONTEXT: %s" % (_ipython_ctx,) # Use to disable loading the lib to set tracing to all threads (default is using heuristics based on where we're running). -LOAD_NATIVE_LIB_FLAG = os.getenv('PYDEVD_LOAD_NATIVE_LIB', '').lower() +LOAD_NATIVE_LIB_FLAG = os.getenv("PYDEVD_LOAD_NATIVE_LIB", "").lower() -LOG_TIME = os.getenv('PYDEVD_LOG_TIME', 'true').lower() in ENV_TRUE_LOWER_VALUES +LOG_TIME = os.getenv("PYDEVD_LOG_TIME", "true").lower() in ENV_TRUE_LOWER_VALUES -SHOW_COMPILE_CYTHON_COMMAND_LINE = is_true_in_env('PYDEVD_SHOW_COMPILE_CYTHON_COMMAND_LINE') +SHOW_COMPILE_CYTHON_COMMAND_LINE = is_true_in_env("PYDEVD_SHOW_COMPILE_CYTHON_COMMAND_LINE") -LOAD_VALUES_ASYNC = is_true_in_env('PYDEVD_LOAD_VALUES_ASYNC') +LOAD_VALUES_ASYNC = is_true_in_env("PYDEVD_LOAD_VALUES_ASYNC") DEFAULT_VALUE = "__pydevd_value_async" ASYNC_EVAL_TIMEOUT_SEC = 60 NEXT_VALUE_SEPARATOR = "__pydev_val__" -BUILTINS_MODULE_NAME = 'builtins' +BUILTINS_MODULE_NAME = "builtins" # Pandas customization. -PANDAS_MAX_ROWS = as_int_in_env('PYDEVD_PANDAS_MAX_ROWS', 60) -PANDAS_MAX_COLS = as_int_in_env('PYDEVD_PANDAS_MAX_COLS', 10) -PANDAS_MAX_COLWIDTH = as_int_in_env('PYDEVD_PANDAS_MAX_COLWIDTH', 50) +PANDAS_MAX_ROWS = as_int_in_env("PYDEVD_PANDAS_MAX_ROWS", 60) +PANDAS_MAX_COLS = as_int_in_env("PYDEVD_PANDAS_MAX_COLS", 10) +PANDAS_MAX_COLWIDTH = as_int_in_env("PYDEVD_PANDAS_MAX_COLWIDTH", 50) # If getting an attribute or computing some value is too slow, let the user know if the given timeout elapses. -PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT = as_float_in_env('PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT', 0.50) +PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT = as_float_in_env("PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT", 0.50) # This timeout is used to track the time to send a message saying that the evaluation # is taking too long and possible mitigations. -PYDEVD_WARN_EVALUATION_TIMEOUT = as_float_in_env('PYDEVD_WARN_EVALUATION_TIMEOUT', 3.) +PYDEVD_WARN_EVALUATION_TIMEOUT = as_float_in_env("PYDEVD_WARN_EVALUATION_TIMEOUT", 3.0) # If True in env shows a thread dump when the evaluation times out. -PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT = is_true_in_env('PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT') +PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT = is_true_in_env("PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT") # This timeout is used only when the mode that all threads are stopped/resumed at once is used # (i.e.: multi_threads_single_notification) @@ -334,29 +351,31 @@ def as_int_in_env(env_key, default): # (without any notification) when the evaluation is started and pause all threads when the # evaluation is finished. A positive value will run run all threads after the timeout # elapses. -PYDEVD_UNBLOCK_THREADS_TIMEOUT = as_float_in_env('PYDEVD_UNBLOCK_THREADS_TIMEOUT', -1.) +PYDEVD_UNBLOCK_THREADS_TIMEOUT = as_float_in_env("PYDEVD_UNBLOCK_THREADS_TIMEOUT", -1.0) # Timeout to interrupt a thread (so, if some evaluation doesn't finish until this # timeout, the thread doing the evaluation is interrupted). # A value <= 0 means this is disabled. # See: _pydevd_bundle.pydevd_timeout.create_interrupt_this_thread_callback for details # on how the thread interruption works (there are some caveats related to it). -PYDEVD_INTERRUPT_THREAD_TIMEOUT = as_float_in_env('PYDEVD_INTERRUPT_THREAD_TIMEOUT', -1) +PYDEVD_INTERRUPT_THREAD_TIMEOUT = as_float_in_env("PYDEVD_INTERRUPT_THREAD_TIMEOUT", -1) # If PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS is set to False, the patching to hide pydevd threads won't be applied. -PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS = os.getenv('PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS', 'true').lower() in ENV_TRUE_LOWER_VALUES +PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS = ( + os.getenv("PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS", "true").lower() in ENV_TRUE_LOWER_VALUES +) -EXCEPTION_TYPE_UNHANDLED = 'UNHANDLED' -EXCEPTION_TYPE_USER_UNHANDLED = 'USER_UNHANDLED' -EXCEPTION_TYPE_HANDLED = 'HANDLED' +EXCEPTION_TYPE_UNHANDLED = "UNHANDLED" +EXCEPTION_TYPE_USER_UNHANDLED = "USER_UNHANDLED" +EXCEPTION_TYPE_HANDLED = "HANDLED" -SHOW_DEBUG_INFO_ENV = is_true_in_env(('PYCHARM_DEBUG', 'PYDEV_DEBUG', 'PYDEVD_DEBUG')) +SHOW_DEBUG_INFO_ENV = is_true_in_env(("PYCHARM_DEBUG", "PYDEV_DEBUG", "PYDEVD_DEBUG")) if SHOW_DEBUG_INFO_ENV: # show debug info before the debugger start DebugInfoHolder.DEBUG_TRACE_LEVEL = 3 -DebugInfoHolder.PYDEVD_DEBUG_FILE = os.getenv('PYDEVD_DEBUG_FILE') +DebugInfoHolder.PYDEVD_DEBUG_FILE = os.getenv("PYDEVD_DEBUG_FILE") def protect_libraries_from_patching(): @@ -365,9 +384,23 @@ def protect_libraries_from_patching(): `_pydev_saved_modules` in order to save their original copies there. After that we can use these saved modules within the debugger to protect them from patching by external libraries (e.g. gevent). """ - patched = ['threading', 'thread', '_thread', 'time', 'socket', 'queue', 'select', - 'xmlrpclib', 'SimpleXMLRPCServer', 'BaseHTTPServer', 'SocketServer', - 'xmlrpc.client', 'xmlrpc.server', 'http.server', 'socketserver'] + patched = [ + "threading", + "thread", + "_thread", + "time", + "socket", + "queue", + "select", + "xmlrpclib", + "SimpleXMLRPCServer", + "BaseHTTPServer", + "SocketServer", + "xmlrpc.client", + "xmlrpc.server", + "http.server", + "socketserver", + ] for name in patched: try: @@ -375,8 +408,7 @@ def protect_libraries_from_patching(): except: pass - patched_modules = dict([(k, v) for k, v in sys.modules.items() - if k in patched]) + patched_modules = dict([(k, v) for k, v in sys.modules.items() if k in patched]) for name in patched_modules: del sys.modules[name] @@ -406,7 +438,7 @@ def ForkSafeLock(rlock=False): else: class ForkSafeLock(object): - ''' + """ A lock which is fork-safe (when a fork is done, `pydevd_constants.after_fork()` should be called to reset the locks in the new process to avoid deadlocks from a lock which was locked during the fork). @@ -429,7 +461,7 @@ class ForkSafeLock(object): `ForkSafeLock.release` instead of the context manager (as acquire/release are bound to the original implementation, whereas __enter__/__exit__ is not due to Python limitations). - ''' + """ def __init__(self, rlock=False): self._rlock = rlock @@ -454,9 +486,9 @@ def _init(self): def after_fork(): - ''' + """ Must be called after a fork operation (will reset the ForkSafeLock). - ''' + """ global _fork_safe_locks locks = _fork_safe_locks[:] _fork_safe_locks = [] @@ -483,7 +515,6 @@ def filter_all_warnings(): def silence_warnings_decorator(func): - @functools.wraps(func) def new_func(*args, **kwargs): with filter_all_warnings(): @@ -493,8 +524,8 @@ def new_func(*args, **kwargs): def sorted_dict_repr(d): - s = sorted(d.items(), key=lambda x:str(x[0])) - return '{' + ', '.join(('%r: %r' % x) for x in s) + '}' + s = sorted(d.items(), key=lambda x: str(x[0])) + return "{" + ", ".join(("%r: %r" % x) for x in s) + "}" def iter_chars(b): @@ -502,11 +533,11 @@ def iter_chars(b): # changed that behavior so that when iterating bytes we actually get ints! if isinstance(b, bytes): # i.e.: do something as struct.unpack('3c', b) - return iter(struct.unpack(str(len(b)) + 'c', b)) + return iter(struct.unpack(str(len(b)) + "c", b)) return iter(b) -if IS_JYTHON: +if IS_JYTHON or PYDEVD_USE_SYS_MONITORING: def NO_FTRACE(frame, event, arg): return None @@ -522,9 +553,9 @@ def _temp_trace(frame, event, arg): sys.settrace(_temp_trace) def _check_ftrace_set_none(): - ''' + """ Will throw an error when executing a line event - ''' + """ sys._getframe().f_trace = None _line_event = 1 _line_event = 2 @@ -552,9 +583,9 @@ def NO_FTRACE(frame, event, arg): sys.settrace(_curr_trace) -#======================================================================================================================= +# ======================================================================================================================= # get_pid -#======================================================================================================================= +# ======================================================================================================================= def get_pid(): try: return os.getpid() @@ -562,17 +593,18 @@ def get_pid(): try: # Jython does not have it! import java.lang.management.ManagementFactory # @UnresolvedImport -- just for jython + pid = java.lang.management.ManagementFactory.getRuntimeMXBean().getName() - return pid.replace('@', '_') + return pid.replace("@", "_") except: # ok, no pid available (will be unable to debug multiple processes) - return '000001' + return "000001" def clear_cached_thread_id(thread): with _thread_id_lock: try: - if thread.__pydevd_id__ != 'console_main': + if thread.__pydevd_id__ != "console_main": # The console_main is a special thread id used in the console and its id should never be reset # (otherwise we may no longer be able to get its variables -- see: https://www.brainwy.com/tracker/PyDev/776). del thread.__pydevd_id__ @@ -587,7 +619,7 @@ def clear_cached_thread_id(thread): def _get_or_compute_thread_id_with_lock(thread, is_current_thread): with _thread_id_lock: # We do a new check with the lock in place just to be sure that nothing changed - tid = getattr(thread, '__pydevd_id__', None) + tid = getattr(thread, "__pydevd_id__", None) if tid is not None: return tid @@ -596,7 +628,7 @@ def _get_or_compute_thread_id_with_lock(thread, is_current_thread): # Note: don't use thread.ident because a new thread may have the # same id from an old thread. pid = get_pid() - tid = 'pid_%s_id_%s' % (pid, id(thread)) + tid = "pid_%s_id_%s" % (pid, id(thread)) thread.__pydevd_id__ = tid @@ -604,11 +636,11 @@ def _get_or_compute_thread_id_with_lock(thread, is_current_thread): def get_current_thread_id(thread): - ''' + """ Note: the difference from get_current_thread_id to get_thread_id is that for the current thread we can get the thread id while the thread.ident is still not set in the Thread instance. - ''' + """ try: # Fast path without getting lock. tid = thread.__pydevd_id__ @@ -643,9 +675,9 @@ def set_thread_id(thread, thread_id): thread.__pydevd_id__ = thread_id -#======================================================================================================================= +# ======================================================================================================================= # Null -#======================================================================================================================= +# ======================================================================================================================= class Null: """ Gotten from: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/68205 @@ -664,7 +696,7 @@ def __exit__(self, *args, **kwargs): return self def __getattr__(self, mname): - if len(mname) > 4 and mname[:2] == '__' and mname[-2:] == '__': + if len(mname) > 4 and mname[:2] == "__" and mname[-2:] == "__": # Don't pretend to implement special method names. raise AttributeError(mname) return self @@ -705,7 +737,6 @@ def __iter__(self): class KeyifyList(object): - def __init__(self, inner, key): self.inner = inner self.key = key @@ -718,7 +749,7 @@ def __getitem__(self, k): def call_only_once(func): - ''' + """ To be used as a decorator @call_only_once @@ -728,7 +759,7 @@ def func(): Actually, in PyDev it must be called as: func = call_only_once(func) to support older versions of Python. - ''' + """ def new_func(*args, **kwargs): if not new_func._called: @@ -741,26 +772,26 @@ def new_func(*args, **kwargs): # Protocol where each line is a new message (text is quoted to prevent new lines). # payload is xml -QUOTED_LINE_PROTOCOL = 'quoted-line' -ARGUMENT_QUOTED_LINE_PROTOCOL = 'protocol-quoted-line' +QUOTED_LINE_PROTOCOL = "quoted-line" +ARGUMENT_QUOTED_LINE_PROTOCOL = "protocol-quoted-line" # Uses http protocol to provide a new message. # i.e.: Content-Length:xxx\r\n\r\npayload # payload is xml -HTTP_PROTOCOL = 'http' -ARGUMENT_HTTP_PROTOCOL = 'protocol-http' +HTTP_PROTOCOL = "http" +ARGUMENT_HTTP_PROTOCOL = "protocol-http" # Message is sent without any header. # payload is json -JSON_PROTOCOL = 'json' -ARGUMENT_JSON_PROTOCOL = 'json-dap' +JSON_PROTOCOL = "json" +ARGUMENT_JSON_PROTOCOL = "json-dap" # Same header as the HTTP_PROTOCOL # payload is json -HTTP_JSON_PROTOCOL = 'http_json' -ARGUMENT_HTTP_JSON_PROTOCOL = 'json-dap-http' +HTTP_JSON_PROTOCOL = "http_json" +ARGUMENT_HTTP_JSON_PROTOCOL = "json-dap-http" -ARGUMENT_PPID = 'ppid' +ARGUMENT_PPID = "ppid" class _GlobalSettings: @@ -769,8 +800,7 @@ class _GlobalSettings: def set_protocol(protocol): expected = (HTTP_PROTOCOL, QUOTED_LINE_PROTOCOL, JSON_PROTOCOL, HTTP_JSON_PROTOCOL) - assert protocol in expected, 'Protocol (%s) should be one of: %s' % ( - protocol, expected) + assert protocol in expected, "Protocol (%s) should be one of: %s" % (protocol, expected) _GlobalSettings.protocol = protocol @@ -784,9 +814,10 @@ def is_json_protocol(): class GlobalDebuggerHolder: - ''' - Holder for the global debugger. - ''' + """ + Holder for the global debugger. + """ + global_dbg = None # Note: don't rename (the name is used in our attach to process) @@ -801,7 +832,6 @@ def set_global_debugger(dbg): GlobalDebuggerHolder.global_dbg = dbg -if __name__ == '__main__': +if __name__ == "__main__": if Null(): - sys.stdout.write('here\n') - + sys.stdout.write("here\n") diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py index 66e400fbf..65c83c458 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_custom_frames.py @@ -8,7 +8,6 @@ class CustomFramesContainer: - # Actual Values initialized later on. custom_frames_lock = None # : :type custom_frames_lock: threading.Lock @@ -20,7 +19,6 @@ class CustomFramesContainer: def custom_frames_container_init(): # Note: no staticmethod on jython 2.1 (so, use free-function) - CustomFramesContainer.custom_frames_lock = ForkSafeLock() # custom_frames can only be accessed if properly locked with custom_frames_lock! @@ -42,7 +40,6 @@ def custom_frames_container_init(): # Note: no staticmethod on jython 2.1 (so, class CustomFrame: - def __init__(self, name, frame, thread_id): # 0 = string with the representation of that frame self.name = name @@ -58,7 +55,7 @@ def __init__(self, name, frame, thread_id): def add_custom_frame(frame, name, thread_id): - ''' + """ It's possible to show paused frames by adding a custom frame through this API (it's intended to be used for coroutines, but could potentially be used for generators too). @@ -73,17 +70,19 @@ def add_custom_frame(frame, name, thread_id): :return: str Returns the custom thread id which will be used to show the given frame paused. - ''' + """ with CustomFramesContainer.custom_frames_lock: curr_thread_id = get_current_thread_id(threading.current_thread()) next_id = CustomFramesContainer._next_frame_id = CustomFramesContainer._next_frame_id + 1 # Note: the frame id kept contains an id and thread information on the thread where the frame was added # so that later on we can check if the frame is from the current thread by doing frame_id.endswith('|'+thread_id). - frame_custom_thread_id = '__frame__:%s|%s' % (next_id, curr_thread_id) + frame_custom_thread_id = "__frame__:%s|%s" % (next_id, curr_thread_id) if DEBUG: - sys.stderr.write('add_custom_frame: %s (%s) %s %s\n' % ( - frame_custom_thread_id, get_abs_path_real_path_and_base_from_frame(frame)[-1], frame.f_lineno, frame.f_code.co_name)) + sys.stderr.write( + "add_custom_frame: %s (%s) %s %s\n" + % (frame_custom_thread_id, get_abs_path_real_path_and_base_from_frame(frame)[-1], frame.f_lineno, frame.f_code.co_name) + ) CustomFramesContainer.custom_frames[frame_custom_thread_id] = CustomFrame(name, frame, thread_id) CustomFramesContainer._py_db_command_thread_event.set() @@ -93,7 +92,7 @@ def add_custom_frame(frame, name, thread_id): def update_custom_frame(frame_custom_thread_id, frame, thread_id, name=None): with CustomFramesContainer.custom_frames_lock: if DEBUG: - sys.stderr.write('update_custom_frame: %s\n' % frame_custom_thread_id) + sys.stderr.write("update_custom_frame: %s\n" % frame_custom_thread_id) try: old = CustomFramesContainer.custom_frames[frame_custom_thread_id] if name is not None: @@ -101,7 +100,7 @@ def update_custom_frame(frame_custom_thread_id, frame, thread_id, name=None): old.mod_time += 1 old.thread_id = thread_id except: - sys.stderr.write('Unable to get frame to replace: %s\n' % (frame_custom_thread_id,)) + sys.stderr.write("Unable to get frame to replace: %s\n" % (frame_custom_thread_id,)) pydev_log.exception() CustomFramesContainer._py_db_command_thread_event.set() @@ -110,7 +109,6 @@ def update_custom_frame(frame_custom_thread_id, frame, thread_id, name=None): def remove_custom_frame(frame_custom_thread_id): with CustomFramesContainer.custom_frames_lock: if DEBUG: - sys.stderr.write('remove_custom_frame: %s\n' % frame_custom_thread_id) + sys.stderr.write("remove_custom_frame: %s\n" % frame_custom_thread_id) CustomFramesContainer.custom_frames.pop(frame_custom_thread_id, None) CustomFramesContainer._py_db_command_thread_event.set() - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c index 3225bf0c4..e33d472ac 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.29.32 */ +/* Generated by Cython 3.0.11 */ /* BEGIN: Cython Metadata { @@ -16,6 +16,16 @@ END: Cython Metadata */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN #endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + #include "Python.h" #if PY_VERSION_HEX >= 0x03090000 #include "internal/pycore_gc.h" @@ -24,17 +34,24 @@ END: Cython Metadata */ #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_32" -#define CYTHON_HEX_VERSION 0x001D20F0 -#define CYTHON_FUTURE_DIVISION 0 +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif @@ -53,9 +70,7 @@ END: Cython Metadata */ #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif + #define HAVE_LONG_LONG #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG @@ -63,13 +78,19 @@ END: Cython Metadata */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 #define CYTHON_COMPILING_IN_NOGIL 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 @@ -94,10 +115,19 @@ END: Cython Metadata */ #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS @@ -105,46 +135,127 @@ END: Cython Metadata */ #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC - #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900) + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK @@ -152,19 +263,28 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif -#elif defined(PY_NOGIL) + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -172,8 +292,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -185,11 +303,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -197,18 +326,25 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 @@ -217,10 +353,7 @@ END: Cython Metadata */ #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #ifndef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS @@ -244,37 +377,62 @@ END: Cython Metadata */ #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif - #if PY_VERSION_HEX >= 0x030B00A4 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #elif !defined(CYTHON_FAST_THREAD_STATE) + #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000) + #define CYTHON_FAST_PYCALL 1 #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) #endif - #if PY_VERSION_HEX >= 0x030B00A4 + #if PY_VERSION_HEX < 0x030700A3 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #elif !defined(CYTHON_USE_EXC_INFO_STACK) - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #define CYTHON_USE_EXC_INFO_STACK 1 #endif #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) #if CYTHON_USE_PYLONG_INTERNALS #if PY_MAJOR_VERSION < 3 #include "longintrepr.h" @@ -303,6 +461,17 @@ END: Cython Metadata */ #define CYTHON_RESTRICT #endif #endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) @@ -316,13 +485,16 @@ END: Cython Metadata */ # define CYTHON_UNUSED # endif #endif -#ifndef CYTHON_MAYBE_UNUSED_VAR +#ifndef CYTHON_UNUSED_VAR # if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } + template void CYTHON_UNUSED_VAR( const T& ) { } # else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# define CYTHON_UNUSED_VAR(x) (void)(x) # endif #endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED @@ -330,28 +502,59 @@ END: Cython Metadata */ # define CYTHON_NCP_UNUSED CYTHON_UNUSED # endif #endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; + typedef unsigned __int32 __pyx_uintptr_t; #endif #endif #else - #include + #include + typedef uintptr_t __pyx_uintptr_t; #endif #ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif #endif #endif #ifndef CYTHON_FALLTHROUGH @@ -361,13 +564,26 @@ END: Cython Metadata */ #define CYTHON_FALLTHROUGH #endif #endif - #if defined(__clang__ ) && defined(__apple_build_version__) + #if defined(__clang__) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) #ifndef CYTHON_INLINE #if defined(__clang__) @@ -383,85 +599,145 @@ END: Cython Metadata */ #endif #endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_DefaultClassType PyType_Type -#if PY_VERSION_HEX >= 0x030B00A1 - static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f, +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, PyObject *code, PyObject *c, PyObject* n, PyObject *v, PyObject *fv, PyObject *cell, PyObject* fn, PyObject *name, int fline, PyObject *lnos) { - PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL; - PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL; - const char *fn_cstr=NULL; - const char *name_cstr=NULL; - PyCodeObject* co=NULL; + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; PyObject *type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); - if (!(kwds=PyDict_New())) goto end; - if (!(argcount=PyLong_FromLong(a))) goto end; - if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end; - if (!(posonlyargcount=PyLong_FromLong(0))) goto end; - if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end; - if (!(kwonlyargcount=PyLong_FromLong(k))) goto end; - if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end; - if (!(nlocals=PyLong_FromLong(l))) goto end; - if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end; - if (!(stacksize=PyLong_FromLong(s))) goto end; - if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end; - if (!(flags=PyLong_FromLong(f))) goto end; - if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end; - if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end; - if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end; - if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end; - if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too; - if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here - if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too; - Py_XDECREF((PyObject*)co); - co = (PyCodeObject*)call_result; - call_result = NULL; - if (0) { - cleanup_code_too: - Py_XDECREF((PyObject*)co); - co = NULL; - } - end: - Py_XDECREF(kwds); - Py_XDECREF(argcount); - Py_XDECREF(posonlyargcount); - Py_XDECREF(kwonlyargcount); - Py_XDECREF(nlocals); - Py_XDECREF(stacksize); - Py_XDECREF(replace); - Py_XDECREF(call_result); - Py_XDECREF(empty); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); if (type) { PyErr_Restore(type, value, traceback); } - return co; + return result; } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif - #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 #endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 @@ -475,6 +751,12 @@ END: Cython Metadata */ #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif @@ -486,34 +768,89 @@ END: Cython Metadata */ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames); #else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) #endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) #else -#define __Pyx_PyFastCFunction_Check(func) 0 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() #elif PY_VERSION_HEX >= 0x03000000 @@ -521,6 +858,22 @@ END: Cython Metadata */ #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 @@ -551,7 +904,29 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else #define __Pyx_PyDict_NewPresized(n) PyDict_New() @@ -563,34 +938,91 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem #else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; #endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API #define CYTHON_PEP393_ENABLED 1 - #if defined(PyUnicode_IS_READY) - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #else #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) #endif #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #endif + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif #endif #else #define CYTHON_PEP393_ENABLED 0 @@ -600,11 +1032,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY @@ -615,14 +1047,20 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) @@ -651,8 +1089,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif #ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) #endif #if PY_VERSION_HEX >= 0x030900A4 #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) @@ -662,15 +1106,42 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) #endif #if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) #else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } #endif #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong @@ -682,6 +1153,9 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject @@ -699,11 +1173,6 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t #endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods @@ -744,11 +1213,20 @@ static CYTHON_INLINE float __PYX_NAN() { #endif #define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } #define __PYX_ERR(f_index, lineno, Ln_error) \ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } -#ifndef __PYX_EXTERN_C +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else @@ -809,9 +1287,10 @@ static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { #else #define __Pyx_sst_abs(value) ((value<0) ? -value : value) #endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize @@ -829,9 +1308,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) @@ -839,13 +1318,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) @@ -869,8 +1342,54 @@ static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include static int __Pyx_sys_getdefaultencoding_not_ascii; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; @@ -891,7 +1410,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { - ascii_chars[c] = c; + ascii_chars[c] = (char) c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); @@ -921,6 +1440,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; @@ -956,25 +1476,31 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } +#if !CYTHON_USE_MODULE_STATE static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; +#endif static int __pyx_lineno; static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; +static const char * __pyx_cfilenm = __FILE__; static const char *__pyx_filename; +/* #### Code section: filename_table ### */ static const char *__pyx_f[] = { - "_pydevd_bundle/pydevd_cython.pyx", - "_pydevd_bundle/pydevd_cython.pxd", - "stringsource", + "_pydevd_bundle\\\\pydevd_cython.pyx", + "_pydevd_bundle\\\\pydevd_cython.pxd", + "", "type.pxd", }; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; @@ -992,6 +1518,7 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer; */ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { PyObject_HEAD + struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtab; int pydev_state; PyObject *pydev_step_stop; int pydev_original_step_cmd; @@ -1018,10 +1545,12 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { PyObject *pydev_smart_step_into_variants; PyObject *target_id_to_smart_step_into_variant; int pydev_use_scoped_step_frame; + PyObject *weak_thread; + int is_in_wait_loop; }; -/* "_pydevd_bundle/pydevd_cython.pyx":256 +/* "_pydevd_bundle/pydevd_cython.pyx":435 * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class _TryExceptContainerObj: # <<<<<<<<<<<<<< @@ -1034,8 +1563,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj { }; -/* "_pydevd_bundle/pydevd_cython.pyx":274 - * #======================================================================================================================= +/* "_pydevd_bundle/pydevd_cython.pyx":456 + * # ======================================================================================================================= * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class PyDBFrame: # <<<<<<<<<<<<<< * # ELSE @@ -1050,8 +1579,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame { }; -/* "_pydevd_bundle/pydevd_cython.pyx":1448 - * +/* "_pydevd_bundle/pydevd_cython.pyx":1688 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class SafeCallWrapper: # <<<<<<<<<<<<<< * cdef method_object @@ -1063,8 +1592,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper { }; -/* "_pydevd_bundle/pydevd_cython.pyx":1604 - * +/* "_pydevd_bundle/pydevd_cython.pyx":1856 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class TopLevelThreadTracerOnlyUnhandledExceptions: # <<<<<<<<<<<<<< * cdef public tuple _args; @@ -1076,8 +1605,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhand }; -/* "_pydevd_bundle/pydevd_cython.pyx":1634 - * +/* "_pydevd_bundle/pydevd_cython.pyx":1887 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class TopLevelThreadTracerNoBackFrame: # <<<<<<<<<<<<<< * cdef public object _frame_trace_dispatch; @@ -1094,8 +1623,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFram }; -/* "_pydevd_bundle/pydevd_cython.pyx":1709 - * +/* "_pydevd_bundle/pydevd_cython.pyx":1967 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class ThreadTracer: # <<<<<<<<<<<<<< * cdef public tuple _args; @@ -1108,8 +1637,25 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer { -/* "_pydevd_bundle/pydevd_cython.pyx":274 - * #======================================================================================================================= +/* "_pydevd_bundle/pydevd_cython.pyx":29 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef class PyDBAdditionalThreadInfo: # <<<<<<<<<<<<<< + * # ELSE + * # class PyDBAdditionalThreadInfo(object): + */ + +struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { + PyObject *(*get_topmost_frame)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *, int __pyx_skip_dispatch); + PyObject *(*update_stepping_info)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + PyObject *(*_get_related_thread)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + int (*_is_stepping)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); +}; +static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + + +/* "_pydevd_bundle/pydevd_cython.pyx":456 + * # ======================================================================================================================= * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class PyDBFrame: # <<<<<<<<<<<<<< * # ELSE @@ -1117,8 +1663,6 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer { */ struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame { - PyObject *(*_should_stop_on_exception)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *); - PyObject *(*_handle_exception)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *, PyObject *); PyObject *(*get_func_name)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *); PyObject *(*_show_return_values)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *); PyObject *(*_remove_return_values)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *); @@ -1127,6 +1671,7 @@ struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame { PyObject *(*trace_dispatch)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch); }; static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBFrame; +/* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ /* Refnanny.proto */ @@ -1135,11 +1680,11 @@ static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx #endif #if CYTHON_REFNANNY typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; @@ -1149,28 +1694,40 @@ static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() #endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) @@ -1181,6 +1738,10 @@ static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ @@ -1192,6 +1753,57 @@ static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); @@ -1199,15 +1811,82 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + /* RaiseArgTupleInvalid.proto */ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /* KeywordStringCheck.proto */ -static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); +static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed); /* PyDictVersioning.proto */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS @@ -1237,18 +1916,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN /* GetModuleGlobalName.proto */ #if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ +#define __Pyx_GetModuleGlobalName(var, name) do {\ static PY_UINT64_T __pyx_dict_version = 0;\ static PyObject *__pyx_dict_cached_value = NULL;\ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ PY_UINT64_T __pyx_dict_version;\ PyObject *__pyx_dict_cached_value;\ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} +} while(0) static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); #else #define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) @@ -1258,33 +1937,37 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); /* PyFunctionFastCall.proto */ #if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL #define __Pyx_PyFunction_FastCall(func, args, nargs)\ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) #endif #define __Pyx_BUILD_ASSERT_EXPR(cond)\ (sizeof(char [1 - 2*!(cond)]) - 1) #ifndef Py_MEMBER_SIZE #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) #endif -#if CYTHON_FAST_PYCALL - static size_t __pyx_pyframe_localsplus_offset = 0; +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 #include "frameobject.h" -#if PY_VERSION_HEX >= 0x030b00a6 +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API #ifndef Py_BUILD_CORE #define Py_BUILD_CORE 1 #endif #include "internal/pycore_frame.h" #endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" #define __Pxy_PyFrame_Initialize_Offsets()\ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) #define __Pyx_PyFrame_GetLocalsplus(frame)\ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif // CYTHON_FAST_PYCALL +#endif +#endif #endif /* PyObjectCall.proto */ @@ -1299,81 +1982,36 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); #endif -/* PyObjectCallNoArg.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); -#else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) -#endif - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); /* PyObjectCallOneArg.proto */ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); /* GetAttr3.proto */ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + /* RaiseException.proto */ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); #endif @@ -1398,30 +2036,36 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /* PyObjectLookupSpecial.proto */ #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return __Pyx_PyObject_GetAttrStr(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); #else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) #endif +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + /* PyObjectSetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) @@ -1431,14 +2075,16 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) #endif -/* None.proto */ -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -/* pyfrozenset_new.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it); +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); -/* PySetContains.proto */ -static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq); +/* SliceObject.proto */ +#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)\ + __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound) +static CYTHON_INLINE int __Pyx_PyObject_SetSlice( + PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** py_start, PyObject** py_stop, PyObject** py_slice, + int has_cstart, int has_cstop, int wraparound); /* ListAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS @@ -1447,7 +2093,11 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { Py_ssize_t len = Py_SIZE(list); if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { Py_INCREF(x); + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + L->ob_item[len] = x; + #else PyList_SET_ITEM(list, len, x); + #endif __Pyx_SET_SIZE(list, len + 1); return 0; } @@ -1457,56 +2107,61 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { #define __Pyx_PyList_Append(L,x) PyList_Append(L,x) #endif -/* PySequenceContains.proto */ -static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* append.proto */ +static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); + +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* set_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set, + Py_ssize_t* p_orig_length, int* p_source_is_set); +static CYTHON_INLINE int __Pyx_set_iter_next( + PyObject* iter_obj, Py_ssize_t orig_length, + Py_ssize_t* ppos, PyObject **value, + int source_is_set); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /* ArgTypeTest.proto */ #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ __Pyx__ArgTypeTest(obj, type, name, exact)) static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); +/* pyfrozenset_new.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it); -/* IncludeStringH.proto */ -#include +/* py_set_discard.proto */ +static CYTHON_INLINE int __Pyx_PySet_Discard(PyObject *set, PyObject *key); -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); +/* PySetContains.proto */ +static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq); -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} /* StrEquals.proto */ #if PY_MAJOR_VERSION >= 3 @@ -1515,23 +2170,24 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals #endif -/* RaiseTooManyValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -/* RaiseNeedMoreValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -/* IterFinish.proto */ -static CYTHON_INLINE int __Pyx_IterFinish(void); - -/* UnpackItemEndCheck.proto */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AndObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAnd(op1, op2) : PyNumber_And(op1, op2)) +#endif /* dict_getitem_default.proto */ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value); @@ -1561,37 +2217,6 @@ static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction * #define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2) #endif -/* py_dict_clear.proto */ -#define __Pyx_PyDict_Clear(d) (PyDict_Clear(d), 0) - -/* PyDictContains.proto */ -static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { - int result = PyDict_Contains(dict, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -/* SwapException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* RaiseNoneIterError.proto */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - -/* PyIntBinop.proto */ -#if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); -#else -#define __Pyx_PyInt_AndObjC(op1, op2, intval, inplace, zerodivision_check)\ - (inplace ? PyNumber_InPlaceAnd(op1, op2) : PyNumber_And(op1, op2)) -#endif - -/* PyObjectGetMethod.proto */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); - /* PyObjectCallMethod0.proto */ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); @@ -1616,28 +2241,11 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); -/* py_dict_values.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); - -/* CallUnboundCMethod0.proto */ -static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_CallUnboundCMethod0(cfunc, self)\ - (likely((cfunc)->func) ?\ - (likely((cfunc)->flag == METH_NOARGS) ? (*((cfunc)->func))(self, NULL) :\ - (PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\ - (PY_VERSION_HEX >= 0x030700A0 ?\ - (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\ - (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\ - (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\ - (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\ - (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ? ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\ - ((cfunc)->flag == METH_VARARGS ? (*((cfunc)->func))(self, __pyx_empty_tuple) :\ - __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\ - __Pyx__CallUnboundCMethod0(cfunc, self)) -#else -#define __Pyx_CallUnboundCMethod0(cfunc, self) __Pyx__CallUnboundCMethod0(cfunc, self) -#endif +/* PyDictContains.proto */ +static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { + int result = PyDict_Contains(dict, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} /* DictGetItem.proto */ #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY @@ -1656,6 +2264,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* py_dict_clear.proto */ +#define __Pyx_PyDict_Clear(d) (PyDict_Clear(d), 0) + /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); @@ -1664,12 +2281,6 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) #endif -/* PyObjectCallMethod1.proto */ -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); - -/* append.proto */ -static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); - /* SliceTupleAndList.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); @@ -1680,11 +2291,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t #endif /* PyIntCompare.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); /* ObjectGetItem.proto */ #if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); #else #define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) #endif @@ -1695,6 +2306,22 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /* ImportFrom.proto */ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + /* PyObject_GenericGetAttrNoDict.proto */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); @@ -1709,26 +2336,187 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam #define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr #endif -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); +/* SetVTable.proto */ +static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable); + +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyTypeObject *type); + +/* MergeVTables.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type); +#endif /* SetupReduce.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __Pyx_setup_reduce(PyObject* type_obj); - -/* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); +#endif /* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_11 +#define __PYX_HAVE_RT_ImportType_proto_3_0_11 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) alignof(s) +#else +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_11 { + __Pyx_ImportType_CheckSize_Error_3_0_11 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_11 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_11 = 2 }; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size); +#endif + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); #endif +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + /* CLineInTraceback.proto */ #ifdef CYTHON_CLINE_IN_TRACEBACK #define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) @@ -1737,6 +2525,7 @@ static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); #endif /* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API typedef struct { PyCodeObject* code_object; int code_line; @@ -1750,13 +2539,14 @@ static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); static PyCodeObject *__pyx_find_code_object(int code_line); static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif /* AddTraceback.proto */ static void __Pyx_AddTraceback(const char *funcname, int c_line, int py_line, const char *filename); /* GCCDiagnostics.proto */ -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) #define __Pyx_HAS_GCC_DIAGNOSTIC #endif @@ -1772,59 +2562,82 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + /* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) /* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* FunctionExport.proto */ +static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__should_stop_on_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, CYTHON_UNUSED PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto*/ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__handle_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg, PyObject *__pyx_v_exception_type); /* proto*/ +/* #### Code section: module_declarations ### */ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__get_related_thread(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/ +static int __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__is_stepping(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_get_topmost_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread, int __pyx_skip_dispatch); /* proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_get_func_name(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame); /* proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__show_return_values(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_arg); /* proto*/ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__remove_return_values(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_main_debugger, PyObject *__pyx_v_frame); /* proto*/ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__get_unfiltered_back_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_main_debugger, PyObject *__pyx_v_frame); /* proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__remove_return_values(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__get_unfiltered_back_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__is_same_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_target_frame, PyObject *__pyx_v_current_frame); /* proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg, int __pyx_skip_dispatch); /* proto*/ -/* Module declarations from 'libc.string' */ +/* Module declarations from "libc.string" */ -/* Module declarations from 'libc.stdio' */ +/* Module declarations from "libc.stdio" */ -/* Module declarations from '__builtin__' */ +/* Module declarations from "__builtin__" */ -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; +/* Module declarations from "cpython.type" */ -/* Module declarations from 'cpython' */ +/* Module declarations from "cpython" */ -/* Module declarations from 'cpython.object' */ +/* Module declarations from "cpython.object" */ -/* Module declarations from 'cpython.ref' */ +/* Module declarations from "cpython.ref" */ -/* Module declarations from '_pydevd_bundle.pydevd_cython' */ -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame = 0; -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer = 0; +/* Module declarations from "_pydevd_bundle.pydevd_cython" */ +static PyObject *__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos = 0; +static PyObject *__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping = 0; +static PyObject *__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock = 0; static PyObject *__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in = 0; -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_is_unhandled_exception(PyObject *, PyObject *, PyObject *, int, PyObject *); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(PyObject *, int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_add_additional_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_remove_additional_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); /*proto*/ +static int __pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping(int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython__update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *); /*proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdditionalThreadInfo__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *); /*proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExceptContainerObj__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *, PyObject *); /*proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFrame__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *); /*proto*/ @@ -1832,32 +2645,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *, PyObject *); /*proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *, PyObject *); /*proto*/ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadTracer__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "_pydevd_bundle.pydevd_cython" extern int __pyx_module_is_main__pydevd_bundle__pydevd_cython; int __pyx_module_is_main__pydevd_bundle__pydevd_cython = 0; -/* Implementation of '_pydevd_bundle.pydevd_cython' */ +/* Implementation of "_pydevd_bundle.pydevd_cython" */ +/* #### Code section: global_var ### */ static PyObject *__pyx_builtin_ImportError; static PyObject *__pyx_builtin_NameError; static PyObject *__pyx_builtin_StopIteration; static PyObject *__pyx_builtin_id; static PyObject *__pyx_builtin_AttributeError; +static PyObject *__pyx_builtin_KeyboardInterrupt; static PyObject *__pyx_builtin_SystemExit; static PyObject *__pyx_builtin_GeneratorExit; -static PyObject *__pyx_builtin_KeyboardInterrupt; +static PyObject *__pyx_builtin_RuntimeError; +/* #### Code section: string_decls ### */ static const char __pyx_k_[] = ""; static const char __pyx_k_1[] = "1"; +static const char __pyx_k_f[] = "f"; static const char __pyx_k_i[] = "i"; static const char __pyx_k_j[] = "j"; static const char __pyx_k_t[] = "t"; -static const char __pyx_k__3[] = "?"; -static const char __pyx_k__7[] = "/"; -static const char __pyx_k__8[] = "\\"; -static const char __pyx_k__9[] = "."; +static const char __pyx_k__4[] = "?"; +static const char __pyx_k__8[] = "/"; +static const char __pyx_k__9[] = "\\"; +static const char __pyx_k_gc[] = "gc"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_os[] = "os"; static const char __pyx_k_re[] = "re"; static const char __pyx_k_ALL[] = "ALL"; +static const char __pyx_k__10[] = "."; +static const char __pyx_k__19[] = "*"; static const char __pyx_k_add[] = "add"; static const char __pyx_k_arg[] = "arg"; static const char __pyx_k_dis[] = "dis"; @@ -1865,8 +2686,11 @@ static const char __pyx_k_get[] = "get"; static const char __pyx_k_new[] = "__new__"; static const char __pyx_k_pop[] = "pop"; static const char __pyx_k_pyc[] = ".pyc"; +static const char __pyx_k_ref[] = "ref"; +static const char __pyx_k_ret[] = "ret"; static const char __pyx_k_run[] = "run"; static const char __pyx_k_s_s[] = "%s.%s"; +static const char __pyx_k_set[] = "set"; static const char __pyx_k_sys[] = "sys"; static const char __pyx_k_None[] = "None"; static const char __pyx_k_args[] = "args"; @@ -1881,6 +2705,7 @@ static const char __pyx_k_main[] = "main"; static const char __pyx_k_name[] = "__name__"; static const char __pyx_k_path[] = "path"; static const char __pyx_k_self[] = "self"; +static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_stat[] = "stat"; static const char __pyx_k_stop[] = "stop"; static const char __pyx_k_test[] = "__test__"; @@ -1888,17 +2713,23 @@ static const char __pyx_k_debug[] = "debug"; static const char __pyx_k_enter[] = "__enter__"; static const char __pyx_k_event[] = "event"; static const char __pyx_k_frame[] = "frame"; -static const char __pyx_k_ident[] = "ident"; +static const char __pyx_k_ident[] = "_ident"; +static const char __pyx_k_lines[] = "lines"; static const char __pyx_k_match[] = "match"; static const char __pyx_k_py_db[] = "py_db"; static const char __pyx_k_qname[] = "qname"; static const char __pyx_k_rfind[] = "rfind"; +static const char __pyx_k_state[] = "state"; static const char __pyx_k_trace[] = "trace"; static const char __pyx_k_utf_8[] = "utf-8"; +static const char __pyx_k_value[] = "value"; static const char __pyx_k_Thread[] = "Thread"; +static const char __pyx_k_active[] = "_active"; static const char __pyx_k_append[] = "append"; static const char __pyx_k_args_2[] = "_args"; static const char __pyx_k_call_2[] = "__call__"; +static const char __pyx_k_dict_2[] = "_dict"; +static const char __pyx_k_enable[] = "enable"; static const char __pyx_k_encode[] = "encode"; static const char __pyx_k_f_back[] = "f_back"; static const char __pyx_k_f_code[] = "f_code"; @@ -1906,12 +2737,14 @@ static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_kwargs[] = "kwargs"; static const char __pyx_k_lambda[] = ""; static const char __pyx_k_main_2[] = "__main__"; +static const char __pyx_k_merged[] = "merged"; static const char __pyx_k_module[] = ""; static const char __pyx_k_name_2[] = "name"; static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_plugin[] = "plugin"; static const char __pyx_k_pydevd[] = "pydevd"; static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_result[] = "result"; static const char __pyx_k_return[] = "return"; static const char __pyx_k_thread[] = "thread"; static const char __pyx_k_update[] = "update"; @@ -1919,20 +2752,25 @@ static const char __pyx_k_values[] = "values"; static const char __pyx_k_writer[] = "writer"; static const char __pyx_k_co_name[] = "co_name"; static const char __pyx_k_compile[] = "compile"; +static const char __pyx_k_disable[] = "disable"; static const char __pyx_k_f_lasti[] = "f_lasti"; static const char __pyx_k_f_trace[] = "f_trace"; static const char __pyx_k_getline[] = "getline"; +static const char __pyx_k_ident_2[] = "ident"; static const char __pyx_k_invalid[] = ".invalid."; static const char __pyx_k_linesep[] = "linesep"; static const char __pyx_k_os_path[] = "os.path"; static const char __pyx_k_returns[] = "returns"; static const char __pyx_k_st_size[] = "st_size"; +static const char __pyx_k_stopped[] = "stopped"; static const char __pyx_k_suspend[] = "suspend"; static const char __pyx_k_tb_next[] = "tb_next"; static const char __pyx_k_version[] = "version"; +static const char __pyx_k_weakref[] = "weakref"; static const char __pyx_k_basename[] = "basename"; static const char __pyx_k_can_skip[] = "can_skip"; static const char __pyx_k_co_flags[] = "co_flags"; +static const char __pyx_k_critical[] = "critical"; static const char __pyx_k_endswith[] = "endswith"; static const char __pyx_k_exc_info[] = "exc_info"; static const char __pyx_k_execfile[] = "execfile"; @@ -1951,9 +2789,13 @@ static const char __pyx_k_PyDBFrame[] = "PyDBFrame"; static const char __pyx_k_STATE_RUN[] = "STATE_RUN"; static const char __pyx_k_bootstrap[] = "__bootstrap"; static const char __pyx_k_condition[] = "condition"; +static const char __pyx_k_curr_stat[] = "curr_stat"; +static const char __pyx_k_exc_break[] = "exc_break"; static const char __pyx_k_exception[] = "exception"; static const char __pyx_k_f_globals[] = "f_globals"; static const char __pyx_k_func_name[] = "func_name"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_last_stat[] = "last_stat"; static const char __pyx_k_linecache[] = "linecache"; static const char __pyx_k_pydev_log[] = "pydev_log"; static const char __pyx_k_pydevd_py[] = "pydevd.py"; @@ -1961,10 +2803,15 @@ static const char __pyx_k_pyx_state[] = "__pyx_state"; static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; static const char __pyx_k_tb_lineno[] = "tb_lineno"; static const char __pyx_k_threading[] = "threading"; +static const char __pyx_k_trace_obj[] = "trace_obj"; static const char __pyx_k_PYDEV_FILE[] = "PYDEV_FILE"; static const char __pyx_k_SystemExit[] = "SystemExit"; +static const char __pyx_k_check_excs[] = "check_excs"; static const char __pyx_k_checkcache[] = "checkcache"; +static const char __pyx_k_custom_key[] = "custom_key"; +static const char __pyx_k_exc_lineno[] = "exc_lineno"; static const char __pyx_k_expression[] = "expression"; +static const char __pyx_k_is_stopped[] = "_is_stopped"; static const char __pyx_k_pyx_result[] = "__pyx_result"; static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; static const char __pyx_k_startswith[] = "startswith"; @@ -1979,22 +2826,35 @@ static const char __pyx_k_co_filename[] = "co_filename"; static const char __pyx_k_except_line[] = "except_line"; static const char __pyx_k_f_unhandled[] = "f_unhandled"; static const char __pyx_k_is_logpoint[] = "is_logpoint"; +static const char __pyx_k_is_stepping[] = "_is_stepping"; static const char __pyx_k_just_raised[] = "just_raised"; +static const char __pyx_k_raise_lines[] = "raise_lines"; static const char __pyx_k_return_line[] = "return_line"; static const char __pyx_k_set_suspend[] = "set_suspend"; +static const char __pyx_k_should_stop[] = "should_stop"; +static const char __pyx_k_weak_thread[] = "weak_thread"; static const char __pyx_k_ForkSafeLock[] = "ForkSafeLock"; +static const char __pyx_k_RuntimeError[] = "RuntimeError"; static const char __pyx_k_ThreadTracer[] = "ThreadTracer"; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; static const char __pyx_k_pydev_bundle[] = "_pydev_bundle"; static const char __pyx_k_pydev_monkey[] = "pydev_monkey"; static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_stringsource[] = ""; static const char __pyx_k_try_exc_info[] = "try_exc_info"; +static const char __pyx_k_use_setstate[] = "use_setstate"; static const char __pyx_k_GeneratorExit[] = "GeneratorExit"; +static const char __pyx_k_STATE_SUSPEND[] = "STATE_SUSPEND"; static const char __pyx_k_StopIteration[] = "StopIteration"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; static const char __pyx_k_cmd_step_into[] = "cmd_step_into"; static const char __pyx_k_cmd_step_over[] = "cmd_step_over"; +static const char __pyx_k_container_obj[] = "container_obj"; static const char __pyx_k_get_file_type[] = "get_file_type"; +static const char __pyx_k_get_thread_id[] = "get_thread_id"; static const char __pyx_k_has_condition[] = "has_condition"; +static const char __pyx_k_lines_ignored[] = "lines_ignored"; static const char __pyx_k_method_object[] = "method_object"; static const char __pyx_k_original_call[] = "_original_call"; static const char __pyx_k_pydb_disposed[] = "pydb_disposed"; @@ -2008,6 +2868,7 @@ static const char __pyx_k_TRACE_PROPERTY[] = "TRACE_PROPERTY"; static const char __pyx_k_co_firstlineno[] = "co_firstlineno"; static const char __pyx_k_current_frames[] = "_current_frames"; static const char __pyx_k_enable_tracing[] = "enable_tracing"; +static const char __pyx_k_exc_break_user[] = "exc_break_user"; static const char __pyx_k_exception_type[] = "exception_type"; static const char __pyx_k_findlinestarts[] = "findlinestarts"; static const char __pyx_k_get_breakpoint[] = "get_breakpoint"; @@ -2018,23 +2879,38 @@ static const char __pyx_k_IgnoreException[] = "[^#]*#.*@IgnoreException"; static const char __pyx_k_SafeCallWrapper[] = "SafeCallWrapper"; static const char __pyx_k_additional_info[] = "additional_info"; static const char __pyx_k_bootstrap_inner[] = "__bootstrap_inner"; +static const char __pyx_k_check_trace_obj[] = "check_trace_obj"; static const char __pyx_k_constant_to_str[] = "constant_to_str"; static const char __pyx_k_disable_tracing[] = "disable_tracing"; static const char __pyx_k_do_wait_suspend[] = "do_wait_suspend"; static const char __pyx_k_exception_break[] = "exception_break"; +static const char __pyx_k_frame_cache_key[] = "frame_cache_key"; +static const char __pyx_k_from_user_input[] = "from_user_input"; static const char __pyx_k_is_thread_alive[] = "is_thread_alive"; +static const char __pyx_k_last_raise_line[] = "last_raise_line"; static const char __pyx_k_make_io_message[] = "make_io_message"; static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; static const char __pyx_k_trace_exception[] = "trace_exception"; +static const char __pyx_k_try_except_info[] = "try_except_info"; +static const char __pyx_k_was_just_raised[] = "was_just_raised"; static const char __pyx_k_DEBUG_START_PY3K[] = "DEBUG_START_PY3K"; +static const char __pyx_k_exc_break_caught[] = "exc_break_caught"; +static const char __pyx_k_handle_exception[] = "handle_exception"; static const char __pyx_k_in_project_scope[] = "in_project_scope"; +static const char __pyx_k_is_user_uncaught[] = "is_user_uncaught"; static const char __pyx_k_threading_active[] = "threading_active"; static const char __pyx_k_try_except_infos[] = "try_except_infos"; static const char __pyx_k_KeyboardInterrupt[] = "KeyboardInterrupt"; +static const char __pyx_k_absolute_filename[] = "absolute_filename"; static const char __pyx_k_apply_to_settrace[] = "apply_to_settrace"; static const char __pyx_k_bootstrap_inner_2[] = "_bootstrap_inner"; static const char __pyx_k_children_variants[] = "children_variants"; +static const char __pyx_k_frame_id_to_frame[] = "frame_id_to_frame"; +static const char __pyx_k_frame_skips_cache[] = "frame_skips_cache"; +static const char __pyx_k_get_method_object[] = "get_method_object"; +static const char __pyx_k_get_topmost_frame[] = "get_topmost_frame"; +static const char __pyx_k_initial_trace_obj[] = "initial_trace_obj"; static const char __pyx_k_original_step_cmd[] = "original_step_cmd"; static const char __pyx_k_pydev_execfile_py[] = "_pydev_execfile.py"; static const char __pyx_k_pydevd_dont_trace[] = "pydevd_dont_trace"; @@ -2044,20 +2920,28 @@ static const char __pyx_k_thread_trace_func[] = "thread_trace_func"; static const char __pyx_k_RETURN_VALUES_DICT[] = "RETURN_VALUES_DICT"; static const char __pyx_k_StopAsyncIteration[] = "StopAsyncIteration"; static const char __pyx_k_apply_files_filter[] = "apply_files_filter"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_get_related_thread[] = "_get_related_thread"; static const char __pyx_k_global_cache_skips[] = "global_cache_skips"; static const char __pyx_k_pydev_do_not_trace[] = "pydev_do_not_trace"; static const char __pyx_k_show_return_values[] = "show_return_values"; +static const char __pyx_k_add_additional_info[] = "add_additional_info"; +static const char __pyx_k_any_thread_stepping[] = "any_thread_stepping"; static const char __pyx_k_collect_return_info[] = "collect_return_info"; +static const char __pyx_k_get_global_debugger[] = "get_global_debugger"; static const char __pyx_k_pydev_log_exception[] = "pydev_log_exception"; static const char __pyx_k_threading_get_ident[] = "threading_get_ident"; static const char __pyx_k_IGNORE_EXCEPTION_TAG[] = "IGNORE_EXCEPTION_TAG"; +static const char __pyx_k_exception_breakpoint[] = "exception_breakpoint"; static const char __pyx_k_frame_trace_dispatch[] = "frame_trace_dispatch"; static const char __pyx_k_get_clsname_for_code[] = "get_clsname_for_code"; static const char __pyx_k_is_line_in_try_block[] = "is_line_in_try_block"; static const char __pyx_k_make_console_message[] = "make_console_message"; +static const char __pyx_k_next_additional_info[] = "_next_additional_info"; +static const char __pyx_k_update_stepping_info[] = "update_stepping_info"; +static const char __pyx_k_PyDBFrame_set_suspend[] = "PyDBFrame.set_suspend"; static const char __pyx_k_TryExceptContainerObj[] = "_TryExceptContainerObj"; -static const char __pyx_k_Using_Cython_speedups[] = "Using Cython speedups"; static const char __pyx_k_filename_to_stat_info[] = "filename_to_stat_info"; static const char __pyx_k_get_current_thread_id[] = "get_current_thread_id"; static const char __pyx_k_handle_user_exception[] = "handle_user_exception"; @@ -2066,12 +2950,16 @@ static const char __pyx_k_suspend_other_threads[] = "suspend_other_threads"; static const char __pyx_k_CMD_SET_FUNCTION_BREAK[] = "CMD_SET_FUNCTION_BREAK"; static const char __pyx_k_EXCEPTION_TYPE_HANDLED[] = "EXCEPTION_TYPE_HANDLED"; static const char __pyx_k_PYDEVD_IPYTHON_CONTEXT[] = "PYDEVD_IPYTHON_CONTEXT"; +static const char __pyx_k_abs_real_path_and_base[] = "abs_real_path_and_base"; static const char __pyx_k_add_exception_to_frame[] = "add_exception_to_frame"; static const char __pyx_k_has_plugin_line_breaks[] = "has_plugin_line_breaks"; static const char __pyx_k_ignore_exception_trace[] = "ignore_exception_trace"; +static const char __pyx_k_is_unhandled_exception[] = "is_unhandled_exception"; static const char __pyx_k_pydev_bundle_pydev_log[] = "_pydev_bundle.pydev_log"; static const char __pyx_k_pyx_unpickle_PyDBFrame[] = "__pyx_unpickle_PyDBFrame"; +static const char __pyx_k_remove_additional_info[] = "remove_additional_info"; static const char __pyx_k_suspended_at_unhandled[] = "suspended_at_unhandled"; +static const char __pyx_k_valid_try_except_infos[] = "valid_try_except_infos"; static const char __pyx_k_collect_try_except_info[] = "collect_try_except_info"; static const char __pyx_k_get_trace_dispatch_func[] = "get_trace_dispatch_func"; static const char __pyx_k_ignore_system_exit_code[] = "ignore_system_exit_code"; @@ -2081,10 +2969,16 @@ static const char __pyx_k_notify_thread_not_alive[] = "notify_thread_not_alive"; static const char __pyx_k_pydevd_traceproperty_py[] = "pydevd_traceproperty.py"; static const char __pyx_k_top_level_thread_tracer[] = "top_level_thread_tracer"; static const char __pyx_k_PyDBAdditionalThreadInfo[] = "PyDBAdditionalThreadInfo"; +static const char __pyx_k_PyDBFrame_trace_dispatch[] = "PyDBFrame.trace_dispatch"; static const char __pyx_k_Stop_inside_ipython_call[] = "Stop inside ipython call"; static const char __pyx_k_get_exception_breakpoint[] = "get_exception_breakpoint"; static const char __pyx_k_global_cache_frame_skips[] = "global_cache_frame_skips"; +static const char __pyx_k_should_stop_on_exception[] = "should_stop_on_exception"; static const char __pyx_k_threading_current_thread[] = "threading_current_thread"; +static const char __pyx_k_PYDEVD_USE_SYS_MONITORING[] = "PYDEVD_USE_SYS_MONITORING"; +static const char __pyx_k_PyDBFrame___reduce_cython[] = "PyDBFrame.__reduce_cython__"; +static const char __pyx_k_PyDBFrame_do_wait_suspend[] = "PyDBFrame.do_wait_suspend"; +static const char __pyx_k_PyDBFrame_trace_exception[] = "PyDBFrame.trace_exception"; static const char __pyx_k_pyx_unpickle_ThreadTracer[] = "__pyx_unpickle_ThreadTracer"; static const char __pyx_k_remove_return_values_flag[] = "remove_return_values_flag"; static const char __pyx_k_break_on_caught_exceptions[] = "break_on_caught_exceptions"; @@ -2092,27 +2986,40 @@ static const char __pyx_k_notify_on_first_raise_only[] = "notify_on_first_raise_ static const char __pyx_k_pydevd_bundle_pydevd_utils[] = "_pydevd_bundle.pydevd_utils"; static const char __pyx_k_set_additional_thread_info[] = "set_additional_thread_info"; static const char __pyx_k_trace_unhandled_exceptions[] = "trace_unhandled_exceptions"; +static const char __pyx_k_PyDBFrame___setstate_cython[] = "PyDBFrame.__setstate_cython__"; static const char __pyx_k_State_s_Stop_s_Cmd_s_Kill_s[] = "State:%s Stop:%s Cmd: %s Kill:%s"; static const char __pyx_k_exclude_exception_by_filter[] = "exclude_exception_by_filter"; static const char __pyx_k_force_only_unhandled_tracer[] = "force_only_unhandled_tracer"; static const char __pyx_k_handle_breakpoint_condition[] = "handle_breakpoint_condition"; static const char __pyx_k_has_plugin_exception_breaks[] = "has_plugin_exception_breaks"; +static const char __pyx_k_prev_user_uncaught_exc_info[] = "prev_user_uncaught_exc_info"; static const char __pyx_k_pydevd_bundle_pydevd_cython[] = "_pydevd_bundle.pydevd_cython"; static const char __pyx_k_remove_exception_from_frame[] = "remove_exception_from_frame"; static const char __pyx_k_send_caught_exception_stack[] = "send_caught_exception_stack"; static const char __pyx_k_stop_on_unhandled_exception[] = "stop_on_unhandled_exception"; +static const char __pyx_k_ThreadTracer___reduce_cython[] = "ThreadTracer.__reduce_cython__"; +static const char __pyx_k_get_internal_queue_and_event[] = "get_internal_queue_and_event"; static const char __pyx_k_handle_breakpoint_expression[] = "handle_breakpoint_expression"; +static const char __pyx_k_maybe_user_uncaught_exc_info[] = "maybe_user_uncaught_exc_info"; static const char __pyx_k_pyx_unpickle_SafeCallWrapper[] = "__pyx_unpickle_SafeCallWrapper"; static const char __pyx_k_EXCEPTION_TYPE_USER_UNHANDLED[] = "EXCEPTION_TYPE_USER_UNHANDLED"; static const char __pyx_k_NORM_PATHS_AND_BASE_CONTAINER[] = "NORM_PATHS_AND_BASE_CONTAINER"; +static const char __pyx_k_canonical_normalized_filename[] = "canonical_normalized_filename"; static const char __pyx_k_constructed_tid_to_last_frame[] = "constructed_tid_to_last_frame"; +static const char __pyx_k_ThreadTracer___setstate_cython[] = "ThreadTracer.__setstate_cython__"; +static const char __pyx_k_TryExceptContainerObj___reduce[] = "_TryExceptContainerObj.__reduce_cython__"; static const char __pyx_k_pydevd_bundle_pydevd_constants[] = "_pydevd_bundle.pydevd_constants"; static const char __pyx_k_pyx_unpickle_PyDBAdditionalThr[] = "__pyx_unpickle_PyDBAdditionalThreadInfo"; static const char __pyx_k_pyx_unpickle_TopLevelThreadTra[] = "__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions"; static const char __pyx_k_pyx_unpickle__TryExceptContain[] = "__pyx_unpickle__TryExceptContainerObj"; static const char __pyx_k_Error_in_linecache_checkcache_r[] = "Error in linecache.checkcache(%r)"; static const char __pyx_k_Ignore_exception_s_in_library_s[] = "Ignore exception %s in library %s -- (%s)"; +static const char __pyx_k_Not_used_in_sys_monitoring_mode[] = "Not used in sys.monitoring mode."; +static const char __pyx_k_PyDBAdditionalThreadInfo_update[] = "PyDBAdditionalThreadInfo.update_stepping_info"; +static const char __pyx_k_PyDBFrame_handle_user_exception[] = "PyDBFrame.handle_user_exception"; +static const char __pyx_k_SafeCallWrapper___reduce_cython[] = "SafeCallWrapper.__reduce_cython__"; static const char __pyx_k_TopLevelThreadTracerNoBackFrame[] = "TopLevelThreadTracerNoBackFrame"; +static const char __pyx_k_TryExceptContainerObj___setstat[] = "_TryExceptContainerObj.__setstate_cython__"; static const char __pyx_k_Unable_to_get_topmost_frame_for[] = "Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\nGEVENT_SUPPORT: %s"; static const char __pyx_k_get_abs_path_real_path_and_base[] = "get_abs_path_real_path_and_base_from_frame"; static const char __pyx_k_global_notify_skipped_step_in_l[] = "_global_notify_skipped_step_in_lock"; @@ -2127,7 +3034,14 @@ static const char __pyx_k_set_additional_thread_info_lock[] = "_set_additional_t static const char __pyx_k_set_trace_for_frame_and_parents[] = "set_trace_for_frame_and_parents"; static const char __pyx_k_top_level_thread_tracer_no_back[] = "top_level_thread_tracer_no_back_frames"; static const char __pyx_k_Error_in_linecache_getline_r_s_f[] = "Error in linecache.getline(%r, %s, f_globals)"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))"; +static const char __pyx_k_PyDBAdditionalThreadInfo___reduc[] = "PyDBAdditionalThreadInfo.__reduce_cython__"; +static const char __pyx_k_PyDBAdditionalThreadInfo___setst[] = "PyDBAdditionalThreadInfo.__setstate_cython__"; +static const char __pyx_k_PyDBAdditionalThreadInfo__get_re[] = "PyDBAdditionalThreadInfo._get_related_thread"; +static const char __pyx_k_PyDBAdditionalThreadInfo__is_ste[] = "PyDBAdditionalThreadInfo._is_stepping"; +static const char __pyx_k_PyDBAdditionalThreadInfo_get_top[] = "PyDBAdditionalThreadInfo.get_topmost_frame"; +static const char __pyx_k_SafeCallWrapper___setstate_cytho[] = "SafeCallWrapper.__setstate_cython__"; +static const char __pyx_k_SafeCallWrapper_get_method_objec[] = "SafeCallWrapper.get_method_object"; static const char __pyx_k_TopLevelThreadTracerOnlyUnhandle[] = "TopLevelThreadTracerOnlyUnhandledExceptions"; static const char __pyx_k_USE_CUSTOM_SYS_CURRENT_FRAMES_MA[] = "USE_CUSTOM_SYS_CURRENT_FRAMES_MAP"; static const char __pyx_k_break_on_user_uncaught_exception[] = "break_on_user_uncaught_exceptions"; @@ -2140,318 +3054,29 @@ static const char __pyx_k_notify_skipped_step_in_because_o[] = "notify_skipped_s static const char __pyx_k_pyx_unpickle_TopLevelThreadTra_2[] = "__pyx_unpickle_TopLevelThreadTracerNoBackFrame"; static const char __pyx_k_send_caught_exception_stack_proc[] = "send_caught_exception_stack_proceeded"; static const char __pyx_k_skip_on_exceptions_thrown_in_sam[] = "skip_on_exceptions_thrown_in_same_context"; +static const char __pyx_k_thread__ident_is_None_in__get_re[] = "thread._ident is None in _get_related_thread!"; static const char __pyx_k_top_level_thread_tracer_unhandle[] = "top_level_thread_tracer_unhandled"; static const char __pyx_k_trace_dispatch_and_unhandled_exc[] = "trace_dispatch_and_unhandled_exceptions"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_4[] = "Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_5[] = "Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_6[] = "Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))"; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_kp_s_1; -static PyObject *__pyx_n_s_ALL; -static PyObject *__pyx_n_s_AttributeError; -static PyObject *__pyx_n_s_CMD_SET_FUNCTION_BREAK; -static PyObject *__pyx_n_s_DEBUG_START; -static PyObject *__pyx_n_s_DEBUG_START_PY3K; -static PyObject *__pyx_n_s_EXCEPTION_TYPE_HANDLED; -static PyObject *__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED; -static PyObject *__pyx_kp_s_Error_in_linecache_checkcache_r; -static PyObject *__pyx_kp_s_Error_in_linecache_getline_r_s_f; -static PyObject *__pyx_n_s_ForkSafeLock; -static PyObject *__pyx_n_s_GeneratorExit; -static PyObject *__pyx_n_s_IGNORE_EXCEPTION_TAG; -static PyObject *__pyx_kp_s_IgnoreException; -static PyObject *__pyx_kp_s_Ignore_exception_s_in_library_s; -static PyObject *__pyx_n_s_ImportError; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6; -static PyObject *__pyx_n_s_KeyboardInterrupt; -static PyObject *__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER; -static PyObject *__pyx_n_s_NO_FTRACE; -static PyObject *__pyx_n_s_NameError; -static PyObject *__pyx_n_s_None; -static PyObject *__pyx_n_s_PYDEVD_IPYTHON_CONTEXT; -static PyObject *__pyx_n_s_PYDEV_FILE; -static PyObject *__pyx_n_s_PYTHON_SUSPEND; -static PyObject *__pyx_n_s_PickleError; -static PyObject *__pyx_n_s_PyDBAdditionalThreadInfo; -static PyObject *__pyx_n_s_PyDBFrame; -static PyObject *__pyx_n_s_RETURN_VALUES_DICT; -static PyObject *__pyx_n_s_STATE_RUN; -static PyObject *__pyx_n_s_SUPPORT_GEVENT; -static PyObject *__pyx_n_s_SafeCallWrapper; -static PyObject *__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s; -static PyObject *__pyx_n_s_StopAsyncIteration; -static PyObject *__pyx_n_s_StopIteration; -static PyObject *__pyx_kp_s_Stop_inside_ipython_call; -static PyObject *__pyx_n_s_SystemExit; -static PyObject *__pyx_n_s_TRACE_PROPERTY; -static PyObject *__pyx_n_s_Thread; -static PyObject *__pyx_n_s_ThreadTracer; -static PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame; -static PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle; -static PyObject *__pyx_n_s_TryExceptContainerObj; -static PyObject *__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA; -static PyObject *__pyx_kp_s_Unable_to_get_topmost_frame_for; -static PyObject *__pyx_kp_s_Using_Cython_speedups; -static PyObject *__pyx_kp_s__3; -static PyObject *__pyx_kp_s__7; -static PyObject *__pyx_kp_s__8; -static PyObject *__pyx_kp_s__9; -static PyObject *__pyx_n_s_add; -static PyObject *__pyx_n_s_add_command; -static PyObject *__pyx_n_s_add_exception_to_frame; -static PyObject *__pyx_n_s_additional_info; -static PyObject *__pyx_n_s_append; -static PyObject *__pyx_n_s_apply_files_filter; -static PyObject *__pyx_n_s_apply_to_settrace; -static PyObject *__pyx_n_s_arg; -static PyObject *__pyx_n_s_args; -static PyObject *__pyx_n_s_args_2; -static PyObject *__pyx_n_s_basename; -static PyObject *__pyx_n_s_bootstrap; -static PyObject *__pyx_n_s_bootstrap_2; -static PyObject *__pyx_n_s_bootstrap_inner; -static PyObject *__pyx_n_s_bootstrap_inner_2; -static PyObject *__pyx_n_s_break_on_caught_exceptions; -static PyObject *__pyx_n_s_break_on_user_uncaught_exception; -static PyObject *__pyx_n_s_breakpoints; -static PyObject *__pyx_n_s_call; -static PyObject *__pyx_n_s_call_2; -static PyObject *__pyx_n_s_can_skip; -static PyObject *__pyx_kp_s_cell; -static PyObject *__pyx_n_s_checkcache; -static PyObject *__pyx_n_s_children_variants; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_cmd_factory; -static PyObject *__pyx_n_s_cmd_step_into; -static PyObject *__pyx_n_s_cmd_step_over; -static PyObject *__pyx_n_s_co_filename; -static PyObject *__pyx_n_s_co_firstlineno; -static PyObject *__pyx_n_s_co_flags; -static PyObject *__pyx_n_s_co_name; -static PyObject *__pyx_n_s_collect_return_info; -static PyObject *__pyx_n_s_collect_try_except_info; -static PyObject *__pyx_n_s_compile; -static PyObject *__pyx_n_s_condition; -static PyObject *__pyx_n_s_constant_to_str; -static PyObject *__pyx_n_s_constructed_tid_to_last_frame; -static PyObject *__pyx_n_s_current_frames; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_dis; -static PyObject *__pyx_n_s_disable_tracing; -static PyObject *__pyx_n_s_do_wait_suspend; -static PyObject *__pyx_n_s_enable_tracing; -static PyObject *__pyx_n_s_encode; -static PyObject *__pyx_n_s_endswith; -static PyObject *__pyx_n_s_enter; -static PyObject *__pyx_n_s_event; -static PyObject *__pyx_n_s_exc_info; -static PyObject *__pyx_n_s_except_line; -static PyObject *__pyx_n_s_exception; -static PyObject *__pyx_n_s_exception_break; -static PyObject *__pyx_n_s_exception_type; -static PyObject *__pyx_n_s_exclude_exception_by_filter; -static PyObject *__pyx_n_s_exec; -static PyObject *__pyx_n_s_execfile; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_expression; -static PyObject *__pyx_n_s_f_back; -static PyObject *__pyx_n_s_f_code; -static PyObject *__pyx_n_s_f_globals; -static PyObject *__pyx_n_s_f_lasti; -static PyObject *__pyx_n_s_f_lineno; -static PyObject *__pyx_n_s_f_locals; -static PyObject *__pyx_n_s_f_trace; -static PyObject *__pyx_n_s_f_unhandled; -static PyObject *__pyx_n_s_filename; -static PyObject *__pyx_n_s_filename_to_lines_where_exceptio; -static PyObject *__pyx_n_s_filename_to_stat_info; -static PyObject *__pyx_n_s_findlinestarts; -static PyObject *__pyx_n_s_fix_top_level_trace_and_get_trac; -static PyObject *__pyx_n_s_force_only_unhandled_tracer; -static PyObject *__pyx_n_s_frame; -static PyObject *__pyx_n_s_frame_trace_dispatch; -static PyObject *__pyx_n_s_func_name; -static PyObject *__pyx_n_s_function_breakpoint_name_to_brea; -static PyObject *__pyx_n_s_get; -static PyObject *__pyx_n_s_get_abs_path_real_path_and_base; -static PyObject *__pyx_n_s_get_breakpoint; -static PyObject *__pyx_n_s_get_clsname_for_code; -static PyObject *__pyx_n_s_get_current_thread_id; -static PyObject *__pyx_n_s_get_exception_breakpoint; -static PyObject *__pyx_n_s_get_file_type; -static PyObject *__pyx_n_s_get_smart_step_into_variant_from; -static PyObject *__pyx_n_s_get_trace_dispatch_func; -static PyObject *__pyx_n_s_getline; -static PyObject *__pyx_n_s_getstate; -static PyObject *__pyx_n_s_global_cache_frame_skips; -static PyObject *__pyx_n_s_global_cache_skips; -static PyObject *__pyx_n_s_global_notify_skipped_step_in_l; -static PyObject *__pyx_n_s_handle_breakpoint_condition; -static PyObject *__pyx_n_s_handle_breakpoint_expression; -static PyObject *__pyx_n_s_handle_user_exception; -static PyObject *__pyx_n_s_has_condition; -static PyObject *__pyx_n_s_has_plugin_exception_breaks; -static PyObject *__pyx_n_s_has_plugin_line_breaks; -static PyObject *__pyx_n_s_i; -static PyObject *__pyx_n_s_id; -static PyObject *__pyx_n_s_ident; -static PyObject *__pyx_n_s_ignore_exception_trace; -static PyObject *__pyx_n_s_ignore_exceptions_thrown_in_line; -static PyObject *__pyx_n_s_ignore_system_exit_code; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_in_project_scope; -static PyObject *__pyx_n_s_info; -static PyObject *__pyx_kp_s_invalid; -static PyObject *__pyx_n_s_is_files_filter_enabled; -static PyObject *__pyx_n_s_is_line_in_except_block; -static PyObject *__pyx_n_s_is_line_in_try_block; -static PyObject *__pyx_n_s_is_logpoint; -static PyObject *__pyx_n_s_is_thread_alive; -static PyObject *__pyx_n_s_j; -static PyObject *__pyx_n_s_just_raised; -static PyObject *__pyx_n_s_kwargs; -static PyObject *__pyx_kp_s_lambda; -static PyObject *__pyx_n_s_line; -static PyObject *__pyx_n_s_linecache; -static PyObject *__pyx_n_s_linesep; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_main_2; -static PyObject *__pyx_n_s_make_console_message; -static PyObject *__pyx_n_s_make_io_message; -static PyObject *__pyx_n_s_match; -static PyObject *__pyx_n_s_method_object; -static PyObject *__pyx_kp_s_module; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_name_2; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_notify_on_first_raise_only; -static PyObject *__pyx_n_s_notify_skipped_step_in_because_o; -static PyObject *__pyx_n_s_notify_thread_not_alive; -static PyObject *__pyx_n_s_original_call; -static PyObject *__pyx_n_s_original_step_cmd; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_os_path; -static PyObject *__pyx_n_s_path; -static PyObject *__pyx_n_s_pickle; -static PyObject *__pyx_n_s_plugin; -static PyObject *__pyx_n_s_pop; -static PyObject *__pyx_n_s_py_db; -static PyObject *__pyx_kp_s_pyc; -static PyObject *__pyx_n_s_pydb_disposed; -static PyObject *__pyx_n_s_pydev_bundle; -static PyObject *__pyx_n_s_pydev_bundle__pydev_saved_modul; -static PyObject *__pyx_n_s_pydev_bundle_pydev_is_thread_al; -static PyObject *__pyx_n_s_pydev_bundle_pydev_log; -static PyObject *__pyx_n_s_pydev_do_not_trace; -static PyObject *__pyx_kp_s_pydev_execfile_py; -static PyObject *__pyx_n_s_pydev_log; -static PyObject *__pyx_n_s_pydev_log_exception; -static PyObject *__pyx_n_s_pydev_monkey; -static PyObject *__pyx_n_s_pydevd; -static PyObject *__pyx_n_s_pydevd_bundle; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_bytecode_u; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_comm_const; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_constants; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_cython; -static PyObject *__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_frame_util; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_utils; -static PyObject *__pyx_n_s_pydevd_dont_trace; -static PyObject *__pyx_n_s_pydevd_file_utils; -static PyObject *__pyx_kp_s_pydevd_py; -static PyObject *__pyx_kp_s_pydevd_traceproperty_py; -static PyObject *__pyx_n_s_pydevd_tracing; -static PyObject *__pyx_n_s_pyx_PickleError; -static PyObject *__pyx_n_s_pyx_checksum; -static PyObject *__pyx_n_s_pyx_result; -static PyObject *__pyx_n_s_pyx_state; -static PyObject *__pyx_n_s_pyx_type; -static PyObject *__pyx_n_s_pyx_unpickle_PyDBAdditionalThr; -static PyObject *__pyx_n_s_pyx_unpickle_PyDBFrame; -static PyObject *__pyx_n_s_pyx_unpickle_SafeCallWrapper; -static PyObject *__pyx_n_s_pyx_unpickle_ThreadTracer; -static PyObject *__pyx_n_s_pyx_unpickle_TopLevelThreadTra; -static PyObject *__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2; -static PyObject *__pyx_n_s_pyx_unpickle__TryExceptContain; -static PyObject *__pyx_n_s_pyx_vtable; -static PyObject *__pyx_n_s_qname; -static PyObject *__pyx_n_s_quitting; -static PyObject *__pyx_n_s_raise_lines_in_except; -static PyObject *__pyx_n_s_re; -static PyObject *__pyx_n_s_reduce; -static PyObject *__pyx_n_s_reduce_cython; -static PyObject *__pyx_n_s_reduce_ex; -static PyObject *__pyx_n_s_remove_exception_from_frame; -static PyObject *__pyx_n_s_remove_return_values_flag; -static PyObject *__pyx_n_s_return; -static PyObject *__pyx_n_s_return_line; -static PyObject *__pyx_n_s_returns; -static PyObject *__pyx_n_s_rfind; -static PyObject *__pyx_n_s_run; -static PyObject *__pyx_kp_s_s_raised_from_within_the_callba; -static PyObject *__pyx_kp_s_s_s; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_send_caught_exception_stack; -static PyObject *__pyx_n_s_send_caught_exception_stack_proc; -static PyObject *__pyx_n_s_set_additional_thread_info; -static PyObject *__pyx_n_s_set_additional_thread_info_lock; -static PyObject *__pyx_n_s_set_suspend; -static PyObject *__pyx_n_s_set_trace_for_frame_and_parents; -static PyObject *__pyx_n_s_setstate; -static PyObject *__pyx_n_s_setstate_cython; -static PyObject *__pyx_n_s_should_trace_hook; -static PyObject *__pyx_n_s_show_return_values; -static PyObject *__pyx_n_s_skip_on_exceptions_thrown_in_sam; -static PyObject *__pyx_n_s_st_mtime; -static PyObject *__pyx_n_s_st_size; -static PyObject *__pyx_n_s_startswith; -static PyObject *__pyx_n_s_stat; -static PyObject *__pyx_n_s_stop; -static PyObject *__pyx_n_s_stop_on_unhandled_exception; -static PyObject *__pyx_kp_s_stringsource; -static PyObject *__pyx_n_s_suspend; -static PyObject *__pyx_n_s_suspend_other_threads; -static PyObject *__pyx_n_s_suspend_policy; -static PyObject *__pyx_n_s_suspended_at_unhandled; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_t; -static PyObject *__pyx_n_s_tb_frame; -static PyObject *__pyx_n_s_tb_lineno; -static PyObject *__pyx_n_s_tb_next; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_thread; -static PyObject *__pyx_n_s_thread_trace_func; -static PyObject *__pyx_n_s_thread_tracer; -static PyObject *__pyx_n_s_threading; -static PyObject *__pyx_n_s_threading_active; -static PyObject *__pyx_n_s_threading_current_thread; -static PyObject *__pyx_n_s_threading_get_ident; -static PyObject *__pyx_n_s_top_level_thread_tracer; -static PyObject *__pyx_n_s_top_level_thread_tracer_no_back; -static PyObject *__pyx_n_s_top_level_thread_tracer_unhandle; -static PyObject *__pyx_n_s_trace; -static PyObject *__pyx_n_s_trace_dispatch; -static PyObject *__pyx_n_s_trace_dispatch_and_unhandled_exc; -static PyObject *__pyx_n_s_trace_exception; -static PyObject *__pyx_n_s_trace_unhandled_exceptions; -static PyObject *__pyx_n_s_try_exc_info; -static PyObject *__pyx_n_s_try_except_infos; -static PyObject *__pyx_n_s_update; -static PyObject *__pyx_kp_s_utf_8; -static PyObject *__pyx_n_s_values; -static PyObject *__pyx_n_s_version; -static PyObject *__pyx_n_s_writer; +static const char __pyx_k_TopLevelThreadTracerNoBackFrame_2[] = "TopLevelThreadTracerNoBackFrame.trace_dispatch_and_unhandled_exceptions"; +static const char __pyx_k_TopLevelThreadTracerNoBackFrame_3[] = "TopLevelThreadTracerNoBackFrame.get_trace_dispatch_func"; +static const char __pyx_k_TopLevelThreadTracerNoBackFrame_4[] = "TopLevelThreadTracerNoBackFrame.__reduce_cython__"; +static const char __pyx_k_TopLevelThreadTracerNoBackFrame_5[] = "TopLevelThreadTracerNoBackFrame.__setstate_cython__"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_4[] = "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_5[] = "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_6[] = "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))"; +static const char __pyx_k_TopLevelThreadTracerOnlyUnhandle_2[] = "TopLevelThreadTracerOnlyUnhandledExceptions.trace_unhandled_exceptions"; +static const char __pyx_k_TopLevelThreadTracerOnlyUnhandle_3[] = "TopLevelThreadTracerOnlyUnhandledExceptions.get_trace_dispatch_func"; +static const char __pyx_k_TopLevelThreadTracerOnlyUnhandle_4[] = "TopLevelThreadTracerOnlyUnhandledExceptions.__reduce_cython__"; +static const char __pyx_k_TopLevelThreadTracerOnlyUnhandle_5[] = "TopLevelThreadTracerOnlyUnhandledExceptions.__setstate_cython__"; +/* #### Code section: decls ### */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2get_topmost_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4__str__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2_get_related_thread(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4_is_stepping(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6get_topmost_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10__str__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ @@ -2518,10 +3143,19 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thread); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_2get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_2add_additional_info(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4remove_additional_info(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6any_thread_stepping(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10is_unhandled_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_container_obj, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, int __pyx_v_last_raise_line, PyObject *__pyx_v_raise_lines); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ @@ -2536,14 +3170,16 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_us static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_10trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_12__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_in_because_of_filters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12should_stop_on_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, PyObject *__pyx_v_frame, PyObject *__pyx_v_thread, PyObject *__pyx_v_arg, PyObject *__pyx_v_prev_user_uncaught_exc_info); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14handle_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_thread, PyObject *__pyx_v_frame, PyObject *__pyx_v_arg, PyObject *__pyx_v_exception_type); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16notify_skipped_step_in_because_of_filters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self, PyObject *__pyx_v_method_object); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__call__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self, PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_4get_method_object(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_8__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20trace_dispatch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self, PyObject *__pyx_v_args); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_2trace_unhandled_exceptions(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_4get_trace_dispatch_func(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self); /* proto */ @@ -2581,14 +3217,15 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_2__se static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self); /* proto */ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDBAdditionalThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16__pyx_unpickle_PyDBFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18__pyx_unpickle_SafeCallWrapper(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__pyx_unpickle_TopLevelThreadTracerNoBackFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24__pyx_unpickle_ThreadTracer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_26__pyx_unpickle_PyDBAdditionalThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_28__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_30__pyx_unpickle_PyDBFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_32__pyx_unpickle_SafeCallWrapper(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_34__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_36__pyx_unpickle_TopLevelThreadTracerNoBackFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_38__pyx_unpickle_ThreadTracer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ @@ -2596,81 +3233,2298 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(P static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_ThreadTracer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, &__pyx_n_s_get, 0, 0, 0}; -static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_update = {0, &__pyx_n_s_update, 0, 0, 0}; -static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values = {0, &__pyx_n_s_values, 0, 0, 0}; -static __Pyx_CachedCFunction __pyx_umethod_PyString_Type_rfind = {0, &__pyx_n_s_rfind, 0, 0, 0}; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_11; -static PyObject *__pyx_int_111; -static PyObject *__pyx_int_137; -static PyObject *__pyx_int_160; -static PyObject *__pyx_int_16751766; -static PyObject *__pyx_int_18997755; -static PyObject *__pyx_int_61391470; -static PyObject *__pyx_int_63705258; -static PyObject *__pyx_int_64458794; -static PyObject *__pyx_int_66451433; -static PyObject *__pyx_int_84338306; -static PyObject *__pyx_int_99625953; -static PyObject *__pyx_int_123419394; -static PyObject *__pyx_int_125568891; -static PyObject *__pyx_int_169093275; -static PyObject *__pyx_int_171613889; -static PyObject *__pyx_int_173673827; -static PyObject *__pyx_int_192493205; -static PyObject *__pyx_int_210464433; -static PyObject *__pyx_int_230645316; -static PyObject *__pyx_int_232881363; -static PyObject *__pyx_int_255484337; -static PyObject *__pyx_int_neg_1; -static PyObject *__pyx_slice__5; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__41; -static PyObject *__pyx_tuple__43; -static PyObject *__pyx_tuple__45; -static PyObject *__pyx_codeobj__19; -static PyObject *__pyx_codeobj__21; -static PyObject *__pyx_codeobj__26; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__30; -static PyObject *__pyx_codeobj__32; -static PyObject *__pyx_codeobj__34; -static PyObject *__pyx_codeobj__36; -static PyObject *__pyx_codeobj__38; -static PyObject *__pyx_codeobj__40; -static PyObject *__pyx_codeobj__42; -static PyObject *__pyx_codeobj__44; -static PyObject *__pyx_codeobj__46; -/* Late includes */ - -/* "_pydevd_bundle/pydevd_cython.pyx":67 - * # ENDIF +static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, 0, 0, 0, 0}; +static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_update = {0, 0, 0, 0, 0}; +static __Pyx_CachedCFunction __pyx_umethod_PyString_Type_rfind = {0, 0, 0, 0, 0}; +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_7cpython_4type_type; + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame; + PyObject *__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer; + #endif + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame; + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer; + PyObject *__pyx_kp_s_; + PyObject *__pyx_kp_s_1; + PyObject *__pyx_n_s_ALL; + PyObject *__pyx_n_s_AttributeError; + PyObject *__pyx_n_s_CMD_SET_FUNCTION_BREAK; + PyObject *__pyx_n_s_DEBUG_START; + PyObject *__pyx_n_s_DEBUG_START_PY3K; + PyObject *__pyx_n_s_EXCEPTION_TYPE_HANDLED; + PyObject *__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED; + PyObject *__pyx_kp_s_Error_in_linecache_checkcache_r; + PyObject *__pyx_kp_s_Error_in_linecache_getline_r_s_f; + PyObject *__pyx_n_s_ForkSafeLock; + PyObject *__pyx_n_s_GeneratorExit; + PyObject *__pyx_n_s_IGNORE_EXCEPTION_TAG; + PyObject *__pyx_kp_s_IgnoreException; + PyObject *__pyx_kp_s_Ignore_exception_s_in_library_s; + PyObject *__pyx_n_s_ImportError; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6; + PyObject *__pyx_n_s_KeyboardInterrupt; + PyObject *__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER; + PyObject *__pyx_n_s_NO_FTRACE; + PyObject *__pyx_n_s_NameError; + PyObject *__pyx_n_s_None; + PyObject *__pyx_kp_s_Not_used_in_sys_monitoring_mode; + PyObject *__pyx_n_s_PYDEVD_IPYTHON_CONTEXT; + PyObject *__pyx_n_s_PYDEVD_USE_SYS_MONITORING; + PyObject *__pyx_n_s_PYDEV_FILE; + PyObject *__pyx_n_s_PYTHON_SUSPEND; + PyObject *__pyx_n_s_PickleError; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo___reduc; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo___setst; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo__get_re; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo__is_ste; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo_get_top; + PyObject *__pyx_n_s_PyDBAdditionalThreadInfo_update; + PyObject *__pyx_n_s_PyDBFrame; + PyObject *__pyx_n_s_PyDBFrame___reduce_cython; + PyObject *__pyx_n_s_PyDBFrame___setstate_cython; + PyObject *__pyx_n_s_PyDBFrame_do_wait_suspend; + PyObject *__pyx_n_s_PyDBFrame_handle_user_exception; + PyObject *__pyx_n_s_PyDBFrame_set_suspend; + PyObject *__pyx_n_s_PyDBFrame_trace_dispatch; + PyObject *__pyx_n_s_PyDBFrame_trace_exception; + PyObject *__pyx_n_s_RETURN_VALUES_DICT; + PyObject *__pyx_n_s_RuntimeError; + PyObject *__pyx_n_s_STATE_RUN; + PyObject *__pyx_n_s_STATE_SUSPEND; + PyObject *__pyx_n_s_SUPPORT_GEVENT; + PyObject *__pyx_n_s_SafeCallWrapper; + PyObject *__pyx_n_s_SafeCallWrapper___reduce_cython; + PyObject *__pyx_n_s_SafeCallWrapper___setstate_cytho; + PyObject *__pyx_n_s_SafeCallWrapper_get_method_objec; + PyObject *__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s; + PyObject *__pyx_n_s_StopAsyncIteration; + PyObject *__pyx_n_s_StopIteration; + PyObject *__pyx_kp_s_Stop_inside_ipython_call; + PyObject *__pyx_n_s_SystemExit; + PyObject *__pyx_n_s_TRACE_PROPERTY; + PyObject *__pyx_n_s_Thread; + PyObject *__pyx_n_s_ThreadTracer; + PyObject *__pyx_n_s_ThreadTracer___reduce_cython; + PyObject *__pyx_n_s_ThreadTracer___setstate_cython; + PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame; + PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame_2; + PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame_3; + PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame_4; + PyObject *__pyx_n_s_TopLevelThreadTracerNoBackFrame_5; + PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle; + PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2; + PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3; + PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4; + PyObject *__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5; + PyObject *__pyx_n_s_TryExceptContainerObj; + PyObject *__pyx_n_s_TryExceptContainerObj___reduce; + PyObject *__pyx_n_s_TryExceptContainerObj___setstat; + PyObject *__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA; + PyObject *__pyx_kp_s_Unable_to_get_topmost_frame_for; + PyObject *__pyx_kp_s__10; + PyObject *__pyx_kp_u__10; + PyObject *__pyx_n_s__19; + PyObject *__pyx_kp_s__4; + PyObject *__pyx_kp_s__8; + PyObject *__pyx_kp_s__9; + PyObject *__pyx_n_s_abs_real_path_and_base; + PyObject *__pyx_n_s_absolute_filename; + PyObject *__pyx_n_s_active; + PyObject *__pyx_n_s_add; + PyObject *__pyx_n_s_add_additional_info; + PyObject *__pyx_n_s_add_command; + PyObject *__pyx_n_s_add_exception_to_frame; + PyObject *__pyx_n_s_additional_info; + PyObject *__pyx_n_s_any_thread_stepping; + PyObject *__pyx_n_s_append; + PyObject *__pyx_n_s_apply_files_filter; + PyObject *__pyx_n_s_apply_to_settrace; + PyObject *__pyx_n_s_arg; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_args_2; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_basename; + PyObject *__pyx_n_s_bootstrap; + PyObject *__pyx_n_s_bootstrap_2; + PyObject *__pyx_n_s_bootstrap_inner; + PyObject *__pyx_n_s_bootstrap_inner_2; + PyObject *__pyx_n_s_break_on_caught_exceptions; + PyObject *__pyx_n_s_break_on_user_uncaught_exception; + PyObject *__pyx_n_s_breakpoints; + PyObject *__pyx_n_s_call; + PyObject *__pyx_n_s_call_2; + PyObject *__pyx_n_s_can_skip; + PyObject *__pyx_n_s_canonical_normalized_filename; + PyObject *__pyx_kp_s_cell; + PyObject *__pyx_n_s_check_excs; + PyObject *__pyx_n_s_check_trace_obj; + PyObject *__pyx_n_s_checkcache; + PyObject *__pyx_n_s_children_variants; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_cmd_factory; + PyObject *__pyx_n_s_cmd_step_into; + PyObject *__pyx_n_s_cmd_step_over; + PyObject *__pyx_n_s_co_filename; + PyObject *__pyx_n_s_co_firstlineno; + PyObject *__pyx_n_s_co_flags; + PyObject *__pyx_n_s_co_name; + PyObject *__pyx_n_s_collect_return_info; + PyObject *__pyx_n_s_collect_try_except_info; + PyObject *__pyx_n_s_compile; + PyObject *__pyx_n_s_condition; + PyObject *__pyx_n_s_constant_to_str; + PyObject *__pyx_n_s_constructed_tid_to_last_frame; + PyObject *__pyx_n_s_container_obj; + PyObject *__pyx_n_s_critical; + PyObject *__pyx_n_s_curr_stat; + PyObject *__pyx_n_s_current_frames; + PyObject *__pyx_n_s_custom_key; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_n_s_dict_2; + PyObject *__pyx_n_s_dis; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_disable_tracing; + PyObject *__pyx_n_s_do_wait_suspend; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_enable_tracing; + PyObject *__pyx_n_s_encode; + PyObject *__pyx_n_s_endswith; + PyObject *__pyx_n_s_enter; + PyObject *__pyx_n_s_event; + PyObject *__pyx_n_s_exc_break; + PyObject *__pyx_n_s_exc_break_caught; + PyObject *__pyx_n_s_exc_break_user; + PyObject *__pyx_n_s_exc_info; + PyObject *__pyx_n_s_exc_lineno; + PyObject *__pyx_n_s_except_line; + PyObject *__pyx_n_s_exception; + PyObject *__pyx_n_s_exception_break; + PyObject *__pyx_n_s_exception_breakpoint; + PyObject *__pyx_n_s_exception_type; + PyObject *__pyx_n_s_exclude_exception_by_filter; + PyObject *__pyx_n_s_exec; + PyObject *__pyx_n_s_execfile; + PyObject *__pyx_n_s_exit; + PyObject *__pyx_n_s_expression; + PyObject *__pyx_n_s_f; + PyObject *__pyx_n_s_f_back; + PyObject *__pyx_n_s_f_code; + PyObject *__pyx_n_s_f_globals; + PyObject *__pyx_n_s_f_lasti; + PyObject *__pyx_n_s_f_lineno; + PyObject *__pyx_n_s_f_locals; + PyObject *__pyx_n_s_f_trace; + PyObject *__pyx_n_s_f_unhandled; + PyObject *__pyx_n_s_filename; + PyObject *__pyx_n_s_filename_to_lines_where_exceptio; + PyObject *__pyx_n_s_filename_to_stat_info; + PyObject *__pyx_n_s_findlinestarts; + PyObject *__pyx_n_s_fix_top_level_trace_and_get_trac; + PyObject *__pyx_n_s_force_only_unhandled_tracer; + PyObject *__pyx_n_s_frame; + PyObject *__pyx_n_s_frame_cache_key; + PyObject *__pyx_n_s_frame_id_to_frame; + PyObject *__pyx_n_s_frame_skips_cache; + PyObject *__pyx_n_s_frame_trace_dispatch; + PyObject *__pyx_n_s_from_user_input; + PyObject *__pyx_n_s_func_name; + PyObject *__pyx_n_s_function_breakpoint_name_to_brea; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_abs_path_real_path_and_base; + PyObject *__pyx_n_s_get_breakpoint; + PyObject *__pyx_n_s_get_clsname_for_code; + PyObject *__pyx_n_s_get_current_thread_id; + PyObject *__pyx_n_s_get_exception_breakpoint; + PyObject *__pyx_n_s_get_file_type; + PyObject *__pyx_n_s_get_global_debugger; + PyObject *__pyx_n_s_get_internal_queue_and_event; + PyObject *__pyx_n_s_get_method_object; + PyObject *__pyx_n_s_get_related_thread; + PyObject *__pyx_n_s_get_smart_step_into_variant_from; + PyObject *__pyx_n_s_get_thread_id; + PyObject *__pyx_n_s_get_topmost_frame; + PyObject *__pyx_n_s_get_trace_dispatch_func; + PyObject *__pyx_n_s_getline; + PyObject *__pyx_n_s_getstate; + PyObject *__pyx_n_s_global_cache_frame_skips; + PyObject *__pyx_n_s_global_cache_skips; + PyObject *__pyx_n_s_global_notify_skipped_step_in_l; + PyObject *__pyx_n_s_handle_breakpoint_condition; + PyObject *__pyx_n_s_handle_breakpoint_expression; + PyObject *__pyx_n_s_handle_exception; + PyObject *__pyx_n_s_handle_user_exception; + PyObject *__pyx_n_s_has_condition; + PyObject *__pyx_n_s_has_plugin_exception_breaks; + PyObject *__pyx_n_s_has_plugin_line_breaks; + PyObject *__pyx_n_s_i; + PyObject *__pyx_n_s_id; + PyObject *__pyx_n_s_ident; + PyObject *__pyx_n_s_ident_2; + PyObject *__pyx_n_s_ignore_exception_trace; + PyObject *__pyx_n_s_ignore_exceptions_thrown_in_line; + PyObject *__pyx_n_s_ignore_system_exit_code; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_in_project_scope; + PyObject *__pyx_n_s_info; + PyObject *__pyx_n_s_initial_trace_obj; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_kp_s_invalid; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_is_files_filter_enabled; + PyObject *__pyx_n_s_is_line_in_except_block; + PyObject *__pyx_n_s_is_line_in_try_block; + PyObject *__pyx_n_s_is_logpoint; + PyObject *__pyx_n_s_is_stepping; + PyObject *__pyx_n_s_is_stopped; + PyObject *__pyx_n_s_is_thread_alive; + PyObject *__pyx_n_s_is_unhandled_exception; + PyObject *__pyx_n_s_is_user_uncaught; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_j; + PyObject *__pyx_n_s_just_raised; + PyObject *__pyx_n_s_kwargs; + PyObject *__pyx_kp_s_lambda; + PyObject *__pyx_n_s_last_raise_line; + PyObject *__pyx_n_s_last_stat; + PyObject *__pyx_n_s_line; + PyObject *__pyx_n_s_linecache; + PyObject *__pyx_n_s_lines; + PyObject *__pyx_n_s_lines_ignored; + PyObject *__pyx_n_s_linesep; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_main_2; + PyObject *__pyx_n_s_make_console_message; + PyObject *__pyx_n_s_make_io_message; + PyObject *__pyx_n_s_match; + PyObject *__pyx_n_s_maybe_user_uncaught_exc_info; + PyObject *__pyx_n_s_merged; + PyObject *__pyx_n_s_method_object; + PyObject *__pyx_kp_s_module; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_name_2; + PyObject *__pyx_n_s_new; + PyObject *__pyx_n_s_next_additional_info; + PyObject *__pyx_n_s_notify_on_first_raise_only; + PyObject *__pyx_n_s_notify_skipped_step_in_because_o; + PyObject *__pyx_n_s_notify_thread_not_alive; + PyObject *__pyx_n_s_original_call; + PyObject *__pyx_n_s_original_step_cmd; + PyObject *__pyx_n_s_os; + PyObject *__pyx_n_s_os_path; + PyObject *__pyx_n_s_path; + PyObject *__pyx_n_s_pickle; + PyObject *__pyx_n_s_plugin; + PyObject *__pyx_n_s_pop; + PyObject *__pyx_n_s_prev_user_uncaught_exc_info; + PyObject *__pyx_n_s_py_db; + PyObject *__pyx_kp_s_pyc; + PyObject *__pyx_n_s_pydb_disposed; + PyObject *__pyx_n_s_pydev_bundle; + PyObject *__pyx_n_s_pydev_bundle__pydev_saved_modul; + PyObject *__pyx_n_s_pydev_bundle_pydev_is_thread_al; + PyObject *__pyx_n_s_pydev_bundle_pydev_log; + PyObject *__pyx_n_s_pydev_do_not_trace; + PyObject *__pyx_kp_s_pydev_execfile_py; + PyObject *__pyx_n_s_pydev_log; + PyObject *__pyx_n_s_pydev_log_exception; + PyObject *__pyx_n_s_pydev_monkey; + PyObject *__pyx_n_s_pydevd; + PyObject *__pyx_n_s_pydevd_bundle; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_bytecode_u; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_comm_const; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_constants; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_cython; + PyObject *__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_frame_util; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_utils; + PyObject *__pyx_n_s_pydevd_dont_trace; + PyObject *__pyx_n_s_pydevd_file_utils; + PyObject *__pyx_kp_s_pydevd_py; + PyObject *__pyx_kp_s_pydevd_traceproperty_py; + PyObject *__pyx_n_s_pydevd_tracing; + PyObject *__pyx_n_s_pyx_PickleError; + PyObject *__pyx_n_s_pyx_checksum; + PyObject *__pyx_n_s_pyx_result; + PyObject *__pyx_n_s_pyx_state; + PyObject *__pyx_n_s_pyx_type; + PyObject *__pyx_n_s_pyx_unpickle_PyDBAdditionalThr; + PyObject *__pyx_n_s_pyx_unpickle_PyDBFrame; + PyObject *__pyx_n_s_pyx_unpickle_SafeCallWrapper; + PyObject *__pyx_n_s_pyx_unpickle_ThreadTracer; + PyObject *__pyx_n_s_pyx_unpickle_TopLevelThreadTra; + PyObject *__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2; + PyObject *__pyx_n_s_pyx_unpickle__TryExceptContain; + PyObject *__pyx_n_s_pyx_vtable; + PyObject *__pyx_n_s_qname; + PyObject *__pyx_n_s_quitting; + PyObject *__pyx_n_s_raise_lines; + PyObject *__pyx_n_s_raise_lines_in_except; + PyObject *__pyx_n_s_re; + PyObject *__pyx_n_s_reduce; + PyObject *__pyx_n_s_reduce_cython; + PyObject *__pyx_n_s_reduce_ex; + PyObject *__pyx_n_s_ref; + PyObject *__pyx_n_s_remove_additional_info; + PyObject *__pyx_n_s_remove_exception_from_frame; + PyObject *__pyx_n_s_remove_return_values_flag; + PyObject *__pyx_n_s_result; + PyObject *__pyx_n_s_ret; + PyObject *__pyx_n_s_return; + PyObject *__pyx_n_s_return_line; + PyObject *__pyx_n_s_returns; + PyObject *__pyx_n_s_rfind; + PyObject *__pyx_n_s_run; + PyObject *__pyx_kp_s_s_raised_from_within_the_callba; + PyObject *__pyx_kp_s_s_s; + PyObject *__pyx_n_s_self; + PyObject *__pyx_n_s_send_caught_exception_stack; + PyObject *__pyx_n_s_send_caught_exception_stack_proc; + PyObject *__pyx_n_s_set; + PyObject *__pyx_n_s_set_additional_thread_info; + PyObject *__pyx_n_s_set_additional_thread_info_lock; + PyObject *__pyx_n_s_set_suspend; + PyObject *__pyx_n_s_set_trace_for_frame_and_parents; + PyObject *__pyx_n_s_setstate; + PyObject *__pyx_n_s_setstate_cython; + PyObject *__pyx_n_s_should_stop; + PyObject *__pyx_n_s_should_stop_on_exception; + PyObject *__pyx_n_s_should_trace_hook; + PyObject *__pyx_n_s_show_return_values; + PyObject *__pyx_n_s_skip_on_exceptions_thrown_in_sam; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_st_mtime; + PyObject *__pyx_n_s_st_size; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_stat; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_stop; + PyObject *__pyx_n_s_stop_on_unhandled_exception; + PyObject *__pyx_n_s_stopped; + PyObject *__pyx_kp_s_stringsource; + PyObject *__pyx_n_s_suspend; + PyObject *__pyx_n_s_suspend_other_threads; + PyObject *__pyx_n_s_suspend_policy; + PyObject *__pyx_n_s_suspended_at_unhandled; + PyObject *__pyx_n_s_sys; + PyObject *__pyx_n_s_t; + PyObject *__pyx_n_s_tb_frame; + PyObject *__pyx_n_s_tb_lineno; + PyObject *__pyx_n_s_tb_next; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_thread; + PyObject *__pyx_kp_s_thread__ident_is_None_in__get_re; + PyObject *__pyx_n_s_thread_trace_func; + PyObject *__pyx_n_s_thread_tracer; + PyObject *__pyx_n_s_threading; + PyObject *__pyx_n_s_threading_active; + PyObject *__pyx_n_s_threading_current_thread; + PyObject *__pyx_n_s_threading_get_ident; + PyObject *__pyx_n_s_top_level_thread_tracer; + PyObject *__pyx_n_s_top_level_thread_tracer_no_back; + PyObject *__pyx_n_s_top_level_thread_tracer_unhandle; + PyObject *__pyx_n_s_trace; + PyObject *__pyx_n_s_trace_dispatch; + PyObject *__pyx_n_s_trace_dispatch_and_unhandled_exc; + PyObject *__pyx_n_s_trace_exception; + PyObject *__pyx_n_s_trace_obj; + PyObject *__pyx_n_s_trace_unhandled_exceptions; + PyObject *__pyx_n_s_try_exc_info; + PyObject *__pyx_n_s_try_except_info; + PyObject *__pyx_n_s_try_except_infos; + PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_update_stepping_info; + PyObject *__pyx_n_s_use_setstate; + PyObject *__pyx_kp_s_utf_8; + PyObject *__pyx_n_s_valid_try_except_infos; + PyObject *__pyx_n_s_value; + PyObject *__pyx_n_s_values; + PyObject *__pyx_n_s_version; + PyObject *__pyx_n_s_was_just_raised; + PyObject *__pyx_n_s_weak_thread; + PyObject *__pyx_n_s_weakref; + PyObject *__pyx_n_s_writer; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_11; + PyObject *__pyx_int_111; + PyObject *__pyx_int_137; + PyObject *__pyx_int_160; + PyObject *__pyx_int_2424557; + PyObject *__pyx_int_16751766; + PyObject *__pyx_int_18997755; + PyObject *__pyx_int_61391470; + PyObject *__pyx_int_63705258; + PyObject *__pyx_int_64458794; + PyObject *__pyx_int_66451433; + PyObject *__pyx_int_70528507; + PyObject *__pyx_int_84338306; + PyObject *__pyx_int_125568891; + PyObject *__pyx_int_169093275; + PyObject *__pyx_int_171613889; + PyObject *__pyx_int_192493205; + PyObject *__pyx_int_210464433; + PyObject *__pyx_int_221489684; + PyObject *__pyx_int_230645316; + PyObject *__pyx_int_232881363; + PyObject *__pyx_int_255484337; + PyObject *__pyx_int_neg_1; + PyObject *__pyx_slice__2; + PyObject *__pyx_slice__6; + PyObject *__pyx_tuple__3; + PyObject *__pyx_tuple__5; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__11; + PyObject *__pyx_tuple__12; + PyObject *__pyx_tuple__13; + PyObject *__pyx_tuple__14; + PyObject *__pyx_tuple__15; + PyObject *__pyx_tuple__16; + PyObject *__pyx_tuple__17; + PyObject *__pyx_tuple__18; + PyObject *__pyx_tuple__20; + PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__26; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__30; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__36; + PyObject *__pyx_tuple__37; + PyObject *__pyx_tuple__39; + PyObject *__pyx_tuple__40; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__42; + PyObject *__pyx_tuple__46; + PyObject *__pyx_tuple__49; + PyObject *__pyx_tuple__51; + PyObject *__pyx_tuple__53; + PyObject *__pyx_tuple__57; + PyObject *__pyx_tuple__59; + PyObject *__pyx_tuple__61; + PyObject *__pyx_tuple__66; + PyObject *__pyx_tuple__68; + PyObject *__pyx_tuple__70; + PyObject *__pyx_tuple__75; + PyObject *__pyx_tuple__84; + PyObject *__pyx_codeobj__21; + PyObject *__pyx_codeobj__22; + PyObject *__pyx_codeobj__24; + PyObject *__pyx_codeobj__25; + PyObject *__pyx_codeobj__27; + PyObject *__pyx_codeobj__29; + PyObject *__pyx_codeobj__31; + PyObject *__pyx_codeobj__33; + PyObject *__pyx_codeobj__34; + PyObject *__pyx_codeobj__35; + PyObject *__pyx_codeobj__38; + PyObject *__pyx_codeobj__43; + PyObject *__pyx_codeobj__44; + PyObject *__pyx_codeobj__45; + PyObject *__pyx_codeobj__47; + PyObject *__pyx_codeobj__48; + PyObject *__pyx_codeobj__50; + PyObject *__pyx_codeobj__52; + PyObject *__pyx_codeobj__54; + PyObject *__pyx_codeobj__55; + PyObject *__pyx_codeobj__56; + PyObject *__pyx_codeobj__58; + PyObject *__pyx_codeobj__60; + PyObject *__pyx_codeobj__62; + PyObject *__pyx_codeobj__63; + PyObject *__pyx_codeobj__64; + PyObject *__pyx_codeobj__65; + PyObject *__pyx_codeobj__67; + PyObject *__pyx_codeobj__69; + PyObject *__pyx_codeobj__71; + PyObject *__pyx_codeobj__72; + PyObject *__pyx_codeobj__73; + PyObject *__pyx_codeobj__74; + PyObject *__pyx_codeobj__76; + PyObject *__pyx_codeobj__77; + PyObject *__pyx_codeobj__78; + PyObject *__pyx_codeobj__79; + PyObject *__pyx_codeobj__80; + PyObject *__pyx_codeobj__81; + PyObject *__pyx_codeobj__82; + PyObject *__pyx_codeobj__83; + PyObject *__pyx_codeobj__85; + PyObject *__pyx_codeobj__86; + PyObject *__pyx_codeobj__87; + PyObject *__pyx_codeobj__88; + PyObject *__pyx_codeobj__89; + PyObject *__pyx_codeobj__90; + PyObject *__pyx_codeobj__91; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + Py_CLEAR(clear_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + Py_CLEAR(clear_module_state->__pyx_kp_s_); + Py_CLEAR(clear_module_state->__pyx_kp_s_1); + Py_CLEAR(clear_module_state->__pyx_n_s_ALL); + Py_CLEAR(clear_module_state->__pyx_n_s_AttributeError); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_SET_FUNCTION_BREAK); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUG_START); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUG_START_PY3K); + Py_CLEAR(clear_module_state->__pyx_n_s_EXCEPTION_TYPE_HANDLED); + Py_CLEAR(clear_module_state->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + Py_CLEAR(clear_module_state->__pyx_kp_s_Error_in_linecache_checkcache_r); + Py_CLEAR(clear_module_state->__pyx_kp_s_Error_in_linecache_getline_r_s_f); + Py_CLEAR(clear_module_state->__pyx_n_s_ForkSafeLock); + Py_CLEAR(clear_module_state->__pyx_n_s_GeneratorExit); + Py_CLEAR(clear_module_state->__pyx_n_s_IGNORE_EXCEPTION_TAG); + Py_CLEAR(clear_module_state->__pyx_kp_s_IgnoreException); + Py_CLEAR(clear_module_state->__pyx_kp_s_Ignore_exception_s_in_library_s); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6); + Py_CLEAR(clear_module_state->__pyx_n_s_KeyboardInterrupt); + Py_CLEAR(clear_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_CLEAR(clear_module_state->__pyx_n_s_NO_FTRACE); + Py_CLEAR(clear_module_state->__pyx_n_s_NameError); + Py_CLEAR(clear_module_state->__pyx_n_s_None); + Py_CLEAR(clear_module_state->__pyx_kp_s_Not_used_in_sys_monitoring_mode); + Py_CLEAR(clear_module_state->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + Py_CLEAR(clear_module_state->__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + Py_CLEAR(clear_module_state->__pyx_n_s_PYDEV_FILE); + Py_CLEAR(clear_module_state->__pyx_n_s_PYTHON_SUSPEND); + Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo___reduc); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo___setst); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo__get_re); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo__is_ste); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo_get_top); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBAdditionalThreadInfo_update); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame_do_wait_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame_handle_user_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame_set_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame_trace_dispatch); + Py_CLEAR(clear_module_state->__pyx_n_s_PyDBFrame_trace_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_RETURN_VALUES_DICT); + Py_CLEAR(clear_module_state->__pyx_n_s_RuntimeError); + Py_CLEAR(clear_module_state->__pyx_n_s_STATE_RUN); + Py_CLEAR(clear_module_state->__pyx_n_s_STATE_SUSPEND); + Py_CLEAR(clear_module_state->__pyx_n_s_SUPPORT_GEVENT); + Py_CLEAR(clear_module_state->__pyx_n_s_SafeCallWrapper); + Py_CLEAR(clear_module_state->__pyx_n_s_SafeCallWrapper___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_SafeCallWrapper___setstate_cytho); + Py_CLEAR(clear_module_state->__pyx_n_s_SafeCallWrapper_get_method_objec); + Py_CLEAR(clear_module_state->__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s); + Py_CLEAR(clear_module_state->__pyx_n_s_StopAsyncIteration); + Py_CLEAR(clear_module_state->__pyx_n_s_StopIteration); + Py_CLEAR(clear_module_state->__pyx_kp_s_Stop_inside_ipython_call); + Py_CLEAR(clear_module_state->__pyx_n_s_SystemExit); + Py_CLEAR(clear_module_state->__pyx_n_s_TRACE_PROPERTY); + Py_CLEAR(clear_module_state->__pyx_n_s_Thread); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadTracer); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadTracer___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadTracer___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_2); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_3); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_4); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_5); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4); + Py_CLEAR(clear_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj___reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj___setstat); + Py_CLEAR(clear_module_state->__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); + Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_get_topmost_frame_for); + Py_CLEAR(clear_module_state->__pyx_kp_s__10); + Py_CLEAR(clear_module_state->__pyx_kp_u__10); + Py_CLEAR(clear_module_state->__pyx_n_s__19); + Py_CLEAR(clear_module_state->__pyx_kp_s__4); + Py_CLEAR(clear_module_state->__pyx_kp_s__8); + Py_CLEAR(clear_module_state->__pyx_kp_s__9); + Py_CLEAR(clear_module_state->__pyx_n_s_abs_real_path_and_base); + Py_CLEAR(clear_module_state->__pyx_n_s_absolute_filename); + Py_CLEAR(clear_module_state->__pyx_n_s_active); + Py_CLEAR(clear_module_state->__pyx_n_s_add); + Py_CLEAR(clear_module_state->__pyx_n_s_add_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_add_command); + Py_CLEAR(clear_module_state->__pyx_n_s_add_exception_to_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_any_thread_stepping); + Py_CLEAR(clear_module_state->__pyx_n_s_append); + Py_CLEAR(clear_module_state->__pyx_n_s_apply_files_filter); + Py_CLEAR(clear_module_state->__pyx_n_s_apply_to_settrace); + Py_CLEAR(clear_module_state->__pyx_n_s_arg); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_args_2); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_basename); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_2); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner_2); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_breakpoints); + Py_CLEAR(clear_module_state->__pyx_n_s_call); + Py_CLEAR(clear_module_state->__pyx_n_s_call_2); + Py_CLEAR(clear_module_state->__pyx_n_s_can_skip); + Py_CLEAR(clear_module_state->__pyx_n_s_canonical_normalized_filename); + Py_CLEAR(clear_module_state->__pyx_kp_s_cell); + Py_CLEAR(clear_module_state->__pyx_n_s_check_excs); + Py_CLEAR(clear_module_state->__pyx_n_s_check_trace_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_checkcache); + Py_CLEAR(clear_module_state->__pyx_n_s_children_variants); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_factory); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_step_into); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_step_over); + Py_CLEAR(clear_module_state->__pyx_n_s_co_filename); + Py_CLEAR(clear_module_state->__pyx_n_s_co_firstlineno); + Py_CLEAR(clear_module_state->__pyx_n_s_co_flags); + Py_CLEAR(clear_module_state->__pyx_n_s_co_name); + Py_CLEAR(clear_module_state->__pyx_n_s_collect_return_info); + Py_CLEAR(clear_module_state->__pyx_n_s_collect_try_except_info); + Py_CLEAR(clear_module_state->__pyx_n_s_compile); + Py_CLEAR(clear_module_state->__pyx_n_s_condition); + Py_CLEAR(clear_module_state->__pyx_n_s_constant_to_str); + Py_CLEAR(clear_module_state->__pyx_n_s_constructed_tid_to_last_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_container_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_critical); + Py_CLEAR(clear_module_state->__pyx_n_s_curr_stat); + Py_CLEAR(clear_module_state->__pyx_n_s_current_frames); + Py_CLEAR(clear_module_state->__pyx_n_s_custom_key); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_dict_2); + Py_CLEAR(clear_module_state->__pyx_n_s_dis); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_disable_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_do_wait_suspend); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_enable_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_s_endswith); + Py_CLEAR(clear_module_state->__pyx_n_s_enter); + Py_CLEAR(clear_module_state->__pyx_n_s_event); + Py_CLEAR(clear_module_state->__pyx_n_s_exc_break); + Py_CLEAR(clear_module_state->__pyx_n_s_exc_break_caught); + Py_CLEAR(clear_module_state->__pyx_n_s_exc_break_user); + Py_CLEAR(clear_module_state->__pyx_n_s_exc_info); + Py_CLEAR(clear_module_state->__pyx_n_s_exc_lineno); + Py_CLEAR(clear_module_state->__pyx_n_s_except_line); + Py_CLEAR(clear_module_state->__pyx_n_s_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_exception_break); + Py_CLEAR(clear_module_state->__pyx_n_s_exception_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_exception_type); + Py_CLEAR(clear_module_state->__pyx_n_s_exclude_exception_by_filter); + Py_CLEAR(clear_module_state->__pyx_n_s_exec); + Py_CLEAR(clear_module_state->__pyx_n_s_execfile); + Py_CLEAR(clear_module_state->__pyx_n_s_exit); + Py_CLEAR(clear_module_state->__pyx_n_s_expression); + Py_CLEAR(clear_module_state->__pyx_n_s_f); + Py_CLEAR(clear_module_state->__pyx_n_s_f_back); + Py_CLEAR(clear_module_state->__pyx_n_s_f_code); + Py_CLEAR(clear_module_state->__pyx_n_s_f_globals); + Py_CLEAR(clear_module_state->__pyx_n_s_f_lasti); + Py_CLEAR(clear_module_state->__pyx_n_s_f_lineno); + Py_CLEAR(clear_module_state->__pyx_n_s_f_locals); + Py_CLEAR(clear_module_state->__pyx_n_s_f_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_f_unhandled); + Py_CLEAR(clear_module_state->__pyx_n_s_filename); + Py_CLEAR(clear_module_state->__pyx_n_s_filename_to_lines_where_exceptio); + Py_CLEAR(clear_module_state->__pyx_n_s_filename_to_stat_info); + Py_CLEAR(clear_module_state->__pyx_n_s_findlinestarts); + Py_CLEAR(clear_module_state->__pyx_n_s_fix_top_level_trace_and_get_trac); + Py_CLEAR(clear_module_state->__pyx_n_s_force_only_unhandled_tracer); + Py_CLEAR(clear_module_state->__pyx_n_s_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_cache_key); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_id_to_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_skips_cache); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_trace_dispatch); + Py_CLEAR(clear_module_state->__pyx_n_s_from_user_input); + Py_CLEAR(clear_module_state->__pyx_n_s_func_name); + Py_CLEAR(clear_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_CLEAR(clear_module_state->__pyx_n_s_get_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_get_clsname_for_code); + Py_CLEAR(clear_module_state->__pyx_n_s_get_current_thread_id); + Py_CLEAR(clear_module_state->__pyx_n_s_get_exception_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_get_file_type); + Py_CLEAR(clear_module_state->__pyx_n_s_get_global_debugger); + Py_CLEAR(clear_module_state->__pyx_n_s_get_internal_queue_and_event); + Py_CLEAR(clear_module_state->__pyx_n_s_get_method_object); + Py_CLEAR(clear_module_state->__pyx_n_s_get_related_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_get_smart_step_into_variant_from); + Py_CLEAR(clear_module_state->__pyx_n_s_get_thread_id); + Py_CLEAR(clear_module_state->__pyx_n_s_get_topmost_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_get_trace_dispatch_func); + Py_CLEAR(clear_module_state->__pyx_n_s_getline); + Py_CLEAR(clear_module_state->__pyx_n_s_getstate); + Py_CLEAR(clear_module_state->__pyx_n_s_global_cache_frame_skips); + Py_CLEAR(clear_module_state->__pyx_n_s_global_cache_skips); + Py_CLEAR(clear_module_state->__pyx_n_s_global_notify_skipped_step_in_l); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_breakpoint_condition); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_breakpoint_expression); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_user_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_has_condition); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_i); + Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_s_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_ident_2); + Py_CLEAR(clear_module_state->__pyx_n_s_ignore_exception_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_ignore_exceptions_thrown_in_line); + Py_CLEAR(clear_module_state->__pyx_n_s_ignore_system_exit_code); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_in_project_scope); + Py_CLEAR(clear_module_state->__pyx_n_s_info); + Py_CLEAR(clear_module_state->__pyx_n_s_initial_trace_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_kp_s_invalid); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_files_filter_enabled); + Py_CLEAR(clear_module_state->__pyx_n_s_is_line_in_except_block); + Py_CLEAR(clear_module_state->__pyx_n_s_is_line_in_try_block); + Py_CLEAR(clear_module_state->__pyx_n_s_is_logpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_is_stepping); + Py_CLEAR(clear_module_state->__pyx_n_s_is_stopped); + Py_CLEAR(clear_module_state->__pyx_n_s_is_thread_alive); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unhandled_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_is_user_uncaught); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_j); + Py_CLEAR(clear_module_state->__pyx_n_s_just_raised); + Py_CLEAR(clear_module_state->__pyx_n_s_kwargs); + Py_CLEAR(clear_module_state->__pyx_kp_s_lambda); + Py_CLEAR(clear_module_state->__pyx_n_s_last_raise_line); + Py_CLEAR(clear_module_state->__pyx_n_s_last_stat); + Py_CLEAR(clear_module_state->__pyx_n_s_line); + Py_CLEAR(clear_module_state->__pyx_n_s_linecache); + Py_CLEAR(clear_module_state->__pyx_n_s_lines); + Py_CLEAR(clear_module_state->__pyx_n_s_lines_ignored); + Py_CLEAR(clear_module_state->__pyx_n_s_linesep); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_main_2); + Py_CLEAR(clear_module_state->__pyx_n_s_make_console_message); + Py_CLEAR(clear_module_state->__pyx_n_s_make_io_message); + Py_CLEAR(clear_module_state->__pyx_n_s_match); + Py_CLEAR(clear_module_state->__pyx_n_s_maybe_user_uncaught_exc_info); + Py_CLEAR(clear_module_state->__pyx_n_s_merged); + Py_CLEAR(clear_module_state->__pyx_n_s_method_object); + Py_CLEAR(clear_module_state->__pyx_kp_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_name_2); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_n_s_next_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_notify_on_first_raise_only); + Py_CLEAR(clear_module_state->__pyx_n_s_notify_skipped_step_in_because_o); + Py_CLEAR(clear_module_state->__pyx_n_s_notify_thread_not_alive); + Py_CLEAR(clear_module_state->__pyx_n_s_original_call); + Py_CLEAR(clear_module_state->__pyx_n_s_original_step_cmd); + Py_CLEAR(clear_module_state->__pyx_n_s_os); + Py_CLEAR(clear_module_state->__pyx_n_s_os_path); + Py_CLEAR(clear_module_state->__pyx_n_s_path); + Py_CLEAR(clear_module_state->__pyx_n_s_pickle); + Py_CLEAR(clear_module_state->__pyx_n_s_plugin); + Py_CLEAR(clear_module_state->__pyx_n_s_pop); + Py_CLEAR(clear_module_state->__pyx_n_s_prev_user_uncaught_exc_info); + Py_CLEAR(clear_module_state->__pyx_n_s_py_db); + Py_CLEAR(clear_module_state->__pyx_kp_s_pyc); + Py_CLEAR(clear_module_state->__pyx_n_s_pydb_disposed); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle_pydev_is_thread_al); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle_pydev_log); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_do_not_trace); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydev_execfile_py); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_log); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_log_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_monkey); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_comm_const); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_cython); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_frame_util); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_dont_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_file_utils); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_py); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_traceproperty_py); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_PyDBAdditionalThr); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_PyDBFrame); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_SafeCallWrapper); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_ThreadTracer); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_TopLevelThreadTra); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle__TryExceptContain); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_s_qname); + Py_CLEAR(clear_module_state->__pyx_n_s_quitting); + Py_CLEAR(clear_module_state->__pyx_n_s_raise_lines); + Py_CLEAR(clear_module_state->__pyx_n_s_raise_lines_in_except); + Py_CLEAR(clear_module_state->__pyx_n_s_re); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); + Py_CLEAR(clear_module_state->__pyx_n_s_ref); + Py_CLEAR(clear_module_state->__pyx_n_s_remove_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_remove_exception_from_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_remove_return_values_flag); + Py_CLEAR(clear_module_state->__pyx_n_s_result); + Py_CLEAR(clear_module_state->__pyx_n_s_ret); + Py_CLEAR(clear_module_state->__pyx_n_s_return); + Py_CLEAR(clear_module_state->__pyx_n_s_return_line); + Py_CLEAR(clear_module_state->__pyx_n_s_returns); + Py_CLEAR(clear_module_state->__pyx_n_s_rfind); + Py_CLEAR(clear_module_state->__pyx_n_s_run); + Py_CLEAR(clear_module_state->__pyx_kp_s_s_raised_from_within_the_callba); + Py_CLEAR(clear_module_state->__pyx_kp_s_s_s); + Py_CLEAR(clear_module_state->__pyx_n_s_self); + Py_CLEAR(clear_module_state->__pyx_n_s_send_caught_exception_stack); + Py_CLEAR(clear_module_state->__pyx_n_s_send_caught_exception_stack_proc); + Py_CLEAR(clear_module_state->__pyx_n_s_set); + Py_CLEAR(clear_module_state->__pyx_n_s_set_additional_thread_info); + Py_CLEAR(clear_module_state->__pyx_n_s_set_additional_thread_info_lock); + Py_CLEAR(clear_module_state->__pyx_n_s_set_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_set_trace_for_frame_and_parents); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_should_stop); + Py_CLEAR(clear_module_state->__pyx_n_s_should_stop_on_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_should_trace_hook); + Py_CLEAR(clear_module_state->__pyx_n_s_show_return_values); + Py_CLEAR(clear_module_state->__pyx_n_s_skip_on_exceptions_thrown_in_sam); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_st_mtime); + Py_CLEAR(clear_module_state->__pyx_n_s_st_size); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_stat); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_stop); + Py_CLEAR(clear_module_state->__pyx_n_s_stop_on_unhandled_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_stopped); + Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend_other_threads); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend_policy); + Py_CLEAR(clear_module_state->__pyx_n_s_suspended_at_unhandled); + Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_t); + Py_CLEAR(clear_module_state->__pyx_n_s_tb_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_tb_lineno); + Py_CLEAR(clear_module_state->__pyx_n_s_tb_next); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_thread); + Py_CLEAR(clear_module_state->__pyx_kp_s_thread__ident_is_None_in__get_re); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_trace_func); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_tracer); + Py_CLEAR(clear_module_state->__pyx_n_s_threading); + Py_CLEAR(clear_module_state->__pyx_n_s_threading_active); + Py_CLEAR(clear_module_state->__pyx_n_s_threading_current_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_threading_get_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_top_level_thread_tracer); + Py_CLEAR(clear_module_state->__pyx_n_s_top_level_thread_tracer_no_back); + Py_CLEAR(clear_module_state->__pyx_n_s_top_level_thread_tracer_unhandle); + Py_CLEAR(clear_module_state->__pyx_n_s_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_dispatch); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_dispatch_and_unhandled_exc); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_unhandled_exceptions); + Py_CLEAR(clear_module_state->__pyx_n_s_try_exc_info); + Py_CLEAR(clear_module_state->__pyx_n_s_try_except_info); + Py_CLEAR(clear_module_state->__pyx_n_s_try_except_infos); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_update_stepping_info); + Py_CLEAR(clear_module_state->__pyx_n_s_use_setstate); + Py_CLEAR(clear_module_state->__pyx_kp_s_utf_8); + Py_CLEAR(clear_module_state->__pyx_n_s_valid_try_except_infos); + Py_CLEAR(clear_module_state->__pyx_n_s_value); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_version); + Py_CLEAR(clear_module_state->__pyx_n_s_was_just_raised); + Py_CLEAR(clear_module_state->__pyx_n_s_weak_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_weakref); + Py_CLEAR(clear_module_state->__pyx_n_s_writer); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_11); + Py_CLEAR(clear_module_state->__pyx_int_111); + Py_CLEAR(clear_module_state->__pyx_int_137); + Py_CLEAR(clear_module_state->__pyx_int_160); + Py_CLEAR(clear_module_state->__pyx_int_2424557); + Py_CLEAR(clear_module_state->__pyx_int_16751766); + Py_CLEAR(clear_module_state->__pyx_int_18997755); + Py_CLEAR(clear_module_state->__pyx_int_61391470); + Py_CLEAR(clear_module_state->__pyx_int_63705258); + Py_CLEAR(clear_module_state->__pyx_int_64458794); + Py_CLEAR(clear_module_state->__pyx_int_66451433); + Py_CLEAR(clear_module_state->__pyx_int_70528507); + Py_CLEAR(clear_module_state->__pyx_int_84338306); + Py_CLEAR(clear_module_state->__pyx_int_125568891); + Py_CLEAR(clear_module_state->__pyx_int_169093275); + Py_CLEAR(clear_module_state->__pyx_int_171613889); + Py_CLEAR(clear_module_state->__pyx_int_192493205); + Py_CLEAR(clear_module_state->__pyx_int_210464433); + Py_CLEAR(clear_module_state->__pyx_int_221489684); + Py_CLEAR(clear_module_state->__pyx_int_230645316); + Py_CLEAR(clear_module_state->__pyx_int_232881363); + Py_CLEAR(clear_module_state->__pyx_int_255484337); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_slice__2); + Py_CLEAR(clear_module_state->__pyx_slice__6); + Py_CLEAR(clear_module_state->__pyx_tuple__3); + Py_CLEAR(clear_module_state->__pyx_tuple__5); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__11); + Py_CLEAR(clear_module_state->__pyx_tuple__12); + Py_CLEAR(clear_module_state->__pyx_tuple__13); + Py_CLEAR(clear_module_state->__pyx_tuple__14); + Py_CLEAR(clear_module_state->__pyx_tuple__15); + Py_CLEAR(clear_module_state->__pyx_tuple__16); + Py_CLEAR(clear_module_state->__pyx_tuple__17); + Py_CLEAR(clear_module_state->__pyx_tuple__18); + Py_CLEAR(clear_module_state->__pyx_tuple__20); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__36); + Py_CLEAR(clear_module_state->__pyx_tuple__37); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__42); + Py_CLEAR(clear_module_state->__pyx_tuple__46); + Py_CLEAR(clear_module_state->__pyx_tuple__49); + Py_CLEAR(clear_module_state->__pyx_tuple__51); + Py_CLEAR(clear_module_state->__pyx_tuple__53); + Py_CLEAR(clear_module_state->__pyx_tuple__57); + Py_CLEAR(clear_module_state->__pyx_tuple__59); + Py_CLEAR(clear_module_state->__pyx_tuple__61); + Py_CLEAR(clear_module_state->__pyx_tuple__66); + Py_CLEAR(clear_module_state->__pyx_tuple__68); + Py_CLEAR(clear_module_state->__pyx_tuple__70); + Py_CLEAR(clear_module_state->__pyx_tuple__75); + Py_CLEAR(clear_module_state->__pyx_tuple__84); + Py_CLEAR(clear_module_state->__pyx_codeobj__21); + Py_CLEAR(clear_module_state->__pyx_codeobj__22); + Py_CLEAR(clear_module_state->__pyx_codeobj__24); + Py_CLEAR(clear_module_state->__pyx_codeobj__25); + Py_CLEAR(clear_module_state->__pyx_codeobj__27); + Py_CLEAR(clear_module_state->__pyx_codeobj__29); + Py_CLEAR(clear_module_state->__pyx_codeobj__31); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__35); + Py_CLEAR(clear_module_state->__pyx_codeobj__38); + Py_CLEAR(clear_module_state->__pyx_codeobj__43); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__45); + Py_CLEAR(clear_module_state->__pyx_codeobj__47); + Py_CLEAR(clear_module_state->__pyx_codeobj__48); + Py_CLEAR(clear_module_state->__pyx_codeobj__50); + Py_CLEAR(clear_module_state->__pyx_codeobj__52); + Py_CLEAR(clear_module_state->__pyx_codeobj__54); + Py_CLEAR(clear_module_state->__pyx_codeobj__55); + Py_CLEAR(clear_module_state->__pyx_codeobj__56); + Py_CLEAR(clear_module_state->__pyx_codeobj__58); + Py_CLEAR(clear_module_state->__pyx_codeobj__60); + Py_CLEAR(clear_module_state->__pyx_codeobj__62); + Py_CLEAR(clear_module_state->__pyx_codeobj__63); + Py_CLEAR(clear_module_state->__pyx_codeobj__64); + Py_CLEAR(clear_module_state->__pyx_codeobj__65); + Py_CLEAR(clear_module_state->__pyx_codeobj__67); + Py_CLEAR(clear_module_state->__pyx_codeobj__69); + Py_CLEAR(clear_module_state->__pyx_codeobj__71); + Py_CLEAR(clear_module_state->__pyx_codeobj__72); + Py_CLEAR(clear_module_state->__pyx_codeobj__73); + Py_CLEAR(clear_module_state->__pyx_codeobj__74); + Py_CLEAR(clear_module_state->__pyx_codeobj__76); + Py_CLEAR(clear_module_state->__pyx_codeobj__77); + Py_CLEAR(clear_module_state->__pyx_codeobj__78); + Py_CLEAR(clear_module_state->__pyx_codeobj__79); + Py_CLEAR(clear_module_state->__pyx_codeobj__80); + Py_CLEAR(clear_module_state->__pyx_codeobj__81); + Py_CLEAR(clear_module_state->__pyx_codeobj__82); + Py_CLEAR(clear_module_state->__pyx_codeobj__83); + Py_CLEAR(clear_module_state->__pyx_codeobj__85); + Py_CLEAR(clear_module_state->__pyx_codeobj__86); + Py_CLEAR(clear_module_state->__pyx_codeobj__87); + Py_CLEAR(clear_module_state->__pyx_codeobj__88); + Py_CLEAR(clear_module_state->__pyx_codeobj__89); + Py_CLEAR(clear_module_state->__pyx_codeobj__90); + Py_CLEAR(clear_module_state->__pyx_codeobj__91); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + Py_VISIT(traverse_module_state->__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + Py_VISIT(traverse_module_state->__pyx_kp_s_); + Py_VISIT(traverse_module_state->__pyx_kp_s_1); + Py_VISIT(traverse_module_state->__pyx_n_s_ALL); + Py_VISIT(traverse_module_state->__pyx_n_s_AttributeError); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_SET_FUNCTION_BREAK); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUG_START); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUG_START_PY3K); + Py_VISIT(traverse_module_state->__pyx_n_s_EXCEPTION_TYPE_HANDLED); + Py_VISIT(traverse_module_state->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + Py_VISIT(traverse_module_state->__pyx_kp_s_Error_in_linecache_checkcache_r); + Py_VISIT(traverse_module_state->__pyx_kp_s_Error_in_linecache_getline_r_s_f); + Py_VISIT(traverse_module_state->__pyx_n_s_ForkSafeLock); + Py_VISIT(traverse_module_state->__pyx_n_s_GeneratorExit); + Py_VISIT(traverse_module_state->__pyx_n_s_IGNORE_EXCEPTION_TAG); + Py_VISIT(traverse_module_state->__pyx_kp_s_IgnoreException); + Py_VISIT(traverse_module_state->__pyx_kp_s_Ignore_exception_s_in_library_s); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6); + Py_VISIT(traverse_module_state->__pyx_n_s_KeyboardInterrupt); + Py_VISIT(traverse_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_VISIT(traverse_module_state->__pyx_n_s_NO_FTRACE); + Py_VISIT(traverse_module_state->__pyx_n_s_NameError); + Py_VISIT(traverse_module_state->__pyx_n_s_None); + Py_VISIT(traverse_module_state->__pyx_kp_s_Not_used_in_sys_monitoring_mode); + Py_VISIT(traverse_module_state->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + Py_VISIT(traverse_module_state->__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + Py_VISIT(traverse_module_state->__pyx_n_s_PYDEV_FILE); + Py_VISIT(traverse_module_state->__pyx_n_s_PYTHON_SUSPEND); + Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo___reduc); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo___setst); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo__get_re); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo__is_ste); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo_get_top); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBAdditionalThreadInfo_update); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame_do_wait_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame_handle_user_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame_set_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame_trace_dispatch); + Py_VISIT(traverse_module_state->__pyx_n_s_PyDBFrame_trace_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_RETURN_VALUES_DICT); + Py_VISIT(traverse_module_state->__pyx_n_s_RuntimeError); + Py_VISIT(traverse_module_state->__pyx_n_s_STATE_RUN); + Py_VISIT(traverse_module_state->__pyx_n_s_STATE_SUSPEND); + Py_VISIT(traverse_module_state->__pyx_n_s_SUPPORT_GEVENT); + Py_VISIT(traverse_module_state->__pyx_n_s_SafeCallWrapper); + Py_VISIT(traverse_module_state->__pyx_n_s_SafeCallWrapper___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_SafeCallWrapper___setstate_cytho); + Py_VISIT(traverse_module_state->__pyx_n_s_SafeCallWrapper_get_method_objec); + Py_VISIT(traverse_module_state->__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s); + Py_VISIT(traverse_module_state->__pyx_n_s_StopAsyncIteration); + Py_VISIT(traverse_module_state->__pyx_n_s_StopIteration); + Py_VISIT(traverse_module_state->__pyx_kp_s_Stop_inside_ipython_call); + Py_VISIT(traverse_module_state->__pyx_n_s_SystemExit); + Py_VISIT(traverse_module_state->__pyx_n_s_TRACE_PROPERTY); + Py_VISIT(traverse_module_state->__pyx_n_s_Thread); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadTracer); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadTracer___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadTracer___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_2); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_3); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_4); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerNoBackFrame_5); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4); + Py_VISIT(traverse_module_state->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj___reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj___setstat); + Py_VISIT(traverse_module_state->__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); + Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_get_topmost_frame_for); + Py_VISIT(traverse_module_state->__pyx_kp_s__10); + Py_VISIT(traverse_module_state->__pyx_kp_u__10); + Py_VISIT(traverse_module_state->__pyx_n_s__19); + Py_VISIT(traverse_module_state->__pyx_kp_s__4); + Py_VISIT(traverse_module_state->__pyx_kp_s__8); + Py_VISIT(traverse_module_state->__pyx_kp_s__9); + Py_VISIT(traverse_module_state->__pyx_n_s_abs_real_path_and_base); + Py_VISIT(traverse_module_state->__pyx_n_s_absolute_filename); + Py_VISIT(traverse_module_state->__pyx_n_s_active); + Py_VISIT(traverse_module_state->__pyx_n_s_add); + Py_VISIT(traverse_module_state->__pyx_n_s_add_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_add_command); + Py_VISIT(traverse_module_state->__pyx_n_s_add_exception_to_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_any_thread_stepping); + Py_VISIT(traverse_module_state->__pyx_n_s_append); + Py_VISIT(traverse_module_state->__pyx_n_s_apply_files_filter); + Py_VISIT(traverse_module_state->__pyx_n_s_apply_to_settrace); + Py_VISIT(traverse_module_state->__pyx_n_s_arg); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_args_2); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_basename); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_2); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner_2); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_breakpoints); + Py_VISIT(traverse_module_state->__pyx_n_s_call); + Py_VISIT(traverse_module_state->__pyx_n_s_call_2); + Py_VISIT(traverse_module_state->__pyx_n_s_can_skip); + Py_VISIT(traverse_module_state->__pyx_n_s_canonical_normalized_filename); + Py_VISIT(traverse_module_state->__pyx_kp_s_cell); + Py_VISIT(traverse_module_state->__pyx_n_s_check_excs); + Py_VISIT(traverse_module_state->__pyx_n_s_check_trace_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_checkcache); + Py_VISIT(traverse_module_state->__pyx_n_s_children_variants); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_factory); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_step_into); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_step_over); + Py_VISIT(traverse_module_state->__pyx_n_s_co_filename); + Py_VISIT(traverse_module_state->__pyx_n_s_co_firstlineno); + Py_VISIT(traverse_module_state->__pyx_n_s_co_flags); + Py_VISIT(traverse_module_state->__pyx_n_s_co_name); + Py_VISIT(traverse_module_state->__pyx_n_s_collect_return_info); + Py_VISIT(traverse_module_state->__pyx_n_s_collect_try_except_info); + Py_VISIT(traverse_module_state->__pyx_n_s_compile); + Py_VISIT(traverse_module_state->__pyx_n_s_condition); + Py_VISIT(traverse_module_state->__pyx_n_s_constant_to_str); + Py_VISIT(traverse_module_state->__pyx_n_s_constructed_tid_to_last_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_container_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_critical); + Py_VISIT(traverse_module_state->__pyx_n_s_curr_stat); + Py_VISIT(traverse_module_state->__pyx_n_s_current_frames); + Py_VISIT(traverse_module_state->__pyx_n_s_custom_key); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_dict_2); + Py_VISIT(traverse_module_state->__pyx_n_s_dis); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_disable_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_do_wait_suspend); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_enable_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_s_endswith); + Py_VISIT(traverse_module_state->__pyx_n_s_enter); + Py_VISIT(traverse_module_state->__pyx_n_s_event); + Py_VISIT(traverse_module_state->__pyx_n_s_exc_break); + Py_VISIT(traverse_module_state->__pyx_n_s_exc_break_caught); + Py_VISIT(traverse_module_state->__pyx_n_s_exc_break_user); + Py_VISIT(traverse_module_state->__pyx_n_s_exc_info); + Py_VISIT(traverse_module_state->__pyx_n_s_exc_lineno); + Py_VISIT(traverse_module_state->__pyx_n_s_except_line); + Py_VISIT(traverse_module_state->__pyx_n_s_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_exception_break); + Py_VISIT(traverse_module_state->__pyx_n_s_exception_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_exception_type); + Py_VISIT(traverse_module_state->__pyx_n_s_exclude_exception_by_filter); + Py_VISIT(traverse_module_state->__pyx_n_s_exec); + Py_VISIT(traverse_module_state->__pyx_n_s_execfile); + Py_VISIT(traverse_module_state->__pyx_n_s_exit); + Py_VISIT(traverse_module_state->__pyx_n_s_expression); + Py_VISIT(traverse_module_state->__pyx_n_s_f); + Py_VISIT(traverse_module_state->__pyx_n_s_f_back); + Py_VISIT(traverse_module_state->__pyx_n_s_f_code); + Py_VISIT(traverse_module_state->__pyx_n_s_f_globals); + Py_VISIT(traverse_module_state->__pyx_n_s_f_lasti); + Py_VISIT(traverse_module_state->__pyx_n_s_f_lineno); + Py_VISIT(traverse_module_state->__pyx_n_s_f_locals); + Py_VISIT(traverse_module_state->__pyx_n_s_f_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_f_unhandled); + Py_VISIT(traverse_module_state->__pyx_n_s_filename); + Py_VISIT(traverse_module_state->__pyx_n_s_filename_to_lines_where_exceptio); + Py_VISIT(traverse_module_state->__pyx_n_s_filename_to_stat_info); + Py_VISIT(traverse_module_state->__pyx_n_s_findlinestarts); + Py_VISIT(traverse_module_state->__pyx_n_s_fix_top_level_trace_and_get_trac); + Py_VISIT(traverse_module_state->__pyx_n_s_force_only_unhandled_tracer); + Py_VISIT(traverse_module_state->__pyx_n_s_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_cache_key); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_id_to_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_skips_cache); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_trace_dispatch); + Py_VISIT(traverse_module_state->__pyx_n_s_from_user_input); + Py_VISIT(traverse_module_state->__pyx_n_s_func_name); + Py_VISIT(traverse_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_VISIT(traverse_module_state->__pyx_n_s_get_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_get_clsname_for_code); + Py_VISIT(traverse_module_state->__pyx_n_s_get_current_thread_id); + Py_VISIT(traverse_module_state->__pyx_n_s_get_exception_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_get_file_type); + Py_VISIT(traverse_module_state->__pyx_n_s_get_global_debugger); + Py_VISIT(traverse_module_state->__pyx_n_s_get_internal_queue_and_event); + Py_VISIT(traverse_module_state->__pyx_n_s_get_method_object); + Py_VISIT(traverse_module_state->__pyx_n_s_get_related_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_get_smart_step_into_variant_from); + Py_VISIT(traverse_module_state->__pyx_n_s_get_thread_id); + Py_VISIT(traverse_module_state->__pyx_n_s_get_topmost_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_get_trace_dispatch_func); + Py_VISIT(traverse_module_state->__pyx_n_s_getline); + Py_VISIT(traverse_module_state->__pyx_n_s_getstate); + Py_VISIT(traverse_module_state->__pyx_n_s_global_cache_frame_skips); + Py_VISIT(traverse_module_state->__pyx_n_s_global_cache_skips); + Py_VISIT(traverse_module_state->__pyx_n_s_global_notify_skipped_step_in_l); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_breakpoint_condition); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_breakpoint_expression); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_user_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_has_condition); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_i); + Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_s_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_ident_2); + Py_VISIT(traverse_module_state->__pyx_n_s_ignore_exception_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_ignore_exceptions_thrown_in_line); + Py_VISIT(traverse_module_state->__pyx_n_s_ignore_system_exit_code); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_in_project_scope); + Py_VISIT(traverse_module_state->__pyx_n_s_info); + Py_VISIT(traverse_module_state->__pyx_n_s_initial_trace_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_kp_s_invalid); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_files_filter_enabled); + Py_VISIT(traverse_module_state->__pyx_n_s_is_line_in_except_block); + Py_VISIT(traverse_module_state->__pyx_n_s_is_line_in_try_block); + Py_VISIT(traverse_module_state->__pyx_n_s_is_logpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_is_stepping); + Py_VISIT(traverse_module_state->__pyx_n_s_is_stopped); + Py_VISIT(traverse_module_state->__pyx_n_s_is_thread_alive); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unhandled_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_is_user_uncaught); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_j); + Py_VISIT(traverse_module_state->__pyx_n_s_just_raised); + Py_VISIT(traverse_module_state->__pyx_n_s_kwargs); + Py_VISIT(traverse_module_state->__pyx_kp_s_lambda); + Py_VISIT(traverse_module_state->__pyx_n_s_last_raise_line); + Py_VISIT(traverse_module_state->__pyx_n_s_last_stat); + Py_VISIT(traverse_module_state->__pyx_n_s_line); + Py_VISIT(traverse_module_state->__pyx_n_s_linecache); + Py_VISIT(traverse_module_state->__pyx_n_s_lines); + Py_VISIT(traverse_module_state->__pyx_n_s_lines_ignored); + Py_VISIT(traverse_module_state->__pyx_n_s_linesep); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_main_2); + Py_VISIT(traverse_module_state->__pyx_n_s_make_console_message); + Py_VISIT(traverse_module_state->__pyx_n_s_make_io_message); + Py_VISIT(traverse_module_state->__pyx_n_s_match); + Py_VISIT(traverse_module_state->__pyx_n_s_maybe_user_uncaught_exc_info); + Py_VISIT(traverse_module_state->__pyx_n_s_merged); + Py_VISIT(traverse_module_state->__pyx_n_s_method_object); + Py_VISIT(traverse_module_state->__pyx_kp_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_name_2); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_n_s_next_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_notify_on_first_raise_only); + Py_VISIT(traverse_module_state->__pyx_n_s_notify_skipped_step_in_because_o); + Py_VISIT(traverse_module_state->__pyx_n_s_notify_thread_not_alive); + Py_VISIT(traverse_module_state->__pyx_n_s_original_call); + Py_VISIT(traverse_module_state->__pyx_n_s_original_step_cmd); + Py_VISIT(traverse_module_state->__pyx_n_s_os); + Py_VISIT(traverse_module_state->__pyx_n_s_os_path); + Py_VISIT(traverse_module_state->__pyx_n_s_path); + Py_VISIT(traverse_module_state->__pyx_n_s_pickle); + Py_VISIT(traverse_module_state->__pyx_n_s_plugin); + Py_VISIT(traverse_module_state->__pyx_n_s_pop); + Py_VISIT(traverse_module_state->__pyx_n_s_prev_user_uncaught_exc_info); + Py_VISIT(traverse_module_state->__pyx_n_s_py_db); + Py_VISIT(traverse_module_state->__pyx_kp_s_pyc); + Py_VISIT(traverse_module_state->__pyx_n_s_pydb_disposed); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle_pydev_is_thread_al); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle_pydev_log); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_do_not_trace); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydev_execfile_py); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_log); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_log_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_monkey); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_comm_const); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_cython); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_frame_util); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_dont_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_file_utils); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_py); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_traceproperty_py); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_PyDBAdditionalThr); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_PyDBFrame); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_SafeCallWrapper); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_ThreadTracer); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_TopLevelThreadTra); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle__TryExceptContain); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_s_qname); + Py_VISIT(traverse_module_state->__pyx_n_s_quitting); + Py_VISIT(traverse_module_state->__pyx_n_s_raise_lines); + Py_VISIT(traverse_module_state->__pyx_n_s_raise_lines_in_except); + Py_VISIT(traverse_module_state->__pyx_n_s_re); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); + Py_VISIT(traverse_module_state->__pyx_n_s_ref); + Py_VISIT(traverse_module_state->__pyx_n_s_remove_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_remove_exception_from_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_remove_return_values_flag); + Py_VISIT(traverse_module_state->__pyx_n_s_result); + Py_VISIT(traverse_module_state->__pyx_n_s_ret); + Py_VISIT(traverse_module_state->__pyx_n_s_return); + Py_VISIT(traverse_module_state->__pyx_n_s_return_line); + Py_VISIT(traverse_module_state->__pyx_n_s_returns); + Py_VISIT(traverse_module_state->__pyx_n_s_rfind); + Py_VISIT(traverse_module_state->__pyx_n_s_run); + Py_VISIT(traverse_module_state->__pyx_kp_s_s_raised_from_within_the_callba); + Py_VISIT(traverse_module_state->__pyx_kp_s_s_s); + Py_VISIT(traverse_module_state->__pyx_n_s_self); + Py_VISIT(traverse_module_state->__pyx_n_s_send_caught_exception_stack); + Py_VISIT(traverse_module_state->__pyx_n_s_send_caught_exception_stack_proc); + Py_VISIT(traverse_module_state->__pyx_n_s_set); + Py_VISIT(traverse_module_state->__pyx_n_s_set_additional_thread_info); + Py_VISIT(traverse_module_state->__pyx_n_s_set_additional_thread_info_lock); + Py_VISIT(traverse_module_state->__pyx_n_s_set_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_set_trace_for_frame_and_parents); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_should_stop); + Py_VISIT(traverse_module_state->__pyx_n_s_should_stop_on_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_should_trace_hook); + Py_VISIT(traverse_module_state->__pyx_n_s_show_return_values); + Py_VISIT(traverse_module_state->__pyx_n_s_skip_on_exceptions_thrown_in_sam); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_st_mtime); + Py_VISIT(traverse_module_state->__pyx_n_s_st_size); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_stat); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_stop); + Py_VISIT(traverse_module_state->__pyx_n_s_stop_on_unhandled_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_stopped); + Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend_other_threads); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend_policy); + Py_VISIT(traverse_module_state->__pyx_n_s_suspended_at_unhandled); + Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_t); + Py_VISIT(traverse_module_state->__pyx_n_s_tb_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_tb_lineno); + Py_VISIT(traverse_module_state->__pyx_n_s_tb_next); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_thread); + Py_VISIT(traverse_module_state->__pyx_kp_s_thread__ident_is_None_in__get_re); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_trace_func); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_tracer); + Py_VISIT(traverse_module_state->__pyx_n_s_threading); + Py_VISIT(traverse_module_state->__pyx_n_s_threading_active); + Py_VISIT(traverse_module_state->__pyx_n_s_threading_current_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_threading_get_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_top_level_thread_tracer); + Py_VISIT(traverse_module_state->__pyx_n_s_top_level_thread_tracer_no_back); + Py_VISIT(traverse_module_state->__pyx_n_s_top_level_thread_tracer_unhandle); + Py_VISIT(traverse_module_state->__pyx_n_s_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_dispatch); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_dispatch_and_unhandled_exc); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_unhandled_exceptions); + Py_VISIT(traverse_module_state->__pyx_n_s_try_exc_info); + Py_VISIT(traverse_module_state->__pyx_n_s_try_except_info); + Py_VISIT(traverse_module_state->__pyx_n_s_try_except_infos); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_update_stepping_info); + Py_VISIT(traverse_module_state->__pyx_n_s_use_setstate); + Py_VISIT(traverse_module_state->__pyx_kp_s_utf_8); + Py_VISIT(traverse_module_state->__pyx_n_s_valid_try_except_infos); + Py_VISIT(traverse_module_state->__pyx_n_s_value); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_version); + Py_VISIT(traverse_module_state->__pyx_n_s_was_just_raised); + Py_VISIT(traverse_module_state->__pyx_n_s_weak_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_weakref); + Py_VISIT(traverse_module_state->__pyx_n_s_writer); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_11); + Py_VISIT(traverse_module_state->__pyx_int_111); + Py_VISIT(traverse_module_state->__pyx_int_137); + Py_VISIT(traverse_module_state->__pyx_int_160); + Py_VISIT(traverse_module_state->__pyx_int_2424557); + Py_VISIT(traverse_module_state->__pyx_int_16751766); + Py_VISIT(traverse_module_state->__pyx_int_18997755); + Py_VISIT(traverse_module_state->__pyx_int_61391470); + Py_VISIT(traverse_module_state->__pyx_int_63705258); + Py_VISIT(traverse_module_state->__pyx_int_64458794); + Py_VISIT(traverse_module_state->__pyx_int_66451433); + Py_VISIT(traverse_module_state->__pyx_int_70528507); + Py_VISIT(traverse_module_state->__pyx_int_84338306); + Py_VISIT(traverse_module_state->__pyx_int_125568891); + Py_VISIT(traverse_module_state->__pyx_int_169093275); + Py_VISIT(traverse_module_state->__pyx_int_171613889); + Py_VISIT(traverse_module_state->__pyx_int_192493205); + Py_VISIT(traverse_module_state->__pyx_int_210464433); + Py_VISIT(traverse_module_state->__pyx_int_221489684); + Py_VISIT(traverse_module_state->__pyx_int_230645316); + Py_VISIT(traverse_module_state->__pyx_int_232881363); + Py_VISIT(traverse_module_state->__pyx_int_255484337); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_slice__2); + Py_VISIT(traverse_module_state->__pyx_slice__6); + Py_VISIT(traverse_module_state->__pyx_tuple__3); + Py_VISIT(traverse_module_state->__pyx_tuple__5); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__11); + Py_VISIT(traverse_module_state->__pyx_tuple__12); + Py_VISIT(traverse_module_state->__pyx_tuple__13); + Py_VISIT(traverse_module_state->__pyx_tuple__14); + Py_VISIT(traverse_module_state->__pyx_tuple__15); + Py_VISIT(traverse_module_state->__pyx_tuple__16); + Py_VISIT(traverse_module_state->__pyx_tuple__17); + Py_VISIT(traverse_module_state->__pyx_tuple__18); + Py_VISIT(traverse_module_state->__pyx_tuple__20); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__36); + Py_VISIT(traverse_module_state->__pyx_tuple__37); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__42); + Py_VISIT(traverse_module_state->__pyx_tuple__46); + Py_VISIT(traverse_module_state->__pyx_tuple__49); + Py_VISIT(traverse_module_state->__pyx_tuple__51); + Py_VISIT(traverse_module_state->__pyx_tuple__53); + Py_VISIT(traverse_module_state->__pyx_tuple__57); + Py_VISIT(traverse_module_state->__pyx_tuple__59); + Py_VISIT(traverse_module_state->__pyx_tuple__61); + Py_VISIT(traverse_module_state->__pyx_tuple__66); + Py_VISIT(traverse_module_state->__pyx_tuple__68); + Py_VISIT(traverse_module_state->__pyx_tuple__70); + Py_VISIT(traverse_module_state->__pyx_tuple__75); + Py_VISIT(traverse_module_state->__pyx_tuple__84); + Py_VISIT(traverse_module_state->__pyx_codeobj__21); + Py_VISIT(traverse_module_state->__pyx_codeobj__22); + Py_VISIT(traverse_module_state->__pyx_codeobj__24); + Py_VISIT(traverse_module_state->__pyx_codeobj__25); + Py_VISIT(traverse_module_state->__pyx_codeobj__27); + Py_VISIT(traverse_module_state->__pyx_codeobj__29); + Py_VISIT(traverse_module_state->__pyx_codeobj__31); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__35); + Py_VISIT(traverse_module_state->__pyx_codeobj__38); + Py_VISIT(traverse_module_state->__pyx_codeobj__43); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__45); + Py_VISIT(traverse_module_state->__pyx_codeobj__47); + Py_VISIT(traverse_module_state->__pyx_codeobj__48); + Py_VISIT(traverse_module_state->__pyx_codeobj__50); + Py_VISIT(traverse_module_state->__pyx_codeobj__52); + Py_VISIT(traverse_module_state->__pyx_codeobj__54); + Py_VISIT(traverse_module_state->__pyx_codeobj__55); + Py_VISIT(traverse_module_state->__pyx_codeobj__56); + Py_VISIT(traverse_module_state->__pyx_codeobj__58); + Py_VISIT(traverse_module_state->__pyx_codeobj__60); + Py_VISIT(traverse_module_state->__pyx_codeobj__62); + Py_VISIT(traverse_module_state->__pyx_codeobj__63); + Py_VISIT(traverse_module_state->__pyx_codeobj__64); + Py_VISIT(traverse_module_state->__pyx_codeobj__65); + Py_VISIT(traverse_module_state->__pyx_codeobj__67); + Py_VISIT(traverse_module_state->__pyx_codeobj__69); + Py_VISIT(traverse_module_state->__pyx_codeobj__71); + Py_VISIT(traverse_module_state->__pyx_codeobj__72); + Py_VISIT(traverse_module_state->__pyx_codeobj__73); + Py_VISIT(traverse_module_state->__pyx_codeobj__74); + Py_VISIT(traverse_module_state->__pyx_codeobj__76); + Py_VISIT(traverse_module_state->__pyx_codeobj__77); + Py_VISIT(traverse_module_state->__pyx_codeobj__78); + Py_VISIT(traverse_module_state->__pyx_codeobj__79); + Py_VISIT(traverse_module_state->__pyx_codeobj__80); + Py_VISIT(traverse_module_state->__pyx_codeobj__81); + Py_VISIT(traverse_module_state->__pyx_codeobj__82); + Py_VISIT(traverse_module_state->__pyx_codeobj__83); + Py_VISIT(traverse_module_state->__pyx_codeobj__85); + Py_VISIT(traverse_module_state->__pyx_codeobj__86); + Py_VISIT(traverse_module_state->__pyx_codeobj__87); + Py_VISIT(traverse_module_state->__pyx_codeobj__88); + Py_VISIT(traverse_module_state->__pyx_codeobj__89); + Py_VISIT(traverse_module_state->__pyx_codeobj__90); + Py_VISIT(traverse_module_state->__pyx_codeobj__91); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo +#define __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame +#define __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer __pyx_mstate_global->__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer +#endif +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer +#define __pyx_kp_s_ __pyx_mstate_global->__pyx_kp_s_ +#define __pyx_kp_s_1 __pyx_mstate_global->__pyx_kp_s_1 +#define __pyx_n_s_ALL __pyx_mstate_global->__pyx_n_s_ALL +#define __pyx_n_s_AttributeError __pyx_mstate_global->__pyx_n_s_AttributeError +#define __pyx_n_s_CMD_SET_FUNCTION_BREAK __pyx_mstate_global->__pyx_n_s_CMD_SET_FUNCTION_BREAK +#define __pyx_n_s_DEBUG_START __pyx_mstate_global->__pyx_n_s_DEBUG_START +#define __pyx_n_s_DEBUG_START_PY3K __pyx_mstate_global->__pyx_n_s_DEBUG_START_PY3K +#define __pyx_n_s_EXCEPTION_TYPE_HANDLED __pyx_mstate_global->__pyx_n_s_EXCEPTION_TYPE_HANDLED +#define __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED __pyx_mstate_global->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED +#define __pyx_kp_s_Error_in_linecache_checkcache_r __pyx_mstate_global->__pyx_kp_s_Error_in_linecache_checkcache_r +#define __pyx_kp_s_Error_in_linecache_getline_r_s_f __pyx_mstate_global->__pyx_kp_s_Error_in_linecache_getline_r_s_f +#define __pyx_n_s_ForkSafeLock __pyx_mstate_global->__pyx_n_s_ForkSafeLock +#define __pyx_n_s_GeneratorExit __pyx_mstate_global->__pyx_n_s_GeneratorExit +#define __pyx_n_s_IGNORE_EXCEPTION_TAG __pyx_mstate_global->__pyx_n_s_IGNORE_EXCEPTION_TAG +#define __pyx_kp_s_IgnoreException __pyx_mstate_global->__pyx_kp_s_IgnoreException +#define __pyx_kp_s_Ignore_exception_s_in_library_s __pyx_mstate_global->__pyx_kp_s_Ignore_exception_s_in_library_s +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6 +#define __pyx_n_s_KeyboardInterrupt __pyx_mstate_global->__pyx_n_s_KeyboardInterrupt +#define __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER __pyx_mstate_global->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER +#define __pyx_n_s_NO_FTRACE __pyx_mstate_global->__pyx_n_s_NO_FTRACE +#define __pyx_n_s_NameError __pyx_mstate_global->__pyx_n_s_NameError +#define __pyx_n_s_None __pyx_mstate_global->__pyx_n_s_None +#define __pyx_kp_s_Not_used_in_sys_monitoring_mode __pyx_mstate_global->__pyx_kp_s_Not_used_in_sys_monitoring_mode +#define __pyx_n_s_PYDEVD_IPYTHON_CONTEXT __pyx_mstate_global->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT +#define __pyx_n_s_PYDEVD_USE_SYS_MONITORING __pyx_mstate_global->__pyx_n_s_PYDEVD_USE_SYS_MONITORING +#define __pyx_n_s_PYDEV_FILE __pyx_mstate_global->__pyx_n_s_PYDEV_FILE +#define __pyx_n_s_PYTHON_SUSPEND __pyx_mstate_global->__pyx_n_s_PYTHON_SUSPEND +#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError +#define __pyx_n_s_PyDBAdditionalThreadInfo __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo +#define __pyx_n_s_PyDBAdditionalThreadInfo___reduc __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo___reduc +#define __pyx_n_s_PyDBAdditionalThreadInfo___setst __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo___setst +#define __pyx_n_s_PyDBAdditionalThreadInfo__get_re __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo__get_re +#define __pyx_n_s_PyDBAdditionalThreadInfo__is_ste __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo__is_ste +#define __pyx_n_s_PyDBAdditionalThreadInfo_get_top __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo_get_top +#define __pyx_n_s_PyDBAdditionalThreadInfo_update __pyx_mstate_global->__pyx_n_s_PyDBAdditionalThreadInfo_update +#define __pyx_n_s_PyDBFrame __pyx_mstate_global->__pyx_n_s_PyDBFrame +#define __pyx_n_s_PyDBFrame___reduce_cython __pyx_mstate_global->__pyx_n_s_PyDBFrame___reduce_cython +#define __pyx_n_s_PyDBFrame___setstate_cython __pyx_mstate_global->__pyx_n_s_PyDBFrame___setstate_cython +#define __pyx_n_s_PyDBFrame_do_wait_suspend __pyx_mstate_global->__pyx_n_s_PyDBFrame_do_wait_suspend +#define __pyx_n_s_PyDBFrame_handle_user_exception __pyx_mstate_global->__pyx_n_s_PyDBFrame_handle_user_exception +#define __pyx_n_s_PyDBFrame_set_suspend __pyx_mstate_global->__pyx_n_s_PyDBFrame_set_suspend +#define __pyx_n_s_PyDBFrame_trace_dispatch __pyx_mstate_global->__pyx_n_s_PyDBFrame_trace_dispatch +#define __pyx_n_s_PyDBFrame_trace_exception __pyx_mstate_global->__pyx_n_s_PyDBFrame_trace_exception +#define __pyx_n_s_RETURN_VALUES_DICT __pyx_mstate_global->__pyx_n_s_RETURN_VALUES_DICT +#define __pyx_n_s_RuntimeError __pyx_mstate_global->__pyx_n_s_RuntimeError +#define __pyx_n_s_STATE_RUN __pyx_mstate_global->__pyx_n_s_STATE_RUN +#define __pyx_n_s_STATE_SUSPEND __pyx_mstate_global->__pyx_n_s_STATE_SUSPEND +#define __pyx_n_s_SUPPORT_GEVENT __pyx_mstate_global->__pyx_n_s_SUPPORT_GEVENT +#define __pyx_n_s_SafeCallWrapper __pyx_mstate_global->__pyx_n_s_SafeCallWrapper +#define __pyx_n_s_SafeCallWrapper___reduce_cython __pyx_mstate_global->__pyx_n_s_SafeCallWrapper___reduce_cython +#define __pyx_n_s_SafeCallWrapper___setstate_cytho __pyx_mstate_global->__pyx_n_s_SafeCallWrapper___setstate_cytho +#define __pyx_n_s_SafeCallWrapper_get_method_objec __pyx_mstate_global->__pyx_n_s_SafeCallWrapper_get_method_objec +#define __pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s __pyx_mstate_global->__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s +#define __pyx_n_s_StopAsyncIteration __pyx_mstate_global->__pyx_n_s_StopAsyncIteration +#define __pyx_n_s_StopIteration __pyx_mstate_global->__pyx_n_s_StopIteration +#define __pyx_kp_s_Stop_inside_ipython_call __pyx_mstate_global->__pyx_kp_s_Stop_inside_ipython_call +#define __pyx_n_s_SystemExit __pyx_mstate_global->__pyx_n_s_SystemExit +#define __pyx_n_s_TRACE_PROPERTY __pyx_mstate_global->__pyx_n_s_TRACE_PROPERTY +#define __pyx_n_s_Thread __pyx_mstate_global->__pyx_n_s_Thread +#define __pyx_n_s_ThreadTracer __pyx_mstate_global->__pyx_n_s_ThreadTracer +#define __pyx_n_s_ThreadTracer___reduce_cython __pyx_mstate_global->__pyx_n_s_ThreadTracer___reduce_cython +#define __pyx_n_s_ThreadTracer___setstate_cython __pyx_mstate_global->__pyx_n_s_ThreadTracer___setstate_cython +#define __pyx_n_s_TopLevelThreadTracerNoBackFrame __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerNoBackFrame +#define __pyx_n_s_TopLevelThreadTracerNoBackFrame_2 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerNoBackFrame_2 +#define __pyx_n_s_TopLevelThreadTracerNoBackFrame_3 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerNoBackFrame_3 +#define __pyx_n_s_TopLevelThreadTracerNoBackFrame_4 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerNoBackFrame_4 +#define __pyx_n_s_TopLevelThreadTracerNoBackFrame_5 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerNoBackFrame_5 +#define __pyx_n_s_TopLevelThreadTracerOnlyUnhandle __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle +#define __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2 +#define __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3 +#define __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4 +#define __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5 __pyx_mstate_global->__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5 +#define __pyx_n_s_TryExceptContainerObj __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj +#define __pyx_n_s_TryExceptContainerObj___reduce __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj___reduce +#define __pyx_n_s_TryExceptContainerObj___setstat __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj___setstat +#define __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA __pyx_mstate_global->__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA +#define __pyx_kp_s_Unable_to_get_topmost_frame_for __pyx_mstate_global->__pyx_kp_s_Unable_to_get_topmost_frame_for +#define __pyx_kp_s__10 __pyx_mstate_global->__pyx_kp_s__10 +#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10 +#define __pyx_n_s__19 __pyx_mstate_global->__pyx_n_s__19 +#define __pyx_kp_s__4 __pyx_mstate_global->__pyx_kp_s__4 +#define __pyx_kp_s__8 __pyx_mstate_global->__pyx_kp_s__8 +#define __pyx_kp_s__9 __pyx_mstate_global->__pyx_kp_s__9 +#define __pyx_n_s_abs_real_path_and_base __pyx_mstate_global->__pyx_n_s_abs_real_path_and_base +#define __pyx_n_s_absolute_filename __pyx_mstate_global->__pyx_n_s_absolute_filename +#define __pyx_n_s_active __pyx_mstate_global->__pyx_n_s_active +#define __pyx_n_s_add __pyx_mstate_global->__pyx_n_s_add +#define __pyx_n_s_add_additional_info __pyx_mstate_global->__pyx_n_s_add_additional_info +#define __pyx_n_s_add_command __pyx_mstate_global->__pyx_n_s_add_command +#define __pyx_n_s_add_exception_to_frame __pyx_mstate_global->__pyx_n_s_add_exception_to_frame +#define __pyx_n_s_additional_info __pyx_mstate_global->__pyx_n_s_additional_info +#define __pyx_n_s_any_thread_stepping __pyx_mstate_global->__pyx_n_s_any_thread_stepping +#define __pyx_n_s_append __pyx_mstate_global->__pyx_n_s_append +#define __pyx_n_s_apply_files_filter __pyx_mstate_global->__pyx_n_s_apply_files_filter +#define __pyx_n_s_apply_to_settrace __pyx_mstate_global->__pyx_n_s_apply_to_settrace +#define __pyx_n_s_arg __pyx_mstate_global->__pyx_n_s_arg +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_args_2 __pyx_mstate_global->__pyx_n_s_args_2 +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_basename __pyx_mstate_global->__pyx_n_s_basename +#define __pyx_n_s_bootstrap __pyx_mstate_global->__pyx_n_s_bootstrap +#define __pyx_n_s_bootstrap_2 __pyx_mstate_global->__pyx_n_s_bootstrap_2 +#define __pyx_n_s_bootstrap_inner __pyx_mstate_global->__pyx_n_s_bootstrap_inner +#define __pyx_n_s_bootstrap_inner_2 __pyx_mstate_global->__pyx_n_s_bootstrap_inner_2 +#define __pyx_n_s_break_on_caught_exceptions __pyx_mstate_global->__pyx_n_s_break_on_caught_exceptions +#define __pyx_n_s_break_on_user_uncaught_exception __pyx_mstate_global->__pyx_n_s_break_on_user_uncaught_exception +#define __pyx_n_s_breakpoints __pyx_mstate_global->__pyx_n_s_breakpoints +#define __pyx_n_s_call __pyx_mstate_global->__pyx_n_s_call +#define __pyx_n_s_call_2 __pyx_mstate_global->__pyx_n_s_call_2 +#define __pyx_n_s_can_skip __pyx_mstate_global->__pyx_n_s_can_skip +#define __pyx_n_s_canonical_normalized_filename __pyx_mstate_global->__pyx_n_s_canonical_normalized_filename +#define __pyx_kp_s_cell __pyx_mstate_global->__pyx_kp_s_cell +#define __pyx_n_s_check_excs __pyx_mstate_global->__pyx_n_s_check_excs +#define __pyx_n_s_check_trace_obj __pyx_mstate_global->__pyx_n_s_check_trace_obj +#define __pyx_n_s_checkcache __pyx_mstate_global->__pyx_n_s_checkcache +#define __pyx_n_s_children_variants __pyx_mstate_global->__pyx_n_s_children_variants +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_cmd_factory __pyx_mstate_global->__pyx_n_s_cmd_factory +#define __pyx_n_s_cmd_step_into __pyx_mstate_global->__pyx_n_s_cmd_step_into +#define __pyx_n_s_cmd_step_over __pyx_mstate_global->__pyx_n_s_cmd_step_over +#define __pyx_n_s_co_filename __pyx_mstate_global->__pyx_n_s_co_filename +#define __pyx_n_s_co_firstlineno __pyx_mstate_global->__pyx_n_s_co_firstlineno +#define __pyx_n_s_co_flags __pyx_mstate_global->__pyx_n_s_co_flags +#define __pyx_n_s_co_name __pyx_mstate_global->__pyx_n_s_co_name +#define __pyx_n_s_collect_return_info __pyx_mstate_global->__pyx_n_s_collect_return_info +#define __pyx_n_s_collect_try_except_info __pyx_mstate_global->__pyx_n_s_collect_try_except_info +#define __pyx_n_s_compile __pyx_mstate_global->__pyx_n_s_compile +#define __pyx_n_s_condition __pyx_mstate_global->__pyx_n_s_condition +#define __pyx_n_s_constant_to_str __pyx_mstate_global->__pyx_n_s_constant_to_str +#define __pyx_n_s_constructed_tid_to_last_frame __pyx_mstate_global->__pyx_n_s_constructed_tid_to_last_frame +#define __pyx_n_s_container_obj __pyx_mstate_global->__pyx_n_s_container_obj +#define __pyx_n_s_critical __pyx_mstate_global->__pyx_n_s_critical +#define __pyx_n_s_curr_stat __pyx_mstate_global->__pyx_n_s_curr_stat +#define __pyx_n_s_current_frames __pyx_mstate_global->__pyx_n_s_current_frames +#define __pyx_n_s_custom_key __pyx_mstate_global->__pyx_n_s_custom_key +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2 +#define __pyx_n_s_dis __pyx_mstate_global->__pyx_n_s_dis +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_disable_tracing __pyx_mstate_global->__pyx_n_s_disable_tracing +#define __pyx_n_s_do_wait_suspend __pyx_mstate_global->__pyx_n_s_do_wait_suspend +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_enable_tracing __pyx_mstate_global->__pyx_n_s_enable_tracing +#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_s_endswith __pyx_mstate_global->__pyx_n_s_endswith +#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter +#define __pyx_n_s_event __pyx_mstate_global->__pyx_n_s_event +#define __pyx_n_s_exc_break __pyx_mstate_global->__pyx_n_s_exc_break +#define __pyx_n_s_exc_break_caught __pyx_mstate_global->__pyx_n_s_exc_break_caught +#define __pyx_n_s_exc_break_user __pyx_mstate_global->__pyx_n_s_exc_break_user +#define __pyx_n_s_exc_info __pyx_mstate_global->__pyx_n_s_exc_info +#define __pyx_n_s_exc_lineno __pyx_mstate_global->__pyx_n_s_exc_lineno +#define __pyx_n_s_except_line __pyx_mstate_global->__pyx_n_s_except_line +#define __pyx_n_s_exception __pyx_mstate_global->__pyx_n_s_exception +#define __pyx_n_s_exception_break __pyx_mstate_global->__pyx_n_s_exception_break +#define __pyx_n_s_exception_breakpoint __pyx_mstate_global->__pyx_n_s_exception_breakpoint +#define __pyx_n_s_exception_type __pyx_mstate_global->__pyx_n_s_exception_type +#define __pyx_n_s_exclude_exception_by_filter __pyx_mstate_global->__pyx_n_s_exclude_exception_by_filter +#define __pyx_n_s_exec __pyx_mstate_global->__pyx_n_s_exec +#define __pyx_n_s_execfile __pyx_mstate_global->__pyx_n_s_execfile +#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit +#define __pyx_n_s_expression __pyx_mstate_global->__pyx_n_s_expression +#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f +#define __pyx_n_s_f_back __pyx_mstate_global->__pyx_n_s_f_back +#define __pyx_n_s_f_code __pyx_mstate_global->__pyx_n_s_f_code +#define __pyx_n_s_f_globals __pyx_mstate_global->__pyx_n_s_f_globals +#define __pyx_n_s_f_lasti __pyx_mstate_global->__pyx_n_s_f_lasti +#define __pyx_n_s_f_lineno __pyx_mstate_global->__pyx_n_s_f_lineno +#define __pyx_n_s_f_locals __pyx_mstate_global->__pyx_n_s_f_locals +#define __pyx_n_s_f_trace __pyx_mstate_global->__pyx_n_s_f_trace +#define __pyx_n_s_f_unhandled __pyx_mstate_global->__pyx_n_s_f_unhandled +#define __pyx_n_s_filename __pyx_mstate_global->__pyx_n_s_filename +#define __pyx_n_s_filename_to_lines_where_exceptio __pyx_mstate_global->__pyx_n_s_filename_to_lines_where_exceptio +#define __pyx_n_s_filename_to_stat_info __pyx_mstate_global->__pyx_n_s_filename_to_stat_info +#define __pyx_n_s_findlinestarts __pyx_mstate_global->__pyx_n_s_findlinestarts +#define __pyx_n_s_fix_top_level_trace_and_get_trac __pyx_mstate_global->__pyx_n_s_fix_top_level_trace_and_get_trac +#define __pyx_n_s_force_only_unhandled_tracer __pyx_mstate_global->__pyx_n_s_force_only_unhandled_tracer +#define __pyx_n_s_frame __pyx_mstate_global->__pyx_n_s_frame +#define __pyx_n_s_frame_cache_key __pyx_mstate_global->__pyx_n_s_frame_cache_key +#define __pyx_n_s_frame_id_to_frame __pyx_mstate_global->__pyx_n_s_frame_id_to_frame +#define __pyx_n_s_frame_skips_cache __pyx_mstate_global->__pyx_n_s_frame_skips_cache +#define __pyx_n_s_frame_trace_dispatch __pyx_mstate_global->__pyx_n_s_frame_trace_dispatch +#define __pyx_n_s_from_user_input __pyx_mstate_global->__pyx_n_s_from_user_input +#define __pyx_n_s_func_name __pyx_mstate_global->__pyx_n_s_func_name +#define __pyx_n_s_function_breakpoint_name_to_brea __pyx_mstate_global->__pyx_n_s_function_breakpoint_name_to_brea +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_abs_path_real_path_and_base __pyx_mstate_global->__pyx_n_s_get_abs_path_real_path_and_base +#define __pyx_n_s_get_breakpoint __pyx_mstate_global->__pyx_n_s_get_breakpoint +#define __pyx_n_s_get_clsname_for_code __pyx_mstate_global->__pyx_n_s_get_clsname_for_code +#define __pyx_n_s_get_current_thread_id __pyx_mstate_global->__pyx_n_s_get_current_thread_id +#define __pyx_n_s_get_exception_breakpoint __pyx_mstate_global->__pyx_n_s_get_exception_breakpoint +#define __pyx_n_s_get_file_type __pyx_mstate_global->__pyx_n_s_get_file_type +#define __pyx_n_s_get_global_debugger __pyx_mstate_global->__pyx_n_s_get_global_debugger +#define __pyx_n_s_get_internal_queue_and_event __pyx_mstate_global->__pyx_n_s_get_internal_queue_and_event +#define __pyx_n_s_get_method_object __pyx_mstate_global->__pyx_n_s_get_method_object +#define __pyx_n_s_get_related_thread __pyx_mstate_global->__pyx_n_s_get_related_thread +#define __pyx_n_s_get_smart_step_into_variant_from __pyx_mstate_global->__pyx_n_s_get_smart_step_into_variant_from +#define __pyx_n_s_get_thread_id __pyx_mstate_global->__pyx_n_s_get_thread_id +#define __pyx_n_s_get_topmost_frame __pyx_mstate_global->__pyx_n_s_get_topmost_frame +#define __pyx_n_s_get_trace_dispatch_func __pyx_mstate_global->__pyx_n_s_get_trace_dispatch_func +#define __pyx_n_s_getline __pyx_mstate_global->__pyx_n_s_getline +#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate +#define __pyx_n_s_global_cache_frame_skips __pyx_mstate_global->__pyx_n_s_global_cache_frame_skips +#define __pyx_n_s_global_cache_skips __pyx_mstate_global->__pyx_n_s_global_cache_skips +#define __pyx_n_s_global_notify_skipped_step_in_l __pyx_mstate_global->__pyx_n_s_global_notify_skipped_step_in_l +#define __pyx_n_s_handle_breakpoint_condition __pyx_mstate_global->__pyx_n_s_handle_breakpoint_condition +#define __pyx_n_s_handle_breakpoint_expression __pyx_mstate_global->__pyx_n_s_handle_breakpoint_expression +#define __pyx_n_s_handle_exception __pyx_mstate_global->__pyx_n_s_handle_exception +#define __pyx_n_s_handle_user_exception __pyx_mstate_global->__pyx_n_s_handle_user_exception +#define __pyx_n_s_has_condition __pyx_mstate_global->__pyx_n_s_has_condition +#define __pyx_n_s_has_plugin_exception_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_exception_breaks +#define __pyx_n_s_has_plugin_line_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_line_breaks +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i +#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_s_ident __pyx_mstate_global->__pyx_n_s_ident +#define __pyx_n_s_ident_2 __pyx_mstate_global->__pyx_n_s_ident_2 +#define __pyx_n_s_ignore_exception_trace __pyx_mstate_global->__pyx_n_s_ignore_exception_trace +#define __pyx_n_s_ignore_exceptions_thrown_in_line __pyx_mstate_global->__pyx_n_s_ignore_exceptions_thrown_in_line +#define __pyx_n_s_ignore_system_exit_code __pyx_mstate_global->__pyx_n_s_ignore_system_exit_code +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_in_project_scope __pyx_mstate_global->__pyx_n_s_in_project_scope +#define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info +#define __pyx_n_s_initial_trace_obj __pyx_mstate_global->__pyx_n_s_initial_trace_obj +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_kp_s_invalid __pyx_mstate_global->__pyx_kp_s_invalid +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_files_filter_enabled __pyx_mstate_global->__pyx_n_s_is_files_filter_enabled +#define __pyx_n_s_is_line_in_except_block __pyx_mstate_global->__pyx_n_s_is_line_in_except_block +#define __pyx_n_s_is_line_in_try_block __pyx_mstate_global->__pyx_n_s_is_line_in_try_block +#define __pyx_n_s_is_logpoint __pyx_mstate_global->__pyx_n_s_is_logpoint +#define __pyx_n_s_is_stepping __pyx_mstate_global->__pyx_n_s_is_stepping +#define __pyx_n_s_is_stopped __pyx_mstate_global->__pyx_n_s_is_stopped +#define __pyx_n_s_is_thread_alive __pyx_mstate_global->__pyx_n_s_is_thread_alive +#define __pyx_n_s_is_unhandled_exception __pyx_mstate_global->__pyx_n_s_is_unhandled_exception +#define __pyx_n_s_is_user_uncaught __pyx_mstate_global->__pyx_n_s_is_user_uncaught +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_j __pyx_mstate_global->__pyx_n_s_j +#define __pyx_n_s_just_raised __pyx_mstate_global->__pyx_n_s_just_raised +#define __pyx_n_s_kwargs __pyx_mstate_global->__pyx_n_s_kwargs +#define __pyx_kp_s_lambda __pyx_mstate_global->__pyx_kp_s_lambda +#define __pyx_n_s_last_raise_line __pyx_mstate_global->__pyx_n_s_last_raise_line +#define __pyx_n_s_last_stat __pyx_mstate_global->__pyx_n_s_last_stat +#define __pyx_n_s_line __pyx_mstate_global->__pyx_n_s_line +#define __pyx_n_s_linecache __pyx_mstate_global->__pyx_n_s_linecache +#define __pyx_n_s_lines __pyx_mstate_global->__pyx_n_s_lines +#define __pyx_n_s_lines_ignored __pyx_mstate_global->__pyx_n_s_lines_ignored +#define __pyx_n_s_linesep __pyx_mstate_global->__pyx_n_s_linesep +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_main_2 __pyx_mstate_global->__pyx_n_s_main_2 +#define __pyx_n_s_make_console_message __pyx_mstate_global->__pyx_n_s_make_console_message +#define __pyx_n_s_make_io_message __pyx_mstate_global->__pyx_n_s_make_io_message +#define __pyx_n_s_match __pyx_mstate_global->__pyx_n_s_match +#define __pyx_n_s_maybe_user_uncaught_exc_info __pyx_mstate_global->__pyx_n_s_maybe_user_uncaught_exc_info +#define __pyx_n_s_merged __pyx_mstate_global->__pyx_n_s_merged +#define __pyx_n_s_method_object __pyx_mstate_global->__pyx_n_s_method_object +#define __pyx_kp_s_module __pyx_mstate_global->__pyx_kp_s_module +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2 +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_n_s_next_additional_info __pyx_mstate_global->__pyx_n_s_next_additional_info +#define __pyx_n_s_notify_on_first_raise_only __pyx_mstate_global->__pyx_n_s_notify_on_first_raise_only +#define __pyx_n_s_notify_skipped_step_in_because_o __pyx_mstate_global->__pyx_n_s_notify_skipped_step_in_because_o +#define __pyx_n_s_notify_thread_not_alive __pyx_mstate_global->__pyx_n_s_notify_thread_not_alive +#define __pyx_n_s_original_call __pyx_mstate_global->__pyx_n_s_original_call +#define __pyx_n_s_original_step_cmd __pyx_mstate_global->__pyx_n_s_original_step_cmd +#define __pyx_n_s_os __pyx_mstate_global->__pyx_n_s_os +#define __pyx_n_s_os_path __pyx_mstate_global->__pyx_n_s_os_path +#define __pyx_n_s_path __pyx_mstate_global->__pyx_n_s_path +#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle +#define __pyx_n_s_plugin __pyx_mstate_global->__pyx_n_s_plugin +#define __pyx_n_s_pop __pyx_mstate_global->__pyx_n_s_pop +#define __pyx_n_s_prev_user_uncaught_exc_info __pyx_mstate_global->__pyx_n_s_prev_user_uncaught_exc_info +#define __pyx_n_s_py_db __pyx_mstate_global->__pyx_n_s_py_db +#define __pyx_kp_s_pyc __pyx_mstate_global->__pyx_kp_s_pyc +#define __pyx_n_s_pydb_disposed __pyx_mstate_global->__pyx_n_s_pydb_disposed +#define __pyx_n_s_pydev_bundle __pyx_mstate_global->__pyx_n_s_pydev_bundle +#define __pyx_n_s_pydev_bundle__pydev_saved_modul __pyx_mstate_global->__pyx_n_s_pydev_bundle__pydev_saved_modul +#define __pyx_n_s_pydev_bundle_pydev_is_thread_al __pyx_mstate_global->__pyx_n_s_pydev_bundle_pydev_is_thread_al +#define __pyx_n_s_pydev_bundle_pydev_log __pyx_mstate_global->__pyx_n_s_pydev_bundle_pydev_log +#define __pyx_n_s_pydev_do_not_trace __pyx_mstate_global->__pyx_n_s_pydev_do_not_trace +#define __pyx_kp_s_pydev_execfile_py __pyx_mstate_global->__pyx_kp_s_pydev_execfile_py +#define __pyx_n_s_pydev_log __pyx_mstate_global->__pyx_n_s_pydev_log +#define __pyx_n_s_pydev_log_exception __pyx_mstate_global->__pyx_n_s_pydev_log_exception +#define __pyx_n_s_pydev_monkey __pyx_mstate_global->__pyx_n_s_pydev_monkey +#define __pyx_n_s_pydevd __pyx_mstate_global->__pyx_n_s_pydevd +#define __pyx_n_s_pydevd_bundle __pyx_mstate_global->__pyx_n_s_pydevd_bundle +#define __pyx_n_s_pydevd_bundle_pydevd_bytecode_u __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u +#define __pyx_n_s_pydevd_bundle_pydevd_comm_const __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_comm_const +#define __pyx_n_s_pydevd_bundle_pydevd_constants __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_constants +#define __pyx_n_s_pydevd_bundle_pydevd_cython __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_cython +#define __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx __pyx_mstate_global->__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx +#define __pyx_n_s_pydevd_bundle_pydevd_frame_util __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_frame_util +#define __pyx_n_s_pydevd_bundle_pydevd_utils __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_utils +#define __pyx_n_s_pydevd_dont_trace __pyx_mstate_global->__pyx_n_s_pydevd_dont_trace +#define __pyx_n_s_pydevd_file_utils __pyx_mstate_global->__pyx_n_s_pydevd_file_utils +#define __pyx_kp_s_pydevd_py __pyx_mstate_global->__pyx_kp_s_pydevd_py +#define __pyx_kp_s_pydevd_traceproperty_py __pyx_mstate_global->__pyx_kp_s_pydevd_traceproperty_py +#define __pyx_n_s_pydevd_tracing __pyx_mstate_global->__pyx_n_s_pydevd_tracing +#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError +#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum +#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result +#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state +#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type +#define __pyx_n_s_pyx_unpickle_PyDBAdditionalThr __pyx_mstate_global->__pyx_n_s_pyx_unpickle_PyDBAdditionalThr +#define __pyx_n_s_pyx_unpickle_PyDBFrame __pyx_mstate_global->__pyx_n_s_pyx_unpickle_PyDBFrame +#define __pyx_n_s_pyx_unpickle_SafeCallWrapper __pyx_mstate_global->__pyx_n_s_pyx_unpickle_SafeCallWrapper +#define __pyx_n_s_pyx_unpickle_ThreadTracer __pyx_mstate_global->__pyx_n_s_pyx_unpickle_ThreadTracer +#define __pyx_n_s_pyx_unpickle_TopLevelThreadTra __pyx_mstate_global->__pyx_n_s_pyx_unpickle_TopLevelThreadTra +#define __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2 __pyx_mstate_global->__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2 +#define __pyx_n_s_pyx_unpickle__TryExceptContain __pyx_mstate_global->__pyx_n_s_pyx_unpickle__TryExceptContain +#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_s_qname __pyx_mstate_global->__pyx_n_s_qname +#define __pyx_n_s_quitting __pyx_mstate_global->__pyx_n_s_quitting +#define __pyx_n_s_raise_lines __pyx_mstate_global->__pyx_n_s_raise_lines +#define __pyx_n_s_raise_lines_in_except __pyx_mstate_global->__pyx_n_s_raise_lines_in_except +#define __pyx_n_s_re __pyx_mstate_global->__pyx_n_s_re +#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce +#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython +#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex +#define __pyx_n_s_ref __pyx_mstate_global->__pyx_n_s_ref +#define __pyx_n_s_remove_additional_info __pyx_mstate_global->__pyx_n_s_remove_additional_info +#define __pyx_n_s_remove_exception_from_frame __pyx_mstate_global->__pyx_n_s_remove_exception_from_frame +#define __pyx_n_s_remove_return_values_flag __pyx_mstate_global->__pyx_n_s_remove_return_values_flag +#define __pyx_n_s_result __pyx_mstate_global->__pyx_n_s_result +#define __pyx_n_s_ret __pyx_mstate_global->__pyx_n_s_ret +#define __pyx_n_s_return __pyx_mstate_global->__pyx_n_s_return +#define __pyx_n_s_return_line __pyx_mstate_global->__pyx_n_s_return_line +#define __pyx_n_s_returns __pyx_mstate_global->__pyx_n_s_returns +#define __pyx_n_s_rfind __pyx_mstate_global->__pyx_n_s_rfind +#define __pyx_n_s_run __pyx_mstate_global->__pyx_n_s_run +#define __pyx_kp_s_s_raised_from_within_the_callba __pyx_mstate_global->__pyx_kp_s_s_raised_from_within_the_callba +#define __pyx_kp_s_s_s __pyx_mstate_global->__pyx_kp_s_s_s +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self +#define __pyx_n_s_send_caught_exception_stack __pyx_mstate_global->__pyx_n_s_send_caught_exception_stack +#define __pyx_n_s_send_caught_exception_stack_proc __pyx_mstate_global->__pyx_n_s_send_caught_exception_stack_proc +#define __pyx_n_s_set __pyx_mstate_global->__pyx_n_s_set +#define __pyx_n_s_set_additional_thread_info __pyx_mstate_global->__pyx_n_s_set_additional_thread_info +#define __pyx_n_s_set_additional_thread_info_lock __pyx_mstate_global->__pyx_n_s_set_additional_thread_info_lock +#define __pyx_n_s_set_suspend __pyx_mstate_global->__pyx_n_s_set_suspend +#define __pyx_n_s_set_trace_for_frame_and_parents __pyx_mstate_global->__pyx_n_s_set_trace_for_frame_and_parents +#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate +#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython +#define __pyx_n_s_should_stop __pyx_mstate_global->__pyx_n_s_should_stop +#define __pyx_n_s_should_stop_on_exception __pyx_mstate_global->__pyx_n_s_should_stop_on_exception +#define __pyx_n_s_should_trace_hook __pyx_mstate_global->__pyx_n_s_should_trace_hook +#define __pyx_n_s_show_return_values __pyx_mstate_global->__pyx_n_s_show_return_values +#define __pyx_n_s_skip_on_exceptions_thrown_in_sam __pyx_mstate_global->__pyx_n_s_skip_on_exceptions_thrown_in_sam +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_st_mtime __pyx_mstate_global->__pyx_n_s_st_mtime +#define __pyx_n_s_st_size __pyx_mstate_global->__pyx_n_s_st_size +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_stat __pyx_mstate_global->__pyx_n_s_stat +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop +#define __pyx_n_s_stop_on_unhandled_exception __pyx_mstate_global->__pyx_n_s_stop_on_unhandled_exception +#define __pyx_n_s_stopped __pyx_mstate_global->__pyx_n_s_stopped +#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource +#define __pyx_n_s_suspend __pyx_mstate_global->__pyx_n_s_suspend +#define __pyx_n_s_suspend_other_threads __pyx_mstate_global->__pyx_n_s_suspend_other_threads +#define __pyx_n_s_suspend_policy __pyx_mstate_global->__pyx_n_s_suspend_policy +#define __pyx_n_s_suspended_at_unhandled __pyx_mstate_global->__pyx_n_s_suspended_at_unhandled +#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_t __pyx_mstate_global->__pyx_n_s_t +#define __pyx_n_s_tb_frame __pyx_mstate_global->__pyx_n_s_tb_frame +#define __pyx_n_s_tb_lineno __pyx_mstate_global->__pyx_n_s_tb_lineno +#define __pyx_n_s_tb_next __pyx_mstate_global->__pyx_n_s_tb_next +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_thread __pyx_mstate_global->__pyx_n_s_thread +#define __pyx_kp_s_thread__ident_is_None_in__get_re __pyx_mstate_global->__pyx_kp_s_thread__ident_is_None_in__get_re +#define __pyx_n_s_thread_trace_func __pyx_mstate_global->__pyx_n_s_thread_trace_func +#define __pyx_n_s_thread_tracer __pyx_mstate_global->__pyx_n_s_thread_tracer +#define __pyx_n_s_threading __pyx_mstate_global->__pyx_n_s_threading +#define __pyx_n_s_threading_active __pyx_mstate_global->__pyx_n_s_threading_active +#define __pyx_n_s_threading_current_thread __pyx_mstate_global->__pyx_n_s_threading_current_thread +#define __pyx_n_s_threading_get_ident __pyx_mstate_global->__pyx_n_s_threading_get_ident +#define __pyx_n_s_top_level_thread_tracer __pyx_mstate_global->__pyx_n_s_top_level_thread_tracer +#define __pyx_n_s_top_level_thread_tracer_no_back __pyx_mstate_global->__pyx_n_s_top_level_thread_tracer_no_back +#define __pyx_n_s_top_level_thread_tracer_unhandle __pyx_mstate_global->__pyx_n_s_top_level_thread_tracer_unhandle +#define __pyx_n_s_trace __pyx_mstate_global->__pyx_n_s_trace +#define __pyx_n_s_trace_dispatch __pyx_mstate_global->__pyx_n_s_trace_dispatch +#define __pyx_n_s_trace_dispatch_and_unhandled_exc __pyx_mstate_global->__pyx_n_s_trace_dispatch_and_unhandled_exc +#define __pyx_n_s_trace_exception __pyx_mstate_global->__pyx_n_s_trace_exception +#define __pyx_n_s_trace_obj __pyx_mstate_global->__pyx_n_s_trace_obj +#define __pyx_n_s_trace_unhandled_exceptions __pyx_mstate_global->__pyx_n_s_trace_unhandled_exceptions +#define __pyx_n_s_try_exc_info __pyx_mstate_global->__pyx_n_s_try_exc_info +#define __pyx_n_s_try_except_info __pyx_mstate_global->__pyx_n_s_try_except_info +#define __pyx_n_s_try_except_infos __pyx_mstate_global->__pyx_n_s_try_except_infos +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_update_stepping_info __pyx_mstate_global->__pyx_n_s_update_stepping_info +#define __pyx_n_s_use_setstate __pyx_mstate_global->__pyx_n_s_use_setstate +#define __pyx_kp_s_utf_8 __pyx_mstate_global->__pyx_kp_s_utf_8 +#define __pyx_n_s_valid_try_except_infos __pyx_mstate_global->__pyx_n_s_valid_try_except_infos +#define __pyx_n_s_value __pyx_mstate_global->__pyx_n_s_value +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_version __pyx_mstate_global->__pyx_n_s_version +#define __pyx_n_s_was_just_raised __pyx_mstate_global->__pyx_n_s_was_just_raised +#define __pyx_n_s_weak_thread __pyx_mstate_global->__pyx_n_s_weak_thread +#define __pyx_n_s_weakref __pyx_mstate_global->__pyx_n_s_weakref +#define __pyx_n_s_writer __pyx_mstate_global->__pyx_n_s_writer +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_11 __pyx_mstate_global->__pyx_int_11 +#define __pyx_int_111 __pyx_mstate_global->__pyx_int_111 +#define __pyx_int_137 __pyx_mstate_global->__pyx_int_137 +#define __pyx_int_160 __pyx_mstate_global->__pyx_int_160 +#define __pyx_int_2424557 __pyx_mstate_global->__pyx_int_2424557 +#define __pyx_int_16751766 __pyx_mstate_global->__pyx_int_16751766 +#define __pyx_int_18997755 __pyx_mstate_global->__pyx_int_18997755 +#define __pyx_int_61391470 __pyx_mstate_global->__pyx_int_61391470 +#define __pyx_int_63705258 __pyx_mstate_global->__pyx_int_63705258 +#define __pyx_int_64458794 __pyx_mstate_global->__pyx_int_64458794 +#define __pyx_int_66451433 __pyx_mstate_global->__pyx_int_66451433 +#define __pyx_int_70528507 __pyx_mstate_global->__pyx_int_70528507 +#define __pyx_int_84338306 __pyx_mstate_global->__pyx_int_84338306 +#define __pyx_int_125568891 __pyx_mstate_global->__pyx_int_125568891 +#define __pyx_int_169093275 __pyx_mstate_global->__pyx_int_169093275 +#define __pyx_int_171613889 __pyx_mstate_global->__pyx_int_171613889 +#define __pyx_int_192493205 __pyx_mstate_global->__pyx_int_192493205 +#define __pyx_int_210464433 __pyx_mstate_global->__pyx_int_210464433 +#define __pyx_int_221489684 __pyx_mstate_global->__pyx_int_221489684 +#define __pyx_int_230645316 __pyx_mstate_global->__pyx_int_230645316 +#define __pyx_int_232881363 __pyx_mstate_global->__pyx_int_232881363 +#define __pyx_int_255484337 __pyx_mstate_global->__pyx_int_255484337 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_slice__2 __pyx_mstate_global->__pyx_slice__2 +#define __pyx_slice__6 __pyx_mstate_global->__pyx_slice__6 +#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3 +#define __pyx_tuple__5 __pyx_mstate_global->__pyx_tuple__5 +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 +#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12 +#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13 +#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14 +#define __pyx_tuple__15 __pyx_mstate_global->__pyx_tuple__15 +#define __pyx_tuple__16 __pyx_mstate_global->__pyx_tuple__16 +#define __pyx_tuple__17 __pyx_mstate_global->__pyx_tuple__17 +#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18 +#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36 +#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42 +#define __pyx_tuple__46 __pyx_mstate_global->__pyx_tuple__46 +#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49 +#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51 +#define __pyx_tuple__53 __pyx_mstate_global->__pyx_tuple__53 +#define __pyx_tuple__57 __pyx_mstate_global->__pyx_tuple__57 +#define __pyx_tuple__59 __pyx_mstate_global->__pyx_tuple__59 +#define __pyx_tuple__61 __pyx_mstate_global->__pyx_tuple__61 +#define __pyx_tuple__66 __pyx_mstate_global->__pyx_tuple__66 +#define __pyx_tuple__68 __pyx_mstate_global->__pyx_tuple__68 +#define __pyx_tuple__70 __pyx_mstate_global->__pyx_tuple__70 +#define __pyx_tuple__75 __pyx_mstate_global->__pyx_tuple__75 +#define __pyx_tuple__84 __pyx_mstate_global->__pyx_tuple__84 +#define __pyx_codeobj__21 __pyx_mstate_global->__pyx_codeobj__21 +#define __pyx_codeobj__22 __pyx_mstate_global->__pyx_codeobj__22 +#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 +#define __pyx_codeobj__25 __pyx_mstate_global->__pyx_codeobj__25 +#define __pyx_codeobj__27 __pyx_mstate_global->__pyx_codeobj__27 +#define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29 +#define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 +#define __pyx_codeobj__35 __pyx_mstate_global->__pyx_codeobj__35 +#define __pyx_codeobj__38 __pyx_mstate_global->__pyx_codeobj__38 +#define __pyx_codeobj__43 __pyx_mstate_global->__pyx_codeobj__43 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45 +#define __pyx_codeobj__47 __pyx_mstate_global->__pyx_codeobj__47 +#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48 +#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50 +#define __pyx_codeobj__52 __pyx_mstate_global->__pyx_codeobj__52 +#define __pyx_codeobj__54 __pyx_mstate_global->__pyx_codeobj__54 +#define __pyx_codeobj__55 __pyx_mstate_global->__pyx_codeobj__55 +#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56 +#define __pyx_codeobj__58 __pyx_mstate_global->__pyx_codeobj__58 +#define __pyx_codeobj__60 __pyx_mstate_global->__pyx_codeobj__60 +#define __pyx_codeobj__62 __pyx_mstate_global->__pyx_codeobj__62 +#define __pyx_codeobj__63 __pyx_mstate_global->__pyx_codeobj__63 +#define __pyx_codeobj__64 __pyx_mstate_global->__pyx_codeobj__64 +#define __pyx_codeobj__65 __pyx_mstate_global->__pyx_codeobj__65 +#define __pyx_codeobj__67 __pyx_mstate_global->__pyx_codeobj__67 +#define __pyx_codeobj__69 __pyx_mstate_global->__pyx_codeobj__69 +#define __pyx_codeobj__71 __pyx_mstate_global->__pyx_codeobj__71 +#define __pyx_codeobj__72 __pyx_mstate_global->__pyx_codeobj__72 +#define __pyx_codeobj__73 __pyx_mstate_global->__pyx_codeobj__73 +#define __pyx_codeobj__74 __pyx_mstate_global->__pyx_codeobj__74 +#define __pyx_codeobj__76 __pyx_mstate_global->__pyx_codeobj__76 +#define __pyx_codeobj__77 __pyx_mstate_global->__pyx_codeobj__77 +#define __pyx_codeobj__78 __pyx_mstate_global->__pyx_codeobj__78 +#define __pyx_codeobj__79 __pyx_mstate_global->__pyx_codeobj__79 +#define __pyx_codeobj__80 __pyx_mstate_global->__pyx_codeobj__80 +#define __pyx_codeobj__81 __pyx_mstate_global->__pyx_codeobj__81 +#define __pyx_codeobj__82 __pyx_mstate_global->__pyx_codeobj__82 +#define __pyx_codeobj__83 __pyx_mstate_global->__pyx_codeobj__83 +#define __pyx_codeobj__85 __pyx_mstate_global->__pyx_codeobj__85 +#define __pyx_codeobj__86 __pyx_mstate_global->__pyx_codeobj__86 +#define __pyx_codeobj__87 __pyx_mstate_global->__pyx_codeobj__87 +#define __pyx_codeobj__88 __pyx_mstate_global->__pyx_codeobj__88 +#define __pyx_codeobj__89 __pyx_mstate_global->__pyx_codeobj__89 +#define __pyx_codeobj__90 __pyx_mstate_global->__pyx_codeobj__90 +#define __pyx_codeobj__91 __pyx_mstate_global->__pyx_codeobj__91 +/* #### Code section: module_code ### */ + +/* "_pydevd_bundle/pydevd_cython.pyx":75 + * # fmt: on * * def __init__(self): # <<<<<<<<<<<<<< * self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND @@ -2680,12 +5534,20 @@ static PyObject *__pyx_codeobj__46; /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -2701,22 +5563,22 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":68 + /* "_pydevd_bundle/pydevd_cython.pyx":76 * * def __init__(self): * self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND # <<<<<<<<<<<<<< * self.pydev_step_stop = None * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 68, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->pydev_state = __pyx_t_2; - /* "_pydevd_bundle/pydevd_cython.pyx":69 + /* "_pydevd_bundle/pydevd_cython.pyx":77 * def __init__(self): * self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND * self.pydev_step_stop = None # <<<<<<<<<<<<<< @@ -2729,7 +5591,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_step_stop); __pyx_v_self->pydev_step_stop = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":77 + /* "_pydevd_bundle/pydevd_cython.pyx":85 * # method the strategy is changed to a step in). * * self.pydev_original_step_cmd = -1 # Something as CMD_STEP_INTO, CMD_STEP_OVER, etc. # <<<<<<<<<<<<<< @@ -2738,7 +5600,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_original_step_cmd = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":78 + /* "_pydevd_bundle/pydevd_cython.pyx":86 * * self.pydev_original_step_cmd = -1 # Something as CMD_STEP_INTO, CMD_STEP_OVER, etc. * self.pydev_step_cmd = -1 # Something as CMD_STEP_INTO, CMD_STEP_OVER, etc. # <<<<<<<<<<<<<< @@ -2747,7 +5609,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_step_cmd = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":80 + /* "_pydevd_bundle/pydevd_cython.pyx":88 * self.pydev_step_cmd = -1 # Something as CMD_STEP_INTO, CMD_STEP_OVER, etc. * * self.pydev_notify_kill = False # <<<<<<<<<<<<<< @@ -2756,7 +5618,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_notify_kill = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":81 + /* "_pydevd_bundle/pydevd_cython.pyx":89 * * self.pydev_notify_kill = False * self.pydev_django_resolve_frame = False # <<<<<<<<<<<<<< @@ -2765,7 +5627,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_django_resolve_frame = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":82 + /* "_pydevd_bundle/pydevd_cython.pyx":90 * self.pydev_notify_kill = False * self.pydev_django_resolve_frame = False * self.pydev_call_from_jinja2 = None # <<<<<<<<<<<<<< @@ -2778,7 +5640,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_call_from_jinja2); __pyx_v_self->pydev_call_from_jinja2 = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":83 + /* "_pydevd_bundle/pydevd_cython.pyx":91 * self.pydev_django_resolve_frame = False * self.pydev_call_from_jinja2 = None * self.pydev_call_inside_jinja2 = None # <<<<<<<<<<<<<< @@ -2791,20 +5653,20 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_call_inside_jinja2); __pyx_v_self->pydev_call_inside_jinja2 = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":84 + /* "_pydevd_bundle/pydevd_cython.pyx":92 * self.pydev_call_from_jinja2 = None * self.pydev_call_inside_jinja2 = None * self.is_tracing = 0 # <<<<<<<<<<<<<< * self.conditional_breakpoint_exception = None - * self.pydev_message = '' + * self.pydev_message = "" */ __pyx_v_self->is_tracing = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":85 + /* "_pydevd_bundle/pydevd_cython.pyx":93 * self.pydev_call_inside_jinja2 = None * self.is_tracing = 0 * self.conditional_breakpoint_exception = None # <<<<<<<<<<<<<< - * self.pydev_message = '' + * self.pydev_message = "" * self.suspend_type = PYTHON_SUSPEND */ __Pyx_INCREF(Py_None); @@ -2813,10 +5675,10 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->conditional_breakpoint_exception); __pyx_v_self->conditional_breakpoint_exception = ((PyObject*)Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":86 + /* "_pydevd_bundle/pydevd_cython.pyx":94 * self.is_tracing = 0 * self.conditional_breakpoint_exception = None - * self.pydev_message = '' # <<<<<<<<<<<<<< + * self.pydev_message = "" # <<<<<<<<<<<<<< * self.suspend_type = PYTHON_SUSPEND * self.pydev_next_line = -1 */ @@ -2826,34 +5688,34 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_message); __pyx_v_self->pydev_message = __pyx_kp_s_; - /* "_pydevd_bundle/pydevd_cython.pyx":87 + /* "_pydevd_bundle/pydevd_cython.pyx":95 * self.conditional_breakpoint_exception = None - * self.pydev_message = '' + * self.pydev_message = "" * self.suspend_type = PYTHON_SUSPEND # <<<<<<<<<<<<<< * self.pydev_next_line = -1 - * self.pydev_func_name = '.invalid.' # Must match the type in cython + * self.pydev_func_name = ".invalid." # Must match the type in cython */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 95, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->suspend_type = __pyx_t_2; - /* "_pydevd_bundle/pydevd_cython.pyx":88 - * self.pydev_message = '' + /* "_pydevd_bundle/pydevd_cython.pyx":96 + * self.pydev_message = "" * self.suspend_type = PYTHON_SUSPEND * self.pydev_next_line = -1 # <<<<<<<<<<<<<< - * self.pydev_func_name = '.invalid.' # Must match the type in cython + * self.pydev_func_name = ".invalid." # Must match the type in cython * self.suspended_at_unhandled = False */ __pyx_v_self->pydev_next_line = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":89 + /* "_pydevd_bundle/pydevd_cython.pyx":97 * self.suspend_type = PYTHON_SUSPEND * self.pydev_next_line = -1 - * self.pydev_func_name = '.invalid.' # Must match the type in cython # <<<<<<<<<<<<<< + * self.pydev_func_name = ".invalid." # Must match the type in cython # <<<<<<<<<<<<<< * self.suspended_at_unhandled = False - * self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + * self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' */ __Pyx_INCREF(__pyx_kp_s_invalid); __Pyx_GIVEREF(__pyx_kp_s_invalid); @@ -2861,19 +5723,19 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_func_name); __pyx_v_self->pydev_func_name = __pyx_kp_s_invalid; - /* "_pydevd_bundle/pydevd_cython.pyx":90 + /* "_pydevd_bundle/pydevd_cython.pyx":98 * self.pydev_next_line = -1 - * self.pydev_func_name = '.invalid.' # Must match the type in cython + * self.pydev_func_name = ".invalid." # Must match the type in cython * self.suspended_at_unhandled = False # <<<<<<<<<<<<<< - * self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + * self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' * self.top_level_thread_tracer_no_back_frames = [] */ __pyx_v_self->suspended_at_unhandled = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":91 - * self.pydev_func_name = '.invalid.' # Must match the type in cython + /* "_pydevd_bundle/pydevd_cython.pyx":99 + * self.pydev_func_name = ".invalid." # Must match the type in cython * self.suspended_at_unhandled = False - * self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' # <<<<<<<<<<<<<< + * self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' # <<<<<<<<<<<<<< * self.top_level_thread_tracer_no_back_frames = [] * self.top_level_thread_tracer_unhandled = None */ @@ -2883,14 +5745,14 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->trace_suspend_type); __pyx_v_self->trace_suspend_type = __pyx_n_s_trace; - /* "_pydevd_bundle/pydevd_cython.pyx":92 + /* "_pydevd_bundle/pydevd_cython.pyx":100 * self.suspended_at_unhandled = False - * self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + * self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' * self.top_level_thread_tracer_no_back_frames = [] # <<<<<<<<<<<<<< * self.top_level_thread_tracer_unhandled = None * self.thread_tracer = None */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 100, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); @@ -2898,8 +5760,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __pyx_v_self->top_level_thread_tracer_no_back_frames = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":93 - * self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + /* "_pydevd_bundle/pydevd_cython.pyx":101 + * self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' * self.top_level_thread_tracer_no_back_frames = [] * self.top_level_thread_tracer_unhandled = None # <<<<<<<<<<<<<< * self.thread_tracer = None @@ -2911,7 +5773,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->top_level_thread_tracer_unhandled); __pyx_v_self->top_level_thread_tracer_unhandled = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":94 + /* "_pydevd_bundle/pydevd_cython.pyx":102 * self.top_level_thread_tracer_no_back_frames = [] * self.top_level_thread_tracer_unhandled = None * self.thread_tracer = None # <<<<<<<<<<<<<< @@ -2924,7 +5786,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->thread_tracer); __pyx_v_self->thread_tracer = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":95 + /* "_pydevd_bundle/pydevd_cython.pyx":103 * self.top_level_thread_tracer_unhandled = None * self.thread_tracer = None * self.step_in_initial_location = None # <<<<<<<<<<<<<< @@ -2937,7 +5799,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->step_in_initial_location); __pyx_v_self->step_in_initial_location = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":96 + /* "_pydevd_bundle/pydevd_cython.pyx":104 * self.thread_tracer = None * self.step_in_initial_location = None * self.pydev_smart_parent_offset = -1 # <<<<<<<<<<<<<< @@ -2946,7 +5808,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_smart_parent_offset = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":97 + /* "_pydevd_bundle/pydevd_cython.pyx":105 * self.step_in_initial_location = None * self.pydev_smart_parent_offset = -1 * self.pydev_smart_child_offset = -1 # <<<<<<<<<<<<<< @@ -2955,7 +5817,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ __pyx_v_self->pydev_smart_child_offset = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":98 + /* "_pydevd_bundle/pydevd_cython.pyx":106 * self.pydev_smart_parent_offset = -1 * self.pydev_smart_child_offset = -1 * self.pydev_smart_step_into_variants = () # <<<<<<<<<<<<<< @@ -2968,14 +5830,14 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_DECREF(__pyx_v_self->pydev_smart_step_into_variants); __pyx_v_self->pydev_smart_step_into_variants = __pyx_empty_tuple; - /* "_pydevd_bundle/pydevd_cython.pyx":99 + /* "_pydevd_bundle/pydevd_cython.pyx":107 * self.pydev_smart_child_offset = -1 * self.pydev_smart_step_into_variants = () * self.target_id_to_smart_step_into_variant = {} # <<<<<<<<<<<<<< * * # Flag to indicate ipython use-case where each line will be executed as a call/line/return */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->target_id_to_smart_step_into_variant); @@ -2983,17 +5845,39 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __pyx_v_self->target_id_to_smart_step_into_variant = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":111 + /* "_pydevd_bundle/pydevd_cython.pyx":119 * # * # See: https://github.com/microsoft/debugpy/issues/869#issuecomment-1132141003 * self.pydev_use_scoped_step_frame = False # <<<<<<<<<<<<<< + * self.weak_thread = None * - * def get_topmost_frame(self, thread): */ __pyx_v_self->pydev_use_scoped_step_frame = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":67 - * # ENDIF + /* "_pydevd_bundle/pydevd_cython.pyx":120 + * # See: https://github.com/microsoft/debugpy/issues/869#issuecomment-1132141003 + * self.pydev_use_scoped_step_frame = False + * self.weak_thread = None # <<<<<<<<<<<<<< + * + * # Purpose: detect if this thread is suspended and actually in the wait loop + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->weak_thread); + __Pyx_DECREF(__pyx_v_self->weak_thread); + __pyx_v_self->weak_thread = Py_None; + + /* "_pydevd_bundle/pydevd_cython.pyx":125 + * # at this time (otherwise it may be suspended but still didn't reach a point. + * # to pause). + * self.is_in_wait_loop = False # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __pyx_v_self->is_in_wait_loop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":75 + * # fmt: on * * def __init__(self): # <<<<<<<<<<<<<< * self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND @@ -3012,361 +5896,396 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":113 - * self.pydev_use_scoped_step_frame = False - * - * def get_topmost_frame(self, thread): # <<<<<<<<<<<<<< - * ''' - * Gets the topmost frame for the given thread. Note that it may be None +/* "_pydevd_bundle/pydevd_cython.pyx":129 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef object _get_related_thread(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_related_thread(self): */ -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3get_topmost_frame(PyObject *__pyx_v_self, PyObject *__pyx_v_thread); /*proto*/ -static char __pyx_doc_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2get_topmost_frame[] = "\n Gets the topmost frame for the given thread. Note that it may be None\n and callers should remove the reference to the frame as soon as possible\n to avoid disturbing user code.\n "; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3get_topmost_frame(PyObject *__pyx_v_self, PyObject *__pyx_v_thread) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_topmost_frame (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2get_topmost_frame(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_thread)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2get_topmost_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread) { - PyObject *__pyx_v_current_frames = NULL; - PyObject *__pyx_v_topmost_frame = NULL; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__get_related_thread(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch) { + PyObject *__pyx_v_thread = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; + unsigned int __pyx_t_5; int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_topmost_frame", 0); + __Pyx_RefNannySetupContext("_get_related_thread", 1); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_related_thread); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread)) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } - /* "_pydevd_bundle/pydevd_cython.pyx":120 - * ''' - * # sys._current_frames(): dictionary with thread id -> topmost frame - * current_frames = _current_frames() # <<<<<<<<<<<<<< - * topmost_frame = current_frames.get(thread.ident) - * if topmost_frame is None: + /* "_pydevd_bundle/pydevd_cython.pyx":134 + * # ENDIF + * # fmt: on + * if self.pydev_notify_kill: # Already killed # <<<<<<<<<<<<<< + * return None + * */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_current_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + if (__pyx_v_self->pydev_notify_kill) { + + /* "_pydevd_bundle/pydevd_cython.pyx":135 + * # fmt: on + * if self.pydev_notify_kill: # Already killed + * return None # <<<<<<<<<<<<<< + * + * if self.weak_thread is None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":134 + * # ENDIF + * # fmt: on + * if self.pydev_notify_kill: # Already killed # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":137 + * return None + * + * if self.weak_thread is None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_6 = (__pyx_v_self->weak_thread == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_bundle/pydevd_cython.pyx":138 + * + * if self.weak_thread is None: + * return None # <<<<<<<<<<<<<< + * + * thread = self.weak_thread() + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":137 + * return None + * + * if self.weak_thread is None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":140 + * return None + * + * thread = self.weak_thread() # <<<<<<<<<<<<<< + * if thread is None: + * return False + */ + __Pyx_INCREF(__pyx_v_self->weak_thread); + __pyx_t_2 = __pyx_v_self->weak_thread; __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_current_frames = __pyx_t_1; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_thread = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":121 - * # sys._current_frames(): dictionary with thread id -> topmost frame - * current_frames = _current_frames() - * topmost_frame = current_frames.get(thread.ident) # <<<<<<<<<<<<<< - * if topmost_frame is None: - * # Note: this is expected for dummy threads (so, getting the topmost frame should be + /* "_pydevd_bundle/pydevd_cython.pyx":141 + * + * thread = self.weak_thread() + * if thread is None: # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_6 = (__pyx_v_thread == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_bundle/pydevd_cython.pyx":142 + * thread = self.weak_thread() + * if thread is None: + * return False # <<<<<<<<<<<<<< + * + * if thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":141 + * + * thread = self.weak_thread() + * if thread is None: # <<<<<<<<<<<<<< + * return False + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frames, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_topmost_frame = __pyx_t_1; - __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":122 - * current_frames = _current_frames() - * topmost_frame = current_frames.get(thread.ident) - * if topmost_frame is None: # <<<<<<<<<<<<<< - * # Note: this is expected for dummy threads (so, getting the topmost frame should be - * # treated as optional). + /* "_pydevd_bundle/pydevd_cython.pyx":144 + * return False + * + * if thread._is_stopped: # <<<<<<<<<<<<<< + * return None + * */ - __pyx_t_5 = (__pyx_v_topmost_frame == Py_None); - __pyx_t_6 = (__pyx_t_5 != 0); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":125 - * # Note: this is expected for dummy threads (so, getting the topmost frame should be - * # treated as optional). - * pydev_log.info( # <<<<<<<<<<<<<< - * 'Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n' - * 'GEVENT_SUPPORT: %s', + /* "_pydevd_bundle/pydevd_cython.pyx":145 + * + * if thread._is_stopped: + * return None # <<<<<<<<<<<<<< + * + * if thread._ident is None: # Can this happen? */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":129 - * 'GEVENT_SUPPORT: %s', - * thread, - * thread.ident, # <<<<<<<<<<<<<< - * id(thread), - * current_frames, + /* "_pydevd_bundle/pydevd_cython.pyx":144 + * return False + * + * if thread._is_stopped: # <<<<<<<<<<<<<< + * return None + * */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 129, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + } - /* "_pydevd_bundle/pydevd_cython.pyx":130 - * thread, - * thread.ident, - * id(thread), # <<<<<<<<<<<<<< - * current_frames, - * SUPPORT_GEVENT, + /* "_pydevd_bundle/pydevd_cython.pyx":147 + * return None + * + * if thread._ident is None: # Can this happen? # <<<<<<<<<<<<<< + * pydev_log.critical("thread._ident is None in _get_related_thread!") + * return None */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_thread); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = (__pyx_t_1 == Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":132 - * id(thread), - * current_frames, - * SUPPORT_GEVENT, # <<<<<<<<<<<<<< - * ) + /* "_pydevd_bundle/pydevd_cython.pyx":148 + * + * if thread._ident is None: # Can this happen? + * pydev_log.critical("thread._ident is None in _get_related_thread!") # <<<<<<<<<<<<<< + * return None * */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_SUPPORT_GEVENT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 132, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = NULL; - __pyx_t_9 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_8)) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_critical); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_9 = 1; + __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_kp_s_Unable_to_get_topmost_frame_for, __pyx_v_thread, __pyx_t_2, __pyx_t_4, __pyx_v_current_frames, __pyx_t_7}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_kp_s_Unable_to_get_topmost_frame_for, __pyx_v_thread, __pyx_t_2, __pyx_t_4, __pyx_v_current_frames, __pyx_t_7}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 6+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else #endif { - __pyx_t_10 = PyTuple_New(6+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 125, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_kp_s_Unable_to_get_topmost_frame_for); - __Pyx_GIVEREF(__pyx_kp_s_Unable_to_get_topmost_frame_for); - PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_kp_s_Unable_to_get_topmost_frame_for); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_v_thread); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, __pyx_t_4); - __Pyx_INCREF(__pyx_v_current_frames); - __Pyx_GIVEREF(__pyx_v_current_frames); - PyTuple_SET_ITEM(__pyx_t_10, 4+__pyx_t_9, __pyx_v_current_frames); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_10, 5+__pyx_t_9, __pyx_t_7); - __pyx_t_2 = 0; - __pyx_t_4 = 0; - __pyx_t_7 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 125, __pyx_L1_error) + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_s_thread__ident_is_None_in__get_re}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":122 - * current_frames = _current_frames() - * topmost_frame = current_frames.get(thread.ident) - * if topmost_frame is None: # <<<<<<<<<<<<<< - * # Note: this is expected for dummy threads (so, getting the topmost frame should be - * # treated as optional). - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":135 - * ) - * - * return topmost_frame # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":149 + * if thread._ident is None: # Can this happen? + * pydev_log.critical("thread._ident is None in _get_related_thread!") + * return None # <<<<<<<<<<<<<< * - * def __str__(self): + * if threading._active.get(thread._ident) is not thread: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_topmost_frame); - __pyx_r = __pyx_v_topmost_frame; - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":113 - * self.pydev_use_scoped_step_frame = False + /* "_pydevd_bundle/pydevd_cython.pyx":147 + * return None * - * def get_topmost_frame(self, thread): # <<<<<<<<<<<<<< - * ''' - * Gets the topmost frame for the given thread. Note that it may be None + * if thread._ident is None: # Can this happen? # <<<<<<<<<<<<<< + * pydev_log.critical("thread._ident is None in _get_related_thread!") + * return None */ + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.get_topmost_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_current_frames); - __Pyx_XDECREF(__pyx_v_topmost_frame); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pyx":137 - * return topmost_frame + /* "_pydevd_bundle/pydevd_cython.pyx":151 + * return None + * + * if threading._active.get(thread._ident) is not thread: # <<<<<<<<<<<<<< + * return None * - * def __str__(self): # <<<<<<<<<<<<<< - * return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( - * self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_active); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_6 = (__pyx_t_1 != __pyx_v_thread); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5__str__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5__str__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4__str__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4__str__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__str__", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":138 + /* "_pydevd_bundle/pydevd_cython.pyx":152 * - * def __str__(self): - * return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( # <<<<<<<<<<<<<< - * self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + * if threading._active.get(thread._ident) is not thread: + * return None # <<<<<<<<<<<<<< * + * return thread */ - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":139 - * def __str__(self): - * return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( - * self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":151 + * return None * + * if threading._active.get(thread._ident) is not thread: # <<<<<<<<<<<<<< + * return None * */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_notify_kill); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_INCREF(__pyx_v_self->pydev_step_stop); - __Pyx_GIVEREF(__pyx_v_self->pydev_step_stop); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_self->pydev_step_stop); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_3 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":138 + /* "_pydevd_bundle/pydevd_cython.pyx":154 + * return None * - * def __str__(self): - * return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( # <<<<<<<<<<<<<< - * self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + * return thread # <<<<<<<<<<<<<< * + * # fmt: off */ - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 138, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_thread); + __pyx_r = __pyx_v_thread; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":137 - * return topmost_frame - * - * def __str__(self): # <<<<<<<<<<<<<< - * return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( - * self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + /* "_pydevd_bundle/pydevd_cython.pyx":129 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef object _get_related_thread(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_related_thread(self): */ /* function exit code */ @@ -3375,44 +6294,66 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo._get_related_thread", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_thread); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pxd":2 - * cdef class PyDBAdditionalThreadInfo: - * cdef public int pydev_state # <<<<<<<<<<<<<< - * cdef public object pydev_step_stop # Actually, it's a frame or None - * cdef public int pydev_original_step_cmd - */ - /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_1__get__(PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread = {"_get_related_thread", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + __Pyx_RefNannySetupContext("_get_related_thread (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("_get_related_thread", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_get_related_thread", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2_get_related_thread(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2_get_related_thread(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("_get_related_thread", 1); __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__get_related_thread(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -3421,7 +6362,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_state.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo._get_related_thread", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); @@ -3429,176 +6370,271 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea return __pyx_r; } -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} +/* "_pydevd_bundle/pydevd_cython.pyx":158 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint _is_stepping(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_stepping(self): + */ -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static int __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__is_stepping(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch) { int __pyx_r; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2, __pyx_L1_error) - __pyx_v_self->pydev_state = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_state.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pxd":3 - * cdef class PyDBAdditionalThreadInfo: - * cdef public int pydev_state - * cdef public object pydev_step_stop # Actually, it's a frame or None # <<<<<<<<<<<<<< - * cdef public int pydev_original_step_cmd - * cdef public int pydev_step_cmd - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->pydev_step_stop); - __pyx_r = __pyx_v_self->pydev_step_stop; - goto __pyx_L0; + __Pyx_RefNannySetupContext("_is_stepping", 1); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_stepping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping)) { + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_6; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":163 + * # ENDIF + * # fmt: on + * if self.pydev_state == STATE_RUN and self.pydev_step_cmd != -1: # <<<<<<<<<<<<<< + * # This means actually stepping in a step operation. + * return True + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_7 = (__pyx_v_self->pydev_step_cmd != -1L); + __pyx_t_6 = __pyx_t_7; + __pyx_L4_bool_binop_done:; + if (__pyx_t_6) { -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + /* "_pydevd_bundle/pydevd_cython.pyx":165 + * if self.pydev_state == STATE_RUN and self.pydev_step_cmd != -1: + * # This means actually stepping in a step operation. + * return True # <<<<<<<<<<<<<< + * + * if self.pydev_state == STATE_SUSPEND and self.is_in_wait_loop: + */ + __pyx_r = 1; + goto __pyx_L0; - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":163 + * # ENDIF + * # fmt: on + * if self.pydev_state == STATE_RUN and self.pydev_step_cmd != -1: # <<<<<<<<<<<<<< + * # This means actually stepping in a step operation. + * return True + */ + } -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __Pyx_GOTREF(__pyx_v_self->pydev_step_stop); - __Pyx_DECREF(__pyx_v_self->pydev_step_stop); - __pyx_v_self->pydev_step_stop = __pyx_v_value; + /* "_pydevd_bundle/pydevd_cython.pyx":167 + * return True + * + * if self.pydev_state == STATE_SUSPEND and self.is_in_wait_loop: # <<<<<<<<<<<<<< + * # This means stepping because it was suspended but still didn't + * # reach a suspension point. + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_STATE_SUSPEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_6 = __pyx_v_self->is_in_wait_loop; + __pyx_L7_bool_binop_done:; + if (__pyx_t_6) { - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":170 + * # This means stepping because it was suspended but still didn't + * # reach a suspension point. + * return True # <<<<<<<<<<<<<< + * + * return False + */ + __pyx_r = 1; + goto __pyx_L0; -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_5__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_5__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + /* "_pydevd_bundle/pydevd_cython.pyx":167 + * return True + * + * if self.pydev_state == STATE_SUSPEND and self.is_in_wait_loop: # <<<<<<<<<<<<<< + * # This means stepping because it was suspended but still didn't + * # reach a suspension point. + */ + } - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":172 + * return True + * + * return False # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __pyx_r = 0; + goto __pyx_L0; -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->pydev_step_stop); - __Pyx_DECREF(__pyx_v_self->pydev_step_stop); - __pyx_v_self->pydev_step_stop = Py_None; + /* "_pydevd_bundle/pydevd_cython.pyx":158 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint _is_stepping(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_stepping(self): + */ /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo._is_stepping", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; + __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pxd":4 - * cdef public int pydev_state - * cdef public object pydev_step_stop # Actually, it's a frame or None - * cdef public int pydev_original_step_cmd # <<<<<<<<<<<<<< - * cdef public int pydev_step_cmd - * cdef public bint pydev_notify_kill - */ - /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_1__get__(PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping = {"_is_stepping", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + __Pyx_RefNannySetupContext("_is_stepping (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("_is_stepping", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_is_stepping", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4_is_stepping(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_4_is_stepping(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("_is_stepping", 1); __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_original_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__is_stepping(__pyx_v_self, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 158, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_original_step_cmd.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo._is_stepping", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); @@ -3606,72 +6642,396 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea return __pyx_r; } -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} +/* "_pydevd_bundle/pydevd_cython.pyx":176 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef get_topmost_frame(self, thread): # <<<<<<<<<<<<<< + * # ELSE + * # def get_topmost_frame(self, thread): + */ -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_get_topmost_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread, int __pyx_skip_dispatch) { + PyObject *__pyx_v_current_frames = NULL; + PyObject *__pyx_v_topmost_frame = NULL; + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 4, __pyx_L1_error) - __pyx_v_self->pydev_original_step_cmd = __pyx_t_1; + __Pyx_RefNannySetupContext("get_topmost_frame", 1); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_topmost_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame)) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_thread}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } - /* function exit code */ - __pyx_r = 0; + /* "_pydevd_bundle/pydevd_cython.pyx":187 + * """ + * # sys._current_frames(): dictionary with thread id -> topmost frame + * current_frames = _current_frames() # <<<<<<<<<<<<<< + * topmost_frame = current_frames.get(thread._ident) + * if topmost_frame is None: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_current_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_current_frames = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":188 + * # sys._current_frames(): dictionary with thread id -> topmost frame + * current_frames = _current_frames() + * topmost_frame = current_frames.get(thread._ident) # <<<<<<<<<<<<<< + * if topmost_frame is None: + * # Note: this is expected for dummy threads (so, getting the topmost frame should be + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frames, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_topmost_frame = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":189 + * current_frames = _current_frames() + * topmost_frame = current_frames.get(thread._ident) + * if topmost_frame is None: # <<<<<<<<<<<<<< + * # Note: this is expected for dummy threads (so, getting the topmost frame should be + * # treated as optional). + */ + __pyx_t_6 = (__pyx_v_topmost_frame == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_bundle/pydevd_cython.pyx":192 + * # Note: this is expected for dummy threads (so, getting the topmost frame should be + * # treated as optional). + * pydev_log.info( # <<<<<<<<<<<<<< + * "Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n" "GEVENT_SUPPORT: %s", + * thread, + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":195 + * "Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n" "GEVENT_SUPPORT: %s", + * thread, + * thread.ident, # <<<<<<<<<<<<<< + * id(thread), + * current_frames, + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "_pydevd_bundle/pydevd_cython.pyx":196 + * thread, + * thread.ident, + * id(thread), # <<<<<<<<<<<<<< + * current_frames, + * SUPPORT_GEVENT, + */ + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_thread); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "_pydevd_bundle/pydevd_cython.pyx":198 + * id(thread), + * current_frames, + * SUPPORT_GEVENT, # <<<<<<<<<<<<<< + * ) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_SUPPORT_GEVENT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_8, __pyx_kp_s_Unable_to_get_topmost_frame_for, __pyx_v_thread, __pyx_t_2, __pyx_t_4, __pyx_v_current_frames, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 6+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":189 + * current_frames = _current_frames() + * topmost_frame = current_frames.get(thread._ident) + * if topmost_frame is None: # <<<<<<<<<<<<<< + * # Note: this is expected for dummy threads (so, getting the topmost frame should be + * # treated as optional). + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":201 + * ) + * + * return topmost_frame # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_topmost_frame); + __pyx_r = __pyx_v_topmost_frame; goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":176 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef get_topmost_frame(self, thread): # <<<<<<<<<<<<<< + * # ELSE + * # def get_topmost_frame(self, thread): + */ + + /* function exit code */ __pyx_L1_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_original_step_cmd.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.get_topmost_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_current_frames); + __Pyx_XDECREF(__pyx_v_topmost_frame); + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pxd":5 - * cdef public object pydev_step_stop # Actually, it's a frame or None - * cdef public int pydev_original_step_cmd - * cdef public int pydev_step_cmd # <<<<<<<<<<<<<< - * cdef public bint pydev_notify_kill - * cdef public object pydev_smart_step_stop # Actually, it's a frame or None - */ - /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_1__get__(PyObject *__pyx_v_self) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6get_topmost_frame, "\n Gets the topmost frame for the given thread. Note that it may be None\n and callers should remove the reference to the frame as soon as possible\n to avoid disturbing user code.\n "); +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame = {"get_topmost_frame", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6get_topmost_frame}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_thread = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + __Pyx_RefNannySetupContext("get_topmost_frame (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_topmost_frame") < 0)) __PYX_ERR(0, 176, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_thread = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_topmost_frame", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 176, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.get_topmost_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6get_topmost_frame(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), __pyx_v_thread); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6get_topmost_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("get_topmost_frame", 1); __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_get_topmost_frame(__pyx_v_self, __pyx_v_thread, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -3680,7 +7040,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_step_cmd.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.get_topmost_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); @@ -3688,43 +7048,632 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea return __pyx_r; } -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} +/* "_pydevd_bundle/pydevd_cython.pyx":205 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef update_stepping_info(self): # <<<<<<<<<<<<<< + * # ELSE + * # def update_stepping_info(self): + */ -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, int __pyx_skip_dispatch) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5, __pyx_L1_error) - __pyx_v_self->pydev_step_cmd = __pyx_t_1; - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_step_cmd.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pxd":6 - * cdef public int pydev_original_step_cmd + __Pyx_RefNannySetupContext("update_stepping_info", 1); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_update_stepping_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info)) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } + + /* "_pydevd_bundle/pydevd_cython.pyx":210 + * # ENDIF + * # fmt: on + * _update_stepping_info(self) # <<<<<<<<<<<<<< + * + * def __str__(self): + */ + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython__update_stepping_info(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":205 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef update_stepping_info(self): # <<<<<<<<<<<<<< + * # ELSE + * # def update_stepping_info(self): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.update_stepping_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info = {"update_stepping_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("update_stepping_info (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("update_stepping_info", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "update_stepping_info", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8update_stepping_info(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("update_stepping_info", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_update_stepping_info(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.update_stepping_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":212 + * _update_stepping_info(self) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "State:%s Stop:%s Cmd: %s Kill:%s" % (self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11__str__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11__str__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10__str__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10__str__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__str__", 1); + + /* "_pydevd_bundle/pydevd_cython.pyx":213 + * + * def __str__(self): + * return "State:%s Stop:%s Cmd: %s Kill:%s" % (self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_notify_kill); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->pydev_step_stop); + __Pyx_GIVEREF(__pyx_v_self->pydev_step_stop); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_self->pydev_step_stop)) __PYX_ERR(0, 213, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2)) __PYX_ERR(0, 213, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":212 + * _update_stepping_info(self) + * + * def __str__(self): # <<<<<<<<<<<<<< + * return "State:%s Stop:%s Cmd: %s Kill:%s" % (self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":2 + * cdef class PyDBAdditionalThreadInfo: + * cdef public int pydev_state # <<<<<<<<<<<<<< + * cdef public object pydev_step_stop # Actually, it's a frame or None + * cdef public int pydev_original_step_cmd + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_state.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11pydev_state_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 2, __pyx_L1_error) + __pyx_v_self->pydev_state = __pyx_t_1; + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_state.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":3 + * cdef class PyDBAdditionalThreadInfo: + * cdef public int pydev_state + * cdef public object pydev_step_stop # Actually, it's a frame or None # <<<<<<<<<<<<<< + * cdef public int pydev_original_step_cmd + * cdef public int pydev_step_cmd + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->pydev_step_stop); + __pyx_r = __pyx_v_self->pydev_step_stop; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__", 1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + __Pyx_GOTREF(__pyx_v_self->pydev_step_stop); + __Pyx_DECREF(__pyx_v_self->pydev_step_stop); + __pyx_v_self->pydev_step_stop = __pyx_v_value; + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_5__del__(PyObject *__pyx_v_self); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_step_stop_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__", 1); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->pydev_step_stop); + __Pyx_DECREF(__pyx_v_self->pydev_step_stop); + __pyx_v_self->pydev_step_stop = Py_None; + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":4 + * cdef public int pydev_state + * cdef public object pydev_step_stop # Actually, it's a frame or None + * cdef public int pydev_original_step_cmd # <<<<<<<<<<<<<< + * cdef public int pydev_step_cmd + * cdef public bint pydev_notify_kill + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_original_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_original_step_cmd.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_23pydev_original_step_cmd_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_v_self->pydev_original_step_cmd = __pyx_t_1; + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_original_step_cmd.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":5 + * cdef public object pydev_step_stop # Actually, it's a frame or None + * cdef public int pydev_original_step_cmd + * cdef public int pydev_step_cmd # <<<<<<<<<<<<<< + * cdef public bint pydev_notify_kill + * cdef public object pydev_smart_step_stop # Actually, it's a frame or None + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_step_cmd.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14pydev_step_cmd_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_v_self->pydev_step_cmd = __pyx_t_1; + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_step_cmd.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":6 + * cdef public int pydev_original_step_cmd * cdef public int pydev_step_cmd * cdef public bint pydev_notify_kill # <<<<<<<<<<<<<< * cdef public object pydev_smart_step_stop # Actually, it's a frame or None @@ -3734,9 +7683,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3751,7 +7702,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_notify_kill); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3773,9 +7724,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3785,12 +7738,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_17pydev_notify_kill_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 6, __pyx_L1_error) __pyx_v_self->pydev_notify_kill = __pyx_t_1; @@ -3801,7 +7752,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_notify_kill.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -3816,9 +7766,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3829,7 +7781,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_smart_step_stop); __pyx_r = __pyx_v_self->pydev_smart_step_stop; @@ -3845,9 +7797,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3858,7 +7812,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->pydev_smart_step_stop); @@ -3874,9 +7828,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3887,7 +7843,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_21pydev_smart_step_stop_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_smart_step_stop); @@ -3911,9 +7867,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3928,7 +7886,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_django_resolve_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3950,9 +7908,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3962,12 +7922,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_26pydev_django_resolve_frame_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 8, __pyx_L1_error) __pyx_v_self->pydev_django_resolve_frame = __pyx_t_1; @@ -3978,7 +7936,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_django_resolve_frame.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -3993,9 +7950,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4006,7 +7965,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_call_from_jinja2); __pyx_r = __pyx_v_self->pydev_call_from_jinja2; @@ -4022,9 +7981,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4035,7 +7996,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->pydev_call_from_jinja2); @@ -4051,9 +8012,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4064,7 +8027,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22pydev_call_from_jinja2_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_call_from_jinja2); @@ -4088,9 +8051,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4101,7 +8066,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_call_inside_jinja2); __pyx_r = __pyx_v_self->pydev_call_inside_jinja2; @@ -4117,9 +8082,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4130,7 +8097,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->pydev_call_inside_jinja2); @@ -4146,9 +8113,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4159,7 +8128,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_call_inside_jinja2_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_call_inside_jinja2); @@ -4183,9 +8152,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4200,7 +8171,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->is_tracing); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4222,9 +8193,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4234,12 +8207,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_10is_tracing_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 11, __pyx_L1_error) __pyx_v_self->is_tracing = __pyx_t_1; @@ -4250,7 +8221,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.is_tracing.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4265,9 +8235,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4278,7 +8250,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->conditional_breakpoint_exception); __pyx_r = __pyx_v_self->conditional_breakpoint_exception; @@ -4294,9 +8266,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4311,8 +8285,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_value))) __PYX_ERR(1, 12, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4336,9 +8310,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4349,7 +8325,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_32conditional_breakpoint_exception_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->conditional_breakpoint_exception); @@ -4373,9 +8349,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4386,7 +8364,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_message); __pyx_r = __pyx_v_self->pydev_message; @@ -4402,9 +8380,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4419,8 +8399,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(1, 13, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4444,9 +8424,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4457,7 +8439,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13pydev_message_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_message); @@ -4481,9 +8463,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4498,7 +8482,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->suspend_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4520,9 +8504,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4532,12 +8518,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12suspend_type_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 14, __pyx_L1_error) __pyx_v_self->suspend_type = __pyx_t_1; @@ -4548,7 +8532,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.suspend_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4563,9 +8546,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4580,7 +8565,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_next_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4602,9 +8587,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4614,12 +8601,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_next_line_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 15, __pyx_L1_error) __pyx_v_self->pydev_next_line = __pyx_t_1; @@ -4630,7 +8615,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_next_line.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4645,9 +8629,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4658,7 +8644,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_func_name); __pyx_r = __pyx_v_self->pydev_func_name; @@ -4674,9 +8660,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4691,8 +8679,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(1, 16, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4716,9 +8704,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4729,7 +8719,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15pydev_func_name_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_func_name); @@ -4753,9 +8743,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4770,7 +8762,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->suspended_at_unhandled); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4792,9 +8784,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4804,12 +8798,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_22suspended_at_unhandled_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 17, __pyx_L1_error) __pyx_v_self->suspended_at_unhandled = __pyx_t_1; @@ -4820,7 +8812,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.suspended_at_unhandled.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4835,9 +8826,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4848,7 +8841,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->trace_suspend_type); __pyx_r = __pyx_v_self->trace_suspend_type; @@ -4864,9 +8857,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4881,8 +8876,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 18, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(1, 18, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4906,9 +8901,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4919,7 +8916,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_18trace_suspend_type_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->trace_suspend_type); @@ -4943,9 +8940,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4956,7 +8955,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); __pyx_r = __pyx_v_self->top_level_thread_tracer_no_back_frames; @@ -4972,9 +8971,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4985,7 +8986,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); @@ -5001,9 +9002,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5014,7 +9017,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_38top_level_thread_tracer_no_back_frames_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); @@ -5038,9 +9041,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5051,7 +9056,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->top_level_thread_tracer_unhandled); __pyx_r = __pyx_v_self->top_level_thread_tracer_unhandled; @@ -5067,9 +9072,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5080,7 +9087,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->top_level_thread_tracer_unhandled); @@ -5096,9 +9103,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5109,7 +9118,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_33top_level_thread_tracer_unhandled_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->top_level_thread_tracer_unhandled); @@ -5133,9 +9142,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5146,7 +9157,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->thread_tracer); __pyx_r = __pyx_v_self->thread_tracer; @@ -5162,9 +9173,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5175,7 +9188,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->thread_tracer); @@ -5191,9 +9204,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5204,7 +9219,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13thread_tracer_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->thread_tracer); @@ -5228,9 +9243,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5241,7 +9258,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->step_in_initial_location); __pyx_r = __pyx_v_self->step_in_initial_location; @@ -5257,9 +9274,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5270,7 +9289,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->step_in_initial_location); @@ -5286,9 +9305,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5299,7 +9320,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24step_in_initial_location_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->step_in_initial_location); @@ -5323,9 +9344,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5340,7 +9363,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_parent_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -5362,9 +9385,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5374,12 +9399,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_25pydev_smart_parent_offset_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 23, __pyx_L1_error) __pyx_v_self->pydev_smart_parent_offset = __pyx_t_1; @@ -5390,7 +9413,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_smart_parent_offset.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -5405,9 +9427,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5422,7 +9446,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_child_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 24, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -5444,9 +9468,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5456,12 +9482,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_24pydev_smart_child_offset_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 24, __pyx_L1_error) __pyx_v_self->pydev_smart_child_offset = __pyx_t_1; @@ -5472,7 +9496,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_smart_child_offset.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -5487,9 +9510,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5500,7 +9525,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->pydev_smart_step_into_variants); __pyx_r = __pyx_v_self->pydev_smart_step_into_variants; @@ -5516,9 +9541,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5533,8 +9560,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 25, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_value))) __PYX_ERR(1, 25, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -5558,9 +9585,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5571,7 +9600,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_30pydev_smart_step_into_variants_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->pydev_smart_step_into_variants); @@ -5589,14 +9618,17 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ * cdef public tuple pydev_smart_step_into_variants * cdef public dict target_id_to_smart_step_into_variant # <<<<<<<<<<<<<< * cdef public bint pydev_use_scoped_step_frame + * cdef public object weak_thread */ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5607,7 +9639,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->target_id_to_smart_step_into_variant); __pyx_r = __pyx_v_self->target_id_to_smart_step_into_variant; @@ -5623,9 +9655,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5640,8 +9674,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 26, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_v_value))) __PYX_ERR(1, 26, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -5665,9 +9699,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5678,7 +9714,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_36target_id_to_smart_step_into_variant_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->target_id_to_smart_step_into_variant); @@ -5695,14 +9731,18 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ * cdef public tuple pydev_smart_step_into_variants * cdef public dict target_id_to_smart_step_into_variant * cdef public bint pydev_use_scoped_step_frame # <<<<<<<<<<<<<< + * cdef public object weak_thread + * cdef public bint is_in_wait_loop */ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -5717,7 +9757,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_use_scoped_step_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -5739,9 +9779,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5751,12 +9793,10 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_27pydev_use_scoped_step_frame_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 27, __pyx_L1_error) __pyx_v_self->pydev_use_scoped_step_frame = __pyx_t_1; @@ -5767,10 +9807,193 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.pydev_use_scoped_step_frame.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":28 + * cdef public dict target_id_to_smart_step_into_variant + * cdef public bint pydev_use_scoped_step_frame + * cdef public object weak_thread # <<<<<<<<<<<<<< + * cdef public bint is_in_wait_loop + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->weak_thread); + __pyx_r = __pyx_v_self->weak_thread; + goto __pyx_L0; + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__", 1); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + __Pyx_GOTREF(__pyx_v_self->weak_thread); + __Pyx_DECREF(__pyx_v_self->weak_thread); + __pyx_v_self->weak_thread = __pyx_v_value; + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_5__del__(PyObject *__pyx_v_self); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__", 1); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->weak_thread); + __Pyx_DECREF(__pyx_v_self->weak_thread); + __pyx_v_self->weak_thread = Py_None; + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pxd":29 + * cdef public bint pydev_use_scoped_step_frame + * cdef public object weak_thread + * cdef public bint is_in_wait_loop # <<<<<<<<<<<<<< + * + * cpdef get_topmost_frame(self, thread) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_in_wait_loop); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 29, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.is_in_wait_loop.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 29, __pyx_L1_error) + __pyx_v_self->is_in_wait_loop = __pyx_t_1; + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.is_in_wait_loop.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + return __pyx_r; +} + /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< * cdef tuple state @@ -5778,19 +10001,47 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_ */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_6__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_12__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self) { PyObject *__pyx_v_state = 0; PyObject *__pyx_v__dict = 0; int __pyx_v_use_setstate; @@ -5809,113 +10060,120 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; PyObject *__pyx_t_13 = NULL; - int __pyx_t_14; + PyObject *__pyx_t_14 = NULL; int __pyx_t_15; int __pyx_t_16; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict * cdef bint use_setstate - * state = (self.conditional_breakpoint_exception, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type) # <<<<<<<<<<<<<< + * state = (self.conditional_breakpoint_exception, self.is_in_wait_loop, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type, self.weak_thread) # <<<<<<<<<<<<<< * _dict = getattr(self, '__dict__', None) * if _dict is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->is_tracing); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_in_wait_loop); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_django_resolve_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->is_tracing); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_next_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_django_resolve_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_notify_kill); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_next_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_original_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_notify_kill); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_child_offset); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_original_step_cmd); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_parent_offset); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_child_offset); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_smart_parent_offset); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_state); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_use_scoped_step_frame); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_self->pydev_step_cmd); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_self->suspend_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_v_self->pydev_use_scoped_step_frame); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_v_self->suspended_at_unhandled); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_self->suspend_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = PyTuple_New(26); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyBool_FromLong(__pyx_v_self->suspended_at_unhandled); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = PyTuple_New(28); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); __Pyx_INCREF(__pyx_v_self->conditional_breakpoint_exception); __Pyx_GIVEREF(__pyx_v_self->conditional_breakpoint_exception); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_self->conditional_breakpoint_exception); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_self->conditional_breakpoint_exception)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_call_from_jinja2); __Pyx_GIVEREF(__pyx_v_self->pydev_call_from_jinja2); - PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_self->pydev_call_from_jinja2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_v_self->pydev_call_from_jinja2)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_call_inside_jinja2); __Pyx_GIVEREF(__pyx_v_self->pydev_call_inside_jinja2); - PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_v_self->pydev_call_inside_jinja2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_13, 4, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_v_self->pydev_call_inside_jinja2)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 5, __pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_func_name); __Pyx_GIVEREF(__pyx_v_self->pydev_func_name); - PyTuple_SET_ITEM(__pyx_t_13, 5, __pyx_v_self->pydev_func_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_v_self->pydev_func_name)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_message); __Pyx_GIVEREF(__pyx_v_self->pydev_message); - PyTuple_SET_ITEM(__pyx_t_13, 6, __pyx_v_self->pydev_message); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_13, 7, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 7, __pyx_v_self->pydev_message)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_13, 8, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 8, __pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_13, 9, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 9, __pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_13, 10, __pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 10, __pyx_t_6)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_13, 11, __pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 11, __pyx_t_7)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 12, __pyx_t_8)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_smart_step_into_variants); __Pyx_GIVEREF(__pyx_v_self->pydev_smart_step_into_variants); - PyTuple_SET_ITEM(__pyx_t_13, 12, __pyx_v_self->pydev_smart_step_into_variants); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 13, __pyx_v_self->pydev_smart_step_into_variants)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_smart_step_stop); __Pyx_GIVEREF(__pyx_v_self->pydev_smart_step_stop); - PyTuple_SET_ITEM(__pyx_t_13, 13, __pyx_v_self->pydev_smart_step_stop); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_13, 14, __pyx_t_8); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 14, __pyx_v_self->pydev_smart_step_stop)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_13, 15, __pyx_t_9); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 15, __pyx_t_9)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 16, __pyx_t_10)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->pydev_step_stop); __Pyx_GIVEREF(__pyx_v_self->pydev_step_stop); - PyTuple_SET_ITEM(__pyx_t_13, 16, __pyx_v_self->pydev_step_stop); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_13, 17, __pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 17, __pyx_v_self->pydev_step_stop)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 18, __pyx_t_11)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->step_in_initial_location); __Pyx_GIVEREF(__pyx_v_self->step_in_initial_location); - PyTuple_SET_ITEM(__pyx_t_13, 18, __pyx_v_self->step_in_initial_location); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_13, 19, __pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 19, __pyx_v_self->step_in_initial_location)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_13, 20, __pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 20, __pyx_t_12)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_13); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 21, __pyx_t_13)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->target_id_to_smart_step_into_variant); __Pyx_GIVEREF(__pyx_v_self->target_id_to_smart_step_into_variant); - PyTuple_SET_ITEM(__pyx_t_13, 21, __pyx_v_self->target_id_to_smart_step_into_variant); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 22, __pyx_v_self->target_id_to_smart_step_into_variant)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->thread_tracer); __Pyx_GIVEREF(__pyx_v_self->thread_tracer); - PyTuple_SET_ITEM(__pyx_t_13, 22, __pyx_v_self->thread_tracer); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 23, __pyx_v_self->thread_tracer)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); __Pyx_GIVEREF(__pyx_v_self->top_level_thread_tracer_no_back_frames); - PyTuple_SET_ITEM(__pyx_t_13, 23, __pyx_v_self->top_level_thread_tracer_no_back_frames); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 24, __pyx_v_self->top_level_thread_tracer_no_back_frames)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->top_level_thread_tracer_unhandled); __Pyx_GIVEREF(__pyx_v_self->top_level_thread_tracer_unhandled); - PyTuple_SET_ITEM(__pyx_t_13, 24, __pyx_v_self->top_level_thread_tracer_unhandled); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 25, __pyx_v_self->top_level_thread_tracer_unhandled)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->trace_suspend_type); __Pyx_GIVEREF(__pyx_v_self->trace_suspend_type); - PyTuple_SET_ITEM(__pyx_t_13, 25, __pyx_v_self->trace_suspend_type); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 26, __pyx_v_self->trace_suspend_type)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->weak_thread); + __Pyx_GIVEREF(__pyx_v_self->weak_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 27, __pyx_v_self->weak_thread)) __PYX_ERR(2, 5, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; @@ -5928,30 +10186,30 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_13); __pyx_t_13 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_14); + __pyx_t_14 = 0; /* "(tree fragment)":6 * cdef bint use_setstate - * state = (self.conditional_breakpoint_exception, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type) + * state = (self.conditional_breakpoint_exception, self.is_in_wait_loop, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type, self.weak_thread) * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< * if _dict is not None: * state += (_dict,) */ - __pyx_t_13 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_v__dict = __pyx_t_13; - __pyx_t_13 = 0; + __pyx_t_14 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_v__dict = __pyx_t_14; + __pyx_t_14 = 0; /* "(tree fragment)":7 - * state = (self.conditional_breakpoint_exception, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type) + * state = (self.conditional_breakpoint_exception, self.is_in_wait_loop, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type, self.weak_thread) * _dict = getattr(self, '__dict__', None) * if _dict is not None: # <<<<<<<<<<<<<< * state += (_dict,) * use_setstate = True */ - __pyx_t_14 = (__pyx_v__dict != Py_None); - __pyx_t_15 = (__pyx_t_14 != 0); + __pyx_t_15 = (__pyx_v__dict != Py_None); if (__pyx_t_15) { /* "(tree fragment)":8 @@ -5961,28 +10219,28 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea * use_setstate = True * else: */ - __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v__dict); - __pyx_t_12 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_13); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_12)); - __pyx_t_12 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_13 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_13)); + __pyx_t_13 = 0; /* "(tree fragment)":9 * if _dict is not None: * state += (_dict,) * use_setstate = True # <<<<<<<<<<<<<< * else: - * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None + * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None or self.weak_thread is not None */ __pyx_v_use_setstate = 1; /* "(tree fragment)":7 - * state = (self.conditional_breakpoint_exception, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type) + * state = (self.conditional_breakpoint_exception, self.is_in_wait_loop, self.is_tracing, self.pydev_call_from_jinja2, self.pydev_call_inside_jinja2, self.pydev_django_resolve_frame, self.pydev_func_name, self.pydev_message, self.pydev_next_line, self.pydev_notify_kill, self.pydev_original_step_cmd, self.pydev_smart_child_offset, self.pydev_smart_parent_offset, self.pydev_smart_step_into_variants, self.pydev_smart_step_stop, self.pydev_state, self.pydev_step_cmd, self.pydev_step_stop, self.pydev_use_scoped_step_frame, self.step_in_initial_location, self.suspend_type, self.suspended_at_unhandled, self.target_id_to_smart_step_into_variant, self.thread_tracer, self.top_level_thread_tracer_no_back_frames, self.top_level_thread_tracer_unhandled, self.trace_suspend_type, self.weak_thread) * _dict = getattr(self, '__dict__', None) * if _dict is not None: # <<<<<<<<<<<<<< * state += (_dict,) @@ -5994,105 +10252,97 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* "(tree fragment)":11 * use_setstate = True * else: - * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None # <<<<<<<<<<<<<< + * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None or self.weak_thread is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, None), state + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, None), state */ /*else*/ { - __pyx_t_14 = (__pyx_v_self->conditional_breakpoint_exception != ((PyObject*)Py_None)); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->conditional_breakpoint_exception != ((PyObject*)Py_None)); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->pydev_call_from_jinja2 != Py_None); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->pydev_call_inside_jinja2 != Py_None); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->pydev_call_inside_jinja2 != Py_None); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->pydev_func_name != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->pydev_message != ((PyObject*)Py_None)); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->pydev_message != ((PyObject*)Py_None)); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->pydev_smart_step_into_variants != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->pydev_smart_step_stop != Py_None); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->pydev_smart_step_stop != Py_None); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->pydev_step_stop != Py_None); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->step_in_initial_location != Py_None); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->step_in_initial_location != Py_None); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->target_id_to_smart_step_into_variant != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->thread_tracer != Py_None); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->thread_tracer != Py_None); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->top_level_thread_tracer_no_back_frames != Py_None); - __pyx_t_14 = (__pyx_t_16 != 0); - if (!__pyx_t_14) { + if (!__pyx_t_16) { } else { - __pyx_t_15 = __pyx_t_14; + __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } - __pyx_t_14 = (__pyx_v_self->top_level_thread_tracer_unhandled != Py_None); - __pyx_t_16 = (__pyx_t_14 != 0); + __pyx_t_16 = (__pyx_v_self->top_level_thread_tracer_unhandled != Py_None); if (!__pyx_t_16) { } else { __pyx_t_15 = __pyx_t_16; goto __pyx_L4_bool_binop_done; } __pyx_t_16 = (__pyx_v_self->trace_suspend_type != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_16 != 0); - __pyx_t_15 = __pyx_t_14; + if (!__pyx_t_16) { + } else { + __pyx_t_15 = __pyx_t_16; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_16 = (__pyx_v_self->weak_thread != Py_None); + __pyx_t_15 = __pyx_t_16; __pyx_L4_bool_binop_done:; __pyx_v_use_setstate = __pyx_t_15; } @@ -6100,91 +10350,90 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* "(tree fragment)":12 * else: - * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None + * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None or self.weak_thread is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, None), state + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, None), state * else: */ - __pyx_t_15 = (__pyx_v_use_setstate != 0); - if (__pyx_t_15) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 - * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None + * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None or self.weak_thread is not None * if use_setstate: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, state) + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); + __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_13, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_123419394); - __Pyx_GIVEREF(__pyx_int_123419394); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_int_123419394); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_221489684); + __Pyx_GIVEREF(__pyx_int_221489684); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_int_221489684)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_13, 2, Py_None); - __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_13); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_14)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_v_state); - __pyx_t_12 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); __pyx_t_13 = 0; - __pyx_r = __pyx_t_11; - __pyx_t_11 = 0; + __pyx_t_14 = 0; + __pyx_r = __pyx_t_12; + __pyx_t_12 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: - * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None + * use_setstate = self.conditional_breakpoint_exception is not None or self.pydev_call_from_jinja2 is not None or self.pydev_call_inside_jinja2 is not None or self.pydev_func_name is not None or self.pydev_message is not None or self.pydev_smart_step_into_variants is not None or self.pydev_smart_step_stop is not None or self.pydev_step_stop is not None or self.step_in_initial_location is not None or self.target_id_to_smart_step_into_variant is not None or self.thread_tracer is not None or self.top_level_thread_tracer_no_back_frames is not None or self.top_level_thread_tracer_unhandled is not None or self.trace_suspend_type is not None or self.weak_thread is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, None), state + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, None), state + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, None), state * else: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_13, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_123419394); - __Pyx_GIVEREF(__pyx_int_123419394); - PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_int_123419394); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_221489684); + __Pyx_GIVEREF(__pyx_int_221489684); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_int_221489684)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_v_state); - __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_13); - __pyx_t_11 = 0; - __pyx_t_13 = 0; - __pyx_r = __pyx_t_12; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12)) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_14)) __PYX_ERR(2, 15, __pyx_L1_error); __pyx_t_12 = 0; + __pyx_t_14 = 0; + __pyx_r = __pyx_t_13; + __pyx_t_13 = 0; goto __pyx_L0; } @@ -6209,6 +10458,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -6221,46 +10471,129 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea /* "(tree fragment)":16 * else: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, state) + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_8__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_14__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, state) + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdditionalThreadInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0x75b3b02, state) + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) */ @@ -6278,29 +10611,22 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThrea return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":145 - * - * - * def set_additional_thread_info(thread): # <<<<<<<<<<<<<< - * try: - * additional_info = thread.additional_info +/* "_pydevd_bundle/pydevd_cython.pyx":222 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef set_additional_thread_info(thread): # <<<<<<<<<<<<<< + * # ELSE + * # def set_additional_thread_info(thread): */ -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info(PyObject *__pyx_self, PyObject *__pyx_v_thread); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info = {"set_additional_thread_info", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info, METH_O, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info(PyObject *__pyx_self, PyObject *__pyx_v_thread) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_additional_thread_info (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(__pyx_self, ((PyObject *)__pyx_v_thread)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thread) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(PyObject *__pyx_v_thread, CYTHON_UNUSED int __pyx_skip_dispatch) { PyObject *__pyx_v_additional_info = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations @@ -6309,26 +10635,30 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; + unsigned int __pyx_t_13; PyObject *__pyx_t_14 = NULL; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + int __pyx_t_20; + int __pyx_t_21; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("set_additional_thread_info", 0); + __Pyx_RefNannySetupContext("set_additional_thread_info", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":146 - * - * def set_additional_thread_info(thread): + /* "_pydevd_bundle/pydevd_cython.pyx":227 + * # ENDIF + * # fmt: on * try: # <<<<<<<<<<<<<< * additional_info = thread.additional_info * if additional_info is None: @@ -6342,19 +10672,19 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":147 - * def set_additional_thread_info(thread): + /* "_pydevd_bundle/pydevd_cython.pyx":228 + * # fmt: on * try: * additional_info = thread.additional_info # <<<<<<<<<<<<<< * if additional_info is None: * raise AttributeError() */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_v_additional_info = __pyx_t_4; __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":148 + /* "_pydevd_bundle/pydevd_cython.pyx":229 * try: * additional_info = thread.additional_info * if additional_info is None: # <<<<<<<<<<<<<< @@ -6362,23 +10692,22 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread * except: */ __pyx_t_5 = (__pyx_v_additional_info == Py_None); - __pyx_t_6 = (__pyx_t_5 != 0); - if (unlikely(__pyx_t_6)) { + if (unlikely(__pyx_t_5)) { - /* "_pydevd_bundle/pydevd_cython.pyx":149 + /* "_pydevd_bundle/pydevd_cython.pyx":230 * additional_info = thread.additional_info * if additional_info is None: * raise AttributeError() # <<<<<<<<<<<<<< * except: * with _set_additional_thread_info_lock: */ - __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_builtin_AttributeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_builtin_AttributeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 230, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_Raise(__pyx_t_4, 0, 0, 0); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 149, __pyx_L3_error) + __PYX_ERR(0, 230, __pyx_L3_error) - /* "_pydevd_bundle/pydevd_cython.pyx":148 + /* "_pydevd_bundle/pydevd_cython.pyx":229 * try: * additional_info = thread.additional_info * if additional_info is None: # <<<<<<<<<<<<<< @@ -6387,9 +10716,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread */ } - /* "_pydevd_bundle/pydevd_cython.pyx":146 - * - * def set_additional_thread_info(thread): + /* "_pydevd_bundle/pydevd_cython.pyx":227 + * # ENDIF + * # fmt: on * try: # <<<<<<<<<<<<<< * additional_info = thread.additional_info * if additional_info is None: @@ -6402,7 +10731,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread __pyx_L3_error:; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":150 + /* "_pydevd_bundle/pydevd_cython.pyx":231 * if additional_info is None: * raise AttributeError() * except: # <<<<<<<<<<<<<< @@ -6411,12 +10740,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread */ /*except:*/ { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 150, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 231, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); - /* "_pydevd_bundle/pydevd_cython.pyx":151 + /* "_pydevd_bundle/pydevd_cython.pyx":232 * raise AttributeError() * except: * with _set_additional_thread_info_lock: # <<<<<<<<<<<<<< @@ -6424,29 +10753,36 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread * # conditions. */ /*with:*/ { - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_set_additional_thread_info_lock); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 151, __pyx_L5_except_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_set_additional_thread_info_lock); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 232, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 232, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 151, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_enter); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 151, __pyx_L12_error) - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_13); + __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_enter); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 232, __pyx_L12_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_13 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_13 = 1; } } - __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 151, __pyx_L12_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 232, __pyx_L12_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /*try:*/ { { __Pyx_PyThreadState_declare @@ -6457,60 +10793,222 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread __Pyx_XGOTREF(__pyx_t_16); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":154 + /* "_pydevd_bundle/pydevd_cython.pyx":235 * # If it's not there, set it within a lock to avoid any racing * # conditions. - * additional_info = getattr(thread, 'additional_info', None) # <<<<<<<<<<<<<< - * if additional_info is None: - * additional_info = PyDBAdditionalThreadInfo() + * try: # <<<<<<<<<<<<<< + * additional_info = thread.additional_info + * except: */ - __pyx_t_9 = __Pyx_GetAttr3(__pyx_v_thread, __pyx_n_s_additional_info, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 154, __pyx_L18_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_XDECREF_SET(__pyx_v_additional_info, __pyx_t_9); - __pyx_t_9 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":155 + /* "_pydevd_bundle/pydevd_cython.pyx":236 * # conditions. - * additional_info = getattr(thread, 'additional_info', None) - * if additional_info is None: # <<<<<<<<<<<<<< - * additional_info = PyDBAdditionalThreadInfo() - * thread.additional_info = additional_info + * try: + * additional_info = thread.additional_info # <<<<<<<<<<<<<< + * except: + * additional_info = None */ - __pyx_t_6 = (__pyx_v_additional_info == Py_None); - __pyx_t_5 = (__pyx_t_6 != 0); - if (__pyx_t_5) { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 236, __pyx_L26_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_additional_info, __pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":156 - * additional_info = getattr(thread, 'additional_info', None) - * if additional_info is None: - * additional_info = PyDBAdditionalThreadInfo() # <<<<<<<<<<<<<< - * thread.additional_info = additional_info + /* "_pydevd_bundle/pydevd_cython.pyx":235 + * # If it's not there, set it within a lock to avoid any racing + * # conditions. + * try: # <<<<<<<<<<<<<< + * additional_info = thread.additional_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + goto __pyx_L33_try_end; + __pyx_L26_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":237 + * try: + * additional_info = thread.additional_info + * except: # <<<<<<<<<<<<<< + * additional_info = None * */ - __pyx_t_9 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 156, __pyx_L18_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF_SET(__pyx_v_additional_info, __pyx_t_9); - __pyx_t_9 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(0, 237, __pyx_L28_except_error) + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + + /* "_pydevd_bundle/pydevd_cython.pyx":238 + * additional_info = thread.additional_info + * except: + * additional_info = None # <<<<<<<<<<<<<< + * + * if additional_info is None: + */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_additional_info, Py_None); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L27_exception_handled; + } - /* "_pydevd_bundle/pydevd_cython.pyx":155 + /* "_pydevd_bundle/pydevd_cython.pyx":235 + * # If it's not there, set it within a lock to avoid any racing * # conditions. - * additional_info = getattr(thread, 'additional_info', None) - * if additional_info is None: # <<<<<<<<<<<<<< - * additional_info = PyDBAdditionalThreadInfo() - * thread.additional_info = additional_info + * try: # <<<<<<<<<<<<<< + * additional_info = thread.additional_info + * except: */ + __pyx_L28_except_error:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + goto __pyx_L18_error; + __pyx_L27_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + __pyx_L33_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":157 - * if additional_info is None: - * additional_info = PyDBAdditionalThreadInfo() - * thread.additional_info = additional_info # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":240 + * additional_info = None + * + * if additional_info is None: # <<<<<<<<<<<<<< + * # Note: don't call PyDBAdditionalThreadInfo constructor at this + * # point as it can piggy-back into the debugger which could + */ + __pyx_t_5 = (__pyx_v_additional_info == Py_None); + if (__pyx_t_5) { + + /* "_pydevd_bundle/pydevd_cython.pyx":245 + * # get here again, rather get the global ref which was pre-created + * # and add a new entry only after we set thread.additional_info. + * additional_info = _next_additional_info[0] # <<<<<<<<<<<<<< + * thread.additional_info = additional_info + * additional_info.weak_thread = weakref.ref(thread) + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_next_additional_info); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 245, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_11, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 245, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF_SET(__pyx_v_additional_info, __pyx_t_10); + __pyx_t_10 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":246 + * # and add a new entry only after we set thread.additional_info. + * additional_info = _next_additional_info[0] + * thread.additional_info = additional_info # <<<<<<<<<<<<<< + * additional_info.weak_thread = weakref.ref(thread) + * add_additional_info(additional_info) + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info, __pyx_v_additional_info) < 0) __PYX_ERR(0, 246, __pyx_L18_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":247 + * additional_info = _next_additional_info[0] + * thread.additional_info = additional_info + * additional_info.weak_thread = weakref.ref(thread) # <<<<<<<<<<<<<< + * add_additional_info(additional_info) + * del _next_additional_info[:] + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_weakref); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 247, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ref); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 247, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __pyx_t_11 = NULL; + __pyx_t_13 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_11)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_13 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_thread}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 247, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_weak_thread, __pyx_t_10) < 0) __PYX_ERR(0, 247, __pyx_L18_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":248 + * thread.additional_info = additional_info + * additional_info.weak_thread = weakref.ref(thread) + * add_additional_info(additional_info) # <<<<<<<<<<<<<< + * del _next_additional_info[:] + * _next_additional_info.append(PyDBAdditionalThreadInfo()) + */ + if (!(likely(((__pyx_v_additional_info) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_additional_info, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 248, __pyx_L18_error) + __pyx_t_10 = __pyx_f_14_pydevd_bundle_13pydevd_cython_add_additional_info(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_additional_info), 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 248, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":249 + * additional_info.weak_thread = weakref.ref(thread) + * add_additional_info(additional_info) + * del _next_additional_info[:] # <<<<<<<<<<<<<< + * _next_additional_info.append(PyDBAdditionalThreadInfo()) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_next_additional_info); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 249, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_10); + if (__Pyx_PyObject_DelSlice(__pyx_t_10, 0, 0, NULL, NULL, &__pyx_slice__2, 0, 0, 1) < 0) __PYX_ERR(0, 249, __pyx_L18_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":250 + * add_additional_info(additional_info) + * del _next_additional_info[:] + * _next_additional_info.append(PyDBAdditionalThreadInfo()) # <<<<<<<<<<<<<< * * return additional_info */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info, __pyx_v_additional_info) < 0) __PYX_ERR(0, 157, __pyx_L18_error) + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_next_additional_info); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 250, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_8 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 250, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_20 = __Pyx_PyObject_Append(__pyx_t_10, __pyx_t_8); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 250, __pyx_L18_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":240 + * additional_info = None + * + * if additional_info is None: # <<<<<<<<<<<<<< + * # Note: don't call PyDBAdditionalThreadInfo constructor at this + * # point as it can piggy-back into the debugger which could + */ + } - /* "_pydevd_bundle/pydevd_cython.pyx":151 + /* "_pydevd_bundle/pydevd_cython.pyx":232 * raise AttributeError() * except: * with _set_additional_thread_info_lock: # <<<<<<<<<<<<<< @@ -6523,38 +11021,38 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; goto __pyx_L25_try_end; __pyx_L18_error:; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; /*except:*/ { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 151, __pyx_L20_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_11); + if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(0, 232, __pyx_L20_except_error) + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_12 = PyTuple_Pack(3, __pyx_t_8, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 232, __pyx_L20_except_error) __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = PyTuple_Pack(3, __pyx_t_9, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 151, __pyx_L20_except_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 151, __pyx_L20_except_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_5 < 0) __PYX_ERR(0, 151, __pyx_L20_except_error) - __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_9); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_11, __pyx_t_12); - __pyx_t_9 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; - __PYX_ERR(0, 151, __pyx_L20_except_error) + __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, NULL); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 232, __pyx_L20_except_error) + __Pyx_GOTREF(__pyx_t_19); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_19); + __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; + if (__pyx_t_5 < 0) __PYX_ERR(0, 232, __pyx_L20_except_error) + __pyx_t_21 = (!__pyx_t_5); + if (unlikely(__pyx_t_21)) { + __Pyx_GIVEREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestoreWithState(__pyx_t_8, __pyx_t_10, __pyx_t_11); + __pyx_t_8 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; + __PYX_ERR(0, 232, __pyx_L20_except_error) } - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; goto __pyx_L19_exception_handled; } __pyx_L20_except_error:; @@ -6573,10 +11071,10 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread } /*finally:*/ { /*normal exit:*/{ - if (__pyx_t_10) { - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__2, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 151, __pyx_L5_except_error) + if (__pyx_t_9) { + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__3, NULL); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 232, __pyx_L5_except_error) __Pyx_GOTREF(__pyx_t_16); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } @@ -6584,26 +11082,26 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread } __pyx_L17:; } - goto __pyx_L30; + goto __pyx_L40; __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L5_except_error; - __pyx_L30:; + __pyx_L40:; } __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L4_exception_handled; } - __pyx_L5_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":146 - * - * def set_additional_thread_info(thread): + /* "_pydevd_bundle/pydevd_cython.pyx":227 + * # ENDIF + * # fmt: on * try: # <<<<<<<<<<<<<< * additional_info = thread.additional_info * if additional_info is None: */ + __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -6617,38 +11115,38 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread __pyx_L8_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":159 - * thread.additional_info = additional_info + /* "_pydevd_bundle/pydevd_cython.pyx":252 + * _next_additional_info.append(PyDBAdditionalThreadInfo()) * * return additional_info # <<<<<<<<<<<<<< - * import linecache - * import os.path + * + * */ __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_additional_info)) { __Pyx_RaiseUnboundLocalError("additional_info"); __PYX_ERR(0, 159, __pyx_L1_error) } + if (unlikely(!__pyx_v_additional_info)) { __Pyx_RaiseUnboundLocalError("additional_info"); __PYX_ERR(0, 252, __pyx_L1_error) } __Pyx_INCREF(__pyx_v_additional_info); __pyx_r = __pyx_v_additional_info; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":145 - * - * - * def set_additional_thread_info(thread): # <<<<<<<<<<<<<< - * try: - * additional_info = thread.additional_info + /* "_pydevd_bundle/pydevd_cython.pyx":222 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef set_additional_thread_info(thread): # <<<<<<<<<<<<<< + * # ELSE + * # def set_additional_thread_info(thread): */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_additional_info); __Pyx_XGIVEREF(__pyx_r); @@ -6656,684 +11154,973 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":177 - * except ImportError: - * - * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< - * return None - * - */ - /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_3get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_3get_smart_step_into_variant_from_frame_offset = {"get_smart_step_into_variant_from_frame_offset", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_3get_smart_step_into_variant_from_frame_offset, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_3get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - CYTHON_UNUSED PyObject *__pyx_v_args = 0; - CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info = {"set_additional_thread_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_thread = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_smart_step_into_variant_from_frame_offset", 1))) return NULL; - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_2get_smart_step_into_variant_from_frame_offset(__pyx_self, __pyx_v_args, __pyx_v_kwargs); + __Pyx_RefNannySetupContext("set_additional_thread_info (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 222, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "set_additional_thread_info") < 0)) __PYX_ERR(0, 222, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_thread = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_additional_thread_info", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 222, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(__pyx_self, __pyx_v_thread); /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_2get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_thread) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":178 - * - * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): - * return None # <<<<<<<<<<<<<< - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - */ + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("set_additional_thread_info", 1); __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(__pyx_v_thread, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":177 - * except ImportError: - * - * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< - * return None - * - */ - /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.set_additional_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":213 - * +/* "_pydevd_bundle/pydevd_cython.pyx":271 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * cdef _update_stepping_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< * # ELSE - * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): + * # def _update_stepping_info(info): */ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_is_unhandled_exception(PyObject *__pyx_v_container_obj, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, int __pyx_v_last_raise_line, PyObject *__pyx_v_raise_lines) { - PyObject *__pyx_v_try_except_infos = NULL; - PyObject *__pyx_v_valid_try_except_infos = NULL; - PyObject *__pyx_v_try_except_info = NULL; +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython__update_stepping_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info) { + PyObject *__pyx_v_new_all_infos = NULL; + PyObject *__pyx_v_new_stepping = NULL; + PyObject *__pyx_v_py_db = NULL; + PyObject *__pyx_v_thread = NULL; + PyObject *__pyx_v_thread_id = NULL; + CYTHON_UNUSED PyObject *__pyx_v__queue = NULL; + PyObject *__pyx_v_event = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_5; PyObject *__pyx_t_6 = NULL; - Py_ssize_t __pyx_t_7; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; int __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + int __pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + int __pyx_t_17; + int __pyx_t_18; + PyObject *(*__pyx_t_19)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_unhandled_exception", 0); + __Pyx_RefNannySetupContext("_update_stepping_info", 0); + __Pyx_INCREF((PyObject *)__pyx_v_info); - /* "_pydevd_bundle/pydevd_cython.pyx":217 - * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): - * # ENDIF - * if frame.f_lineno in raise_lines: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":280 + * global _all_infos * + * with _update_infos_lock: # <<<<<<<<<<<<<< + * # Removes entries that are no longer valid. + * new_all_infos = set() */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(__pyx_v_raise_lines == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 217, __pyx_L1_error) - } - __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_t_1, __pyx_v_raise_lines, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 217, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + /*with:*/ { + __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 280, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 280, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":218 - * # ENDIF - * if frame.f_lineno in raise_lines: - * return True # <<<<<<<<<<<<<< - * - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":282 + * with _update_infos_lock: + * # Removes entries that are no longer valid. + * new_all_infos = set() # <<<<<<<<<<<<<< + * for info in _all_infos: + * if info._get_related_thread() is not None: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; + __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 282, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_new_all_infos = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":217 - * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): - * # ENDIF - * if frame.f_lineno in raise_lines: # <<<<<<<<<<<<<< - * return True - * + /* "_pydevd_bundle/pydevd_cython.pyx":283 + * # Removes entries that are no longer valid. + * new_all_infos = set() + * for info in _all_infos: # <<<<<<<<<<<<<< + * if info._get_related_thread() is not None: + * new_all_infos.add(info) */ - } + __pyx_t_9 = 0; + __pyx_t_3 = __Pyx_set_iterator(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, 1, (&__pyx_t_10), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 283, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_10, &__pyx_t_9, &__pyx_t_3, __pyx_t_11); + if (unlikely(__pyx_t_12 == 0)) break; + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 283, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 283, __pyx_L7_error) + __Pyx_DECREF_SET(__pyx_v_info, ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":221 - * - * else: - * try_except_infos = container_obj.try_except_infos # <<<<<<<<<<<<<< - * if try_except_infos is None: - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) + /* "_pydevd_bundle/pydevd_cython.pyx":284 + * new_all_infos = set() + * for info in _all_infos: + * if info._get_related_thread() is not None: # <<<<<<<<<<<<<< + * new_all_infos.add(info) + * _all_infos = new_all_infos */ - /*else*/ { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_container_obj, __pyx_n_s_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_try_except_infos = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_3 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_info->__pyx_vtab)->_get_related_thread(__pyx_v_info, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 284, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_13 = (__pyx_t_3 != Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":222 - * else: - * try_except_infos = container_obj.try_except_infos - * if try_except_infos is None: # <<<<<<<<<<<<<< - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) + /* "_pydevd_bundle/pydevd_cython.pyx":285 + * for info in _all_infos: + * if info._get_related_thread() is not None: + * new_all_infos.add(info) # <<<<<<<<<<<<<< + * _all_infos = new_all_infos * */ - __pyx_t_3 = (__pyx_v_try_except_infos == Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { + __pyx_t_14 = PySet_Add(__pyx_v_new_all_infos, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 285, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":223 - * try_except_infos = container_obj.try_except_infos - * if try_except_infos is None: - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) # <<<<<<<<<<<<<< - * - * if not try_except_infos: + /* "_pydevd_bundle/pydevd_cython.pyx":284 + * new_all_infos = set() + * for info in _all_infos: + * if info._get_related_thread() is not None: # <<<<<<<<<<<<<< + * new_all_infos.add(info) + * _all_infos = new_all_infos */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_collect_try_except_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_container_obj, __pyx_n_s_try_except_infos, __pyx_t_1) < 0) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_INCREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_try_except_infos, __pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":222 - * else: - * try_except_infos = container_obj.try_except_infos - * if try_except_infos is None: # <<<<<<<<<<<<<< - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) + /* "_pydevd_bundle/pydevd_cython.pyx":286 + * if info._get_related_thread() is not None: + * new_all_infos.add(info) + * _all_infos = new_all_infos # <<<<<<<<<<<<<< * + * new_stepping = set() */ - } + __Pyx_INCREF(__pyx_v_new_all_infos); + __Pyx_XGOTREF(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos); + __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, __pyx_v_new_all_infos); + __Pyx_GIVEREF(__pyx_v_new_all_infos); - /* "_pydevd_bundle/pydevd_cython.pyx":225 - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) + /* "_pydevd_bundle/pydevd_cython.pyx":288 + * _all_infos = new_all_infos * - * if not try_except_infos: # <<<<<<<<<<<<<< - * # Consider the last exception as unhandled because there's no try..except in it. - * return True - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_try_except_infos); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 225, __pyx_L1_error) - __pyx_t_3 = ((!__pyx_t_2) != 0); - if (__pyx_t_3) { - - /* "_pydevd_bundle/pydevd_cython.pyx":227 - * if not try_except_infos: - * # Consider the last exception as unhandled because there's no try..except in it. - * return True # <<<<<<<<<<<<<< - * else: - * # Now, consider only the try..except for the raise + * new_stepping = set() # <<<<<<<<<<<<<< + * for info in _all_infos: + * if info._is_stepping(): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; + __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_new_stepping = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":225 - * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) + /* "_pydevd_bundle/pydevd_cython.pyx":289 * - * if not try_except_infos: # <<<<<<<<<<<<<< - * # Consider the last exception as unhandled because there's no try..except in it. - * return True + * new_stepping = set() + * for info in _all_infos: # <<<<<<<<<<<<<< + * if info._is_stepping(): + * new_stepping.add(info) */ - } + __pyx_t_10 = 0; + __pyx_t_3 = __Pyx_set_iterator(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, 1, (&__pyx_t_9), (&__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_2); + __pyx_t_2 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_12 = __Pyx_set_iter_next(__pyx_t_2, __pyx_t_9, &__pyx_t_10, &__pyx_t_3, __pyx_t_11); + if (unlikely(__pyx_t_12 == 0)) break; + if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_DECREF_SET(__pyx_v_info, ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":230 - * else: - * # Now, consider only the try..except for the raise - * valid_try_except_infos = [] # <<<<<<<<<<<<<< - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_try_block(last_raise_line): + /* "_pydevd_bundle/pydevd_cython.pyx":290 + * new_stepping = set() + * for info in _all_infos: + * if info._is_stepping(): # <<<<<<<<<<<<<< + * new_stepping.add(info) + * _infos_stepping = new_stepping */ - /*else*/ { - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_valid_try_except_infos = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_13 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_info->__pyx_vtab)->_is_stepping(__pyx_v_info, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 290, __pyx_L7_error) + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":231 - * # Now, consider only the try..except for the raise - * valid_try_except_infos = [] - * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< - * if try_except_info.is_line_in_try_block(last_raise_line): - * valid_try_except_infos.append(try_except_info) + /* "_pydevd_bundle/pydevd_cython.pyx":291 + * for info in _all_infos: + * if info._is_stepping(): + * new_stepping.add(info) # <<<<<<<<<<<<<< + * _infos_stepping = new_stepping + * */ - if (likely(PyList_CheckExact(__pyx_v_try_except_infos)) || PyTuple_CheckExact(__pyx_v_try_except_infos)) { - __pyx_t_1 = __pyx_v_try_except_infos; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 231, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_8)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 231, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 231, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } - } else { - __pyx_t_4 = __pyx_t_8(__pyx_t_1); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 231, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_try_except_info, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_14 = PySet_Add(__pyx_v_new_stepping, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 291, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":232 - * valid_try_except_infos = [] - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_try_block(last_raise_line): # <<<<<<<<<<<<<< - * valid_try_except_infos.append(try_except_info) - * + /* "_pydevd_bundle/pydevd_cython.pyx":290 + * new_stepping = set() + * for info in _all_infos: + * if info._is_stepping(): # <<<<<<<<<<<<<< + * new_stepping.add(info) + * _infos_stepping = new_stepping */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_is_line_in_try_block); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_last_raise_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); + } } - } - __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_3) { + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":233 - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_try_block(last_raise_line): - * valid_try_except_infos.append(try_except_info) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":292 + * if info._is_stepping(): + * new_stepping.add(info) + * _infos_stepping = new_stepping # <<<<<<<<<<<<<< * - * if not valid_try_except_infos: + * py_db = get_global_debugger() */ - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_valid_try_except_infos, __pyx_v_try_except_info); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 233, __pyx_L1_error) + __Pyx_INCREF(__pyx_v_new_stepping); + __Pyx_XGOTREF(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping); + __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping, __pyx_v_new_stepping); + __Pyx_GIVEREF(__pyx_v_new_stepping); - /* "_pydevd_bundle/pydevd_cython.pyx":232 - * valid_try_except_infos = [] - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_try_block(last_raise_line): # <<<<<<<<<<<<<< - * valid_try_except_infos.append(try_except_info) + /* "_pydevd_bundle/pydevd_cython.pyx":280 + * global _all_infos * + * with _update_infos_lock: # <<<<<<<<<<<<<< + * # Removes entries that are no longer valid. + * new_all_infos = set() */ } - - /* "_pydevd_bundle/pydevd_cython.pyx":231 - * # Now, consider only the try..except for the raise - * valid_try_except_infos = [] - * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< - * if try_except_info.is_line_in_try_block(last_raise_line): - * valid_try_except_infos.append(try_except_info) - */ + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._update_stepping_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 280, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_15 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 280, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 280, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_16); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + if (__pyx_t_13 < 0) __PYX_ERR(0, 280, __pyx_L9_except_error) + __pyx_t_17 = (!__pyx_t_13); + if (unlikely(__pyx_t_17)) { + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4); + __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; + __PYX_ERR(0, 280, __pyx_L9_except_error) + } + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_exception_handled; + } + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __pyx_L12_try_end:; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_1) { + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__3, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 280, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + goto __pyx_L6; + } + __pyx_L6:; + } + goto __pyx_L22; + __pyx_L3_error:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L1_error; + __pyx_L22:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":235 - * valid_try_except_infos.append(try_except_info) - * - * if not valid_try_except_infos: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":294 + * _infos_stepping = new_stepping * + * py_db = get_global_debugger() # <<<<<<<<<<<<<< + * if py_db is not None and not py_db.pydb_disposed: + * thread = info.weak_thread() */ - __pyx_t_3 = (PyList_GET_SIZE(__pyx_v_valid_try_except_infos) != 0); - __pyx_t_2 = ((!__pyx_t_3) != 0); - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_global_debugger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":236 - * - * if not valid_try_except_infos: - * return True # <<<<<<<<<<<<<< - * - * else: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - - /* "_pydevd_bundle/pydevd_cython.pyx":235 - * valid_try_except_infos.append(try_except_info) - * - * if not valid_try_except_infos: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":295 * + * py_db = get_global_debugger() + * if py_db is not None and not py_db.pydb_disposed: # <<<<<<<<<<<<<< + * thread = info.weak_thread() + * if thread is not None: */ + __pyx_t_13 = (__pyx_v_py_db != Py_None); + if (__pyx_t_13) { + } else { + __pyx_t_17 = __pyx_t_13; + goto __pyx_L24_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 295, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_18 = (!__pyx_t_13); + __pyx_t_17 = __pyx_t_18; + __pyx_L24_bool_binop_done:; + if (__pyx_t_17) { + + /* "_pydevd_bundle/pydevd_cython.pyx":296 + * py_db = get_global_debugger() + * if py_db is not None and not py_db.pydb_disposed: + * thread = info.weak_thread() # <<<<<<<<<<<<<< + * if thread is not None: + * thread_id = get_thread_id(thread) + */ + __Pyx_INCREF(__pyx_v_info->weak_thread); + __pyx_t_3 = __pyx_v_info->weak_thread; __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_thread = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":243 - * # where one try..except is inside the other with only a raise - * # and it's gotten in the except line. - * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< - * if try_except_info.is_line_in_except_block(frame.f_lineno): - * if ( - */ - /*else*/ { - if (likely(PyList_CheckExact(__pyx_v_try_except_infos)) || PyTuple_CheckExact(__pyx_v_try_except_infos)) { - __pyx_t_1 = __pyx_v_try_except_infos; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 243, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_8)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 243, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 243, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 243, __pyx_L1_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 243, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } - } else { - __pyx_t_4 = __pyx_t_8(__pyx_t_1); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 243, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_try_except_info, __pyx_t_4); - __pyx_t_4 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":244 - * # and it's gotten in the except line. - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_except_block(frame.f_lineno): # <<<<<<<<<<<<<< - * if ( - * frame.f_lineno == try_except_info.except_line or - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_is_line_in_except_block); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - - /* "_pydevd_bundle/pydevd_cython.pyx":246 - * if try_except_info.is_line_in_except_block(frame.f_lineno): - * if ( - * frame.f_lineno == try_except_info.except_line or # <<<<<<<<<<<<<< - * frame.f_lineno in try_except_info.raise_lines_in_except - * ): - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_except_line); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L14_bool_binop_done; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":247 - * if ( - * frame.f_lineno == try_except_info.except_line or - * frame.f_lineno in try_except_info.raise_lines_in_except # <<<<<<<<<<<<<< - * ): - * # In a raise inside a try..except block or some except which doesn't + /* "_pydevd_bundle/pydevd_cython.pyx":297 + * if py_db is not None and not py_db.pydb_disposed: + * thread = info.weak_thread() + * if thread is not None: # <<<<<<<<<<<<<< + * thread_id = get_thread_id(thread) + * _queue, event = py_db.get_internal_queue_and_event(thread_id) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_raise_lines_in_except); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_t_6, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 247, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_11 = (__pyx_t_3 != 0); - __pyx_t_2 = __pyx_t_11; - __pyx_L14_bool_binop_done:; + __pyx_t_17 = (__pyx_v_thread != Py_None); + if (__pyx_t_17) { - /* "_pydevd_bundle/pydevd_cython.pyx":245 - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_except_block(frame.f_lineno): - * if ( # <<<<<<<<<<<<<< - * frame.f_lineno == try_except_info.except_line or - * frame.f_lineno in try_except_info.raise_lines_in_except + /* "_pydevd_bundle/pydevd_cython.pyx":298 + * thread = info.weak_thread() + * if thread is not None: + * thread_id = get_thread_id(thread) # <<<<<<<<<<<<<< + * _queue, event = py_db.get_internal_queue_and_event(thread_id) + * event.set() */ - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_thread_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_thread}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_thread_id = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":251 - * # In a raise inside a try..except block or some except which doesn't - * # match the raised exception. - * return True # <<<<<<<<<<<<<< - * return False + /* "_pydevd_bundle/pydevd_cython.pyx":299 + * if thread is not None: + * thread_id = get_thread_id(thread) + * _queue, event = py_db.get_internal_queue_and_event(thread_id) # <<<<<<<<<<<<<< + * event.set() * */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - - /* "_pydevd_bundle/pydevd_cython.pyx":245 - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_except_block(frame.f_lineno): - * if ( # <<<<<<<<<<<<<< - * frame.f_lineno == try_except_info.except_line or - * frame.f_lineno in try_except_info.raise_lines_in_except - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":244 - * # and it's gotten in the except line. - * for try_except_info in try_except_infos: - * if try_except_info.is_line_in_except_block(frame.f_lineno): # <<<<<<<<<<<<<< - * if ( - * frame.f_lineno == try_except_info.except_line or - */ - } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_internal_queue_and_event); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_thread_id}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) { + PyObject* sequence = __pyx_t_4; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 299, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_15 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_15); + index = 0; __pyx_t_3 = __pyx_t_19(__pyx_t_15); if (unlikely(!__pyx_t_3)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_2 = __pyx_t_19(__pyx_t_15); if (unlikely(!__pyx_t_2)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_15), 2) < 0) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + goto __pyx_L28_unpacking_done; + __pyx_L27_unpacking_failed:; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_L28_unpacking_done:; + } + __pyx_v__queue = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_event = __pyx_t_2; + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":243 - * # where one try..except is inside the other with only a raise - * # and it's gotten in the except line. - * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< - * if try_except_info.is_line_in_except_block(frame.f_lineno): - * if ( + /* "_pydevd_bundle/pydevd_cython.pyx":300 + * thread_id = get_thread_id(thread) + * _queue, event = py_db.get_internal_queue_and_event(thread_id) + * event.set() # <<<<<<<<<<<<<< + * + * # fmt: off */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_event, __pyx_n_s_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":297 + * if py_db is not None and not py_db.pydb_disposed: + * thread = info.weak_thread() + * if thread is not None: # <<<<<<<<<<<<<< + * thread_id = get_thread_id(thread) + * _queue, event = py_db.get_internal_queue_and_event(thread_id) + */ } - } - /* "_pydevd_bundle/pydevd_cython.pyx":252 - * # match the raised exception. - * return True - * return False # <<<<<<<<<<<<<< - * + /* "_pydevd_bundle/pydevd_cython.pyx":295 * + * py_db = get_global_debugger() + * if py_db is not None and not py_db.pydb_disposed: # <<<<<<<<<<<<<< + * thread = info.weak_thread() + * if thread is not None: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":213 - * + /* "_pydevd_bundle/pydevd_cython.pyx":271 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * cdef _update_stepping_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< * # ELSE - * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): + * # def _update_stepping_info(info): */ /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.is_unhandled_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._update_stepping_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_try_except_infos); - __Pyx_XDECREF(__pyx_v_valid_try_except_infos); - __Pyx_XDECREF(__pyx_v_try_except_info); + __Pyx_XDECREF(__pyx_v_new_all_infos); + __Pyx_XDECREF(__pyx_v_new_stepping); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_thread); + __Pyx_XDECREF(__pyx_v_thread_id); + __Pyx_XDECREF(__pyx_v__queue); + __Pyx_XDECREF(__pyx_v_event); + __Pyx_XDECREF((PyObject *)__pyx_v_info); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":258 - * cdef class _TryExceptContainerObj: - * cdef public list try_except_infos; - * def __init__(self): # <<<<<<<<<<<<<< - * self.try_except_infos = None +/* "_pydevd_bundle/pydevd_cython.pyx":304 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef add_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< * # ELSE + * # def add_additional_info(info): */ -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_3add_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_add_additional_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, CYTHON_UNUSED int __pyx_skip_dispatch) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("add_additional_info", 1); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":309 + * # ENDIF + * # fmt: on + * with _update_infos_lock: # <<<<<<<<<<<<<< + * _all_infos.add(info) + * if info._is_stepping(): + */ + /*with:*/ { + __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + /* "_pydevd_bundle/pydevd_cython.pyx":310 + * # fmt: on + * with _update_infos_lock: + * _all_infos.add(info) # <<<<<<<<<<<<<< + * if info._is_stepping(): + * _infos_stepping.add(info) + */ + if (unlikely(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add"); + __PYX_ERR(0, 310, __pyx_L7_error) + } + __pyx_t_9 = PySet_Add(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 310, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":259 - * cdef public list try_except_infos; - * def __init__(self): - * self.try_except_infos = None # <<<<<<<<<<<<<< - * # ELSE - * # class _TryExceptContainerObj(object): + /* "_pydevd_bundle/pydevd_cython.pyx":311 + * with _update_infos_lock: + * _all_infos.add(info) + * if info._is_stepping(): # <<<<<<<<<<<<<< + * _infos_stepping.add(info) + * */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->try_except_infos); - __Pyx_DECREF(__pyx_v_self->try_except_infos); - __pyx_v_self->try_except_infos = ((PyObject*)Py_None); + __pyx_t_10 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_info->__pyx_vtab)->_is_stepping(__pyx_v_info, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 311, __pyx_L7_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":258 - * cdef class _TryExceptContainerObj: - * cdef public list try_except_infos; - * def __init__(self): # <<<<<<<<<<<<<< - * self.try_except_infos = None - * # ELSE + /* "_pydevd_bundle/pydevd_cython.pyx":312 + * _all_infos.add(info) + * if info._is_stepping(): + * _infos_stepping.add(info) # <<<<<<<<<<<<<< + * + * # fmt: off */ + if (unlikely(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add"); + __PYX_ERR(0, 312, __pyx_L7_error) + } + __pyx_t_9 = PySet_Add(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 312, __pyx_L7_error) - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":311 + * with _update_infos_lock: + * _all_infos.add(info) + * if info._is_stepping(): # <<<<<<<<<<<<<< + * _infos_stepping.add(info) + * + */ + } -/* "_pydevd_bundle/pydevd_cython.pyx":257 - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef class _TryExceptContainerObj: - * cdef public list try_except_infos; # <<<<<<<<<<<<<< - * def __init__(self): - * self.try_except_infos = None + /* "_pydevd_bundle/pydevd_cython.pyx":309 + * # ENDIF + * # fmt: on + * with _update_infos_lock: # <<<<<<<<<<<<<< + * _all_infos.add(info) + * if info._is_stepping(): */ + } + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.add_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 309, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_11 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 309, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 309, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_12); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (__pyx_t_10 < 0) __PYX_ERR(0, 309, __pyx_L9_except_error) + __pyx_t_13 = (!__pyx_t_10); + if (unlikely(__pyx_t_13)) { + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4); + __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; + __PYX_ERR(0, 309, __pyx_L9_except_error) + } + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_exception_handled; + } + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __pyx_L12_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_1) { + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__3, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + goto __pyx_L6; + } + __pyx_L6:; + } + goto __pyx_L17; + __pyx_L3_error:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L1_error; + __pyx_L17:; + } -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); + /* "_pydevd_bundle/pydevd_cython.pyx":304 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef add_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def add_additional_info(info): + */ /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->try_except_infos); - __pyx_r = __pyx_v_self->try_except_infos; + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - - /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.add_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); @@ -7341,570 +12128,544 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainer } /* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_3add_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_3add_additional_info = {"add_additional_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_3add_additional_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_3add_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + __Pyx_RefNannySetupContext("add_additional_info (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 304, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "add_additional_info") < 0)) __PYX_ERR(0, 304, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)values[0]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("add_additional_info", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 304, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.add_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, 1, "info", 0))) __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_2add_additional_info(__pyx_self, __pyx_v_info); /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v_value) { - int __pyx_r; +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_2add_additional_info(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 257, __pyx_L1_error) - __pyx_t_1 = __pyx_v_value; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->try_except_infos); - __Pyx_DECREF(__pyx_v_self->try_except_infos); - __pyx_v_self->try_except_infos = ((PyObject*)__pyx_t_1); + __Pyx_RefNannySetupContext("add_additional_info", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_add_additional_info(__pyx_v_info, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; __pyx_t_1 = 0; + goto __pyx_L0; /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.try_except_infos.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.add_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_5__del__(PyObject *__pyx_v_self); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_5__del__(PyObject *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} +/* "_pydevd_bundle/pydevd_cython.pyx":316 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef remove_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def remove_additional_info(info): + */ -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->try_except_infos); - __Pyx_DECREF(__pyx_v_self->try_except_infos); - __pyx_v_self->try_except_infos = ((PyObject*)Py_None); - - /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_2__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_2__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_5remove_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_remove_additional_info(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, CYTHON_UNUSED int __pyx_skip_dispatch) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.try_except_infos,) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self->try_except_infos); - __Pyx_GIVEREF(__pyx_v_self->try_except_infos); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->try_except_infos); - __pyx_v_state = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.try_except_infos,) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v__dict = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":7 - * state = (self.try_except_infos,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.try_except_infos is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.try_except_infos,) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; - } - - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.try_except_infos is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, None), state - */ - /*else*/ { - __pyx_t_3 = (__pyx_v_self->try_except_infos != ((PyObject*)Py_None)); - __pyx_v_use_setstate = __pyx_t_3; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.try_except_infos is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, None), state - * else: - */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":13 - * use_setstate = self.try_except_infos is not None - * if use_setstate: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_210464433); - __Pyx_GIVEREF(__pyx_int_210464433); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_210464433); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.try_except_infos is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, None), state - * else: - */ - } + __Pyx_RefNannySetupContext("remove_additional_info", 1); - /* "(tree fragment)":15 - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, None), state - * else: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":321 + * # ENDIF + * # fmt: on + * with _update_infos_lock: # <<<<<<<<<<<<<< + * _all_infos.discard(info) + * _infos_stepping.discard(info) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) + /*with:*/ { + __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_210464433); - __Pyx_GIVEREF(__pyx_int_210464433); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_210464433); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 321, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 321, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "_pydevd_bundle/pydevd_cython.pyx":322 + * # fmt: on + * with _update_infos_lock: + * _all_infos.discard(info) # <<<<<<<<<<<<<< + * _infos_stepping.discard(info) + * */ + if (unlikely(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard"); + __PYX_ERR(0, 322, __pyx_L7_error) + } + __pyx_t_9 = __Pyx_PySet_Discard(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 322, __pyx_L7_error) - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":323 + * with _update_infos_lock: + * _all_infos.discard(info) + * _infos_stepping.discard(info) # <<<<<<<<<<<<<< + * + * */ + if (unlikely(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "discard"); + __PYX_ERR(0, 323, __pyx_L7_error) + } + __pyx_t_9 = __Pyx_PySet_Discard(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 323, __pyx_L7_error) -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_4__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_4__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":321 + * # ENDIF + * # fmt: on + * with _update_infos_lock: # <<<<<<<<<<<<<< + * _all_infos.discard(info) + * _infos_stepping.discard(info) */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExceptContainerObj__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.remove_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 321, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_10 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 321, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 321, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_12 < 0) __PYX_ERR(0, 321, __pyx_L9_except_error) + __pyx_t_13 = (!__pyx_t_12); + if (unlikely(__pyx_t_13)) { + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_3, __pyx_t_4); + __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; + __PYX_ERR(0, 321, __pyx_L9_except_error) + } + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_exception_handled; + } + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __pyx_L12_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_1) { + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__3, NULL); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + goto __pyx_L6; + } + __pyx_L6:; + } + goto __pyx_L16; + __pyx_L3_error:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L1_error; + __pyx_L16:; + } - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xc8b6eb1, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":316 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef remove_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def remove_additional_info(info): */ /* function exit code */ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.remove_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":294 - * cdef int should_skip - * cdef object exc_info - * def __init__(self, tuple args): # <<<<<<<<<<<<<< - * self._args = args # In the cython version we don't need to pass the frame - * self.should_skip = -1 # On cythonized version, put in instance. - */ - /* Python wrapper */ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_5remove_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_5remove_additional_info = {"remove_additional_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_5remove_additional_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_5remove_additional_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - int __pyx_r; + PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + __Pyx_RefNannySetupContext("remove_additional_info (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 316, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 294, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "remove_additional_info") < 0)) __PYX_ERR(0, 316, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); } - __pyx_v_args = ((PyObject*)values[0]); + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)values[0]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 294, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("remove_additional_info", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 316, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.remove_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); - return -1; + return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 294, __pyx_L1_error) - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, 1, "info", 0))) __PYX_ERR(0, 316, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_4remove_additional_info(__pyx_self, __pyx_v_info); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; - __pyx_r = -1; + __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args) { - int __pyx_r; +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4remove_additional_info(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info) { + PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("remove_additional_info", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_remove_additional_info(__pyx_v_info, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":295 - * cdef object exc_info - * def __init__(self, tuple args): - * self._args = args # In the cython version we don't need to pass the frame # <<<<<<<<<<<<<< - * self.should_skip = -1 # On cythonized version, put in instance. - * self.exc_info = () - */ - __Pyx_INCREF(__pyx_v_args); - __Pyx_GIVEREF(__pyx_v_args); - __Pyx_GOTREF(__pyx_v_self->_args); - __Pyx_DECREF(__pyx_v_self->_args); - __pyx_v_self->_args = __pyx_v_args; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.remove_additional_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":296 - * def __init__(self, tuple args): - * self._args = args # In the cython version we don't need to pass the frame - * self.should_skip = -1 # On cythonized version, put in instance. # <<<<<<<<<<<<<< - * self.exc_info = () - * # ELSE +/* "_pydevd_bundle/pydevd_cython.pyx":328 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint any_thread_stepping(): # <<<<<<<<<<<<<< + * # ELSE + * # def any_thread_stepping(): */ - __pyx_v_self->should_skip = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":297 - * self._args = args # In the cython version we don't need to pass the frame - * self.should_skip = -1 # On cythonized version, put in instance. - * self.exc_info = () # <<<<<<<<<<<<<< - * # ELSE - * # should_skip = -1 # Default value in class (put in instance on set). +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static int __pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping(CYTHON_UNUSED int __pyx_skip_dispatch) { + int __pyx_r; + int __pyx_t_1; + + /* "_pydevd_bundle/pydevd_cython.pyx":333 + * # ENDIF + * # fmt: on + * return bool(_infos_stepping) # <<<<<<<<<<<<<< + * import linecache + * import os.path */ - __Pyx_INCREF(__pyx_empty_tuple); - __Pyx_GIVEREF(__pyx_empty_tuple); - __Pyx_GOTREF(__pyx_v_self->exc_info); - __Pyx_DECREF(__pyx_v_self->exc_info); - __pyx_v_self->exc_info = __pyx_empty_tuple; + __pyx_t_1 = (__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping != Py_None)&&(PySet_GET_SIZE(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping) != 0); + __pyx_r = (!(!__pyx_t_1)); + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":294 - * cdef int should_skip - * cdef object exc_info - * def __init__(self, tuple args): # <<<<<<<<<<<<<< - * self._args = args # In the cython version we don't need to pass the frame - * self.should_skip = -1 # On cythonized version, put in instance. + /* "_pydevd_bundle/pydevd_cython.pyx":328 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint any_thread_stepping(): # <<<<<<<<<<<<<< + * # ELSE + * # def any_thread_stepping(): */ /* function exit code */ - __pyx_r = 0; - __Pyx_RefNannyFinishContext(); + __pyx_L0:; return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":308 - * # ENDIF - * - * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< - * self._args[0].set_suspend(*args, **kwargs) - * - */ - /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping = {"any_thread_stepping", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping, METH_NOARGS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_suspend (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_suspend", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_2set_suspend(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs); + __Pyx_RefNannySetupContext("any_thread_stepping (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_6any_thread_stepping(__pyx_self); /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_2set_suspend(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6any_thread_stepping(CYTHON_UNUSED PyObject *__pyx_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; + int __pyx_t_1; PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("set_suspend", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":309 - * - * def set_suspend(self, *args, **kwargs): - * self._args[0].set_suspend(*args, **kwargs) # <<<<<<<<<<<<<< - * - * def do_wait_suspend(self, *args, **kwargs): - */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 309, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_RefNannySetupContext("any_thread_stepping", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping(0); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 328, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 328, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":308 - * # ENDIF - * - * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< - * self._args[0].set_suspend(*args, **kwargs) - * - */ + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.set_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.any_thread_stepping", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); @@ -7912,2851 +12673,2572 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_2set_suspe return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":311 - * self._args[0].set_suspend(*args, **kwargs) +/* "_pydevd_bundle/pydevd_cython.pyx":358 + * except ImportError: * - * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< - * self._args[0].do_wait_suspend(*args, **kwargs) + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None * */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9get_smart_step_into_variant_from_frame_offset = {"get_smart_step_into_variant_from_frame_offset", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9get_smart_step_into_variant_from_frame_offset, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_args = 0; + CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("do_wait_suspend (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "do_wait_suspend", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); + __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_smart_step_into_variant_from_frame_offset", 1))) return NULL; __Pyx_INCREF(__pyx_args); __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_4do_wait_suspend(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_8get_smart_step_into_variant_from_frame_offset(__pyx_self, __pyx_v_args, __pyx_v_kwargs); /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); + __Pyx_DECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_4do_wait_suspend(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("do_wait_suspend", 0); + __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":312 + /* "_pydevd_bundle/pydevd_cython.pyx":359 + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): + * return None # <<<<<<<<<<<<<< * - * def do_wait_suspend(self, *args, **kwargs): - * self._args[0].do_wait_suspend(*args, **kwargs) # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 312, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":311 - * self._args[0].set_suspend(*args, **kwargs) + /* "_pydevd_bundle/pydevd_cython.pyx":358 + * except ImportError: * - * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< - * self._args[0].do_wait_suspend(*args, **kwargs) + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None * */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.do_wait_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; __pyx_L0:; __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":315 +/* "_pydevd_bundle/pydevd_cython.pyx":395 * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef bint should_stop; - * cdef tuple exc_info; + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * # ELSE + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_11is_unhandled_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_11is_unhandled_exception = {"is_unhandled_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_11is_unhandled_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_11is_unhandled_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_container_obj = 0; + PyObject *__pyx_v_py_db = 0; PyObject *__pyx_v_frame = 0; - PyObject *__pyx_v_event = 0; - PyObject *__pyx_v_arg = 0; + int __pyx_v_last_raise_line; + PyObject *__pyx_v_raise_lines = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("trace_exception (wrapper)", 0); + __Pyx_RefNannySetupContext("is_unhandled_exception (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_container_obj,&__pyx_n_s_py_db,&__pyx_n_s_frame,&__pyx_n_s_last_raise_line,&__pyx_n_s_raise_lines,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_container_obj)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, 1); __PYX_ERR(0, 315, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("is_unhandled_exception", 1, 5, 5, 1); __PYX_ERR(0, 395, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("is_unhandled_exception", 1, 5, 5, 2); __PYX_ERR(0, 395, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_last_raise_line)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("is_unhandled_exception", 1, 5, 5, 3); __PYX_ERR(0, 395, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_raise_lines)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, 2); __PYX_ERR(0, 315, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("is_unhandled_exception", 1, 5, 5, 4); __PYX_ERR(0, 395, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace_exception") < 0)) __PYX_ERR(0, 315, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "is_unhandled_exception") < 0)) __PYX_ERR(0, 395, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 5)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_frame = values[0]; - __pyx_v_event = ((PyObject*)values[1]); - __pyx_v_arg = values[2]; - } - goto __pyx_L4_argument_unpacking_done; + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_container_obj = values[0]; + __pyx_v_py_db = values[1]; + __pyx_v_frame = values[2]; + __pyx_v_last_raise_line = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_last_raise_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L3_error) + __pyx_v_raise_lines = ((PyObject*)values[4]); + } + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 315, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("is_unhandled_exception", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 395, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.is_unhandled_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_event), (&PyString_Type), 1, "event", 1))) __PYX_ERR(0, 315, __pyx_L1_error) - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_6trace_exception(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_raise_lines), (&PySet_Type), 1, "raise_lines", 1))) __PYX_ERR(0, 395, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_10is_unhandled_exception(__pyx_self, __pyx_v_container_obj, __pyx_v_py_db, __pyx_v_frame, __pyx_v_last_raise_line, __pyx_v_raise_lines); /* function exit code */ goto __pyx_L0; __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_6trace_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { - int __pyx_v_should_stop; - PyObject *__pyx_v_exc_info = 0; - PyObject *__pyx_v_frame_skips_cache = NULL; - PyObject *__pyx_v_frame_cache_key = NULL; - PyObject *__pyx_v_custom_key = NULL; - PyObject *__pyx_v_container_obj = NULL; +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10is_unhandled_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_container_obj, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, int __pyx_v_last_raise_line, PyObject *__pyx_v_raise_lines) { + PyObject *__pyx_v_try_except_infos = NULL; + PyObject *__pyx_v_valid_try_except_infos = NULL; + PyObject *__pyx_v_try_except_info = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *(*__pyx_t_7)(PyObject *); - int __pyx_t_8; - int __pyx_t_9; + unsigned int __pyx_t_6; + int __pyx_t_7; + Py_ssize_t __pyx_t_8; + PyObject *(*__pyx_t_9)(PyObject *); + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_exception", 0); - __Pyx_INCREF(__pyx_v_frame); + __Pyx_RefNannySetupContext("is_unhandled_exception", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":321 - * # def trace_exception(self, frame, event, arg): + /* "_pydevd_bundle/pydevd_cython.pyx":399 + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): * # ENDIF - * if event == 'exception': # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + * if frame.f_lineno in raise_lines: # <<<<<<<<<<<<<< + * return True * */ - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 321, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_1 != 0); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v_raise_lines == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 399, __pyx_L1_error) + } + __pyx_t_2 = (__Pyx_PySet_ContainsTF(__pyx_t_1, __pyx_v_raise_lines, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":322 + /* "_pydevd_bundle/pydevd_cython.pyx":400 * # ENDIF - * if event == 'exception': - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) # <<<<<<<<<<<<<< + * if frame.f_lineno in raise_lines: + * return True # <<<<<<<<<<<<<< * - * if should_stop: + * else: */ - __pyx_t_3 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_should_stop_on_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 322, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 322, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L5_unpacking_done; - __pyx_L4_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 322, __pyx_L1_error) - __pyx_L5_unpacking_done:; - } - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_should_stop = __pyx_t_2; - __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_5); - __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":324 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":399 + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): + * # ENDIF + * if frame.f_lineno in raise_lines: # <<<<<<<<<<<<<< + * return True * - * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch */ - __pyx_t_2 = (__pyx_v_should_stop != 0); - if (__pyx_t_2) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":325 - * - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":403 * + * else: + * try_except_infos = container_obj.try_except_infos # <<<<<<<<<<<<<< + * if try_except_infos is None: + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 325, __pyx_L1_error) - __pyx_t_5 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_handle_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg, ((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 325, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 325, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_container_obj, __pyx_n_s_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_try_except_infos = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":326 - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":404 + * else: + * try_except_infos = container_obj.try_except_infos + * if try_except_infos is None: # <<<<<<<<<<<<<< + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) * - * elif event == 'return': */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 326, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + __pyx_t_2 = (__pyx_v_try_except_infos == Py_None); + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":325 - * - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":405 + * try_except_infos = container_obj.try_except_infos + * if try_except_infos is None: + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) # <<<<<<<<<<<<<< * + * if not try_except_infos: */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_collect_try_except_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } + if (__Pyx_PyObject_SetAttrStr(__pyx_v_container_obj, __pyx_n_s_try_except_infos, __pyx_t_1) < 0) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_INCREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_try_except_infos, __pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":324 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":404 + * else: + * try_except_infos = container_obj.try_except_infos + * if try_except_infos is None: # <<<<<<<<<<<<<< + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) * - * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch */ } - /* "_pydevd_bundle/pydevd_cython.pyx":321 - * # def trace_exception(self, frame, event, arg): - * # ENDIF - * if event == 'exception': # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":407 + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) * + * if not try_except_infos: # <<<<<<<<<<<<<< + * # Consider the last exception as unhandled because there's no try..except in it. + * return True */ - goto __pyx_L3; - } + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_try_except_infos); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 407, __pyx_L1_error) + __pyx_t_7 = (!__pyx_t_2); + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":328 - * return self.trace_dispatch - * - * elif event == 'return': # <<<<<<<<<<<<<< - * exc_info = self.exc_info - * if exc_info and arg is None: + /* "_pydevd_bundle/pydevd_cython.pyx":409 + * if not try_except_infos: + * # Consider the last exception as unhandled because there's no try..except in it. + * return True # <<<<<<<<<<<<<< + * else: + * # Now, consider only the try..except for the raise */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 328, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":329 + /* "_pydevd_bundle/pydevd_cython.pyx":407 + * container_obj.try_except_infos = try_except_infos = py_db.collect_try_except_info(frame.f_code) * - * elif event == 'return': - * exc_info = self.exc_info # <<<<<<<<<<<<<< - * if exc_info and arg is None: - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - */ - if (!(likely(PyTuple_CheckExact(__pyx_v_self->exc_info))||((__pyx_v_self->exc_info) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_self->exc_info)->tp_name), 0))) __PYX_ERR(0, 329, __pyx_L1_error) - __pyx_t_5 = __pyx_v_self->exc_info; - __Pyx_INCREF(__pyx_t_5); - __pyx_v_exc_info = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":330 - * elif event == 'return': - * exc_info = self.exc_info - * if exc_info and arg is None: # <<<<<<<<<<<<<< - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - * custom_key = (frame_cache_key, 'try_exc_info') + * if not try_except_infos: # <<<<<<<<<<<<<< + * # Consider the last exception as unhandled because there's no try..except in it. + * return True */ - __pyx_t_2 = (__pyx_v_exc_info != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_exc_info) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L9_bool_binop_done; } - __pyx_t_2 = (__pyx_v_arg == Py_None); - __pyx_t_8 = (__pyx_t_2 != 0); - __pyx_t_1 = __pyx_t_8; - __pyx_L9_bool_binop_done:; - if (__pyx_t_1) { - - /* "_pydevd_bundle/pydevd_cython.pyx":331 - * exc_info = self.exc_info - * if exc_info and arg is None: - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] # <<<<<<<<<<<<<< - * custom_key = (frame_cache_key, 'try_exc_info') - * container_obj = frame_skips_cache.get(custom_key) - */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 331, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 331, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_frame_skips_cache = __pyx_t_5; - __pyx_t_5 = 0; - __pyx_v_frame_cache_key = __pyx_t_3; - __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":332 - * if exc_info and arg is None: - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - * custom_key = (frame_cache_key, 'try_exc_info') # <<<<<<<<<<<<<< - * container_obj = frame_skips_cache.get(custom_key) - * if container_obj is None: - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_frame_cache_key); - __Pyx_GIVEREF(__pyx_v_frame_cache_key); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_frame_cache_key); - __Pyx_INCREF(__pyx_n_s_try_exc_info); - __Pyx_GIVEREF(__pyx_n_s_try_exc_info); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_try_exc_info); - __pyx_v_custom_key = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":333 - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - * custom_key = (frame_cache_key, 'try_exc_info') - * container_obj = frame_skips_cache.get(custom_key) # <<<<<<<<<<<<<< - * if container_obj is None: - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame_skips_cache, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_custom_key) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_custom_key); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_container_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":334 - * custom_key = (frame_cache_key, 'try_exc_info') - * container_obj = frame_skips_cache.get(custom_key) - * if container_obj is None: # <<<<<<<<<<<<<< - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - */ - __pyx_t_1 = (__pyx_v_container_obj == Py_None); - __pyx_t_8 = (__pyx_t_1 != 0); - if (__pyx_t_8) { - /* "_pydevd_bundle/pydevd_cython.pyx":335 - * container_obj = frame_skips_cache.get(custom_key) - * if container_obj is None: - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() # <<<<<<<<<<<<<< - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - * self.handle_user_exception(frame): - */ - __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 335, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_container_obj, __pyx_t_3); - if (unlikely(PyObject_SetItem(__pyx_v_frame_skips_cache, __pyx_v_custom_key, __pyx_t_3) < 0)) __PYX_ERR(0, 335, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":334 - * custom_key = (frame_cache_key, 'try_exc_info') - * container_obj = frame_skips_cache.get(custom_key) - * if container_obj is None: # <<<<<<<<<<<<<< - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ + /* "_pydevd_bundle/pydevd_cython.pyx":412 + * else: + * # Now, consider only the try..except for the raise + * valid_try_except_infos = [] # <<<<<<<<<<<<<< + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_try_block(last_raise_line): */ - } + /*else*/ { + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_valid_try_except_infos = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":336 - * if container_obj is None: - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ # <<<<<<<<<<<<<< - * self.handle_user_exception(frame): - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":413 + * # Now, consider only the try..except for the raise + * valid_try_except_infos = [] + * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< + * if try_except_info.is_line_in_try_block(last_raise_line): + * valid_try_except_infos.append(try_except_info) */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 336, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(__pyx_v_exc_info == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 336, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_exc_info, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(__pyx_v_exc_info == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 336, __pyx_L1_error) - } - __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_exc_info, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (!(likely(PySet_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 336, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython_is_unhandled_exception(__pyx_v_container_obj, __pyx_t_3, __pyx_v_frame, __pyx_t_9, ((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_1) { + if (likely(PyList_CheckExact(__pyx_v_try_except_infos)) || PyTuple_CheckExact(__pyx_v_try_except_infos)) { + __pyx_t_1 = __pyx_v_try_except_infos; __Pyx_INCREF(__pyx_t_1); + __pyx_t_8 = 0; + __pyx_t_9 = NULL; } else { - __pyx_t_8 = __pyx_t_1; - goto __pyx_L13_bool_binop_done; + __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 413, __pyx_L1_error) } + for (;;) { + if (likely(!__pyx_t_9)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 413, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 413, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 413, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 413, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_9(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 413, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XDECREF_SET(__pyx_v_try_except_info, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":337 - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - * self.handle_user_exception(frame): # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":414 + * valid_try_except_infos = [] + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_try_block(last_raise_line): # <<<<<<<<<<<<<< + * valid_try_except_infos.append(try_except_info) * */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_is_line_in_try_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_last_raise_line); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } } - } - __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_t_1; - __pyx_L13_bool_binop_done:; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_5}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":336 - * if container_obj is None: - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ # <<<<<<<<<<<<<< - * self.handle_user_exception(frame): - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":415 + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_try_block(last_raise_line): + * valid_try_except_infos.append(try_except_info) # <<<<<<<<<<<<<< + * + * if not valid_try_except_infos: */ - if (__pyx_t_8) { + __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_valid_try_except_infos, __pyx_v_try_except_info); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 415, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":338 - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - * self.handle_user_exception(frame): - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":414 + * valid_try_except_infos = [] + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_try_block(last_raise_line): # <<<<<<<<<<<<<< + * valid_try_except_infos.append(try_except_info) * - * return self.trace_exception */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":336 - * if container_obj is None: - * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ # <<<<<<<<<<<<<< - * self.handle_user_exception(frame): - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":413 + * # Now, consider only the try..except for the raise + * valid_try_except_infos = [] + * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< + * if try_except_info.is_line_in_try_block(last_raise_line): + * valid_try_except_infos.append(try_except_info) */ } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":330 - * elif event == 'return': - * exc_info = self.exc_info - * if exc_info and arg is None: # <<<<<<<<<<<<<< - * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - * custom_key = (frame_cache_key, 'try_exc_info') - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":328 - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":417 + * valid_try_except_infos.append(try_except_info) + * + * if not valid_try_except_infos: # <<<<<<<<<<<<<< + * return True * - * elif event == 'return': # <<<<<<<<<<<<<< - * exc_info = self.exc_info - * if exc_info and arg is None: */ - } - __pyx_L3:; + __pyx_t_7 = (PyList_GET_SIZE(__pyx_v_valid_try_except_infos) != 0); + __pyx_t_2 = (!__pyx_t_7); + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":340 - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":418 * - * return self.trace_exception # <<<<<<<<<<<<<< + * if not valid_try_except_infos: + * return True # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * else: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":315 + /* "_pydevd_bundle/pydevd_cython.pyx":417 + * valid_try_except_infos.append(try_except_info) + * + * if not valid_try_except_infos: # <<<<<<<<<<<<<< + * return True * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef bint should_stop; - * cdef tuple exc_info; */ + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_exc_info); - __Pyx_XDECREF(__pyx_v_frame_skips_cache); - __Pyx_XDECREF(__pyx_v_frame_cache_key); - __Pyx_XDECREF(__pyx_v_custom_key); - __Pyx_XDECREF(__pyx_v_container_obj); - __Pyx_XDECREF(__pyx_v_frame); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pyx":343 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _should_stop_on_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef PyDBAdditionalThreadInfo info; - * cdef bint should_stop; + /* "_pydevd_bundle/pydevd_cython.pyx":425 + * # where one try..except is inside the other with only a raise + * # and it's gotten in the except line. + * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< + * if try_except_info.is_line_in_except_block(frame.f_lineno): + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: */ + /*else*/ { + if (likely(PyList_CheckExact(__pyx_v_try_except_infos)) || PyTuple_CheckExact(__pyx_v_try_except_infos)) { + __pyx_t_1 = __pyx_v_try_except_infos; __Pyx_INCREF(__pyx_t_1); + __pyx_t_8 = 0; + __pyx_t_9 = NULL; + } else { + __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_try_except_infos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 425, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_9)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 425, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 425, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 425, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 425, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_9(__pyx_t_1); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 425, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XDECREF_SET(__pyx_v_try_except_info, __pyx_t_3); + __pyx_t_3 = 0; -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__should_stop_on_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, CYTHON_UNUSED PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { - struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; - int __pyx_v_should_stop; - int __pyx_v_was_just_raised; - PyObject *__pyx_v_check_excs = 0; - PyObject *__pyx_v_main_debugger = NULL; - PyObject *__pyx_v_exception = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_v_trace = NULL; - PyObject *__pyx_v_exception_breakpoint = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_exc_break_user = NULL; - PyObject *__pyx_v_exc_break_caught = NULL; - PyObject *__pyx_v_exc_break = NULL; - PyObject *__pyx_v_is_user_uncaught = NULL; - PyObject *__pyx_v_exc_info = NULL; - PyObject *__pyx_v_lines = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_t_12; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - Py_ssize_t __pyx_t_16; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_should_stop_on_exception", 0); - __Pyx_INCREF(__pyx_v_frame); + /* "_pydevd_bundle/pydevd_cython.pyx":426 + * # and it's gotten in the except line. + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_except_block(frame.f_lineno): # <<<<<<<<<<<<<< + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: + * # In a raise inside a try..except block or some except which doesn't + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_is_line_in_except_block); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_5}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":353 - * - * # main_debugger, _filename, info, _thread = self._args - * main_debugger = self._args[0] # <<<<<<<<<<<<<< - * info = self._args[2] - * should_stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":427 + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_except_block(frame.f_lineno): + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: # <<<<<<<<<<<<<< + * # In a raise inside a try..except block or some except which doesn't + * # match the raised exception. */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 353, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_main_debugger = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_except_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_try_except_info, __pyx_n_s_raise_lines_in_except); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = (__Pyx_PySequence_ContainsTF(__pyx_t_5, __pyx_t_4, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __pyx_t_7; + __pyx_L15_bool_binop_done:; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":354 - * # main_debugger, _filename, info, _thread = self._args - * main_debugger = self._args[0] - * info = self._args[2] # <<<<<<<<<<<<<< - * should_stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":430 + * # In a raise inside a try..except block or some except which doesn't + * # match the raised exception. + * return True # <<<<<<<<<<<<<< + * return False * */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 354, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 354, __pyx_L1_error) - __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); - __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":355 - * main_debugger = self._args[0] - * info = self._args[2] - * should_stop = False # <<<<<<<<<<<<<< - * - * # 2 = 2 + /* "_pydevd_bundle/pydevd_cython.pyx":427 + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_except_block(frame.f_lineno): + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: # <<<<<<<<<<<<<< + * # In a raise inside a try..except block or some except which doesn't + * # match the raised exception. */ - __pyx_v_should_stop = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":358 - * - * # 2 = 2 - * if info.pydev_state != 2: # and breakpoint is not None: # <<<<<<<<<<<<<< - * exception, value, trace = arg - * + /* "_pydevd_bundle/pydevd_cython.pyx":426 + * # and it's gotten in the except line. + * for try_except_info in try_except_infos: + * if try_except_info.is_line_in_except_block(frame.f_lineno): # <<<<<<<<<<<<<< + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: + * # In a raise inside a try..except block or some except which doesn't */ - __pyx_t_2 = ((__pyx_v_info->pydev_state != 2) != 0); - if (__pyx_t_2) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":359 - * # 2 = 2 - * if info.pydev_state != 2: # and breakpoint is not None: - * exception, value, trace = arg # <<<<<<<<<<<<<< - * - * if trace is not None and hasattr(trace, 'tb_next'): + /* "_pydevd_bundle/pydevd_cython.pyx":425 + * # where one try..except is inside the other with only a raise + * # and it's gotten in the except line. + * for try_except_info in try_except_infos: # <<<<<<<<<<<<<< + * if try_except_info.is_line_in_except_block(frame.f_lineno): + * if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: */ - if ((likely(PyTuple_CheckExact(__pyx_v_arg))) || (PyList_CheckExact(__pyx_v_arg))) { - PyObject* sequence = __pyx_v_arg; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 359, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - __pyx_t_4 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - Py_ssize_t index = -1; - __pyx_t_5 = PyObject_GetIter(__pyx_v_arg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 359, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 359, __pyx_L1_error) - __pyx_t_6 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L5_unpacking_done; - __pyx_L4_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 359, __pyx_L1_error) - __pyx_L5_unpacking_done:; } - __pyx_v_exception = __pyx_t_1; - __pyx_t_1 = 0; - __pyx_v_value = __pyx_t_3; - __pyx_t_3 = 0; - __pyx_v_trace = __pyx_t_4; - __pyx_t_4 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":361 - * exception, value, trace = arg - * - * if trace is not None and hasattr(trace, 'tb_next'): # <<<<<<<<<<<<<< - * # on jython trace is None on the first event and it may not have a tb_next. + /* "_pydevd_bundle/pydevd_cython.pyx":431 + * # match the raised exception. + * return True + * return False # <<<<<<<<<<<<<< * - */ - __pyx_t_7 = (__pyx_v_trace != Py_None); - __pyx_t_8 = (__pyx_t_7 != 0); - if (__pyx_t_8) { - } else { - __pyx_t_2 = __pyx_t_8; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_8 = __Pyx_HasAttr(__pyx_v_trace, __pyx_n_s_tb_next); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 361, __pyx_L1_error) - __pyx_t_7 = (__pyx_t_8 != 0); - __pyx_t_2 = __pyx_t_7; - __pyx_L7_bool_binop_done:; - if (__pyx_t_2) { - - /* "_pydevd_bundle/pydevd_cython.pyx":364 - * # on jython trace is None on the first event and it may not have a tb_next. * - * should_stop = False # <<<<<<<<<<<<<< - * exception_breakpoint = None - * try: */ - __pyx_v_should_stop = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":365 + /* "_pydevd_bundle/pydevd_cython.pyx":395 * - * should_stop = False - * exception_breakpoint = None # <<<<<<<<<<<<<< - * try: - * if main_debugger.plugin is not None: + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * # ELSE + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): */ - __Pyx_INCREF(Py_None); - __pyx_v_exception_breakpoint = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":366 - * should_stop = False - * exception_breakpoint = None - * try: # <<<<<<<<<<<<<< - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - /*try:*/ { + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.is_unhandled_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_try_except_infos); + __Pyx_XDECREF(__pyx_v_valid_try_except_infos); + __Pyx_XDECREF(__pyx_v_try_except_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":367 - * exception_breakpoint = None - * try: - * if main_debugger.plugin is not None: # <<<<<<<<<<<<<< - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - * if result: +/* "_pydevd_bundle/pydevd_cython.pyx":437 + * cdef class _TryExceptContainerObj: + * cdef public list try_except_infos; + * def __init__(self): # <<<<<<<<<<<<<< + * self.try_except_infos = None + * # ELSE */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_plugin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 367, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__pyx_t_4 != Py_None); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = (__pyx_t_2 != 0); - if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":368 - * try: - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) # <<<<<<<<<<<<<< - * if result: - * should_stop, frame = result - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_plugin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exception_break); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_main_debugger, ((PyObject *)__pyx_v_self), __pyx_v_frame, __pyx_v_self->_args, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 5+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[6] = {__pyx_t_3, __pyx_v_main_debugger, ((PyObject *)__pyx_v_self), __pyx_v_frame, __pyx_v_self->_args, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 5+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else - #endif - { - __pyx_t_5 = PyTuple_New(5+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_12, __pyx_v_main_debugger); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_12, ((PyObject *)__pyx_v_self)); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_12, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_12, __pyx_v_self->_args); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_5, 4+__pyx_t_12, __pyx_v_arg); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_result = __pyx_t_4; - __pyx_t_4 = 0; +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - /* "_pydevd_bundle/pydevd_cython.pyx":369 - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - * if result: # <<<<<<<<<<<<<< - * should_stop, frame = result - * except: - */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 369, __pyx_L9_error) - if (__pyx_t_7) { + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":370 - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - * if result: - * should_stop, frame = result # <<<<<<<<<<<<<< - * except: - * pydev_log.exception() - */ - if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { - PyObject* sequence = __pyx_v_result; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 370, __pyx_L9_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_1 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 370, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 370, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } else { - Py_ssize_t index = -1; - __pyx_t_5 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 370, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L17_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_1 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_1)) goto __pyx_L17_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 370, __pyx_L9_error) - __pyx_t_6 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L18_unpacking_done; - __pyx_L17_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 370, __pyx_L9_error) - __pyx_L18_unpacking_done:; - } - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 370, __pyx_L9_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_should_stop = __pyx_t_7; - __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1); - __pyx_t_1 = 0; +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":369 - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - * if result: # <<<<<<<<<<<<<< - * should_stop, frame = result - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":438 + * cdef public list try_except_infos; + * def __init__(self): + * self.try_except_infos = None # <<<<<<<<<<<<<< + * # ELSE + * # class _TryExceptContainerObj(object): */ - } + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->try_except_infos); + __Pyx_DECREF(__pyx_v_self->try_except_infos); + __pyx_v_self->try_except_infos = ((PyObject*)Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":367 - * exception_breakpoint = None - * try: - * if main_debugger.plugin is not None: # <<<<<<<<<<<<<< - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - * if result: + /* "_pydevd_bundle/pydevd_cython.pyx":437 + * cdef class _TryExceptContainerObj: + * cdef public list try_except_infos; + * def __init__(self): # <<<<<<<<<<<<<< + * self.try_except_infos = None + * # ELSE */ - } - /* "_pydevd_bundle/pydevd_cython.pyx":366 - * should_stop = False - * exception_breakpoint = None - * try: # <<<<<<<<<<<<<< - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - */ - } - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14_try_end; - __pyx_L9_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":371 - * if result: - * should_stop, frame = result - * except: # <<<<<<<<<<<<<< - * pydev_log.exception() - * +/* "_pydevd_bundle/pydevd_cython.pyx":436 + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef class _TryExceptContainerObj: + * cdef public list try_except_infos; # <<<<<<<<<<<<<< + * def __init__(self): + * self.try_except_infos = None */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(0, 371, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - /* "_pydevd_bundle/pydevd_cython.pyx":372 - * should_stop, frame = result - * except: - * pydev_log.exception() # <<<<<<<<<<<<<< - * - * if not should_stop: - */ - __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 372, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 372, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - } - } - __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L10_exception_handled; - } - __pyx_L11_except_error:; +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - /* "_pydevd_bundle/pydevd_cython.pyx":366 - * should_stop = False - * exception_breakpoint = None - * try: # <<<<<<<<<<<<<< - * if main_debugger.plugin is not None: - * result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - */ - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - goto __pyx_L1_error; - __pyx_L10_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - __pyx_L14_try_end:; - } + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":374 - * pydev_log.exception() - * - * if not should_stop: # <<<<<<<<<<<<<< - * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). - * if exception == SystemExit and main_debugger.ignore_system_exit_code(value): - */ - __pyx_t_7 = ((!(__pyx_v_should_stop != 0)) != 0); - if (__pyx_t_7) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__", 1); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_self->try_except_infos); + __pyx_r = __pyx_v_self->try_except_infos; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":376 - * if not should_stop: - * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). - * if exception == SystemExit and main_debugger.ignore_system_exit_code(value): # <<<<<<<<<<<<<< - * pass - * - */ - __pyx_t_5 = PyObject_RichCompare(__pyx_v_exception, __pyx_builtin_SystemExit, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 376, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L23_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_ignore_system_exit_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_value); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 376, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __pyx_t_2; - __pyx_L23_bool_binop_done:; - if (__pyx_t_7) { - goto __pyx_L22; - } + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":379 - * pass - * - * elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): # <<<<<<<<<<<<<< - * # These exceptions are control-flow related (they work as a generator - * # pause), so, we shouldn't stop on them. - */ - __Pyx_INCREF(__pyx_v_exception); - __pyx_t_5 = __pyx_v_exception; - __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_builtin_GeneratorExit, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L25_bool_binop_done; - } - __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_builtin_StopIteration, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L25_bool_binop_done; - } - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_StopAsyncIteration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = __pyx_t_2; - __pyx_L25_bool_binop_done:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = (__pyx_t_7 != 0); - if (__pyx_t_2) { - goto __pyx_L22; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":384 - * pass - * - * elif ignore_exception_trace(trace): # <<<<<<<<<<<<<< - * pass - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ignore_exception_trace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_trace) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_trace); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 384, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { - goto __pyx_L22; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":388 - * - * else: - * was_just_raised = trace.tb_next is None # <<<<<<<<<<<<<< - * - * # It was not handled by any plugin, lets check exception breakpoints. - */ - /*else*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = (__pyx_t_5 == Py_None); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_was_just_raised = __pyx_t_2; +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self), ((PyObject *)__pyx_v_value)); - /* "_pydevd_bundle/pydevd_cython.pyx":391 - * - * # It was not handled by any plugin, lets check exception breakpoints. - * check_excs = [] # <<<<<<<<<<<<<< - * - * # Note: check user unhandled before regular exceptions. - */ - __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_check_excs = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":394 - * - * # Note: check user unhandled before regular exceptions. - * exc_break_user = main_debugger.get_exception_breakpoint( # <<<<<<<<<<<<<< - * exception, main_debugger.break_on_user_uncaught_exceptions) - * if exc_break_user is not None: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_get_exception_breakpoint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_v_value))) __PYX_ERR(0, 436, __pyx_L1_error) + __pyx_t_1 = __pyx_v_value; + __Pyx_INCREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->try_except_infos); + __Pyx_DECREF(__pyx_v_self->try_except_infos); + __pyx_v_self->try_except_infos = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":395 - * # Note: check user unhandled before regular exceptions. - * exc_break_user = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_user_uncaught_exceptions) # <<<<<<<<<<<<<< - * if exc_break_user is not None: - * check_excs.append((exc_break_user, True)) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 395, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_exception, __pyx_t_4}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_exception, __pyx_t_4}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_14 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_exception); - __Pyx_GIVEREF(__pyx_v_exception); - PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_12, __pyx_v_exception); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_12, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_exc_break_user = __pyx_t_5; - __pyx_t_5 = 0; + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.try_except_infos.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":396 - * exc_break_user = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_user_uncaught_exceptions) - * if exc_break_user is not None: # <<<<<<<<<<<<<< - * check_excs.append((exc_break_user, True)) - * - */ - __pyx_t_2 = (__pyx_v_exc_break_user != Py_None); - __pyx_t_7 = (__pyx_t_2 != 0); - if (__pyx_t_7) { +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_5__del__(PyObject *__pyx_v_self); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - /* "_pydevd_bundle/pydevd_cython.pyx":397 - * exception, main_debugger.break_on_user_uncaught_exceptions) - * if exc_break_user is not None: - * check_excs.append((exc_break_user, True)) # <<<<<<<<<<<<<< - * - * exc_break_caught = main_debugger.get_exception_breakpoint( - */ - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_exc_break_user); - __Pyx_GIVEREF(__pyx_v_exc_break_user); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_exc_break_user); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_5, 1, Py_True); - __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_check_excs, __pyx_t_5); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":396 - * exc_break_user = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_user_uncaught_exceptions) - * if exc_break_user is not None: # <<<<<<<<<<<<<< - * check_excs.append((exc_break_user, True)) - * - */ - } +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_16try_except_infos_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__", 1); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->try_except_infos); + __Pyx_DECREF(__pyx_v_self->try_except_infos); + __pyx_v_self->try_except_infos = ((PyObject*)Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":399 - * check_excs.append((exc_break_user, True)) - * - * exc_break_caught = main_debugger.get_exception_breakpoint( # <<<<<<<<<<<<<< - * exception, main_debugger.break_on_caught_exceptions) - * if exc_break_caught is not None: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_get_exception_breakpoint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":400 - * - * exc_break_caught = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_caught_exceptions) # <<<<<<<<<<<<<< - * if exc_break_caught is not None: - * check_excs.append((exc_break_caught, False)) +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 400, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_4 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_exception, __pyx_t_14}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_exception, __pyx_t_14}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } else - #endif - { - __pyx_t_3 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_exception); - __Pyx_GIVEREF(__pyx_v_exception); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_12, __pyx_v_exception); - __Pyx_GIVEREF(__pyx_t_14); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_12, __pyx_t_14); - __pyx_t_14 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_exc_break_caught = __pyx_t_5; - __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":401 - * exc_break_caught = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_caught_exceptions) - * if exc_break_caught is not None: # <<<<<<<<<<<<<< - * check_excs.append((exc_break_caught, False)) - * - */ - __pyx_t_7 = (__pyx_v_exc_break_caught != Py_None); - __pyx_t_2 = (__pyx_t_7 != 0); - if (__pyx_t_2) { +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_2__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self)); - /* "_pydevd_bundle/pydevd_cython.pyx":402 - * exception, main_debugger.break_on_caught_exceptions) - * if exc_break_caught is not None: - * check_excs.append((exc_break_caught, False)) # <<<<<<<<<<<<<< - * - * for exc_break, is_user_uncaught in check_excs: - */ - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 402, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_exc_break_caught); - __Pyx_GIVEREF(__pyx_v_exc_break_caught); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_exc_break_caught); - __Pyx_INCREF(Py_False); - __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_5, 1, Py_False); - __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_check_excs, __pyx_t_5); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":401 - * exc_break_caught = main_debugger.get_exception_breakpoint( - * exception, main_debugger.break_on_caught_exceptions) - * if exc_break_caught is not None: # <<<<<<<<<<<<<< - * check_excs.append((exc_break_caught, False)) - * - */ - } +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_2__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":404 - * check_excs.append((exc_break_caught, False)) - * - * for exc_break, is_user_uncaught in check_excs: # <<<<<<<<<<<<<< - * # Initially mark that it should stop and then go into exclusions. - * should_stop = True + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.try_except_infos,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: */ - __pyx_t_5 = __pyx_v_check_excs; __Pyx_INCREF(__pyx_t_5); __pyx_t_16 = 0; - for (;;) { - if (__pyx_t_16 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_16); __Pyx_INCREF(__pyx_t_1); __pyx_t_16++; if (unlikely(0 < 0)) __PYX_ERR(0, 404, __pyx_L1_error) - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_16); __pyx_t_16++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 404, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_14 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_14); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L32_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 1; __pyx_t_14 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_14)) goto __pyx_L32_unpacking_failed; - __Pyx_GOTREF(__pyx_t_14); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_4), 2) < 0) __PYX_ERR(0, 404, __pyx_L1_error) - __pyx_t_6 = NULL; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L33_unpacking_done; - __pyx_L32_unpacking_failed:; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 404, __pyx_L1_error) - __pyx_L33_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_exc_break, __pyx_t_3); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_is_user_uncaught, __pyx_t_14); - __pyx_t_14 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->try_except_infos); + __Pyx_GIVEREF(__pyx_v_self->try_except_infos); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->try_except_infos)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":406 - * for exc_break, is_user_uncaught in check_excs: - * # Initially mark that it should stop and then go into exclusions. - * should_stop = True # <<<<<<<<<<<<<< - * - * if main_debugger.exclude_exception_by_filter(exc_break, trace): + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) */ - __pyx_v_should_stop = 1; + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":408 - * should_stop = True - * - * if main_debugger.exclude_exception_by_filter(exc_break, trace): # <<<<<<<<<<<<<< - * pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) - * should_stop = False + /* "(tree fragment)":7 + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_exclude_exception_by_filter); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_3 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_14)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_exc_break, __pyx_v_trace}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_exc_break, __pyx_v_trace}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_4 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_exc_break); - __Pyx_GIVEREF(__pyx_v_exc_break); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_v_exc_break); - __Pyx_INCREF(__pyx_v_trace); - __Pyx_GIVEREF(__pyx_v_trace); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, __pyx_v_trace); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { + __pyx_t_2 = (__pyx_v__dict != Py_None); + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":409 - * - * if main_debugger.exclude_exception_by_filter(exc_break, trace): - * pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) # <<<<<<<<<<<<<< - * should_stop = False - * + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_debug); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_co_name); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_INCREF(__pyx_v_exception); - __Pyx_GIVEREF(__pyx_v_exception); - PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_exception); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_13); - __pyx_t_3 = 0; - __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyString_Format(__pyx_kp_s_Ignore_exception_s_in_library_s, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_1 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_14, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 409, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":410 - * if main_debugger.exclude_exception_by_filter(exc_break, trace): - * pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) - * should_stop = False # <<<<<<<<<<<<<< - * - * elif exc_break.condition is not None and \ + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.try_except_infos is not None */ - __pyx_v_should_stop = 0; + __pyx_v_use_setstate = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":408 - * should_stop = True - * - * if main_debugger.exclude_exception_by_filter(exc_break, trace): # <<<<<<<<<<<<<< - * pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) - * should_stop = False + /* "(tree fragment)":7 + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True */ - goto __pyx_L34; - } + goto __pyx_L3; + } - /* "_pydevd_bundle/pydevd_cython.pyx":412 - * should_stop = False - * - * elif exc_break.condition is not None and \ # <<<<<<<<<<<<<< - * not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - * should_stop = False + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.try_except_infos is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_condition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 412, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = (__pyx_t_1 != Py_None); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_8 = (__pyx_t_7 != 0); - if (__pyx_t_8) { - } else { - __pyx_t_2 = __pyx_t_8; - goto __pyx_L35_bool_binop_done; - } + /*else*/ { + __pyx_t_2 = (__pyx_v_self->try_except_infos != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_2; + } + __pyx_L3:; - /* "_pydevd_bundle/pydevd_cython.pyx":413 - * - * elif exc_break.condition is not None and \ - * not main_debugger.handle_breakpoint_condition(info, exc_break, frame): # <<<<<<<<<<<<<< - * should_stop = False - * + /* "(tree fragment)":12 + * else: + * use_setstate = self.try_except_infos is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_handle_breakpoint_condition); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_13 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_13, ((PyObject *)__pyx_v_info), __pyx_v_exc_break, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_13, ((PyObject *)__pyx_v_info), __pyx_v_exc_break, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_14 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (__pyx_t_13) { - __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); __pyx_t_13 = NULL; - } - __Pyx_INCREF(((PyObject *)__pyx_v_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_info)); - PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_12, ((PyObject *)__pyx_v_info)); - __Pyx_INCREF(__pyx_v_exc_break); - __Pyx_GIVEREF(__pyx_v_exc_break); - PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_12, __pyx_v_exc_break); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_12, __pyx_v_frame); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = ((!__pyx_t_8) != 0); - __pyx_t_2 = __pyx_t_7; - __pyx_L35_bool_binop_done:; + if (__pyx_v_use_setstate) { - /* "_pydevd_bundle/pydevd_cython.pyx":412 - * should_stop = False - * - * elif exc_break.condition is not None and \ # <<<<<<<<<<<<<< - * not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - * should_stop = False + /* "(tree fragment)":13 + * use_setstate = self.try_except_infos is not None + * if use_setstate: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) */ - if (__pyx_t_2) { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_230645316); + __Pyx_GIVEREF(__pyx_int_230645316); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_230645316)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":414 - * elif exc_break.condition is not None and \ - * not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - * should_stop = False # <<<<<<<<<<<<<< - * - * elif is_user_uncaught: + /* "(tree fragment)":12 + * else: + * use_setstate = self.try_except_infos is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: */ - __pyx_v_should_stop = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":412 - * should_stop = False - * - * elif exc_break.condition is not None and \ # <<<<<<<<<<<<<< - * not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - * should_stop = False + /* "(tree fragment)":15 + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) */ - goto __pyx_L34; - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_230645316); + __Pyx_GIVEREF(__pyx_int_230645316); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_230645316)) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":416 - * should_stop = False - * - * elif is_user_uncaught: # <<<<<<<<<<<<<< - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_is_user_uncaught); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 416, __pyx_L1_error) - if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":418 - * elif is_user_uncaught: - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False # <<<<<<<<<<<<<< - * if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - */ - __pyx_v_should_stop = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":419 - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False - * if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ # <<<<<<<<<<<<<< - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - * # User uncaught means that we're currently in user code but the code - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_v_frame, __pyx_t_13, Py_True}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_v_frame, __pyx_t_13, Py_True}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else - #endif - { - __pyx_t_3 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_14); __pyx_t_14 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_12, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_12, __pyx_t_13); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_12, Py_True); - __pyx_t_13 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_8 = ((!__pyx_t_7) != 0); - if (__pyx_t_8) { - } else { - __pyx_t_2 = __pyx_t_8; - goto __pyx_L38_bool_binop_done; - } + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":420 - * should_stop = False - * if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): # <<<<<<<<<<<<<< - * # User uncaught means that we're currently in user code but the code - * # up the stack is library code. +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = (__pyx_t_1 == Py_None); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = (__pyx_t_8 != 0); - if (!__pyx_t_7) { - } else { - __pyx_t_2 = __pyx_t_7; - goto __pyx_L38_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_f_code); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_3, __pyx_t_13, Py_True}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_14, __pyx_t_3, __pyx_t_13, Py_True}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } else - #endif - { - __pyx_t_17 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_14); __pyx_t_14 = NULL; - } - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_12, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_12, __pyx_t_13); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_17, 2+__pyx_t_12, Py_True); - __pyx_t_3 = 0; - __pyx_t_13 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 420, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_2 = __pyx_t_7; - __pyx_L38_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":419 - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False - * if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ # <<<<<<<<<<<<<< - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - * # User uncaught means that we're currently in user code but the code - */ - if (__pyx_t_2) { +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_4__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v_self), __pyx_v___pyx_state); - /* "_pydevd_bundle/pydevd_cython.pyx":423 - * # User uncaught means that we're currently in user code but the code - * # up the stack is library code. - * exc_info = self.exc_info # <<<<<<<<<<<<<< - * if not exc_info: - * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - */ - __pyx_t_1 = __pyx_v_self->exc_info; - __Pyx_INCREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_exc_info, __pyx_t_1); - __pyx_t_1 = 0; + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":424 - * # up the stack is library code. - * exc_info = self.exc_info - * if not exc_info: # <<<<<<<<<<<<<< - * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - * else: - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exc_info); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 424, __pyx_L1_error) - __pyx_t_7 = ((!__pyx_t_2) != 0); - if (__pyx_t_7) { - - /* "_pydevd_bundle/pydevd_cython.pyx":425 - * exc_info = self.exc_info - * if not exc_info: - * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) # <<<<<<<<<<<<<< - * else: - * lines = exc_info[2] - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_17 = PySet_New(0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - if (PySet_Add(__pyx_t_17, __pyx_t_4) < 0) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_arg); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_17); - __pyx_t_1 = 0; - __pyx_t_17 = 0; - __Pyx_DECREF_SET(__pyx_v_exc_info, __pyx_t_4); - __pyx_t_4 = 0; +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_4__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":424 - * # up the stack is library code. - * exc_info = self.exc_info - * if not exc_info: # <<<<<<<<<<<<<< - * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - * else: + /* "(tree fragment)":17 + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - goto __pyx_L41; - } + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExceptContainerObj__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":427 - * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - * else: - * lines = exc_info[2] # <<<<<<<<<<<<<< - * lines.add(frame.f_lineno) - * exc_info = (arg, frame.f_lineno, lines) + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) */ - /*else*/ { - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_exc_info, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF_SET(__pyx_v_lines, __pyx_t_4); - __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":428 - * else: - * lines = exc_info[2] - * lines.add(frame.f_lineno) # <<<<<<<<<<<<<< - * exc_info = (arg, frame.f_lineno, lines) - * self.exc_info = exc_info - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_lines, __pyx_n_s_add); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); - } - } - __pyx_t_4 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_17, __pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_1); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython._TryExceptContainerObj.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":429 - * lines = exc_info[2] - * lines.add(frame.f_lineno) - * exc_info = (arg, frame.f_lineno, lines) # <<<<<<<<<<<<<< - * self.exc_info = exc_info - * else: +/* "_pydevd_bundle/pydevd_cython.pyx":470 + * cdef int should_skip + * cdef object exc_info + * def __init__(self, tuple args): # <<<<<<<<<<<<<< + * self._args = args # In the cython version we don't need to pass the frame + * self.should_skip = -1 # On cythonized version, put in instance. */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_v_arg); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_4); - __Pyx_INCREF(__pyx_v_lines); - __Pyx_GIVEREF(__pyx_v_lines); - PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_v_lines); - __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_exc_info, __pyx_t_17); - __pyx_t_17 = 0; - } - __pyx_L41:; - /* "_pydevd_bundle/pydevd_cython.pyx":430 - * lines.add(frame.f_lineno) - * exc_info = (arg, frame.f_lineno, lines) - * self.exc_info = exc_info # <<<<<<<<<<<<<< - * else: - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - */ - __Pyx_INCREF(__pyx_v_exc_info); - __Pyx_GIVEREF(__pyx_v_exc_info); - __Pyx_GOTREF(__pyx_v_self->exc_info); - __Pyx_DECREF(__pyx_v_self->exc_info); - __pyx_v_self->exc_info = __pyx_v_exc_info; +/* Python wrapper */ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_args = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 470, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 470, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + } + __pyx_v_args = ((PyObject*)values[0]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 470, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 470, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args); - /* "_pydevd_bundle/pydevd_cython.pyx":419 - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False - * if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ # <<<<<<<<<<<<<< - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - * # User uncaught means that we're currently in user code but the code - */ - } + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":416 - * should_stop = False - * - * elif is_user_uncaught: # <<<<<<<<<<<<<< - * # Note: we don't stop here, we just collect the exc_info to use later on... - * should_stop = False - */ - goto __pyx_L34; - } +static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":433 - * else: - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised and not just_raised(trace.tb_next): - * # In this case we never stop if it was just raised, so, to know if it was the first we + /* "_pydevd_bundle/pydevd_cython.pyx":471 + * cdef object exc_info + * def __init__(self, tuple args): + * self._args = args # In the cython version we don't need to pass the frame # <<<<<<<<<<<<<< + * self.should_skip = -1 # On cythonized version, put in instance. + * self.exc_info = () */ - /*else*/ { - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_notify_on_first_raise_only); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L43_bool_binop_done; - } + __Pyx_INCREF(__pyx_v_args); + __Pyx_GIVEREF(__pyx_v_args); + __Pyx_GOTREF(__pyx_v_self->_args); + __Pyx_DECREF(__pyx_v_self->_args); + __pyx_v_self->_args = __pyx_v_args; - /* "_pydevd_bundle/pydevd_cython.pyx":434 - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ - * and not was_just_raised and not just_raised(trace.tb_next): # <<<<<<<<<<<<<< - * # In this case we never stop if it was just raised, so, to know if it was the first we - * # need to check if we're in the 2nd method. + /* "_pydevd_bundle/pydevd_cython.pyx":472 + * def __init__(self, tuple args): + * self._args = args # In the cython version we don't need to pass the frame + * self.should_skip = -1 # On cythonized version, put in instance. # <<<<<<<<<<<<<< + * self.exc_info = () + * # ELSE */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - - /* "_pydevd_bundle/pydevd_cython.pyx":433 - * else: - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised and not just_raised(trace.tb_next): - * # In this case we never stop if it was just raised, so, to know if it was the first we - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 433, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L43_bool_binop_done; - } + __pyx_v_self->should_skip = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":434 - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ - * and not was_just_raised and not just_raised(trace.tb_next): # <<<<<<<<<<<<<< - * # In this case we never stop if it was just raised, so, to know if it was the first we - * # need to check if we're in the 2nd method. + /* "_pydevd_bundle/pydevd_cython.pyx":473 + * self._args = args # In the cython version we don't need to pass the frame + * self.should_skip = -1 # On cythonized version, put in instance. + * self.exc_info = () # <<<<<<<<<<<<<< + * # ELSE + * # should_skip = -1 # Default value in class (put in instance on set). */ - __pyx_t_2 = ((!(__pyx_v_was_just_raised != 0)) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L43_bool_binop_done; - } - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_just_raised); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_17 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_13, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 434, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_8 = ((!__pyx_t_2) != 0); - __pyx_t_7 = __pyx_t_8; - __pyx_L43_bool_binop_done:; + __Pyx_INCREF(__pyx_empty_tuple); + __Pyx_GIVEREF(__pyx_empty_tuple); + __Pyx_GOTREF(__pyx_v_self->exc_info); + __Pyx_DECREF(__pyx_v_self->exc_info); + __pyx_v_self->exc_info = __pyx_empty_tuple; - /* "_pydevd_bundle/pydevd_cython.pyx":433 - * else: - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised and not just_raised(trace.tb_next): - * # In this case we never stop if it was just raised, so, to know if it was the first we + /* "_pydevd_bundle/pydevd_cython.pyx":470 + * cdef int should_skip + * cdef object exc_info + * def __init__(self, tuple args): # <<<<<<<<<<<<<< + * self._args = args # In the cython version we don't need to pass the frame + * self.should_skip = -1 # On cythonized version, put in instance. */ - if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":437 - * # In this case we never stop if it was just raised, so, to know if it was the first we - * # need to check if we're in the 2nd method. - * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception # <<<<<<<<<<<<<< + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":491 + * # ENDIF + * + * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].set_suspend(*args, **kwargs) * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ */ - __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":433 - * else: - * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - * if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised and not just_raised(trace.tb_next): - * # In this case we never stop if it was just raised, so, to know if it was the first we - */ - goto __pyx_L42; - } +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend = {"set_suspend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_args = 0; + PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_suspend (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "set_suspend", 1))) return NULL; + if (unlikely(__pyx_kwds)) { + __pyx_v_kwargs = __Pyx_KwargsAsDict_VARARGS(__pyx_kwds, __pyx_kwvalues); + if (unlikely(!__pyx_v_kwargs)) return NULL; + __Pyx_GOTREF(__pyx_v_kwargs); + } else { + __pyx_v_kwargs = PyDict_New(); + if (unlikely(!__pyx_v_kwargs)) return NULL; + __Pyx_GOTREF(__pyx_v_kwargs); + } + __Pyx_INCREF(__pyx_args); + __pyx_v_args = __pyx_args; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_2set_suspend(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs); - /* "_pydevd_bundle/pydevd_cython.pyx":439 - * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception - * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised: - * should_stop = False # I.e.: we stop only when it was just raised - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_notify_on_first_raise_only); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L47_bool_binop_done; - } + /* function exit code */ + __Pyx_DECREF(__pyx_v_args); + __Pyx_DECREF(__pyx_v_kwargs); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_2set_suspend(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("set_suspend", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":440 + /* "_pydevd_bundle/pydevd_cython.pyx":492 * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ - * and not was_just_raised: # <<<<<<<<<<<<<< - * should_stop = False # I.e.: we stop only when it was just raised + * def set_suspend(self, *args, **kwargs): + * self._args[0].set_suspend(*args, **kwargs) # <<<<<<<<<<<<<< * + * def do_wait_suspend(self, *args, **kwargs): */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 492, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":439 - * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception + /* "_pydevd_bundle/pydevd_cython.pyx":491 + * # ENDIF + * + * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].set_suspend(*args, **kwargs) * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised: - * should_stop = False # I.e.: we stop only when it was just raised */ - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 439, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_2 = ((!__pyx_t_8) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L47_bool_binop_done; - } - /* "_pydevd_bundle/pydevd_cython.pyx":440 + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.set_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":494 + * self._args[0].set_suspend(*args, **kwargs) * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ - * and not was_just_raised: # <<<<<<<<<<<<<< - * should_stop = False # I.e.: we stop only when it was just raised + * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].do_wait_suspend(*args, **kwargs) * */ - __pyx_t_2 = ((!(__pyx_v_was_just_raised != 0)) != 0); - __pyx_t_7 = __pyx_t_2; - __pyx_L47_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":439 - * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception - * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised: - * should_stop = False # I.e.: we stop only when it was just raised - */ - if (__pyx_t_7) { +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend = {"do_wait_suspend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_args = 0; + PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("do_wait_suspend (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "do_wait_suspend", 1))) return NULL; + if (unlikely(__pyx_kwds)) { + __pyx_v_kwargs = __Pyx_KwargsAsDict_VARARGS(__pyx_kwds, __pyx_kwvalues); + if (unlikely(!__pyx_v_kwargs)) return NULL; + __Pyx_GOTREF(__pyx_v_kwargs); + } else { + __pyx_v_kwargs = PyDict_New(); + if (unlikely(!__pyx_v_kwargs)) return NULL; + __Pyx_GOTREF(__pyx_v_kwargs); + } + __Pyx_INCREF(__pyx_args); + __pyx_v_args = __pyx_args; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_4do_wait_suspend(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs); - /* "_pydevd_bundle/pydevd_cython.pyx":441 - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ - * and not was_just_raised: - * should_stop = False # I.e.: we stop only when it was just raised # <<<<<<<<<<<<<< - * - * elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: - */ - __pyx_v_should_stop = 0; + /* function exit code */ + __Pyx_DECREF(__pyx_v_args); + __Pyx_DECREF(__pyx_v_kwargs); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":439 - * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception - * - * elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ # <<<<<<<<<<<<<< - * and not was_just_raised: - * should_stop = False # I.e.: we stop only when it was just raised - */ - goto __pyx_L42; - } +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_4do_wait_suspend(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("do_wait_suspend", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":443 - * should_stop = False # I.e.: we stop only when it was just raised + /* "_pydevd_bundle/pydevd_cython.pyx":495 * - * elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: # <<<<<<<<<<<<<< - * # Option: Don't break if an exception is caught in the same function from which it is thrown - * should_stop = False - */ - __pyx_t_2 = (__pyx_v_was_just_raised != 0); - if (__pyx_t_2) { - } else { - __pyx_t_7 = __pyx_t_2; - goto __pyx_L50_bool_binop_done; - } - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_7 = __pyx_t_2; - __pyx_L50_bool_binop_done:; - if (__pyx_t_7) { - - /* "_pydevd_bundle/pydevd_cython.pyx":445 - * elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: - * # Option: Don't break if an exception is caught in the same function from which it is thrown - * should_stop = False # <<<<<<<<<<<<<< + * def do_wait_suspend(self, *args, **kwargs): + * self._args[0].do_wait_suspend(*args, **kwargs) # <<<<<<<<<<<<<< * - * if should_stop: + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - __pyx_v_should_stop = 0; + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 495, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":443 - * should_stop = False # I.e.: we stop only when it was just raised + /* "_pydevd_bundle/pydevd_cython.pyx":494 + * self._args[0].set_suspend(*args, **kwargs) + * + * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].do_wait_suspend(*args, **kwargs) * - * elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: # <<<<<<<<<<<<<< - * # Option: Don't break if an exception is caught in the same function from which it is thrown - * should_stop = False */ - } - __pyx_L42:; - } - __pyx_L34:; - /* "_pydevd_bundle/pydevd_cython.pyx":447 - * should_stop = False - * - * if should_stop: # <<<<<<<<<<<<<< - * exception_breakpoint = exc_break - * try: - */ - __pyx_t_7 = (__pyx_v_should_stop != 0); - if (__pyx_t_7) { + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.do_wait_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":448 +/* "_pydevd_bundle/pydevd_cython.pyx":498 * - * if should_stop: - * exception_breakpoint = exc_break # <<<<<<<<<<<<<< - * try: - * info.pydev_message = exc_break.qname + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef tuple exc_info; */ - __Pyx_INCREF(__pyx_v_exc_break); - __Pyx_DECREF_SET(__pyx_v_exception_breakpoint, __pyx_v_exc_break); - /* "_pydevd_bundle/pydevd_cython.pyx":449 - * if should_stop: - * exception_breakpoint = exc_break - * try: # <<<<<<<<<<<<<< - * info.pydev_message = exc_break.qname - * except: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_9); - /*try:*/ { +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception = {"trace_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_frame = 0; + PyObject *__pyx_v_event = 0; + PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("trace_exception (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, 1); __PYX_ERR(0, 498, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, 2); __PYX_ERR(0, 498, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "trace_exception") < 0)) __PYX_ERR(0, 498, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_frame = values[0]; + __pyx_v_event = ((PyObject*)values[1]); + __pyx_v_arg = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("trace_exception", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 498, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_event), (&PyString_Type), 1, "event", 1))) __PYX_ERR(0, 498, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_6trace_exception(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); - /* "_pydevd_bundle/pydevd_cython.pyx":450 - * exception_breakpoint = exc_break - * try: - * info.pydev_message = exc_break.qname # <<<<<<<<<<<<<< - * except: - * info.pydev_message = exc_break.qname.encode('utf-8') - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_qname); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 450, __pyx_L53_error) - __Pyx_GOTREF(__pyx_t_17); - if (!(likely(PyString_CheckExact(__pyx_t_17))||((__pyx_t_17) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_17)->tp_name), 0))) __PYX_ERR(0, 450, __pyx_L53_error) - __Pyx_GIVEREF(__pyx_t_17); - __Pyx_GOTREF(__pyx_v_info->pydev_message); - __Pyx_DECREF(__pyx_v_info->pydev_message); - __pyx_v_info->pydev_message = ((PyObject*)__pyx_t_17); - __pyx_t_17 = 0; + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":449 - * if should_stop: - * exception_breakpoint = exc_break - * try: # <<<<<<<<<<<<<< - * info.pydev_message = exc_break.qname - * except: - */ - } - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L60_try_end; - __pyx_L53_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_6trace_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { + int __pyx_v_should_stop; + PyObject *__pyx_v_exc_info = 0; + PyObject *__pyx_v_frame_skips_cache = NULL; + PyObject *__pyx_v_frame_cache_key = NULL; + PyObject *__pyx_v_custom_key = NULL; + PyObject *__pyx_v_container_obj = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + PyObject *(*__pyx_t_9)(PyObject *); + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("trace_exception", 0); + __Pyx_INCREF(__pyx_v_frame); - /* "_pydevd_bundle/pydevd_cython.pyx":451 - * try: - * info.pydev_message = exc_break.qname - * except: # <<<<<<<<<<<<<< - * info.pydev_message = exc_break.qname.encode('utf-8') - * break + /* "_pydevd_bundle/pydevd_cython.pyx":504 + * # def trace_exception(self, frame, event, arg): + * # ENDIF + * if event == "exception": # <<<<<<<<<<<<<< + * should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) + * self.exc_info = exc_info */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(0, 451, __pyx_L55_except_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 504, __pyx_L1_error) + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":452 - * info.pydev_message = exc_break.qname - * except: - * info.pydev_message = exc_break.qname.encode('utf-8') # <<<<<<<<<<<<<< - * break + /* "_pydevd_bundle/pydevd_cython.pyx":505 + * # ENDIF + * if event == "exception": + * should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) # <<<<<<<<<<<<<< + * self.exc_info = exc_info * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_qname); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L55_except_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_encode); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 452, __pyx_L55_except_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - } - } - __pyx_t_13 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_3, __pyx_kp_s_utf_8) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_kp_s_utf_8); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 452, __pyx_L55_except_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (!(likely(PyString_CheckExact(__pyx_t_13))||((__pyx_t_13) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_13)->tp_name), 0))) __PYX_ERR(0, 452, __pyx_L55_except_error) - __Pyx_GIVEREF(__pyx_t_13); - __Pyx_GOTREF(__pyx_v_info->pydev_message); - __Pyx_DECREF(__pyx_v_info->pydev_message); - __pyx_v_info->pydev_message = ((PyObject*)__pyx_t_13); - __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L54_exception_handled; - } - __pyx_L55_except_error:; - - /* "_pydevd_bundle/pydevd_cython.pyx":449 - * if should_stop: - * exception_breakpoint = exc_break - * try: # <<<<<<<<<<<<<< - * info.pydev_message = exc_break.qname - * except: - */ - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9); - goto __pyx_L1_error; - __pyx_L54_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9); - __pyx_L60_try_end:; - } + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 505, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 505, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 505, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_7, __pyx_t_4, __pyx_t_5, __pyx_v_frame, __pyx_t_6, __pyx_v_arg, __pyx_v_self->exc_info}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 6+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 505, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_6 = PyList_GET_ITEM(sequence, 1); + __pyx_t_5 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); + index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_6 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 2; __pyx_t_5 = __pyx_t_9(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_4), 3) < 0) __PYX_ERR(0, 505, __pyx_L1_error) + __pyx_t_9 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 505, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 505, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_5))) __PYX_ERR(0, 505, __pyx_L1_error) + __pyx_v_should_stop = __pyx_t_1; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_v_exc_info = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":453 - * except: - * info.pydev_message = exc_break.qname.encode('utf-8') - * break # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":506 + * if event == "exception": + * should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) + * self.exc_info = exc_info # <<<<<<<<<<<<<< * - * if should_stop: + * if should_stop: */ - goto __pyx_L31_break; + __Pyx_INCREF(__pyx_v_exc_info); + __Pyx_GIVEREF(__pyx_v_exc_info); + __Pyx_GOTREF(__pyx_v_self->exc_info); + __Pyx_DECREF(__pyx_v_self->exc_info); + __pyx_v_self->exc_info = __pyx_v_exc_info; - /* "_pydevd_bundle/pydevd_cython.pyx":447 - * should_stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":508 + * self.exc_info = exc_info * - * if should_stop: # <<<<<<<<<<<<<< - * exception_breakpoint = exc_break - * try: + * if should_stop: # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch */ - } + if (__pyx_v_should_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":404 - * check_excs.append((exc_break_caught, False)) + /* "_pydevd_bundle/pydevd_cython.pyx":509 * - * for exc_break, is_user_uncaught in check_excs: # <<<<<<<<<<<<<< - * # Initially mark that it should stop and then go into exclusions. - * should_stop = True - */ - } - __pyx_L31_break:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_L22:; - - /* "_pydevd_bundle/pydevd_cython.pyx":374 - * pydev_log.exception() + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * if not should_stop: # <<<<<<<<<<<<<< - * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). - * if exception == SystemExit and main_debugger.ignore_system_exit_code(value): */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 509, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 509, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_7, __pyx_t_6, __pyx_t_3, __pyx_v_frame, __pyx_v_arg, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 5+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 509, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":455 - * break + /* "_pydevd_bundle/pydevd_cython.pyx":510 + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch # <<<<<<<<<<<<<< * - * if should_stop: # <<<<<<<<<<<<<< - * # Always add exception to frame (must remove later after we proceed). - * add_exception_to_frame(frame, (exception, value, trace)) + * elif event == "return": */ - __pyx_t_7 = (__pyx_v_should_stop != 0); - if (__pyx_t_7) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":457 - * if should_stop: - * # Always add exception to frame (must remove later after we proceed). - * add_exception_to_frame(frame, (exception, value, trace)) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":509 + * + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * if exception_breakpoint is not None and exception_breakpoint.expression is not None: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_add_exception_to_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_exception); - __Pyx_GIVEREF(__pyx_v_exception); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_exception); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_value); - __Pyx_INCREF(__pyx_v_trace); - __Pyx_GIVEREF(__pyx_v_trace); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_trace); - __pyx_t_17 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_17)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_17); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_v_frame, __pyx_t_4}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_17, __pyx_v_frame, __pyx_t_4}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 2+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_13 = PyTuple_New(2+__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - if (__pyx_t_17) { - __Pyx_GIVEREF(__pyx_t_17); PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_17); __pyx_t_17 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_13, 0+__pyx_t_12, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_13, 1+__pyx_t_12, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_13, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 457, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":459 - * add_exception_to_frame(frame, (exception, value, trace)) - * - * if exception_breakpoint is not None and exception_breakpoint.expression is not None: # <<<<<<<<<<<<<< - * main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":508 + * self.exc_info = exc_info * + * if should_stop: # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch */ - __pyx_t_2 = (__pyx_v_exception_breakpoint != Py_None); - __pyx_t_8 = (__pyx_t_2 != 0); - if (__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L65_bool_binop_done; - } - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_exception_breakpoint, __pyx_n_s_expression); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = (__pyx_t_5 != Py_None); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_2 = (__pyx_t_8 != 0); - __pyx_t_7 = __pyx_t_2; - __pyx_L65_bool_binop_done:; - if (__pyx_t_7) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":460 - * - * if exception_breakpoint is not None and exception_breakpoint.expression is not None: - * main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) # <<<<<<<<<<<<<< - * - * return should_stop, frame + /* "_pydevd_bundle/pydevd_cython.pyx":504 + * # def trace_exception(self, frame, event, arg): + * # ENDIF + * if event == "exception": # <<<<<<<<<<<<<< + * should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) + * self.exc_info = exc_info */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_handle_breakpoint_expression); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = NULL; - __pyx_t_12 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_v_exception_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_frame}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[4] = {__pyx_t_13, __pyx_v_exception_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_frame}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_12, 3+__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else - #endif - { - __pyx_t_4 = PyTuple_New(3+__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_13) { - __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_13); __pyx_t_13 = NULL; - } - __Pyx_INCREF(__pyx_v_exception_breakpoint); - __Pyx_GIVEREF(__pyx_v_exception_breakpoint); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_12, __pyx_v_exception_breakpoint); - __Pyx_INCREF(((PyObject *)__pyx_v_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_info)); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_12, ((PyObject *)__pyx_v_info)); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_12, __pyx_v_frame); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L3; + } - /* "_pydevd_bundle/pydevd_cython.pyx":459 - * add_exception_to_frame(frame, (exception, value, trace)) - * - * if exception_breakpoint is not None and exception_breakpoint.expression is not None: # <<<<<<<<<<<<<< - * main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":512 + * return self.trace_dispatch * + * elif event == "return": # <<<<<<<<<<<<<< + * exc_info = self.exc_info + * if exc_info and arg is None: */ - } + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 512, __pyx_L1_error) + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":455 - * break + /* "_pydevd_bundle/pydevd_cython.pyx":513 * - * if should_stop: # <<<<<<<<<<<<<< - * # Always add exception to frame (must remove later after we proceed). - * add_exception_to_frame(frame, (exception, value, trace)) + * elif event == "return": + * exc_info = self.exc_info # <<<<<<<<<<<<<< + * if exc_info and arg is None: + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] */ - } + if (!(likely(PyTuple_CheckExact(__pyx_v_self->exc_info))||((__pyx_v_self->exc_info) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_self->exc_info))) __PYX_ERR(0, 513, __pyx_L1_error) + __pyx_t_2 = __pyx_v_self->exc_info; + __Pyx_INCREF(__pyx_t_2); + __pyx_v_exc_info = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":361 - * exception, value, trace = arg - * - * if trace is not None and hasattr(trace, 'tb_next'): # <<<<<<<<<<<<<< - * # on jython trace is None on the first event and it may not have a tb_next. - * + /* "_pydevd_bundle/pydevd_cython.pyx":514 + * elif event == "return": + * exc_info = self.exc_info + * if exc_info and arg is None: # <<<<<<<<<<<<<< + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] + * custom_key = (frame_cache_key, "try_exc_info") */ + __pyx_t_10 = (__pyx_v_exc_info != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_exc_info) != 0); + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L9_bool_binop_done; } + __pyx_t_10 = (__pyx_v_arg == Py_None); + __pyx_t_1 = __pyx_t_10; + __pyx_L9_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":358 - * - * # 2 = 2 - * if info.pydev_state != 2: # and breakpoint is not None: # <<<<<<<<<<<<<< - * exception, value, trace = arg - * + /* "_pydevd_bundle/pydevd_cython.pyx":515 + * exc_info = self.exc_info + * if exc_info and arg is None: + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] # <<<<<<<<<<<<<< + * custom_key = (frame_cache_key, "try_exc_info") + * container_obj = frame_skips_cache.get(custom_key) */ - } + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 515, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 515, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_v_frame_skips_cache = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_frame_cache_key = __pyx_t_5; + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":462 - * main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) - * - * return should_stop, frame # <<<<<<<<<<<<<< - * - * def handle_user_exception(self, frame): + /* "_pydevd_bundle/pydevd_cython.pyx":516 + * if exc_info and arg is None: + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] + * custom_key = (frame_cache_key, "try_exc_info") # <<<<<<<<<<<<<< + * container_obj = frame_skips_cache.get(custom_key) + * if container_obj is None: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_should_stop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 462, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 462, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_frame); - __pyx_t_5 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_frame_cache_key); + __Pyx_GIVEREF(__pyx_v_frame_cache_key); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_frame_cache_key)) __PYX_ERR(0, 516, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_try_exc_info); + __Pyx_GIVEREF(__pyx_n_s_try_exc_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_try_exc_info)) __PYX_ERR(0, 516, __pyx_L1_error); + __pyx_v_custom_key = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":343 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _should_stop_on_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef PyDBAdditionalThreadInfo info; - * cdef bint should_stop; + /* "_pydevd_bundle/pydevd_cython.pyx":517 + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] + * custom_key = (frame_cache_key, "try_exc_info") + * container_obj = frame_skips_cache.get(custom_key) # <<<<<<<<<<<<<< + * if container_obj is None: + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame_skips_cache, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_custom_key}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 517, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_container_obj = __pyx_t_5; + __pyx_t_5 = 0; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_info); - __Pyx_XDECREF(__pyx_v_check_excs); - __Pyx_XDECREF(__pyx_v_main_debugger); - __Pyx_XDECREF(__pyx_v_exception); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XDECREF(__pyx_v_trace); - __Pyx_XDECREF(__pyx_v_exception_breakpoint); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_exc_break_user); - __Pyx_XDECREF(__pyx_v_exc_break_caught); - __Pyx_XDECREF(__pyx_v_exc_break); - __Pyx_XDECREF(__pyx_v_is_user_uncaught); - __Pyx_XDECREF(__pyx_v_exc_info); - __Pyx_XDECREF(__pyx_v_lines); - __Pyx_XDECREF(__pyx_v_frame); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":518 + * custom_key = (frame_cache_key, "try_exc_info") + * container_obj = frame_skips_cache.get(custom_key) + * if container_obj is None: # <<<<<<<<<<<<<< + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + */ + __pyx_t_1 = (__pyx_v_container_obj == Py_None); + if (__pyx_t_1) { -/* "_pydevd_bundle/pydevd_cython.pyx":464 - * return should_stop, frame - * - * def handle_user_exception(self, frame): # <<<<<<<<<<<<<< - * exc_info = self.exc_info - * if exc_info: + /* "_pydevd_bundle/pydevd_cython.pyx":519 + * container_obj = frame_skips_cache.get(custom_key) + * if container_obj is None: + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() # <<<<<<<<<<<<<< + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + * frame */ + __pyx_t_5 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 519, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_container_obj, __pyx_t_5); + if (unlikely((PyObject_SetItem(__pyx_v_frame_skips_cache, __pyx_v_custom_key, __pyx_t_5) < 0))) __PYX_ERR(0, 519, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception(PyObject *__pyx_v_self, PyObject *__pyx_v_frame); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception(PyObject *__pyx_v_self, PyObject *__pyx_v_frame) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("handle_user_exception (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_user_exception(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), ((PyObject *)__pyx_v_frame)); + /* "_pydevd_bundle/pydevd_cython.pyx":518 + * custom_key = (frame_cache_key, "try_exc_info") + * container_obj = frame_skips_cache.get(custom_key) + * if container_obj is None: # <<<<<<<<<<<<<< + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":520 + * if container_obj is None: + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( # <<<<<<<<<<<<<< + * frame + * ): + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_is_unhandled_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 520, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_exc_info == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 520, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_exc_info, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_v_exc_info == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 520, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_exc_info, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_7, __pyx_v_container_obj, __pyx_t_4, __pyx_v_frame, __pyx_t_3, __pyx_t_6}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 5+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_10) { + } else { + __pyx_t_1 = __pyx_t_10; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "_pydevd_bundle/pydevd_cython.pyx":521 + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + * frame # <<<<<<<<<<<<<< + * ): + * return self.trace_dispatch + */ + __pyx_t_6 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_frame}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":520 + * if container_obj is None: + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( # <<<<<<<<<<<<<< + * frame + * ): + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 520, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __pyx_t_10; + __pyx_L13_bool_binop_done:; + if (__pyx_t_1) { + + /* "_pydevd_bundle/pydevd_cython.pyx":523 + * frame + * ): + * return self.trace_dispatch # <<<<<<<<<<<<<< + * + * return self.trace_exception + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":520 + * if container_obj is None: + * container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() + * if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( # <<<<<<<<<<<<<< + * frame + * ): + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":514 + * elif event == "return": + * exc_info = self.exc_info + * if exc_info and arg is None: # <<<<<<<<<<<<<< + * frame_skips_cache, frame_cache_key = self._args[4], self._args[5] + * custom_key = (frame_cache_key, "try_exc_info") + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":512 + * return self.trace_dispatch + * + * elif event == "return": # <<<<<<<<<<<<<< + * exc_info = self.exc_info + * if exc_info and arg is None: + */ + } + __pyx_L3:; + + /* "_pydevd_bundle/pydevd_cython.pyx":525 + * return self.trace_dispatch + * + * return self.trace_exception # <<<<<<<<<<<<<< + * + * def handle_user_exception(self, frame): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 525, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "_pydevd_bundle/pydevd_cython.pyx":498 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef tuple exc_info; + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_exc_info); + __Pyx_XDECREF(__pyx_v_frame_skips_cache); + __Pyx_XDECREF(__pyx_v_frame_cache_key); + __Pyx_XDECREF(__pyx_v_custom_key); + __Pyx_XDECREF(__pyx_v_container_obj); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":527 + * return self.trace_exception + * + * def handle_user_exception(self, frame): # <<<<<<<<<<<<<< + * exc_info = self.exc_info + * if exc_info: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception = {"handle_user_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_frame = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("handle_user_exception (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "handle_user_exception") < 0)) __PYX_ERR(0, 527, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_frame = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("handle_user_exception", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 527, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.handle_user_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_user_exception(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_frame); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -10769,66 +15251,106 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_us int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("handle_user_exception", 0); + __Pyx_RefNannySetupContext("handle_user_exception", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":465 + /* "_pydevd_bundle/pydevd_cython.pyx":528 * * def handle_user_exception(self, frame): * exc_info = self.exc_info # <<<<<<<<<<<<<< * if exc_info: - * return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + * return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) */ __pyx_t_1 = __pyx_v_self->exc_info; __Pyx_INCREF(__pyx_t_1); __pyx_v_exc_info = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":466 + /* "_pydevd_bundle/pydevd_cython.pyx":529 * def handle_user_exception(self, frame): * exc_info = self.exc_info * if exc_info: # <<<<<<<<<<<<<< - * return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + * return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) * return False */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exc_info); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 466, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_exc_info); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 529, __pyx_L1_error) if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":467 + /* "_pydevd_bundle/pydevd_cython.pyx":530 * exc_info = self.exc_info * if exc_info: - * return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) # <<<<<<<<<<<<<< + * return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) # <<<<<<<<<<<<<< * return False * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_exc_info, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 467, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 467, __pyx_L1_error) - __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_handle_exception(__pyx_v_self, __pyx_v_frame, __pyx_n_s_exception, __pyx_t_1, ((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 467, __pyx_L1_error) + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 530, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 530, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 530, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_exc_info, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_8, __pyx_t_4, __pyx_t_5, __pyx_v_frame, __pyx_t_6, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_9, 5+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":466 + /* "_pydevd_bundle/pydevd_cython.pyx":529 * def handle_user_exception(self, frame): * exc_info = self.exc_info * if exc_info: # <<<<<<<<<<<<<< - * return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + * return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) * return False */ } - /* "_pydevd_bundle/pydevd_cython.pyx":468 + /* "_pydevd_bundle/pydevd_cython.pyx":531 * if exc_info: - * return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + * return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) * return False # <<<<<<<<<<<<<< * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) @@ -10838,8 +15360,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_us __pyx_r = Py_False; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":464 - * return should_stop, frame + /* "_pydevd_bundle/pydevd_cython.pyx":527 + * return self.trace_exception * * def handle_user_exception(self, frame): # <<<<<<<<<<<<<< * exc_info = self.exc_info @@ -10851,6 +15373,10 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_us __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.handle_user_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -10860,4287 +15386,2991 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_8handle_us return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":471 +/* "_pydevd_bundle/pydevd_cython.pyx":534 * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _handle_exception(self, frame, str event, arg, str exception_type): # <<<<<<<<<<<<<< - * cdef bint stopped; - * cdef tuple abs_real_path_and_base; + * cdef get_func_name(self, frame): # <<<<<<<<<<<<<< + * cdef str func_name + * # ELSE */ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__handle_exception(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg, PyObject *__pyx_v_exception_type) { - int __pyx_v_stopped; - PyObject *__pyx_v_abs_real_path_and_base = 0; - PyObject *__pyx_v_absolute_filename = 0; - PyObject *__pyx_v_canonical_normalized_filename = 0; - PyObject *__pyx_v_filename_to_lines_where_exceptions_are_ignored = 0; - PyObject *__pyx_v_lines_ignored = 0; - PyObject *__pyx_v_frame_id_to_frame = 0; - PyObject *__pyx_v_merged = 0; - PyObject *__pyx_v_trace_obj = 0; - PyObject *__pyx_v_main_debugger = 0; - PyObject *__pyx_v_initial_trace_obj = NULL; - PyObject *__pyx_v_check_trace_obj = NULL; - PyObject *__pyx_v_curr_stat = NULL; - PyObject *__pyx_v_last_stat = NULL; - PyObject *__pyx_v_from_user_input = NULL; - PyObject *__pyx_v_exc_lineno = NULL; - PyObject *__pyx_v_line = NULL; - PyObject *__pyx_v_thread = NULL; - PyObject *__pyx_v_f = NULL; +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_get_func_name(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame) { + PyObject *__pyx_v_func_name = 0; + PyObject *__pyx_v_code_obj = NULL; + PyObject *__pyx_v_cls_name = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - int __pyx_t_4; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; - Py_ssize_t __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_t_8; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_t_16; - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - char const *__pyx_t_19; - PyObject *__pyx_t_20 = NULL; - PyObject *__pyx_t_21 = NULL; - PyObject *__pyx_t_22 = NULL; - PyObject *__pyx_t_23 = NULL; - PyObject *__pyx_t_24 = NULL; - PyObject *__pyx_t_25 = NULL; - char const *__pyx_t_26; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_handle_exception", 0); - __Pyx_INCREF(__pyx_v_frame); + __Pyx_RefNannySetupContext("get_func_name", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":485 - * # def _handle_exception(self, frame, event, arg, exception_type): - * # ENDIF - * stopped = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":539 + * # def get_func_name(self, frame): + * # ENDIF + * code_obj = frame.f_code # <<<<<<<<<<<<<< + * func_name = code_obj.co_name * try: - * # print('_handle_exception', frame.f_lineno, frame.f_code.co_name) - */ - __pyx_v_stopped = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":486 - * # ENDIF - * stopped = False - * try: # <<<<<<<<<<<<<< - * # print('_handle_exception', frame.f_lineno, frame.f_code.co_name) - * */ - /*try:*/ { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_code_obj = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":490 - * - * # We have 3 things in arg: exception type, description, traceback object - * trace_obj = arg[2] # <<<<<<<<<<<<<< - * main_debugger = self._args[0] - * + /* "_pydevd_bundle/pydevd_cython.pyx":540 + * # ENDIF + * code_obj = frame.f_code + * func_name = code_obj.co_name # <<<<<<<<<<<<<< + * try: + * cls_name = get_clsname_for_code(code_obj, frame) */ - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_arg, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 490, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_trace_obj = __pyx_t_1; - __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code_obj, __pyx_n_s_co_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_v_func_name = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":491 - * # We have 3 things in arg: exception type, description, traceback object - * trace_obj = arg[2] - * main_debugger = self._args[0] # <<<<<<<<<<<<<< - * - * initial_trace_obj = trace_obj + /* "_pydevd_bundle/pydevd_cython.pyx":541 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 491, __pyx_L4_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_main_debugger = __pyx_t_1; - __pyx_t_1 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":493 - * main_debugger = self._args[0] - * - * initial_trace_obj = trace_obj # <<<<<<<<<<<<<< - * if trace_obj.tb_next is None and trace_obj.tb_frame is frame: - * # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). + /* "_pydevd_bundle/pydevd_cython.pyx":542 + * func_name = code_obj.co_name + * try: + * cls_name = get_clsname_for_code(code_obj, frame) # <<<<<<<<<<<<<< + * if cls_name is not None: + * return "%s.%s" % (cls_name, func_name) */ - __Pyx_INCREF(__pyx_v_trace_obj); - __pyx_v_initial_trace_obj = __pyx_v_trace_obj; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 542, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_code_obj, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 542, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_cls_name = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":494 - * - * initial_trace_obj = trace_obj - * if trace_obj.tb_next is None and trace_obj.tb_frame is frame: # <<<<<<<<<<<<<< - * # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). - * pass + /* "_pydevd_bundle/pydevd_cython.pyx":543 + * try: + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: # <<<<<<<<<<<<<< + * return "%s.%s" % (cls_name, func_name) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__pyx_t_1 == Py_None); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 494, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = (__pyx_t_1 == __pyx_v_frame); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_3; - __pyx_L7_bool_binop_done:; - if (__pyx_t_2) { - goto __pyx_L6; - } + __pyx_t_8 = (__pyx_v_cls_name != Py_None); + if (__pyx_t_8) { - /* "_pydevd_bundle/pydevd_cython.pyx":499 + /* "_pydevd_bundle/pydevd_cython.pyx":544 + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: + * return "%s.%s" % (cls_name, func_name) # <<<<<<<<<<<<<< * else: - * # Get the trace_obj from where the exception was raised... - * while trace_obj.tb_next is not None: # <<<<<<<<<<<<<< - * trace_obj = trace_obj.tb_next - * + * return func_name */ - /*else*/ { - while (1) { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 499, __pyx_L4_error) + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__pyx_t_1 != Py_None); + __Pyx_INCREF(__pyx_v_cls_name); + __Pyx_GIVEREF(__pyx_v_cls_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_cls_name)) __PYX_ERR(0, 544, __pyx_L3_error); + __Pyx_INCREF(__pyx_v_func_name); + __Pyx_GIVEREF(__pyx_v_func_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_func_name)) __PYX_ERR(0, 544, __pyx_L3_error); + __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (!__pyx_t_3) break; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L7_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":500 - * # Get the trace_obj from where the exception was raised... - * while trace_obj.tb_next is not None: - * trace_obj = trace_obj.tb_next # <<<<<<<<<<<<<< - * - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: + /* "_pydevd_bundle/pydevd_cython.pyx":543 + * try: + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: # <<<<<<<<<<<<<< + * return "%s.%s" % (cls_name, func_name) + * else: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 500, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_trace_obj, __pyx_t_1); - __pyx_t_1 = 0; } - } - __pyx_L6:; - /* "_pydevd_bundle/pydevd_cython.pyx":502 - * trace_obj = trace_obj.tb_next - * - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: # <<<<<<<<<<<<<< - * for check_trace_obj in (initial_trace_obj, trace_obj): - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + /* "_pydevd_bundle/pydevd_cython.pyx":546 + * return "%s.%s" % (cls_name, func_name) + * else: + * return func_name # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_ignore_exceptions_thrown_in_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 502, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_3) { + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_func_name); + __pyx_r = __pyx_v_func_name; + goto __pyx_L7_try_return; + } - /* "_pydevd_bundle/pydevd_cython.pyx":503 - * - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: - * for check_trace_obj in (initial_trace_obj, trace_obj): # <<<<<<<<<<<<<< - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - * absolute_filename = abs_real_path_and_base[0] + /* "_pydevd_bundle/pydevd_cython.pyx":541 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_initial_trace_obj); - __Pyx_GIVEREF(__pyx_v_initial_trace_obj); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_initial_trace_obj); - __Pyx_INCREF(__pyx_v_trace_obj); - __Pyx_GIVEREF(__pyx_v_trace_obj); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_trace_obj); - __pyx_t_5 = __pyx_t_1; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (__pyx_t_6 >= 2) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 503, __pyx_L4_error) - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 503, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, __pyx_t_1); - __pyx_t_1 = 0; + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":504 - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: - * for check_trace_obj in (initial_trace_obj, trace_obj): - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) # <<<<<<<<<<<<<< - * absolute_filename = abs_real_path_and_base[0] - * canonical_normalized_filename = abs_real_path_and_base[1] + /* "_pydevd_bundle/pydevd_cython.pyx":547 + * else: + * return func_name + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * return func_name */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 504, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 504, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 504, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_abs_real_path_and_base, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 547, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_6); - /* "_pydevd_bundle/pydevd_cython.pyx":505 - * for check_trace_obj in (initial_trace_obj, trace_obj): - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - * absolute_filename = abs_real_path_and_base[0] # <<<<<<<<<<<<<< - * canonical_normalized_filename = abs_real_path_and_base[1] + /* "_pydevd_bundle/pydevd_cython.pyx":548 + * return func_name + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * return func_name * */ - if (unlikely(__pyx_v_abs_real_path_and_base == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 505, __pyx_L4_error) + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 548, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 548, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_7 = 1; } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_real_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 505, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 505, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_absolute_filename, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 548, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":506 - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - * absolute_filename = abs_real_path_and_base[0] - * canonical_normalized_filename = abs_real_path_and_base[1] # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":549 + * except: + * pydev_log.exception() + * return func_name # <<<<<<<<<<<<<< * - * filename_to_lines_where_exceptions_are_ignored = self.filename_to_lines_where_exceptions_are_ignored + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - if (unlikely(__pyx_v_abs_real_path_and_base == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 506, __pyx_L4_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_real_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 506, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 506, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_canonical_normalized_filename, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_func_name); + __pyx_r = __pyx_v_func_name; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } - /* "_pydevd_bundle/pydevd_cython.pyx":508 - * canonical_normalized_filename = abs_real_path_and_base[1] - * - * filename_to_lines_where_exceptions_are_ignored = self.filename_to_lines_where_exceptions_are_ignored # <<<<<<<<<<<<<< - * - * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_filename_to_lines_where_exceptio); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 508, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 508, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_filename_to_lines_where_exceptions_are_ignored, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":510 - * filename_to_lines_where_exceptions_are_ignored = self.filename_to_lines_where_exceptions_are_ignored - * - * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) # <<<<<<<<<<<<<< - * if lines_ignored is None: - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} + /* "_pydevd_bundle/pydevd_cython.pyx":541 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: */ - if (unlikely(__pyx_v_filename_to_lines_where_exceptions_are_ignored == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 510, __pyx_L4_error) - } - __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_filename_to_lines_where_exceptions_are_ignored, __pyx_v_canonical_normalized_filename, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 510, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_lines_ignored, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":511 - * - * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if lines_ignored is None: # <<<<<<<<<<<<<< - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} + /* "_pydevd_bundle/pydevd_cython.pyx":534 * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef get_func_name(self, frame): # <<<<<<<<<<<<<< + * cdef str func_name + * # ELSE */ - __pyx_t_3 = (__pyx_v_lines_ignored == ((PyObject*)Py_None)); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":512 - * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if lines_ignored is None: - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} # <<<<<<<<<<<<<< - * - * try: - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 512, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_lines_ignored, __pyx_t_1); - if (unlikely(__pyx_v_filename_to_lines_where_exceptions_are_ignored == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 512, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_filename_to_lines_where_exceptions_are_ignored, __pyx_v_canonical_normalized_filename, __pyx_t_1) < 0)) __PYX_ERR(0, 512, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_func_name); + __Pyx_XDECREF(__pyx_v_code_obj); + __Pyx_XDECREF(__pyx_v_cls_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":511 - * - * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if lines_ignored is None: # <<<<<<<<<<<<<< - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} +/* "_pydevd_bundle/pydevd_cython.pyx":552 * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _show_return_values(self, frame, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _show_return_values(self, frame, arg): */ - } - /* "_pydevd_bundle/pydevd_cython.pyx":514 - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} - * - * try: # <<<<<<<<<<<<<< - * curr_stat = os.stat(absolute_filename) - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__show_return_values(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_arg) { + PyObject *__pyx_v_f_locals_back = NULL; + PyObject *__pyx_v_return_values_dict = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; + char const *__pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_show_return_values", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":515 - * - * try: - * curr_stat = os.stat(absolute_filename) # <<<<<<<<<<<<<< - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":556 + * # def _show_return_values(self, frame, arg): + * # ENDIF + * try: # <<<<<<<<<<<<<< + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 515, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stat); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 515, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_absolute_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_absolute_filename); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_curr_stat, __pyx_t_1); - __pyx_t_1 = 0; + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":516 - * try: - * curr_stat = os.stat(absolute_filename) - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) # <<<<<<<<<<<<<< - * except: - * curr_stat = None + /* "_pydevd_bundle/pydevd_cython.pyx":557 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_curr_stat, __pyx_n_s_st_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_curr_stat, __pyx_n_s_st_mtime); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 516, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 516, __pyx_L15_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_8); - __pyx_t_1 = 0; - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_curr_stat, __pyx_t_7); - __pyx_t_7 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":514 - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} - * - * try: # <<<<<<<<<<<<<< - * curr_stat = os.stat(absolute_filename) - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + /* "_pydevd_bundle/pydevd_cython.pyx":558 + * try: + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) */ - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L22_try_end; - __pyx_L15_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 558, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 558, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_f_locals_back = __pyx_t_5; + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":517 - * curr_stat = os.stat(absolute_filename) - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - * except: # <<<<<<<<<<<<<< - * curr_stat = None - * + /* "_pydevd_bundle/pydevd_cython.pyx":559 + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_1) < 0) __PYX_ERR(0, 517, __pyx_L17_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = (__pyx_v_f_locals_back != Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":518 - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - * except: - * curr_stat = None # <<<<<<<<<<<<<< - * - * last_stat = self.filename_to_stat_info.get(absolute_filename) + /* "_pydevd_bundle/pydevd_cython.pyx":560 + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + * if return_values_dict is None: + * return_values_dict = {} */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_curr_stat, Py_None); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 560, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 560, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_7, Py_None}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L16_exception_handled; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 560, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - __pyx_L17_except_error:; - - /* "_pydevd_bundle/pydevd_cython.pyx":514 - * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} - * - * try: # <<<<<<<<<<<<<< - * curr_stat = os.stat(absolute_filename) - * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - */ - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L4_error; - __pyx_L16_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L22_try_end:; - } + __pyx_v_return_values_dict = __pyx_t_5; + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":520 - * curr_stat = None - * - * last_stat = self.filename_to_stat_info.get(absolute_filename) # <<<<<<<<<<<<<< - * if last_stat != curr_stat: - * self.filename_to_stat_info[absolute_filename] = curr_stat + /* "_pydevd_bundle/pydevd_cython.pyx":561 + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: # <<<<<<<<<<<<<< + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_filename_to_stat_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 520, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 520, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_absolute_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_absolute_filename); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_last_stat, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_6 = (__pyx_v_return_values_dict == Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":521 - * - * last_stat = self.filename_to_stat_info.get(absolute_filename) - * if last_stat != curr_stat: # <<<<<<<<<<<<<< - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() + /* "_pydevd_bundle/pydevd_cython.pyx":562 + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: + * return_values_dict = {} # <<<<<<<<<<<<<< + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = self.get_func_name(frame) */ - __pyx_t_1 = PyObject_RichCompare(__pyx_v_last_stat, __pyx_v_curr_stat, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L4_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 521, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 562, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_return_values_dict, __pyx_t_5); + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":522 - * last_stat = self.filename_to_stat_info.get(absolute_filename) - * if last_stat != curr_stat: - * self.filename_to_stat_info[absolute_filename] = curr_stat # <<<<<<<<<<<<<< - * lines_ignored.clear() - * try: + /* "_pydevd_bundle/pydevd_cython.pyx":563 + * if return_values_dict is None: + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict # <<<<<<<<<<<<<< + * name = self.get_func_name(frame) + * return_values_dict[name] = arg */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_filename_to_stat_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_absolute_filename, __pyx_v_curr_stat) < 0)) __PYX_ERR(0, 522, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 563, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyObject_SetItem(__pyx_v_f_locals_back, __pyx_t_5, __pyx_v_return_values_dict) < 0))) __PYX_ERR(0, 563, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":523 - * if last_stat != curr_stat: - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() # <<<<<<<<<<<<<< - * try: - * linecache.checkcache(absolute_filename) + /* "_pydevd_bundle/pydevd_cython.pyx":561 + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: # <<<<<<<<<<<<<< + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict */ - if (unlikely(__pyx_v_lines_ignored == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear"); - __PYX_ERR(0, 523, __pyx_L4_error) } - __pyx_t_13 = __Pyx_PyDict_Clear(__pyx_v_lines_ignored); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 523, __pyx_L4_error) - - /* "_pydevd_bundle/pydevd_cython.pyx":524 - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() - * try: # <<<<<<<<<<<<<< - * linecache.checkcache(absolute_filename) - * except: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { - - /* "_pydevd_bundle/pydevd_cython.pyx":525 - * lines_ignored.clear() - * try: - * linecache.checkcache(absolute_filename) # <<<<<<<<<<<<<< - * except: - * pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_linecache); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 525, __pyx_L26_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_checkcache); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 525, __pyx_L26_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_absolute_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_absolute_filename); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 525, __pyx_L26_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":524 - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() - * try: # <<<<<<<<<<<<<< - * linecache.checkcache(absolute_filename) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":564 + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = self.get_func_name(frame) # <<<<<<<<<<<<<< + * return_values_dict[name] = arg + * except: */ - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L33_try_end; - __pyx_L26_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_5 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->get_func_name(__pyx_v_self, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 564, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_v_name = __pyx_t_5; + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":526 - * try: - * linecache.checkcache(absolute_filename) - * except: # <<<<<<<<<<<<<< - * pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) - * + /* "_pydevd_bundle/pydevd_cython.pyx":565 + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = self.get_func_name(frame) + * return_values_dict[name] = arg # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(0, 526, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); + if (unlikely((PyObject_SetItem(__pyx_v_return_values_dict, __pyx_v_name, __pyx_v_arg) < 0))) __PYX_ERR(0, 565, __pyx_L6_error) - /* "_pydevd_bundle/pydevd_cython.pyx":527 - * linecache.checkcache(absolute_filename) - * except: - * pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) # <<<<<<<<<<<<<< - * - * from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + /* "_pydevd_bundle/pydevd_cython.pyx":559 + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_exception); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - __pyx_t_16 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - __pyx_t_16 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_s_Error_in_linecache_checkcache_r, __pyx_v_absolute_filename}; - __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_s_Error_in_linecache_checkcache_r, __pyx_v_absolute_filename}; - __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - { - __pyx_t_17 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_17); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_14); __pyx_t_14 = NULL; - } - __Pyx_INCREF(__pyx_kp_s_Error_in_linecache_checkcache_r); - __Pyx_GIVEREF(__pyx_kp_s_Error_in_linecache_checkcache_r); - PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_16, __pyx_kp_s_Error_in_linecache_checkcache_r); - __Pyx_INCREF(__pyx_v_absolute_filename); - __Pyx_GIVEREF(__pyx_v_absolute_filename); - PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_16, __pyx_v_absolute_filename); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_17, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - } - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L27_exception_handled; - } - __pyx_L28_except_error:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":524 - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() - * try: # <<<<<<<<<<<<<< - * linecache.checkcache(absolute_filename) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":557 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: */ - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); - goto __pyx_L4_error; - __pyx_L27_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); - __pyx_L33_try_end:; - } + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":521 - * - * last_stat = self.filename_to_stat_info.get(absolute_filename) - * if last_stat != curr_stat: # <<<<<<<<<<<<<< - * self.filename_to_stat_info[absolute_filename] = curr_stat - * lines_ignored.clear() + /* "_pydevd_bundle/pydevd_cython.pyx":566 + * name = self.get_func_name(frame) + * return_values_dict[name] = arg + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * finally: */ - } + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 566, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_7); - /* "_pydevd_bundle/pydevd_cython.pyx":529 - * pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) - * - * from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) # <<<<<<<<<<<<<< - * if from_user_input: - * merged = {} + /* "_pydevd_bundle/pydevd_cython.pyx":567 + * return_values_dict[name] = arg + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * finally: + * f_locals_back = None */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_filename_to_lines_where_exceptio); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 529, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 529, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 567, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 567, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_9 = 1; } } - __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_canonical_normalized_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_canonical_normalized_filename); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 529, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_from_user_input, __pyx_t_7); - __pyx_t_7 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":530 - * - * from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if from_user_input: # <<<<<<<<<<<<<< - * merged = {} - * merged.update(lines_ignored) - */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_user_input); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 530, __pyx_L4_error) - if (__pyx_t_2) { - - /* "_pydevd_bundle/pydevd_cython.pyx":531 - * from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if from_user_input: - * merged = {} # <<<<<<<<<<<<<< - * merged.update(lines_ignored) - * # Override what we have with the related entries that the user entered - */ - __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 531, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_merged, ((PyObject*)__pyx_t_7)); - __pyx_t_7 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":532 - * if from_user_input: - * merged = {} - * merged.update(lines_ignored) # <<<<<<<<<<<<<< - * # Override what we have with the related entries that the user entered - * merged.update(from_user_input) - */ - __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_merged, __pyx_v_lines_ignored); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 532, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 567, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L7_exception_handled; + } - /* "_pydevd_bundle/pydevd_cython.pyx":534 - * merged.update(lines_ignored) - * # Override what we have with the related entries that the user entered - * merged.update(from_user_input) # <<<<<<<<<<<<<< - * else: - * merged = lines_ignored + /* "_pydevd_bundle/pydevd_cython.pyx":557 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: */ - __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_merged, __pyx_v_from_user_input); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 534, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L4_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L11_try_end:; + } + } - /* "_pydevd_bundle/pydevd_cython.pyx":530 + /* "_pydevd_bundle/pydevd_cython.pyx":569 + * pydev_log.exception() + * finally: + * f_locals_back = None # <<<<<<<<<<<<<< * - * from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - * if from_user_input: # <<<<<<<<<<<<<< - * merged = {} - * merged.update(lines_ignored) + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - goto __pyx_L36; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":536 - * merged.update(from_user_input) - * else: - * merged = lines_ignored # <<<<<<<<<<<<<< - * - * exc_lineno = check_trace_obj.tb_lineno - */ - /*else*/ { - __Pyx_INCREF(__pyx_v_lines_ignored); - __Pyx_XDECREF_SET(__pyx_v_merged, __pyx_v_lines_ignored); - } - __pyx_L36:; + /*finally:*/ { + /*normal exit:*/{ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + goto __pyx_L5; + } + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); + } + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + goto __pyx_L1_error; + } + __pyx_L5:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":538 - * merged = lines_ignored - * - * exc_lineno = check_trace_obj.tb_lineno # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":552 * - * # print ('lines ignored', lines_ignored) + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _show_return_values(self, frame, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _show_return_values(self, frame, arg): */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_lineno); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 538, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_exc_lineno, __pyx_t_7); - __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":544 - * # print ('merged', merged, 'curr', exc_lineno) - * - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. # <<<<<<<<<<<<<< - * try: - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - */ - if (unlikely(__pyx_v_merged == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 544, __pyx_L4_error) - } - __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_exc_lineno, __pyx_v_merged, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 544, __pyx_L4_error) - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f_locals_back); + __Pyx_XDECREF(__pyx_v_return_values_dict); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":545 +/* "_pydevd_bundle/pydevd_cython.pyx":572 * - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - * try: # <<<<<<<<<<<<<< - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - * except: + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _remove_return_values(self, py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _remove_return_values(self, py_db, frame): */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":546 - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - * try: - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) # <<<<<<<<<<<<<< - * except: - * pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_linecache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getline); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_f_globals); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_16 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_16 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_absolute_filename, __pyx_v_exc_lineno, __pyx_t_9}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_absolute_filename, __pyx_v_exc_lineno, __pyx_t_9}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - { - __pyx_t_15 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_15); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_INCREF(__pyx_v_absolute_filename); - __Pyx_GIVEREF(__pyx_v_absolute_filename); - PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_16, __pyx_v_absolute_filename); - __Pyx_INCREF(__pyx_v_exc_lineno); - __Pyx_GIVEREF(__pyx_v_exc_lineno); - PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_16, __pyx_v_exc_lineno); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_16, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 546, __pyx_L38_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_7); - __pyx_t_7 = 0; +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__remove_return_values(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { + PyObject *__pyx_v_f_locals_back = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; + char const *__pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_remove_return_values", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":545 - * - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - * try: # <<<<<<<<<<<<<< - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":576 + * # def _remove_return_values(self, py_db, frame): + * # ENDIF + * try: # <<<<<<<<<<<<<< + * try: + * # Showing return values was turned off, we should remove them from locals dict. */ - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L45_try_end; - __pyx_L38_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":547 - * try: - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - * except: # <<<<<<<<<<<<<< - * pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) - * line = '' + /* "_pydevd_bundle/pydevd_cython.pyx":577 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_15) < 0) __PYX_ERR(0, 547, __pyx_L40_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_15); + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":548 - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - * except: - * pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) # <<<<<<<<<<<<<< - * line = '' + /* "_pydevd_bundle/pydevd_cython.pyx":580 + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one + * frame.f_locals.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< * + * f_locals_back = getattr(frame.f_back, "f_locals", None) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_16 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); - __pyx_t_16 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_17)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_s_Error_in_linecache_getline_r_s_f, __pyx_v_absolute_filename, __pyx_v_exc_lineno}; - __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_17)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_kp_s_Error_in_linecache_getline_r_s_f, __pyx_v_absolute_filename, __pyx_v_exc_lineno}; - __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_17, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else - #endif - { - __pyx_t_14 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_GOTREF(__pyx_t_14); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_INCREF(__pyx_kp_s_Error_in_linecache_getline_r_s_f); - __Pyx_GIVEREF(__pyx_kp_s_Error_in_linecache_getline_r_s_f); - PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_16, __pyx_kp_s_Error_in_linecache_getline_r_s_f); - __Pyx_INCREF(__pyx_v_absolute_filename); - __Pyx_GIVEREF(__pyx_v_absolute_filename); - PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_16, __pyx_v_absolute_filename); - __Pyx_INCREF(__pyx_v_exc_lineno); - __Pyx_GIVEREF(__pyx_v_exc_lineno); - PyTuple_SET_ITEM(__pyx_t_14, 2+__pyx_t_16, __pyx_v_exc_lineno); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_14, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 548, __pyx_L40_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 580, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 580, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 580, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, Py_None}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 580, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":549 - * except: - * pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) - * line = '' # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":582 + * frame.f_locals.pop(RETURN_VALUES_DICT, None) * - * if IGNORE_EXCEPTION_TAG.match(line) is not None: + * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) */ - __Pyx_INCREF(__pyx_kp_s_); - __Pyx_XDECREF_SET(__pyx_v_line, __pyx_kp_s_); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L39_exception_handled; - } - __pyx_L40_except_error:; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 582, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 582, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_f_locals_back = __pyx_t_6; + __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":545 + /* "_pydevd_bundle/pydevd_cython.pyx":583 * - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - * try: # <<<<<<<<<<<<<< - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - * except: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: */ - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L4_error; - __pyx_L39_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L45_try_end:; - } + __pyx_t_9 = (__pyx_v_f_locals_back != Py_None); + if (__pyx_t_9) { - /* "_pydevd_bundle/pydevd_cython.pyx":551 - * line = '' - * - * if IGNORE_EXCEPTION_TAG.match(line) is not None: # <<<<<<<<<<<<<< - * lines_ignored[exc_lineno] = 1 - * return False + /* "_pydevd_bundle/pydevd_cython.pyx":584 + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_IGNORE_EXCEPTION_TAG); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 551, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 551, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 584, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 584, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; } } - __pyx_t_15 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_line) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_line); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 551, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_3 = (__pyx_t_15 != Py_None); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - - /* "_pydevd_bundle/pydevd_cython.pyx":552 - * - * if IGNORE_EXCEPTION_TAG.match(line) is not None: - * lines_ignored[exc_lineno] = 1 # <<<<<<<<<<<<<< - * return False - * else: - */ - if (unlikely(__pyx_v_lines_ignored == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 552, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_lines_ignored, __pyx_v_exc_lineno, __pyx_int_1) < 0)) __PYX_ERR(0, 552, __pyx_L4_error) - - /* "_pydevd_bundle/pydevd_cython.pyx":553 - * if IGNORE_EXCEPTION_TAG.match(line) is not None: - * lines_ignored[exc_lineno] = 1 - * return False # <<<<<<<<<<<<<< - * else: - * # Put in the cache saying not to ignore - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, Py_None}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L3_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":551 - * line = '' - * - * if IGNORE_EXCEPTION_TAG.match(line) is not None: # <<<<<<<<<<<<<< - * lines_ignored[exc_lineno] = 1 - * return False - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":556 - * else: - * # Put in the cache saying not to ignore - * lines_ignored[exc_lineno] = 0 # <<<<<<<<<<<<<< - * else: - * # Ok, dict has it already cached, so, let's check it... - */ - /*else*/ { - if (unlikely(__pyx_v_lines_ignored == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 556, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_lines_ignored, __pyx_v_exc_lineno, __pyx_int_0) < 0)) __PYX_ERR(0, 556, __pyx_L4_error) + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 584, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":544 - * # print ('merged', merged, 'curr', exc_lineno) + /* "_pydevd_bundle/pydevd_cython.pyx":583 * - * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. # <<<<<<<<<<<<<< - * try: - * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: */ - goto __pyx_L37; } - /* "_pydevd_bundle/pydevd_cython.pyx":559 - * else: - * # Ok, dict has it already cached, so, let's check it... - * if merged.get(exc_lineno, 0): # <<<<<<<<<<<<<< - * return False - * + /* "_pydevd_bundle/pydevd_cython.pyx":577 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one */ - /*else*/ { - if (unlikely(__pyx_v_merged == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 559, __pyx_L4_error) - } - __pyx_t_15 = __Pyx_PyDict_GetItemDefault(__pyx_v_merged, __pyx_v_exc_lineno, __pyx_int_0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 559, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 559, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (__pyx_t_2) { + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":560 - * # Ok, dict has it already cached, so, let's check it... - * if merged.get(exc_lineno, 0): - * return False # <<<<<<<<<<<<<< - * - * thread = self._args[3] + /* "_pydevd_bundle/pydevd_cython.pyx":585 + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * finally: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L3_return; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(0, 585, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); - /* "_pydevd_bundle/pydevd_cython.pyx":559 - * else: - * # Ok, dict has it already cached, so, let's check it... - * if merged.get(exc_lineno, 0): # <<<<<<<<<<<<<< - * return False - * + /* "_pydevd_bundle/pydevd_cython.pyx":586 + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * finally: + * f_locals_back = None */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 586, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 586, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_8 = 1; } } - __pyx_L37:; - - /* "_pydevd_bundle/pydevd_cython.pyx":503 - * - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: - * for check_trace_obj in (initial_trace_obj, trace_obj): # <<<<<<<<<<<<<< - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - * absolute_filename = abs_real_path_and_base[0] - */ + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L7_exception_handled; } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":502 - * trace_obj = trace_obj.tb_next - * - * if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: # <<<<<<<<<<<<<< - * for check_trace_obj in (initial_trace_obj, trace_obj): - * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + /* "_pydevd_bundle/pydevd_cython.pyx":577 + * # ENDIF + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L4_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L11_try_end:; } + } - /* "_pydevd_bundle/pydevd_cython.pyx":562 - * return False - * - * thread = self._args[3] # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":588 + * pydev_log.exception() + * finally: + * f_locals_back = None # <<<<<<<<<<<<<< * - * try: + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 562, __pyx_L4_error) + /*finally:*/ { + /*normal exit:*/{ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + goto __pyx_L5; } - __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 562, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_thread = __pyx_t_5; - __pyx_t_5 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":564 - * thread = self._args[3] - * - * try: # <<<<<<<<<<<<<< - * frame_id_to_frame = {} - * frame_id_to_frame[id(frame)] = frame - */ - { + __pyx_L4_error:; + /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); + } + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + goto __pyx_L1_error; + } + __pyx_L5:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":565 + /* "_pydevd_bundle/pydevd_cython.pyx":572 * - * try: - * frame_id_to_frame = {} # <<<<<<<<<<<<<< - * frame_id_to_frame[id(frame)] = frame - * f = trace_obj.tb_frame - */ - __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 565, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_frame_id_to_frame = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":566 - * try: - * frame_id_to_frame = {} - * frame_id_to_frame[id(frame)] = frame # <<<<<<<<<<<<<< - * f = trace_obj.tb_frame - * while f is not None: - */ - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 566, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_frame_id_to_frame, __pyx_t_5, __pyx_v_frame) < 0)) __PYX_ERR(0, 566, __pyx_L50_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":567 - * frame_id_to_frame = {} - * frame_id_to_frame[id(frame)] = frame - * f = trace_obj.tb_frame # <<<<<<<<<<<<<< - * while f is not None: - * frame_id_to_frame[id(f)] = f - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 567, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_f = __pyx_t_5; - __pyx_t_5 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":568 - * frame_id_to_frame[id(frame)] = frame - * f = trace_obj.tb_frame - * while f is not None: # <<<<<<<<<<<<<< - * frame_id_to_frame[id(f)] = f - * f = f.f_back - */ - while (1) { - __pyx_t_2 = (__pyx_v_f != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (!__pyx_t_3) break; - - /* "_pydevd_bundle/pydevd_cython.pyx":569 - * f = trace_obj.tb_frame - * while f is not None: - * frame_id_to_frame[id(f)] = f # <<<<<<<<<<<<<< - * f = f.f_back - * f = None + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _remove_return_values(self, py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _remove_return_values(self, py_db, frame): */ - __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_f); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 569, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyDict_SetItem(__pyx_v_frame_id_to_frame, __pyx_t_5, __pyx_v_f) < 0)) __PYX_ERR(0, 569, __pyx_L50_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":570 - * while f is not None: - * frame_id_to_frame[id(f)] = f - * f = f.f_back # <<<<<<<<<<<<<< - * f = None - * - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 570, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_5); - __pyx_t_5 = 0; - } + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f_locals_back); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":571 - * frame_id_to_frame[id(f)] = f - * f = f.f_back - * f = None # <<<<<<<<<<<<<< +/* "_pydevd_bundle/pydevd_cython.pyx":591 * - * stopped = True + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_unfiltered_back_frame(self, py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_unfiltered_back_frame(self, py_db, frame): */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_f, Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":573 - * f = None - * - * stopped = True # <<<<<<<<<<<<<< - * main_debugger.send_caught_exception_stack(thread, arg, id(frame)) - * try: - */ - __pyx_v_stopped = 1; +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__get_unfiltered_back_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_unfiltered_back_frame", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":574 - * - * stopped = True - * main_debugger.send_caught_exception_stack(thread, arg, id(frame)) # <<<<<<<<<<<<<< - * try: - * self.set_suspend(thread, 137) + /* "_pydevd_bundle/pydevd_cython.pyx":595 + * # def _get_unfiltered_back_frame(self, py_db, frame): + * # ENDIF + * f = frame.f_back # <<<<<<<<<<<<<< + * while f is not None: + * if not py_db.is_files_filter_enabled: */ - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_send_caught_exception_stack); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = NULL; - __pyx_t_16 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - __pyx_t_16 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_thread, __pyx_v_arg, __pyx_t_7}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_thread, __pyx_v_arg, __pyx_t_7}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 3+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(3+__pyx_t_16); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_16, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_16, __pyx_v_arg); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_16, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 574, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_f = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":575 - * stopped = True - * main_debugger.send_caught_exception_stack(thread, arg, id(frame)) - * try: # <<<<<<<<<<<<<< - * self.set_suspend(thread, 137) - * self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) + /* "_pydevd_bundle/pydevd_cython.pyx":596 + * # ENDIF + * f = frame.f_back + * while f is not None: # <<<<<<<<<<<<<< + * if not py_db.is_files_filter_enabled: + * return f */ - /*try:*/ { + while (1) { + __pyx_t_2 = (__pyx_v_f != Py_None); + if (!__pyx_t_2) break; - /* "_pydevd_bundle/pydevd_cython.pyx":576 - * main_debugger.send_caught_exception_stack(thread, arg, id(frame)) - * try: - * self.set_suspend(thread, 137) # <<<<<<<<<<<<<< - * self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) - * finally: + /* "_pydevd_bundle/pydevd_cython.pyx":597 + * f = frame.f_back + * while f is not None: + * if not py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * return f + * */ - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 576, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_9 = NULL; - __pyx_t_16 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - __pyx_t_16 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_thread, __pyx_int_137}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 576, __pyx_L59_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_thread, __pyx_int_137}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_16, 2+__pyx_t_16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 576, __pyx_L59_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_16); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 576, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_16, __pyx_v_thread); - __Pyx_INCREF(__pyx_int_137); - __Pyx_GIVEREF(__pyx_int_137); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_16, __pyx_int_137); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 576, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { - /* "_pydevd_bundle/pydevd_cython.pyx":577 - * try: - * self.set_suspend(thread, 137) - * self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) # <<<<<<<<<<<<<< - * finally: - * main_debugger.send_caught_exception_stack_proceeded(thread) + /* "_pydevd_bundle/pydevd_cython.pyx":598 + * while f is not None: + * if not py_db.is_files_filter_enabled: + * return f # <<<<<<<<<<<<<< + * + * else: */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 577, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 577, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_15, 3, __pyx_v_arg); - __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 577, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_exception_type, __pyx_v_exception_type) < 0) __PYX_ERR(0, 577, __pyx_L59_error) - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 577, __pyx_L59_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_f); + __pyx_r = __pyx_v_f; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":579 - * self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) - * finally: - * main_debugger.send_caught_exception_stack_proceeded(thread) # <<<<<<<<<<<<<< - * except: - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":597 + * f = frame.f_back + * while f is not None: + * if not py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * return f + * */ - /*finally:*/ { - /*normal exit:*/{ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_send_caught_exception_stack_proc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 579, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_15 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_15)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_9 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_15, __pyx_v_thread) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_thread); - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 579, __pyx_L50_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L60; - } - __pyx_L59_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22); - __Pyx_XGOTREF(__pyx_t_20); - __Pyx_XGOTREF(__pyx_t_21); - __Pyx_XGOTREF(__pyx_t_22); - __Pyx_XGOTREF(__pyx_t_23); - __Pyx_XGOTREF(__pyx_t_24); - __Pyx_XGOTREF(__pyx_t_25); - __pyx_t_16 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; - { - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_send_caught_exception_stack_proc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 579, __pyx_L62_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_15 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_15)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_9 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_15, __pyx_v_thread) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_thread); - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 579, __pyx_L62_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_XGIVEREF(__pyx_t_25); - __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); - } - __Pyx_XGIVEREF(__pyx_t_20); - __Pyx_XGIVEREF(__pyx_t_21); - __Pyx_XGIVEREF(__pyx_t_22); - __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22); - __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; - __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; - goto __pyx_L50_error; - __pyx_L62_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_XGIVEREF(__pyx_t_25); - __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25); - } - __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; - __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; - goto __pyx_L50_error; - } - __pyx_L60:; - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":564 - * thread = self._args[3] + /* "_pydevd_bundle/pydevd_cython.pyx":601 + * + * else: + * if py_db.apply_files_filter(f, f.f_code.co_filename, False): # <<<<<<<<<<<<<< + * f = f.f_back * - * try: # <<<<<<<<<<<<<< - * frame_id_to_frame = {} - * frame_id_to_frame[id(frame)] = frame */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_7 = 1; + } } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L55_try_end; - __pyx_L50_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_v_f, __pyx_t_6, Py_False}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 3+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_3) { - /* "_pydevd_bundle/pydevd_cython.pyx":580 - * finally: - * main_debugger.send_caught_exception_stack_proceeded(thread) - * except: # <<<<<<<<<<<<<< - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":602 + * else: + * if py_db.apply_files_filter(f, f.f_code.co_filename, False): + * f = f.f_back # <<<<<<<<<<<<<< * + * else: */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_7, &__pyx_t_15) < 0) __PYX_ERR(0, 580, __pyx_L52_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_15); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":581 - * main_debugger.send_caught_exception_stack_proceeded(thread) - * except: - * pydev_log.exception() # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":601 + * + * else: + * if py_db.apply_files_filter(f, f.f_code.co_filename, False): # <<<<<<<<<<<<<< + * f = f.f_back * - * main_debugger.set_trace_for_frame_and_parents(frame) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 581, __pyx_L52_except_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_exception); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 581, __pyx_L52_except_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_17))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_17); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_17, function); - } - } - __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_17, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 581, __pyx_L52_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L51_exception_handled; + goto __pyx_L6; } - __pyx_L52_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":564 - * thread = self._args[3] + /* "_pydevd_bundle/pydevd_cython.pyx":605 * - * try: # <<<<<<<<<<<<<< - * frame_id_to_frame = {} - * frame_id_to_frame[id(frame)] = frame - */ - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); - goto __pyx_L4_error; - __pyx_L51_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); - __pyx_L55_try_end:; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":583 - * pydev_log.exception() + * else: + * return f # <<<<<<<<<<<<<< * - * main_debugger.set_trace_for_frame_and_parents(frame) # <<<<<<<<<<<<<< - * finally: - * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + * return f */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_set_trace_for_frame_and_parents); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 583, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_f); + __pyx_r = __pyx_v_f; + goto __pyx_L0; } + __pyx_L6:; } - __pyx_t_15 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 583, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } - /* "_pydevd_bundle/pydevd_cython.pyx":586 - * finally: - * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. - * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< - * # Clear some local variables... - * frame = None - */ - /*finally:*/ { - /*normal exit:*/{ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_15 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 586, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":588 - * remove_exception_from_frame(frame) - * # Clear some local variables... - * frame = None # <<<<<<<<<<<<<< - * trace_obj = None - * initial_trace_obj = None + /* "_pydevd_bundle/pydevd_cython.pyx":607 + * return f + * + * return f # <<<<<<<<<<<<<< + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_frame, Py_None); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_f); + __pyx_r = __pyx_v_f; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":589 - * # Clear some local variables... - * frame = None - * trace_obj = None # <<<<<<<<<<<<<< - * initial_trace_obj = None - * check_trace_obj = None + /* "_pydevd_bundle/pydevd_cython.pyx":591 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_unfiltered_back_frame(self, py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_unfiltered_back_frame(self, py_db, frame): */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_trace_obj, Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":590 - * frame = None - * trace_obj = None - * initial_trace_obj = None # <<<<<<<<<<<<<< - * check_trace_obj = None - * f = None - */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_initial_trace_obj, Py_None); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._get_unfiltered_back_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "_pydevd_bundle/pydevd_cython.pyx":591 - * trace_obj = None - * initial_trace_obj = None - * check_trace_obj = None # <<<<<<<<<<<<<< - * f = None - * frame_id_to_frame = None +/* "_pydevd_bundle/pydevd_cython.pyx":610 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_same_frame(self, target_frame, current_frame): # <<<<<<<<<<<<<< + * cdef PyDBAdditionalThreadInfo info; + * # ELSE */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":592 - * initial_trace_obj = None - * check_trace_obj = None - * f = None # <<<<<<<<<<<<<< - * frame_id_to_frame = None - * main_debugger = None - */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f, Py_None); +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__is_same_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_target_frame, PyObject *__pyx_v_current_frame) { + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_is_same_frame", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":593 - * check_trace_obj = None - * f = None - * frame_id_to_frame = None # <<<<<<<<<<<<<< - * main_debugger = None - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":615 + * # def _is_same_frame(self, target_frame, current_frame): + * # ENDIF + * if target_frame is current_frame: # <<<<<<<<<<<<<< + * return True + * */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); + __pyx_t_1 = (__pyx_v_target_frame == __pyx_v_current_frame); + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":594 - * f = None - * frame_id_to_frame = None - * main_debugger = None # <<<<<<<<<<<<<< - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":616 + * # ENDIF + * if target_frame is current_frame: + * return True # <<<<<<<<<<<<<< * + * info = self._args[2] */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_main_debugger, Py_None); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":595 - * frame_id_to_frame = None - * main_debugger = None - * thread = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":615 + * # def _is_same_frame(self, target_frame, current_frame): + * # ENDIF + * if target_frame is current_frame: # <<<<<<<<<<<<<< + * return True * - * return stopped */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_thread, Py_None); - goto __pyx_L5; - } - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_25, &__pyx_t_24, &__pyx_t_23); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_25); - __Pyx_XGOTREF(__pyx_t_24); - __Pyx_XGOTREF(__pyx_t_23); - __pyx_t_18 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_26 = __pyx_filename; - { + } - /* "_pydevd_bundle/pydevd_cython.pyx":586 - * finally: - * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. - * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< - * # Clear some local variables... - * frame = None + /* "_pydevd_bundle/pydevd_cython.pyx":618 + * return True + * + * info = self._args[2] # <<<<<<<<<<<<<< + * if info.pydev_use_scoped_step_frame: + * # If using scoped step we don't check the target, we just need to check */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L66_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_15 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 586, __pyx_L66_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 618, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 618, __pyx_L1_error) + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":588 - * remove_exception_from_frame(frame) - * # Clear some local variables... - * frame = None # <<<<<<<<<<<<<< - * trace_obj = None - * initial_trace_obj = None + /* "_pydevd_bundle/pydevd_cython.pyx":619 + * + * info = self._args[2] + * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_frame, Py_None); + if (__pyx_v_info->pydev_use_scoped_step_frame) { - /* "_pydevd_bundle/pydevd_cython.pyx":589 - * # Clear some local variables... - * frame = None - * trace_obj = None # <<<<<<<<<<<<<< - * initial_trace_obj = None - * check_trace_obj = None + /* "_pydevd_bundle/pydevd_cython.pyx":622 + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + * # The co_name may be different (it may include the line number), but */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_trace_obj, Py_None); + __pyx_t_3 = (__pyx_v_target_frame != Py_None); + if (__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_current_frame != Py_None); + __pyx_t_1 = __pyx_t_3; + __pyx_L6_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":590 - * frame = None - * trace_obj = None - * initial_trace_obj = None # <<<<<<<<<<<<<< - * check_trace_obj = None - * f = None + /* "_pydevd_bundle/pydevd_cython.pyx":623 + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_initial_trace_obj, Py_None); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_target_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 623, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":591 - * trace_obj = None - * initial_trace_obj = None - * check_trace_obj = None # <<<<<<<<<<<<<< - * f = None - * frame_id_to_frame = None + /* "_pydevd_bundle/pydevd_cython.pyx":626 + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. + * f = current_frame.f_back # <<<<<<<<<<<<<< + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":592 - * initial_trace_obj = None - * check_trace_obj = None - * f = None # <<<<<<<<<<<<<< - * frame_id_to_frame = None - * main_debugger = None + /* "_pydevd_bundle/pydevd_cython.pyx":627 + * # the filename must still be the same. + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f, Py_None); + __pyx_t_3 = (__pyx_v_f != Py_None); + if (__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_t_3; + __pyx_L10_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":593 - * check_trace_obj = None - * f = None - * frame_id_to_frame = None # <<<<<<<<<<<<<< - * main_debugger = None - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":628 + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back # <<<<<<<<<<<<<< + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * return True */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":594 - * f = None - * frame_id_to_frame = None - * main_debugger = None # <<<<<<<<<<<<<< - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":629 + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * return True * */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_main_debugger, Py_None); + __pyx_t_3 = (__pyx_v_f != Py_None); + if (__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_t_3; + __pyx_L13_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":595 - * frame_id_to_frame = None - * main_debugger = None - * thread = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":630 + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * return True # <<<<<<<<<<<<<< * - * return stopped - */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_thread, Py_None); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_25); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23); - } - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; - __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_26; - goto __pyx_L1_error; - __pyx_L66_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_25); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_ExceptionReset(__pyx_t_25, __pyx_t_24, __pyx_t_23); - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_25 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; - goto __pyx_L1_error; - } - __pyx_L3_return: { - __pyx_t_23 = __pyx_r; - __pyx_r = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":586 - * finally: - * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. - * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< - * # Clear some local variables... - * frame = None - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 586, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_15 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 586, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":588 - * remove_exception_from_frame(frame) - * # Clear some local variables... - * frame = None # <<<<<<<<<<<<<< - * trace_obj = None - * initial_trace_obj = None - */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_frame, Py_None); - - /* "_pydevd_bundle/pydevd_cython.pyx":589 - * # Clear some local variables... - * frame = None - * trace_obj = None # <<<<<<<<<<<<<< - * initial_trace_obj = None - * check_trace_obj = None - */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_trace_obj, Py_None); - - /* "_pydevd_bundle/pydevd_cython.pyx":590 - * frame = None - * trace_obj = None - * initial_trace_obj = None # <<<<<<<<<<<<<< - * check_trace_obj = None - * f = None + * return False */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_initial_trace_obj, Py_None); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":591 - * trace_obj = None - * initial_trace_obj = None - * check_trace_obj = None # <<<<<<<<<<<<<< - * f = None - * frame_id_to_frame = None + /* "_pydevd_bundle/pydevd_cython.pyx":629 + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * return True + * */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); + } - /* "_pydevd_bundle/pydevd_cython.pyx":592 - * initial_trace_obj = None - * check_trace_obj = None - * f = None # <<<<<<<<<<<<<< - * frame_id_to_frame = None - * main_debugger = None + /* "_pydevd_bundle/pydevd_cython.pyx":627 + * # the filename must still be the same. + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f, Py_None); + } - /* "_pydevd_bundle/pydevd_cython.pyx":593 - * check_trace_obj = None - * f = None - * frame_id_to_frame = None # <<<<<<<<<<<<<< - * main_debugger = None - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":623 + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); + } - /* "_pydevd_bundle/pydevd_cython.pyx":594 - * f = None - * frame_id_to_frame = None - * main_debugger = None # <<<<<<<<<<<<<< - * thread = None - * + /* "_pydevd_bundle/pydevd_cython.pyx":622 + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + * # The co_name may be different (it may include the line number), but */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_main_debugger, Py_None); + } - /* "_pydevd_bundle/pydevd_cython.pyx":595 - * frame_id_to_frame = None - * main_debugger = None - * thread = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":619 * - * return stopped + * info = self._args[2] + * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. */ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_thread, Py_None); - __pyx_r = __pyx_t_23; - __pyx_t_23 = 0; - goto __pyx_L0; - } - __pyx_L5:; } - /* "_pydevd_bundle/pydevd_cython.pyx":597 - * thread = None + /* "_pydevd_bundle/pydevd_cython.pyx":632 + * return True * - * return stopped # <<<<<<<<<<<<<< + * return False # <<<<<<<<<<<<<< * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_15 = __Pyx_PyBool_FromLong(__pyx_v_stopped); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 597, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_r = __pyx_t_15; - __pyx_t_15 = 0; + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":471 + /* "_pydevd_bundle/pydevd_cython.pyx":610 * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _handle_exception(self, frame, str event, arg, str exception_type): # <<<<<<<<<<<<<< - * cdef bint stopped; - * cdef tuple abs_real_path_and_base; + * cdef _is_same_frame(self, target_frame, current_frame): # <<<<<<<<<<<<<< + * cdef PyDBAdditionalThreadInfo info; + * # ELSE */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._is_same_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_abs_real_path_and_base); - __Pyx_XDECREF(__pyx_v_absolute_filename); - __Pyx_XDECREF(__pyx_v_canonical_normalized_filename); - __Pyx_XDECREF(__pyx_v_filename_to_lines_where_exceptions_are_ignored); - __Pyx_XDECREF(__pyx_v_lines_ignored); - __Pyx_XDECREF(__pyx_v_frame_id_to_frame); - __Pyx_XDECREF(__pyx_v_merged); - __Pyx_XDECREF(__pyx_v_trace_obj); - __Pyx_XDECREF(__pyx_v_main_debugger); - __Pyx_XDECREF(__pyx_v_initial_trace_obj); - __Pyx_XDECREF(__pyx_v_check_trace_obj); - __Pyx_XDECREF(__pyx_v_curr_stat); - __Pyx_XDECREF(__pyx_v_last_stat); - __Pyx_XDECREF(__pyx_v_from_user_input); - __Pyx_XDECREF(__pyx_v_exc_lineno); - __Pyx_XDECREF(__pyx_v_line); - __Pyx_XDECREF(__pyx_v_thread); + __Pyx_XDECREF((PyObject *)__pyx_v_info); __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_frame); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":600 +/* "_pydevd_bundle/pydevd_cython.pyx":635 * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef get_func_name(self, frame): # <<<<<<<<<<<<<< - * cdef str func_name - * # ELSE + * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef tuple abs_path_canonical_path_and_base; + * cdef bint is_exception_event; */ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_get_func_name(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame) { - PyObject *__pyx_v_func_name = 0; - PyObject *__pyx_v_code_obj = NULL; - PyObject *__pyx_v_cls_name = NULL; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg, int __pyx_skip_dispatch) { + PyObject *__pyx_v_abs_path_canonical_path_and_base = 0; + int __pyx_v_is_exception_event; + int __pyx_v_has_exception_breakpoints; + int __pyx_v_can_skip; + int __pyx_v_stop; + int __pyx_v_stop_on_plugin_breakpoint; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + int __pyx_v_step_cmd; + int __pyx_v_line; + int __pyx_v_is_line; + int __pyx_v_is_call; + int __pyx_v_is_return; + int __pyx_v_should_stop; + PyObject *__pyx_v_breakpoints_for_file = 0; + PyObject *__pyx_v_stop_info = 0; + PyObject *__pyx_v_curr_func_name = 0; + PyObject *__pyx_v_frame_skips_cache = 0; + PyObject *__pyx_v_frame_cache_key = 0; + PyObject *__pyx_v_line_cache_key = 0; + int __pyx_v_breakpoints_in_line_cache; + int __pyx_v_breakpoints_in_frame_cache; + int __pyx_v_has_breakpoint_in_frame; + int __pyx_v_bp_line; + PyObject *__pyx_v_bp = 0; + int __pyx_v_pydev_smart_parent_offset; + int __pyx_v_pydev_smart_child_offset; + PyObject *__pyx_v_pydev_smart_step_into_variants = 0; + PyObject *__pyx_v_py_db = NULL; + PyObject *__pyx_v_thread = NULL; + PyObject *__pyx_v_plugin_manager = NULL; + PyObject *__pyx_v_stop_frame = NULL; + PyObject *__pyx_v_function_breakpoint_on_call_event = NULL; + PyObject *__pyx_v_returns_cache_key = NULL; + PyObject *__pyx_v_return_lines = NULL; + PyObject *__pyx_v_x = NULL; + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_exc_info = NULL; + PyObject *__pyx_v_func_lines = NULL; + PyObject *__pyx_v_offset_and_lineno = NULL; + PyObject *__pyx_v_breakpoint = NULL; + PyObject *__pyx_v_stop_reason = NULL; + PyObject *__pyx_v_bp_type = NULL; + PyObject *__pyx_v_new_frame = NULL; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_eval_result = NULL; + PyObject *__pyx_v_cmd = NULL; + PyObject *__pyx_v_exc = NULL; + long __pyx_v_should_skip; + PyObject *__pyx_v_plugin_stop = NULL; + PyObject *__pyx_v_force_check_project_scope = NULL; + PyObject *__pyx_v_filename = NULL; + PyObject *__pyx_v_f2 = NULL; + PyObject *__pyx_v_back = NULL; + PyObject *__pyx_v_smart_step_into_variant = NULL; + PyObject *__pyx_v_children_variants = NULL; + PyObject *__pyx_v_f_code = NULL; + PyObject *__pyx_v_back_absolute_filename = NULL; + CYTHON_UNUSED PyObject *__pyx_v__ = NULL; + PyObject *__pyx_v_base = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_5; PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; + PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; int __pyx_t_9; int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; + int __pyx_t_11; + int __pyx_t_12; + Py_ssize_t __pyx_t_13; + PyObject *(*__pyx_t_14)(PyObject *); + PyObject *(*__pyx_t_15)(PyObject *); + int __pyx_t_16; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + int __pyx_t_20; + Py_ssize_t __pyx_t_21; + PyObject *__pyx_t_22 = NULL; + char const *__pyx_t_23; + PyObject *__pyx_t_24 = NULL; + PyObject *__pyx_t_25 = NULL; + PyObject *__pyx_t_26 = NULL; + PyObject *__pyx_t_27 = NULL; + PyObject *__pyx_t_28 = NULL; + PyObject *__pyx_t_29 = NULL; + char const *__pyx_t_30; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_func_name", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":605 - * # def get_func_name(self, frame): - * # ENDIF - * code_obj = frame.f_code # <<<<<<<<<<<<<< - * func_name = code_obj.co_name - * try: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_code_obj = __pyx_t_1; - __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":606 - * # ENDIF - * code_obj = frame.f_code - * func_name = code_obj.co_name # <<<<<<<<<<<<<< - * try: - * cls_name = get_clsname_for_code(code_obj, frame) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code_obj, __pyx_n_s_co_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 606, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 606, __pyx_L1_error) - __pyx_v_func_name = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __Pyx_RefNannySetupContext("trace_dispatch", 0); + __Pyx_INCREF(__pyx_v_frame); + /* Check if called by wrapper */ + if (unlikely(__pyx_skip_dispatch)) ; + /* Check if overridden in Python */ + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + #endif + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch)) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L0; + } + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { + __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; + } + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS + } + #endif + } - /* "_pydevd_bundle/pydevd_cython.pyx":607 - * code_obj = frame.f_code - * func_name = code_obj.co_name + /* "_pydevd_bundle/pydevd_cython.pyx":675 + * # generation be better split among what each part does). + * * try: # <<<<<<<<<<<<<< - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: + * # DEBUG = '_debugger_case_yield_from.py' in frame.f_code.co_filename + * py_db, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":608 - * func_name = code_obj.co_name + /* "_pydevd_bundle/pydevd_cython.pyx":677 * try: - * cls_name = get_clsname_for_code(code_obj, frame) # <<<<<<<<<<<<<< - * if cls_name is not None: - * return "%s.%s" % (cls_name, func_name) + * # DEBUG = '_debugger_case_yield_from.py' in frame.f_code.co_filename + * py_db, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args # <<<<<<<<<<<<<< + * # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) + * info.is_tracing += 1 */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 608, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_7 = 1; - } + __pyx_t_1 = __pyx_v_self->_args; + __Pyx_INCREF(__pyx_t_1); + if (likely(__pyx_t_1 != Py_None)) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 6)) { + if (size > 6) __Pyx_RaiseTooManyValuesError(6); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 677, __pyx_L4_error) } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_code_obj, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_code_obj, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + #else { - __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 608, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_code_obj); - __Pyx_GIVEREF(__pyx_v_code_obj); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_code_obj); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_frame); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + Py_ssize_t i; + PyObject** temps[6] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_6,&__pyx_t_7,&__pyx_t_8}; + for (i=0; i < 6; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 677, __pyx_L4_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_cls_name = __pyx_t_1; - __pyx_t_1 = 0; + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 677, __pyx_L4_error) + } + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_3))) __PYX_ERR(0, 677, __pyx_L4_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 677, __pyx_L4_error) + if (!(likely(PyDict_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_7))) __PYX_ERR(0, 677, __pyx_L4_error) + __pyx_v_py_db = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_abs_path_canonical_path_and_base = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_4); + __pyx_t_4 = 0; + __pyx_v_thread = __pyx_t_6; + __pyx_t_6 = 0; + __pyx_v_frame_skips_cache = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + __pyx_v_frame_cache_key = __pyx_t_8; + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":609 - * try: - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: # <<<<<<<<<<<<<< - * return "%s.%s" % (cls_name, func_name) - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":679 + * py_db, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args + * # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) + * info.is_tracing += 1 # <<<<<<<<<<<<<< + * + * # TODO: This shouldn't be needed. The fact that frame.f_lineno */ - __pyx_t_9 = (__pyx_v_cls_name != Py_None); - __pyx_t_10 = (__pyx_t_9 != 0); - if (__pyx_t_10) { + __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing + 1); - /* "_pydevd_bundle/pydevd_cython.pyx":610 - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: - * return "%s.%s" % (cls_name, func_name) # <<<<<<<<<<<<<< - * else: - * return func_name + /* "_pydevd_bundle/pydevd_cython.pyx":684 + * # is None seems like a bug in Python 3.11. + * # Reported in: https://github.com/python/cpython/issues/94485 + * line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None # <<<<<<<<<<<<<< + * line_cache_key = (frame_cache_key, line) + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 610, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_cls_name); - __Pyx_GIVEREF(__pyx_v_cls_name); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_cls_name); - __Pyx_INCREF(__pyx_v_func_name); - __Pyx_GIVEREF(__pyx_v_func_name); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_func_name); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 610, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L7_try_return; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 684, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 684, __pyx_L4_error) + if (!__pyx_t_10) { + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 684, __pyx_L4_error) + __pyx_t_9 = __pyx_t_11; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_9 = 0; + __pyx_L6_bool_binop_done:; + __pyx_v_line = __pyx_t_9; - /* "_pydevd_bundle/pydevd_cython.pyx":609 - * try: - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: # <<<<<<<<<<<<<< - * return "%s.%s" % (cls_name, func_name) - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":685 + * # Reported in: https://github.com/python/cpython/issues/94485 + * line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None + * line_cache_key = (frame_cache_key, line) # <<<<<<<<<<<<<< + * + * if py_db.pydb_disposed: */ - } + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 685, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_frame_cache_key); + __Pyx_GIVEREF(__pyx_v_frame_cache_key); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_frame_cache_key)) __PYX_ERR(0, 685, __pyx_L4_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1)) __PYX_ERR(0, 685, __pyx_L4_error); + __pyx_t_1 = 0; + __pyx_v_line_cache_key = ((PyObject*)__pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":612 - * return "%s.%s" % (cls_name, func_name) - * else: - * return func_name # <<<<<<<<<<<<<< - * except: - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":687 + * line_cache_key = (frame_cache_key, line) + * + * if py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE + * */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_func_name); - __pyx_r = __pyx_v_func_name; - goto __pyx_L7_try_return; - } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 687, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 687, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":607 - * code_obj = frame.f_code - * func_name = code_obj.co_name - * try: # <<<<<<<<<<<<<< - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":688 + * + * if py_db.pydb_disposed: + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< + * + * plugin_manager = py_db.plugin */ - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 688, __pyx_L4_error) + if (__pyx_t_10) { + __Pyx_INCREF(Py_None); + __pyx_t_8 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 688, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __pyx_t_1; + __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":613 - * else: - * return func_name - * except: # <<<<<<<<<<<<<< - * pydev_log.exception() - * return func_name + /* "_pydevd_bundle/pydevd_cython.pyx":687 + * line_cache_key = (frame_cache_key, line) + * + * if py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE + * */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 613, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_8); + } - /* "_pydevd_bundle/pydevd_cython.pyx":614 - * return func_name - * except: - * pydev_log.exception() # <<<<<<<<<<<<<< - * return func_name + /* "_pydevd_bundle/pydevd_cython.pyx":690 + * return None if event == "call" else NO_FTRACE * + * plugin_manager = py_db.plugin # <<<<<<<<<<<<<< + * has_exception_breakpoints = ( + * py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 614, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_exception); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 614, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_11)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_11); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); - } - } - __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 614, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 690, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_v_plugin_manager = __pyx_t_8; + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":615 - * except: - * pydev_log.exception() - * return func_name # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":692 + * plugin_manager = py_db.plugin + * has_exception_breakpoints = ( + * py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks # <<<<<<<<<<<<<< + * ) * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_func_name); - __pyx_r = __pyx_v_func_name; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L6_except_return; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (!__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L9_bool_binop_done; } - __pyx_L5_except_error:; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (!__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 692, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __pyx_t_12; + __pyx_L9_bool_binop_done:; + __pyx_v_has_exception_breakpoints = __pyx_t_10; - /* "_pydevd_bundle/pydevd_cython.pyx":607 - * code_obj = frame.f_code - * func_name = code_obj.co_name - * try: # <<<<<<<<<<<<<< - * cls_name = get_clsname_for_code(code_obj, frame) - * if cls_name is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":695 + * ) + * + * stop_frame = info.pydev_step_stop # <<<<<<<<<<<<<< + * step_cmd = info.pydev_step_cmd + * function_breakpoint_on_call_event = None */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } + __pyx_t_8 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_8); + __pyx_v_stop_frame = __pyx_t_8; + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":600 + /* "_pydevd_bundle/pydevd_cython.pyx":696 + * + * stop_frame = info.pydev_step_stop + * step_cmd = info.pydev_step_cmd # <<<<<<<<<<<<<< + * function_breakpoint_on_call_event = None * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef get_func_name(self, frame): # <<<<<<<<<<<<<< - * cdef str func_name - * # ELSE */ + __pyx_t_9 = __pyx_v_info->pydev_step_cmd; + __pyx_v_step_cmd = __pyx_t_9; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_func_name); - __Pyx_XDECREF(__pyx_v_code_obj); - __Pyx_XDECREF(__pyx_v_cls_name); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":697 + * stop_frame = info.pydev_step_stop + * step_cmd = info.pydev_step_cmd + * function_breakpoint_on_call_event = None # <<<<<<<<<<<<<< + * + * if frame.f_code.co_flags & 0xA0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 + */ + __Pyx_INCREF(Py_None); + __pyx_v_function_breakpoint_on_call_event = Py_None; -/* "_pydevd_bundle/pydevd_cython.pyx":618 + /* "_pydevd_bundle/pydevd_cython.pyx":699 + * function_breakpoint_on_call_event = None * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _show_return_values(self, frame, arg): # <<<<<<<<<<<<<< - * # ELSE - * # def _show_return_values(self, frame, arg): + * if frame.f_code.co_flags & 0xA0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # <<<<<<<<<<<<<< + * # Dealing with coroutines and generators: + * # When in a coroutine we change the perceived event to the debugger because */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 699, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_AndObjC(__pyx_t_1, __pyx_int_160, 0xA0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 699, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 699, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__show_return_values(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_arg) { - PyObject *__pyx_v_f_locals_back = NULL; - PyObject *__pyx_v_return_values_dict = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - char const *__pyx_t_14; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_show_return_values", 0); + /* "_pydevd_bundle/pydevd_cython.pyx":703 + * # When in a coroutine we change the perceived event to the debugger because + * # a call, StopIteration exception and return are usually just pausing/unpausing it. + * if event == "line": # <<<<<<<<<<<<<< + * is_line = True + * is_call = False + */ + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_line, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 703, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":622 - * # def _show_return_values(self, frame, arg): - * # ENDIF - * try: # <<<<<<<<<<<<<< - * try: - * f_locals_back = getattr(frame.f_back, "f_locals", None) + /* "_pydevd_bundle/pydevd_cython.pyx":704 + * # a call, StopIteration exception and return are usually just pausing/unpausing it. + * if event == "line": + * is_line = True # <<<<<<<<<<<<<< + * is_call = False + * is_return = False */ - /*try:*/ { + __pyx_v_is_line = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":623 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":705 + * if event == "line": + * is_line = True + * is_call = False # <<<<<<<<<<<<<< + * is_return = False + * is_exception_event = False */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { + __pyx_v_is_call = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":624 - * try: - * try: - * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< - * if f_locals_back is not None: - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + /* "_pydevd_bundle/pydevd_cython.pyx":706 + * is_line = True + * is_call = False + * is_return = False # <<<<<<<<<<<<<< + * is_exception_event = False + * */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 624, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 624, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_f_locals_back = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_v_is_return = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":625 - * try: - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: # <<<<<<<<<<<<<< - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) - * if return_values_dict is None: + /* "_pydevd_bundle/pydevd_cython.pyx":707 + * is_call = False + * is_return = False + * is_exception_event = False # <<<<<<<<<<<<<< + * + * elif event == "return": */ - __pyx_t_6 = (__pyx_v_f_locals_back != Py_None); - __pyx_t_7 = (__pyx_t_6 != 0); - if (__pyx_t_7) { + __pyx_v_is_exception_event = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":626 - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< - * if return_values_dict is None: - * return_values_dict = {} + /* "_pydevd_bundle/pydevd_cython.pyx":703 + * # When in a coroutine we change the perceived event to the debugger because + * # a call, StopIteration exception and return are usually just pausing/unpausing it. + * if event == "line": # <<<<<<<<<<<<<< + * is_line = True + * is_call = False */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_8, Py_None}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_8, Py_None}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - { - __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_8); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, Py_None); - __pyx_t_8 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_return_values_dict = __pyx_t_5; - __pyx_t_5 = 0; + goto __pyx_L13; + } - /* "_pydevd_bundle/pydevd_cython.pyx":627 - * if f_locals_back is not None: - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) - * if return_values_dict is None: # <<<<<<<<<<<<<< - * return_values_dict = {} - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + /* "_pydevd_bundle/pydevd_cython.pyx":709 + * is_exception_event = False + * + * elif event == "return": # <<<<<<<<<<<<<< + * is_line = False + * is_call = False */ - __pyx_t_7 = (__pyx_v_return_values_dict == Py_None); - __pyx_t_6 = (__pyx_t_7 != 0); - if (__pyx_t_6) { + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 709, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":628 - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) - * if return_values_dict is None: - * return_values_dict = {} # <<<<<<<<<<<<<< - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict - * name = self.get_func_name(frame) + /* "_pydevd_bundle/pydevd_cython.pyx":710 + * + * elif event == "return": + * is_line = False # <<<<<<<<<<<<<< + * is_call = False + * is_return = True */ - __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 628, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF_SET(__pyx_v_return_values_dict, __pyx_t_5); - __pyx_t_5 = 0; + __pyx_v_is_line = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":629 - * if return_values_dict is None: - * return_values_dict = {} - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict # <<<<<<<<<<<<<< - * name = self.get_func_name(frame) - * return_values_dict[name] = arg + /* "_pydevd_bundle/pydevd_cython.pyx":711 + * elif event == "return": + * is_line = False + * is_call = False # <<<<<<<<<<<<<< + * is_return = True + * is_exception_event = False */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 629, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - if (unlikely(PyObject_SetItem(__pyx_v_f_locals_back, __pyx_t_5, __pyx_v_return_values_dict) < 0)) __PYX_ERR(0, 629, __pyx_L6_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_is_call = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":627 - * if f_locals_back is not None: - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) - * if return_values_dict is None: # <<<<<<<<<<<<<< - * return_values_dict = {} - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + /* "_pydevd_bundle/pydevd_cython.pyx":712 + * is_line = False + * is_call = False + * is_return = True # <<<<<<<<<<<<<< + * is_exception_event = False + * */ - } + __pyx_v_is_return = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":630 - * return_values_dict = {} - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict - * name = self.get_func_name(frame) # <<<<<<<<<<<<<< - * return_values_dict[name] = arg - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":713 + * is_call = False + * is_return = True + * is_exception_event = False # <<<<<<<<<<<<<< + * + * returns_cache_key = (frame_cache_key, "returns") */ - __pyx_t_5 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->get_func_name(__pyx_v_self, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 630, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_name = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_v_is_exception_event = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":631 - * f_locals_back[RETURN_VALUES_DICT] = return_values_dict - * name = self.get_func_name(frame) - * return_values_dict[name] = arg # <<<<<<<<<<<<<< - * except: - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":715 + * is_exception_event = False + * + * returns_cache_key = (frame_cache_key, "returns") # <<<<<<<<<<<<<< + * return_lines = frame_skips_cache.get(returns_cache_key) + * if return_lines is None: */ - if (unlikely(PyObject_SetItem(__pyx_v_return_values_dict, __pyx_v_name, __pyx_v_arg) < 0)) __PYX_ERR(0, 631, __pyx_L6_error) + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 715, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_frame_cache_key); + __Pyx_GIVEREF(__pyx_v_frame_cache_key); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_frame_cache_key)) __PYX_ERR(0, 715, __pyx_L4_error); + __Pyx_INCREF(__pyx_n_s_returns); + __Pyx_GIVEREF(__pyx_n_s_returns); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_n_s_returns)) __PYX_ERR(0, 715, __pyx_L4_error); + __pyx_v_returns_cache_key = ((PyObject*)__pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":625 - * try: - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: # <<<<<<<<<<<<<< - * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) - * if return_values_dict is None: + /* "_pydevd_bundle/pydevd_cython.pyx":716 + * + * returns_cache_key = (frame_cache_key, "returns") + * return_lines = frame_skips_cache.get(returns_cache_key) # <<<<<<<<<<<<<< + * if return_lines is None: + * # Note: we're collecting the return lines by inspecting the bytecode as */ + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 716, __pyx_L4_error) } + __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_returns_cache_key, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 716, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_v_return_lines = __pyx_t_8; + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":623 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":717 + * returns_cache_key = (frame_cache_key, "returns") + * return_lines = frame_skips_cache.get(returns_cache_key) + * if return_lines is None: # <<<<<<<<<<<<<< + * # Note: we're collecting the return lines by inspecting the bytecode as + * # there are multiple returns and multiple stop iterations when awaiting and */ - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L11_try_end; - __pyx_L6_error:; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_10 = (__pyx_v_return_lines == Py_None); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":632 - * name = self.get_func_name(frame) - * return_values_dict[name] = arg - * except: # <<<<<<<<<<<<<< - * pydev_log.exception() - * finally: + /* "_pydevd_bundle/pydevd_cython.pyx":722 + * # it doesn't give any clear indication when a coroutine or generator is + * # finishing or just pausing. + * return_lines = set() # <<<<<<<<<<<<<< + * for x in py_db.collect_return_info(frame.f_code): + * # Note: cython does not support closures in cpdefs (so we can't use */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_11) < 0) __PYX_ERR(0, 632, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_11); + __pyx_t_8 = PySet_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 722, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_return_lines, __pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":633 - * return_values_dict[name] = arg - * except: - * pydev_log.exception() # <<<<<<<<<<<<<< - * finally: - * f_locals_back = None + /* "_pydevd_bundle/pydevd_cython.pyx":723 + * # finishing or just pausing. + * return_lines = set() + * for x in py_db.collect_return_info(frame.f_code): # <<<<<<<<<<<<<< + * # Note: cython does not support closures in cpdefs (so we can't use + * # a list comprehension). */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 633, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_exception); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 633, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_collect_return_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } } - } - __pyx_t_8 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 633, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L7_exception_handled; - } - __pyx_L8_except_error:; - - /* "_pydevd_bundle/pydevd_cython.pyx":623 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: - */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L4_error; - __pyx_L7_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L11_try_end:; - } - } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { + __pyx_t_1 = __pyx_t_8; __Pyx_INCREF(__pyx_t_1); + __pyx_t_13 = 0; + __pyx_t_14 = NULL; + } else { + __pyx_t_13 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 723, __pyx_L4_error) + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + for (;;) { + if (likely(!__pyx_t_14)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 723, __pyx_L4_error) + #endif + if (__pyx_t_13 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 723, __pyx_L4_error) + #else + __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 723, __pyx_L4_error) + #endif + if (__pyx_t_13 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 723, __pyx_L4_error) + #else + __pyx_t_8 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 723, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } + } else { + __pyx_t_8 = __pyx_t_14(__pyx_t_1); + if (unlikely(!__pyx_t_8)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 723, __pyx_L4_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_8); + } + __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":635 - * pydev_log.exception() - * finally: - * f_locals_back = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":726 + * # Note: cython does not support closures in cpdefs (so we can't use + * # a list comprehension). + * return_lines.add(x.return_line) # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * frame_skips_cache[returns_cache_key] = return_lines */ - /*finally:*/ { - /*normal exit:*/{ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); - goto __pyx_L5; - } - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_17); - __pyx_t_10 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; - { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); - } - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); - __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; - goto __pyx_L1_error; - } - __pyx_L5:; - } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_return_lines, __pyx_n_s_add); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 726, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_return_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 726, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 726, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":618 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _show_return_values(self, frame, arg): # <<<<<<<<<<<<<< - * # ELSE - * # def _show_return_values(self, frame, arg): + /* "_pydevd_bundle/pydevd_cython.pyx":723 + * # finishing or just pausing. + * return_lines = set() + * for x in py_db.collect_return_info(frame.f_code): # <<<<<<<<<<<<<< + * # Note: cython does not support closures in cpdefs (so we can't use + * # a list comprehension). */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_f_locals_back); - __Pyx_XDECREF(__pyx_v_return_values_dict); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pyx":638 + /* "_pydevd_bundle/pydevd_cython.pyx":728 + * return_lines.add(x.return_line) * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _remove_return_values(self, main_debugger, frame): # <<<<<<<<<<<<<< - * # ELSE - * # def _remove_return_values(self, main_debugger, frame): + * frame_skips_cache[returns_cache_key] = return_lines # <<<<<<<<<<<<<< + * + * if line not in return_lines: */ + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 728, __pyx_L4_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_returns_cache_key, __pyx_v_return_lines) < 0))) __PYX_ERR(0, 728, __pyx_L4_error) -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__remove_return_values(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_main_debugger, PyObject *__pyx_v_frame) { - PyObject *__pyx_v_f_locals_back = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - char const *__pyx_t_14; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_remove_return_values", 0); + /* "_pydevd_bundle/pydevd_cython.pyx":717 + * returns_cache_key = (frame_cache_key, "returns") + * return_lines = frame_skips_cache.get(returns_cache_key) + * if return_lines is None: # <<<<<<<<<<<<<< + * # Note: we're collecting the return lines by inspecting the bytecode as + * # there are multiple returns and multiple stop iterations when awaiting and + */ + } - /* "_pydevd_bundle/pydevd_cython.pyx":642 - * # def _remove_return_values(self, main_debugger, frame): - * # ENDIF - * try: # <<<<<<<<<<<<<< - * try: - * # Showing return values was turned off, we should remove them from locals dict. + /* "_pydevd_bundle/pydevd_cython.pyx":730 + * frame_skips_cache[returns_cache_key] = return_lines + * + * if line not in return_lines: # <<<<<<<<<<<<<< + * # Not really a return (coroutine/generator paused). + * return self.trace_dispatch */ - /*try:*/ { + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_return_lines, Py_NE)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 730, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":643 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * # Showing return values was turned off, we should remove them from locals dict. - * # The values can be in the current frame or in the back one + /* "_pydevd_bundle/pydevd_cython.pyx":732 + * if line not in return_lines: + * # Not really a return (coroutine/generator paused). + * return self.trace_dispatch # <<<<<<<<<<<<<< + * else: + * if self.exc_info: */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":646 - * # Showing return values was turned off, we should remove them from locals dict. - * # The values can be in the current frame or in the back one - * frame.f_locals.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":730 + * frame_skips_cache[returns_cache_key] = return_lines * - * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if line not in return_lines: # <<<<<<<<<<<<<< + * # Not really a return (coroutine/generator paused). + * return self.trace_dispatch */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_5, Py_None}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_5, Py_None}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_5); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, Py_None); - __pyx_t_5 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 646, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":648 - * frame.f_locals.pop(RETURN_VALUES_DICT, None) + /* "_pydevd_bundle/pydevd_cython.pyx":734 + * return self.trace_dispatch + * else: + * if self.exc_info: # <<<<<<<<<<<<<< + * self.handle_user_exception(frame) + * return self.trace_dispatch + */ + /*else*/ { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_self->exc_info); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 734, __pyx_L4_error) + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":735 + * else: + * if self.exc_info: + * self.handle_user_exception(frame) # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< - * if f_locals_back is not None: - * f_locals_back.pop(RETURN_VALUES_DICT, None) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 648, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_f_locals_back = __pyx_t_6; - __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 735, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 735, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":649 + /* "_pydevd_bundle/pydevd_cython.pyx":736 + * if self.exc_info: + * self.handle_user_exception(frame) + * return self.trace_dispatch # <<<<<<<<<<<<<< * - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: # <<<<<<<<<<<<<< - * f_locals_back.pop(RETURN_VALUES_DICT, None) - * except: + * # Tricky handling: usually when we're on a frame which is about to exit */ - __pyx_t_10 = (__pyx_v_f_locals_back != Py_None); - __pyx_t_11 = (__pyx_t_10 != 0); - if (__pyx_t_11) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":650 - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: - * f_locals_back.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< - * except: - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":734 + * return self.trace_dispatch + * else: + * if self.exc_info: # <<<<<<<<<<<<<< + * self.handle_user_exception(frame) + * return self.trace_dispatch */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_5 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_9, Py_None}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_9, Py_None}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_t_9); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, Py_None); - __pyx_t_9 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 650, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":754 + * # as the return shouldn't mean that we've actually completed executing a + * # frame in this case). + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if step_cmd in (108, 159, 107, 144): + * f = self._get_unfiltered_back_frame(py_db, frame) + */ + __pyx_t_12 = (__pyx_v_stop_frame == __pyx_v_frame); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L21_bool_binop_done; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_12 = (!__pyx_v_info->pydev_use_scoped_step_frame); + __pyx_t_10 = __pyx_t_12; + __pyx_L21_bool_binop_done:; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":649 - * - * f_locals_back = getattr(frame.f_back, "f_locals", None) - * if f_locals_back is not None: # <<<<<<<<<<<<<< - * f_locals_back.pop(RETURN_VALUES_DICT, None) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":755 + * # frame in this case). + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (108, 159, 107, 144): # <<<<<<<<<<<<<< + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: */ - } + switch (__pyx_v_step_cmd) { + case 0x6C: + case 0x9F: + case 0x6B: + case 0x90: - /* "_pydevd_bundle/pydevd_cython.pyx":643 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * # Showing return values was turned off, we should remove them from locals dict. - * # The values can be in the current frame or in the back one + /* "_pydevd_bundle/pydevd_cython.pyx":756 + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (108, 159, 107, 144): + * f = self._get_unfiltered_back_frame(py_db, frame) # <<<<<<<<<<<<<< + * if f is not None: + * info.pydev_step_cmd = 206 */ - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L11_try_end; - __pyx_L6_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_get_unfiltered_back_frame(__pyx_v_self, __pyx_v_py_db, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_f = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":651 - * if f_locals_back is not None: - * f_locals_back.pop(RETURN_VALUES_DICT, None) - * except: # <<<<<<<<<<<<<< - * pydev_log.exception() - * finally: + /* "_pydevd_bundle/pydevd_cython.pyx":757 + * if step_cmd in (108, 159, 107, 144): + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 206 + * info.pydev_step_stop = f */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 651, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = (__pyx_v_f != Py_None); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":652 - * f_locals_back.pop(RETURN_VALUES_DICT, None) - * except: - * pydev_log.exception() # <<<<<<<<<<<<<< - * finally: - * f_locals_back = None + /* "_pydevd_bundle/pydevd_cython.pyx":758 + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: + * info.pydev_step_cmd = 206 # <<<<<<<<<<<<<< + * info.pydev_step_stop = f + * else: */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 652, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exception); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 652, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); - } - } - __pyx_t_9 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 652, __pyx_L8_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L7_exception_handled; - } - __pyx_L8_except_error:; + __pyx_v_info->pydev_step_cmd = 0xCE; - /* "_pydevd_bundle/pydevd_cython.pyx":643 - * # ENDIF - * try: - * try: # <<<<<<<<<<<<<< - * # Showing return values was turned off, we should remove them from locals dict. - * # The values can be in the current frame or in the back one + /* "_pydevd_bundle/pydevd_cython.pyx":759 + * if f is not None: + * info.pydev_step_cmd = 206 + * info.pydev_step_stop = f # <<<<<<<<<<<<<< + * else: + * if step_cmd == 108: */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L4_error; - __pyx_L7_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L11_try_end:; - } - } + __Pyx_INCREF(__pyx_v_f); + __Pyx_GIVEREF(__pyx_v_f); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = __pyx_v_f; - /* "_pydevd_bundle/pydevd_cython.pyx":654 - * pydev_log.exception() - * finally: - * f_locals_back = None # <<<<<<<<<<<<<< - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + /* "_pydevd_bundle/pydevd_cython.pyx":757 + * if step_cmd in (108, 159, 107, 144): + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 206 + * info.pydev_step_stop = f */ - /*finally:*/ { - /*normal exit:*/{ - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); - goto __pyx_L5; - } - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_17); - __pyx_t_8 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; - { - __Pyx_INCREF(Py_None); - __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); - } - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); - __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; - goto __pyx_L1_error; - } - __pyx_L5:; - } + goto __pyx_L23; + } - /* "_pydevd_bundle/pydevd_cython.pyx":638 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _remove_return_values(self, main_debugger, frame): # <<<<<<<<<<<<<< - * # ELSE - * # def _remove_return_values(self, main_debugger, frame): + /* "_pydevd_bundle/pydevd_cython.pyx":761 + * info.pydev_step_stop = f + * else: + * if step_cmd == 108: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 107 + * info.pydev_step_stop = None */ + /*else*/ { - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_f_locals_back); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":765 + * info.pydev_step_stop = None + * + * elif step_cmd == 159: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 144 + * info.pydev_step_stop = None + */ + switch (__pyx_v_step_cmd) { + case 0x6C: -/* "_pydevd_bundle/pydevd_cython.pyx":657 + /* "_pydevd_bundle/pydevd_cython.pyx":762 + * else: + * if step_cmd == 108: + * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< + * info.pydev_step_stop = None * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _get_unfiltered_back_frame(self, main_debugger, frame): # <<<<<<<<<<<<<< - * # ELSE - * # def _get_unfiltered_back_frame(self, main_debugger, frame): */ + __pyx_v_info->pydev_step_cmd = 0x6B; -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__get_unfiltered_back_frame(CYTHON_UNUSED struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_main_debugger, PyObject *__pyx_v_frame) { - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_get_unfiltered_back_frame", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":661 - * # def _get_unfiltered_back_frame(self, main_debugger, frame): - * # ENDIF - * f = frame.f_back # <<<<<<<<<<<<<< - * while f is not None: - * if not main_debugger.is_files_filter_enabled: + /* "_pydevd_bundle/pydevd_cython.pyx":763 + * if step_cmd == 108: + * info.pydev_step_cmd = 107 + * info.pydev_step_stop = None # <<<<<<<<<<<<<< + * + * elif step_cmd == 159: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 661, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_f = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":662 - * # ENDIF - * f = frame.f_back - * while f is not None: # <<<<<<<<<<<<<< - * if not main_debugger.is_files_filter_enabled: - * return f + /* "_pydevd_bundle/pydevd_cython.pyx":761 + * info.pydev_step_stop = f + * else: + * if step_cmd == 108: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 107 + * info.pydev_step_stop = None */ - while (1) { - __pyx_t_2 = (__pyx_v_f != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (!__pyx_t_3) break; + break; + case 0x9F: - /* "_pydevd_bundle/pydevd_cython.pyx":663 - * f = frame.f_back - * while f is not None: - * if not main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * return f + /* "_pydevd_bundle/pydevd_cython.pyx":766 + * + * elif step_cmd == 159: + * info.pydev_step_cmd = 144 # <<<<<<<<<<<<<< + * info.pydev_step_stop = None * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 663, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 663, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_2 = ((!__pyx_t_3) != 0); - if (__pyx_t_2) { + __pyx_v_info->pydev_step_cmd = 0x90; - /* "_pydevd_bundle/pydevd_cython.pyx":664 - * while f is not None: - * if not main_debugger.is_files_filter_enabled: - * return f # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":767 + * elif step_cmd == 159: + * info.pydev_step_cmd = 144 + * info.pydev_step_stop = None # <<<<<<<<<<<<<< * - * else: + * elif step_cmd == 206: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_f); - __pyx_r = __pyx_v_f; - goto __pyx_L0; + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":663 - * f = frame.f_back - * while f is not None: - * if not main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * return f + /* "_pydevd_bundle/pydevd_cython.pyx":765 + * info.pydev_step_stop = None * + * elif step_cmd == 159: # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 144 + * info.pydev_step_stop = None */ - } + break; + default: break; + } + } + __pyx_L23:; - /* "_pydevd_bundle/pydevd_cython.pyx":667 - * - * else: - * if main_debugger.apply_files_filter(f, f.f_code.co_filename, False): # <<<<<<<<<<<<<< - * f = f.f_back - * + /* "_pydevd_bundle/pydevd_cython.pyx":755 + * # frame in this case). + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (108, 159, 107, 144): # <<<<<<<<<<<<<< + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_7 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_f, __pyx_t_6, Py_False}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_f, __pyx_t_6, Py_False}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - { - __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_f); - __Pyx_GIVEREF(__pyx_v_f); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_f); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_6); - __Pyx_INCREF(Py_False); - __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, Py_False); - __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 667, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { + break; + case 0xCE: - /* "_pydevd_bundle/pydevd_cython.pyx":668 - * else: - * if main_debugger.apply_files_filter(f, f.f_code.co_filename, False): - * f = f.f_back # <<<<<<<<<<<<<< - * - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":771 + * elif step_cmd == 206: + * # We're exiting this one, so, mark the new coroutine context. + * f = self._get_unfiltered_back_frame(py_db, frame) # <<<<<<<<<<<<<< + * if f is not None: + * info.pydev_step_stop = f */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_get_unfiltered_back_frame(__pyx_v_self, __pyx_v_py_db, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_f = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":667 - * - * else: - * if main_debugger.apply_files_filter(f, f.f_code.co_filename, False): # <<<<<<<<<<<<<< - * f = f.f_back - * + /* "_pydevd_bundle/pydevd_cython.pyx":772 + * # We're exiting this one, so, mark the new coroutine context. + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: # <<<<<<<<<<<<<< + * info.pydev_step_stop = f + * else: */ - goto __pyx_L6; - } + __pyx_t_10 = (__pyx_v_f != Py_None); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":671 - * - * else: - * return f # <<<<<<<<<<<<<< - * - * return f + /* "_pydevd_bundle/pydevd_cython.pyx":773 + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: + * info.pydev_step_stop = f # <<<<<<<<<<<<<< + * else: + * info.pydev_step_cmd = 107 */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_f); - __pyx_r = __pyx_v_f; - goto __pyx_L0; - } - __pyx_L6:; - } - } + __Pyx_INCREF(__pyx_v_f); + __Pyx_GIVEREF(__pyx_v_f); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = __pyx_v_f; - /* "_pydevd_bundle/pydevd_cython.pyx":673 - * return f - * - * return f # <<<<<<<<<<<<<< - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + /* "_pydevd_bundle/pydevd_cython.pyx":772 + * # We're exiting this one, so, mark the new coroutine context. + * f = self._get_unfiltered_back_frame(py_db, frame) + * if f is not None: # <<<<<<<<<<<<<< + * info.pydev_step_stop = f + * else: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_f); - __pyx_r = __pyx_v_f; - goto __pyx_L0; + goto __pyx_L24; + } - /* "_pydevd_bundle/pydevd_cython.pyx":657 + /* "_pydevd_bundle/pydevd_cython.pyx":775 + * info.pydev_step_stop = f + * else: + * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< + * info.pydev_step_stop = None * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _get_unfiltered_back_frame(self, main_debugger, frame): # <<<<<<<<<<<<<< - * # ELSE - * # def _get_unfiltered_back_frame(self, main_debugger, frame): */ + /*else*/ { + __pyx_v_info->pydev_step_cmd = 0x6B; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._get_unfiltered_back_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pyx":676 + /* "_pydevd_bundle/pydevd_cython.pyx":776 + * else: + * info.pydev_step_cmd = 107 + * info.pydev_step_stop = None # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _is_same_frame(self, target_frame, current_frame): # <<<<<<<<<<<<<< - * cdef PyDBAdditionalThreadInfo info; - * # ELSE + * elif event == "exception": */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; + } + __pyx_L24:; -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__is_same_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_target_frame, PyObject *__pyx_v_current_frame) { - struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_is_same_frame", 0); - - /* "_pydevd_bundle/pydevd_cython.pyx":681 - * # def _is_same_frame(self, target_frame, current_frame): - * # ENDIF - * if target_frame is current_frame: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":769 + * info.pydev_step_stop = None * + * elif step_cmd == 206: # <<<<<<<<<<<<<< + * # We're exiting this one, so, mark the new coroutine context. + * f = self._get_unfiltered_back_frame(py_db, frame) */ - __pyx_t_1 = (__pyx_v_target_frame == __pyx_v_current_frame); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + break; + default: break; + } - /* "_pydevd_bundle/pydevd_cython.pyx":682 - * # ENDIF - * if target_frame is current_frame: - * return True # <<<<<<<<<<<<<< - * - * info = self._args[2] + /* "_pydevd_bundle/pydevd_cython.pyx":754 + * # as the return shouldn't mean that we've actually completed executing a + * # frame in this case). + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if step_cmd in (108, 159, 107, 144): + * f = self._get_unfiltered_back_frame(py_db, frame) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; + } + } - /* "_pydevd_bundle/pydevd_cython.pyx":681 - * # def _is_same_frame(self, target_frame, current_frame): - * # ENDIF - * if target_frame is current_frame: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":709 + * is_exception_event = False * + * elif event == "return": # <<<<<<<<<<<<<< + * is_line = False + * is_call = False */ - } + goto __pyx_L13; + } - /* "_pydevd_bundle/pydevd_cython.pyx":684 - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":778 + * info.pydev_step_stop = None * - * info = self._args[2] # <<<<<<<<<<<<<< - * if info.pydev_use_scoped_step_frame: - * # If using scoped step we don't check the target, we just need to check + * elif event == "exception": # <<<<<<<<<<<<<< + * breakpoints_for_file = None + * if has_exception_breakpoints: */ - if (unlikely(__pyx_v_self->_args == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 684, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 684, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 684, __pyx_L1_error) - __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 778, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":685 + /* "_pydevd_bundle/pydevd_cython.pyx":779 * - * info = self._args[2] - * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * # If using scoped step we don't check the target, we just need to check - * # if the current matches the same heuristic where the target was defined. + * elif event == "exception": + * breakpoints_for_file = None # <<<<<<<<<<<<<< + * if has_exception_breakpoints: + * should_stop, frame, exc_info = should_stop_on_exception( */ - __pyx_t_2 = (__pyx_v_info->pydev_use_scoped_step_frame != 0); - if (__pyx_t_2) { + __Pyx_INCREF(Py_None); + __pyx_v_breakpoints_for_file = ((PyObject*)Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":688 - * # If using scoped step we don't check the target, we just need to check - * # if the current matches the same heuristic where the target was defined. - * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< - * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: - * # The co_name may be different (it may include the line number), but + /* "_pydevd_bundle/pydevd_cython.pyx":780 + * elif event == "exception": + * breakpoints_for_file = None + * if has_exception_breakpoints: # <<<<<<<<<<<<<< + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info */ - __pyx_t_1 = (__pyx_v_target_frame != Py_None); - __pyx_t_4 = (__pyx_t_1 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_4 = (__pyx_v_current_frame != Py_None); - __pyx_t_1 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_1; - __pyx_L6_bool_binop_done:; - if (__pyx_t_2) { + if (__pyx_v_has_exception_breakpoints) { - /* "_pydevd_bundle/pydevd_cython.pyx":689 - * # if the current matches the same heuristic where the target was defined. - * if target_frame is not None and current_frame is not None: - * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< - * # The co_name may be different (it may include the line number), but - * # the filename must still be the same. + /* "_pydevd_bundle/pydevd_cython.pyx":781 + * breakpoints_for_file = None + * if has_exception_breakpoints: + * should_stop, frame, exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 689, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_2) { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); - /* "_pydevd_bundle/pydevd_cython.pyx":692 - * # The co_name may be different (it may include the line number), but - * # the filename must still be the same. - * f = current_frame.f_back # <<<<<<<<<<<<<< - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":782 + * if has_exception_breakpoints: + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info # <<<<<<<<<<<<<< + * ) + * self.exc_info = exc_info */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_f = __pyx_t_3; - __pyx_t_3 = 0; + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 782, __pyx_L4_error) + } + __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 782, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 782, __pyx_L4_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 782, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 782, __pyx_L4_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_t_7, __pyx_t_6, __pyx_v_frame, __pyx_t_4, __pyx_v_arg, __pyx_v_self->exc_info}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 6+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 781, __pyx_L4_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_8 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_8)) goto __pyx_L26_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_4 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L26_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 2; __pyx_t_6 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L26_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_7), 3) < 0) __PYX_ERR(0, 781, __pyx_L4_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L27_unpacking_done; + __pyx_L26_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 781, __pyx_L4_error) + __pyx_L27_unpacking_done:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":693 - * # the filename must still be the same. - * f = current_frame.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< - * f = f.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + /* "_pydevd_bundle/pydevd_cython.pyx":781 + * breakpoints_for_file = None + * if has_exception_breakpoints: + * should_stop, frame, exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) */ - __pyx_t_1 = (__pyx_v_f != Py_None); - __pyx_t_4 = (__pyx_t_1 != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L10_bool_binop_done; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 693, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __pyx_t_4; - __pyx_L10_bool_binop_done:; - if (__pyx_t_2) { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 781, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_should_stop = __pyx_t_10; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_v_exc_info = __pyx_t_6; + __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":694 - * f = current_frame.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f = f.f_back # <<<<<<<<<<<<<< - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":784 + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) + * self.exc_info = exc_info # <<<<<<<<<<<<<< + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_3); - __pyx_t_3 = 0; + __Pyx_INCREF(__pyx_v_exc_info); + __Pyx_GIVEREF(__pyx_v_exc_info); + __Pyx_GOTREF(__pyx_v_self->exc_info); + __Pyx_DECREF(__pyx_v_self->exc_info); + __pyx_v_self->exc_info = __pyx_v_exc_info; - /* "_pydevd_bundle/pydevd_cython.pyx":695 - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f = f.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< - * return True - * + /* "_pydevd_bundle/pydevd_cython.pyx":785 + * ) + * self.exc_info = exc_info + * if should_stop: # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch */ - __pyx_t_4 = (__pyx_v_f != Py_None); - __pyx_t_1 = (__pyx_t_4 != 0); - if (__pyx_t_1) { - } else { - __pyx_t_2 = __pyx_t_1; - goto __pyx_L13_bool_binop_done; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_3, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 695, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __pyx_t_1; - __pyx_L13_bool_binop_done:; - if (__pyx_t_2) { + if (__pyx_v_should_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":696 - * f = f.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - * return True # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":786 + * self.exc_info = exc_info + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * return False */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 786, __pyx_L4_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 786, __pyx_L4_error) + } + __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_3, __pyx_t_4, __pyx_t_8, __pyx_v_frame, __pyx_v_arg, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 786, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":695 - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f = f.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< - * return True + /* "_pydevd_bundle/pydevd_cython.pyx":787 + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch # <<<<<<<<<<<<<< * + * return self.trace_dispatch */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":693 - * # the filename must still be the same. - * f = current_frame.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< - * f = f.f_back - * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":689 - * # if the current matches the same heuristic where the target was defined. - * if target_frame is not None and current_frame is not None: - * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< - * # The co_name may be different (it may include the line number), but - * # the filename must still be the same. - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":688 - * # If using scoped step we don't check the target, we just need to check - * # if the current matches the same heuristic where the target was defined. - * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< - * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: - * # The co_name may be different (it may include the line number), but - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":685 - * - * info = self._args[2] - * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * # If using scoped step we don't check the target, we just need to check - * # if the current matches the same heuristic where the target was defined. - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":698 - * return True - * - * return False # <<<<<<<<<<<<<< - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - - /* "_pydevd_bundle/pydevd_cython.pyx":676 + /* "_pydevd_bundle/pydevd_cython.pyx":786 + * self.exc_info = exc_info + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef _is_same_frame(self, target_frame, current_frame): # <<<<<<<<<<<<<< - * cdef PyDBAdditionalThreadInfo info; - * # ELSE */ + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame._is_same_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_info); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "_pydevd_bundle/pydevd_cython.pyx":701 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef tuple abs_path_canonical_path_and_base; - * cdef bint is_exception_event; + /* "_pydevd_bundle/pydevd_cython.pyx":785 + * ) + * self.exc_info = exc_info + * if should_stop: # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch */ - -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg, int __pyx_skip_dispatch) { - PyObject *__pyx_v_abs_path_canonical_path_and_base = 0; - int __pyx_v_is_exception_event; - int __pyx_v_has_exception_breakpoints; - int __pyx_v_can_skip; - int __pyx_v_stop; - int __pyx_v_stop_on_plugin_breakpoint; - struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; - int __pyx_v_step_cmd; - int __pyx_v_line; - int __pyx_v_is_line; - int __pyx_v_is_call; - int __pyx_v_is_return; - int __pyx_v_should_stop; - PyObject *__pyx_v_breakpoints_for_file = 0; - PyObject *__pyx_v_stop_info = 0; - PyObject *__pyx_v_curr_func_name = 0; - PyObject *__pyx_v_frame_skips_cache = 0; - PyObject *__pyx_v_frame_cache_key = 0; - PyObject *__pyx_v_line_cache_key = 0; - int __pyx_v_breakpoints_in_line_cache; - int __pyx_v_breakpoints_in_frame_cache; - int __pyx_v_has_breakpoint_in_frame; - int __pyx_v_bp_line; - PyObject *__pyx_v_bp = 0; - int __pyx_v_pydev_smart_parent_offset; - int __pyx_v_pydev_smart_child_offset; - PyObject *__pyx_v_pydev_smart_step_into_variants = 0; - PyObject *__pyx_v_main_debugger = NULL; - PyObject *__pyx_v_thread = NULL; - PyObject *__pyx_v_plugin_manager = NULL; - PyObject *__pyx_v_stop_frame = NULL; - PyObject *__pyx_v_function_breakpoint_on_call_event = NULL; - PyObject *__pyx_v_returns_cache_key = NULL; - PyObject *__pyx_v_return_lines = NULL; - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_func_lines = NULL; - PyObject *__pyx_v_offset_and_lineno = NULL; - PyObject *__pyx_v_breakpoint = NULL; - PyObject *__pyx_v_stop_reason = NULL; - PyObject *__pyx_v_bp_type = NULL; - PyObject *__pyx_v_new_frame = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_eval_result = NULL; - PyObject *__pyx_v_cmd = NULL; - PyObject *__pyx_v_exc = NULL; - long __pyx_v_should_skip; - PyObject *__pyx_v_plugin_stop = NULL; - PyObject *__pyx_v_force_check_project_scope = NULL; - PyObject *__pyx_v_filename = NULL; - PyObject *__pyx_v_f2 = NULL; - PyObject *__pyx_v_back = NULL; - PyObject *__pyx_v_smart_step_into_variant = NULL; - PyObject *__pyx_v_children_variants = NULL; - PyObject *__pyx_v_f_code = NULL; - CYTHON_UNUSED PyObject *__pyx_v_stopped_on_plugin = NULL; - PyObject *__pyx_v_back_absolute_filename = NULL; - CYTHON_UNUSED PyObject *__pyx_v__ = NULL; - PyObject *__pyx_v_base = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_t_10; - int __pyx_t_11; - Py_ssize_t __pyx_t_12; - PyObject *(*__pyx_t_13)(PyObject *); - int __pyx_t_14; - PyObject *(*__pyx_t_15)(PyObject *); - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - int __pyx_t_19; - Py_ssize_t __pyx_t_20; - PyObject *__pyx_t_21 = NULL; - char const *__pyx_t_22; - PyObject *__pyx_t_23 = NULL; - PyObject *__pyx_t_24 = NULL; - PyObject *__pyx_t_25 = NULL; - PyObject *__pyx_t_26 = NULL; - PyObject *__pyx_t_27 = NULL; - PyObject *__pyx_t_28 = NULL; - int __pyx_t_29; - char const *__pyx_t_30; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_dispatch", 0); - __Pyx_INCREF(__pyx_v_frame); - /* Check if called by wrapper */ - if (unlikely(__pyx_skip_dispatch)) ; - /* Check if overridden in Python */ - else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { - PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - #endif - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch)) { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - { - __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_arg); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - } - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); - __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); - if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) { - __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS - } - #endif - } - /* "_pydevd_bundle/pydevd_cython.pyx":741 - * # generation be better split among what each part does). - * - * try: # <<<<<<<<<<<<<< - * # DEBUG = '_debugger_case_generator.py' in frame.f_code.co_filename - * main_debugger, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args - */ - /*try:*/ { - - /* "_pydevd_bundle/pydevd_cython.pyx":743 - * try: - * # DEBUG = '_debugger_case_generator.py' in frame.f_code.co_filename - * main_debugger, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args # <<<<<<<<<<<<<< - * # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) - * info.is_tracing += 1 + /* "_pydevd_bundle/pydevd_cython.pyx":780 + * elif event == "exception": + * breakpoints_for_file = None + * if has_exception_breakpoints: # <<<<<<<<<<<<<< + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info */ - __pyx_t_1 = __pyx_v_self->_args; - __Pyx_INCREF(__pyx_t_1); - if (likely(__pyx_t_1 != Py_None)) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 6)) { - if (size > 6) __Pyx_RaiseTooManyValuesError(6); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 743, __pyx_L4_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 3); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 4); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - #else - { - Py_ssize_t i; - PyObject** temps[6] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_6,&__pyx_t_4,&__pyx_t_7,&__pyx_t_8}; - for (i=0; i < 6; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 743, __pyx_L4_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; } - } - #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 743, __pyx_L4_error) - } - if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 743, __pyx_L4_error) - if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 743, __pyx_L4_error) - if (!(likely(PyDict_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_7)->tp_name), 0))) __PYX_ERR(0, 743, __pyx_L4_error) - __pyx_v_main_debugger = __pyx_t_2; - __pyx_t_2 = 0; - __pyx_v_abs_path_canonical_path_and_base = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_6); - __pyx_t_6 = 0; - __pyx_v_thread = __pyx_t_4; - __pyx_t_4 = 0; - __pyx_v_frame_skips_cache = ((PyObject*)__pyx_t_7); - __pyx_t_7 = 0; - __pyx_v_frame_cache_key = __pyx_t_8; - __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":745 - * main_debugger, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args - * # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) - * info.is_tracing += 1 # <<<<<<<<<<<<<< - * - * # TODO: This shouldn't be needed. The fact that frame.f_lineno - */ - __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing + 1); - - /* "_pydevd_bundle/pydevd_cython.pyx":750 - * # is None seems like a bug in Python 3.11. - * # Reported in: https://github.com/python/cpython/issues/94485 - * line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None # <<<<<<<<<<<<<< - * line_cache_key = (frame_cache_key, line) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 750, __pyx_L4_error) - if (!__pyx_t_9) { - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } else { - __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 750, __pyx_L4_error) - __pyx_t_5 = __pyx_t_10; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L6_bool_binop_done; - } - __pyx_t_5 = 0; - __pyx_L6_bool_binop_done:; - __pyx_v_line = __pyx_t_5; - /* "_pydevd_bundle/pydevd_cython.pyx":751 - * # Reported in: https://github.com/python/cpython/issues/94485 - * line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None - * line_cache_key = (frame_cache_key, line) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":789 + * return self.trace_dispatch * - * if main_debugger.pydb_disposed: + * return self.trace_dispatch # <<<<<<<<<<<<<< + * else: + * # event == 'call' or event == 'c_XXX' */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 751, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_frame_cache_key); - __Pyx_GIVEREF(__pyx_v_frame_cache_key); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_frame_cache_key); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_line_cache_key = ((PyObject*)__pyx_t_8); - __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":753 - * line_cache_key = (frame_cache_key, line) - * - * if main_debugger.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":778 + * info.pydev_step_stop = None * + * elif event == "exception": # <<<<<<<<<<<<<< + * breakpoints_for_file = None + * if has_exception_breakpoints: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 753, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 753, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":754 - * - * if main_debugger.pydb_disposed: - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":792 + * else: + * # event == 'call' or event == 'c_XXX' + * return self.trace_dispatch # <<<<<<<<<<<<<< * - * plugin_manager = main_debugger.plugin + * else: # Not coroutine nor generator */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 754, __pyx_L4_error) - if ((__pyx_t_9 != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_8 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L4_error) + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_t_1; + __pyx_r = __pyx_t_1; __pyx_t_1 = 0; + goto __pyx_L3_return; } - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L3_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":753 - * line_cache_key = (frame_cache_key, line) - * - * if main_debugger.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE - * - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":756 - * return None if event == 'call' else NO_FTRACE - * - * plugin_manager = main_debugger.plugin # <<<<<<<<<<<<<< - * has_exception_breakpoints = ( - * main_debugger.break_on_caught_exceptions - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_plugin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 756, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_v_plugin_manager = __pyx_t_8; - __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":758 - * plugin_manager = main_debugger.plugin - * has_exception_breakpoints = ( - * main_debugger.break_on_caught_exceptions # <<<<<<<<<<<<<< - * or main_debugger.break_on_user_uncaught_exceptions - * or main_debugger.has_plugin_exception_breaks) - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 758, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 758, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L9_bool_binop_done; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":759 - * has_exception_breakpoints = ( - * main_debugger.break_on_caught_exceptions - * or main_debugger.break_on_user_uncaught_exceptions # <<<<<<<<<<<<<< - * or main_debugger.has_plugin_exception_breaks) - * - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 759, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 759, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L9_bool_binop_done; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":760 - * main_debugger.break_on_caught_exceptions - * or main_debugger.break_on_user_uncaught_exceptions - * or main_debugger.has_plugin_exception_breaks) # <<<<<<<<<<<<<< - * - * stop_frame = info.pydev_step_stop - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 760, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 760, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __pyx_t_11; - __pyx_L9_bool_binop_done:; - __pyx_v_has_exception_breakpoints = __pyx_t_9; - - /* "_pydevd_bundle/pydevd_cython.pyx":762 - * or main_debugger.has_plugin_exception_breaks) - * - * stop_frame = info.pydev_step_stop # <<<<<<<<<<<<<< - * step_cmd = info.pydev_step_cmd - * function_breakpoint_on_call_event = None - */ - __pyx_t_8 = __pyx_v_info->pydev_step_stop; - __Pyx_INCREF(__pyx_t_8); - __pyx_v_stop_frame = __pyx_t_8; - __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":763 - * - * stop_frame = info.pydev_step_stop - * step_cmd = info.pydev_step_cmd # <<<<<<<<<<<<<< - * function_breakpoint_on_call_event = None - * - */ - __pyx_t_5 = __pyx_v_info->pydev_step_cmd; - __pyx_v_step_cmd = __pyx_t_5; - - /* "_pydevd_bundle/pydevd_cython.pyx":764 - * stop_frame = info.pydev_step_stop - * step_cmd = info.pydev_step_cmd - * function_breakpoint_on_call_event = None # <<<<<<<<<<<<<< - * - * if frame.f_code.co_flags & 0xa0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 - */ - __Pyx_INCREF(Py_None); - __pyx_v_function_breakpoint_on_call_event = Py_None; + __pyx_L13:; - /* "_pydevd_bundle/pydevd_cython.pyx":766 + /* "_pydevd_bundle/pydevd_cython.pyx":699 * function_breakpoint_on_call_event = None * - * if frame.f_code.co_flags & 0xa0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # <<<<<<<<<<<<<< + * if frame.f_code.co_flags & 0xA0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # <<<<<<<<<<<<<< * # Dealing with coroutines and generators: * # When in a coroutine we change the perceived event to the debugger because */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 766, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_AndObjC(__pyx_t_1, __pyx_int_160, 0xa0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 766, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 766, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { + goto __pyx_L12; + } - /* "_pydevd_bundle/pydevd_cython.pyx":770 - * # When in a coroutine we change the perceived event to the debugger because - * # a call, StopIteration exception and return are usually just pausing/unpausing it. - * if event == 'line': # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":795 + * + * else: # Not coroutine nor generator + * if event == "line": # <<<<<<<<<<<<<< * is_line = True * is_call = False */ - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_line, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 770, __pyx_L4_error) - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { + /*else*/ { + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_line, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 795, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":771 - * # a call, StopIteration exception and return are usually just pausing/unpausing it. - * if event == 'line': + /* "_pydevd_bundle/pydevd_cython.pyx":796 + * else: # Not coroutine nor generator + * if event == "line": * is_line = True # <<<<<<<<<<<<<< * is_call = False * is_return = False */ __pyx_v_is_line = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":772 - * if event == 'line': + /* "_pydevd_bundle/pydevd_cython.pyx":797 + * if event == "line": * is_line = True * is_call = False # <<<<<<<<<<<<<< * is_return = False @@ -15148,7 +18378,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispa */ __pyx_v_is_call = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":773 + /* "_pydevd_bundle/pydevd_cython.pyx":798 * is_line = True * is_call = False * is_return = False # <<<<<<<<<<<<<< @@ -15157,9378 +18387,12719 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispa */ __pyx_v_is_return = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":774 + /* "_pydevd_bundle/pydevd_cython.pyx":799 * is_call = False * is_return = False * is_exception_event = False # <<<<<<<<<<<<<< * - * elif event == 'return': + * elif event == "return": */ __pyx_v_is_exception_event = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":770 - * # When in a coroutine we change the perceived event to the debugger because - * # a call, StopIteration exception and return are usually just pausing/unpausing it. - * if event == 'line': # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":795 + * + * else: # Not coroutine nor generator + * if event == "line": # <<<<<<<<<<<<<< * is_line = True * is_call = False */ - goto __pyx_L13; + goto __pyx_L30; } - /* "_pydevd_bundle/pydevd_cython.pyx":776 + /* "_pydevd_bundle/pydevd_cython.pyx":801 * is_exception_event = False * - * elif event == 'return': # <<<<<<<<<<<<<< + * elif event == "return": # <<<<<<<<<<<<<< * is_line = False - * is_call = False + * is_return = True */ - __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 776, __pyx_L4_error) - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 801, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":777 + /* "_pydevd_bundle/pydevd_cython.pyx":802 * - * elif event == 'return': + * elif event == "return": * is_line = False # <<<<<<<<<<<<<< - * is_call = False * is_return = True + * is_call = False */ __pyx_v_is_line = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":778 - * elif event == 'return': + /* "_pydevd_bundle/pydevd_cython.pyx":803 + * elif event == "return": * is_line = False - * is_call = False # <<<<<<<<<<<<<< - * is_return = True + * is_return = True # <<<<<<<<<<<<<< + * is_call = False * is_exception_event = False */ - __pyx_v_is_call = 0; + __pyx_v_is_return = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":779 + /* "_pydevd_bundle/pydevd_cython.pyx":804 * is_line = False - * is_call = False - * is_return = True # <<<<<<<<<<<<<< + * is_return = True + * is_call = False # <<<<<<<<<<<<<< * is_exception_event = False * */ - __pyx_v_is_return = 1; + __pyx_v_is_call = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":780 - * is_call = False + /* "_pydevd_bundle/pydevd_cython.pyx":805 * is_return = True + * is_call = False * is_exception_event = False # <<<<<<<<<<<<<< * - * returns_cache_key = (frame_cache_key, 'returns') + * # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break */ __pyx_v_is_exception_event = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":782 - * is_exception_event = False - * - * returns_cache_key = (frame_cache_key, 'returns') # <<<<<<<<<<<<<< - * return_lines = frame_skips_cache.get(returns_cache_key) - * if return_lines is None: + /* "_pydevd_bundle/pydevd_cython.pyx":814 + * # @DontTrace comment. + * if ( + * stop_frame is frame # <<<<<<<<<<<<<< + * and not info.pydev_use_scoped_step_frame + * and is_return */ - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 782, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_frame_cache_key); - __Pyx_GIVEREF(__pyx_v_frame_cache_key); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_frame_cache_key); - __Pyx_INCREF(__pyx_n_s_returns); - __Pyx_GIVEREF(__pyx_n_s_returns); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_n_s_returns); - __pyx_v_returns_cache_key = ((PyObject*)__pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_12 = (__pyx_v_stop_frame == __pyx_v_frame); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L32_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":783 - * - * returns_cache_key = (frame_cache_key, 'returns') - * return_lines = frame_skips_cache.get(returns_cache_key) # <<<<<<<<<<<<<< - * if return_lines is None: - * # Note: we're collecting the return lines by inspecting the bytecode as + /* "_pydevd_bundle/pydevd_cython.pyx":815 + * if ( + * stop_frame is frame + * and not info.pydev_use_scoped_step_frame # <<<<<<<<<<<<<< + * and is_return + * and step_cmd */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 783, __pyx_L4_error) + __pyx_t_12 = (!__pyx_v_info->pydev_use_scoped_step_frame); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L32_bool_binop_done; } - __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_returns_cache_key, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 783, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_v_return_lines = __pyx_t_8; - __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":784 - * returns_cache_key = (frame_cache_key, 'returns') - * return_lines = frame_skips_cache.get(returns_cache_key) - * if return_lines is None: # <<<<<<<<<<<<<< - * # Note: we're collecting the return lines by inspecting the bytecode as - * # there are multiple returns and multiple stop iterations when awaiting and + /* "_pydevd_bundle/pydevd_cython.pyx":816 + * stop_frame is frame + * and not info.pydev_use_scoped_step_frame + * and is_return # <<<<<<<<<<<<<< + * and step_cmd + * in (108, 109, 159, 160, 128) */ - __pyx_t_9 = (__pyx_v_return_lines == Py_None); - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { + if (__pyx_v_is_return) { + } else { + __pyx_t_10 = __pyx_v_is_return; + goto __pyx_L32_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":789 - * # it doesn't give any clear indication when a coroutine or generator is - * # finishing or just pausing. - * return_lines = set() # <<<<<<<<<<<<<< - * for x in main_debugger.collect_return_info(frame.f_code): - * # Note: cython does not support closures in cpdefs (so we can't use + /* "_pydevd_bundle/pydevd_cython.pyx":818 + * and is_return + * and step_cmd + * in (108, 109, 159, 160, 128) # <<<<<<<<<<<<<< + * ): + * if step_cmd in (108, 109, 128): */ - __pyx_t_8 = PySet_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 789, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_return_lines, __pyx_t_8); - __pyx_t_8 = 0; + switch (__pyx_v_step_cmd) { + case 0x6C: + case 0x6D: + case 0x9F: + case 0xA0: + case 0x80: + __pyx_t_12 = 1; + break; + default: + __pyx_t_12 = 0; + break; + } + __pyx_t_16 = __pyx_t_12; + __pyx_t_10 = __pyx_t_16; + __pyx_L32_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":790 - * # finishing or just pausing. - * return_lines = set() - * for x in main_debugger.collect_return_info(frame.f_code): # <<<<<<<<<<<<<< - * # Note: cython does not support closures in cpdefs (so we can't use - * # a list comprehension). + /* "_pydevd_bundle/pydevd_cython.pyx":813 + * # Note: this is especially troublesome when we're skipping code with the + * # @DontTrace comment. + * if ( # <<<<<<<<<<<<<< + * stop_frame is frame + * and not info.pydev_use_scoped_step_frame */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_collect_return_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_8 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) { - __pyx_t_1 = __pyx_t_8; __Pyx_INCREF(__pyx_t_1); __pyx_t_12 = 0; - __pyx_t_13 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 790, __pyx_L4_error) - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - for (;;) { - if (likely(!__pyx_t_13)) { - if (likely(PyList_CheckExact(__pyx_t_1))) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 790, __pyx_L4_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } else { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_12); __Pyx_INCREF(__pyx_t_8); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 790, __pyx_L4_error) - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_1, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 790, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - #endif - } - } else { - __pyx_t_8 = __pyx_t_13(__pyx_t_1); - if (unlikely(!__pyx_t_8)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 790, __pyx_L4_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_8); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_8); - __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":793 - * # Note: cython does not support closures in cpdefs (so we can't use - * # a list comprehension). - * return_lines.add(x.return_line) # <<<<<<<<<<<<<< - * - * frame_skips_cache[returns_cache_key] = return_lines - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_return_lines, __pyx_n_s_add); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 793, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_return_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 793, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_8 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 793, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":790 - * # finishing or just pausing. - * return_lines = set() - * for x in main_debugger.collect_return_info(frame.f_code): # <<<<<<<<<<<<<< - * # Note: cython does not support closures in cpdefs (so we can't use - * # a list comprehension). + /* "_pydevd_bundle/pydevd_cython.pyx":820 + * in (108, 109, 159, 160, 128) + * ): + * if step_cmd in (108, 109, 128): # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 107 + * else: */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + switch (__pyx_v_step_cmd) { + case 0x6C: + case 0x6D: + case 0x80: - /* "_pydevd_bundle/pydevd_cython.pyx":795 - * return_lines.add(x.return_line) - * - * frame_skips_cache[returns_cache_key] = return_lines # <<<<<<<<<<<<<< - * - * if line not in return_lines: + /* "_pydevd_bundle/pydevd_cython.pyx":821 + * ): + * if step_cmd in (108, 109, 128): + * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< + * else: + * info.pydev_step_cmd = 144 */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 795, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_returns_cache_key, __pyx_v_return_lines) < 0)) __PYX_ERR(0, 795, __pyx_L4_error) + __pyx_v_info->pydev_step_cmd = 0x6B; - /* "_pydevd_bundle/pydevd_cython.pyx":784 - * returns_cache_key = (frame_cache_key, 'returns') - * return_lines = frame_skips_cache.get(returns_cache_key) - * if return_lines is None: # <<<<<<<<<<<<<< - * # Note: we're collecting the return lines by inspecting the bytecode as - * # there are multiple returns and multiple stop iterations when awaiting and + /* "_pydevd_bundle/pydevd_cython.pyx":820 + * in (108, 109, 159, 160, 128) + * ): + * if step_cmd in (108, 109, 128): # <<<<<<<<<<<<<< + * info.pydev_step_cmd = 107 + * else: */ - } + break; + default: - /* "_pydevd_bundle/pydevd_cython.pyx":797 - * frame_skips_cache[returns_cache_key] = return_lines + /* "_pydevd_bundle/pydevd_cython.pyx":823 + * info.pydev_step_cmd = 107 + * else: + * info.pydev_step_cmd = 144 # <<<<<<<<<<<<<< + * info.pydev_step_stop = None * - * if line not in return_lines: # <<<<<<<<<<<<<< - * # Not really a return (coroutine/generator paused). - * return self.trace_dispatch */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 797, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_return_lines, Py_NE)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 797, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { + __pyx_v_info->pydev_step_cmd = 0x90; + break; + } - /* "_pydevd_bundle/pydevd_cython.pyx":799 - * if line not in return_lines: - * # Not really a return (coroutine/generator paused). - * return self.trace_dispatch # <<<<<<<<<<<<<< - * else: - * if self.exc_info: + /* "_pydevd_bundle/pydevd_cython.pyx":824 + * else: + * info.pydev_step_cmd = 144 + * info.pydev_step_stop = None # <<<<<<<<<<<<<< + * + * if self.exc_info: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L3_return; + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":797 - * frame_skips_cache[returns_cache_key] = return_lines - * - * if line not in return_lines: # <<<<<<<<<<<<<< - * # Not really a return (coroutine/generator paused). - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":813 + * # Note: this is especially troublesome when we're skipping code with the + * # @DontTrace comment. + * if ( # <<<<<<<<<<<<<< + * stop_frame is frame + * and not info.pydev_use_scoped_step_frame */ } - /* "_pydevd_bundle/pydevd_cython.pyx":801 - * return self.trace_dispatch - * else: - * if self.exc_info: # <<<<<<<<<<<<<< - * self.handle_user_exception(frame) + /* "_pydevd_bundle/pydevd_cython.pyx":826 + * info.pydev_step_stop = None + * + * if self.exc_info: # <<<<<<<<<<<<<< + * if self.handle_user_exception(frame): * return self.trace_dispatch */ - /*else*/ { - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_self->exc_info); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 801, __pyx_L4_error) - if (__pyx_t_9) { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_self->exc_info); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 826, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":802 - * else: - * if self.exc_info: - * self.handle_user_exception(frame) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":827 + * + * if self.exc_info: + * if self.handle_user_exception(frame): # <<<<<<<<<<<<<< * return self.trace_dispatch * */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 802, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 827, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; } - __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_frame); + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 802, __pyx_L4_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 827, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":803 - * if self.exc_info: - * self.handle_user_exception(frame) + /* "_pydevd_bundle/pydevd_cython.pyx":828 + * if self.exc_info: + * if self.handle_user_exception(frame): * return self.trace_dispatch # <<<<<<<<<<<<<< * - * # Tricky handling: usually when we're on a frame which is about to exit + * elif event == "call": */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 803, __pyx_L4_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":801 - * return self.trace_dispatch - * else: - * if self.exc_info: # <<<<<<<<<<<<<< - * self.handle_user_exception(frame) - * return self.trace_dispatch - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":821 - * # as the return shouldn't mean that we've actually completed executing a - * # frame in this case). - * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if step_cmd in (108, 159, 107, 144): - * f = self._get_unfiltered_back_frame(main_debugger, frame) - */ - __pyx_t_11 = (__pyx_v_stop_frame == __pyx_v_frame); - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L20_bool_binop_done; - } - __pyx_t_14 = ((!(__pyx_v_info->pydev_use_scoped_step_frame != 0)) != 0); - __pyx_t_9 = __pyx_t_14; - __pyx_L20_bool_binop_done:; - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":822 - * # frame in this case). - * if stop_frame is frame and not info.pydev_use_scoped_step_frame: - * if step_cmd in (108, 159, 107, 144): # <<<<<<<<<<<<<< - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: - */ - switch (__pyx_v_step_cmd) { - case 0x6C: - case 0x9F: - case 0x6B: - case 0x90: - - /* "_pydevd_bundle/pydevd_cython.pyx":823 - * if stop_frame is frame and not info.pydev_use_scoped_step_frame: - * if step_cmd in (108, 159, 107, 144): - * f = self._get_unfiltered_back_frame(main_debugger, frame) # <<<<<<<<<<<<<< - * if f is not None: - * info.pydev_step_cmd = 206 - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_get_unfiltered_back_frame(__pyx_v_self, __pyx_v_main_debugger, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 823, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_f = __pyx_t_1; - __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":824 - * if step_cmd in (108, 159, 107, 144): - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 206 - * info.pydev_step_stop = f - */ - __pyx_t_9 = (__pyx_v_f != Py_None); - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":825 - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: - * info.pydev_step_cmd = 206 # <<<<<<<<<<<<<< - * info.pydev_step_stop = f - * else: - */ - __pyx_v_info->pydev_step_cmd = 0xCE; - - /* "_pydevd_bundle/pydevd_cython.pyx":826 - * if f is not None: - * info.pydev_step_cmd = 206 - * info.pydev_step_stop = f # <<<<<<<<<<<<<< - * else: - * if step_cmd == 108: - */ - __Pyx_INCREF(__pyx_v_f); - __Pyx_GIVEREF(__pyx_v_f); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = __pyx_v_f; - - /* "_pydevd_bundle/pydevd_cython.pyx":824 - * if step_cmd in (108, 159, 107, 144): - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 206 - * info.pydev_step_stop = f - */ - goto __pyx_L22; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":828 - * info.pydev_step_stop = f - * else: - * if step_cmd == 108: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 107 - * info.pydev_step_stop = None - */ - /*else*/ { - - /* "_pydevd_bundle/pydevd_cython.pyx":832 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":827 * - * elif step_cmd == 159: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 144 - * info.pydev_step_stop = None - */ - switch (__pyx_v_step_cmd) { - case 0x6C: - - /* "_pydevd_bundle/pydevd_cython.pyx":829 - * else: - * if step_cmd == 108: - * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< - * info.pydev_step_stop = None + * if self.exc_info: + * if self.handle_user_exception(frame): # <<<<<<<<<<<<<< + * return self.trace_dispatch * */ - __pyx_v_info->pydev_step_cmd = 0x6B; + } - /* "_pydevd_bundle/pydevd_cython.pyx":830 - * if step_cmd == 108: - * info.pydev_step_cmd = 107 - * info.pydev_step_stop = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":826 + * info.pydev_step_stop = None * - * elif step_cmd == 159: - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = Py_None; - - /* "_pydevd_bundle/pydevd_cython.pyx":828 - * info.pydev_step_stop = f - * else: - * if step_cmd == 108: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 107 - * info.pydev_step_stop = None + * if self.exc_info: # <<<<<<<<<<<<<< + * if self.handle_user_exception(frame): + * return self.trace_dispatch */ - break; - case 0x9F: + } - /* "_pydevd_bundle/pydevd_cython.pyx":833 - * - * elif step_cmd == 159: - * info.pydev_step_cmd = 144 # <<<<<<<<<<<<<< - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":801 + * is_exception_event = False * + * elif event == "return": # <<<<<<<<<<<<<< + * is_line = False + * is_return = True */ - __pyx_v_info->pydev_step_cmd = 0x90; + goto __pyx_L30; + } - /* "_pydevd_bundle/pydevd_cython.pyx":834 - * elif step_cmd == 159: - * info.pydev_step_cmd = 144 - * info.pydev_step_stop = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":830 + * return self.trace_dispatch * - * elif step_cmd == 206: + * elif event == "call": # <<<<<<<<<<<<<< + * is_line = False + * is_call = True */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = Py_None; + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 830, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":832 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":831 * - * elif step_cmd == 159: # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 144 - * info.pydev_step_stop = None - */ - break; - default: break; - } - } - __pyx_L22:; - - /* "_pydevd_bundle/pydevd_cython.pyx":822 - * # frame in this case). - * if stop_frame is frame and not info.pydev_use_scoped_step_frame: - * if step_cmd in (108, 159, 107, 144): # <<<<<<<<<<<<<< - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: - */ - break; - case 0xCE: - - /* "_pydevd_bundle/pydevd_cython.pyx":838 - * elif step_cmd == 206: - * # We're exiting this one, so, mark the new coroutine context. - * f = self._get_unfiltered_back_frame(main_debugger, frame) # <<<<<<<<<<<<<< - * if f is not None: - * info.pydev_step_stop = f - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_get_unfiltered_back_frame(__pyx_v_self, __pyx_v_main_debugger, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 838, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_f = __pyx_t_1; - __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":839 - * # We're exiting this one, so, mark the new coroutine context. - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: # <<<<<<<<<<<<<< - * info.pydev_step_stop = f - * else: + * elif event == "call": + * is_line = False # <<<<<<<<<<<<<< + * is_call = True + * is_return = False */ - __pyx_t_14 = (__pyx_v_f != Py_None); - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + __pyx_v_is_line = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":840 - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: - * info.pydev_step_stop = f # <<<<<<<<<<<<<< - * else: - * info.pydev_step_cmd = 107 + /* "_pydevd_bundle/pydevd_cython.pyx":832 + * elif event == "call": + * is_line = False + * is_call = True # <<<<<<<<<<<<<< + * is_return = False + * is_exception_event = False */ - __Pyx_INCREF(__pyx_v_f); - __Pyx_GIVEREF(__pyx_v_f); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = __pyx_v_f; + __pyx_v_is_call = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":839 - * # We're exiting this one, so, mark the new coroutine context. - * f = self._get_unfiltered_back_frame(main_debugger, frame) - * if f is not None: # <<<<<<<<<<<<<< - * info.pydev_step_stop = f - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":833 + * is_line = False + * is_call = True + * is_return = False # <<<<<<<<<<<<<< + * is_exception_event = False + * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. */ - goto __pyx_L23; - } + __pyx_v_is_return = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":842 - * info.pydev_step_stop = f - * else: - * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< - * info.pydev_step_stop = None - * + /* "_pydevd_bundle/pydevd_cython.pyx":834 + * is_call = True + * is_return = False + * is_exception_event = False # <<<<<<<<<<<<<< + * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) */ - /*else*/ { - __pyx_v_info->pydev_step_cmd = 0x6B; + __pyx_v_is_exception_event = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":843 - * else: - * info.pydev_step_cmd = 107 - * info.pydev_step_stop = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":835 + * is_return = False + * is_exception_event = False + * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. # <<<<<<<<<<<<<< + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) * - * elif event == 'exception': */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = Py_None; - } - __pyx_L23:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_firstlineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 835, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 835, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 835, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 835, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":836 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":836 + * is_exception_event = False + * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) # <<<<<<<<<<<<<< * - * elif step_cmd == 206: # <<<<<<<<<<<<<< - * # We're exiting this one, so, mark the new coroutine context. - * f = self._get_unfiltered_back_frame(main_debugger, frame) + * elif event == "exception": */ - break; - default: break; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_function_breakpoint_name_to_brea); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 836, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 836, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_8}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 836, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF_SET(__pyx_v_function_breakpoint_on_call_event, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":821 - * # as the return shouldn't mean that we've actually completed executing a - * # frame in this case). - * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if step_cmd in (108, 159, 107, 144): - * f = self._get_unfiltered_back_frame(main_debugger, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":835 + * is_return = False + * is_exception_event = False + * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. # <<<<<<<<<<<<<< + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + * */ - } } - /* "_pydevd_bundle/pydevd_cython.pyx":776 - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":830 + * return self.trace_dispatch * - * elif event == 'return': # <<<<<<<<<<<<<< + * elif event == "call": # <<<<<<<<<<<<<< * is_line = False - * is_call = False + * is_call = True */ - goto __pyx_L13; + goto __pyx_L30; } - /* "_pydevd_bundle/pydevd_cython.pyx":845 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":838 + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) * - * elif event == 'exception': # <<<<<<<<<<<<<< + * elif event == "exception": # <<<<<<<<<<<<<< + * is_exception_event = True * breakpoints_for_file = None - * if has_exception_breakpoints: */ - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 845, __pyx_L4_error) - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 838, __pyx_L4_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":846 + /* "_pydevd_bundle/pydevd_cython.pyx":839 * - * elif event == 'exception': + * elif event == "exception": + * is_exception_event = True # <<<<<<<<<<<<<< + * breakpoints_for_file = None + * if has_exception_breakpoints: + */ + __pyx_v_is_exception_event = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":840 + * elif event == "exception": + * is_exception_event = True * breakpoints_for_file = None # <<<<<<<<<<<<<< * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + * should_stop, frame, exc_info = should_stop_on_exception( */ __Pyx_INCREF(Py_None); __pyx_v_breakpoints_for_file = ((PyObject*)Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":847 - * elif event == 'exception': + /* "_pydevd_bundle/pydevd_cython.pyx":841 + * is_exception_event = True * breakpoints_for_file = None * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info */ - __pyx_t_14 = (__pyx_v_has_exception_breakpoints != 0); - if (__pyx_t_14) { + if (__pyx_v_has_exception_breakpoints) { - /* "_pydevd_bundle/pydevd_cython.pyx":848 + /* "_pydevd_bundle/pydevd_cython.pyx":842 * breakpoints_for_file = None * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) # <<<<<<<<<<<<<< - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + * should_stop, frame, exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "_pydevd_bundle/pydevd_cython.pyx":843 + * if has_exception_breakpoints: + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info # <<<<<<<<<<<<<< + * ) + * self.exc_info = exc_info */ - __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_should_stop_on_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L4_error) + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 843, __pyx_L4_error) + } + __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 843, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 843, __pyx_L4_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 843, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { - PyObject* sequence = __pyx_t_1; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 848, __pyx_L4_error) + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 843, __pyx_L4_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 843, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_8 = PyList_GET_ITEM(sequence, 0); - __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_3, __pyx_t_8, __pyx_t_1, __pyx_v_frame, __pyx_t_4, __pyx_v_arg, __pyx_v_self->exc_info}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 6+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { + PyObject* sequence = __pyx_t_7; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 842, __pyx_L4_error) } - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_6 = PyList_GET_ITEM(sequence, 0); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); + __pyx_t_1 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); #else - __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 848, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 848, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); #endif - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } else { Py_ssize_t index = -1; - __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 848, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_15 = Py_TYPE(__pyx_t_4)->tp_iternext; - index = 0; __pyx_t_8 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_8)) goto __pyx_L25_unpacking_failed; + __pyx_t_8 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 842, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); - index = 1; __pyx_t_7 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L25_unpacking_failed; - __Pyx_GOTREF(__pyx_t_7); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < 0) __PYX_ERR(0, 848, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); + index = 0; __pyx_t_6 = __pyx_t_15(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L40_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 1; __pyx_t_4 = __pyx_t_15(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L40_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 2; __pyx_t_1 = __pyx_t_15(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L40_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_8), 3) < 0) __PYX_ERR(0, 842, __pyx_L4_error) __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L26_unpacking_done; - __pyx_L25_unpacking_failed:; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L41_unpacking_done; + __pyx_L40_unpacking_failed:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_15 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 848, __pyx_L4_error) - __pyx_L26_unpacking_done:; + __PYX_ERR(0, 842, __pyx_L4_error) + __pyx_L41_unpacking_done:; } - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 848, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_should_stop = __pyx_t_14; - __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_7); - __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":849 + /* "_pydevd_bundle/pydevd_cython.pyx":842 + * breakpoints_for_file = None * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + * should_stop, frame, exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 842, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_should_stop = __pyx_t_10; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_v_exc_info = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":845 + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + * ) + * self.exc_info = exc_info # <<<<<<<<<<<<<< + * if should_stop: + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + */ + __Pyx_INCREF(__pyx_v_exc_info); + __Pyx_GIVEREF(__pyx_v_exc_info); + __Pyx_GOTREF(__pyx_v_self->exc_info); + __Pyx_DECREF(__pyx_v_self->exc_info); + __pyx_v_self->exc_info = __pyx_v_exc_info; + + /* "_pydevd_bundle/pydevd_cython.pyx":846 + * ) + * self.exc_info = exc_info * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): * return self.trace_dispatch */ - __pyx_t_14 = (__pyx_v_should_stop != 0); - if (__pyx_t_14) { + if (__pyx_v_should_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":850 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":847 + * self.exc_info = exc_info * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< * return self.trace_dispatch - * + * is_line = False */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L4_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 847, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 850, __pyx_L4_error) - __pyx_t_7 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_handle_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 850, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 850, __pyx_L4_error) + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 847, __pyx_L4_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 847, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 847, __pyx_L4_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 847, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 847, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_3, __pyx_t_4, __pyx_t_6, __pyx_v_frame, __pyx_v_arg, __pyx_t_8}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 847, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 847, __pyx_L4_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_14) { + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":851 + /* "_pydevd_bundle/pydevd_cython.pyx":848 * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): * return self.trace_dispatch # <<<<<<<<<<<<<< - * - * return self.trace_dispatch + * is_line = False + * is_return = False */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 851, __pyx_L4_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 848, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":850 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":847 + * self.exc_info = exc_info * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< * return self.trace_dispatch - * + * is_line = False */ } - /* "_pydevd_bundle/pydevd_cython.pyx":849 - * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":846 + * ) + * self.exc_info = exc_info * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): * return self.trace_dispatch */ } - /* "_pydevd_bundle/pydevd_cython.pyx":847 - * elif event == 'exception': + /* "_pydevd_bundle/pydevd_cython.pyx":841 + * is_exception_event = True * breakpoints_for_file = None * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: + * should_stop, frame, exc_info = should_stop_on_exception( + * self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info */ } - /* "_pydevd_bundle/pydevd_cython.pyx":853 + /* "_pydevd_bundle/pydevd_cython.pyx":849 + * if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): + * return self.trace_dispatch + * is_line = False # <<<<<<<<<<<<<< + * is_return = False + * is_call = False + */ + __pyx_v_is_line = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":850 * return self.trace_dispatch + * is_line = False + * is_return = False # <<<<<<<<<<<<<< + * is_call = False + * + */ + __pyx_v_is_return = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":851 + * is_line = False + * is_return = False + * is_call = False # <<<<<<<<<<<<<< * - * return self.trace_dispatch # <<<<<<<<<<<<<< * else: - * # event == 'call' or event == 'c_XXX' */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 853, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L3_return; + __pyx_v_is_call = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":845 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":838 + * function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) * - * elif event == 'exception': # <<<<<<<<<<<<<< + * elif event == "exception": # <<<<<<<<<<<<<< + * is_exception_event = True * breakpoints_for_file = None - * if has_exception_breakpoints: */ + goto __pyx_L30; } - /* "_pydevd_bundle/pydevd_cython.pyx":856 + /* "_pydevd_bundle/pydevd_cython.pyx":855 * else: - * # event == 'call' or event == 'c_XXX' + * # Unexpected: just keep the same trace func (i.e.: event == 'c_XXX'). * return self.trace_dispatch # <<<<<<<<<<<<<< * - * else: # Not coroutine nor generator + * if not is_exception_event: */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 856, __pyx_L4_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 855, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); __pyx_r = __pyx_t_7; __pyx_t_7 = 0; goto __pyx_L3_return; } - __pyx_L13:; + __pyx_L30:; + } + __pyx_L12:; - /* "_pydevd_bundle/pydevd_cython.pyx":766 - * function_breakpoint_on_call_event = None + /* "_pydevd_bundle/pydevd_cython.pyx":857 + * return self.trace_dispatch + * + * if not is_exception_event: # <<<<<<<<<<<<<< + * breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) * - * if frame.f_code.co_flags & 0xa0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # <<<<<<<<<<<<<< - * # Dealing with coroutines and generators: - * # When in a coroutine we change the perceived event to the debugger because */ - goto __pyx_L12; - } + __pyx_t_10 = (!__pyx_v_is_exception_event); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":859 + /* "_pydevd_bundle/pydevd_cython.pyx":858 * - * else: # Not coroutine nor generator - * if event == 'line': # <<<<<<<<<<<<<< - * is_line = True - * is_call = False + * if not is_exception_event: + * breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) # <<<<<<<<<<<<<< + * + * can_skip = False */ - /*else*/ { - __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_line, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 859, __pyx_L4_error) - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_breakpoints); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 858, __pyx_L4_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_1}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 858, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_7))) __PYX_ERR(0, 858, __pyx_L4_error) + __Pyx_XDECREF_SET(__pyx_v_breakpoints_for_file, ((PyObject*)__pyx_t_7)); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":860 - * else: # Not coroutine nor generator - * if event == 'line': - * is_line = True # <<<<<<<<<<<<<< - * is_call = False - * is_return = False + /* "_pydevd_bundle/pydevd_cython.pyx":860 + * breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) + * + * can_skip = False # <<<<<<<<<<<<<< + * + * if info.pydev_state == 1: # 1 = 1 */ - __pyx_v_is_line = 1; + __pyx_v_can_skip = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":861 - * if event == 'line': - * is_line = True - * is_call = False # <<<<<<<<<<<<<< - * is_return = False - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":862 + * can_skip = False + * + * if info.pydev_state == 1: # 1 = 1 # <<<<<<<<<<<<<< + * # we can skip if: + * # - we have no stop marked */ - __pyx_v_is_call = 0; + __pyx_t_10 = (__pyx_v_info->pydev_state == 1); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":862 - * is_line = True - * is_call = False - * is_return = False # <<<<<<<<<<<<<< - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":867 + * # - we should make a step return/step over and we're not in the current frame + * # - we're stepping into a coroutine context and we're not in that context + * if step_cmd == -1: # <<<<<<<<<<<<<< + * can_skip = True * */ - __pyx_v_is_return = 0; + __pyx_t_10 = (__pyx_v_step_cmd == -1L); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":863 - * is_call = False - * is_return = False - * is_exception_event = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":868 + * # - we're stepping into a coroutine context and we're not in that context + * if step_cmd == -1: + * can_skip = True # <<<<<<<<<<<<<< * - * elif event == 'return': + * elif step_cmd in ( */ - __pyx_v_is_exception_event = 0; + __pyx_v_can_skip = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":859 + /* "_pydevd_bundle/pydevd_cython.pyx":867 + * # - we should make a step return/step over and we're not in the current frame + * # - we're stepping into a coroutine context and we're not in that context + * if step_cmd == -1: # <<<<<<<<<<<<<< + * can_skip = True * - * else: # Not coroutine nor generator - * if event == 'line': # <<<<<<<<<<<<<< - * is_line = True - * is_call = False */ - goto __pyx_L29; - } + goto __pyx_L46; + } - /* "_pydevd_bundle/pydevd_cython.pyx":865 - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":870 + * can_skip = True * - * elif event == 'return': # <<<<<<<<<<<<<< - * is_line = False - * is_return = True + * elif step_cmd in ( # <<<<<<<<<<<<<< + * 108, + * 109, */ - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 865, __pyx_L4_error) - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + switch (__pyx_v_step_cmd) { + case 0x6C: - /* "_pydevd_bundle/pydevd_cython.pyx":866 + /* "_pydevd_bundle/pydevd_cython.pyx":871 * - * elif event == 'return': - * is_line = False # <<<<<<<<<<<<<< - * is_return = True - * is_call = False + * elif step_cmd in ( + * 108, # <<<<<<<<<<<<<< + * 109, + * 159, */ - __pyx_v_is_line = 0; + case 0x6D: - /* "_pydevd_bundle/pydevd_cython.pyx":867 - * elif event == 'return': - * is_line = False - * is_return = True # <<<<<<<<<<<<<< - * is_call = False - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":872 + * elif step_cmd in ( + * 108, + * 109, # <<<<<<<<<<<<<< + * 159, + * 160, */ - __pyx_v_is_return = 1; + case 0x9F: - /* "_pydevd_bundle/pydevd_cython.pyx":868 - * is_line = False - * is_return = True - * is_call = False # <<<<<<<<<<<<<< - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":873 + * 108, + * 109, + * 159, # <<<<<<<<<<<<<< + * 160, + * ) and not self._is_same_frame(stop_frame, frame): + */ + case 0xA0: + + /* "_pydevd_bundle/pydevd_cython.pyx":870 + * can_skip = True * + * elif step_cmd in ( # <<<<<<<<<<<<<< + * 108, + * 109, */ - __pyx_v_is_call = 0; + __pyx_t_16 = 1; + break; + default: + __pyx_t_16 = 0; + break; + } + __pyx_t_12 = __pyx_t_16; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L47_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":869 - * is_return = True - * is_call = False - * is_exception_event = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":875 + * 159, + * 160, + * ) and not self._is_same_frame(stop_frame, frame): # <<<<<<<<<<<<<< + * can_skip = True * - * # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break */ - __pyx_v_is_exception_event = 0; + __pyx_t_7 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 875, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 875, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_16 = (!__pyx_t_12); + __pyx_t_10 = __pyx_t_16; + __pyx_L47_bool_binop_done:; + + /* "_pydevd_bundle/pydevd_cython.pyx":870 + * can_skip = True + * + * elif step_cmd in ( # <<<<<<<<<<<<<< + * 108, + * 109, + */ + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":876 + * 160, + * ) and not self._is_same_frame(stop_frame, frame): + * can_skip = True # <<<<<<<<<<<<<< + * + * elif step_cmd == 128 and ( + */ + __pyx_v_can_skip = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":870 + * can_skip = True + * + * elif step_cmd in ( # <<<<<<<<<<<<<< + * 108, + * 109, + */ + goto __pyx_L46; + } /* "_pydevd_bundle/pydevd_cython.pyx":878 - * # @DontTrace comment. - * if ( - * stop_frame is frame and # <<<<<<<<<<<<<< - * not info.pydev_use_scoped_step_frame and is_return and - * step_cmd in (108, 109, 159, 160, 128) + * can_skip = True + * + * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< + * stop_frame is not None + * and stop_frame is not frame */ - __pyx_t_9 = (__pyx_v_stop_frame == __pyx_v_frame); - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { + __pyx_t_16 = (__pyx_v_step_cmd == 0x80); + if (__pyx_t_16) { } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L31_bool_binop_done; + __pyx_t_10 = __pyx_t_16; + goto __pyx_L49_bool_binop_done; } /* "_pydevd_bundle/pydevd_cython.pyx":879 - * if ( - * stop_frame is frame and - * not info.pydev_use_scoped_step_frame and is_return and # <<<<<<<<<<<<<< - * step_cmd in (108, 109, 159, 160, 128) - * ): + * + * elif step_cmd == 128 and ( + * stop_frame is not None # <<<<<<<<<<<<<< + * and stop_frame is not frame + * and stop_frame is not frame.f_back */ - __pyx_t_11 = ((!(__pyx_v_info->pydev_use_scoped_step_frame != 0)) != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L31_bool_binop_done; - } - __pyx_t_11 = (__pyx_v_is_return != 0); - if (__pyx_t_11) { + __pyx_t_16 = (__pyx_v_stop_frame != Py_None); + if (__pyx_t_16) { } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L31_bool_binop_done; + __pyx_t_10 = __pyx_t_16; + goto __pyx_L49_bool_binop_done; } /* "_pydevd_bundle/pydevd_cython.pyx":880 - * stop_frame is frame and - * not info.pydev_use_scoped_step_frame and is_return and - * step_cmd in (108, 109, 159, 160, 128) # <<<<<<<<<<<<<< - * ): - * + * elif step_cmd == 128 and ( + * stop_frame is not None + * and stop_frame is not frame # <<<<<<<<<<<<<< + * and stop_frame is not frame.f_back + * and (frame.f_back is None or stop_frame is not frame.f_back.f_back) */ - switch (__pyx_v_step_cmd) { - case 0x6C: - case 0x6D: - case 0x9F: - case 0xA0: - case 0x80: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; + __pyx_t_16 = (__pyx_v_stop_frame != __pyx_v_frame); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L49_bool_binop_done; } - __pyx_t_9 = (__pyx_t_11 != 0); - __pyx_t_14 = __pyx_t_9; - __pyx_L31_bool_binop_done:; - - /* "_pydevd_bundle/pydevd_cython.pyx":877 - * # Note: this is especially troublesome when we're skipping code with the - * # @DontTrace comment. - * if ( # <<<<<<<<<<<<<< - * stop_frame is frame and - * not info.pydev_use_scoped_step_frame and is_return and - */ - if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":883 - * ): - * - * if step_cmd in (108, 109, 128): # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 107 - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":881 + * stop_frame is not None + * and stop_frame is not frame + * and stop_frame is not frame.f_back # <<<<<<<<<<<<<< + * and (frame.f_back is None or stop_frame is not frame.f_back.f_back) + * ): */ - switch (__pyx_v_step_cmd) { - case 0x6C: - case 0x6D: - case 0x80: + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 881, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_16 = (__pyx_v_stop_frame != __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L49_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":884 - * - * if step_cmd in (108, 109, 128): - * info.pydev_step_cmd = 107 # <<<<<<<<<<<<<< - * else: - * info.pydev_step_cmd = 144 + /* "_pydevd_bundle/pydevd_cython.pyx":882 + * and stop_frame is not frame + * and stop_frame is not frame.f_back + * and (frame.f_back is None or stop_frame is not frame.f_back.f_back) # <<<<<<<<<<<<<< + * ): + * can_skip = True */ - __pyx_v_info->pydev_step_cmd = 0x6B; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 882, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_16 = (__pyx_t_7 == Py_None); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L49_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 882, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 882, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_16 = (__pyx_v_stop_frame != __pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __pyx_t_16; + __pyx_L49_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":883 - * ): + /* "_pydevd_bundle/pydevd_cython.pyx":878 + * can_skip = True * - * if step_cmd in (108, 109, 128): # <<<<<<<<<<<<<< - * info.pydev_step_cmd = 107 - * else: + * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< + * stop_frame is not None + * and stop_frame is not frame */ - break; - default: + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":886 - * info.pydev_step_cmd = 107 - * else: - * info.pydev_step_cmd = 144 # <<<<<<<<<<<<<< - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":884 + * and (frame.f_back is None or stop_frame is not frame.f_back.f_back) + * ): + * can_skip = True # <<<<<<<<<<<<<< * + * elif step_cmd == 144: */ - __pyx_v_info->pydev_step_cmd = 0x90; - break; - } + __pyx_v_can_skip = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":887 - * else: - * info.pydev_step_cmd = 144 - * info.pydev_step_stop = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":878 + * can_skip = True * - * if self.exc_info: - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = Py_None; - - /* "_pydevd_bundle/pydevd_cython.pyx":877 - * # Note: this is especially troublesome when we're skipping code with the - * # @DontTrace comment. - * if ( # <<<<<<<<<<<<<< - * stop_frame is frame and - * not info.pydev_use_scoped_step_frame and is_return and + * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< + * stop_frame is not None + * and stop_frame is not frame */ + goto __pyx_L46; } - /* "_pydevd_bundle/pydevd_cython.pyx":889 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":886 + * can_skip = True * - * if self.exc_info: # <<<<<<<<<<<<<< - * if self.handle_user_exception(frame): - * return self.trace_dispatch + * elif step_cmd == 144: # <<<<<<<<<<<<<< + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) */ - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_self->exc_info); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 889, __pyx_L4_error) - if (__pyx_t_14) { + __pyx_t_10 = (__pyx_v_step_cmd == 0x90); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":890 - * - * if self.exc_info: - * if self.handle_user_exception(frame): # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":887 * + * elif step_cmd == 144: + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_handle_user_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L4_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 887, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 887, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; } } - __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 890, __pyx_L4_error) + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_v_frame, __pyx_t_6, Py_True}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 887, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 887, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L56_bool_binop_done; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":888 + * elif step_cmd == 144: + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) # <<<<<<<<<<<<<< + * ): + * can_skip = True + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_16 = (__pyx_t_8 == Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (!__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L56_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 888, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 890, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_14) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_6, __pyx_t_1, Py_True}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 888, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __pyx_t_16; + __pyx_L56_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":891 - * if self.exc_info: - * if self.handle_user_exception(frame): - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":887 * - * elif event == 'call': + * elif step_cmd == 144: + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 891, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L3_return; + if (__pyx_t_10) { /* "_pydevd_bundle/pydevd_cython.pyx":890 + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): + * can_skip = True # <<<<<<<<<<<<<< * - * if self.exc_info: - * if self.handle_user_exception(frame): # <<<<<<<<<<<<<< - * return self.trace_dispatch - * + * elif step_cmd == 206: */ - } + __pyx_v_can_skip = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":889 - * info.pydev_step_stop = None + /* "_pydevd_bundle/pydevd_cython.pyx":887 * - * if self.exc_info: # <<<<<<<<<<<<<< - * if self.handle_user_exception(frame): - * return self.trace_dispatch + * elif step_cmd == 144: + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":865 - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":886 + * can_skip = True * - * elif event == 'return': # <<<<<<<<<<<<<< - * is_line = False - * is_return = True + * elif step_cmd == 144: # <<<<<<<<<<<<<< + * if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) */ - goto __pyx_L29; - } + goto __pyx_L46; + } - /* "_pydevd_bundle/pydevd_cython.pyx":893 - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":892 + * can_skip = True * - * elif event == 'call': # <<<<<<<<<<<<<< - * is_line = False - * is_call = True + * elif step_cmd == 206: # <<<<<<<<<<<<<< + * f = frame + * while f is not None: */ - __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 893, __pyx_L4_error) - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + __pyx_t_10 = (__pyx_v_step_cmd == 0xCE); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":894 + /* "_pydevd_bundle/pydevd_cython.pyx":893 * - * elif event == 'call': - * is_line = False # <<<<<<<<<<<<<< - * is_call = True - * is_return = False + * elif step_cmd == 206: + * f = frame # <<<<<<<<<<<<<< + * while f is not None: + * if self._is_same_frame(stop_frame, f): */ - __pyx_v_is_line = 0; + __Pyx_INCREF(__pyx_v_frame); + __Pyx_XDECREF_SET(__pyx_v_f, __pyx_v_frame); - /* "_pydevd_bundle/pydevd_cython.pyx":895 - * elif event == 'call': - * is_line = False - * is_call = True # <<<<<<<<<<<<<< - * is_return = False - * is_exception_event = False + /* "_pydevd_bundle/pydevd_cython.pyx":894 + * elif step_cmd == 206: + * f = frame + * while f is not None: # <<<<<<<<<<<<<< + * if self._is_same_frame(stop_frame, f): + * break */ - __pyx_v_is_call = 1; + while (1) { + __pyx_t_10 = (__pyx_v_f != Py_None); + if (!__pyx_t_10) break; - /* "_pydevd_bundle/pydevd_cython.pyx":896 - * is_line = False - * is_call = True - * is_return = False # <<<<<<<<<<<<<< - * is_exception_event = False - * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. + /* "_pydevd_bundle/pydevd_cython.pyx":895 + * f = frame + * while f is not None: + * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< + * break + * f = f.f_back */ - __pyx_v_is_return = 0; + __pyx_t_8 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_f); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 895, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 895, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":897 - * is_call = True - * is_return = False - * is_exception_event = False # <<<<<<<<<<<<<< - * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + /* "_pydevd_bundle/pydevd_cython.pyx":896 + * while f is not None: + * if self._is_same_frame(stop_frame, f): + * break # <<<<<<<<<<<<<< + * f = f.f_back + * else: */ - __pyx_v_is_exception_event = 0; + goto __pyx_L60_break; - /* "_pydevd_bundle/pydevd_cython.pyx":898 - * is_return = False - * is_exception_event = False - * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. # <<<<<<<<<<<<<< - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) - * + /* "_pydevd_bundle/pydevd_cython.pyx":895 + * f = frame + * while f is not None: + * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< + * break + * f = f.f_back */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 898, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_firstlineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 898, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_1, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 898, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 898, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { + } + + /* "_pydevd_bundle/pydevd_cython.pyx":897 + * if self._is_same_frame(stop_frame, f): + * break + * f = f.f_back # <<<<<<<<<<<<<< + * else: + * can_skip = True + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 897, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_8); + __pyx_t_8 = 0; + } /* "_pydevd_bundle/pydevd_cython.pyx":899 - * is_exception_event = False - * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) # <<<<<<<<<<<<<< + * f = f.f_back + * else: + * can_skip = True # <<<<<<<<<<<<<< * - * elif event == 'exception': + * if can_skip: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_function_breakpoint_name_to_brea); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 899, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 899, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 899, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 899, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } + /*else*/ { + __pyx_v_can_skip = 1; } - __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 899, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_function_breakpoint_on_call_event, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_L60_break:; - /* "_pydevd_bundle/pydevd_cython.pyx":898 - * is_return = False - * is_exception_event = False - * if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. # <<<<<<<<<<<<<< - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + /* "_pydevd_bundle/pydevd_cython.pyx":892 + * can_skip = True * + * elif step_cmd == 206: # <<<<<<<<<<<<<< + * f = frame + * while f is not None: */ } + __pyx_L46:; - /* "_pydevd_bundle/pydevd_cython.pyx":893 - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":901 + * can_skip = True * - * elif event == 'call': # <<<<<<<<<<<<<< - * is_line = False - * is_call = True + * if can_skip: # <<<<<<<<<<<<<< + * if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): + * can_skip = plugin_manager.can_skip(py_db, frame) */ - goto __pyx_L29; - } + if (__pyx_v_can_skip) { - /* "_pydevd_bundle/pydevd_cython.pyx":901 - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + /* "_pydevd_bundle/pydevd_cython.pyx":902 * - * elif event == 'exception': # <<<<<<<<<<<<<< - * is_exception_event = True - * breakpoints_for_file = None - */ - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 901, __pyx_L4_error) - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":902 + * if can_skip: + * if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): # <<<<<<<<<<<<<< + * can_skip = plugin_manager.can_skip(py_db, frame) * - * elif event == 'exception': - * is_exception_event = True # <<<<<<<<<<<<<< - * breakpoints_for_file = None - * if has_exception_breakpoints: - */ - __pyx_v_is_exception_event = 1; - - /* "_pydevd_bundle/pydevd_cython.pyx":903 - * elif event == 'exception': - * is_exception_event = True - * breakpoints_for_file = None # <<<<<<<<<<<<<< - * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - */ - __Pyx_INCREF(Py_None); - __pyx_v_breakpoints_for_file = ((PyObject*)Py_None); - - /* "_pydevd_bundle/pydevd_cython.pyx":904 - * is_exception_event = True - * breakpoints_for_file = None - * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: - */ - __pyx_t_14 = (__pyx_v_has_exception_breakpoints != 0); - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":905 - * breakpoints_for_file = None - * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) # <<<<<<<<<<<<<< - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): */ - __pyx_t_8 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_should_stop_on_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 905, __pyx_L4_error) + __pyx_t_16 = (__pyx_v_plugin_manager != Py_None); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L64_bool_binop_done; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 902, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_8); - if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { - PyObject* sequence = __pyx_t_8; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 905, __pyx_L4_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_1 = PyList_GET_ITEM(sequence, 0); - __pyx_t_4 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 905, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 905, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 902, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (!__pyx_t_16) { } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 905, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_15 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L39_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_4 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L39_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_7), 2) < 0) __PYX_ERR(0, 905, __pyx_L4_error) - __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L40_unpacking_done; - __pyx_L39_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_15 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 905, __pyx_L4_error) - __pyx_L40_unpacking_done:; + __pyx_t_10 = __pyx_t_16; + goto __pyx_L64_bool_binop_done; } - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 905, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_should_stop = __pyx_t_14; - __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4); - __pyx_t_4 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":906 - * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch - */ - __pyx_t_14 = (__pyx_v_should_stop != 0); - if (__pyx_t_14) { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 902, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 902, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __pyx_t_16; + __pyx_L64_bool_binop_done:; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":907 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< - * return self.trace_dispatch - * is_line = False + /* "_pydevd_bundle/pydevd_cython.pyx":903 + * if can_skip: + * if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): + * can_skip = plugin_manager.can_skip(py_db, frame) # <<<<<<<<<<<<<< + * + * if ( */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 907, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - if (!(likely(PyString_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_8)->tp_name), 0))) __PYX_ERR(0, 907, __pyx_L4_error) - __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_handle_exception(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg, ((PyObject*)__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 907, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 903, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_py_db, __pyx_v_frame}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 903, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 903, __pyx_L4_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 907, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_14) { + __pyx_v_can_skip = __pyx_t_10; - /* "_pydevd_bundle/pydevd_cython.pyx":908 - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch # <<<<<<<<<<<<<< - * is_line = False - * is_return = False + /* "_pydevd_bundle/pydevd_cython.pyx":902 + * + * if can_skip: + * if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): # <<<<<<<<<<<<<< + * can_skip = plugin_manager.can_skip(py_db, frame) + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 908, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L3_return; + } - /* "_pydevd_bundle/pydevd_cython.pyx":907 - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): # <<<<<<<<<<<<<< - * return self.trace_dispatch - * is_line = False + /* "_pydevd_bundle/pydevd_cython.pyx":906 + * + * if ( + * can_skip # <<<<<<<<<<<<<< + * and py_db.show_return_values + * and info.pydev_step_cmd in (108, 159) */ - } + if (__pyx_v_can_skip) { + } else { + __pyx_t_10 = __pyx_v_can_skip; + goto __pyx_L68_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":906 - * if has_exception_breakpoints: - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: # <<<<<<<<<<<<<< - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":907 + * if ( + * can_skip + * and py_db.show_return_values # <<<<<<<<<<<<<< + * and info.pydev_step_cmd in (108, 159) + * and self._is_same_frame(stop_frame, frame.f_back) */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 907, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 907, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L68_bool_binop_done; } - /* "_pydevd_bundle/pydevd_cython.pyx":904 - * is_exception_event = True - * breakpoints_for_file = None - * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * should_stop, frame = self._should_stop_on_exception(frame, event, arg) - * if should_stop: + /* "_pydevd_bundle/pydevd_cython.pyx":908 + * can_skip + * and py_db.show_return_values + * and info.pydev_step_cmd in (108, 159) # <<<<<<<<<<<<<< + * and self._is_same_frame(stop_frame, frame.f_back) + * ): */ - } + switch (__pyx_v_info->pydev_step_cmd) { + case 0x6C: + case 0x9F: + __pyx_t_16 = 1; + break; + default: + __pyx_t_16 = 0; + break; + } + __pyx_t_12 = __pyx_t_16; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L68_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":909 - * if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): - * return self.trace_dispatch - * is_line = False # <<<<<<<<<<<<<< - * is_return = False - * is_call = False + /* "_pydevd_bundle/pydevd_cython.pyx":909 + * and py_db.show_return_values + * and info.pydev_step_cmd in (108, 159) + * and self._is_same_frame(stop_frame, frame.f_back) # <<<<<<<<<<<<<< + * ): + * # trace function for showing return values after step over */ - __pyx_v_is_line = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 909, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 909, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 909, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_10 = __pyx_t_12; + __pyx_L68_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":910 - * return self.trace_dispatch - * is_line = False - * is_return = False # <<<<<<<<<<<<<< - * is_call = False + /* "_pydevd_bundle/pydevd_cython.pyx":905 + * can_skip = plugin_manager.can_skip(py_db, frame) * + * if ( # <<<<<<<<<<<<<< + * can_skip + * and py_db.show_return_values */ - __pyx_v_is_return = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":911 - * is_line = False - * is_return = False - * is_call = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":912 + * ): + * # trace function for showing return values after step over + * can_skip = False # <<<<<<<<<<<<<< * - * else: + * # Let's check to see if we are in a function that has a breakpoint. If we don't have a breakpoint, */ - __pyx_v_is_call = 0; + __pyx_v_can_skip = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":901 - * function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + /* "_pydevd_bundle/pydevd_cython.pyx":905 + * can_skip = plugin_manager.can_skip(py_db, frame) * - * elif event == 'exception': # <<<<<<<<<<<<<< - * is_exception_event = True - * breakpoints_for_file = None + * if ( # <<<<<<<<<<<<<< + * can_skip + * and py_db.show_return_values */ - goto __pyx_L29; - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":915 - * else: - * # Unexpected: just keep the same trace func (i.e.: event == 'c_XXX'). - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":901 + * can_skip = True * - * if not is_exception_event: + * if can_skip: # <<<<<<<<<<<<<< + * if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): + * can_skip = plugin_manager.can_skip(py_db, frame) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 915, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L3_return; - } - __pyx_L29:; - } - __pyx_L12:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":917 - * return self.trace_dispatch - * - * if not is_exception_event: # <<<<<<<<<<<<<< - * breakpoints_for_file = main_debugger.breakpoints.get(abs_path_canonical_path_and_base[1]) + /* "_pydevd_bundle/pydevd_cython.pyx":862 + * can_skip = False * + * if info.pydev_state == 1: # 1 = 1 # <<<<<<<<<<<<<< + * # we can skip if: + * # - we have no stop marked */ - __pyx_t_14 = ((!(__pyx_v_is_exception_event != 0)) != 0); - if (__pyx_t_14) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":918 + /* "_pydevd_bundle/pydevd_cython.pyx":919 + * # so, that's why the additional checks are there. * - * if not is_exception_event: - * breakpoints_for_file = main_debugger.breakpoints.get(abs_path_canonical_path_and_base[1]) # <<<<<<<<<<<<<< + * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< + * pass # Do nothing here (just keep on going as we can't skip it). * - * can_skip = False */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_breakpoints); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 918, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 918, __pyx_L4_error) - } - __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 918, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint_on_call_event); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 919, __pyx_L4_error) + if (__pyx_t_10) { + goto __pyx_L72; } - __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 918, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 918, __pyx_L4_error) - __Pyx_XDECREF_SET(__pyx_v_breakpoints_for_file, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":920 - * breakpoints_for_file = main_debugger.breakpoints.get(abs_path_canonical_path_and_base[1]) - * - * can_skip = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":922 + * pass # Do nothing here (just keep on going as we can't skip it). * - * if info.pydev_state == 1: # 1 = 1 + * elif not breakpoints_for_file: # <<<<<<<<<<<<<< + * if can_skip: + * if has_exception_breakpoints: */ - __pyx_v_can_skip = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoints_for_file); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 922, __pyx_L4_error) + __pyx_t_12 = (!__pyx_t_10); + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":922 - * can_skip = False + /* "_pydevd_bundle/pydevd_cython.pyx":923 * - * if info.pydev_state == 1: # 1 = 1 # <<<<<<<<<<<<<< - * # we can skip if: - * # - we have no stop marked + * elif not breakpoints_for_file: + * if can_skip: # <<<<<<<<<<<<<< + * if has_exception_breakpoints: + * return self.trace_exception */ - __pyx_t_14 = ((__pyx_v_info->pydev_state == 1) != 0); - if (__pyx_t_14) { + if (__pyx_v_can_skip) { - /* "_pydevd_bundle/pydevd_cython.pyx":927 - * # - we should make a step return/step over and we're not in the current frame - * # - we're stepping into a coroutine context and we're not in that context - * if step_cmd == -1: # <<<<<<<<<<<<<< - * can_skip = True - * + /* "_pydevd_bundle/pydevd_cython.pyx":924 + * elif not breakpoints_for_file: + * if can_skip: + * if has_exception_breakpoints: # <<<<<<<<<<<<<< + * return self.trace_exception + * else: */ - __pyx_t_14 = ((__pyx_v_step_cmd == -1L) != 0); - if (__pyx_t_14) { + if (__pyx_v_has_exception_breakpoints) { - /* "_pydevd_bundle/pydevd_cython.pyx":928 - * # - we're stepping into a coroutine context and we're not in that context - * if step_cmd == -1: - * can_skip = True # <<<<<<<<<<<<<< - * - * elif step_cmd in (108, 109, 159, 160) and not self._is_same_frame(stop_frame, frame): + /* "_pydevd_bundle/pydevd_cython.pyx":925 + * if can_skip: + * if has_exception_breakpoints: + * return self.trace_exception # <<<<<<<<<<<<<< + * else: + * return None if is_call else NO_FTRACE */ - __pyx_v_can_skip = 1; + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 925, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L3_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":924 + * elif not breakpoints_for_file: + * if can_skip: + * if has_exception_breakpoints: # <<<<<<<<<<<<<< + * return self.trace_exception + * else: + */ + } /* "_pydevd_bundle/pydevd_cython.pyx":927 - * # - we should make a step return/step over and we're not in the current frame - * # - we're stepping into a coroutine context and we're not in that context - * if step_cmd == -1: # <<<<<<<<<<<<<< - * can_skip = True + * return self.trace_exception + * else: + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< * + * else: */ - goto __pyx_L45; - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_7 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 927, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __pyx_t_8; + __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L3_return; + } - /* "_pydevd_bundle/pydevd_cython.pyx":930 - * can_skip = True - * - * elif step_cmd in (108, 109, 159, 160) and not self._is_same_frame(stop_frame, frame): # <<<<<<<<<<<<<< - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":923 * + * elif not breakpoints_for_file: + * if can_skip: # <<<<<<<<<<<<<< + * if has_exception_breakpoints: + * return self.trace_exception */ - switch (__pyx_v_step_cmd) { - case 0x6C: - case 0x6D: - case 0x9F: - case 0xA0: - __pyx_t_9 = 1; - break; - default: - __pyx_t_9 = 0; - break; } - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L46_bool_binop_done; - } - __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 930, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 930, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = ((!__pyx_t_11) != 0); - __pyx_t_14 = __pyx_t_9; - __pyx_L46_bool_binop_done:; - if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":931 - * - * elif step_cmd in (108, 109, 159, 160) and not self._is_same_frame(stop_frame, frame): - * can_skip = True # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":922 + * pass # Do nothing here (just keep on going as we can't skip it). * - * elif step_cmd == 128 and ( + * elif not breakpoints_for_file: # <<<<<<<<<<<<<< + * if can_skip: + * if has_exception_breakpoints: */ - __pyx_v_can_skip = 1; + goto __pyx_L72; + } - /* "_pydevd_bundle/pydevd_cython.pyx":930 - * can_skip = True - * - * elif step_cmd in (108, 109, 159, 160) and not self._is_same_frame(stop_frame, frame): # <<<<<<<<<<<<<< - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":931 + * else: + * # When cached, 0 means we don't have a breakpoint and 1 means we have. + * if can_skip: # <<<<<<<<<<<<<< + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) + * if breakpoints_in_line_cache == 0: + */ + /*else*/ { + if (__pyx_v_can_skip) { + + /* "_pydevd_bundle/pydevd_cython.pyx":932 + * # When cached, 0 means we don't have a breakpoint and 1 means we have. + * if can_skip: + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) # <<<<<<<<<<<<<< + * if breakpoints_in_line_cache == 0: + * return self.trace_dispatch + */ + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 932, __pyx_L4_error) + } + __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_line_cache_key, __pyx_int_neg_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 932, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 932, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_breakpoints_in_line_cache = __pyx_t_9; + + /* "_pydevd_bundle/pydevd_cython.pyx":933 + * if can_skip: + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) + * if breakpoints_in_line_cache == 0: # <<<<<<<<<<<<<< + * return self.trace_dispatch * */ - goto __pyx_L45; - } + __pyx_t_12 = (__pyx_v_breakpoints_in_line_cache == 0); + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":933 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":934 + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) + * if breakpoints_in_line_cache == 0: + * return self.trace_dispatch # <<<<<<<<<<<<<< * - * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< - * stop_frame is not None and - * stop_frame is not frame and + * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) */ - __pyx_t_9 = ((__pyx_v_step_cmd == 0x80) != 0); - if (__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L48_bool_binop_done; - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 934, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":934 + /* "_pydevd_bundle/pydevd_cython.pyx":933 + * if can_skip: + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) + * if breakpoints_in_line_cache == 0: # <<<<<<<<<<<<<< + * return self.trace_dispatch * - * elif step_cmd == 128 and ( - * stop_frame is not None and # <<<<<<<<<<<<<< - * stop_frame is not frame and - * stop_frame is not frame.f_back and */ - __pyx_t_9 = (__pyx_v_stop_frame != Py_None); - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L48_bool_binop_done; - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":935 - * elif step_cmd == 128 and ( - * stop_frame is not None and - * stop_frame is not frame and # <<<<<<<<<<<<<< - * stop_frame is not frame.f_back and - * (frame.f_back is None or stop_frame is not frame.f_back.f_back)): + /* "_pydevd_bundle/pydevd_cython.pyx":931 + * else: + * # When cached, 0 means we don't have a breakpoint and 1 means we have. + * if can_skip: # <<<<<<<<<<<<<< + * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) + * if breakpoints_in_line_cache == 0: */ - __pyx_t_11 = (__pyx_v_stop_frame != __pyx_v_frame); - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L48_bool_binop_done; } /* "_pydevd_bundle/pydevd_cython.pyx":936 - * stop_frame is not None and - * stop_frame is not frame and - * stop_frame is not frame.f_back and # <<<<<<<<<<<<<< - * (frame.f_back is None or stop_frame is not frame.f_back.f_back)): - * can_skip = True + * return self.trace_dispatch + * + * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) # <<<<<<<<<<<<<< + * if breakpoints_in_frame_cache != -1: + * # Gotten from cache. */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 936, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = (__pyx_v_stop_frame != __pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L48_bool_binop_done; + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 936, __pyx_L4_error) } + __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_neg_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 936, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 936, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_breakpoints_in_frame_cache = __pyx_t_9; /* "_pydevd_bundle/pydevd_cython.pyx":937 - * stop_frame is not frame and - * stop_frame is not frame.f_back and - * (frame.f_back is None or stop_frame is not frame.f_back.f_back)): # <<<<<<<<<<<<<< - * can_skip = True * + * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) + * if breakpoints_in_frame_cache != -1: # <<<<<<<<<<<<<< + * # Gotten from cache. + * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 937, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = (__pyx_t_4 == Py_None); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = (__pyx_t_11 != 0); - if (!__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L48_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 937, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 937, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = (__pyx_v_stop_frame != __pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = (__pyx_t_9 != 0); - __pyx_t_14 = __pyx_t_11; - __pyx_L48_bool_binop_done:; + __pyx_t_12 = (__pyx_v_breakpoints_in_frame_cache != -1L); + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":933 - * can_skip = True - * - * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< - * stop_frame is not None and - * stop_frame is not frame and - */ - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":938 - * stop_frame is not frame.f_back and - * (frame.f_back is None or stop_frame is not frame.f_back.f_back)): - * can_skip = True # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":939 + * if breakpoints_in_frame_cache != -1: + * # Gotten from cache. + * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 # <<<<<<<<<<<<<< * - * elif step_cmd == 144: + * else: */ - __pyx_v_can_skip = 1; + __pyx_v_has_breakpoint_in_frame = (__pyx_v_breakpoints_in_frame_cache == 1); - /* "_pydevd_bundle/pydevd_cython.pyx":933 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":937 * - * elif step_cmd == 128 and ( # <<<<<<<<<<<<<< - * stop_frame is not None and - * stop_frame is not frame and + * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) + * if breakpoints_in_frame_cache != -1: # <<<<<<<<<<<<<< + * # Gotten from cache. + * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 */ - goto __pyx_L45; + goto __pyx_L77; } - /* "_pydevd_bundle/pydevd_cython.pyx":940 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":942 * - * elif step_cmd == 144: # <<<<<<<<<<<<<< - * if ( - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - */ - __pyx_t_14 = ((__pyx_v_step_cmd == 0x90) != 0); - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":942 - * elif step_cmd == 144: - * if ( - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) # <<<<<<<<<<<<<< - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) - * ): + * else: + * has_breakpoint_in_frame = False # <<<<<<<<<<<<<< + * + * try: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_frame, __pyx_t_7, Py_True}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_v_frame, __pyx_t_7, Py_True}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_7); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, Py_True); - __pyx_t_7 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 942, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L55_bool_binop_done; - } + /*else*/ { + __pyx_v_has_breakpoint_in_frame = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":943 - * if ( - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) # <<<<<<<<<<<<<< - * ): - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":944 + * has_breakpoint_in_frame = False + * + * try: # <<<<<<<<<<<<<< + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = (__pyx_t_1 == Py_None); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = (__pyx_t_11 != 0); - if (!__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L55_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_6, __pyx_t_7, Py_True}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_6, __pyx_t_7, Py_True}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif { - __pyx_t_3 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_t_7); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_5, Py_True); - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 943, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_14 = __pyx_t_9; - __pyx_L55_bool_binop_done:; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":941 + /* "_pydevd_bundle/pydevd_cython.pyx":945 * - * elif step_cmd == 144: - * if ( # <<<<<<<<<<<<<< - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) + * try: + * func_lines = set() # <<<<<<<<<<<<<< + * for offset_and_lineno in dis.findlinestarts(frame.f_code): + * func_lines.add(offset_and_lineno[1]) */ - if (__pyx_t_14) { + __pyx_t_7 = PySet_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 945, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_func_lines = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":945 - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) - * ): - * can_skip = True # <<<<<<<<<<<<<< - * - * elif step_cmd == 206: + /* "_pydevd_bundle/pydevd_cython.pyx":946 + * try: + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): # <<<<<<<<<<<<<< + * func_lines.add(offset_and_lineno[1]) + * except: */ - __pyx_v_can_skip = 1; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_dis); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_findlinestarts); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_8}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { + __pyx_t_1 = __pyx_t_7; __Pyx_INCREF(__pyx_t_1); + __pyx_t_13 = 0; + __pyx_t_14 = NULL; + } else { + __pyx_t_13 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 946, __pyx_L78_error) + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + for (;;) { + if (likely(!__pyx_t_14)) { + if (likely(PyList_CheckExact(__pyx_t_1))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 946, __pyx_L78_error) + #endif + if (__pyx_t_13 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_7); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 946, __pyx_L78_error) + #else + __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 946, __pyx_L78_error) + #endif + if (__pyx_t_13 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_7); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 946, __pyx_L78_error) + #else + __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 946, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_14(__pyx_t_1); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 946, __pyx_L78_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + __Pyx_XDECREF_SET(__pyx_v_offset_and_lineno, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":941 - * - * elif step_cmd == 144: - * if ( # <<<<<<<<<<<<<< - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - * and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) + /* "_pydevd_bundle/pydevd_cython.pyx":947 + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): + * func_lines.add(offset_and_lineno[1]) # <<<<<<<<<<<<<< + * except: + * # This is a fallback for implementations where we can't get the function */ - } + __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_offset_and_lineno, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 947, __pyx_L78_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_20 = PySet_Add(__pyx_v_func_lines, __pyx_t_7); if (unlikely(__pyx_t_20 == ((int)-1))) __PYX_ERR(0, 947, __pyx_L78_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":940 - * can_skip = True - * - * elif step_cmd == 144: # <<<<<<<<<<<<<< - * if ( - * main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) + /* "_pydevd_bundle/pydevd_cython.pyx":946 + * try: + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): # <<<<<<<<<<<<<< + * func_lines.add(offset_and_lineno[1]) + * except: */ - goto __pyx_L45; - } + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":947 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":944 + * has_breakpoint_in_frame = False * - * elif step_cmd == 206: # <<<<<<<<<<<<<< - * f = frame - * while f is not None: + * try: # <<<<<<<<<<<<<< + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): */ - __pyx_t_14 = ((__pyx_v_step_cmd == 0xCE) != 0); - if (__pyx_t_14) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":948 - * - * elif step_cmd == 206: - * f = frame # <<<<<<<<<<<<<< - * while f is not None: - * if self._is_same_frame(stop_frame, f): + /* "_pydevd_bundle/pydevd_cython.pyx":967 + * break + * else: + * for bp_line in breakpoints_for_file: # iterate on keys # <<<<<<<<<<<<<< + * if bp_line in func_lines: + * has_breakpoint_in_frame = True */ - __Pyx_INCREF(__pyx_v_frame); - __Pyx_XDECREF_SET(__pyx_v_f, __pyx_v_frame); + /*else:*/ { + __pyx_t_13 = 0; + if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 967, __pyx_L80_except_error) + } + __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_breakpoints_for_file, 1, ((PyObject *)NULL), (&__pyx_t_21), (&__pyx_t_9)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 967, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_7; + __pyx_t_7 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_21, &__pyx_t_13, &__pyx_t_7, NULL, NULL, __pyx_t_9); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 967, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 967, __pyx_L80_except_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_bp_line = __pyx_t_11; - /* "_pydevd_bundle/pydevd_cython.pyx":949 - * elif step_cmd == 206: - * f = frame - * while f is not None: # <<<<<<<<<<<<<< - * if self._is_same_frame(stop_frame, f): - * break + /* "_pydevd_bundle/pydevd_cython.pyx":968 + * else: + * for bp_line in breakpoints_for_file: # iterate on keys + * if bp_line in func_lines: # <<<<<<<<<<<<<< + * has_breakpoint_in_frame = True + * break */ - while (1) { - __pyx_t_14 = (__pyx_v_f != Py_None); - __pyx_t_9 = (__pyx_t_14 != 0); - if (!__pyx_t_9) break; + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_bp_line); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 968, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_12 = (__Pyx_PySet_ContainsTF(__pyx_t_7, __pyx_v_func_lines, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 968, __pyx_L80_except_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":950 - * f = frame - * while f is not None: - * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< - * break - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":969 + * for bp_line in breakpoints_for_file: # iterate on keys + * if bp_line in func_lines: + * has_breakpoint_in_frame = True # <<<<<<<<<<<<<< + * break + * */ - __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 950, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 950, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_9) { + __pyx_v_has_breakpoint_in_frame = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":951 - * while f is not None: - * if self._is_same_frame(stop_frame, f): - * break # <<<<<<<<<<<<<< - * f = f.f_back - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":970 + * if bp_line in func_lines: + * has_breakpoint_in_frame = True + * break # <<<<<<<<<<<<<< + * + * # Cache the value (1 or 0 or -1 for default because of cython). */ - goto __pyx_L59_break; + goto __pyx_L88_break; - /* "_pydevd_bundle/pydevd_cython.pyx":950 - * f = frame - * while f is not None: - * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< - * break - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":968 + * else: + * for bp_line in breakpoints_for_file: # iterate on keys + * if bp_line in func_lines: # <<<<<<<<<<<<<< + * has_breakpoint_in_frame = True + * break */ + } + } + __pyx_L88_break:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + goto __pyx_L83_try_end; + __pyx_L78_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":952 - * if self._is_same_frame(stop_frame, f): - * break - * f = f.f_back # <<<<<<<<<<<<<< - * else: - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":948 + * for offset_and_lineno in dis.findlinestarts(frame.f_code): + * func_lines.add(offset_and_lineno[1]) + * except: # <<<<<<<<<<<<<< + * # This is a fallback for implementations where we can't get the function + * # lines -- i.e.: jython (in this case clients need to provide the function */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_1); - __pyx_t_1 = 0; - } + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 948, __pyx_L80_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); - /* "_pydevd_bundle/pydevd_cython.pyx":954 - * f = f.f_back - * else: - * can_skip = True # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":955 * - * if can_skip: + * # Checks the breakpoint to see if there is a context match in some function. + * curr_func_name = frame.f_code.co_name # <<<<<<<<<<<<<< + * + * # global context is set with an empty name */ - /*else*/ { - __pyx_v_can_skip = 1; - } - __pyx_L59_break:; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 955, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 955, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyString_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 955, __pyx_L80_except_error) + __pyx_v_curr_func_name = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":947 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":958 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "", ""): # <<<<<<<<<<<<<< + * curr_func_name = "" * - * elif step_cmd == 206: # <<<<<<<<<<<<<< - * f = frame - * while f is not None: */ - } - __pyx_L45:; - - /* "_pydevd_bundle/pydevd_cython.pyx":956 - * can_skip = True + __Pyx_INCREF(__pyx_v_curr_func_name); + __pyx_t_22 = __pyx_v_curr_func_name; + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_t_22, __pyx_kp_s__4, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 958, __pyx_L80_except_error) + if (!__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L93_bool_binop_done; + } + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_t_22, __pyx_kp_s_module, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 958, __pyx_L80_except_error) + if (!__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L93_bool_binop_done; + } + __pyx_t_10 = (__Pyx_PyString_Equals(__pyx_t_22, __pyx_kp_s_lambda, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 958, __pyx_L80_except_error) + __pyx_t_12 = __pyx_t_10; + __pyx_L93_bool_binop_done:; + __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; + __pyx_t_10 = __pyx_t_12; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":959 + * # global context is set with an empty name + * if curr_func_name in ("?", "", ""): + * curr_func_name = "" # <<<<<<<<<<<<<< * - * if can_skip: # <<<<<<<<<<<<<< - * if plugin_manager is not None and ( - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): + * for bp in breakpoints_for_file.values(): */ - __pyx_t_9 = (__pyx_v_can_skip != 0); - if (__pyx_t_9) { + __Pyx_INCREF(__pyx_kp_s_); + __Pyx_DECREF_SET(__pyx_v_curr_func_name, __pyx_kp_s_); - /* "_pydevd_bundle/pydevd_cython.pyx":957 + /* "_pydevd_bundle/pydevd_cython.pyx":958 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "", ""): # <<<<<<<<<<<<<< + * curr_func_name = "" * - * if can_skip: - * if plugin_manager is not None and ( # <<<<<<<<<<<<<< - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - * can_skip = plugin_manager.can_skip(main_debugger, frame) */ - __pyx_t_14 = (__pyx_v_plugin_manager != Py_None); - __pyx_t_11 = (__pyx_t_14 != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L63_bool_binop_done; - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":958 - * if can_skip: - * if plugin_manager is not None and ( - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): # <<<<<<<<<<<<<< - * can_skip = plugin_manager.can_skip(main_debugger, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":961 + * curr_func_name = "" * + * for bp in breakpoints_for_file.values(): # <<<<<<<<<<<<<< + * # will match either global or some function + * if bp.func_name in ("None", curr_func_name): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 958, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L63_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 958, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = __pyx_t_11; - __pyx_L63_bool_binop_done:; + __pyx_t_21 = 0; + if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 961, __pyx_L80_except_error) + } + __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_breakpoints_for_file, 1, __pyx_n_s_values, (&__pyx_t_13), (&__pyx_t_9)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 961, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); + __pyx_t_4 = __pyx_t_6; + __pyx_t_6 = 0; + while (1) { + __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_13, &__pyx_t_21, NULL, &__pyx_t_6, NULL, __pyx_t_9); + if (unlikely(__pyx_t_11 == 0)) break; + if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(0, 961, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_bp, __pyx_t_6); + __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":957 - * - * if can_skip: - * if plugin_manager is not None and ( # <<<<<<<<<<<<<< - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - * can_skip = plugin_manager.can_skip(main_debugger, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":963 + * for bp in breakpoints_for_file.values(): + * # will match either global or some function + * if bp.func_name in ("None", curr_func_name): # <<<<<<<<<<<<<< + * has_breakpoint_in_frame = True + * break */ - if (__pyx_t_9) { + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_func_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 963, __pyx_L80_except_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_None, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 963, __pyx_L80_except_error) + if (!__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L99_bool_binop_done; + } + __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_v_curr_func_name, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 963, __pyx_L80_except_error) + __pyx_t_10 = __pyx_t_12; + __pyx_L99_bool_binop_done:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_12 = __pyx_t_10; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":959 - * if plugin_manager is not None and ( - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - * can_skip = plugin_manager.can_skip(main_debugger, frame) # <<<<<<<<<<<<<< - * - * if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (108, 159) and self._is_same_frame(stop_frame, frame.f_back): + /* "_pydevd_bundle/pydevd_cython.pyx":964 + * # will match either global or some function + * if bp.func_name in ("None", curr_func_name): + * has_breakpoint_in_frame = True # <<<<<<<<<<<<<< + * break + * else: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL; + __pyx_v_has_breakpoint_in_frame = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":965 + * if bp.func_name in ("None", curr_func_name): + * has_breakpoint_in_frame = True + * break # <<<<<<<<<<<<<< + * else: + * for bp_line in breakpoints_for_file: # iterate on keys + */ + goto __pyx_L97_break; + + /* "_pydevd_bundle/pydevd_cython.pyx":963 + * for bp in breakpoints_for_file.values(): + * # will match either global or some function + * if bp.func_name in ("None", curr_func_name): # <<<<<<<<<<<<<< + * has_breakpoint_in_frame = True + * break + */ + } } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_5, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_5, __pyx_v_frame); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_L97_break:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L79_exception_handled; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 959, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_can_skip = __pyx_t_9; - /* "_pydevd_bundle/pydevd_cython.pyx":957 + /* "_pydevd_bundle/pydevd_cython.pyx":944 + * has_breakpoint_in_frame = False * - * if can_skip: - * if plugin_manager is not None and ( # <<<<<<<<<<<<<< - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - * can_skip = plugin_manager.can_skip(main_debugger, frame) + * try: # <<<<<<<<<<<<<< + * func_lines = set() + * for offset_and_lineno in dis.findlinestarts(frame.f_code): */ + __pyx_L80_except_error:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + goto __pyx_L4_error; + __pyx_L79_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + __pyx_L83_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":961 - * can_skip = plugin_manager.can_skip(main_debugger, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":973 * - * if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (108, 159) and self._is_same_frame(stop_frame, frame.f_back): # <<<<<<<<<<<<<< - * # trace function for showing return values after step over - * can_skip = False + * # Cache the value (1 or 0 or -1 for default because of cython). + * if has_breakpoint_in_frame: # <<<<<<<<<<<<<< + * frame_skips_cache[frame_cache_key] = 1 + * else: */ - __pyx_t_11 = (__pyx_v_can_skip != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L67_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 961, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L67_bool_binop_done; - } - switch (__pyx_v_info->pydev_step_cmd) { - case 0x6C: - case 0x9F: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; - } - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L67_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 961, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 961, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __pyx_t_14; - __pyx_L67_bool_binop_done:; - if (__pyx_t_9) { + if (__pyx_v_has_breakpoint_in_frame) { - /* "_pydevd_bundle/pydevd_cython.pyx":963 - * if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (108, 159) and self._is_same_frame(stop_frame, frame.f_back): - * # trace function for showing return values after step over - * can_skip = False # <<<<<<<<<<<<<< - * - * # Let's check to see if we are in a function that has a breakpoint. If we don't have a breakpoint, + /* "_pydevd_bundle/pydevd_cython.pyx":974 + * # Cache the value (1 or 0 or -1 for default because of cython). + * if has_breakpoint_in_frame: + * frame_skips_cache[frame_cache_key] = 1 # <<<<<<<<<<<<<< + * else: + * frame_skips_cache[frame_cache_key] = 0 */ - __pyx_v_can_skip = 0; + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 974, __pyx_L4_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_1) < 0))) __PYX_ERR(0, 974, __pyx_L4_error) - /* "_pydevd_bundle/pydevd_cython.pyx":961 - * can_skip = plugin_manager.can_skip(main_debugger, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":973 * - * if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (108, 159) and self._is_same_frame(stop_frame, frame.f_back): # <<<<<<<<<<<<<< - * # trace function for showing return values after step over - * can_skip = False + * # Cache the value (1 or 0 or -1 for default because of cython). + * if has_breakpoint_in_frame: # <<<<<<<<<<<<<< + * frame_skips_cache[frame_cache_key] = 1 + * else: */ + goto __pyx_L101; } - /* "_pydevd_bundle/pydevd_cython.pyx":956 - * can_skip = True + /* "_pydevd_bundle/pydevd_cython.pyx":976 + * frame_skips_cache[frame_cache_key] = 1 + * else: + * frame_skips_cache[frame_cache_key] = 0 # <<<<<<<<<<<<<< * - * if can_skip: # <<<<<<<<<<<<<< - * if plugin_manager is not None and ( - * main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): + * if can_skip and not has_breakpoint_in_frame: */ + /*else*/ { + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 976, __pyx_L4_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_0) < 0))) __PYX_ERR(0, 976, __pyx_L4_error) + } + __pyx_L101:; } + __pyx_L77:; - /* "_pydevd_bundle/pydevd_cython.pyx":922 - * can_skip = False + /* "_pydevd_bundle/pydevd_cython.pyx":978 + * frame_skips_cache[frame_cache_key] = 0 * - * if info.pydev_state == 1: # 1 = 1 # <<<<<<<<<<<<<< - * # we can skip if: - * # - we have no stop marked - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":970 - * # so, that's why the additional checks are there. - * - * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< - * pass # Do nothing here (just keep on going as we can't skip it). - * - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint_on_call_event); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 970, __pyx_L4_error) - if (__pyx_t_9) { - goto __pyx_L71; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":973 - * pass # Do nothing here (just keep on going as we can't skip it). - * - * elif not breakpoints_for_file: # <<<<<<<<<<<<<< - * if can_skip: - * if has_exception_breakpoints: - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoints_for_file); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 973, __pyx_L4_error) - __pyx_t_14 = ((!__pyx_t_9) != 0); - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":974 - * - * elif not breakpoints_for_file: - * if can_skip: # <<<<<<<<<<<<<< + * if can_skip and not has_breakpoint_in_frame: # <<<<<<<<<<<<<< * if has_exception_breakpoints: * return self.trace_exception */ - __pyx_t_14 = (__pyx_v_can_skip != 0); - if (__pyx_t_14) { + if (__pyx_v_can_skip) { + } else { + __pyx_t_12 = __pyx_v_can_skip; + goto __pyx_L103_bool_binop_done; + } + __pyx_t_10 = (!__pyx_v_has_breakpoint_in_frame); + __pyx_t_12 = __pyx_t_10; + __pyx_L103_bool_binop_done:; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":975 - * elif not breakpoints_for_file: - * if can_skip: + /* "_pydevd_bundle/pydevd_cython.pyx":979 + * + * if can_skip and not has_breakpoint_in_frame: * if has_exception_breakpoints: # <<<<<<<<<<<<<< * return self.trace_exception * else: */ - __pyx_t_14 = (__pyx_v_has_exception_breakpoints != 0); - if (__pyx_t_14) { + if (__pyx_v_has_exception_breakpoints) { - /* "_pydevd_bundle/pydevd_cython.pyx":976 - * if can_skip: + /* "_pydevd_bundle/pydevd_cython.pyx":980 + * if can_skip and not has_breakpoint_in_frame: * if has_exception_breakpoints: * return self.trace_exception # <<<<<<<<<<<<<< * else: * return None if is_call else NO_FTRACE */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 976, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 980, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":975 - * elif not breakpoints_for_file: - * if can_skip: + /* "_pydevd_bundle/pydevd_cython.pyx":979 + * + * if can_skip and not has_breakpoint_in_frame: * if has_exception_breakpoints: # <<<<<<<<<<<<<< * return self.trace_exception * else: */ } - /* "_pydevd_bundle/pydevd_cython.pyx":978 + /* "_pydevd_bundle/pydevd_cython.pyx":982 * return self.trace_exception * else: * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< * - * else: + * # We may have hit a breakpoint or we are already in step mode. Either way, let's check what we should do in this frame */ /*else*/ { __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { + if (__pyx_v_is_call) { __Pyx_INCREF(Py_None); - __pyx_t_4 = Py_None; + __pyx_t_8 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 978, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 982, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_t_7; + __pyx_t_7 = 0; } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; goto __pyx_L3_return; } - /* "_pydevd_bundle/pydevd_cython.pyx":974 + /* "_pydevd_bundle/pydevd_cython.pyx":978 + * frame_skips_cache[frame_cache_key] = 0 * - * elif not breakpoints_for_file: - * if can_skip: # <<<<<<<<<<<<<< + * if can_skip and not has_breakpoint_in_frame: # <<<<<<<<<<<<<< * if has_exception_breakpoints: * return self.trace_exception */ } - - /* "_pydevd_bundle/pydevd_cython.pyx":973 - * pass # Do nothing here (just keep on going as we can't skip it). - * - * elif not breakpoints_for_file: # <<<<<<<<<<<<<< - * if can_skip: - * if has_exception_breakpoints: - */ - goto __pyx_L71; } + __pyx_L72:; - /* "_pydevd_bundle/pydevd_cython.pyx":982 - * else: - * # When cached, 0 means we don't have a breakpoint and 1 means we have. - * if can_skip: # <<<<<<<<<<<<<< - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) - * if breakpoints_in_line_cache == 0: + /* "_pydevd_bundle/pydevd_cython.pyx":857 + * return self.trace_dispatch + * + * if not is_exception_event: # <<<<<<<<<<<<<< + * breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) + * */ - /*else*/ { - __pyx_t_14 = (__pyx_v_can_skip != 0); - if (__pyx_t_14) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":983 - * # When cached, 0 means we don't have a breakpoint and 1 means we have. - * if can_skip: - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) # <<<<<<<<<<<<<< - * if breakpoints_in_line_cache == 0: - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":987 + * # if DEBUG: print('NOT skipped: %s %s %s %s' % (frame.f_lineno, frame.f_code.co_name, event, frame.__class__.__name__)) + * + * try: # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 983, __pyx_L4_error) - } - __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_line_cache_key, __pyx_int_neg_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 983, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 983, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_breakpoints_in_line_cache = __pyx_t_5; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":984 - * if can_skip: - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) - * if breakpoints_in_line_cache == 0: # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":988 * + * try: + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case + * # (one for the line and the other for the return). */ - __pyx_t_14 = ((__pyx_v_breakpoints_in_line_cache == 0) != 0); - if (__pyx_t_14) { + __pyx_v_stop_on_plugin_breakpoint = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":985 - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) - * if breakpoints_in_line_cache == 0: - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":992 + * # (one for the line and the other for the return). * - * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) + * stop_info = {} # <<<<<<<<<<<<<< + * breakpoint = None + * stop = False */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 985, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L3_return; + __pyx_t_8 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 992, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_v_stop_info = ((PyObject*)__pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":984 - * if can_skip: - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) - * if breakpoints_in_line_cache == 0: # <<<<<<<<<<<<<< - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":993 * + * stop_info = {} + * breakpoint = None # <<<<<<<<<<<<<< + * stop = False + * stop_reason = 111 */ - } + __Pyx_INCREF(Py_None); + __pyx_v_breakpoint = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":982 - * else: - * # When cached, 0 means we don't have a breakpoint and 1 means we have. - * if can_skip: # <<<<<<<<<<<<<< - * breakpoints_in_line_cache = frame_skips_cache.get(line_cache_key, -1) - * if breakpoints_in_line_cache == 0: + /* "_pydevd_bundle/pydevd_cython.pyx":994 + * stop_info = {} + * breakpoint = None + * stop = False # <<<<<<<<<<<<<< + * stop_reason = 111 + * bp_type = None */ - } + __pyx_v_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":987 - * return self.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":995 + * breakpoint = None + * stop = False + * stop_reason = 111 # <<<<<<<<<<<<<< + * bp_type = None * - * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) # <<<<<<<<<<<<<< - * if breakpoints_in_frame_cache != -1: - * # Gotten from cache. */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 987, __pyx_L4_error) - } - __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_neg_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 987, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 987, __pyx_L4_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_breakpoints_in_frame_cache = __pyx_t_5; + __Pyx_INCREF(__pyx_int_111); + __pyx_v_stop_reason = __pyx_int_111; - /* "_pydevd_bundle/pydevd_cython.pyx":988 + /* "_pydevd_bundle/pydevd_cython.pyx":996 + * stop = False + * stop_reason = 111 + * bp_type = None # <<<<<<<<<<<<<< * - * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) - * if breakpoints_in_frame_cache != -1: # <<<<<<<<<<<<<< - * # Gotten from cache. - * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 + * if function_breakpoint_on_call_event: */ - __pyx_t_14 = ((__pyx_v_breakpoints_in_frame_cache != -1L) != 0); - if (__pyx_t_14) { + __Pyx_INCREF(Py_None); + __pyx_v_bp_type = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":990 - * if breakpoints_in_frame_cache != -1: - * # Gotten from cache. - * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":998 + * bp_type = None * - * else: + * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< + * breakpoint = function_breakpoint_on_call_event + * stop = True */ - __pyx_v_has_breakpoint_in_frame = (__pyx_v_breakpoints_in_frame_cache == 1); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint_on_call_event); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 998, __pyx_L106_error) + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":988 + /* "_pydevd_bundle/pydevd_cython.pyx":999 * - * breakpoints_in_frame_cache = frame_skips_cache.get(frame_cache_key, -1) - * if breakpoints_in_frame_cache != -1: # <<<<<<<<<<<<<< - * # Gotten from cache. - * has_breakpoint_in_frame = breakpoints_in_frame_cache == 1 + * if function_breakpoint_on_call_event: + * breakpoint = function_breakpoint_on_call_event # <<<<<<<<<<<<<< + * stop = True + * new_frame = frame */ - goto __pyx_L76; - } + __Pyx_INCREF(__pyx_v_function_breakpoint_on_call_event); + __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_v_function_breakpoint_on_call_event); - /* "_pydevd_bundle/pydevd_cython.pyx":993 - * - * else: - * has_breakpoint_in_frame = False # <<<<<<<<<<<<<< - * - * try: + /* "_pydevd_bundle/pydevd_cython.pyx":1000 + * if function_breakpoint_on_call_event: + * breakpoint = function_breakpoint_on_call_event + * stop = True # <<<<<<<<<<<<<< + * new_frame = frame + * stop_reason = CMD_SET_FUNCTION_BREAK */ - /*else*/ { - __pyx_v_has_breakpoint_in_frame = 0; + __pyx_v_stop = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":995 - * has_breakpoint_in_frame = False + /* "_pydevd_bundle/pydevd_cython.pyx":1001 + * breakpoint = function_breakpoint_on_call_event + * stop = True + * new_frame = frame # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_FUNCTION_BREAK * - * try: # <<<<<<<<<<<<<< - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_17); - __Pyx_XGOTREF(__pyx_t_18); - /*try:*/ { + __Pyx_INCREF(__pyx_v_frame); + __pyx_v_new_frame = __pyx_v_frame; - /* "_pydevd_bundle/pydevd_cython.pyx":996 + /* "_pydevd_bundle/pydevd_cython.pyx":1002 + * stop = True + * new_frame = frame + * stop_reason = CMD_SET_FUNCTION_BREAK # <<<<<<<<<<<<<< * - * try: - * func_lines = set() # <<<<<<<<<<<<<< - * for offset_and_lineno in dis.findlinestarts(frame.f_code): - * func_lines.add(offset_and_lineno[1]) - */ - __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 996, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_func_lines = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":997 - * try: - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): # <<<<<<<<<<<<<< - * func_lines.add(offset_and_lineno[1]) - * except: + * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_dis); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_findlinestarts); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) { - __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __pyx_t_12 = 0; - __pyx_t_13 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_13 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 997, __pyx_L77_error) - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - for (;;) { - if (likely(!__pyx_t_13)) { - if (likely(PyList_CheckExact(__pyx_t_7))) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 997, __pyx_L77_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_12); __Pyx_INCREF(__pyx_t_4); __pyx_t_12++; if (unlikely(0 < 0)) __PYX_ERR(0, 997, __pyx_L77_error) - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 997, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - } - } else { - __pyx_t_4 = __pyx_t_13(__pyx_t_7); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 997, __pyx_L77_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_offset_and_lineno, __pyx_t_4); - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CMD_SET_FUNCTION_BREAK); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1002, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_stop_reason, __pyx_t_8); + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":998 - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): - * func_lines.add(offset_and_lineno[1]) # <<<<<<<<<<<<<< - * except: - * # This is a fallback for implementations where we can't get the function + /* "_pydevd_bundle/pydevd_cython.pyx":998 + * bp_type = None + * + * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< + * breakpoint = function_breakpoint_on_call_event + * stop = True */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offset_and_lineno, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 998, __pyx_L77_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_19 = PySet_Add(__pyx_v_func_lines, __pyx_t_4); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(0, 998, __pyx_L77_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L112; + } - /* "_pydevd_bundle/pydevd_cython.pyx":997 - * try: - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): # <<<<<<<<<<<<<< - * func_lines.add(offset_and_lineno[1]) - * except: + /* "_pydevd_bundle/pydevd_cython.pyx":1004 + * stop_reason = CMD_SET_FUNCTION_BREAK + * + * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: # <<<<<<<<<<<<<< + * breakpoint = breakpoints_for_file[line] + * new_frame = frame */ - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_v_is_line) { + } else { + __pyx_t_12 = __pyx_v_is_line; + goto __pyx_L113_bool_binop_done; + } + __pyx_t_10 = (__pyx_v_info->pydev_state != 2); + if (__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L113_bool_binop_done; + } + if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1004, __pyx_L106_error) } + __pyx_t_10 = (__pyx_v_breakpoints_for_file != ((PyObject*)Py_None)); + if (__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L113_bool_binop_done; + } + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1004, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1004, __pyx_L106_error) } + if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 1004, __pyx_L106_error) + } + __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_t_8, __pyx_v_breakpoints_for_file, Py_EQ)); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1004, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L113_bool_binop_done:; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":995 - * has_breakpoint_in_frame = False + /* "_pydevd_bundle/pydevd_cython.pyx":1005 * - * try: # <<<<<<<<<<<<<< - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): + * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: + * breakpoint = breakpoints_for_file[line] # <<<<<<<<<<<<<< + * new_frame = frame + * stop = True */ - } + if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1005, __pyx_L106_error) } + if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1005, __pyx_L106_error) + } + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1005, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_breakpoints_for_file, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1005, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1018 - * break - * else: - * for bp_line in breakpoints_for_file: # iterate on keys # <<<<<<<<<<<<<< - * if bp_line in func_lines: - * has_breakpoint_in_frame = True + /* "_pydevd_bundle/pydevd_cython.pyx":1006 + * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: + * breakpoint = breakpoints_for_file[line] + * new_frame = frame # <<<<<<<<<<<<<< + * stop = True + * */ - /*else:*/ { - __pyx_t_12 = 0; - if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 1018, __pyx_L79_except_error) - } - __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_breakpoints_for_file, 1, ((PyObject *)NULL), (&__pyx_t_20), (&__pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1018, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __pyx_t_7 = __pyx_t_4; - __pyx_t_4 = 0; - while (1) { - __pyx_t_10 = __Pyx_dict_iter_next(__pyx_t_7, __pyx_t_20, &__pyx_t_12, &__pyx_t_4, NULL, NULL, __pyx_t_5); - if (unlikely(__pyx_t_10 == 0)) break; - if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 1018, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1018, __pyx_L79_except_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_bp_line = __pyx_t_10; + __Pyx_INCREF(__pyx_v_frame); + __pyx_v_new_frame = __pyx_v_frame; - /* "_pydevd_bundle/pydevd_cython.pyx":1019 - * else: - * for bp_line in breakpoints_for_file: # iterate on keys - * if bp_line in func_lines: # <<<<<<<<<<<<<< - * has_breakpoint_in_frame = True - * break + /* "_pydevd_bundle/pydevd_cython.pyx":1007 + * breakpoint = breakpoints_for_file[line] + * new_frame = frame + * stop = True # <<<<<<<<<<<<<< + * + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: */ - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_bp_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1019, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = (__Pyx_PySet_ContainsTF(__pyx_t_4, __pyx_v_func_lines, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1019, __pyx_L79_except_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + __pyx_v_stop = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1020 - * for bp_line in breakpoints_for_file: # iterate on keys - * if bp_line in func_lines: - * has_breakpoint_in_frame = True # <<<<<<<<<<<<<< - * break + /* "_pydevd_bundle/pydevd_cython.pyx":1004 + * stop_reason = CMD_SET_FUNCTION_BREAK * + * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: # <<<<<<<<<<<<<< + * breakpoint = breakpoints_for_file[line] + * new_frame = frame */ - __pyx_v_has_breakpoint_in_frame = 1; + goto __pyx_L112; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1021 - * if bp_line in func_lines: - * has_breakpoint_in_frame = True - * break # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1009 + * stop = True * - * # Cache the value (1 or 0 or -1 for default because of cython). + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: # <<<<<<<<<<<<<< + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) + * if result: */ - goto __pyx_L86_break; + __pyx_t_10 = (__pyx_v_plugin_manager != Py_None); + if (__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L117_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1009, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1009, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L117_bool_binop_done:; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1019 - * else: - * for bp_line in breakpoints_for_file: # iterate on keys - * if bp_line in func_lines: # <<<<<<<<<<<<<< - * has_breakpoint_in_frame = True - * break + /* "_pydevd_bundle/pydevd_cython.pyx":1010 + * + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) # <<<<<<<<<<<<<< + * if result: + * stop_on_plugin_breakpoint = True */ - } - } - __pyx_L86_break:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_get_breakpoint); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1010, __pyx_L106_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; } - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - goto __pyx_L82_try_end; - __pyx_L77_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_t_1}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1010, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_v_result = __pyx_t_7; + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":999 - * for offset_and_lineno in dis.findlinestarts(frame.f_code): - * func_lines.add(offset_and_lineno[1]) - * except: # <<<<<<<<<<<<<< - * # This is a fallback for implementations where we can't get the function - * # lines -- i.e.: jython (in this case clients need to provide the function + /* "_pydevd_bundle/pydevd_cython.pyx":1011 + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) + * if result: # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = True + * breakpoint, new_frame, bp_type = result */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(0, 999, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1011, __pyx_L106_error) + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1006 - * - * # Checks the breakpoint to see if there is a context match in some function. - * curr_func_name = frame.f_code.co_name # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1012 + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) + * if result: + * stop_on_plugin_breakpoint = True # <<<<<<<<<<<<<< + * breakpoint, new_frame, bp_type = result * - * # global context is set with an empty name */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1006, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1006, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 1006, __pyx_L79_except_error) - __pyx_v_curr_func_name = ((PyObject*)__pyx_t_6); - __pyx_t_6 = 0; + __pyx_v_stop_on_plugin_breakpoint = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1009 - * - * # global context is set with an empty name - * if curr_func_name in ('?', '', ''): # <<<<<<<<<<<<<< - * curr_func_name = '' + /* "_pydevd_bundle/pydevd_cython.pyx":1013 + * if result: + * stop_on_plugin_breakpoint = True + * breakpoint, new_frame, bp_type = result # <<<<<<<<<<<<<< * + * if breakpoint: */ - __Pyx_INCREF(__pyx_v_curr_func_name); - __pyx_t_21 = __pyx_v_curr_func_name; - __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_t_21, __pyx_kp_s__3, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1009, __pyx_L79_except_error) - __pyx_t_11 = (__pyx_t_14 != 0); - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L91_bool_binop_done; + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1013, __pyx_L106_error) } - __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_21, __pyx_kp_s_module, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1009, __pyx_L79_except_error) - __pyx_t_14 = (__pyx_t_11 != 0); - if (!__pyx_t_14) { + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L91_bool_binop_done; + __pyx_t_7 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + __pyx_t_1 = PyList_GET_ITEM(sequence, 2); } - __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_t_21, __pyx_kp_s_lambda, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1009, __pyx_L79_except_error) - __pyx_t_11 = (__pyx_t_14 != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L91_bool_binop_done:; - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1010 - * # global context is set with an empty name - * if curr_func_name in ('?', '', ''): - * curr_func_name = '' # <<<<<<<<<<<<<< - * - * for bp in breakpoints_for_file.values(): + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_1); + #else + __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1013, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1013, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1013, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); + index = 0; __pyx_t_7 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L120_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + index = 1; __pyx_t_8 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_8)) goto __pyx_L120_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 2; __pyx_t_1 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L120_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 3) < 0) __PYX_ERR(0, 1013, __pyx_L106_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L121_unpacking_done; + __pyx_L120_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1013, __pyx_L106_error) + __pyx_L121_unpacking_done:; + } + __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_t_7); + __pyx_t_7 = 0; + __pyx_v_new_frame = __pyx_t_8; + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_bp_type, __pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1011 + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) + * if result: # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = True + * breakpoint, new_frame, bp_type = result */ - __Pyx_INCREF(__pyx_kp_s_); - __Pyx_DECREF_SET(__pyx_v_curr_func_name, __pyx_kp_s_); + } - /* "_pydevd_bundle/pydevd_cython.pyx":1009 + /* "_pydevd_bundle/pydevd_cython.pyx":1009 + * stop = True * - * # global context is set with an empty name - * if curr_func_name in ('?', '', ''): # <<<<<<<<<<<<<< - * curr_func_name = '' + * elif plugin_manager is not None and py_db.has_plugin_line_breaks: # <<<<<<<<<<<<<< + * result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) + * if result: + */ + } + __pyx_L112:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1015 + * breakpoint, new_frame, bp_type = result * + * if breakpoint: # <<<<<<<<<<<<<< + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here */ - } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1015, __pyx_L106_error) + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1012 - * curr_func_name = '' + /* "_pydevd_bundle/pydevd_cython.pyx":1018 + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here + * if breakpoint.expression is not None: # <<<<<<<<<<<<<< + * py_db.handle_breakpoint_expression(breakpoint, info, new_frame) * - * for bp in breakpoints_for_file.values(): # <<<<<<<<<<<<<< - * # will match either global or some function - * if bp.func_name in ('None', curr_func_name): */ - if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 1012, __pyx_L79_except_error) - } - __pyx_t_6 = __Pyx_PyDict_Values(__pyx_v_breakpoints_for_file); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_6); - if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) { - __pyx_t_3 = __pyx_t_6; __Pyx_INCREF(__pyx_t_3); __pyx_t_20 = 0; - __pyx_t_13 = NULL; - } else { - __pyx_t_20 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_13 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - for (;;) { - if (likely(!__pyx_t_13)) { - if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_20 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_20); __Pyx_INCREF(__pyx_t_6); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } else { - if (__pyx_t_20 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_20); __Pyx_INCREF(__pyx_t_6); __pyx_t_20++; if (unlikely(0 < 0)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_20); __pyx_t_20++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1012, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - } - } else { - __pyx_t_6 = __pyx_t_13(__pyx_t_3); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 1012, __pyx_L79_except_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_bp, __pyx_t_6); - __pyx_t_6 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1014 - * for bp in breakpoints_for_file.values(): - * # will match either global or some function - * if bp.func_name in ('None', curr_func_name): # <<<<<<<<<<<<<< - * has_breakpoint_in_frame = True - * break - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_func_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1014, __pyx_L79_except_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_None, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1014, __pyx_L79_except_error) - if (!__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L97_bool_binop_done; - } - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_v_curr_func_name, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1014, __pyx_L79_except_error) - __pyx_t_11 = __pyx_t_9; - __pyx_L97_bool_binop_done:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1015 - * # will match either global or some function - * if bp.func_name in ('None', curr_func_name): - * has_breakpoint_in_frame = True # <<<<<<<<<<<<<< - * break - * else: - */ - __pyx_v_has_breakpoint_in_frame = 1; - - /* "_pydevd_bundle/pydevd_cython.pyx":1016 - * if bp.func_name in ('None', curr_func_name): - * has_breakpoint_in_frame = True - * break # <<<<<<<<<<<<<< - * else: - * for bp_line in breakpoints_for_file: # iterate on keys - */ - goto __pyx_L95_break; - - /* "_pydevd_bundle/pydevd_cython.pyx":1014 - * for bp in breakpoints_for_file.values(): - * # will match either global or some function - * if bp.func_name in ('None', curr_func_name): # <<<<<<<<<<<<<< - * has_breakpoint_in_frame = True - * break - */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_expression); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1012 - * curr_func_name = '' + /* "_pydevd_bundle/pydevd_cython.pyx":1019 + * # lets do the conditional stuff here + * if breakpoint.expression is not None: + * py_db.handle_breakpoint_expression(breakpoint, info, new_frame) # <<<<<<<<<<<<<< * - * for bp in breakpoints_for_file.values(): # <<<<<<<<<<<<<< - * # will match either global or some function - * if bp.func_name in ('None', curr_func_name): + * if stop or stop_on_plugin_breakpoint: */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_expression); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1019, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(!__pyx_v_new_frame)) { __Pyx_RaiseUnboundLocalError("new_frame"); __PYX_ERR(0, 1019, __pyx_L106_error) } + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; } - __pyx_L95_break:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_v_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_new_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L78_exception_handled; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1019, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __pyx_L79_except_error:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":995 - * has_breakpoint_in_frame = False + /* "_pydevd_bundle/pydevd_cython.pyx":1018 + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here + * if breakpoint.expression is not None: # <<<<<<<<<<<<<< + * py_db.handle_breakpoint_expression(breakpoint, info, new_frame) * - * try: # <<<<<<<<<<<<<< - * func_lines = set() - * for offset_and_lineno in dis.findlinestarts(frame.f_code): */ - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); - goto __pyx_L4_error; - __pyx_L78_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); - __pyx_L82_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1024 + /* "_pydevd_bundle/pydevd_cython.pyx":1021 + * py_db.handle_breakpoint_expression(breakpoint, info, new_frame) * - * # Cache the value (1 or 0 or -1 for default because of cython). - * if has_breakpoint_in_frame: # <<<<<<<<<<<<<< - * frame_skips_cache[frame_cache_key] = 1 - * else: + * if stop or stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * eval_result = False + * if breakpoint.has_condition: */ - __pyx_t_9 = (__pyx_v_has_breakpoint_in_frame != 0); - if (__pyx_t_9) { + if (!__pyx_v_stop) { + } else { + __pyx_t_12 = __pyx_v_stop; + goto __pyx_L125_bool_binop_done; + } + __pyx_t_12 = __pyx_v_stop_on_plugin_breakpoint; + __pyx_L125_bool_binop_done:; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1025 - * # Cache the value (1 or 0 or -1 for default because of cython). - * if has_breakpoint_in_frame: - * frame_skips_cache[frame_cache_key] = 1 # <<<<<<<<<<<<<< - * else: - * frame_skips_cache[frame_cache_key] = 0 + /* "_pydevd_bundle/pydevd_cython.pyx":1022 + * + * if stop or stop_on_plugin_breakpoint: + * eval_result = False # <<<<<<<<<<<<<< + * if breakpoint.has_condition: + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1025, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_1) < 0)) __PYX_ERR(0, 1025, __pyx_L4_error) + __Pyx_INCREF(Py_False); + __pyx_v_eval_result = Py_False; - /* "_pydevd_bundle/pydevd_cython.pyx":1024 - * - * # Cache the value (1 or 0 or -1 for default because of cython). - * if has_breakpoint_in_frame: # <<<<<<<<<<<<<< - * frame_skips_cache[frame_cache_key] = 1 - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1023 + * if stop or stop_on_plugin_breakpoint: + * eval_result = False + * if breakpoint.has_condition: # <<<<<<<<<<<<<< + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) + * if not eval_result: */ - goto __pyx_L99; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_has_condition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1023, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_12) { - /* "_pydevd_bundle/pydevd_cython.pyx":1027 - * frame_skips_cache[frame_cache_key] = 1 - * else: - * frame_skips_cache[frame_cache_key] = 0 # <<<<<<<<<<<<<< - * - * if can_skip and not has_breakpoint_in_frame: + /* "_pydevd_bundle/pydevd_cython.pyx":1024 + * eval_result = False + * if breakpoint.has_condition: + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) # <<<<<<<<<<<<<< + * if not eval_result: + * stop = False */ - /*else*/ { - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1027, __pyx_L4_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_frame_cache_key, __pyx_int_0) < 0)) __PYX_ERR(0, 1027, __pyx_L4_error) - } - __pyx_L99:; - } - __pyx_L76:; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_condition); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1024, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(!__pyx_v_new_frame)) { __Pyx_RaiseUnboundLocalError("new_frame"); __PYX_ERR(0, 1024, __pyx_L106_error) } + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, ((PyObject *)__pyx_v_info), __pyx_v_breakpoint, __pyx_v_new_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1024, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF_SET(__pyx_v_eval_result, __pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1029 - * frame_skips_cache[frame_cache_key] = 0 + /* "_pydevd_bundle/pydevd_cython.pyx":1025 + * if breakpoint.has_condition: + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) + * if not eval_result: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_eval_result); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1025, __pyx_L106_error) + __pyx_t_10 = (!__pyx_t_12); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1026 + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) + * if not eval_result: + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False * - * if can_skip and not has_breakpoint_in_frame: # <<<<<<<<<<<<<< - * if has_exception_breakpoints: - * return self.trace_exception */ - __pyx_t_11 = (__pyx_v_can_skip != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L101_bool_binop_done; - } - __pyx_t_11 = ((!(__pyx_v_has_breakpoint_in_frame != 0)) != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L101_bool_binop_done:; - if (__pyx_t_9) { + __pyx_v_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1030 + /* "_pydevd_bundle/pydevd_cython.pyx":1027 + * if not eval_result: + * stop = False + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< * - * if can_skip and not has_breakpoint_in_frame: - * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * return self.trace_exception - * else: + * if is_call and ( */ - __pyx_t_9 = (__pyx_v_has_exception_breakpoints != 0); - if (__pyx_t_9) { + __pyx_v_stop_on_plugin_breakpoint = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1031 - * if can_skip and not has_breakpoint_in_frame: - * if has_exception_breakpoints: - * return self.trace_exception # <<<<<<<<<<<<<< - * else: - * return None if is_call else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1025 + * if breakpoint.has_condition: + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) + * if not eval_result: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1031, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L3_return; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1030 - * - * if can_skip and not has_breakpoint_in_frame: - * if has_exception_breakpoints: # <<<<<<<<<<<<<< - * return self.trace_exception - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1023 + * if stop or stop_on_plugin_breakpoint: + * eval_result = False + * if breakpoint.has_condition: # <<<<<<<<<<<<<< + * eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) + * if not eval_result: */ - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":1033 - * return self.trace_exception - * else: - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1021 + * py_db.handle_breakpoint_expression(breakpoint, info, new_frame) * - * # We may have hit a breakpoint or we are already in step mode. Either way, let's check what we should do in this frame + * if stop or stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * eval_result = False + * if breakpoint.has_condition: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_1 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1033, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; - } - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L3_return; } /* "_pydevd_bundle/pydevd_cython.pyx":1029 - * frame_skips_cache[frame_cache_key] = 0 + * stop_on_plugin_breakpoint = False * - * if can_skip and not has_breakpoint_in_frame: # <<<<<<<<<<<<<< - * if has_exception_breakpoints: - * return self.trace_exception + * if is_call and ( # <<<<<<<<<<<<<< + * frame.f_code.co_name in ("", "") or (line == 1 and frame.f_code.co_name.startswith("", "") or (line == 1 and frame.f_code.co_name.startswith("", "") or (line == 1 and frame.f_code.co_name.startswith(". * - * try: - * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< - * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case - * # (one for the line and the other for the return). - */ - __pyx_v_stop_on_plugin_breakpoint = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1043 - * # (one for the line and the other for the return). + * return self.trace_dispatch # <<<<<<<<<<<<<< * - * stop_info = {} # <<<<<<<<<<<<<< - * breakpoint = None - * stop = False + * # Handle logpoint (on a logpoint we should never stop). */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_stop_info = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1043, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L110_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1044 + /* "_pydevd_bundle/pydevd_cython.pyx":1029 + * stop_on_plugin_breakpoint = False * - * stop_info = {} - * breakpoint = None # <<<<<<<<<<<<<< - * stop = False - * stop_reason = 111 + * if is_call and ( # <<<<<<<<<<<<<< + * frame.f_code.co_name in ("", "") or (line == 1 and frame.f_code.co_name.startswith(" 0: */ - __Pyx_INCREF(Py_None); - __pyx_v_bp_type = Py_None; + __pyx_v_stop_on_plugin_breakpoint = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1049 - * bp_type = None + /* "_pydevd_bundle/pydevd_cython.pyx":1050 + * stop_on_plugin_breakpoint = False * - * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< - * breakpoint = function_breakpoint_on_call_event - * stop = True + * if info.pydev_message is not None and len(info.pydev_message) > 0: # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint_on_call_event); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1049, __pyx_L104_error) - if (__pyx_t_9) { + __pyx_t_16 = (__pyx_v_info->pydev_message != ((PyObject*)Py_None)); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L141_bool_binop_done; + } + __pyx_t_8 = __pyx_v_info->pydev_message; + __Pyx_INCREF(__pyx_t_8); + __pyx_t_13 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1050, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_16 = (__pyx_t_13 > 0); + __pyx_t_10 = __pyx_t_16; + __pyx_L141_bool_binop_done:; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1050 + /* "_pydevd_bundle/pydevd_cython.pyx":1051 + * + * if info.pydev_message is not None and len(info.pydev_message) > 0: + * cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") # <<<<<<<<<<<<<< + * py_db.writer.add_command(cmd) * - * if function_breakpoint_on_call_event: - * breakpoint = function_breakpoint_on_call_event # <<<<<<<<<<<<<< - * stop = True - * new_frame = frame */ - __Pyx_INCREF(__pyx_v_function_breakpoint_on_call_event); - __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_v_function_breakpoint_on_call_event); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_make_io_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_linesep); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Add(__pyx_v_info->pydev_message, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_kp_s_1}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1051, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_v_cmd = __pyx_t_8; + __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1051 - * if function_breakpoint_on_call_event: - * breakpoint = function_breakpoint_on_call_event - * stop = True # <<<<<<<<<<<<<< - * new_frame = frame - * stop_reason = CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":1052 + * if info.pydev_message is not None and len(info.pydev_message) > 0: + * cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) # <<<<<<<<<<<<<< + * + * if py_db.show_return_values: */ - __pyx_v_stop = 1; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_writer); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1052, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_add_command); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1052, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_cmd}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1052, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1052 - * breakpoint = function_breakpoint_on_call_event - * stop = True - * new_frame = frame # <<<<<<<<<<<<<< - * stop_reason = CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":1050 + * stop_on_plugin_breakpoint = False * + * if info.pydev_message is not None and len(info.pydev_message) > 0: # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) */ - __Pyx_INCREF(__pyx_v_frame); - __pyx_v_new_frame = __pyx_v_frame; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1053 - * stop = True - * new_frame = frame - * stop_reason = CMD_SET_FUNCTION_BREAK # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1046 * - * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: + * # Handle logpoint (on a logpoint we should never stop). + * if (stop or stop_on_plugin_breakpoint) and breakpoint.is_logpoint: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_SET_FUNCTION_BREAK); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1053, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_stop_reason, __pyx_t_1); - __pyx_t_1 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1049 - * bp_type = None + /* "_pydevd_bundle/pydevd_cython.pyx":1015 + * breakpoint, new_frame, bp_type = result * - * if function_breakpoint_on_call_event: # <<<<<<<<<<<<<< - * breakpoint = function_breakpoint_on_call_event - * stop = True + * if breakpoint: # <<<<<<<<<<<<<< + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here */ - goto __pyx_L110; } - /* "_pydevd_bundle/pydevd_cython.pyx":1055 - * stop_reason = CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":1054 + * py_db.writer.add_command(cmd) * - * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: # <<<<<<<<<<<<<< - * breakpoint = breakpoints_for_file[line] - * new_frame = frame + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * if is_return and ( + * ( */ - __pyx_t_11 = (__pyx_v_is_line != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L111_bool_binop_done; - } - __pyx_t_11 = ((__pyx_v_info->pydev_state != 2) != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L111_bool_binop_done; - } - if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1055, __pyx_L104_error) } - __pyx_t_11 = (__pyx_v_breakpoints_for_file != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L111_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1055, __pyx_L104_error) } - if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 1055, __pyx_L104_error) - } - __pyx_t_14 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_breakpoints_for_file, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1055, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = (__pyx_t_14 != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L111_bool_binop_done:; - if (__pyx_t_9) { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1054, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1054, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1056 + /* "_pydevd_bundle/pydevd_cython.pyx":1055 * - * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: - * breakpoint = breakpoints_for_file[line] # <<<<<<<<<<<<<< - * new_frame = frame - * stop = True + * if py_db.show_return_values: + * if is_return and ( # <<<<<<<<<<<<<< + * ( + * info.pydev_step_cmd in (108, 159, 128) */ - if (unlikely(!__pyx_v_breakpoints_for_file)) { __Pyx_RaiseUnboundLocalError("breakpoints_for_file"); __PYX_ERR(0, 1056, __pyx_L104_error) } - if (unlikely(__pyx_v_breakpoints_for_file == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1056, __pyx_L104_error) + if (__pyx_v_is_return) { + } else { + __pyx_t_10 = __pyx_v_is_return; + goto __pyx_L145_bool_binop_done; } - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1056, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_breakpoints_for_file, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1056, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_t_4); - __pyx_t_4 = 0; /* "_pydevd_bundle/pydevd_cython.pyx":1057 - * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: - * breakpoint = breakpoints_for_file[line] - * new_frame = frame # <<<<<<<<<<<<<< - * stop = True - * + * if is_return and ( + * ( + * info.pydev_step_cmd in (108, 159, 128) # <<<<<<<<<<<<<< + * and (self._is_same_frame(stop_frame, frame.f_back)) + * ) */ - __Pyx_INCREF(__pyx_v_frame); - __pyx_v_new_frame = __pyx_v_frame; - - /* "_pydevd_bundle/pydevd_cython.pyx":1058 - * breakpoint = breakpoints_for_file[line] - * new_frame = frame - * stop = True # <<<<<<<<<<<<<< - * - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - */ - __pyx_v_stop = 1; + switch (__pyx_v_info->pydev_step_cmd) { + case 0x6C: + case 0x9F: + case 0x80: + __pyx_t_16 = 1; + break; + default: + __pyx_t_16 = 0; + break; + } + __pyx_t_12 = __pyx_t_16; + if (!__pyx_t_12) { + goto __pyx_L147_next_or; + } else { + } - /* "_pydevd_bundle/pydevd_cython.pyx":1055 - * stop_reason = CMD_SET_FUNCTION_BREAK - * - * elif is_line and info.pydev_state != 2 and breakpoints_for_file is not None and line in breakpoints_for_file: # <<<<<<<<<<<<<< - * breakpoint = breakpoints_for_file[line] - * new_frame = frame + /* "_pydevd_bundle/pydevd_cython.pyx":1058 + * ( + * info.pydev_step_cmd in (108, 159, 128) + * and (self._is_same_frame(stop_frame, frame.f_back)) # <<<<<<<<<<<<<< + * ) + * or (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) */ - goto __pyx_L110; - } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1058, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1058, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1058, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L145_bool_binop_done; + } + __pyx_L147_next_or:; - /* "_pydevd_bundle/pydevd_cython.pyx":1060 - * stop = True - * - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: # <<<<<<<<<<<<<< - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) - * if result: + /* "_pydevd_bundle/pydevd_cython.pyx":1060 + * and (self._is_same_frame(stop_frame, frame.f_back)) + * ) + * or (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) # <<<<<<<<<<<<<< + * or (info.pydev_step_cmd in (107, 206)) + * or ( */ - __pyx_t_11 = (__pyx_v_plugin_manager != Py_None); - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L115_bool_binop_done; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1060, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1060, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __pyx_t_14; - __pyx_L115_bool_binop_done:; - if (__pyx_t_9) { + switch (__pyx_v_info->pydev_step_cmd) { + case 0x6D: + case 0xA0: + __pyx_t_12 = 1; + break; + default: + __pyx_t_12 = 0; + break; + } + __pyx_t_16 = __pyx_t_12; + if (!__pyx_t_16) { + goto __pyx_L149_next_or; + } else { + } + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1060, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L145_bool_binop_done; + } + __pyx_L149_next_or:; /* "_pydevd_bundle/pydevd_cython.pyx":1061 - * - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) # <<<<<<<<<<<<<< - * if result: - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + * ) + * or (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) + * or (info.pydev_step_cmd in (107, 206)) # <<<<<<<<<<<<<< + * or ( + * info.pydev_step_cmd == 144 + */ + switch (__pyx_v_info->pydev_step_cmd) { + case 0x6B: + case 0xCE: + __pyx_t_16 = 1; + break; + default: + __pyx_t_16 = 0; + break; + } + __pyx_t_12 = __pyx_t_16; + if (!__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L145_bool_binop_done; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1063 + * or (info.pydev_step_cmd in (107, 206)) + * or ( + * info.pydev_step_cmd == 144 # <<<<<<<<<<<<<< + * and frame.f_back is not None + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + */ + __pyx_t_12 = (__pyx_v_info->pydev_step_cmd == 0x90); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L145_bool_binop_done; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1064 + * or ( + * info.pydev_step_cmd == 144 + * and frame.f_back is not None # <<<<<<<<<<<<<< + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_get_breakpoint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L104_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L106_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = NULL; + __pyx_t_12 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L145_bool_binop_done; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1065 + * info.pydev_step_cmd == 144 + * and frame.f_back is not None + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) # <<<<<<<<<<<<<< + * ) + * ): + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_8, function); __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[6] = {__pyx_t_7, __pyx_v_main_debugger, ((PyObject *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[6] = {__pyx_t_7, __pyx_v_main_debugger, ((PyObject *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 5+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else #endif { - __pyx_t_3 = PyTuple_New(5+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1061, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_v_main_debugger); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, ((PyObject *)__pyx_v_self)); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_5, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_5, __pyx_v_event); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_3, 4+__pyx_t_5, __pyx_v_self->_args); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_7, __pyx_t_4, Py_True}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1065, __pyx_L106_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_result = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_16 = (!__pyx_t_12); + __pyx_t_10 = __pyx_t_16; + __pyx_L145_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":1062 - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) - * if result: # <<<<<<<<<<<<<< - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + /* "_pydevd_bundle/pydevd_cython.pyx":1055 * + * if py_db.show_return_values: + * if is_return and ( # <<<<<<<<<<<<<< + * ( + * info.pydev_step_cmd in (108, 159, 128) */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1062, __pyx_L104_error) - if (__pyx_t_9) { + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1063 - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) - * if result: - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1068 + * ) + * ): + * self._show_return_values(frame, arg) # <<<<<<<<<<<<<< * - * if breakpoint: + * elif py_db.remove_return_values_flag: */ - if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { - PyObject* sequence = __pyx_v_result; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1063, __pyx_L104_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_1 = PyList_GET_ITEM(sequence, 1); - __pyx_t_3 = PyList_GET_ITEM(sequence, 2); - __pyx_t_7 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_1,&__pyx_t_3,&__pyx_t_7}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1063, __pyx_L104_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_1,&__pyx_t_3,&__pyx_t_7}; - __pyx_t_6 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1063, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = Py_TYPE(__pyx_t_6)->tp_iternext; - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_15(__pyx_t_6); if (unlikely(!item)) goto __pyx_L118_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_6), 4) < 0) __PYX_ERR(0, 1063, __pyx_L104_error) - __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L119_unpacking_done; - __pyx_L118_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_15 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1063, __pyx_L104_error) - __pyx_L119_unpacking_done:; - } - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1063, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_stop_on_plugin_breakpoint = __pyx_t_9; - __Pyx_DECREF_SET(__pyx_v_breakpoint, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_new_frame = __pyx_t_3; - __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_bp_type, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_show_return_values(__pyx_v_self, __pyx_v_frame, __pyx_v_arg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1068, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1062 - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) - * if result: # <<<<<<<<<<<<<< - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + /* "_pydevd_bundle/pydevd_cython.pyx":1055 * + * if py_db.show_return_values: + * if is_return and ( # <<<<<<<<<<<<<< + * ( + * info.pydev_step_cmd in (108, 159, 128) */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1060 - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1054 + * py_db.writer.add_command(cmd) * - * elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: # <<<<<<<<<<<<<< - * result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) - * if result: + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * if is_return and ( + * ( */ + goto __pyx_L143; } - __pyx_L110:; - /* "_pydevd_bundle/pydevd_cython.pyx":1065 - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + /* "_pydevd_bundle/pydevd_cython.pyx":1070 + * self._show_return_values(frame, arg) * - * if breakpoint: # <<<<<<<<<<<<<< - * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint - * # lets do the conditional stuff here + * elif py_db.remove_return_values_flag: # <<<<<<<<<<<<<< + * try: + * self._remove_return_values(py_db, frame) */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1065, __pyx_L104_error) - if (__pyx_t_9) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_remove_return_values_flag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1070, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1068 - * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint - * # lets do the conditional stuff here - * if breakpoint.expression is not None: # <<<<<<<<<<<<<< - * main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) + /* "_pydevd_bundle/pydevd_cython.pyx":1071 * + * elif py_db.remove_return_values_flag: + * try: # <<<<<<<<<<<<<< + * self._remove_return_values(py_db, frame) + * finally: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_expression); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1068, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = (__pyx_t_7 != Py_None); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1069 - * # lets do the conditional stuff here - * if breakpoint.expression is not None: - * main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1072 + * elif py_db.remove_return_values_flag: + * try: + * self._remove_return_values(py_db, frame) # <<<<<<<<<<<<<< + * finally: + * py_db.remove_return_values_flag = False + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_remove_return_values(__pyx_v_self, __pyx_v_py_db, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L155_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1074 + * self._remove_return_values(py_db, frame) + * finally: + * py_db.remove_return_values_flag = False # <<<<<<<<<<<<<< * - * if stop or stop_on_plugin_breakpoint: + * if stop: */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_handle_breakpoint_expression); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1069, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(!__pyx_v_new_frame)) { __Pyx_RaiseUnboundLocalError("new_frame"); __PYX_ERR(0, 1069, __pyx_L104_error) } - __pyx_t_1 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } + /*finally:*/ { + /*normal exit:*/{ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_py_db, __pyx_n_s_remove_return_values_flag, Py_False) < 0) __PYX_ERR(0, 1074, __pyx_L106_error) + goto __pyx_L156; } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_new_frame}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1069, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_new_frame}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1069, __pyx_L104_error) + __pyx_L155_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - { - __pyx_t_4 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1069, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_25); + __Pyx_XGOTREF(__pyx_t_26); + __Pyx_XGOTREF(__pyx_t_27); + __Pyx_XGOTREF(__pyx_t_28); + __Pyx_XGOTREF(__pyx_t_29); + __pyx_t_9 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_23 = __pyx_filename; + { + if (__Pyx_PyObject_SetAttrStr(__pyx_v_py_db, __pyx_n_s_remove_return_values_flag, Py_False) < 0) __PYX_ERR(0, 1074, __pyx_L158_error) } - __Pyx_INCREF(__pyx_v_breakpoint); - __Pyx_GIVEREF(__pyx_v_breakpoint); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_v_breakpoint); - __Pyx_INCREF(((PyObject *)__pyx_v_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_info)); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, ((PyObject *)__pyx_v_info)); - __Pyx_INCREF(__pyx_v_new_frame); - __Pyx_GIVEREF(__pyx_v_new_frame); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_5, __pyx_v_new_frame); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1069, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29); + } + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_25); + __Pyx_XGIVEREF(__pyx_t_26); + __Pyx_ErrRestore(__pyx_t_24, __pyx_t_25, __pyx_t_26); + __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; + __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_23; + goto __pyx_L106_error; + __pyx_L158_error:; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29); + } + __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; + __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0; + __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; + goto __pyx_L106_error; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1068 - * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint - * # lets do the conditional stuff here - * if breakpoint.expression is not None: # <<<<<<<<<<<<<< - * main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) - * - */ + __pyx_L156:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1071 - * main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) + /* "_pydevd_bundle/pydevd_cython.pyx":1070 + * self._show_return_values(frame, arg) * - * if stop or stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< - * eval_result = False - * if breakpoint.has_condition: + * elif py_db.remove_return_values_flag: # <<<<<<<<<<<<<< + * try: + * self._remove_return_values(py_db, frame) */ - __pyx_t_9 = (__pyx_v_stop != 0); - if (!__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L123_bool_binop_done; - } - __pyx_t_9 = (__pyx_v_stop_on_plugin_breakpoint != 0); - __pyx_t_14 = __pyx_t_9; - __pyx_L123_bool_binop_done:; - if (__pyx_t_14) { + } + __pyx_L143:; - /* "_pydevd_bundle/pydevd_cython.pyx":1072 + /* "_pydevd_bundle/pydevd_cython.pyx":1076 + * py_db.remove_return_values_flag = False * - * if stop or stop_on_plugin_breakpoint: - * eval_result = False # <<<<<<<<<<<<<< - * if breakpoint.has_condition: - * eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) - */ - __Pyx_INCREF(Py_False); - __pyx_v_eval_result = Py_False; - - /* "_pydevd_bundle/pydevd_cython.pyx":1073 - * if stop or stop_on_plugin_breakpoint: - * eval_result = False - * if breakpoint.has_condition: # <<<<<<<<<<<<<< - * eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) - * if not eval_result: + * if stop: # <<<<<<<<<<<<<< + * self.set_suspend( + * thread, */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_has_condition); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1073, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1073, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_14) { + if (__pyx_v_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":1074 - * eval_result = False - * if breakpoint.has_condition: - * eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) # <<<<<<<<<<<<<< - * if not eval_result: - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1077 + * + * if stop: + * self.set_suspend( # <<<<<<<<<<<<<< + * thread, + * stop_reason, */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_handle_breakpoint_condition); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1074, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - if (unlikely(!__pyx_v_new_frame)) { __Pyx_RaiseUnboundLocalError("new_frame"); __PYX_ERR(0, 1074, __pyx_L104_error) } - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, ((PyObject *)__pyx_v_info), __pyx_v_breakpoint, __pyx_v_new_frame}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1074, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, ((PyObject *)__pyx_v_info), __pyx_v_breakpoint, __pyx_v_new_frame}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1074, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - { - __pyx_t_1 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1074, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(((PyObject *)__pyx_v_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_info)); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_5, ((PyObject *)__pyx_v_info)); - __Pyx_INCREF(__pyx_v_breakpoint); - __Pyx_GIVEREF(__pyx_v_breakpoint); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_5, __pyx_v_breakpoint); - __Pyx_INCREF(__pyx_v_new_frame); - __Pyx_GIVEREF(__pyx_v_new_frame); - PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_5, __pyx_v_new_frame); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1074, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_eval_result, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1077, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_1); - /* "_pydevd_bundle/pydevd_cython.pyx":1075 - * if breakpoint.has_condition: - * eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) - * if not eval_result: # <<<<<<<<<<<<<< - * stop = False - * stop_on_plugin_breakpoint = False + /* "_pydevd_bundle/pydevd_cython.pyx":1079 + * self.set_suspend( + * thread, + * stop_reason, # <<<<<<<<<<<<<< + * suspend_other_threads=breakpoint and breakpoint.suspend_policy == "ALL", + * ) */ - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_eval_result); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1075, __pyx_L104_error) - __pyx_t_9 = ((!__pyx_t_14) != 0); - if (__pyx_t_9) { + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1077, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_thread)) __PYX_ERR(0, 1077, __pyx_L106_error); + __Pyx_INCREF(__pyx_v_stop_reason); + __Pyx_GIVEREF(__pyx_v_stop_reason); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_stop_reason)) __PYX_ERR(0, 1077, __pyx_L106_error); - /* "_pydevd_bundle/pydevd_cython.pyx":1076 - * eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) - * if not eval_result: - * stop = False # <<<<<<<<<<<<<< - * stop_on_plugin_breakpoint = False + /* "_pydevd_bundle/pydevd_cython.pyx":1080 + * thread, + * stop_reason, + * suspend_other_threads=breakpoint and breakpoint.suspend_policy == "ALL", # <<<<<<<<<<<<<< + * ) * */ - __pyx_v_stop = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1080, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1080, __pyx_L106_error) + if (__pyx_t_10) { + } else { + __Pyx_INCREF(__pyx_v_breakpoint); + __pyx_t_7 = __pyx_v_breakpoint; + goto __pyx_L160_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_suspend_policy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1080, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_6, __pyx_n_s_ALL, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1080, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_INCREF(__pyx_t_3); + __pyx_t_7 = __pyx_t_3; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_L160_bool_binop_done:; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_suspend_other_threads, __pyx_t_7) < 0) __PYX_ERR(0, 1080, __pyx_L106_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1077 - * if not eval_result: - * stop = False - * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1077 * - * if is_call and (frame.f_code.co_name in ('', '') or (line == 1 and frame.f_code.co_name.startswith('', '') or (line == 1 and frame.f_code.co_name.startswith('. - * - * return self.trace_dispatch # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1085 + * elif stop_on_plugin_breakpoint and plugin_manager is not None: + * result = plugin_manager.suspend(py_db, thread, frame, bp_type) + * if result: # <<<<<<<<<<<<<< + * frame = result * - * # Handle logpoint (on a logpoint we should never stop). */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1091, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L108_try_return; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1085, __pyx_L106_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1079 - * stop_on_plugin_breakpoint = False + /* "_pydevd_bundle/pydevd_cython.pyx":1086 + * result = plugin_manager.suspend(py_db, thread, frame, bp_type) + * if result: + * frame = result # <<<<<<<<<<<<<< * - * if is_call and (frame.f_code.co_name in ('', '') or (line == 1 and frame.f_code.co_name.startswith(' 0: + * # if thread has a suspend flag, we suspend with a busy wait + * if info.pydev_state == 2: # <<<<<<<<<<<<<< + * self.do_wait_suspend(thread, frame, event, arg) + * return self.trace_dispatch */ - __pyx_v_stop_on_plugin_breakpoint = 0; + __pyx_t_10 = (__pyx_v_info->pydev_state == 2); + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1098 - * stop_on_plugin_breakpoint = False - * - * if info.pydev_message is not None and len(info.pydev_message) > 0: # <<<<<<<<<<<<<< - * cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') - * main_debugger.writer.add_command(cmd) + /* "_pydevd_bundle/pydevd_cython.pyx":1090 + * # if thread has a suspend flag, we suspend with a busy wait + * if info.pydev_state == 2: + * self.do_wait_suspend(thread, frame, event, arg) # <<<<<<<<<<<<<< + * return self.trace_dispatch + * else: */ - __pyx_t_11 = (__pyx_v_info->pydev_message != ((PyObject*)Py_None)); - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L139_bool_binop_done; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1090, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; } - __pyx_t_3 = __pyx_v_info->pydev_message; - __Pyx_INCREF(__pyx_t_3); - __pyx_t_20 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1098, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_14 = ((__pyx_t_20 > 0) != 0); - __pyx_t_9 = __pyx_t_14; - __pyx_L139_bool_binop_done:; - if (__pyx_t_9) { + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_8, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1090, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1099 - * - * if info.pydev_message is not None and len(info.pydev_message) > 0: - * cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') # <<<<<<<<<<<<<< - * main_debugger.writer.add_command(cmd) - * + /* "_pydevd_bundle/pydevd_cython.pyx":1091 + * if info.pydev_state == 2: + * self.do_wait_suspend(thread, frame, event, arg) + * return self.trace_dispatch # <<<<<<<<<<<<<< + * else: + * if not breakpoint and is_line: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_make_io_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_linesep); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Add(__pyx_v_info->pydev_message, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_kp_s_1}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_kp_s_1}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_7); - __Pyx_INCREF(__pyx_kp_s_1); - __Pyx_GIVEREF(__pyx_kp_s_1); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_kp_s_1); - __pyx_t_7 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_cmd = __pyx_t_3; - __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1091, __pyx_L106_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L110_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1100 - * if info.pydev_message is not None and len(info.pydev_message) > 0: - * cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') - * main_debugger.writer.add_command(cmd) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1089 * - * if main_debugger.show_return_values: + * # if thread has a suspend flag, we suspend with a busy wait + * if info.pydev_state == 2: # <<<<<<<<<<<<<< + * self.do_wait_suspend(thread, frame, event, arg) + * return self.trace_dispatch */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_writer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1100, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_add_command); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1100, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } - } - __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_v_cmd) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_cmd); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1098 - * stop_on_plugin_breakpoint = False - * - * if info.pydev_message is not None and len(info.pydev_message) > 0: # <<<<<<<<<<<<<< - * cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') - * main_debugger.writer.add_command(cmd) + /* "_pydevd_bundle/pydevd_cython.pyx":1093 + * return self.trace_dispatch + * else: + * if not breakpoint and is_line: # <<<<<<<<<<<<<< + * # No stop from anyone and no breakpoint found in line (cache that). + * frame_skips_cache[line_cache_key] = 0 */ - } + /*else*/ { + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1093, __pyx_L106_error) + __pyx_t_12 = (!__pyx_t_16); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L167_bool_binop_done; + } + __pyx_t_10 = __pyx_v_is_line; + __pyx_L167_bool_binop_done:; + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1094 + /* "_pydevd_bundle/pydevd_cython.pyx":1095 + * if not breakpoint and is_line: + * # No stop from anyone and no breakpoint found in line (cache that). + * frame_skips_cache[line_cache_key] = 0 # <<<<<<<<<<<<<< * - * # Handle logpoint (on a logpoint we should never stop). - * if (stop or stop_on_plugin_breakpoint) and breakpoint.is_logpoint: # <<<<<<<<<<<<<< - * stop = False - * stop_on_plugin_breakpoint = False + * except: */ - } + if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1095, __pyx_L106_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_line_cache_key, __pyx_int_0) < 0))) __PYX_ERR(0, 1095, __pyx_L106_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1065 - * stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result - * - * if breakpoint: # <<<<<<<<<<<<<< - * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint - * # lets do the conditional stuff here + /* "_pydevd_bundle/pydevd_cython.pyx":1093 + * return self.trace_dispatch + * else: + * if not breakpoint and is_line: # <<<<<<<<<<<<<< + * # No stop from anyone and no breakpoint found in line (cache that). + * frame_skips_cache[line_cache_key] = 0 */ + } } - /* "_pydevd_bundle/pydevd_cython.pyx":1102 - * main_debugger.writer.add_command(cmd) + /* "_pydevd_bundle/pydevd_cython.pyx":987 + * # if DEBUG: print('NOT skipped: %s %s %s %s' % (frame.f_lineno, frame.f_code.co_name, event, frame.__class__.__name__)) * - * if main_debugger.show_return_values: # <<<<<<<<<<<<<< - * if is_return and ( - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or + * try: # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1102, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1102, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_9) { + } + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + goto __pyx_L111_try_end; + __pyx_L106_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1103 + /* "_pydevd_bundle/pydevd_cython.pyx":1097 + * frame_skips_cache[line_cache_key] = 0 * - * if main_debugger.show_return_values: - * if is_return and ( # <<<<<<<<<<<<<< - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or + * except: # <<<<<<<<<<<<<< + * # Unfortunately Python itself stops the tracing when it originates from + * # the tracing function, so, we can't do much about it (just let the user know). */ - __pyx_t_14 = (__pyx_v_is_return != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L143_bool_binop_done; - } + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_8) < 0) __PYX_ERR(0, 1097, __pyx_L108_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_8); - /* "_pydevd_bundle/pydevd_cython.pyx":1104 - * if main_debugger.show_return_values: - * if is_return and ( - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or # <<<<<<<<<<<<<< - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or - * (info.pydev_step_cmd in (107, 206)) or + /* "_pydevd_bundle/pydevd_cython.pyx":1100 + * # Unfortunately Python itself stops the tracing when it originates from + * # the tracing function, so, we can't do much about it (just let the user know). + * exc = sys.exc_info()[0] # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_console_message( + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" */ - switch (__pyx_v_info->pydev_step_cmd) { - case 0x6C: - case 0x9F: - case 0x80: - __pyx_t_14 = 1; - break; - default: - __pyx_t_14 = 0; - break; - } - __pyx_t_11 = (__pyx_t_14 != 0); - if (!__pyx_t_11) { - goto __pyx_L145_next_or; - } else { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1100, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1104, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1104, __pyx_L104_error) + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1100, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L143_bool_binop_done; - } - __pyx_L145_next_or:; + } + __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1100, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_exc = __pyx_t_6; + __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1105 - * if is_return and ( - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or # <<<<<<<<<<<<<< - * (info.pydev_step_cmd in (107, 206)) or - * ( + /* "_pydevd_bundle/pydevd_cython.pyx":1101 + * # the tracing function, so, we can't do much about it (just let the user know). + * exc = sys.exc_info()[0] + * cmd = py_db.cmd_factory.make_console_message( # <<<<<<<<<<<<<< + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( */ - switch (__pyx_v_info->pydev_step_cmd) { - case 0x6D: - case 0xA0: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; - } - __pyx_t_14 = (__pyx_t_11 != 0); - if (!__pyx_t_14) { - goto __pyx_L147_next_or; - } else { - } - __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1105, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1105, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L143_bool_binop_done; - } - __pyx_L147_next_or:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_make_console_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1106 - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or - * (info.pydev_step_cmd in (107, 206)) or # <<<<<<<<<<<<<< - * ( - * info.pydev_step_cmd == 144 + /* "_pydevd_bundle/pydevd_cython.pyx":1104 + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( + * exc, # <<<<<<<<<<<<<< + * thread, + * ) */ - switch (__pyx_v_info->pydev_step_cmd) { - case 0x6B: - case 0xCE: - __pyx_t_14 = 1; - break; - default: - __pyx_t_14 = 0; - break; - } - __pyx_t_11 = (__pyx_t_14 != 0); - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L143_bool_binop_done; - } + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_exc)) __PYX_ERR(0, 1104, __pyx_L108_except_error); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_thread)) __PYX_ERR(0, 1104, __pyx_L108_except_error); - /* "_pydevd_bundle/pydevd_cython.pyx":1108 - * (info.pydev_step_cmd in (107, 206)) or - * ( - * info.pydev_step_cmd == 144 # <<<<<<<<<<<<<< - * and frame.f_back is not None - * and not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + /* "_pydevd_bundle/pydevd_cython.pyx":1103 + * cmd = py_db.cmd_factory.make_console_message( + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( # <<<<<<<<<<<<<< + * exc, + * thread, */ - __pyx_t_11 = ((__pyx_v_info->pydev_step_cmd == 0x90) != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L143_bool_binop_done; + __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_s_raised_from_within_the_callba, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1103, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_2}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1101, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_cmd, __pyx_t_6); + __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1109 - * ( - * info.pydev_step_cmd == 144 - * and frame.f_back is not None # <<<<<<<<<<<<<< - * and not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) - * ) + /* "_pydevd_bundle/pydevd_cython.pyx":1108 + * ) + * ) + * py_db.writer.add_command(cmd) # <<<<<<<<<<<<<< + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + * pydev_log.exception() */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1109, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_11 = (__pyx_t_6 != Py_None); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_9 = __pyx_t_14; - goto __pyx_L143_bool_binop_done; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_writer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add_command); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_cmd}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1108, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1109 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * + */ + __pyx_t_10 = PyObject_IsSubclass(__pyx_v_exc, __pyx_tuple__5); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1109, __pyx_L108_except_error) + __pyx_t_12 = (!__pyx_t_10); + if (__pyx_t_12) { /* "_pydevd_bundle/pydevd_cython.pyx":1110 - * info.pydev_step_cmd == 144 - * and frame.f_back is not None - * and not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) # <<<<<<<<<<<<<< - * ) - * ): + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + * pydev_log.exception() # <<<<<<<<<<<<<< + * + * raise */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1110, __pyx_L104_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1110, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1110, __pyx_L108_except_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_1, __pyx_t_7, Py_True}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_t_1, __pyx_t_7, Py_True}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else #endif { - __pyx_t_8 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1110, __pyx_L104_error) + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1110, __pyx_L108_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1109 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1112 + * pydev_log.exception() + * + * raise # <<<<<<<<<<<<<< + * + * # step handling. We stop when we hit the right frame + */ + __Pyx_GIVEREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_4, __pyx_t_8); + __pyx_t_7 = 0; __pyx_t_4 = 0; __pyx_t_8 = 0; + __PYX_ERR(0, 1112, __pyx_L108_except_error) + } + + /* "_pydevd_bundle/pydevd_cython.pyx":987 + * # if DEBUG: print('NOT skipped: %s %s %s %s' % (frame.f_lineno, frame.f_code.co_name, event, frame.__class__.__name__)) + * + * try: # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case + */ + __pyx_L108_except_error:; + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17); + goto __pyx_L4_error; + __pyx_L110_try_return:; + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_18, __pyx_t_17); + goto __pyx_L3_return; + __pyx_L111_try_end:; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1115 + * + * # step handling. We stop when we hit the right frame + * try: # <<<<<<<<<<<<<< + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + /*try:*/ { + + /* "_pydevd_bundle/pydevd_cython.pyx":1116 + * # step handling. We stop when we hit the right frame + * try: + * should_skip = 0 # <<<<<<<<<<<<<< + * if pydevd_dont_trace.should_trace_hook is not None: + * if self.should_skip == -1: + */ + __pyx_v_should_skip = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1117 + * try: + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if self.should_skip == -1: + * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1117, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = (__pyx_t_4 != Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1118 + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: + * if self.should_skip == -1: # <<<<<<<<<<<<<< + * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + */ + __pyx_t_12 = (__pyx_v_self->should_skip == -1L); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1122 + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(frame.f_code, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< + * # -1, 0, 1 to be Cython-friendly + * should_skip = self.should_skip = 1 + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1122, __pyx_L172_error) __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1122, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1122, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1122, __pyx_L172_error) } - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_7); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_5, Py_True); - __pyx_t_1 = 0; - __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1110, __pyx_L104_error) + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1122, __pyx_L172_error) __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1122, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1122, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = (!__pyx_t_12); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1124 + * if not pydevd_dont_trace.should_trace_hook(frame.f_code, abs_path_canonical_path_and_base[0]): + * # -1, 0, 1 to be Cython-friendly + * should_skip = self.should_skip = 1 # <<<<<<<<<<<<<< + * else: + * should_skip = self.should_skip = 0 + */ + __pyx_v_should_skip = 1; + __pyx_v_self->should_skip = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1122 + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(frame.f_code, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< + * # -1, 0, 1 to be Cython-friendly + * should_skip = self.should_skip = 1 + */ + goto __pyx_L180; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1126 + * should_skip = self.should_skip = 1 + * else: + * should_skip = self.should_skip = 0 # <<<<<<<<<<<<<< + * else: + * should_skip = self.should_skip + */ + /*else*/ { + __pyx_v_should_skip = 0; + __pyx_v_self->should_skip = 0; + } + __pyx_L180:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1118 + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: + * if self.should_skip == -1: # <<<<<<<<<<<<<< + * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + */ + goto __pyx_L179; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1110, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_11 = ((!__pyx_t_14) != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L143_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":1103 + /* "_pydevd_bundle/pydevd_cython.pyx":1128 + * should_skip = self.should_skip = 0 + * else: + * should_skip = self.should_skip # <<<<<<<<<<<<<< + * + * plugin_stop = False + */ + /*else*/ { + __pyx_t_11 = __pyx_v_self->should_skip; + __pyx_v_should_skip = __pyx_t_11; + } + __pyx_L179:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1117 + * try: + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if self.should_skip == -1: + * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1130 + * should_skip = self.should_skip + * + * plugin_stop = False # <<<<<<<<<<<<<< + * if should_skip: + * stop = False + */ + __Pyx_INCREF(Py_False); + __pyx_v_plugin_stop = Py_False; + + /* "_pydevd_bundle/pydevd_cython.pyx":1131 + * + * plugin_stop = False + * if should_skip: # <<<<<<<<<<<<<< + * stop = False + * + */ + __pyx_t_10 = (__pyx_v_should_skip != 0); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1132 + * plugin_stop = False + * if should_skip: + * stop = False # <<<<<<<<<<<<<< + * + * elif step_cmd in (107, 144, 206): + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1131 + * + * plugin_stop = False + * if should_skip: # <<<<<<<<<<<<<< + * stop = False * - * if main_debugger.show_return_values: - * if is_return and ( # <<<<<<<<<<<<<< - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or */ - if (__pyx_t_9) { + goto __pyx_L181; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1134 + * stop = False + * + * elif step_cmd in (107, 144, 206): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == 144 + * if is_line: + */ + switch (__pyx_v_step_cmd) { + case 0x6B: + case 0x90: + case 0xCE: + __pyx_t_10 = 1; + break; + default: + __pyx_t_10 = 0; + break; + } + __pyx_t_12 = __pyx_t_10; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1135 + * + * elif step_cmd in (107, 144, 206): + * force_check_project_scope = step_cmd == 144 # <<<<<<<<<<<<<< + * if is_line: + * if not info.pydev_use_scoped_step_frame: + */ + __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_step_cmd == 0x90)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1135, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_force_check_project_scope = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1136 + * elif step_cmd in (107, 144, 206): + * force_check_project_scope = step_cmd == 144 + * if is_line: # <<<<<<<<<<<<<< + * if not info.pydev_use_scoped_step_frame: + * if force_check_project_scope or py_db.is_files_filter_enabled: + */ + if (__pyx_v_is_line) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1137 + * force_check_project_scope = step_cmd == 144 + * if is_line: + * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + */ + __pyx_t_12 = (!__pyx_v_info->pydev_use_scoped_step_frame); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1138 + * if is_line: + * if not info.pydev_use_scoped_step_frame: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + * else: + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1138, __pyx_L172_error) + if (!__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L185_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1138, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1138, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L185_bool_binop_done:; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1139 + * if not info.pydev_use_scoped_step_frame: + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) # <<<<<<<<<<<<<< + * else: + * stop = True + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1139, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1139, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1139, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_v_frame, __pyx_t_8, __pyx_v_force_check_project_scope}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1139, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1139, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_stop = (!__pyx_t_12); + + /* "_pydevd_bundle/pydevd_cython.pyx":1138 + * if is_line: + * if not info.pydev_use_scoped_step_frame: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + * else: + */ + goto __pyx_L184; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1141 + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + * else: + * stop = True # <<<<<<<<<<<<<< + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: + */ + /*else*/ { + __pyx_v_stop = 1; + } + __pyx_L184:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1137 + * force_check_project_scope = step_cmd == 144 + * if is_line: + * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + */ + goto __pyx_L183; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1143 + * stop = True + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * # Make sure we check the filtering inside ipython calls too... + * if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + */ + /*else*/ { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1143, __pyx_L172_error) + if (!__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L188_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1143, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1143, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L188_bool_binop_done:; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1145 + * if force_check_project_scope or py_db.is_files_filter_enabled: + * # Make sure we check the filtering inside ipython calls too... + * if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): # <<<<<<<<<<<<<< + * return None if is_call else NO_FTRACE + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1145, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1145, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1145, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_v_frame, __pyx_t_6, __pyx_v_force_check_project_scope}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1145, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1145, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = (!(!__pyx_t_12)); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1146 + * # Make sure we check the filtering inside ipython calls too... + * if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * # We can only stop inside the ipython call. + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_4 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1146, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __pyx_t_7; + __pyx_t_7 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1145 + * if force_check_project_scope or py_db.is_files_filter_enabled: + * # Make sure we check the filtering inside ipython calls too... + * if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): # <<<<<<<<<<<<<< + * return None if is_call else NO_FTRACE + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1143 + * stop = True + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * # Make sure we check the filtering inside ipython calls too... + * if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1149 + * + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename # <<<<<<<<<<<<<< + * if filename.endswith(".pyc"): + * filename = filename[:-1] + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1149, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1149, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_filename = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1150 + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): # <<<<<<<<<<<<<< + * filename = filename[:-1] + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1150, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_kp_s_pyc}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1150, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1150, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1151 + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): + * filename = filename[:-1] # <<<<<<<<<<<<<< + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + */ + __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_filename, 0, -1L, NULL, NULL, &__pyx_slice__6, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1151, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1150 + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): # <<<<<<<<<<<<<< + * filename = filename[:-1] + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1153 + * filename = filename[:-1] + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< + * f = frame.f_back + * while f is not None: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1153, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1153, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1153, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_8}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1153, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1153, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_12 = (!__pyx_t_10); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1154 + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * f = frame.f_back # <<<<<<<<<<<<<< + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1154, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1155 + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * f = frame.f_back + * while f is not None: # <<<<<<<<<<<<<< + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + */ + while (1) { + __pyx_t_12 = (__pyx_v_f != Py_None); + if (!__pyx_t_12) break; + + /* "_pydevd_bundle/pydevd_cython.pyx":1156 + * f = frame.f_back + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyObject_RichCompare(__pyx_t_4, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1156, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1157 + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back # <<<<<<<<<<<<<< + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1157, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_f2, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1158 + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * pydev_log.debug("Stop inside ipython call") + * stop = True + */ + __pyx_t_10 = (__pyx_v_f2 != Py_None); + if (__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L197_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f2, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_7, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1158, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L197_bool_binop_done:; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1159 + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") # <<<<<<<<<<<<<< + * stop = True + * break + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1159, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_debug); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1159, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_s_Stop_inside_ipython_call}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1159, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1160 + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") + * stop = True # <<<<<<<<<<<<<< + * break + * f = f.f_back + */ + __pyx_v_stop = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1161 + * pydev_log.debug("Stop inside ipython call") + * stop = True + * break # <<<<<<<<<<<<<< + * f = f.f_back + * + */ + goto __pyx_L194_break; + + /* "_pydevd_bundle/pydevd_cython.pyx":1158 + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * pydev_log.debug("Stop inside ipython call") + * stop = True + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1156 + * f = frame.f_back + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1162 + * stop = True + * break + * f = f.f_back # <<<<<<<<<<<<<< + * + * del f + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1162, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_7); + __pyx_t_7 = 0; + } + __pyx_L194_break:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1164 + * f = f.f_back + * + * del f # <<<<<<<<<<<<<< + * + * if not stop: + */ + __Pyx_DECREF(__pyx_v_f); __pyx_v_f = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1153 + * filename = filename[:-1] + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< + * f = frame.f_back + * while f is not None: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1166 + * del f + * + * if not stop: # <<<<<<<<<<<<<< + * # In scoped mode if step in didn't work in this context it won't work + * # afterwards anyways. + */ + __pyx_t_12 = (!__pyx_v_stop); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1169 + * # In scoped mode if step in didn't work in this context it won't work + * # afterwards anyways. + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_7 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1169, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __pyx_t_8; + __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1166 + * del f + * + * if not stop: # <<<<<<<<<<<<<< + * # In scoped mode if step in didn't work in this context it won't work + * # afterwards anyways. + */ + } + } + __pyx_L183:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1136 + * elif step_cmd in (107, 144, 206): + * force_check_project_scope = step_cmd == 144 + * if is_line: # <<<<<<<<<<<<<< + * if not info.pydev_use_scoped_step_frame: + * if force_check_project_scope or py_db.is_files_filter_enabled: + */ + goto __pyx_L182; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1171 + * return None if is_call else NO_FTRACE + * + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False + */ + if (__pyx_v_is_return) { + } else { + __pyx_t_12 = __pyx_v_is_return; + goto __pyx_L200_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1171, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = (__pyx_t_7 != Py_None); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L200_bool_binop_done; + } + __pyx_t_10 = (!__pyx_v_info->pydev_use_scoped_step_frame); + __pyx_t_12 = __pyx_t_10; + __pyx_L200_bool_binop_done:; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1172 + * + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: # <<<<<<<<<<<<<< + * stop = False + * else: + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_PYDEV_FILE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_7, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1172, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1173 + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False # <<<<<<<<<<<<<< + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1172 + * + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: # <<<<<<<<<<<<<< + * stop = False + * else: + */ + goto __pyx_L203; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1175 + * stop = False + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * stop = not py_db.apply_files_filter( + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + */ + /*else*/ { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1175, __pyx_L172_error) + if (!__pyx_t_10) { + } else { + __pyx_t_12 = __pyx_t_10; + goto __pyx_L205_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1175, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1175, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_12 = __pyx_t_10; + __pyx_L205_bool_binop_done:; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1176 + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter( # <<<<<<<<<<<<<< + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + * ) + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1176, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + + /* "_pydevd_bundle/pydevd_cython.pyx":1177 + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter( + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope # <<<<<<<<<<<<<< + * ) + * if stop: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1177, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1177, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1177, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_7, __pyx_t_6, __pyx_v_force_check_project_scope}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1176, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1176 + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: + * stop = not py_db.apply_files_filter( # <<<<<<<<<<<<<< + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + * ) + */ + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1176, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_stop = (!__pyx_t_12); + + /* "_pydevd_bundle/pydevd_cython.pyx":1179 + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + * ) + * if stop: # <<<<<<<<<<<<<< + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + */ + if (__pyx_v_stop) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1182 + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): # <<<<<<<<<<<<<< + * stop = False + * else: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4)) __PYX_ERR(0, 1182, __pyx_L172_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6)) __PYX_ERR(0, 1182, __pyx_L172_error); + __pyx_t_4 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_v_info->step_in_initial_location, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1182, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1183 + * # (i.e.: double-stop at the same place due to some filtering). + * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): + * stop = False # <<<<<<<<<<<<<< + * else: + * stop = True + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1182 + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): # <<<<<<<<<<<<<< + * stop = False + * else: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1179 + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + * ) + * if stop: # <<<<<<<<<<<<<< + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1175 + * stop = False + * else: + * if force_check_project_scope or py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * stop = not py_db.apply_files_filter( + * frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + */ + goto __pyx_L204; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1185 + * stop = False + * else: + * stop = True # <<<<<<<<<<<<<< + * else: + * stop = False + */ + /*else*/ { + __pyx_v_stop = 1; + } + __pyx_L204:; + } + __pyx_L203:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1171 + * return None if is_call else NO_FTRACE + * + * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False + */ + goto __pyx_L182; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1187 + * stop = True + * else: + * stop = False # <<<<<<<<<<<<<< + * + * if stop: + */ + /*else*/ { + __pyx_v_stop = 0; + } + __pyx_L182:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1189 + * stop = False + * + * if stop: # <<<<<<<<<<<<<< + * if step_cmd == 206: + * # i.e.: Check if we're stepping into the proper context. + */ + if (__pyx_v_stop) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1190 + * + * if stop: + * if step_cmd == 206: # <<<<<<<<<<<<<< + * # i.e.: Check if we're stepping into the proper context. + * f = frame + */ + __pyx_t_12 = (__pyx_v_step_cmd == 0xCE); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1192 + * if step_cmd == 206: + * # i.e.: Check if we're stepping into the proper context. + * f = frame # <<<<<<<<<<<<<< + * while f is not None: + * if self._is_same_frame(stop_frame, f): + */ + __Pyx_INCREF(__pyx_v_frame); + __Pyx_XDECREF_SET(__pyx_v_f, __pyx_v_frame); + + /* "_pydevd_bundle/pydevd_cython.pyx":1193 + * # i.e.: Check if we're stepping into the proper context. + * f = frame + * while f is not None: # <<<<<<<<<<<<<< + * if self._is_same_frame(stop_frame, f): + * break + */ + while (1) { + __pyx_t_12 = (__pyx_v_f != Py_None); + if (!__pyx_t_12) break; + + /* "_pydevd_bundle/pydevd_cython.pyx":1194 + * f = frame + * while f is not None: + * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< + * break + * f = f.f_back + */ + __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_f); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1194, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1194, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1195 + * while f is not None: + * if self._is_same_frame(stop_frame, f): + * break # <<<<<<<<<<<<<< + * f = f.f_back + * else: + */ + goto __pyx_L212_break; + + /* "_pydevd_bundle/pydevd_cython.pyx":1194 + * f = frame + * while f is not None: + * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< + * break + * f = f.f_back + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1196 + * if self._is_same_frame(stop_frame, f): + * break + * f = f.f_back # <<<<<<<<<<<<<< + * else: + * stop = False + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1196, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_6); + __pyx_t_6 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1198 + * f = f.f_back + * else: + * stop = False # <<<<<<<<<<<<<< + * + * if plugin_manager is not None: + */ + /*else*/ { + __pyx_v_stop = 0; + } + __pyx_L212_break:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1190 + * + * if stop: + * if step_cmd == 206: # <<<<<<<<<<<<<< + * # i.e.: Check if we're stepping into the proper context. + * f = frame + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1189 + * stop = False + * + * if stop: # <<<<<<<<<<<<<< + * if step_cmd == 206: + * # i.e.: Check if we're stepping into the proper context. + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1200 + * stop = False + * + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + */ + __pyx_t_12 = (__pyx_v_plugin_manager != Py_None); + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1201 + * + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) # <<<<<<<<<<<<<< + * if result: + * stop, plugin_stop = result + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_into); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1201, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1201, __pyx_L172_error) + } + __pyx_t_4 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1201, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1201, __pyx_L172_error) + } + __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1201, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_2, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_t_4, __pyx_t_7, __pyx_v_stop_info, __pyx_t_3}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 7+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1201, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1202 + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * + */ + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1202, __pyx_L172_error) + if (__pyx_t_12) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1203 + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + * stop, plugin_stop = result # <<<<<<<<<<<<<< + * + * elif step_cmd in (108, 159): + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1203, __pyx_L172_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_6 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + #else + __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1203, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1203, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_3 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1203, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); + index = 0; __pyx_t_6 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_6)) goto __pyx_L216_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 1; __pyx_t_8 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_8)) goto __pyx_L216_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1203, __pyx_L172_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L217_unpacking_done; + __pyx_L216_unpacking_failed:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1203, __pyx_L172_error) + __pyx_L217_unpacking_done:; + } + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1203, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_stop = __pyx_t_12; + __Pyx_DECREF_SET(__pyx_v_plugin_stop, __pyx_t_8); + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1202 + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1200 + * stop = False + * + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1134 + * stop = False + * + * elif step_cmd in (107, 144, 206): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == 144 + * if is_line: + */ + goto __pyx_L181; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1205 + * stop, plugin_stop = result + * + * elif step_cmd in (108, 159): # <<<<<<<<<<<<<< + * # Note: when dealing with a step over my code it's the same as a step over (the + * # difference is that when we return from a frame in one we go to regular step + */ + switch (__pyx_v_step_cmd) { + case 0x6C: + case 0x9F: + __pyx_t_12 = 1; + break; + default: + __pyx_t_12 = 0; + break; + } + __pyx_t_10 = __pyx_t_12; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1209 + * # difference is that when we return from a frame in one we go to regular step + * # into and in the other we go to a step into my code). + * stop = self._is_same_frame(stop_frame, frame) and is_line # <<<<<<<<<<<<<< + * # Note: don't stop on a return for step over, only for line events + * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. + */ + __pyx_t_8 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1209, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1209, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L218_bool_binop_done; + } + __pyx_t_10 = __pyx_v_is_line; + __pyx_L218_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "_pydevd_bundle/pydevd_cython.pyx":1213 + * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. + * + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + */ + __pyx_t_10 = (__pyx_v_plugin_manager != Py_None); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1214 + * + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) # <<<<<<<<<<<<<< + * if result: + * stop, plugin_stop = result + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_over); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1214, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1214, __pyx_L172_error) + } + __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1214, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1214, __pyx_L172_error) + } + __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1214, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1214, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_2, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_t_3, __pyx_t_7, __pyx_v_stop_info, __pyx_t_4}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 7+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1214, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1215 + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1215, __pyx_L172_error) + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1216 + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + * stop, plugin_stop = result # <<<<<<<<<<<<<< + * + * elif step_cmd == 128: + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1216, __pyx_L172_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_6 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1216, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1216, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); + index = 0; __pyx_t_8 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_8)) goto __pyx_L222_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_6 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_6)) goto __pyx_L222_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1216, __pyx_L172_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L223_unpacking_done; + __pyx_L222_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1216, __pyx_L172_error) + __pyx_L223_unpacking_done:; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1216, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_stop = __pyx_t_10; + __Pyx_DECREF_SET(__pyx_v_plugin_stop, __pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1215 + * if plugin_manager is not None: + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1213 + * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. + * + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) + * if result: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1205 + * stop, plugin_stop = result + * + * elif step_cmd in (108, 159): # <<<<<<<<<<<<<< + * # Note: when dealing with a step over my code it's the same as a step over (the + * # difference is that when we return from a frame in one we go to regular step + */ + goto __pyx_L181; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1218 + * stop, plugin_stop = result + * + * elif step_cmd == 128: # <<<<<<<<<<<<<< + * stop = False + * back = frame.f_back + */ + __pyx_t_10 = (__pyx_v_step_cmd == 0x80); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1219 + * + * elif step_cmd == 128: + * stop = False # <<<<<<<<<<<<<< + * back = frame.f_back + * if self._is_same_frame(stop_frame, frame) and is_return: + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1220 + * elif step_cmd == 128: + * stop = False + * back = frame.f_back # <<<<<<<<<<<<<< + * if self._is_same_frame(stop_frame, frame) and is_return: + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1220, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_back = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1221 + * stop = False + * back = frame.f_back + * if self._is_same_frame(stop_frame, frame) and is_return: # <<<<<<<<<<<<<< + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * stop = True + */ + __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1221, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1221, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L225_bool_binop_done; + } + __pyx_t_10 = __pyx_v_is_return; + __pyx_L225_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1223 + * if self._is_same_frame(stop_frame, frame) and is_return: + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * stop = True # <<<<<<<<<<<<<< + * + * elif self._is_same_frame(stop_frame, back) and is_line: + */ + __pyx_v_stop = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1221 + * stop = False + * back = frame.f_back + * if self._is_same_frame(stop_frame, frame) and is_return: # <<<<<<<<<<<<<< + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * stop = True + */ + goto __pyx_L224; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1225 + * stop = True + * + * elif self._is_same_frame(stop_frame, back) and is_line: # <<<<<<<<<<<<<< + * if info.pydev_smart_child_offset != -1: + * # i.e.: in this case, we're not interested in the pause in the parent, rather + */ + __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1225, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1225, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L227_bool_binop_done; + } + __pyx_t_10 = __pyx_v_is_line; + __pyx_L227_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1226 + * + * elif self._is_same_frame(stop_frame, back) and is_line: + * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + */ + __pyx_t_10 = (__pyx_v_info->pydev_smart_child_offset != -1L); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1229 + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + * stop = False # <<<<<<<<<<<<<< + * + * else: + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1226 + * + * elif self._is_same_frame(stop_frame, back) and is_line: + * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + */ + goto __pyx_L229; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1232 + * + * else: + * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + */ + /*else*/ { + __pyx_t_11 = __pyx_v_info->pydev_smart_parent_offset; + __pyx_v_pydev_smart_parent_offset = __pyx_t_11; + + /* "_pydevd_bundle/pydevd_cython.pyx":1234 + * pydev_smart_parent_offset = info.pydev_smart_parent_offset + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + * # Preferred mode (when the smart step into variants are available + */ + __pyx_t_6 = __pyx_v_info->pydev_smart_step_into_variants; + __Pyx_INCREF(__pyx_t_6); + __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1235 + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + */ + __pyx_t_12 = (__pyx_v_pydev_smart_parent_offset >= 0); + if (__pyx_t_12) { + } else { + __pyx_t_10 = __pyx_t_12; + goto __pyx_L231_bool_binop_done; + } + __pyx_t_12 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); + __pyx_t_10 = __pyx_t_12; + __pyx_L231_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1238 + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + * stop = get_smart_step_into_variant_from_frame_offset( # <<<<<<<<<<<<<< + * back.f_lasti, pydev_smart_step_into_variants + * ) is get_smart_step_into_variant_from_frame_offset( + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1238, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + + /* "_pydevd_bundle/pydevd_cython.pyx":1239 + * # and the offset is set). + * stop = get_smart_step_into_variant_from_frame_offset( + * back.f_lasti, pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * ) is get_smart_step_into_variant_from_frame_offset( + * pydev_smart_parent_offset, pydev_smart_step_into_variants + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1239, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_4, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1238, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1240 + * stop = get_smart_step_into_variant_from_frame_offset( + * back.f_lasti, pydev_smart_step_into_variants + * ) is get_smart_step_into_variant_from_frame_offset( # <<<<<<<<<<<<<< + * pydev_smart_parent_offset, pydev_smart_step_into_variants + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "_pydevd_bundle/pydevd_cython.pyx":1241 + * back.f_lasti, pydev_smart_step_into_variants + * ) is get_smart_step_into_variant_from_frame_offset( + * pydev_smart_parent_offset, pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1241, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1240, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_10 = (__pyx_t_6 == __pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_stop = __pyx_t_10; + + /* "_pydevd_bundle/pydevd_cython.pyx":1235 + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + */ + goto __pyx_L230; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1246 + * else: + * # Only the name/line is available, so, check that. + * curr_func_name = frame.f_code.co_name # <<<<<<<<<<<<<< + * + * # global context is set with an empty name + */ + /*else*/ { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1246, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1246, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 1246, __pyx_L172_error) + __Pyx_XDECREF_SET(__pyx_v_curr_func_name, ((PyObject*)__pyx_t_6)); + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1249 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: # <<<<<<<<<<<<<< + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + */ + __Pyx_INCREF(__pyx_v_curr_func_name); + __pyx_t_22 = __pyx_v_curr_func_name; + __pyx_t_16 = (__Pyx_PyString_Equals(__pyx_t_22, __pyx_kp_s__4, Py_EQ)); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1249, __pyx_L172_error) + if (!__pyx_t_16) { + } else { + __pyx_t_12 = __pyx_t_16; + goto __pyx_L236_bool_binop_done; + } + __pyx_t_16 = (__Pyx_PyString_Equals(__pyx_t_22, __pyx_kp_s_module, Py_EQ)); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1249, __pyx_L172_error) + __pyx_t_12 = __pyx_t_16; + __pyx_L236_bool_binop_done:; + __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0; + __pyx_t_16 = __pyx_t_12; + if (!__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L234_bool_binop_done; + } + __pyx_t_16 = (__pyx_v_curr_func_name == ((PyObject*)Py_None)); + __pyx_t_10 = __pyx_t_16; + __pyx_L234_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1250 + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" # <<<<<<<<<<<<<< + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + * stop = True + */ + __Pyx_INCREF(__pyx_kp_s_); + __Pyx_DECREF_SET(__pyx_v_curr_func_name, __pyx_kp_s_); + + /* "_pydevd_bundle/pydevd_cython.pyx":1249 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: # <<<<<<<<<<<<<< + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1251 + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< + * stop = True + * + */ + __pyx_t_16 = (__Pyx_PyString_Equals(__pyx_v_curr_func_name, __pyx_v_info->pydev_func_name, Py_EQ)); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1251, __pyx_L172_error) + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L239_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_stop_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1251, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_next_line); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1251, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1251, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1251, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = __pyx_t_16; + __pyx_L239_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1252 + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + * stop = True # <<<<<<<<<<<<<< + * + * if not stop: + */ + __pyx_v_stop = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1251 + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< + * stop = True + * + */ + } + } + __pyx_L230:; + } + __pyx_L229:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1254 + * stop = True + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + __pyx_t_10 = (!__pyx_v_stop); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1257 + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_4 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1257, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = __pyx_t_8; + __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1254 + * stop = True + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1225 + * stop = True + * + * elif self._is_same_frame(stop_frame, back) and is_line: # <<<<<<<<<<<<<< + * if info.pydev_smart_child_offset != -1: + * # i.e.: in this case, we're not interested in the pause in the parent, rather + */ + goto __pyx_L224; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1259 + * return None if is_call else NO_FTRACE + * + * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: # <<<<<<<<<<<<<< + * # Ok, we have to track 2 stops at this point, the parent and the child offset. + * # This happens when handling a step into which targets a function inside a list comprehension + */ + __pyx_t_16 = (__pyx_v_back != Py_None); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L242_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1259, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1259, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1259, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L242_bool_binop_done; + } + __pyx_t_10 = __pyx_v_is_line; + __pyx_L242_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1263 + * # This happens when handling a step into which targets a function inside a list comprehension + * # or generator (in which case an intermediary frame is created due to an internal function call). + * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< + * pydev_smart_child_offset = info.pydev_smart_child_offset + * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + */ + __pyx_t_11 = __pyx_v_info->pydev_smart_parent_offset; + __pyx_v_pydev_smart_parent_offset = __pyx_t_11; + + /* "_pydevd_bundle/pydevd_cython.pyx":1264 + * # or generator (in which case an intermediary frame is created due to an internal function call). + * pydev_smart_parent_offset = info.pydev_smart_parent_offset + * pydev_smart_child_offset = info.pydev_smart_child_offset # <<<<<<<<<<<<<< + * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + * # print('parent f_lasti', back.f_back.f_lasti) + */ + __pyx_t_11 = __pyx_v_info->pydev_smart_child_offset; + __pyx_v_pydev_smart_child_offset = __pyx_t_11; + + /* "_pydevd_bundle/pydevd_cython.pyx":1268 + * # print('parent f_lasti', back.f_back.f_lasti) + * # print('child f_lasti', back.f_lasti) + * stop = False # <<<<<<<<<<<<<< + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1269 + * # print('child f_lasti', back.f_lasti) + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + */ + __pyx_t_16 = (__pyx_v_pydev_smart_child_offset >= 0); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L246_bool_binop_done; + } + __pyx_t_16 = (__pyx_v_pydev_smart_child_offset >= 0); + __pyx_t_10 = __pyx_t_16; + __pyx_L246_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1270 + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + */ + __pyx_t_8 = __pyx_v_info->pydev_smart_step_into_variants; + __Pyx_INCREF(__pyx_t_8); + __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_8); + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1272 + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Note that we don't really check the parent offset, only the offset of + * # the child (because this is a generator, the parent may have moved forward + */ + __pyx_t_16 = (__pyx_v_pydev_smart_parent_offset >= 0); + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L249_bool_binop_done; + } + __pyx_t_16 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); + __pyx_t_10 = __pyx_t_16; + __pyx_L249_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1277 + * # already -- and that's ok, so, we just check that the parent frame + * # matches in this case). + * smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( # <<<<<<<<<<<<<< + * pydev_smart_parent_offset, pydev_smart_step_into_variants + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1277, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "_pydevd_bundle/pydevd_cython.pyx":1278 + * # matches in this case). + * smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + * pydev_smart_parent_offset, pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * ) + * # print('matched parent offset', pydev_smart_parent_offset) + */ + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1278, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1277, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_smart_step_into_variant = __pyx_t_8; + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1282 + * # print('matched parent offset', pydev_smart_parent_offset) + * # Ok, now, check the child variant + * children_variants = smart_step_into_variant.children_variants # <<<<<<<<<<<<<< + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_smart_step_into_variant, __pyx_n_s_children_variants); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1282, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_v_children_variants = __pyx_t_8; + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1283 + * # Ok, now, check the child variant + * children_variants = smart_step_into_variant.children_variants + * stop = children_variants and ( # <<<<<<<<<<<<<< + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + */ + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_children_variants); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1283, __pyx_L172_error) + if (__pyx_t_16) { + } else { + __pyx_t_10 = __pyx_t_16; + goto __pyx_L251_bool_binop_done; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1284 + * children_variants = smart_step_into_variant.children_variants + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) # <<<<<<<<<<<<<< + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1284, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1284, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_children_variants}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1284, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1285 + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) # <<<<<<<<<<<<<< + * ) + * # print('stop at child', stop) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1285, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_child_offset); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1285, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_7, __pyx_v_children_variants}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1285, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_16 = (__pyx_t_8 == __pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = __pyx_t_16; + __pyx_L251_bool_binop_done:; + __pyx_v_stop = __pyx_t_10; + + /* "_pydevd_bundle/pydevd_cython.pyx":1272 + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Note that we don't really check the parent offset, only the offset of + * # the child (because this is a generator, the parent may have moved forward + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1269 + * # print('child f_lasti', back.f_lasti) + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1289 + * # print('stop at child', stop) + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + __pyx_t_10 = (!__pyx_v_stop); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1292 + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * elif step_cmd in (109, 160): + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_4 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1292, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_4 = __pyx_t_8; + __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1289 + * # print('stop at child', stop) + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1259 + * return None if is_call else NO_FTRACE + * + * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: # <<<<<<<<<<<<<< + * # Ok, we have to track 2 stops at this point, the parent and the child offset. + * # This happens when handling a step into which targets a function inside a list comprehension + */ + } + __pyx_L224:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1218 + * stop, plugin_stop = result + * + * elif step_cmd == 128: # <<<<<<<<<<<<<< + * stop = False + * back = frame.f_back + */ + goto __pyx_L181; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1294 + * return None if is_call else NO_FTRACE + * + * elif step_cmd in (109, 160): # <<<<<<<<<<<<<< + * stop = is_return and self._is_same_frame(stop_frame, frame) + * + */ + switch (__pyx_v_step_cmd) { + case 0x6D: + case 0xA0: + __pyx_t_10 = 1; + break; + default: + __pyx_t_10 = 0; + break; + } + __pyx_t_16 = __pyx_t_10; + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1295 + * + * elif step_cmd in (109, 160): + * stop = is_return and self._is_same_frame(stop_frame, frame) # <<<<<<<<<<<<<< + * + * else: + */ + if (__pyx_v_is_return) { + } else { + __pyx_t_16 = __pyx_v_is_return; + goto __pyx_L254_bool_binop_done; + } + __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1295, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1295, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_16 = __pyx_t_10; + __pyx_L254_bool_binop_done:; + __pyx_v_stop = __pyx_t_16; + + /* "_pydevd_bundle/pydevd_cython.pyx":1294 + * return None if is_call else NO_FTRACE + * + * elif step_cmd in (109, 160): # <<<<<<<<<<<<<< + * stop = is_return and self._is_same_frame(stop_frame, frame) + * + */ + goto __pyx_L181; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1298 + * + * else: + * stop = False # <<<<<<<<<<<<<< + * + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): + */ + /*else*/ { + __pyx_v_stop = 0; + } + __pyx_L181:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1300 + * stop = False + * + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): # <<<<<<<<<<<<<< + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: + */ + if (__pyx_v_stop) { + } else { + __pyx_t_16 = __pyx_v_stop; + goto __pyx_L257_bool_binop_done; + } + __pyx_t_10 = (__pyx_v_step_cmd != -1L); + if (__pyx_t_10) { + } else { + __pyx_t_16 = __pyx_t_10; + goto __pyx_L257_bool_binop_done; + } + if (__pyx_v_is_return) { + } else { + __pyx_t_16 = __pyx_v_is_return; + goto __pyx_L257_bool_binop_done; + } + __pyx_t_10 = __Pyx_HasAttr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1300, __pyx_L172_error) + __pyx_t_16 = __pyx_t_10; + __pyx_L257_bool_binop_done:; + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1301 + * + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): + * f_code = getattr(frame.f_back, "f_code", None) # <<<<<<<<<<<<<< + * if f_code is not None: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1301, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_code, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1301, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_f_code = __pyx_t_8; + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1302 + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: # <<<<<<<<<<<<<< + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False + */ + __pyx_t_16 = (__pyx_v_f_code != Py_None); + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1303 + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: # <<<<<<<<<<<<<< + * stop = False + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_PYDEV_FILE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1303, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1304 + * if f_code is not None: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False # <<<<<<<<<<<<<< + * + * if plugin_stop: + */ + __pyx_v_stop = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1303 + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: # <<<<<<<<<<<<<< + * stop = False + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1302 + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: # <<<<<<<<<<<<<< + * if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: + * stop = False + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1300 + * stop = False + * + * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): # <<<<<<<<<<<<<< + * f_code = getattr(frame.f_back, "f_code", None) + * if f_code is not None: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1306 + * stop = False + * + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: + */ + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_plugin_stop); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1306, __pyx_L172_error) + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1307 + * + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) # <<<<<<<<<<<<<< + * elif stop: + * if is_line: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_stop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1307, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely(__pyx_v_self->_args == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1307, __pyx_L172_error) + } + __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v_self->_args, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1307, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1307, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_t_8, __pyx_v_stop_info, __pyx_v_arg, __pyx_t_7}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 7+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1307, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1306 + * stop = False + * + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: + */ + goto __pyx_L263; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1308 + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: # <<<<<<<<<<<<<< + * if is_line: + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + if (__pyx_v_stop) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1309 + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: + * if is_line: # <<<<<<<<<<<<<< + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, frame, event, arg) + */ + if (__pyx_v_is_line) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1310 + * elif stop: + * if is_line: + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * self.do_wait_suspend(thread, frame, event, arg) + * elif is_return: # return event + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_thread)) __PYX_ERR(0, 1310, __pyx_L172_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4)) __PYX_ERR(0, 1310, __pyx_L172_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_original_step_cmd, __pyx_t_8) < 0) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1310, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1311 + * if is_line: + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, frame, event, arg) # <<<<<<<<<<<<<< + * elif is_return: # return event + * back = frame.f_back + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1311, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_7, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1311, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1309 + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: + * if is_line: # <<<<<<<<<<<<<< + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, frame, event, arg) + */ + goto __pyx_L264; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1312 + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, frame, event, arg) + * elif is_return: # return event # <<<<<<<<<<<<<< + * back = frame.f_back + * if back is not None: + */ + if (__pyx_v_is_return) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1313 + * self.do_wait_suspend(thread, frame, event, arg) + * elif is_return: # return event + * back = frame.f_back # <<<<<<<<<<<<<< + * if back is not None: + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1313, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_back, __pyx_t_8); + __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1314 + * elif is_return: # return event + * back = frame.f_back + * if back is not None: # <<<<<<<<<<<<<< + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + * # (note that it can still go on for other threads, but for this one, we just make it finish) + */ + __pyx_t_16 = (__pyx_v_back != Py_None); + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1318 + * # (note that it can still go on for other threads, but for this one, we just make it finish) + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) # <<<<<<<<<<<<<< + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + * back = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_back}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) { + PyObject* sequence = __pyx_t_8; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1318, __pyx_L172_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_3 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1318, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); + index = 0; __pyx_t_4 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L266_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_7 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_7)) goto __pyx_L266_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + index = 2; __pyx_t_6 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_6)) goto __pyx_L266_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_3), 3) < 0) __PYX_ERR(0, 1318, __pyx_L172_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L267_unpacking_done; + __pyx_L266_unpacking_failed:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1318, __pyx_L172_error) + __pyx_L267_unpacking_done:; + } + __pyx_v_back_absolute_filename = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v__ = __pyx_t_7; + __pyx_t_7 = 0; + __pyx_v_base = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1319 + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< + * back = None + * + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_base); + __Pyx_GIVEREF(__pyx_v_base); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_base)) __PYX_ERR(0, 1319, __pyx_L172_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6)) __PYX_ERR(0, 1319, __pyx_L172_error); + __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_DEBUG_START); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_10) { + } else { + __pyx_t_16 = __pyx_t_10; + goto __pyx_L269_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_DEBUG_START_PY3K); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_8, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1319, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_16 = __pyx_t_10; + __pyx_L269_bool_binop_done:; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __pyx_t_16; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1320 + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + * back = None # <<<<<<<<<<<<<< + * + * elif base == TRACE_PROPERTY: + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_back, Py_None); + + /* "_pydevd_bundle/pydevd_cython.pyx":1319 + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< + * back = None + * + */ + goto __pyx_L268; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1322 + * back = None + * + * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_TRACE_PROPERTY); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1322, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = PyObject_RichCompare(__pyx_v_base, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1322, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1322, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1325 + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * elif pydevd_dont_trace.should_trace_hook is not None: + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_6 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1325, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_6 = __pyx_t_8; + __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1322 + * back = None + * + * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1327 + * return None if is_call else NO_FTRACE + * + * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1327, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1327, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = (__pyx_t_8 != Py_None); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1328 + * + * elif pydevd_dont_trace.should_trace_hook is not None: + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # <<<<<<<<<<<<<< + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + * # Also, we have to reset the tracing, because if the parent's parent (or some + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1328, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1328, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1328, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_v_back_absolute_filename}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1328, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1328, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_16 = (!__pyx_t_10); + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1334 + * # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). + * # Related test: _debugger_case17a.py + * py_db.set_trace_for_frame_and_parents(thread.ident, back) # <<<<<<<<<<<<<< + * return None if is_call else NO_FTRACE + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_trace_for_frame_and_parents); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1334, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1334, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_v_back}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1334, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1335 + * # Related test: _debugger_case17a.py + * py_db.set_trace_for_frame_and_parents(thread.ident, back) + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * if back is not None: + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_8 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1335, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_t_7; + __pyx_t_7 = 0; + } + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1328 + * + * elif pydevd_dont_trace.should_trace_hook is not None: + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # <<<<<<<<<<<<<< + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + * # Also, we have to reset the tracing, because if the parent's parent (or some + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1327 + * return None if is_call else NO_FTRACE + * + * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + */ + } + __pyx_L268:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1314 + * elif is_return: # return event + * back = frame.f_back + * if back is not None: # <<<<<<<<<<<<<< + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + * # (note that it can still go on for other threads, but for this one, we just make it finish) + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1337 + * return None if is_call else NO_FTRACE + * + * if back is not None: # <<<<<<<<<<<<<< + * # if we're in a return, we want it to appear to the user in the previous frame! + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + __pyx_t_16 = (__pyx_v_back != Py_None); + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1339 + * if back is not None: + * # if we're in a return, we want it to appear to the user in the previous frame! + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * self.do_wait_suspend(thread, back, event, arg) + * else: + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_thread)) __PYX_ERR(0, 1339, __pyx_L172_error); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7)) __PYX_ERR(0, 1339, __pyx_L172_error); + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_original_step_cmd, __pyx_t_4) < 0) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1339, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1340 + * # if we're in a return, we want it to appear to the user in the previous frame! + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, back, event, arg) # <<<<<<<<<<<<<< + * else: + * # in jython we may not have a back frame + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1340, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_6, __pyx_v_thread, __pyx_v_back, __pyx_v_event, __pyx_v_arg}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1340, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1337 + * return None if is_call else NO_FTRACE + * + * if back is not None: # <<<<<<<<<<<<<< + * # if we're in a return, we want it to appear to the user in the previous frame! + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + goto __pyx_L272; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1343 + * else: + * # in jython we may not have a back frame + * info.pydev_step_stop = None # <<<<<<<<<<<<<< + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 + */ + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; + + /* "_pydevd_bundle/pydevd_cython.pyx":1344 + * # in jython we may not have a back frame + * info.pydev_step_stop = None + * info.pydev_original_step_cmd = -1 # <<<<<<<<<<<<<< + * info.pydev_step_cmd = -1 + * info.pydev_state = 1 + */ + __pyx_v_info->pydev_original_step_cmd = -1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1345 + * info.pydev_step_stop = None + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 # <<<<<<<<<<<<<< + * info.pydev_state = 1 + * info.update_stepping_info() + */ + __pyx_v_info->pydev_step_cmd = -1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1346 + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 + * info.pydev_state = 1 # <<<<<<<<<<<<<< + * info.update_stepping_info() + * + */ + __pyx_v_info->pydev_state = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":1347 + * info.pydev_step_cmd = -1 + * info.pydev_state = 1 + * info.update_stepping_info() # <<<<<<<<<<<<<< + * + * # if we are quitting, let's stop the tracing + */ + __pyx_t_4 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_info->__pyx_vtab)->update_stepping_info(__pyx_v_info, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1347, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_L272:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1312 + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * self.do_wait_suspend(thread, frame, event, arg) + * elif is_return: # return event # <<<<<<<<<<<<<< + * back = frame.f_back + * if back is not None: + */ + } + __pyx_L264:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1308 + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) + * elif stop: # <<<<<<<<<<<<<< + * if is_line: + * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + } + __pyx_L263:; + + /* "_pydevd_bundle/pydevd_cython.pyx":1350 + * + * # if we are quitting, let's stop the tracing + * if py_db.quitting: # <<<<<<<<<<<<<< + * return None if is_call else NO_FTRACE + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_quitting); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1350, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1350, __pyx_L172_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_16) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1351 + * # if we are quitting, let's stop the tracing + * if py_db.quitting: + * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + * + * return self.trace_dispatch + */ + __Pyx_XDECREF(__pyx_r); + if (__pyx_v_is_call) { + __Pyx_INCREF(Py_None); + __pyx_t_4 = Py_None; + } else { + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1351, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __pyx_t_7; + __pyx_t_7 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1350 + * + * # if we are quitting, let's stop the tracing + * if py_db.quitting: # <<<<<<<<<<<<<< + * return None if is_call else NO_FTRACE + * + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1353 + * return None if is_call else NO_FTRACE + * + * return self.trace_dispatch # <<<<<<<<<<<<<< + * except: + * # Unfortunately Python itself stops the tracing when it originates from + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1353, __pyx_L172_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L176_try_return; + + /* "_pydevd_bundle/pydevd_cython.pyx":1115 + * + * # step handling. We stop when we hit the right frame + * try: # <<<<<<<<<<<<<< + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: + */ + } + __pyx_L172_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1354 + * + * return self.trace_dispatch + * except: # <<<<<<<<<<<<<< + * # Unfortunately Python itself stops the tracing when it originates from + * # the tracing function, so, we can't do much about it (just let the user know). + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_6) < 0) __PYX_ERR(0, 1354, __pyx_L174_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_bundle/pydevd_cython.pyx":1357 + * # Unfortunately Python itself stops the tracing when it originates from + * # the tracing function, so, we can't do much about it (just let the user know). + * exc = sys.exc_info()[0] # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_console_message( + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1357, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1357, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_8, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_exc = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1358 + * # the tracing function, so, we can't do much about it (just let the user know). + * exc = sys.exc_info()[0] + * cmd = py_db.cmd_factory.make_console_message( # <<<<<<<<<<<<<< + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1358, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_make_console_message); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1358, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1361 + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( + * exc, # <<<<<<<<<<<<<< + * thread, + * ) + */ + __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1361, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_exc)) __PYX_ERR(0, 1361, __pyx_L174_except_error); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_thread)) __PYX_ERR(0, 1361, __pyx_L174_except_error); + + /* "_pydevd_bundle/pydevd_cython.pyx":1360 + * cmd = py_db.cmd_factory.make_console_message( + * "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + * % ( # <<<<<<<<<<<<<< + * exc, + * thread, + */ + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_raised_from_within_the_callba, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1360, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1358, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_cmd, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1365 + * ) + * ) + * py_db.writer.add_command(cmd) # <<<<<<<<<<<<<< + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + * pydev_log.exception() + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_writer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1365, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_add_command); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1365, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_cmd}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1366 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * raise + */ + __pyx_t_16 = PyObject_IsSubclass(__pyx_v_exc, __pyx_tuple__7); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 1366, __pyx_L174_except_error) + __pyx_t_10 = (!__pyx_t_16); + if (__pyx_t_10) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1367 + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + * pydev_log.exception() # <<<<<<<<<<<<<< + * raise + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1367, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L174_except_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1366 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * raise + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1368 + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + * pydev_log.exception() + * raise # <<<<<<<<<<<<<< + * + * finally: + */ + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_7, __pyx_t_6); + __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; + __PYX_ERR(0, 1368, __pyx_L174_except_error) + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1115 + * + * # step handling. We stop when we hit the right frame + * try: # <<<<<<<<<<<<<< + * should_skip = 0 + * if pydevd_dont_trace.should_trace_hook is not None: + */ + __pyx_L174_except_error:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + goto __pyx_L4_error; + __pyx_L176_try_return:; + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19); + goto __pyx_L3_return; + } + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1371 + * + * finally: + * info.is_tracing -= 1 # <<<<<<<<<<<<<< + * + * # end trace_dispatch + */ + /*finally:*/ { + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_29, &__pyx_t_28, &__pyx_t_27); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_18, &__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_17); + __Pyx_XGOTREF(__pyx_t_29); + __Pyx_XGOTREF(__pyx_t_28); + __Pyx_XGOTREF(__pyx_t_27); + __pyx_t_11 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_30 = __pyx_filename; + { + if (unlikely(!__pyx_v_info)) { __Pyx_RaiseUnboundLocalError("info"); __PYX_ERR(0, 1371, __pyx_L278_error) } + if (unlikely(!__pyx_v_info)) { __Pyx_RaiseUnboundLocalError("info"); __PYX_ERR(0, 1371, __pyx_L278_error) } + __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing - 1); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_28, __pyx_t_27); + } + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_18, __pyx_t_17); + __pyx_t_19 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; + __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_30; + goto __pyx_L1_error; + __pyx_L278_error:; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_29); + __Pyx_XGIVEREF(__pyx_t_28); + __Pyx_XGIVEREF(__pyx_t_27); + __Pyx_ExceptionReset(__pyx_t_29, __pyx_t_28, __pyx_t_27); + } + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; + __pyx_t_29 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; + goto __pyx_L1_error; + } + __pyx_L3_return: { + __pyx_t_27 = __pyx_r; + __pyx_r = 0; + __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing - 1); + __pyx_r = __pyx_t_27; + __pyx_t_27 = 0; + goto __pyx_L0; + } + } + + /* "_pydevd_bundle/pydevd_cython.pyx":635 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef tuple abs_path_canonical_path_and_base; + * cdef bint is_exception_event; + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_22); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_abs_path_canonical_path_and_base); + __Pyx_XDECREF((PyObject *)__pyx_v_info); + __Pyx_XDECREF(__pyx_v_breakpoints_for_file); + __Pyx_XDECREF(__pyx_v_stop_info); + __Pyx_XDECREF(__pyx_v_curr_func_name); + __Pyx_XDECREF(__pyx_v_frame_skips_cache); + __Pyx_XDECREF(__pyx_v_frame_cache_key); + __Pyx_XDECREF(__pyx_v_line_cache_key); + __Pyx_XDECREF(__pyx_v_bp); + __Pyx_XDECREF(__pyx_v_pydev_smart_step_into_variants); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_thread); + __Pyx_XDECREF(__pyx_v_plugin_manager); + __Pyx_XDECREF(__pyx_v_stop_frame); + __Pyx_XDECREF(__pyx_v_function_breakpoint_on_call_event); + __Pyx_XDECREF(__pyx_v_returns_cache_key); + __Pyx_XDECREF(__pyx_v_return_lines); + __Pyx_XDECREF(__pyx_v_x); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_exc_info); + __Pyx_XDECREF(__pyx_v_func_lines); + __Pyx_XDECREF(__pyx_v_offset_and_lineno); + __Pyx_XDECREF(__pyx_v_breakpoint); + __Pyx_XDECREF(__pyx_v_stop_reason); + __Pyx_XDECREF(__pyx_v_bp_type); + __Pyx_XDECREF(__pyx_v_new_frame); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_eval_result); + __Pyx_XDECREF(__pyx_v_cmd); + __Pyx_XDECREF(__pyx_v_exc); + __Pyx_XDECREF(__pyx_v_plugin_stop); + __Pyx_XDECREF(__pyx_v_force_check_project_scope); + __Pyx_XDECREF(__pyx_v_filename); + __Pyx_XDECREF(__pyx_v_f2); + __Pyx_XDECREF(__pyx_v_back); + __Pyx_XDECREF(__pyx_v_smart_step_into_variant); + __Pyx_XDECREF(__pyx_v_children_variants); + __Pyx_XDECREF(__pyx_v_f_code); + __Pyx_XDECREF(__pyx_v_back_absolute_filename); + __Pyx_XDECREF(__pyx_v__); + __Pyx_XDECREF(__pyx_v_base); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch = {"trace_dispatch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_frame = 0; + PyObject *__pyx_v_event = 0; + PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("trace_dispatch (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, 1); __PYX_ERR(0, 635, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, 2); __PYX_ERR(0, 635, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "trace_dispatch") < 0)) __PYX_ERR(0, 635, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_frame = values[0]; + __pyx_v_event = ((PyObject*)values[1]); + __pyx_v_arg = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 635, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_event), (&PyString_Type), 1, "event", 1))) __PYX_ERR(0, 635, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_10trace_dispatch(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_10trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("trace_dispatch", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_12__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_12__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self._args, self.exc_info, self.should_skip) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->should_skip); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_self->_args); + __Pyx_GIVEREF(__pyx_v_self->_args); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_args)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->exc_info); + __Pyx_GIVEREF(__pyx_v_self->exc_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->exc_info)) __PYX_ERR(2, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self._args, self.exc_info, self.should_skip) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v__dict = __pyx_t_2; + __pyx_t_2 = 0; + + /* "(tree fragment)":7 + * state = (self._args, self.exc_info, self.should_skip) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_3 = (__pyx_v__dict != Py_None); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self._args is not None or self.exc_info is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self._args, self.exc_info, self.should_skip) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self._args is not None or self.exc_info is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, None), state + */ + /*else*/ { + __pyx_t_4 = (__pyx_v_self->_args != ((PyObject*)Py_None)); + if (!__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = (__pyx_v_self->exc_info != Py_None); + __pyx_t_3 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._args is not None or self.exc_info is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, None), state + * else: + */ + if (__pyx_v_use_setstate) { + + /* "(tree fragment)":13 + * use_setstate = self._args is not None or self.exc_info is not None + * if use_setstate: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_PyDBFrame); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_61391470); + __Pyx_GIVEREF(__pyx_int_61391470); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_61391470)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._args is not None or self.exc_info is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, None), state + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_PyDBFrame); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_61391470); + __Pyx_GIVEREF(__pyx_int_61391470); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_61391470)) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); + + /* "(tree fragment)":17 + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFrame__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":1377 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef bint was_just_raised; + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_13should_stop_on_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_13should_stop_on_exception = {"should_stop_on_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_13should_stop_on_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_13should_stop_on_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_py_db = 0; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + PyObject *__pyx_v_frame = 0; + PyObject *__pyx_v_thread = 0; + PyObject *__pyx_v_arg = 0; + PyObject *__pyx_v_prev_user_uncaught_exc_info = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[6] = {0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("should_stop_on_exception (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_info,&__pyx_n_s_frame,&__pyx_n_s_thread,&__pyx_n_s_arg,&__pyx_n_s_prev_user_uncaught_exc_info,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, 1); __PYX_ERR(0, 1377, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, 2); __PYX_ERR(0, 1377, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, 3); __PYX_ERR(0, 1377, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, 4); __PYX_ERR(0, 1377, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_prev_user_uncaught_exc_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1377, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, 5); __PYX_ERR(0, 1377, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "should_stop_on_exception") < 0)) __PYX_ERR(0, 1377, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 6)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + } + __pyx_v_py_db = values[0]; + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)values[1]); + __pyx_v_frame = values[2]; + __pyx_v_thread = values[3]; + __pyx_v_arg = values[4]; + __pyx_v_prev_user_uncaught_exc_info = values[5]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("should_stop_on_exception", 1, 6, 6, __pyx_nargs); __PYX_ERR(0, 1377, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, 1, "info", 0))) __PYX_ERR(0, 1377, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12should_stop_on_exception(__pyx_self, __pyx_v_py_db, __pyx_v_info, __pyx_v_frame, __pyx_v_thread, __pyx_v_arg, __pyx_v_prev_user_uncaught_exc_info); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12should_stop_on_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, PyObject *__pyx_v_frame, PyObject *__pyx_v_thread, PyObject *__pyx_v_arg, PyObject *__pyx_v_prev_user_uncaught_exc_info) { + int __pyx_v_should_stop; + int __pyx_v_was_just_raised; + PyObject *__pyx_v_check_excs = 0; + PyObject *__pyx_v_maybe_user_uncaught_exc_info = NULL; + PyObject *__pyx_v_exception = NULL; + PyObject *__pyx_v_value = NULL; + PyObject *__pyx_v_trace = NULL; + PyObject *__pyx_v_exception_breakpoint = NULL; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_exc_break_user = NULL; + PyObject *__pyx_v_exc_break_caught = NULL; + PyObject *__pyx_v_exc_break = NULL; + PyObject *__pyx_v_is_user_uncaught = NULL; + PyObject *__pyx_v_exc_info = NULL; + PyObject *__pyx_v_lines = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *(*__pyx_t_6)(PyObject *); + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + unsigned int __pyx_t_11; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + Py_ssize_t __pyx_t_15; + int __pyx_t_16; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("should_stop_on_exception", 0); + __Pyx_INCREF(__pyx_v_frame); - /* "_pydevd_bundle/pydevd_cython.pyx":1113 - * ) - * ): - * self._show_return_values(frame, arg) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1385 + * # ENDIF * - * elif main_debugger.remove_return_values_flag: - */ - __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_show_return_values(__pyx_v_self, __pyx_v_frame, __pyx_v_arg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1113, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1103 + * should_stop = False # <<<<<<<<<<<<<< + * maybe_user_uncaught_exc_info = prev_user_uncaught_exc_info * - * if main_debugger.show_return_values: - * if is_return and ( # <<<<<<<<<<<<<< - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - * (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or */ - } + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1102 - * main_debugger.writer.add_command(cmd) + /* "_pydevd_bundle/pydevd_cython.pyx":1386 * - * if main_debugger.show_return_values: # <<<<<<<<<<<<<< - * if is_return and ( - * (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - */ - goto __pyx_L141; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1115 - * self._show_return_values(frame, arg) + * should_stop = False + * maybe_user_uncaught_exc_info = prev_user_uncaught_exc_info # <<<<<<<<<<<<<< * - * elif main_debugger.remove_return_values_flag: # <<<<<<<<<<<<<< - * try: - * self._remove_return_values(main_debugger, frame) + * # 2 = 2 */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_remove_return_values_flag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1115, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1115, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_9) { + __Pyx_INCREF(__pyx_v_prev_user_uncaught_exc_info); + __pyx_v_maybe_user_uncaught_exc_info = __pyx_v_prev_user_uncaught_exc_info; - /* "_pydevd_bundle/pydevd_cython.pyx":1116 + /* "_pydevd_bundle/pydevd_cython.pyx":1389 * - * elif main_debugger.remove_return_values_flag: - * try: # <<<<<<<<<<<<<< - * self._remove_return_values(main_debugger, frame) - * finally: - */ - /*try:*/ { - - /* "_pydevd_bundle/pydevd_cython.pyx":1117 - * elif main_debugger.remove_return_values_flag: - * try: - * self._remove_return_values(main_debugger, frame) # <<<<<<<<<<<<<< - * finally: - * main_debugger.remove_return_values_flag = False - */ - __pyx_t_6 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_remove_return_values(__pyx_v_self, __pyx_v_main_debugger, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1117, __pyx_L153_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1119 - * self._remove_return_values(main_debugger, frame) - * finally: - * main_debugger.remove_return_values_flag = False # <<<<<<<<<<<<<< + * # 2 = 2 + * if info.pydev_state != 2: # and breakpoint is not None: # <<<<<<<<<<<<<< + * exception, value, trace = arg * - * if stop: */ - /*finally:*/ { - /*normal exit:*/{ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_main_debugger, __pyx_n_s_remove_return_values_flag, Py_False) < 0) __PYX_ERR(0, 1119, __pyx_L104_error) - goto __pyx_L154; - } - __pyx_L153_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25); - __Pyx_XGOTREF(__pyx_t_23); - __Pyx_XGOTREF(__pyx_t_24); - __Pyx_XGOTREF(__pyx_t_25); - __Pyx_XGOTREF(__pyx_t_26); - __Pyx_XGOTREF(__pyx_t_27); - __Pyx_XGOTREF(__pyx_t_28); - __pyx_t_5 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_22 = __pyx_filename; - { - if (__Pyx_PyObject_SetAttrStr(__pyx_v_main_debugger, __pyx_n_s_remove_return_values_flag, Py_False) < 0) __PYX_ERR(0, 1119, __pyx_L156_error) - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_26); - __Pyx_XGIVEREF(__pyx_t_27); - __Pyx_XGIVEREF(__pyx_t_28); - __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28); - } - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_XGIVEREF(__pyx_t_24); - __Pyx_XGIVEREF(__pyx_t_25); - __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25); - __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; - __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_22; - goto __pyx_L104_error; - __pyx_L156_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_26); - __Pyx_XGIVEREF(__pyx_t_27); - __Pyx_XGIVEREF(__pyx_t_28); - __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28); - } - __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0; - __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0; - __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0; - __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; - goto __pyx_L104_error; - } - __pyx_L154:; - } + __pyx_t_1 = (__pyx_v_info->pydev_state != 2); + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1115 - * self._show_return_values(frame, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":1390 + * # 2 = 2 + * if info.pydev_state != 2: # and breakpoint is not None: + * exception, value, trace = arg # <<<<<<<<<<<<<< * - * elif main_debugger.remove_return_values_flag: # <<<<<<<<<<<<<< - * try: - * self._remove_return_values(main_debugger, frame) + * if trace is not None and hasattr(trace, "tb_next"): */ - } - __pyx_L141:; + if ((likely(PyTuple_CheckExact(__pyx_v_arg))) || (PyList_CheckExact(__pyx_v_arg))) { + PyObject* sequence = __pyx_v_arg; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1390, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + __pyx_t_4 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_5 = PyObject_GetIter(__pyx_v_arg); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 2; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(0, 1390, __pyx_L1_error) + __pyx_t_6 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1390, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } + __pyx_v_exception = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_value = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_trace = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1121 - * main_debugger.remove_return_values_flag = False + /* "_pydevd_bundle/pydevd_cython.pyx":1392 + * exception, value, trace = arg * - * if stop: # <<<<<<<<<<<<<< - * self.set_suspend( - * thread, - */ - __pyx_t_9 = (__pyx_v_stop != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1122 + * if trace is not None and hasattr(trace, "tb_next"): # <<<<<<<<<<<<<< + * # on jython trace is None on the first event and it may not have a tb_next. * - * if stop: - * self.set_suspend( # <<<<<<<<<<<<<< - * thread, - * stop_reason, - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1122, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "_pydevd_bundle/pydevd_cython.pyx":1124 - * self.set_suspend( - * thread, - * stop_reason, # <<<<<<<<<<<<<< - * suspend_other_threads=breakpoint and breakpoint.suspend_policy == "ALL", - * ) */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1122, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_stop_reason); - __Pyx_GIVEREF(__pyx_v_stop_reason); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_stop_reason); + __pyx_t_7 = (__pyx_v_trace != Py_None); + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_7 = __Pyx_HasAttr(__pyx_v_trace, __pyx_n_s_tb_next); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1392, __pyx_L1_error) + __pyx_t_1 = __pyx_t_7; + __pyx_L7_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1125 - * thread, - * stop_reason, - * suspend_other_threads=breakpoint and breakpoint.suspend_policy == "ALL", # <<<<<<<<<<<<<< - * ) + /* "_pydevd_bundle/pydevd_cython.pyx":1395 + * # on jython trace is None on the first event and it may not have a tb_next. * + * should_stop = False # <<<<<<<<<<<<<< + * exception_breakpoint = None + * try: */ - __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1125, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1125, __pyx_L104_error) - if (__pyx_t_9) { - } else { - __Pyx_INCREF(__pyx_v_breakpoint); - __pyx_t_7 = __pyx_v_breakpoint; - goto __pyx_L158_bool_binop_done; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_breakpoint, __pyx_n_s_suspend_policy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1125, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_n_s_ALL, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1125, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_t_4); - __pyx_t_7 = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_L158_bool_binop_done:; - if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_suspend_other_threads, __pyx_t_7) < 0) __PYX_ERR(0, 1125, __pyx_L104_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1122 + /* "_pydevd_bundle/pydevd_cython.pyx":1396 * - * if stop: - * self.set_suspend( # <<<<<<<<<<<<<< - * thread, - * stop_reason, + * should_stop = False + * exception_breakpoint = None # <<<<<<<<<<<<<< + * try: + * if py_db.plugin is not None: */ - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1122, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_INCREF(Py_None); + __pyx_v_exception_breakpoint = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":1121 - * main_debugger.remove_return_values_flag = False - * - * if stop: # <<<<<<<<<<<<<< - * self.set_suspend( - * thread, + /* "_pydevd_bundle/pydevd_cython.pyx":1397 + * should_stop = False + * exception_breakpoint = None + * try: # <<<<<<<<<<<<<< + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) */ - goto __pyx_L157; - } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1128 - * ) - * - * elif stop_on_plugin_breakpoint and plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + /* "_pydevd_bundle/pydevd_cython.pyx":1398 + * exception_breakpoint = None + * try: + * if py_db.plugin is not None: # <<<<<<<<<<<<<< + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) * if result: */ - __pyx_t_11 = (__pyx_v_stop_on_plugin_breakpoint != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L160_bool_binop_done; - } - __pyx_t_11 = (__pyx_v_plugin_manager != Py_None); - __pyx_t_14 = (__pyx_t_11 != 0); - __pyx_t_9 = __pyx_t_14; - __pyx_L160_bool_binop_done:; - if (__pyx_t_9) { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1398, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = (__pyx_t_4 != Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1129 - * - * elif stop_on_plugin_breakpoint and plugin_manager is not None: - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1399 + * try: + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) # <<<<<<<<<<<<<< * if result: - * frame = result + * should_stop, frame = result */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_suspend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1129, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1399, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_exception_break); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_main_debugger, __pyx_v_thread, __pyx_v_frame, __pyx_v_bp_type}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_main_debugger, __pyx_v_thread, __pyx_v_frame, __pyx_v_bp_type}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - { - __pyx_t_6 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1129, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL; + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_frame, __pyx_v_thread, __pyx_v_arg}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 4+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1399, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_10, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_10, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_bp_type); - __Pyx_GIVEREF(__pyx_v_bp_type); - PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_10, __pyx_v_bp_type); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1129, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_v_result = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1130 - * elif stop_on_plugin_breakpoint and plugin_manager is not None: - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + /* "_pydevd_bundle/pydevd_cython.pyx":1400 + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) * if result: # <<<<<<<<<<<<<< - * frame = result - * + * should_stop, frame = result + * except: */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1130, __pyx_L104_error) - if (__pyx_t_9) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1400, __pyx_L9_error) + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1131 - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + /* "_pydevd_bundle/pydevd_cython.pyx":1401 + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) * if result: - * frame = result # <<<<<<<<<<<<<< - * - * # if thread has a suspend flag, we suspend with a busy wait + * should_stop, frame = result # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() */ - __Pyx_INCREF(__pyx_v_result); - __Pyx_DECREF_SET(__pyx_v_frame, __pyx_v_result); + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1401, __pyx_L9_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_2 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1401, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_3 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1401, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); + index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L17_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_2 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L17_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1401, __pyx_L9_error) + __pyx_t_6 = NULL; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L18_unpacking_done; + __pyx_L17_unpacking_failed:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1401, __pyx_L9_error) + __pyx_L18_unpacking_done:; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1401, __pyx_L9_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_should_stop = __pyx_t_1; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1130 - * elif stop_on_plugin_breakpoint and plugin_manager is not None: - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + /* "_pydevd_bundle/pydevd_cython.pyx":1400 + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) * if result: # <<<<<<<<<<<<<< - * frame = result - * + * should_stop, frame = result + * except: */ - } + } - /* "_pydevd_bundle/pydevd_cython.pyx":1128 - * ) - * - * elif stop_on_plugin_breakpoint and plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + /* "_pydevd_bundle/pydevd_cython.pyx":1398 + * exception_breakpoint = None + * try: + * if py_db.plugin is not None: # <<<<<<<<<<<<<< + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) * if result: + */ + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1397 + * should_stop = False + * exception_breakpoint = None + * try: # <<<<<<<<<<<<<< + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) */ } - __pyx_L157:; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L14_try_end; + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1134 + /* "_pydevd_bundle/pydevd_cython.pyx":1402 + * if result: + * should_stop, frame = result + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() * - * # if thread has a suspend flag, we suspend with a busy wait - * if info.pydev_state == 2: # <<<<<<<<<<<<<< - * self.do_wait_suspend(thread, frame, event, arg) - * return self.trace_dispatch */ - __pyx_t_9 = ((__pyx_v_info->pydev_state == 2) != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1135 - * # if thread has a suspend flag, we suspend with a busy wait - * if info.pydev_state == 2: - * self.do_wait_suspend(thread, frame, event, arg) # <<<<<<<<<<<<<< - * return self.trace_dispatch - * else: + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 1402, __pyx_L11_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_3); + + /* "_pydevd_bundle/pydevd_cython.pyx":1403 + * should_stop, frame = result + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * + * if not should_stop: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1135, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1403, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_exception); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1403, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_13))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); + __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; + __Pyx_DECREF_SET(__pyx_t_13, function); + __pyx_t_11 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L104_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else #endif { - __pyx_t_3 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_10, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_10, __pyx_v_arg); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1135, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1136 - * if info.pydev_state == 2: - * self.do_wait_suspend(thread, frame, event, arg) - * return self.trace_dispatch # <<<<<<<<<<<<<< - * else: - * if not breakpoint and is_line: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1136, __pyx_L104_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L108_try_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":1134 - * - * # if thread has a suspend flag, we suspend with a busy wait - * if info.pydev_state == 2: # <<<<<<<<<<<<<< - * self.do_wait_suspend(thread, frame, event, arg) - * return self.trace_dispatch - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1138 - * return self.trace_dispatch - * else: - * if not breakpoint and is_line: # <<<<<<<<<<<<<< - * # No stop from anyone and no breakpoint found in line (cache that). - * frame_skips_cache[line_cache_key] = 0 - */ - /*else*/ { - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoint); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1138, __pyx_L104_error) - __pyx_t_11 = ((!__pyx_t_14) != 0); - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L165_bool_binop_done; - } - __pyx_t_11 = (__pyx_v_is_line != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L165_bool_binop_done:; - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1140 - * if not breakpoint and is_line: - * # No stop from anyone and no breakpoint found in line (cache that). - * frame_skips_cache[line_cache_key] = 0 # <<<<<<<<<<<<<< - * - * except: - */ - if (unlikely(__pyx_v_frame_skips_cache == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1140, __pyx_L104_error) - } - if (unlikely(PyDict_SetItem(__pyx_v_frame_skips_cache, __pyx_v_line_cache_key, __pyx_int_0) < 0)) __PYX_ERR(0, 1140, __pyx_L104_error) - - /* "_pydevd_bundle/pydevd_cython.pyx":1138 - * return self.trace_dispatch - * else: - * if not breakpoint and is_line: # <<<<<<<<<<<<<< - * # No stop from anyone and no breakpoint found in line (cache that). - * frame_skips_cache[line_cache_key] = 0 - */ + PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_13, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1403, __pyx_L11_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L10_exception_handled; } - /* "_pydevd_bundle/pydevd_cython.pyx":1038 - * # if DEBUG: print('NOT skipped: %s %s %s %s' % (frame.f_lineno, frame.f_code.co_name, event, frame.__class__.__name__)) - * + /* "_pydevd_bundle/pydevd_cython.pyx":1397 + * should_stop = False + * exception_breakpoint = None * try: # <<<<<<<<<<<<<< - * stop_on_plugin_breakpoint = False - * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case + * if py_db.plugin is not None: + * result = py_db.plugin.exception_break(py_db, frame, thread, arg) */ + __pyx_L11_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L10_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_L14_try_end:; } - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L109_try_end; - __pyx_L104_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1142 - * frame_skips_cache[line_cache_key] = 0 + /* "_pydevd_bundle/pydevd_cython.pyx":1405 + * pydev_log.exception() * - * except: # <<<<<<<<<<<<<< - * # Unfortunately Python itself stops the tracing when it originates from - * # the tracing function, so, we can't do much about it (just let the user know). + * if not should_stop: # <<<<<<<<<<<<<< + * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). + * if exception == SystemExit and py_db.ignore_system_exit_code(value): */ - /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_3) < 0) __PYX_ERR(0, 1142, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = (!__pyx_v_should_stop); + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1145 - * # Unfortunately Python itself stops the tracing when it originates from - * # the tracing function, so, we can't do much about it (just let the user know). - * exc = sys.exc_info()[0] # <<<<<<<<<<<<<< - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) + /* "_pydevd_bundle/pydevd_cython.pyx":1407 + * if not should_stop: + * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). + * if exception == SystemExit and py_db.ignore_system_exit_code(value): # <<<<<<<<<<<<<< + * pass + * */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_sys); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1145, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1145, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } + __pyx_t_3 = PyObject_RichCompare(__pyx_v_exception, __pyx_builtin_SystemExit, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1407, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L23_bool_binop_done; } - __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1145, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1145, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_exc = __pyx_t_1; - __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1146 - * # the tracing function, so, we can't do much about it (just let the user know). - * exc = sys.exc_info()[0] - * cmd = main_debugger.cmd_factory.make_console_message( # <<<<<<<<<<<<<< - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1146, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_make_console_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L106_except_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_ignore_system_exit_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1147 - * exc = sys.exc_info()[0] - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) # <<<<<<<<<<<<<< - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - */ - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_exc); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_thread); - __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_s_raised_from_within_the_callba, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1147, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { + __pyx_t_2 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1146, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF_SET(__pyx_v_cmd, __pyx_t_1); - __pyx_t_1 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1407, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_7; + __pyx_L23_bool_binop_done:; + if (__pyx_t_1) { + goto __pyx_L22; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1148 - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) # <<<<<<<<<<<<<< - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":1410 + * pass + * + * elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): # <<<<<<<<<<<<<< + * # These exceptions are control-flow related (they work as a generator + * # pause), so, we shouldn't stop on them. */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_writer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1148, __pyx_L106_except_error) + __Pyx_INCREF(__pyx_v_exception); + __pyx_t_3 = __pyx_v_exception; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_builtin_GeneratorExit, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L25_bool_binop_done; + } + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_builtin_StopIteration, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L25_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_StopAsyncIteration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1410, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_add_command); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1148, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1410, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1410, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = __pyx_t_7; + __pyx_L25_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_7 = __pyx_t_1; + if (__pyx_t_7) { + goto __pyx_L22; + } + + /* "_pydevd_bundle/pydevd_cython.pyx":1415 + * pass + * + * elif ignore_exception_trace(trace): # <<<<<<<<<<<<<< + * pass + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ignore_exception_trace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_cmd) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_cmd); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1148, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_trace}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1415, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_7) { + goto __pyx_L22; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1149 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":1419 * - */ - __pyx_t_9 = PyObject_IsSubclass(__pyx_v_exc, __pyx_tuple__4); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1149, __pyx_L106_except_error) - __pyx_t_11 = ((!(__pyx_t_9 != 0)) != 0); - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1150 - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - * pydev_log.exception() # <<<<<<<<<<<<<< + * else: + * was_just_raised = just_raised(trace) # <<<<<<<<<<<<<< * - * raise + * # It was not handled by any plugin, lets check exception breakpoints. */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1150, __pyx_L106_except_error) + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_just_raised); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1150, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1150, __pyx_L106_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1149 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() - * - */ - } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_trace}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_was_just_raised = __pyx_t_7; - /* "_pydevd_bundle/pydevd_cython.pyx":1152 - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":1422 * - * raise # <<<<<<<<<<<<<< + * # It was not handled by any plugin, lets check exception breakpoints. + * check_excs = [] # <<<<<<<<<<<<<< * - * # step handling. We stop when we hit the right frame + * # Note: check user unhandled before regular exceptions. */ - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_8, __pyx_t_3); - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_3 = 0; - __PYX_ERR(0, 1152, __pyx_L106_except_error) - } - __pyx_L106_except_error:; + __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_check_excs = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1038 - * # if DEBUG: print('NOT skipped: %s %s %s %s' % (frame.f_lineno, frame.f_code.co_name, event, frame.__class__.__name__)) + /* "_pydevd_bundle/pydevd_cython.pyx":1425 * - * try: # <<<<<<<<<<<<<< - * stop_on_plugin_breakpoint = False - * # return is not taken into account for breakpoint hit because we'd have a double-hit in this case + * # Note: check user unhandled before regular exceptions. + * exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) # <<<<<<<<<<<<<< + * if exc_break_user is not None: + * check_excs.append((exc_break_user, True)) */ - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16); - goto __pyx_L4_error; - __pyx_L108_try_return:; - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_17, __pyx_t_16); - goto __pyx_L3_return; - __pyx_L109_try_end:; - } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_exception_breakpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_exception, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_exc_break_user = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1155 + /* "_pydevd_bundle/pydevd_cython.pyx":1426 + * # Note: check user unhandled before regular exceptions. + * exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) + * if exc_break_user is not None: # <<<<<<<<<<<<<< + * check_excs.append((exc_break_user, True)) * - * # step handling. We stop when we hit the right frame - * try: # <<<<<<<<<<<<<< - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_17); - __Pyx_XGOTREF(__pyx_t_18); - /*try:*/ { - - /* "_pydevd_bundle/pydevd_cython.pyx":1156 - * # step handling. We stop when we hit the right frame - * try: - * should_skip = 0 # <<<<<<<<<<<<<< - * if pydevd_dont_trace.should_trace_hook is not None: - * if self.should_skip == -1: - */ - __pyx_v_should_skip = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1157 - * try: - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< - * if self.should_skip == -1: - * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). - */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1157, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1157, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = (__pyx_t_8 != Py_None); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1158 - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: - * if self.should_skip == -1: # <<<<<<<<<<<<<< - * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). - * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code */ - __pyx_t_9 = ((__pyx_v_self->should_skip == -1L) != 0); - if (__pyx_t_9) { + __pyx_t_7 = (__pyx_v_exc_break_user != Py_None); + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1162 - * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code - * # Which will be handled by this frame is read-only, so, we can cache it safely. - * if not pydevd_dont_trace.should_trace_hook(frame, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< - * # -1, 0, 1 to be Cython-friendly - * should_skip = self.should_skip = 1 + /* "_pydevd_bundle/pydevd_cython.pyx":1427 + * exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) + * if exc_break_user is not None: + * check_excs.append((exc_break_user, True)) # <<<<<<<<<<<<<< + * + * exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L170_error) + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_exc_break_user); + __Pyx_GIVEREF(__pyx_v_exc_break_user); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_exc_break_user)) __PYX_ERR(0, 1427, __pyx_L1_error); + __Pyx_INCREF(Py_True); + __Pyx_GIVEREF(Py_True); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, Py_True)) __PYX_ERR(0, 1427, __pyx_L1_error); + __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_check_excs, __pyx_t_3); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 1427, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1162, __pyx_L170_error) - } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_frame, __pyx_t_3}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_frame, __pyx_t_3}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_4 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1162, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = ((!__pyx_t_9) != 0); - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1164 - * if not pydevd_dont_trace.should_trace_hook(frame, abs_path_canonical_path_and_base[0]): - * # -1, 0, 1 to be Cython-friendly - * should_skip = self.should_skip = 1 # <<<<<<<<<<<<<< - * else: - * should_skip = self.should_skip = 0 - */ - __pyx_v_should_skip = 1; - __pyx_v_self->should_skip = 1; - - /* "_pydevd_bundle/pydevd_cython.pyx":1162 - * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code - * # Which will be handled by this frame is read-only, so, we can cache it safely. - * if not pydevd_dont_trace.should_trace_hook(frame, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< - * # -1, 0, 1 to be Cython-friendly - * should_skip = self.should_skip = 1 - */ - goto __pyx_L178; - } - /* "_pydevd_bundle/pydevd_cython.pyx":1166 - * should_skip = self.should_skip = 1 - * else: - * should_skip = self.should_skip = 0 # <<<<<<<<<<<<<< - * else: - * should_skip = self.should_skip - */ - /*else*/ { - __pyx_v_should_skip = 0; - __pyx_v_self->should_skip = 0; - } - __pyx_L178:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1158 - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: - * if self.should_skip == -1: # <<<<<<<<<<<<<< - * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). - * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code - */ - goto __pyx_L177; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1168 - * should_skip = self.should_skip = 0 - * else: - * should_skip = self.should_skip # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1426 + * # Note: check user unhandled before regular exceptions. + * exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) + * if exc_break_user is not None: # <<<<<<<<<<<<<< + * check_excs.append((exc_break_user, True)) * - * plugin_stop = False */ - /*else*/ { - __pyx_t_10 = __pyx_v_self->should_skip; - __pyx_v_should_skip = __pyx_t_10; } - __pyx_L177:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1157 - * try: - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< - * if self.should_skip == -1: - * # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). - */ - } - /* "_pydevd_bundle/pydevd_cython.pyx":1170 - * should_skip = self.should_skip + /* "_pydevd_bundle/pydevd_cython.pyx":1429 + * check_excs.append((exc_break_user, True)) * - * plugin_stop = False # <<<<<<<<<<<<<< - * if should_skip: - * stop = False + * exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) # <<<<<<<<<<<<<< + * if exc_break_caught is not None: + * check_excs.append((exc_break_caught, False)) */ - __Pyx_INCREF(Py_False); - __pyx_v_plugin_stop = Py_False; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_exception_breakpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_exception, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_exc_break_caught = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1171 + /* "_pydevd_bundle/pydevd_cython.pyx":1430 * - * plugin_stop = False - * if should_skip: # <<<<<<<<<<<<<< - * stop = False + * exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) + * if exc_break_caught is not None: # <<<<<<<<<<<<<< + * check_excs.append((exc_break_caught, False)) * */ - __pyx_t_11 = (__pyx_v_should_skip != 0); - if (__pyx_t_11) { + __pyx_t_7 = (__pyx_v_exc_break_caught != Py_None); + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1172 - * plugin_stop = False - * if should_skip: - * stop = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1431 + * exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) + * if exc_break_caught is not None: + * check_excs.append((exc_break_caught, False)) # <<<<<<<<<<<<<< * - * elif step_cmd in (107, 144, 206): + * for exc_break, is_user_uncaught in check_excs: */ - __pyx_v_stop = 0; + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_exc_break_caught); + __Pyx_GIVEREF(__pyx_v_exc_break_caught); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_exc_break_caught)) __PYX_ERR(0, 1431, __pyx_L1_error); + __Pyx_INCREF(Py_False); + __Pyx_GIVEREF(Py_False); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, Py_False)) __PYX_ERR(0, 1431, __pyx_L1_error); + __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_check_excs, __pyx_t_3); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 1431, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1171 - * - * plugin_stop = False - * if should_skip: # <<<<<<<<<<<<<< - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1430 * - */ - goto __pyx_L179; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1174 - * stop = False + * exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) + * if exc_break_caught is not None: # <<<<<<<<<<<<<< + * check_excs.append((exc_break_caught, False)) * - * elif step_cmd in (107, 144, 206): # <<<<<<<<<<<<<< - * force_check_project_scope = step_cmd == 144 - * if is_line: */ - switch (__pyx_v_step_cmd) { - case 0x6B: - case 0x90: - case 0xCE: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; - } - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":1175 + /* "_pydevd_bundle/pydevd_cython.pyx":1433 + * check_excs.append((exc_break_caught, False)) * - * elif step_cmd in (107, 144, 206): - * force_check_project_scope = step_cmd == 144 # <<<<<<<<<<<<<< - * if is_line: - * if not info.pydev_use_scoped_step_frame: - */ - __pyx_t_8 = __Pyx_PyBool_FromLong((__pyx_v_step_cmd == 0x90)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1175, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_v_force_check_project_scope = __pyx_t_8; - __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1176 - * elif step_cmd in (107, 144, 206): - * force_check_project_scope = step_cmd == 144 - * if is_line: # <<<<<<<<<<<<<< - * if not info.pydev_use_scoped_step_frame: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - */ - __pyx_t_9 = (__pyx_v_is_line != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1177 - * force_check_project_scope = step_cmd == 144 - * if is_line: - * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + * for exc_break, is_user_uncaught in check_excs: # <<<<<<<<<<<<<< + * # Initially mark that it should stop and then go into exclusions. + * should_stop = True */ - __pyx_t_9 = ((!(__pyx_v_info->pydev_use_scoped_step_frame != 0)) != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1178 - * if is_line: - * if not info.pydev_use_scoped_step_frame: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) - * else: - */ - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1178, __pyx_L170_error) - if (!__pyx_t_11) { + __pyx_t_3 = __pyx_v_check_excs; __Pyx_INCREF(__pyx_t_3); + __pyx_t_15 = 0; + for (;;) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1433, __pyx_L1_error) + #endif + if (__pyx_t_15 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_15); __Pyx_INCREF(__pyx_t_2); __pyx_t_15++; if (unlikely((0 < 0))) __PYX_ERR(0, 1433, __pyx_L1_error) + #else + __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + #endif + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1433, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L183_bool_binop_done; + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); } - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1178, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1178, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __pyx_t_11; - __pyx_L183_bool_binop_done:; - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1179 - * if not info.pydev_use_scoped_step_frame: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) # <<<<<<<<<<<<<< - * else: - * stop = True - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_frame, __pyx_t_3, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_frame, __pyx_t_3, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_1 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_t_3); - __Pyx_INCREF(__pyx_v_force_check_project_scope); - __Pyx_GIVEREF(__pyx_v_force_check_project_scope); - PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_10, __pyx_v_force_check_project_scope); - __pyx_t_3 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1179, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_stop = (!__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_13 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_13); + index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L32_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_5 = __pyx_t_6(__pyx_t_13); if (unlikely(!__pyx_t_5)) goto __pyx_L32_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_13), 2) < 0) __PYX_ERR(0, 1433, __pyx_L1_error) + __pyx_t_6 = NULL; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L33_unpacking_done; + __pyx_L32_unpacking_failed:; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_6 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1433, __pyx_L1_error) + __pyx_L33_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_exc_break, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_is_user_uncaught, __pyx_t_5); + __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1178 - * if is_line: - * if not info.pydev_use_scoped_step_frame: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1435 + * for exc_break, is_user_uncaught in check_excs: + * # Initially mark that it should stop and then go into exclusions. + * should_stop = True # <<<<<<<<<<<<<< + * + * if py_db.exclude_exception_by_filter(exc_break, trace): */ - goto __pyx_L182; - } + __pyx_v_should_stop = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1181 - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) - * else: - * stop = True # <<<<<<<<<<<<<< - * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: + /* "_pydevd_bundle/pydevd_cython.pyx":1437 + * should_stop = True + * + * if py_db.exclude_exception_by_filter(exc_break, trace): # <<<<<<<<<<<<<< + * pydev_log.debug( + * "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) */ - /*else*/ { - __pyx_v_stop = 1; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_exclude_exception_by_filter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_11 = 1; } - __pyx_L182:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1177 - * force_check_project_scope = step_cmd == 144 - * if is_line: - * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) - */ - goto __pyx_L181; } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_exc_break, __pyx_v_trace}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1183 - * stop = True - * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * # Make sure we check the filtering inside ipython calls too... - * if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + /* "_pydevd_bundle/pydevd_cython.pyx":1438 + * + * if py_db.exclude_exception_by_filter(exc_break, trace): + * pydev_log.debug( # <<<<<<<<<<<<<< + * "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) + * ) */ - /*else*/ { - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1183, __pyx_L170_error) - if (!__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L186_bool_binop_done; - } - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1183, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1183, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __pyx_t_11; - __pyx_L186_bool_binop_done:; - if (__pyx_t_9) { + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_debug); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1185 - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * # Make sure we check the filtering inside ipython calls too... - * if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): # <<<<<<<<<<<<<< - * return None if is_call else NO_FTRACE - * + /* "_pydevd_bundle/pydevd_cython.pyx":1439 + * if py_db.exclude_exception_by_filter(exc_break, trace): + * pydev_log.debug( + * "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) # <<<<<<<<<<<<<< + * ) + * should_stop = False */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_frame, __pyx_t_3, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_v_frame, __pyx_t_3, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_4 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_t_3); - __Pyx_INCREF(__pyx_v_force_check_project_scope); - __Pyx_GIVEREF(__pyx_v_force_check_project_scope); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_10, __pyx_v_force_check_project_scope); - __pyx_t_3 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_co_name); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_exception); + __Pyx_GIVEREF(__pyx_v_exception); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_exception)) __PYX_ERR(0, 1439, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_13); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_13)) __PYX_ERR(0, 1439, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_12)) __PYX_ERR(0, 1439, __pyx_L1_error); + __pyx_t_13 = 0; + __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyString_Format(__pyx_kp_s_Ignore_exception_s_in_library_s, __pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1185, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = ((!((!__pyx_t_9) != 0)) != 0); - if (__pyx_t_11) { + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_12}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1186 - * # Make sure we check the filtering inside ipython calls too... - * if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1441 + * "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) + * ) + * should_stop = False # <<<<<<<<<<<<<< * - * # We can only stop inside the ipython call. + * elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_8 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1186, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __pyx_t_7; - __pyx_t_7 = 0; - } - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L174_try_return; + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1185 - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * # Make sure we check the filtering inside ipython calls too... - * if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): # <<<<<<<<<<<<<< - * return None if is_call else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1437 + * should_stop = True * + * if py_db.exclude_exception_by_filter(exc_break, trace): # <<<<<<<<<<<<<< + * pydev_log.debug( + * "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) */ - } + goto __pyx_L34; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1183 - * stop = True - * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * # Make sure we check the filtering inside ipython calls too... - * if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + /* "_pydevd_bundle/pydevd_cython.pyx":1443 + * should_stop = False + * + * elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): # <<<<<<<<<<<<<< + * should_stop = False + * */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_condition); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = (__pyx_t_2 != Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + } else { + __pyx_t_7 = __pyx_t_1; + goto __pyx_L35_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_condition); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_12, ((PyObject *)__pyx_v_info), __pyx_v_exc_break, __pyx_v_frame}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 3+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1443, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_16 = (!__pyx_t_1); + __pyx_t_7 = __pyx_t_16; + __pyx_L35_bool_binop_done:; + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1189 + /* "_pydevd_bundle/pydevd_cython.pyx":1444 * - * # We can only stop inside the ipython call. - * filename = frame.f_code.co_filename # <<<<<<<<<<<<<< - * if filename.endswith('.pyc'): - * filename = filename[:-1] + * elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): + * should_stop = False # <<<<<<<<<<<<<< + * + * elif is_user_uncaught: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1189, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1189, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_filename = __pyx_t_7; - __pyx_t_7 = 0; + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1190 - * # We can only stop inside the ipython call. - * filename = frame.f_code.co_filename - * if filename.endswith('.pyc'): # <<<<<<<<<<<<<< - * filename = filename[:-1] + /* "_pydevd_bundle/pydevd_cython.pyx":1443 + * should_stop = False + * + * elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): # <<<<<<<<<<<<<< + * should_stop = False * */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1190, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_4, __pyx_kp_s_pyc) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_kp_s_pyc); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1190, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1190, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_11) { + goto __pyx_L34; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1191 - * filename = frame.f_code.co_filename - * if filename.endswith('.pyc'): - * filename = filename[:-1] # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1446 + * should_stop = False * - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * elif is_user_uncaught: # <<<<<<<<<<<<<< + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False */ - __pyx_t_7 = __Pyx_PyObject_GetSlice(__pyx_v_filename, 0, -1L, NULL, NULL, &__pyx_slice__5, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1191, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_is_user_uncaught); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1446, __pyx_L1_error) + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1190 - * # We can only stop inside the ipython call. - * filename = frame.f_code.co_filename - * if filename.endswith('.pyc'): # <<<<<<<<<<<<<< - * filename = filename[:-1] - * + /* "_pydevd_bundle/pydevd_cython.pyx":1448 + * elif is_user_uncaught: + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False # <<<<<<<<<<<<<< + * if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) */ - } + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1193 - * filename = filename[:-1] - * - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< - * f = frame.f_back - * while f is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1449 + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False + * if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1193, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1193, __pyx_L170_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1193, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_12); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; } } - __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1193, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1193, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = ((!__pyx_t_11) != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1194 - * - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): - * f = frame.f_back # <<<<<<<<<<<<<< - * while f is not None: - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1194, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_7); - __pyx_t_7 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1195 - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): - * f = frame.f_back - * while f is not None: # <<<<<<<<<<<<<< - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f2 = f.f_back - */ - while (1) { - __pyx_t_9 = (__pyx_v_f != Py_None); - __pyx_t_11 = (__pyx_t_9 != 0); - if (!__pyx_t_11) break; + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_12, __pyx_v_frame, __pyx_t_5, Py_True}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 3+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1449, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1449, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = (!__pyx_t_16); + if (__pyx_t_1) { + } else { + __pyx_t_7 = __pyx_t_1; + goto __pyx_L38_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1196 - * f = frame.f_back - * while f is not None: - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< - * f2 = f.f_back - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + /* "_pydevd_bundle/pydevd_cython.pyx":1450 + * should_stop = False + * if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) # <<<<<<<<<<<<<< + * ): + * # User uncaught means that we're currently in user code but the code */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1196, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_11) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = (__pyx_t_2 == Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!__pyx_t_1) { + } else { + __pyx_t_7 = __pyx_t_1; + goto __pyx_L38_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_f_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_t_5, __pyx_t_12, Py_True}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 3+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __pyx_t_1; + __pyx_L38_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":1197 - * while f is not None: - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f2 = f.f_back # <<<<<<<<<<<<<< - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - * pydev_log.debug('Stop inside ipython call') + /* "_pydevd_bundle/pydevd_cython.pyx":1449 + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False + * if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1197, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_f2, __pyx_t_7); - __pyx_t_7 = 0; + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1198 - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f2 = f.f_back - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< - * pydev_log.debug('Stop inside ipython call') - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1454 + * # User uncaught means that we're currently in user code but the code + * # up the stack is library code. + * exc_info = prev_user_uncaught_exc_info # <<<<<<<<<<<<<< + * if not exc_info: + * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + */ + __Pyx_INCREF(__pyx_v_prev_user_uncaught_exc_info); + __Pyx_XDECREF_SET(__pyx_v_exc_info, __pyx_v_prev_user_uncaught_exc_info); + + /* "_pydevd_bundle/pydevd_cython.pyx":1455 + * # up the stack is library code. + * exc_info = prev_user_uncaught_exc_info + * if not exc_info: # <<<<<<<<<<<<<< + * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + * else: */ - __pyx_t_9 = (__pyx_v_f2 != Py_None); - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_11 = __pyx_t_14; - goto __pyx_L195_bool_binop_done; - } - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f2, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_7, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyObject_RichCompare(__pyx_t_3, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1198, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_11 = __pyx_t_14; - __pyx_L195_bool_binop_done:; - if (__pyx_t_11) { + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_exc_info); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1455, __pyx_L1_error) + __pyx_t_1 = (!__pyx_t_7); + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1199 - * f2 = f.f_back - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - * pydev_log.debug('Stop inside ipython call') # <<<<<<<<<<<<<< - * stop = True - * break + /* "_pydevd_bundle/pydevd_cython.pyx":1456 + * exc_info = prev_user_uncaught_exc_info + * if not exc_info: + * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) # <<<<<<<<<<<<<< + * else: + * lines = exc_info[2] */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1199, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_debug); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1199, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_kp_s_Stop_inside_ipython_call) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_Stop_inside_ipython_call); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1199, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1456, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1456, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = PySet_New(0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1456, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + if (PySet_Add(__pyx_t_12, __pyx_t_4) < 0) __PYX_ERR(0, 1456, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1456, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_arg)) __PYX_ERR(0, 1456, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2)) __PYX_ERR(0, 1456, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_12)) __PYX_ERR(0, 1456, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_12 = 0; + __Pyx_DECREF_SET(__pyx_v_exc_info, __pyx_t_4); + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1200 - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - * pydev_log.debug('Stop inside ipython call') - * stop = True # <<<<<<<<<<<<<< - * break - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":1455 + * # up the stack is library code. + * exc_info = prev_user_uncaught_exc_info + * if not exc_info: # <<<<<<<<<<<<<< + * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + * else: */ - __pyx_v_stop = 1; + goto __pyx_L41; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1201 - * pydev_log.debug('Stop inside ipython call') - * stop = True - * break # <<<<<<<<<<<<<< - * f = f.f_back - * + /* "_pydevd_bundle/pydevd_cython.pyx":1458 + * exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + * else: + * lines = exc_info[2] # <<<<<<<<<<<<<< + * lines.add(frame.f_lineno) + * exc_info = (arg, frame.f_lineno, lines) */ - goto __pyx_L192_break; + /*else*/ { + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_exc_info, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_lines, __pyx_t_4); + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1198 - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: - * f2 = f.f_back - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< - * pydev_log.debug('Stop inside ipython call') - * stop = True - */ + /* "_pydevd_bundle/pydevd_cython.pyx":1459 + * else: + * lines = exc_info[2] + * lines.add(frame.f_lineno) # <<<<<<<<<<<<<< + * exc_info = (arg, frame.f_lineno, lines) + * maybe_user_uncaught_exc_info = exc_info + */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_lines, __pyx_n_s_add); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_11 = 1; } - - /* "_pydevd_bundle/pydevd_cython.pyx":1196 - * f = frame.f_back - * while f is not None: - * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< - * f2 = f.f_back - * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - */ } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_2}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1202 - * stop = True - * break - * f = f.f_back # <<<<<<<<<<<<<< - * - * del f + /* "_pydevd_bundle/pydevd_cython.pyx":1460 + * lines = exc_info[2] + * lines.add(frame.f_lineno) + * exc_info = (arg, frame.f_lineno, lines) # <<<<<<<<<<<<<< + * maybe_user_uncaught_exc_info = exc_info + * else: */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1202, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_7); - __pyx_t_7 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_arg)) __PYX_ERR(0, 1460, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_4)) __PYX_ERR(0, 1460, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_lines); + __Pyx_GIVEREF(__pyx_v_lines); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_lines)) __PYX_ERR(0, 1460, __pyx_L1_error); + __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_exc_info, __pyx_t_12); + __pyx_t_12 = 0; } - __pyx_L192_break:; + __pyx_L41:; - /* "_pydevd_bundle/pydevd_cython.pyx":1204 - * f = f.f_back - * - * del f # <<<<<<<<<<<<<< - * - * if not stop: + /* "_pydevd_bundle/pydevd_cython.pyx":1461 + * lines.add(frame.f_lineno) + * exc_info = (arg, frame.f_lineno, lines) + * maybe_user_uncaught_exc_info = exc_info # <<<<<<<<<<<<<< + * else: + * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. */ - __Pyx_DECREF(__pyx_v_f); - __pyx_v_f = NULL; + __Pyx_INCREF(__pyx_v_exc_info); + __Pyx_DECREF_SET(__pyx_v_maybe_user_uncaught_exc_info, __pyx_v_exc_info); - /* "_pydevd_bundle/pydevd_cython.pyx":1193 - * filename = filename[:-1] - * - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< - * f = frame.f_back - * while f is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1449 + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False + * if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( # <<<<<<<<<<<<<< + * frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ): */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1206 - * del f + /* "_pydevd_bundle/pydevd_cython.pyx":1446 + * should_stop = False * - * if not stop: # <<<<<<<<<<<<<< - * # In scoped mode if step in didn't work in this context it won't work - * # afterwards anyways. + * elif is_user_uncaught: # <<<<<<<<<<<<<< + * # Note: we don't stop here, we just collect the exc_info to use later on... + * should_stop = False */ - __pyx_t_11 = ((!(__pyx_v_stop != 0)) != 0); - if (__pyx_t_11) { + goto __pyx_L34; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1209 - * # In scoped mode if step in didn't work in this context it won't work - * # afterwards anyways. - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< - * - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: + /* "_pydevd_bundle/pydevd_cython.pyx":1464 + * else: + * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + * if ( # <<<<<<<<<<<<<< + * exc_break.notify_on_first_raise_only + * and py_db.skip_on_exceptions_thrown_in_same_context */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_7 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1209, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L174_try_return; + /*else*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1206 - * del f - * - * if not stop: # <<<<<<<<<<<<<< - * # In scoped mode if step in didn't work in this context it won't work - * # afterwards anyways. + /* "_pydevd_bundle/pydevd_cython.pyx":1465 + * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + * if ( + * exc_break.notify_on_first_raise_only # <<<<<<<<<<<<<< + * and py_db.skip_on_exceptions_thrown_in_same_context + * and not was_just_raised */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_notify_on_first_raise_only); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1465, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1465, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L43_bool_binop_done; } - } - __pyx_L181:; - /* "_pydevd_bundle/pydevd_cython.pyx":1176 - * elif step_cmd in (107, 144, 206): - * force_check_project_scope = step_cmd == 144 - * if is_line: # <<<<<<<<<<<<<< - * if not info.pydev_use_scoped_step_frame: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: + /* "_pydevd_bundle/pydevd_cython.pyx":1466 + * if ( + * exc_break.notify_on_first_raise_only + * and py_db.skip_on_exceptions_thrown_in_same_context # <<<<<<<<<<<<<< + * and not was_just_raised + * and not just_raised(trace.tb_next) */ - goto __pyx_L180; - } + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1466, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1466, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L43_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1211 - * return None if is_call else NO_FTRACE - * - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1467 + * exc_break.notify_on_first_raise_only + * and py_db.skip_on_exceptions_thrown_in_same_context + * and not was_just_raised # <<<<<<<<<<<<<< + * and not just_raised(trace.tb_next) + * ): */ - __pyx_t_14 = (__pyx_v_is_return != 0); - if (__pyx_t_14) { - } else { - __pyx_t_11 = __pyx_t_14; - goto __pyx_L198_bool_binop_done; - } - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1211, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_14 = (__pyx_t_7 != Py_None); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L198_bool_binop_done; - } - __pyx_t_9 = ((!(__pyx_v_info->pydev_use_scoped_step_frame != 0)) != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L198_bool_binop_done:; - if (__pyx_t_11) { + __pyx_t_7 = (!__pyx_v_was_just_raised); + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L43_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1212 - * - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: # <<<<<<<<<<<<<< - * stop = False - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1468 + * and py_db.skip_on_exceptions_thrown_in_same_context + * and not was_just_raised + * and not just_raised(trace.tb_next) # <<<<<<<<<<<<<< + * ): + * # In this case we never stop if it was just raised, so, to know if it was the first we */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_just_raised); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; + } } - } - __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_PYDEV_FILE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1212, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_11) { + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_2}; + __pyx_t_12 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1468, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1468, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_16 = (!__pyx_t_7); + __pyx_t_1 = __pyx_t_16; + __pyx_L43_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":1213 - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1464 * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: + * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + * if ( # <<<<<<<<<<<<<< + * exc_break.notify_on_first_raise_only + * and py_db.skip_on_exceptions_thrown_in_same_context */ - __pyx_v_stop = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1212 + /* "_pydevd_bundle/pydevd_cython.pyx":1472 + * # In this case we never stop if it was just raised, so, to know if it was the first we + * # need to check if we're in the 2nd method. + * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception # <<<<<<<<<<<<<< * - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: # <<<<<<<<<<<<<< - * stop = False - * else: + * elif ( */ - goto __pyx_L201; - } + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1215 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1464 * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) - * if stop: + * # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + * if ( # <<<<<<<<<<<<<< + * exc_break.notify_on_first_raise_only + * and py_db.skip_on_exceptions_thrown_in_same_context */ - /*else*/ { - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1215, __pyx_L170_error) - if (!__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L203_bool_binop_done; + goto __pyx_L42; } - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1215, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1215, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = __pyx_t_9; - __pyx_L203_bool_binop_done:; - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1216 - * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) # <<<<<<<<<<<<<< - * if stop: - * # Prevent stopping in a return to the same location we were initially - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_7, __pyx_t_4, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_1, __pyx_t_7, __pyx_t_4, __pyx_v_force_check_project_scope}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_2 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_10, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_10, __pyx_t_4); - __Pyx_INCREF(__pyx_v_force_check_project_scope); - __Pyx_GIVEREF(__pyx_v_force_check_project_scope); - PyTuple_SET_ITEM(__pyx_t_2, 2+__pyx_t_10, __pyx_v_force_check_project_scope); - __pyx_t_7 = 0; - __pyx_t_4 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1216, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_stop = (!__pyx_t_11); - /* "_pydevd_bundle/pydevd_cython.pyx":1217 - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) - * if stop: # <<<<<<<<<<<<<< - * # Prevent stopping in a return to the same location we were initially - * # (i.e.: double-stop at the same place due to some filtering). + /* "_pydevd_bundle/pydevd_cython.pyx":1475 + * + * elif ( + * exc_break.notify_on_first_raise_only # <<<<<<<<<<<<<< + * and not py_db.skip_on_exceptions_thrown_in_same_context + * and not was_just_raised */ - __pyx_t_11 = (__pyx_v_stop != 0); - if (__pyx_t_11) { + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_notify_on_first_raise_only); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1475, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1475, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + if (__pyx_t_16) { + } else { + __pyx_t_1 = __pyx_t_16; + goto __pyx_L47_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1220 - * # Prevent stopping in a return to the same location we were initially - * # (i.e.: double-stop at the same place due to some filtering). - * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): # <<<<<<<<<<<<<< - * stop = False - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1476 + * elif ( + * exc_break.notify_on_first_raise_only + * and not py_db.skip_on_exceptions_thrown_in_same_context # <<<<<<<<<<<<<< + * and not was_just_raised + * ): */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); - __pyx_t_8 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = PyObject_RichCompare(__pyx_v_info->step_in_initial_location, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1220, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_11) { + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1476, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 1476, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_7 = (!__pyx_t_16); + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L47_bool_binop_done; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1221 - * # (i.e.: double-stop at the same place due to some filtering). - * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): - * stop = False # <<<<<<<<<<<<<< - * else: - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1477 + * exc_break.notify_on_first_raise_only + * and not py_db.skip_on_exceptions_thrown_in_same_context + * and not was_just_raised # <<<<<<<<<<<<<< + * ): + * should_stop = False # I.e.: we stop only when it was just raised */ - __pyx_v_stop = 0; + __pyx_t_7 = (!__pyx_v_was_just_raised); + __pyx_t_1 = __pyx_t_7; + __pyx_L47_bool_binop_done:; - /* "_pydevd_bundle/pydevd_cython.pyx":1220 - * # Prevent stopping in a return to the same location we were initially - * # (i.e.: double-stop at the same place due to some filtering). - * if info.step_in_initial_location == (frame.f_back, frame.f_back.f_lineno): # <<<<<<<<<<<<<< - * stop = False - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1474 + * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception + * + * elif ( # <<<<<<<<<<<<<< + * exc_break.notify_on_first_raise_only + * and not py_db.skip_on_exceptions_thrown_in_same_context */ - } + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1217 - * if force_check_project_scope or main_debugger.is_files_filter_enabled: - * stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) - * if stop: # <<<<<<<<<<<<<< - * # Prevent stopping in a return to the same location we were initially - * # (i.e.: double-stop at the same place due to some filtering). + /* "_pydevd_bundle/pydevd_cython.pyx":1479 + * and not was_just_raised + * ): + * should_stop = False # I.e.: we stop only when it was just raised # <<<<<<<<<<<<<< + * + * elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: */ - } + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1215 - * stop = False - * else: - * if force_check_project_scope or main_debugger.is_files_filter_enabled: # <<<<<<<<<<<<<< - * stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) - * if stop: + /* "_pydevd_bundle/pydevd_cython.pyx":1474 + * should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception + * + * elif ( # <<<<<<<<<<<<<< + * exc_break.notify_on_first_raise_only + * and not py_db.skip_on_exceptions_thrown_in_same_context */ - goto __pyx_L202; + goto __pyx_L42; } - /* "_pydevd_bundle/pydevd_cython.pyx":1223 - * stop = False - * else: - * stop = True # <<<<<<<<<<<<<< - * else: - * stop = False - */ - /*else*/ { - __pyx_v_stop = 1; + /* "_pydevd_bundle/pydevd_cython.pyx":1481 + * should_stop = False # I.e.: we stop only when it was just raised + * + * elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: # <<<<<<<<<<<<<< + * # Option: Don't break if an exception is caught in the same function from which it is thrown + * should_stop = False + */ + if (__pyx_v_was_just_raised) { + } else { + __pyx_t_1 = __pyx_v_was_just_raised; + goto __pyx_L50_bool_binop_done; } - __pyx_L202:; - } - __pyx_L201:; + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_skip_on_exceptions_thrown_in_sam); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1481, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1481, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_1 = __pyx_t_7; + __pyx_L50_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1211 - * return None if is_call else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1483 + * elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: + * # Option: Don't break if an exception is caught in the same function from which it is thrown + * should_stop = False # <<<<<<<<<<<<<< * - * elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False + * if should_stop: */ - goto __pyx_L180; - } + __pyx_v_should_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1225 - * stop = True - * else: - * stop = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1481 + * should_stop = False # I.e.: we stop only when it was just raised * - * if stop: + * elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: # <<<<<<<<<<<<<< + * # Option: Don't break if an exception is caught in the same function from which it is thrown + * should_stop = False */ - /*else*/ { - __pyx_v_stop = 0; - } - __pyx_L180:; + } + __pyx_L42:; + } + __pyx_L34:; - /* "_pydevd_bundle/pydevd_cython.pyx":1227 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1485 + * should_stop = False * - * if stop: # <<<<<<<<<<<<<< - * if step_cmd == 206: - * # i.e.: Check if we're stepping into the proper context. + * if should_stop: # <<<<<<<<<<<<<< + * exception_breakpoint = exc_break + * try: */ - __pyx_t_11 = (__pyx_v_stop != 0); - if (__pyx_t_11) { + if (__pyx_v_should_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":1228 + /* "_pydevd_bundle/pydevd_cython.pyx":1486 * - * if stop: - * if step_cmd == 206: # <<<<<<<<<<<<<< - * # i.e.: Check if we're stepping into the proper context. - * f = frame + * if should_stop: + * exception_breakpoint = exc_break # <<<<<<<<<<<<<< + * try: + * info.pydev_message = exc_break.qname */ - __pyx_t_11 = ((__pyx_v_step_cmd == 0xCE) != 0); - if (__pyx_t_11) { + __Pyx_INCREF(__pyx_v_exc_break); + __Pyx_DECREF_SET(__pyx_v_exception_breakpoint, __pyx_v_exc_break); - /* "_pydevd_bundle/pydevd_cython.pyx":1230 - * if step_cmd == 206: - * # i.e.: Check if we're stepping into the proper context. - * f = frame # <<<<<<<<<<<<<< - * while f is not None: - * if self._is_same_frame(stop_frame, f): + /* "_pydevd_bundle/pydevd_cython.pyx":1487 + * if should_stop: + * exception_breakpoint = exc_break + * try: # <<<<<<<<<<<<<< + * info.pydev_message = exc_break.qname + * except: */ - __Pyx_INCREF(__pyx_v_frame); - __Pyx_XDECREF_SET(__pyx_v_f, __pyx_v_frame); + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1231 - * # i.e.: Check if we're stepping into the proper context. - * f = frame - * while f is not None: # <<<<<<<<<<<<<< - * if self._is_same_frame(stop_frame, f): - * break - */ - while (1) { - __pyx_t_11 = (__pyx_v_f != Py_None); - __pyx_t_9 = (__pyx_t_11 != 0); - if (!__pyx_t_9) break; + /* "_pydevd_bundle/pydevd_cython.pyx":1488 + * exception_breakpoint = exc_break + * try: + * info.pydev_message = exc_break.qname # <<<<<<<<<<<<<< + * except: + * info.pydev_message = exc_break.qname.encode("utf-8") + */ + __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_qname); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1488, __pyx_L53_error) + __Pyx_GOTREF(__pyx_t_12); + if (!(likely(PyString_CheckExact(__pyx_t_12))||((__pyx_t_12) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_12))) __PYX_ERR(0, 1488, __pyx_L53_error) + __Pyx_GIVEREF(__pyx_t_12); + __Pyx_GOTREF(__pyx_v_info->pydev_message); + __Pyx_DECREF(__pyx_v_info->pydev_message); + __pyx_v_info->pydev_message = ((PyObject*)__pyx_t_12); + __pyx_t_12 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1232 - * f = frame - * while f is not None: - * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< - * break - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":1487 + * if should_stop: + * exception_breakpoint = exc_break + * try: # <<<<<<<<<<<<<< + * info.pydev_message = exc_break.qname + * except: */ - __pyx_t_2 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1232, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1232, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_9) { + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L60_try_end; + __pyx_L53_error:; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1233 - * while f is not None: - * if self._is_same_frame(stop_frame, f): - * break # <<<<<<<<<<<<<< - * f = f.f_back - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1489 + * try: + * info.pydev_message = exc_break.qname + * except: # <<<<<<<<<<<<<< + * info.pydev_message = exc_break.qname.encode("utf-8") + * break */ - goto __pyx_L210_break; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 1489, __pyx_L55_except_error) + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); - /* "_pydevd_bundle/pydevd_cython.pyx":1232 - * f = frame - * while f is not None: - * if self._is_same_frame(stop_frame, f): # <<<<<<<<<<<<<< - * break - * f = f.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":1490 + * info.pydev_message = exc_break.qname + * except: + * info.pydev_message = exc_break.qname.encode("utf-8") # <<<<<<<<<<<<<< + * break + * */ + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc_break, __pyx_n_s_qname); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1490, __pyx_L55_except_error) + __Pyx_GOTREF(__pyx_t_13); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_encode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1490, __pyx_L55_except_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_17))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_17); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_17); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_17, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_kp_s_utf_8}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_17, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1490, __pyx_L55_except_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + } + if (!(likely(PyString_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 1490, __pyx_L55_except_error) + __Pyx_GIVEREF(__pyx_t_5); + __Pyx_GOTREF(__pyx_v_info->pydev_message); + __Pyx_DECREF(__pyx_v_info->pydev_message); + __pyx_v_info->pydev_message = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L54_exception_handled; } - /* "_pydevd_bundle/pydevd_cython.pyx":1234 - * if self._is_same_frame(stop_frame, f): - * break - * f = f.f_back # <<<<<<<<<<<<<< - * else: - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1487 + * if should_stop: + * exception_breakpoint = exc_break + * try: # <<<<<<<<<<<<<< + * info.pydev_message = exc_break.qname + * except: */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1234, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_2); - __pyx_t_2 = 0; + __pyx_L55_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + goto __pyx_L1_error; + __pyx_L54_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_9, __pyx_t_8); + __pyx_L60_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1236 - * f = f.f_back - * else: - * stop = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1491 + * except: + * info.pydev_message = exc_break.qname.encode("utf-8") + * break # <<<<<<<<<<<<<< * - * if plugin_manager is not None: + * if should_stop: */ - /*else*/ { - __pyx_v_stop = 0; - } - __pyx_L210_break:; + goto __pyx_L31_break; - /* "_pydevd_bundle/pydevd_cython.pyx":1228 + /* "_pydevd_bundle/pydevd_cython.pyx":1485 + * should_stop = False * - * if stop: - * if step_cmd == 206: # <<<<<<<<<<<<<< - * # i.e.: Check if we're stepping into the proper context. - * f = frame + * if should_stop: # <<<<<<<<<<<<<< + * exception_breakpoint = exc_break + * try: */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1227 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1433 + * check_excs.append((exc_break_caught, False)) * - * if stop: # <<<<<<<<<<<<<< - * if step_cmd == 206: - * # i.e.: Check if we're stepping into the proper context. + * for exc_break, is_user_uncaught in check_excs: # <<<<<<<<<<<<<< + * # Initially mark that it should stop and then go into exclusions. + * should_stop = True */ } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L63_for_end; + __pyx_L31_break:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L63_for_end; + __pyx_L63_for_end:; + } + __pyx_L22:; - /* "_pydevd_bundle/pydevd_cython.pyx":1238 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1405 + * pydev_log.exception() * - * if plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) - * if result: + * if not should_stop: # <<<<<<<<<<<<<< + * # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). + * if exception == SystemExit and py_db.ignore_system_exit_code(value): */ - __pyx_t_9 = (__pyx_v_plugin_manager != Py_None); - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":1239 + /* "_pydevd_bundle/pydevd_cython.pyx":1493 + * break * - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) # <<<<<<<<<<<<<< - * if result: - * stop, plugin_stop = result + * if should_stop: # <<<<<<<<<<<<<< + * # Always add exception to frame (must remove later after we proceed). + * add_exception_to_frame(frame, (exception, value, trace)) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_into); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_t_8}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_t_8}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - { - __pyx_t_7 = PyTuple_New(6+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_10, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_10, __pyx_v_self->_args); - __Pyx_INCREF(__pyx_v_stop_info); - __Pyx_GIVEREF(__pyx_v_stop_info); - PyTuple_SET_ITEM(__pyx_t_7, 4+__pyx_t_10, __pyx_v_stop_info); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_7, 5+__pyx_t_10, __pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1239, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_2); - __pyx_t_2 = 0; + if (__pyx_v_should_stop) { - /* "_pydevd_bundle/pydevd_cython.pyx":1240 - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) - * if result: # <<<<<<<<<<<<<< - * stop, plugin_stop = result + /* "_pydevd_bundle/pydevd_cython.pyx":1495 + * if should_stop: + * # Always add exception to frame (must remove later after we proceed). + * add_exception_to_frame(frame, (exception, value, trace)) # <<<<<<<<<<<<<< * + * if exception_breakpoint is not None and exception_breakpoint.expression is not None: */ - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1240, __pyx_L170_error) - if (__pyx_t_11) { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_add_exception_to_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_exception); + __Pyx_GIVEREF(__pyx_v_exception); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_exception)) __PYX_ERR(0, 1495, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_value); + __Pyx_GIVEREF(__pyx_v_value); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_value)) __PYX_ERR(0, 1495, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_trace); + __Pyx_GIVEREF(__pyx_v_trace); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_trace)) __PYX_ERR(0, 1495, __pyx_L1_error); + __pyx_t_12 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_v_frame, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 2+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1241 - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) - * if result: - * stop, plugin_stop = result # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1497 + * add_exception_to_frame(frame, (exception, value, trace)) * - * elif step_cmd in (108, 159): - */ - if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { - PyObject* sequence = __pyx_v_result; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1241, __pyx_L170_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_3 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1241, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1241, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1241, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_15 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_2 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L214_unpacking_failed; - __Pyx_GOTREF(__pyx_t_2); - index = 1; __pyx_t_3 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L214_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1241, __pyx_L170_error) - __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L215_unpacking_done; - __pyx_L214_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_15 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1241, __pyx_L170_error) - __pyx_L215_unpacking_done:; - } - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1241, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_stop = __pyx_t_11; - __Pyx_DECREF_SET(__pyx_v_plugin_stop, __pyx_t_3); - __pyx_t_3 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1240 - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) - * if result: # <<<<<<<<<<<<<< - * stop, plugin_stop = result + * if exception_breakpoint is not None and exception_breakpoint.expression is not None: # <<<<<<<<<<<<<< + * py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) * */ - } + __pyx_t_7 = (__pyx_v_exception_breakpoint != Py_None); + if (__pyx_t_7) { + } else { + __pyx_t_1 = __pyx_t_7; + goto __pyx_L66_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_exception_breakpoint, __pyx_n_s_expression); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1497, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = (__pyx_t_3 != Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_7; + __pyx_L66_bool_binop_done:; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1238 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1498 * - * if plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) - * if result: + * if exception_breakpoint is not None and exception_breakpoint.expression is not None: + * py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) # <<<<<<<<<<<<<< + * + * return should_stop, frame, maybe_user_uncaught_exc_info */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_expression); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_exception_breakpoint, ((PyObject *)__pyx_v_info), __pyx_v_frame}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_11, 3+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1174 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1497 + * add_exception_to_frame(frame, (exception, value, trace)) * - * elif step_cmd in (107, 144, 206): # <<<<<<<<<<<<<< - * force_check_project_scope = step_cmd == 144 - * if is_line: - */ - goto __pyx_L179; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1243 - * stop, plugin_stop = result + * if exception_breakpoint is not None and exception_breakpoint.expression is not None: # <<<<<<<<<<<<<< + * py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) * - * elif step_cmd in (108, 159): # <<<<<<<<<<<<<< - * # Note: when dealing with a step over my code it's the same as a step over (the - * # difference is that when we return from a frame in one we go to regular step */ - switch (__pyx_v_step_cmd) { - case 0x6C: - case 0x9F: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; } - __pyx_t_9 = (__pyx_t_11 != 0); - if (__pyx_t_9) { - /* "_pydevd_bundle/pydevd_cython.pyx":1247 - * # difference is that when we return from a frame in one we go to regular step - * # into and in the other we go to a step into my code). - * stop = self._is_same_frame(stop_frame, frame) and is_line # <<<<<<<<<<<<<< - * # Note: don't stop on a return for step over, only for line events - * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. + /* "_pydevd_bundle/pydevd_cython.pyx":1493 + * break + * + * if should_stop: # <<<<<<<<<<<<<< + * # Always add exception to frame (must remove later after we proceed). + * add_exception_to_frame(frame, (exception, value, trace)) */ - __pyx_t_3 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1247, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1247, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_11) { - } else { - __pyx_t_9 = __pyx_t_11; - goto __pyx_L216_bool_binop_done; - } - __pyx_t_11 = (__pyx_v_is_line != 0); - __pyx_t_9 = __pyx_t_11; - __pyx_L216_bool_binop_done:; - __pyx_v_stop = __pyx_t_9; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1251 - * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. + /* "_pydevd_bundle/pydevd_cython.pyx":1392 + * exception, value, trace = arg + * + * if trace is not None and hasattr(trace, "tb_next"): # <<<<<<<<<<<<<< + * # on jython trace is None on the first event and it may not have a tb_next. * - * if plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) - * if result: */ - __pyx_t_9 = (__pyx_v_plugin_manager != Py_None); - __pyx_t_11 = (__pyx_t_9 != 0); - if (__pyx_t_11) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":1252 + /* "_pydevd_bundle/pydevd_cython.pyx":1389 + * + * # 2 = 2 + * if info.pydev_state != 2: # and breakpoint is not None: # <<<<<<<<<<<<<< + * exception, value, trace = arg * - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) # <<<<<<<<<<<<<< - * if result: - * stop, plugin_stop = result */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_over); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[7] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_t_7}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_10, 6+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } else - #endif - { - __pyx_t_4 = PyTuple_New(6+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_10, __pyx_v_self->_args); - __Pyx_INCREF(__pyx_v_stop_info); - __Pyx_GIVEREF(__pyx_v_stop_info); - PyTuple_SET_ITEM(__pyx_t_4, 4+__pyx_t_10, __pyx_v_stop_info); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_4, 5+__pyx_t_10, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1253 - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) - * if result: # <<<<<<<<<<<<<< - * stop, plugin_stop = result + /* "_pydevd_bundle/pydevd_cython.pyx":1500 + * py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) + * + * return should_stop, frame, maybe_user_uncaught_exc_info # <<<<<<<<<<<<<< + * * */ - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1253, __pyx_L170_error) - if (__pyx_t_11) { + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_should_stop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1500, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1500, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 1500, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_frame); + __Pyx_GIVEREF(__pyx_v_frame); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_frame)) __PYX_ERR(0, 1500, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_maybe_user_uncaught_exc_info); + __Pyx_GIVEREF(__pyx_v_maybe_user_uncaught_exc_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_maybe_user_uncaught_exc_info)) __PYX_ERR(0, 1500, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1254 - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) - * if result: - * stop, plugin_stop = result # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1377 * - * elif step_cmd == 128: + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef bint was_just_raised; */ - if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { - PyObject* sequence = __pyx_v_result; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1254, __pyx_L170_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_2 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1254, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1254, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - #endif - } else { - Py_ssize_t index = -1; - __pyx_t_4 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1254, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_15 = Py_TYPE(__pyx_t_4)->tp_iternext; - index = 0; __pyx_t_3 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L220_unpacking_failed; - __Pyx_GOTREF(__pyx_t_3); - index = 1; __pyx_t_2 = __pyx_t_15(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L220_unpacking_failed; - __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1254, __pyx_L170_error) - __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L221_unpacking_done; - __pyx_L220_unpacking_failed:; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_15 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1254, __pyx_L170_error) - __pyx_L221_unpacking_done:; - } - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1254, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_stop = __pyx_t_11; - __Pyx_DECREF_SET(__pyx_v_plugin_stop, __pyx_t_2); - __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1253 - * if plugin_manager is not None: - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) - * if result: # <<<<<<<<<<<<<< - * stop, plugin_stop = result + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.should_stop_on_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_check_excs); + __Pyx_XDECREF(__pyx_v_maybe_user_uncaught_exc_info); + __Pyx_XDECREF(__pyx_v_exception); + __Pyx_XDECREF(__pyx_v_value); + __Pyx_XDECREF(__pyx_v_trace); + __Pyx_XDECREF(__pyx_v_exception_breakpoint); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_exc_break_user); + __Pyx_XDECREF(__pyx_v_exc_break_caught); + __Pyx_XDECREF(__pyx_v_exc_break); + __Pyx_XDECREF(__pyx_v_is_user_uncaught); + __Pyx_XDECREF(__pyx_v_exc_info); + __Pyx_XDECREF(__pyx_v_lines); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_bundle/pydevd_cython.pyx":1510 * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def handle_exception(py_db, thread, frame, arg, str exception_type): # <<<<<<<<<<<<<< + * cdef bint stopped; + * cdef tuple abs_real_path_and_base; */ - } - /* "_pydevd_bundle/pydevd_cython.pyx":1251 - * # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. - * - * if plugin_manager is not None: # <<<<<<<<<<<<<< - * result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) - * if result: - */ - } +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15handle_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_15handle_exception = {"handle_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15handle_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15handle_exception(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_thread = 0; + PyObject *__pyx_v_frame = 0; + PyObject *__pyx_v_arg = 0; + PyObject *__pyx_v_exception_type = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("handle_exception (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_thread,&__pyx_n_s_frame,&__pyx_n_s_arg,&__pyx_n_s_exception_type,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("handle_exception", 1, 5, 5, 1); __PYX_ERR(0, 1510, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("handle_exception", 1, 5, 5, 2); __PYX_ERR(0, 1510, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("handle_exception", 1, 5, 5, 3); __PYX_ERR(0, 1510, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_exception_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("handle_exception", 1, 5, 5, 4); __PYX_ERR(0, 1510, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "handle_exception") < 0)) __PYX_ERR(0, 1510, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_py_db = values[0]; + __pyx_v_thread = values[1]; + __pyx_v_frame = values[2]; + __pyx_v_arg = values[3]; + __pyx_v_exception_type = ((PyObject*)values[4]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("handle_exception", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1510, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_exception_type), (&PyString_Type), 1, "exception_type", 1))) __PYX_ERR(0, 1510, __pyx_L1_error) + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_14handle_exception(__pyx_self, __pyx_v_py_db, __pyx_v_thread, __pyx_v_frame, __pyx_v_arg, __pyx_v_exception_type); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14handle_exception(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_thread, PyObject *__pyx_v_frame, PyObject *__pyx_v_arg, PyObject *__pyx_v_exception_type) { + int __pyx_v_stopped; + PyObject *__pyx_v_abs_real_path_and_base = 0; + PyObject *__pyx_v_absolute_filename = 0; + PyObject *__pyx_v_canonical_normalized_filename = 0; + PyObject *__pyx_v_lines_ignored = 0; + PyObject *__pyx_v_frame_id_to_frame = 0; + PyObject *__pyx_v_merged = 0; + PyObject *__pyx_v_trace_obj = 0; + PyObject *__pyx_v_initial_trace_obj = NULL; + PyObject *__pyx_v_check_trace_obj = NULL; + PyObject *__pyx_v_curr_stat = NULL; + PyObject *__pyx_v_last_stat = NULL; + PyObject *__pyx_v_from_user_input = NULL; + PyObject *__pyx_v_exc_lineno = NULL; + PyObject *__pyx_v_line = NULL; + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + int __pyx_t_16; + int __pyx_t_17; + char const *__pyx_t_18; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + PyObject *__pyx_t_24 = NULL; + char const *__pyx_t_25; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("handle_exception", 0); + __Pyx_INCREF(__pyx_v_py_db); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_INCREF(__pyx_v_frame); - /* "_pydevd_bundle/pydevd_cython.pyx":1243 - * stop, plugin_stop = result - * - * elif step_cmd in (108, 159): # <<<<<<<<<<<<<< - * # Note: when dealing with a step over my code it's the same as a step over (the - * # difference is that when we return from a frame in one we go to regular step + /* "_pydevd_bundle/pydevd_cython.pyx":1522 + * # def handle_exception(py_db, thread, frame, arg, exception_type): + * # ENDIF + * stopped = False # <<<<<<<<<<<<<< + * try: + * # print('handle_exception', frame.f_lineno, frame.f_code.co_name) */ - goto __pyx_L179; - } + __pyx_v_stopped = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1256 - * stop, plugin_stop = result + /* "_pydevd_bundle/pydevd_cython.pyx":1523 + * # ENDIF + * stopped = False + * try: # <<<<<<<<<<<<<< + * # print('handle_exception', frame.f_lineno, frame.f_code.co_name) * - * elif step_cmd == 128: # <<<<<<<<<<<<<< - * stop = False - * back = frame.f_back */ - __pyx_t_11 = ((__pyx_v_step_cmd == 0x80) != 0); - if (__pyx_t_11) { + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1257 + /* "_pydevd_bundle/pydevd_cython.pyx":1527 * - * elif step_cmd == 128: - * stop = False # <<<<<<<<<<<<<< - * back = frame.f_back - * if self._is_same_frame(stop_frame, frame) and is_return: - */ - __pyx_v_stop = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1258 - * elif step_cmd == 128: - * stop = False - * back = frame.f_back # <<<<<<<<<<<<<< - * if self._is_same_frame(stop_frame, frame) and is_return: - * # We're exiting the smart step into initial frame (so, we probably didn't find our target). - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1258, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_back = __pyx_t_2; - __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1259 - * stop = False - * back = frame.f_back - * if self._is_same_frame(stop_frame, frame) and is_return: # <<<<<<<<<<<<<< - * # We're exiting the smart step into initial frame (so, we probably didn't find our target). - * stop = True - */ - __pyx_t_2 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1259, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1259, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L223_bool_binop_done; - } - __pyx_t_9 = (__pyx_v_is_return != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L223_bool_binop_done:; - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1261 - * if self._is_same_frame(stop_frame, frame) and is_return: - * # We're exiting the smart step into initial frame (so, we probably didn't find our target). - * stop = True # <<<<<<<<<<<<<< + * # We have 3 things in arg: exception type, description, traceback object + * trace_obj = arg[2] # <<<<<<<<<<<<<< * - * elif self._is_same_frame(stop_frame, back) and is_line: - */ - __pyx_v_stop = 1; - - /* "_pydevd_bundle/pydevd_cython.pyx":1259 - * stop = False - * back = frame.f_back - * if self._is_same_frame(stop_frame, frame) and is_return: # <<<<<<<<<<<<<< - * # We're exiting the smart step into initial frame (so, we probably didn't find our target). - * stop = True + * initial_trace_obj = trace_obj */ - goto __pyx_L222; - } + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_arg, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_trace_obj = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1263 - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1529 + * trace_obj = arg[2] * - * elif self._is_same_frame(stop_frame, back) and is_line: # <<<<<<<<<<<<<< - * if info.pydev_smart_child_offset != -1: - * # i.e.: in this case, we're not interested in the pause in the parent, rather + * initial_trace_obj = trace_obj # <<<<<<<<<<<<<< + * if trace_obj.tb_next is None and trace_obj.tb_frame is frame: + * # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). */ - __pyx_t_2 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1263, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1263, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L225_bool_binop_done; - } - __pyx_t_9 = (__pyx_v_is_line != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L225_bool_binop_done:; - if (__pyx_t_11) { + __Pyx_INCREF(__pyx_v_trace_obj); + __pyx_v_initial_trace_obj = __pyx_v_trace_obj; - /* "_pydevd_bundle/pydevd_cython.pyx":1264 + /* "_pydevd_bundle/pydevd_cython.pyx":1530 * - * elif self._is_same_frame(stop_frame, back) and is_line: - * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< - * # i.e.: in this case, we're not interested in the pause in the parent, rather - * # we're interested in the pause in the child (when the parent is at the proper place). + * initial_trace_obj = trace_obj + * if trace_obj.tb_next is None and trace_obj.tb_frame is frame: # <<<<<<<<<<<<<< + * # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). + * pass */ - __pyx_t_11 = ((__pyx_v_info->pydev_smart_child_offset != -1L) != 0); - if (__pyx_t_11) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_t_1 == Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_t_1 == __pyx_v_frame); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __pyx_t_3; + __pyx_L7_bool_binop_done:; + if (__pyx_t_2) { + goto __pyx_L6; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1267 - * # i.e.: in this case, we're not interested in the pause in the parent, rather - * # we're interested in the pause in the child (when the parent is at the proper place). - * stop = False # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1535 + * else: + * # Get the trace_obj from where the exception was raised... + * while trace_obj.tb_next is not None: # <<<<<<<<<<<<<< + * trace_obj = trace_obj.tb_next * - * else: */ - __pyx_v_stop = 0; + /*else*/ { + while (1) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_2) break; - /* "_pydevd_bundle/pydevd_cython.pyx":1264 + /* "_pydevd_bundle/pydevd_cython.pyx":1536 + * # Get the trace_obj from where the exception was raised... + * while trace_obj.tb_next is not None: + * trace_obj = trace_obj.tb_next # <<<<<<<<<<<<<< * - * elif self._is_same_frame(stop_frame, back) and is_line: - * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< - * # i.e.: in this case, we're not interested in the pause in the parent, rather - * # we're interested in the pause in the child (when the parent is at the proper place). + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: */ - goto __pyx_L227; - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_next); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1536, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_trace_obj, __pyx_t_1); + __pyx_t_1 = 0; + } + } + __pyx_L6:; - /* "_pydevd_bundle/pydevd_cython.pyx":1270 - * - * else: - * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1538 + * trace_obj = trace_obj.tb_next * - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: # <<<<<<<<<<<<<< + * for check_trace_obj in (initial_trace_obj, trace_obj): + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) */ - /*else*/ { - __pyx_t_10 = __pyx_v_info->pydev_smart_parent_offset; - __pyx_v_pydev_smart_parent_offset = __pyx_t_10; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_ignore_exceptions_thrown_in_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1538, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1538, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1272 - * pydev_smart_parent_offset = info.pydev_smart_parent_offset + /* "_pydevd_bundle/pydevd_cython.pyx":1539 * - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: - * # Preferred mode (when the smart step into variants are available + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: + * for check_trace_obj in (initial_trace_obj, trace_obj): # <<<<<<<<<<<<<< + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + * absolute_filename = abs_real_path_and_base[0] */ - __pyx_t_2 = __pyx_v_info->pydev_smart_step_into_variants; - __Pyx_INCREF(__pyx_t_2); - __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1539, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_initial_trace_obj); + __Pyx_GIVEREF(__pyx_v_initial_trace_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_initial_trace_obj)) __PYX_ERR(0, 1539, __pyx_L4_error); + __Pyx_INCREF(__pyx_v_trace_obj); + __Pyx_GIVEREF(__pyx_v_trace_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_trace_obj)) __PYX_ERR(0, 1539, __pyx_L4_error); + __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); + __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (__pyx_t_5 >= 2) break; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1539, __pyx_L4_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1539, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, __pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1273 - * - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< - * # Preferred mode (when the smart step into variants are available - * # and the offset is set). + /* "_pydevd_bundle/pydevd_cython.pyx":1540 + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: + * for check_trace_obj in (initial_trace_obj, trace_obj): + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) # <<<<<<<<<<<<<< + * absolute_filename = abs_real_path_and_base[0] + * canonical_normalized_filename = abs_real_path_and_base[1] */ - __pyx_t_9 = ((__pyx_v_pydev_smart_parent_offset >= 0) != 0); - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L229_bool_binop_done; - } - __pyx_t_9 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L229_bool_binop_done:; - if (__pyx_t_11) { + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1540, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1540, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1540, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 1540, __pyx_L4_error) + __Pyx_XDECREF_SET(__pyx_v_abs_real_path_and_base, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1276 - * # Preferred mode (when the smart step into variants are available - * # and the offset is set). - * stop = get_smart_step_into_variant_from_frame_offset(back.f_lasti, pydev_smart_step_into_variants) is \ # <<<<<<<<<<<<<< - * get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + /* "_pydevd_bundle/pydevd_cython.pyx":1541 + * for check_trace_obj in (initial_trace_obj, trace_obj): + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + * absolute_filename = abs_real_path_and_base[0] # <<<<<<<<<<<<<< + * canonical_normalized_filename = abs_real_path_and_base[1] * */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_8 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_t_4); - __Pyx_INCREF(__pyx_v_pydev_smart_step_into_variants); - __Pyx_GIVEREF(__pyx_v_pydev_smart_step_into_variants); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_v_pydev_smart_step_into_variants); - __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1276, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_v_abs_real_path_and_base == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1541, __pyx_L4_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_real_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1541, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 1541, __pyx_L4_error) + __Pyx_XDECREF_SET(__pyx_v_absolute_filename, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1277 - * # and the offset is set). - * stop = get_smart_step_into_variant_from_frame_offset(back.f_lasti, pydev_smart_step_into_variants) is \ - * get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1542 + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + * absolute_filename = abs_real_path_and_base[0] + * canonical_normalized_filename = abs_real_path_and_base[1] # <<<<<<<<<<<<<< * - * else: + * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_t_4); - __Pyx_INCREF(__pyx_v_pydev_smart_step_into_variants); - __Pyx_GIVEREF(__pyx_v_pydev_smart_step_into_variants); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_v_pydev_smart_step_into_variants); - __pyx_t_4 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = (__pyx_t_2 == __pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_stop = __pyx_t_11; + if (unlikely(__pyx_v_abs_real_path_and_base == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1542, __pyx_L4_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_real_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1542, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 1542, __pyx_L4_error) + __Pyx_XDECREF_SET(__pyx_v_canonical_normalized_filename, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1273 + /* "_pydevd_bundle/pydevd_cython.pyx":1544 + * canonical_normalized_filename = abs_real_path_and_base[1] * - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< - * # Preferred mode (when the smart step into variants are available - * # and the offset is set). + * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) # <<<<<<<<<<<<<< + * if lines_ignored is None: + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} */ - goto __pyx_L228; - } + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_filename_to_lines_where_exceptio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1544, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1544, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_canonical_normalized_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1544, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 1544, __pyx_L4_error) + __Pyx_XDECREF_SET(__pyx_v_lines_ignored, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1281 - * else: - * # Only the name/line is available, so, check that. - * curr_func_name = frame.f_code.co_name # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1545 * - * # global context is set with an empty name - */ - /*else*/ { - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1281, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1281, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 1281, __pyx_L170_error) - __Pyx_XDECREF_SET(__pyx_v_curr_func_name, ((PyObject*)__pyx_t_2)); - __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1284 + * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if lines_ignored is None: # <<<<<<<<<<<<<< + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} * - * # global context is set with an empty name - * if curr_func_name in ('?', '') or curr_func_name is None: # <<<<<<<<<<<<<< - * curr_func_name = '' - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: - */ - __Pyx_INCREF(__pyx_v_curr_func_name); - __pyx_t_21 = __pyx_v_curr_func_name; - __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_t_21, __pyx_kp_s__3, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1284, __pyx_L170_error) - __pyx_t_29 = (__pyx_t_14 != 0); - if (!__pyx_t_29) { - } else { - __pyx_t_9 = __pyx_t_29; - goto __pyx_L234_bool_binop_done; - } - __pyx_t_29 = (__Pyx_PyString_Equals(__pyx_t_21, __pyx_kp_s_module, Py_EQ)); if (unlikely(__pyx_t_29 < 0)) __PYX_ERR(0, 1284, __pyx_L170_error) - __pyx_t_14 = (__pyx_t_29 != 0); - __pyx_t_9 = __pyx_t_14; - __pyx_L234_bool_binop_done:; - __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0; - __pyx_t_14 = (__pyx_t_9 != 0); - if (!__pyx_t_14) { - } else { - __pyx_t_11 = __pyx_t_14; - goto __pyx_L232_bool_binop_done; - } - __pyx_t_14 = (__pyx_v_curr_func_name == ((PyObject*)Py_None)); - __pyx_t_9 = (__pyx_t_14 != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L232_bool_binop_done:; - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1285 - * # global context is set with an empty name - * if curr_func_name in ('?', '') or curr_func_name is None: - * curr_func_name = '' # <<<<<<<<<<<<<< - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: - * stop = True */ - __Pyx_INCREF(__pyx_kp_s_); - __Pyx_DECREF_SET(__pyx_v_curr_func_name, __pyx_kp_s_); + __pyx_t_2 = (__pyx_v_lines_ignored == ((PyObject*)Py_None)); + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1284 + /* "_pydevd_bundle/pydevd_cython.pyx":1546 + * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if lines_ignored is None: + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} # <<<<<<<<<<<<<< * - * # global context is set with an empty name - * if curr_func_name in ('?', '') or curr_func_name is None: # <<<<<<<<<<<<<< - * curr_func_name = '' - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + * try: */ - } + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1546, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_lines_ignored, __pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_filename_to_lines_where_exceptio); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1546, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_v_canonical_normalized_filename, __pyx_t_1) < 0))) __PYX_ERR(0, 1546, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1286 - * if curr_func_name in ('?', '') or curr_func_name is None: - * curr_func_name = '' - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1545 + * + * lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if lines_ignored is None: # <<<<<<<<<<<<<< + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} * */ - __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_curr_func_name, __pyx_v_info->pydev_func_name, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1286, __pyx_L170_error) - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { - } else { - __pyx_t_11 = __pyx_t_14; - goto __pyx_L237_bool_binop_done; - } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_stop_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1286, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_next_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1286, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1286, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1286, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = __pyx_t_14; - __pyx_L237_bool_binop_done:; - if (__pyx_t_11) { + } - /* "_pydevd_bundle/pydevd_cython.pyx":1287 - * curr_func_name = '' - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: - * stop = True # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1548 + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} * - * if not stop: + * try: # <<<<<<<<<<<<<< + * curr_stat = os.stat(absolute_filename) + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) */ - __pyx_v_stop = 1; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1286 - * if curr_func_name in ('?', '') or curr_func_name is None: - * curr_func_name = '' - * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1549 * + * try: + * curr_stat = os.stat(absolute_filename) # <<<<<<<<<<<<<< + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + * except: */ - } + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1549, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stat); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1549, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; } - __pyx_L228:; } - __pyx_L227:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1289 - * stop = True - * - * if not stop: # <<<<<<<<<<<<<< - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. - */ - __pyx_t_11 = ((!(__pyx_v_stop != 0)) != 0); - if (__pyx_t_11) { + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_absolute_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_curr_stat, __pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1292 - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< - * - * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: + /* "_pydevd_bundle/pydevd_cython.pyx":1550 + * try: + * curr_stat = os.stat(absolute_filename) + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) # <<<<<<<<<<<<<< + * except: + * curr_stat = None */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_8 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1292, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L174_try_return; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_curr_stat, __pyx_n_s_st_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_curr_stat, __pyx_n_s_st_mtime); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1550, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1550, __pyx_L15_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L15_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6)) __PYX_ERR(0, 1550, __pyx_L15_error); + __pyx_t_1 = 0; + __pyx_t_6 = 0; + __Pyx_DECREF_SET(__pyx_v_curr_stat, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1289 - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1548 + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} * - * if not stop: # <<<<<<<<<<<<<< - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. + * try: # <<<<<<<<<<<<<< + * curr_stat = os.stat(absolute_filename) + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) */ - } + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L22_try_end; + __pyx_L15_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1263 - * stop = True + /* "_pydevd_bundle/pydevd_cython.pyx":1551 + * curr_stat = os.stat(absolute_filename) + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + * except: # <<<<<<<<<<<<<< + * curr_stat = None * - * elif self._is_same_frame(stop_frame, back) and is_line: # <<<<<<<<<<<<<< - * if info.pydev_smart_child_offset != -1: - * # i.e.: in this case, we're not interested in the pause in the parent, rather */ - goto __pyx_L222; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1294 - * return None if is_call else NO_FTRACE + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(0, 1551, __pyx_L17_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_1); + + /* "_pydevd_bundle/pydevd_cython.pyx":1552 + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + * except: + * curr_stat = None # <<<<<<<<<<<<<< * - * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: # <<<<<<<<<<<<<< - * # Ok, we have to track 2 stops at this point, the parent and the child offset. - * # This happens when handling a step into which targets a function inside a list comprehension + * last_stat = filename_to_stat_info.get(absolute_filename) */ - __pyx_t_14 = (__pyx_v_back != Py_None); - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L240_bool_binop_done; - } - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1294, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1294, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1294, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L240_bool_binop_done; + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_curr_stat, Py_None); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L16_exception_handled; } - __pyx_t_9 = (__pyx_v_is_line != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L240_bool_binop_done:; - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1298 - * # This happens when handling a step into which targets a function inside a list comprehension - * # or generator (in which case an intermediary frame is created due to an internal function call). - * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< - * pydev_smart_child_offset = info.pydev_smart_child_offset - * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) - */ - __pyx_t_10 = __pyx_v_info->pydev_smart_parent_offset; - __pyx_v_pydev_smart_parent_offset = __pyx_t_10; - - /* "_pydevd_bundle/pydevd_cython.pyx":1299 - * # or generator (in which case an intermediary frame is created due to an internal function call). - * pydev_smart_parent_offset = info.pydev_smart_parent_offset - * pydev_smart_child_offset = info.pydev_smart_child_offset # <<<<<<<<<<<<<< - * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) - * # print('parent f_lasti', back.f_back.f_lasti) - */ - __pyx_t_10 = __pyx_v_info->pydev_smart_child_offset; - __pyx_v_pydev_smart_child_offset = __pyx_t_10; - - /* "_pydevd_bundle/pydevd_cython.pyx":1303 - * # print('parent f_lasti', back.f_back.f_lasti) - * # print('child f_lasti', back.f_lasti) - * stop = False # <<<<<<<<<<<<<< - * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants - */ - __pyx_v_stop = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1304 - * # print('child f_lasti', back.f_lasti) - * stop = False - * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + /* "_pydevd_bundle/pydevd_cython.pyx":1548 + * lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} * + * try: # <<<<<<<<<<<<<< + * curr_stat = os.stat(absolute_filename) + * curr_stat = (curr_stat.st_size, curr_stat.st_mtime) */ - __pyx_t_9 = ((__pyx_v_pydev_smart_child_offset >= 0) != 0); - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L244_bool_binop_done; - } - __pyx_t_9 = ((__pyx_v_pydev_smart_child_offset >= 0) != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L244_bool_binop_done:; - if (__pyx_t_11) { + __pyx_L17_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L4_error; + __pyx_L16_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_L22_try_end:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1305 - * stop = False - * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1554 + * curr_stat = None * - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + * last_stat = filename_to_stat_info.get(absolute_filename) # <<<<<<<<<<<<<< + * if last_stat != curr_stat: + * filename_to_stat_info[absolute_filename] = curr_stat */ - __pyx_t_3 = __pyx_v_info->pydev_smart_step_into_variants; - __Pyx_INCREF(__pyx_t_3); - __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_filename_to_stat_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1554, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1554, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_absolute_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1554, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_last_stat, __pyx_t_1); + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1307 - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + /* "_pydevd_bundle/pydevd_cython.pyx":1555 * - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< - * # Note that we don't really check the parent offset, only the offset of - * # the child (because this is a generator, the parent may have moved forward + * last_stat = filename_to_stat_info.get(absolute_filename) + * if last_stat != curr_stat: # <<<<<<<<<<<<<< + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() */ - __pyx_t_9 = ((__pyx_v_pydev_smart_parent_offset >= 0) != 0); - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L247_bool_binop_done; - } - __pyx_t_9 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); - __pyx_t_11 = __pyx_t_9; - __pyx_L247_bool_binop_done:; - if (__pyx_t_11) { + __pyx_t_1 = PyObject_RichCompare(__pyx_v_last_stat, __pyx_v_curr_stat, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1555, __pyx_L4_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1555, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1312 - * # already -- and that's ok, so, we just check that the parent frame - * # matches in this case). - * smart_step_into_variant = get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) # <<<<<<<<<<<<<< - * # print('matched parent offset', pydev_smart_parent_offset) - * # Ok, now, check the child variant + /* "_pydevd_bundle/pydevd_cython.pyx":1556 + * last_stat = filename_to_stat_info.get(absolute_filename) + * if last_stat != curr_stat: + * filename_to_stat_info[absolute_filename] = curr_stat # <<<<<<<<<<<<<< + * lines_ignored.clear() + * try: */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_2, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_2, __pyx_v_pydev_smart_step_into_variants}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else - #endif - { - __pyx_t_4 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_1) { - __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL; - } - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_t_2); - __Pyx_INCREF(__pyx_v_pydev_smart_step_into_variants); - __Pyx_GIVEREF(__pyx_v_pydev_smart_step_into_variants); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_v_pydev_smart_step_into_variants); - __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_smart_step_into_variant = __pyx_t_3; - __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_filename_to_stat_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1556, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_absolute_filename, __pyx_v_curr_stat) < 0))) __PYX_ERR(0, 1556, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1315 - * # print('matched parent offset', pydev_smart_parent_offset) - * # Ok, now, check the child variant - * children_variants = smart_step_into_variant.children_variants # <<<<<<<<<<<<<< - * stop = children_variants and ( - * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ + /* "_pydevd_bundle/pydevd_cython.pyx":1557 + * if last_stat != curr_stat: + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() # <<<<<<<<<<<<<< + * try: + * linecache.checkcache(absolute_filename) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_smart_step_into_variant, __pyx_n_s_children_variants); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_children_variants = __pyx_t_3; - __pyx_t_3 = 0; + if (unlikely(__pyx_v_lines_ignored == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear"); + __PYX_ERR(0, 1557, __pyx_L4_error) + } + __pyx_t_13 = __Pyx_PyDict_Clear(__pyx_v_lines_ignored); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1557, __pyx_L4_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1316 - * # Ok, now, check the child variant - * children_variants = smart_step_into_variant.children_variants - * stop = children_variants and ( # <<<<<<<<<<<<<< - * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ - * get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + /* "_pydevd_bundle/pydevd_cython.pyx":1558 + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() + * try: # <<<<<<<<<<<<<< + * linecache.checkcache(absolute_filename) + * except: */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_children_variants); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1316, __pyx_L170_error) - if (__pyx_t_9) { - } else { - __pyx_t_11 = __pyx_t_9; - goto __pyx_L249_bool_binop_done; - } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1317 - * children_variants = smart_step_into_variant.children_variants - * stop = children_variants and ( - * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ # <<<<<<<<<<<<<< - * get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) - * ) + /* "_pydevd_bundle/pydevd_cython.pyx":1559 + * lines_ignored.clear() + * try: + * linecache.checkcache(absolute_filename) # <<<<<<<<<<<<<< + * except: + * pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_v_children_variants}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_v_children_variants}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_t_4); - __Pyx_INCREF(__pyx_v_children_variants); - __Pyx_GIVEREF(__pyx_v_children_variants); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_v_children_variants); - __pyx_t_4 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1317, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_linecache); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1559, __pyx_L26_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_checkcache); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1559, __pyx_L26_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1318 - * stop = children_variants and ( - * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ - * get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) # <<<<<<<<<<<<<< - * ) - * # print('stop at child', stop) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1318, __pyx_L170_error) + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_absolute_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1559, __pyx_L26_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_child_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1318, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_v_children_variants}; - __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1318, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_4, __pyx_v_children_variants}; - __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1318, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } else - #endif - { - __pyx_t_7 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1318, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_10, __pyx_t_4); - __Pyx_INCREF(__pyx_v_children_variants); - __Pyx_GIVEREF(__pyx_v_children_variants); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_10, __pyx_v_children_variants); - __pyx_t_4 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1318, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = (__pyx_t_3 == __pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1317 - * children_variants = smart_step_into_variant.children_variants - * stop = children_variants and ( - * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ # <<<<<<<<<<<<<< - * get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) - * ) - */ - __pyx_t_14 = (__pyx_t_9 != 0); - __pyx_t_11 = __pyx_t_14; - __pyx_L249_bool_binop_done:; - __pyx_v_stop = __pyx_t_11; - - /* "_pydevd_bundle/pydevd_cython.pyx":1307 - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants - * - * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< - * # Note that we don't really check the parent offset, only the offset of - * # the child (because this is a generator, the parent may have moved forward - */ + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1304 - * # print('child f_lasti', back.f_lasti) - * stop = False - * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< - * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants - * + /* "_pydevd_bundle/pydevd_cython.pyx":1558 + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() + * try: # <<<<<<<<<<<<<< + * linecache.checkcache(absolute_filename) + * except: */ } + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L33_try_end; + __pyx_L26_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1322 - * # print('stop at child', stop) + /* "_pydevd_bundle/pydevd_cython.pyx":1560 + * try: + * linecache.checkcache(absolute_filename) + * except: # <<<<<<<<<<<<<< + * pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) * - * if not stop: # <<<<<<<<<<<<<< - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. */ - __pyx_t_11 = ((!(__pyx_v_stop != 0)) != 0); - if (__pyx_t_11) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1325 - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 1560, __pyx_L28_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + + /* "_pydevd_bundle/pydevd_cython.pyx":1561 + * linecache.checkcache(absolute_filename) + * except: + * pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) # <<<<<<<<<<<<<< * - * elif step_cmd in (109, 160): + * from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_8 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __pyx_t_3; - __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1561, __pyx_L28_except_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_exception); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1561, __pyx_L28_except_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_15))) { + __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15); + if (likely(__pyx_t_14)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_15, function); + __pyx_t_9 = 1; + } } - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L174_try_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":1322 - * # print('stop at child', stop) - * - * if not stop: # <<<<<<<<<<<<<< - * # In smart step into, if we didn't hit it in this frame once, that'll - * # not be the case next time either, so, disable tracing for this frame. - */ + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_14, __pyx_kp_s_Error_in_linecache_checkcache_r, __pyx_v_absolute_filename}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1561, __pyx_L28_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L27_exception_handled; } - /* "_pydevd_bundle/pydevd_cython.pyx":1294 - * return None if is_call else NO_FTRACE - * - * elif back is not None and self._is_same_frame(stop_frame, back.f_back) and is_line: # <<<<<<<<<<<<<< - * # Ok, we have to track 2 stops at this point, the parent and the child offset. - * # This happens when handling a step into which targets a function inside a list comprehension + /* "_pydevd_bundle/pydevd_cython.pyx":1558 + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() + * try: # <<<<<<<<<<<<<< + * linecache.checkcache(absolute_filename) + * except: */ + __pyx_L28_except_error:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); + goto __pyx_L4_error; + __pyx_L27_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); + __pyx_L33_try_end:; } - __pyx_L222:; - /* "_pydevd_bundle/pydevd_cython.pyx":1256 - * stop, plugin_stop = result + /* "_pydevd_bundle/pydevd_cython.pyx":1555 * - * elif step_cmd == 128: # <<<<<<<<<<<<<< - * stop = False - * back = frame.f_back + * last_stat = filename_to_stat_info.get(absolute_filename) + * if last_stat != curr_stat: # <<<<<<<<<<<<<< + * filename_to_stat_info[absolute_filename] = curr_stat + * lines_ignored.clear() */ - goto __pyx_L179; } - /* "_pydevd_bundle/pydevd_cython.pyx":1327 - * return None if is_call else NO_FTRACE - * - * elif step_cmd in (109, 160): # <<<<<<<<<<<<<< - * stop = is_return and self._is_same_frame(stop_frame, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":1563 + * pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) * + * from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) # <<<<<<<<<<<<<< + * if from_user_input: + * merged = {} */ - switch (__pyx_v_step_cmd) { - case 0x6D: - case 0xA0: - __pyx_t_11 = 1; - break; - default: - __pyx_t_11 = 0; - break; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_filename_to_lines_where_exceptio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1563, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1563, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } } - __pyx_t_14 = (__pyx_t_11 != 0); - if (__pyx_t_14) { + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_canonical_normalized_filename}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1563, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_from_user_input, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1328 - * - * elif step_cmd in (109, 160): - * stop = is_return and self._is_same_frame(stop_frame, frame) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1564 * + * from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if from_user_input: # <<<<<<<<<<<<<< + * merged = {} + * merged.update(lines_ignored) + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_from_user_input); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1564, __pyx_L4_error) + if (__pyx_t_2) { + + /* "_pydevd_bundle/pydevd_cython.pyx":1565 + * from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if from_user_input: + * merged = {} # <<<<<<<<<<<<<< + * merged.update(lines_ignored) + * # Override what we have with the related entries that the user entered + */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1565, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_merged, ((PyObject*)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1566 + * if from_user_input: + * merged = {} + * merged.update(lines_ignored) # <<<<<<<<<<<<<< + * # Override what we have with the related entries that the user entered + * merged.update(from_user_input) + */ + __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_merged, __pyx_v_lines_ignored); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1566, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1568 + * merged.update(lines_ignored) + * # Override what we have with the related entries that the user entered + * merged.update(from_user_input) # <<<<<<<<<<<<<< * else: + * merged = lines_ignored */ - __pyx_t_11 = (__pyx_v_is_return != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L252_bool_binop_done; - } - __pyx_t_8 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self->__pyx_vtab)->_is_same_frame(__pyx_v_self, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1328, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1328, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_14 = __pyx_t_11; - __pyx_L252_bool_binop_done:; - __pyx_v_stop = __pyx_t_14; + __pyx_t_7 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_merged, __pyx_v_from_user_input); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1568, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1327 - * return None if is_call else NO_FTRACE - * - * elif step_cmd in (109, 160): # <<<<<<<<<<<<<< - * stop = is_return and self._is_same_frame(stop_frame, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":1564 * + * from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + * if from_user_input: # <<<<<<<<<<<<<< + * merged = {} + * merged.update(lines_ignored) */ - goto __pyx_L179; + goto __pyx_L36; } - /* "_pydevd_bundle/pydevd_cython.pyx":1331 - * + /* "_pydevd_bundle/pydevd_cython.pyx":1570 + * merged.update(from_user_input) * else: - * stop = False # <<<<<<<<<<<<<< + * merged = lines_ignored # <<<<<<<<<<<<<< * - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): + * exc_lineno = check_trace_obj.tb_lineno */ /*else*/ { - __pyx_v_stop = 0; + __Pyx_INCREF(__pyx_v_lines_ignored); + __Pyx_XDECREF_SET(__pyx_v_merged, __pyx_v_lines_ignored); } - __pyx_L179:; + __pyx_L36:; - /* "_pydevd_bundle/pydevd_cython.pyx":1333 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1572 + * merged = lines_ignored * - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): # <<<<<<<<<<<<<< - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: + * exc_lineno = check_trace_obj.tb_lineno # <<<<<<<<<<<<<< + * + * # print ('lines ignored', lines_ignored) */ - __pyx_t_11 = (__pyx_v_stop != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L255_bool_binop_done; - } - __pyx_t_11 = ((__pyx_v_step_cmd != -1L) != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L255_bool_binop_done; - } - __pyx_t_11 = (__pyx_v_is_return != 0); - if (__pyx_t_11) { - } else { - __pyx_t_14 = __pyx_t_11; - goto __pyx_L255_bool_binop_done; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_lineno); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1572, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_XDECREF_SET(__pyx_v_exc_lineno, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1578 + * # print ('merged', merged, 'curr', exc_lineno) + * + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. # <<<<<<<<<<<<<< + * try: + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + */ + if (unlikely(__pyx_v_merged == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 1578, __pyx_L4_error) } - __pyx_t_11 = __Pyx_HasAttr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 1333, __pyx_L170_error) - __pyx_t_9 = (__pyx_t_11 != 0); - __pyx_t_14 = __pyx_t_9; - __pyx_L255_bool_binop_done:; - if (__pyx_t_14) { + __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_exc_lineno, __pyx_v_merged, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1578, __pyx_L4_error) + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1334 + /* "_pydevd_bundle/pydevd_cython.pyx":1579 * - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): - * f_code = getattr(frame.f_back, 'f_code', None) # <<<<<<<<<<<<<< - * if f_code is not None: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + * try: # <<<<<<<<<<<<<< + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * except: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1334, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_8, __pyx_n_s_f_code, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1334, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_f_code = __pyx_t_3; - __pyx_t_3 = 0; + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1335 - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: # <<<<<<<<<<<<<< - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1580 + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + * try: + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) # <<<<<<<<<<<<<< + * except: + * pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) */ - __pyx_t_14 = (__pyx_v_f_code != Py_None); - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_linecache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1580, __pyx_L38_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getline); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1580, __pyx_L38_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_check_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1580, __pyx_L38_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_f_globals); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1580, __pyx_L38_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_v_absolute_filename, __pyx_v_exc_lineno, __pyx_t_8}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 3+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1580, __pyx_L38_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_7); + __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1336 - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: # <<<<<<<<<<<<<< - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1579 * + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + * try: # <<<<<<<<<<<<<< + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * except: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } } - __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L45_try_end; + __pyx_L38_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_PYDEV_FILE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1336, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_9) { + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1337 - * if f_code is not None: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False # <<<<<<<<<<<<<< - * - * if plugin_stop: + /* "_pydevd_bundle/pydevd_cython.pyx":1581 + * try: + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * except: # <<<<<<<<<<<<<< + * pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) + * line = "" */ - __pyx_v_stop = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1336 - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: # <<<<<<<<<<<<<< - * stop = False + /*except:*/ { + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_8) < 0) __PYX_ERR(0, 1581, __pyx_L40_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_8); + + /* "_pydevd_bundle/pydevd_cython.pyx":1582 + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * except: + * pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) # <<<<<<<<<<<<<< + * line = "" * */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1335 - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: # <<<<<<<<<<<<<< - * if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: - * stop = False - */ - } + __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1582, __pyx_L40_except_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1582, __pyx_L40_except_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_15 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_kp_s_Error_in_linecache_getline_r_s_f, __pyx_v_absolute_filename, __pyx_v_exc_lineno}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 3+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1582, __pyx_L40_except_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1333 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1583 + * except: + * pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) + * line = "" # <<<<<<<<<<<<<< * - * if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): # <<<<<<<<<<<<<< - * f_code = getattr(frame.f_back, 'f_code', None) - * if f_code is not None: + * if IGNORE_EXCEPTION_TAG.match(line) is not None: */ - } + __Pyx_INCREF(__pyx_kp_s_); + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_kp_s_); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L39_exception_handled; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1339 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1579 * - * if plugin_stop: # <<<<<<<<<<<<<< - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + * try: # <<<<<<<<<<<<<< + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + * except: */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_plugin_stop); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1339, __pyx_L170_error) - if (__pyx_t_9) { + __pyx_L40_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L4_error; + __pyx_L39_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_L45_try_end:; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1340 - * - * if plugin_stop: - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) # <<<<<<<<<<<<<< - * elif stop: - * if is_line: + /* "_pydevd_bundle/pydevd_cython.pyx":1585 + * line = "" + * + * if IGNORE_EXCEPTION_TAG.match(line) is not None: # <<<<<<<<<<<<<< + * lines_ignored[exc_lineno] = 1 + * return False */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IGNORE_EXCEPTION_TAG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1585, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_match); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1585, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[8] = {__pyx_t_7, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_v_arg, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 7+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[8] = {__pyx_t_7, __pyx_v_main_debugger, __pyx_v_frame, __pyx_v_event, __pyx_v_self->_args, __pyx_v_stop_info, __pyx_v_arg, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 7+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else #endif { - __pyx_t_4 = PyTuple_New(7+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_10, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_10, __pyx_v_self->_args); - __Pyx_INCREF(__pyx_v_stop_info); - __Pyx_GIVEREF(__pyx_v_stop_info); - PyTuple_SET_ITEM(__pyx_t_4, 4+__pyx_t_10, __pyx_v_stop_info); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_4, 5+__pyx_t_10, __pyx_v_arg); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 6+__pyx_t_10, __pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1340, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_line}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1585, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } + __pyx_t_2 = (__pyx_t_8 != Py_None); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_stopped_on_plugin = __pyx_t_1; - __pyx_t_1 = 0; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1339 - * stop = False + /* "_pydevd_bundle/pydevd_cython.pyx":1586 * - * if plugin_stop: # <<<<<<<<<<<<<< - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: - */ - goto __pyx_L261; - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1341 - * if plugin_stop: - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: # <<<<<<<<<<<<<< - * if is_line: - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - */ - __pyx_t_9 = (__pyx_v_stop != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1342 - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: - * if is_line: # <<<<<<<<<<<<<< - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, frame, event, arg) + * if IGNORE_EXCEPTION_TAG.match(line) is not None: + * lines_ignored[exc_lineno] = 1 # <<<<<<<<<<<<<< + * return False + * else: */ - __pyx_t_9 = (__pyx_v_is_line != 0); - if (__pyx_t_9) { + if (unlikely(__pyx_v_lines_ignored == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1586, __pyx_L4_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_lines_ignored, __pyx_v_exc_lineno, __pyx_int_1) < 0))) __PYX_ERR(0, 1586, __pyx_L4_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1343 - * elif stop: - * if is_line: - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< - * self.do_wait_suspend(thread, frame, event, arg) - * elif is_return: # return event + /* "_pydevd_bundle/pydevd_cython.pyx":1587 + * if IGNORE_EXCEPTION_TAG.match(line) is not None: + * lines_ignored[exc_lineno] = 1 + * return False # <<<<<<<<<<<<<< + * else: + * # Put in the cache saying not to ignore */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_thread); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_original_step_cmd, __pyx_t_3) < 0) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1343, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1344 - * if is_line: - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, frame, event, arg) # <<<<<<<<<<<<<< - * elif is_return: # return event - * back = frame.f_back + /* "_pydevd_bundle/pydevd_cython.pyx":1585 + * line = "" + * + * if IGNORE_EXCEPTION_TAG.match(line) is not None: # <<<<<<<<<<<<<< + * lines_ignored[exc_lineno] = 1 + * return False */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1344, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1344, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) { - PyObject *__pyx_temp[5] = {__pyx_t_4, __pyx_v_thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1344, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - { - __pyx_t_1 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1344, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_1, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_1, 3+__pyx_t_10, __pyx_v_arg); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1344, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1342 - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: - * if is_line: # <<<<<<<<<<<<<< - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, frame, event, arg) + /* "_pydevd_bundle/pydevd_cython.pyx":1590 + * else: + * # Put in the cache saying not to ignore + * lines_ignored[exc_lineno] = 0 # <<<<<<<<<<<<<< + * else: + * # Ok, dict has it already cached, so, let's check it... */ - goto __pyx_L262; + /*else*/ { + if (unlikely(__pyx_v_lines_ignored == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1590, __pyx_L4_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_lines_ignored, __pyx_v_exc_lineno, __pyx_int_0) < 0))) __PYX_ERR(0, 1590, __pyx_L4_error) } - /* "_pydevd_bundle/pydevd_cython.pyx":1345 - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, frame, event, arg) - * elif is_return: # return event # <<<<<<<<<<<<<< - * back = frame.f_back - * if back is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1578 + * # print ('merged', merged, 'curr', exc_lineno) + * + * if exc_lineno not in merged: # Note: check on merged but update lines_ignored. # <<<<<<<<<<<<<< + * try: + * line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) */ - __pyx_t_9 = (__pyx_v_is_return != 0); - if (__pyx_t_9) { + goto __pyx_L37; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1346 - * self.do_wait_suspend(thread, frame, event, arg) - * elif is_return: # return event - * back = frame.f_back # <<<<<<<<<<<<<< - * if back is not None: - * # When we get to the pydevd run function, the debugging has actually finished for the main thread + /* "_pydevd_bundle/pydevd_cython.pyx":1593 + * else: + * # Ok, dict has it already cached, so, let's check it... + * if merged.get(exc_lineno, 0): # <<<<<<<<<<<<<< + * return False + * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1346, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_back, __pyx_t_3); - __pyx_t_3 = 0; + /*else*/ { + if (unlikely(__pyx_v_merged == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 1593, __pyx_L4_error) + } + __pyx_t_8 = __Pyx_PyDict_GetItemDefault(__pyx_v_merged, __pyx_v_exc_lineno, __pyx_int_0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1593, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1593, __pyx_L4_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1347 - * elif is_return: # return event - * back = frame.f_back - * if back is not None: # <<<<<<<<<<<<<< - * # When we get to the pydevd run function, the debugging has actually finished for the main thread - * # (note that it can still go on for other threads, but for this one, we just make it finish) + /* "_pydevd_bundle/pydevd_cython.pyx":1594 + * # Ok, dict has it already cached, so, let's check it... + * if merged.get(exc_lineno, 0): + * return False # <<<<<<<<<<<<<< + * + * try: */ - __pyx_t_9 = (__pyx_v_back != Py_None); - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L3_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1351 - * # (note that it can still go on for other threads, but for this one, we just make it finish) - * # So, just setting it to None should be OK - * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) # <<<<<<<<<<<<<< - * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): - * back = None + /* "_pydevd_bundle/pydevd_cython.pyx":1593 + * else: + * # Ok, dict has it already cached, so, let's check it... + * if merged.get(exc_lineno, 0): # <<<<<<<<<<<<<< + * return False + * */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_1, __pyx_v_back) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_back); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1351, __pyx_L170_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_8 = PyList_GET_ITEM(sequence, 0); - __pyx_t_1 = PyList_GET_ITEM(sequence, 1); - __pyx_t_4 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1351, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_15 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_8 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_8)) goto __pyx_L264_unpacking_failed; - __Pyx_GOTREF(__pyx_t_8); - index = 1; __pyx_t_1 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L264_unpacking_failed; - __Pyx_GOTREF(__pyx_t_1); - index = 2; __pyx_t_4 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L264_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_7), 3) < 0) __PYX_ERR(0, 1351, __pyx_L170_error) - __pyx_t_15 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L265_unpacking_done; - __pyx_L264_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_15 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1351, __pyx_L170_error) - __pyx_L265_unpacking_done:; - } - __pyx_v_back_absolute_filename = __pyx_t_8; - __pyx_t_8 = 0; - __pyx_v__ = __pyx_t_1; - __pyx_t_1 = 0; - __pyx_v_base = __pyx_t_4; - __pyx_t_4 = 0; + } + } + __pyx_L37:; - /* "_pydevd_bundle/pydevd_cython.pyx":1352 - * # So, just setting it to None should be OK - * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) - * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< - * back = None + /* "_pydevd_bundle/pydevd_cython.pyx":1539 * + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: + * for check_trace_obj in (initial_trace_obj, trace_obj): # <<<<<<<<<<<<<< + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + * absolute_filename = abs_real_path_and_base[0] */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_base); - __Pyx_GIVEREF(__pyx_v_base); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_base); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); - __pyx_t_4 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUG_START); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!__pyx_t_9) { - } else { - __pyx_t_14 = __pyx_t_9; - goto __pyx_L267_bool_binop_done; - } - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DEBUG_START_PY3K); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1352, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_14 = __pyx_t_9; - __pyx_L267_bool_binop_done:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = (__pyx_t_14 != 0); - if (__pyx_t_9) { + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1353 - * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) - * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): - * back = None # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1538 + * trace_obj = trace_obj.tb_next * - * elif base == TRACE_PROPERTY: + * if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: # <<<<<<<<<<<<<< + * for check_trace_obj in (initial_trace_obj, trace_obj): + * abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) */ - __Pyx_INCREF(Py_None); - __Pyx_DECREF_SET(__pyx_v_back, Py_None); + } - /* "_pydevd_bundle/pydevd_cython.pyx":1352 - * # So, just setting it to None should be OK - * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) - * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< - * back = None + /* "_pydevd_bundle/pydevd_cython.pyx":1596 + * return False * + * try: # <<<<<<<<<<<<<< + * frame_id_to_frame = {} + * frame_id_to_frame[id(frame)] = frame */ - goto __pyx_L266; - } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1355 - * back = None + /* "_pydevd_bundle/pydevd_cython.pyx":1597 * - * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< - * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) - * # if we're in a return, we want it to appear to the user in the previous frame! + * try: + * frame_id_to_frame = {} # <<<<<<<<<<<<<< + * frame_id_to_frame[id(frame)] = frame + * f = trace_obj.tb_frame */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TRACE_PROPERTY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1355, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_base, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1355, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1355, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_9) { + __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1597, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_frame_id_to_frame = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1358 - * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) - * # if we're in a return, we want it to appear to the user in the previous frame! - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< - * - * elif pydevd_dont_trace.should_trace_hook is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1598 + * try: + * frame_id_to_frame = {} + * frame_id_to_frame[id(frame)] = frame # <<<<<<<<<<<<<< + * f = trace_obj.tb_frame + * while f is not None: */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_4 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1358, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L174_try_return; + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1598, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely((PyDict_SetItem(__pyx_v_frame_id_to_frame, __pyx_t_4, __pyx_v_frame) < 0))) __PYX_ERR(0, 1598, __pyx_L51_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1355 - * back = None - * - * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< - * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) - * # if we're in a return, we want it to appear to the user in the previous frame! + /* "_pydevd_bundle/pydevd_cython.pyx":1599 + * frame_id_to_frame = {} + * frame_id_to_frame[id(frame)] = frame + * f = trace_obj.tb_frame # <<<<<<<<<<<<<< + * while f is not None: + * frame_id_to_frame[id(f)] = f */ - } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_trace_obj, __pyx_n_s_tb_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1599, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_f = __pyx_t_4; + __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1360 - * return None if is_call else NO_FTRACE - * - * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< - * if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): - * # In this case, we'll have to skip the previous one because it shouldn't be traced. + /* "_pydevd_bundle/pydevd_cython.pyx":1600 + * frame_id_to_frame[id(frame)] = frame + * f = trace_obj.tb_frame + * while f is not None: # <<<<<<<<<<<<<< + * frame_id_to_frame[id(f)] = f + * f = f.f_back */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1360, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1360, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = (__pyx_t_3 != Py_None); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + while (1) { + __pyx_t_2 = (__pyx_v_f != Py_None); + if (!__pyx_t_2) break; - /* "_pydevd_bundle/pydevd_cython.pyx":1361 - * - * elif pydevd_dont_trace.should_trace_hook is not None: - * if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): # <<<<<<<<<<<<<< - * # In this case, we'll have to skip the previous one because it shouldn't be traced. - * # Also, we have to reset the tracing, because if the parent's parent (or some + /* "_pydevd_bundle/pydevd_cython.pyx":1601 + * f = trace_obj.tb_frame + * while f is not None: + * frame_id_to_frame[id(f)] = f # <<<<<<<<<<<<<< + * f = f.f_back + * f = None */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_back, __pyx_v_back_absolute_filename}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_back, __pyx_v_back_absolute_filename}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - { - __pyx_t_8 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_back); - __Pyx_GIVEREF(__pyx_v_back); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_v_back); - __Pyx_INCREF(__pyx_v_back_absolute_filename); - __Pyx_GIVEREF(__pyx_v_back_absolute_filename); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_v_back_absolute_filename); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1361, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = ((!__pyx_t_14) != 0); - if (__pyx_t_9) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_f); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1601, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely((PyDict_SetItem(__pyx_v_frame_id_to_frame, __pyx_t_4, __pyx_v_f) < 0))) __PYX_ERR(0, 1601, __pyx_L51_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1367 - * # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). - * # Related test: _debugger_case17a.py - * main_debugger.set_trace_for_frame_and_parents(back) # <<<<<<<<<<<<<< - * return None if is_call else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1602 + * while f is not None: + * frame_id_to_frame[id(f)] = f + * f = f.f_back # <<<<<<<<<<<<<< + * f = None * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_set_trace_for_frame_and_parents); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_back) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_back); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1367, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1602, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_4); + __pyx_t_4 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1368 - * # Related test: _debugger_case17a.py - * main_debugger.set_trace_for_frame_and_parents(back) - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1603 + * frame_id_to_frame[id(f)] = f + * f = f.f_back + * f = None # <<<<<<<<<<<<<< * - * if back is not None: + * stopped = True */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_3 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1368, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __pyx_t_1; - __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L174_try_return; + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_f, Py_None); - /* "_pydevd_bundle/pydevd_cython.pyx":1361 + /* "_pydevd_bundle/pydevd_cython.pyx":1605 + * f = None * - * elif pydevd_dont_trace.should_trace_hook is not None: - * if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): # <<<<<<<<<<<<<< - * # In this case, we'll have to skip the previous one because it shouldn't be traced. - * # Also, we have to reset the tracing, because if the parent's parent (or some + * stopped = True # <<<<<<<<<<<<<< + * py_db.send_caught_exception_stack(thread, arg, id(frame)) + * try: */ - } + __pyx_v_stopped = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1360 - * return None if is_call else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1606 * - * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< - * if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): - * # In this case, we'll have to skip the previous one because it shouldn't be traced. + * stopped = True + * py_db.send_caught_exception_stack(thread, arg, id(frame)) # <<<<<<<<<<<<<< + * try: + * py_db.set_suspend(thread, 137) */ - } - __pyx_L266:; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_send_caught_exception_stack); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1606, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, __pyx_v_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1606, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_v_thread, __pyx_v_arg, __pyx_t_7}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 3+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1606, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1347 - * elif is_return: # return event - * back = frame.f_back - * if back is not None: # <<<<<<<<<<<<<< - * # When we get to the pydevd run function, the debugging has actually finished for the main thread - * # (note that it can still go on for other threads, but for this one, we just make it finish) + /* "_pydevd_bundle/pydevd_cython.pyx":1607 + * stopped = True + * py_db.send_caught_exception_stack(thread, arg, id(frame)) + * try: # <<<<<<<<<<<<<< + * py_db.set_suspend(thread, 137) + * py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) */ - } + /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1370 - * return None if is_call else NO_FTRACE - * - * if back is not None: # <<<<<<<<<<<<<< - * # if we're in a return, we want it to appear to the user in the previous frame! - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + /* "_pydevd_bundle/pydevd_cython.pyx":1608 + * py_db.send_caught_exception_stack(thread, arg, id(frame)) + * try: + * py_db.set_suspend(thread, 137) # <<<<<<<<<<<<<< + * py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) + * finally: */ - __pyx_t_9 = (__pyx_v_back != Py_None); - __pyx_t_14 = (__pyx_t_9 != 0); - if (__pyx_t_14) { + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1608, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_thread, __pyx_int_137}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1608, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1372 - * if back is not None: - * # if we're in a return, we want it to appear to the user in the previous frame! - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< - * self.do_wait_suspend(thread, back, event, arg) - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1609 + * try: + * py_db.set_suspend(thread, 137) + * py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) # <<<<<<<<<<<<<< + * finally: + * py_db.send_caught_exception_stack_proceeded(thread) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_thread); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_original_step_cmd, __pyx_t_4) < 0) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1609, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1609, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_thread)) __PYX_ERR(0, 1609, __pyx_L60_error); + __Pyx_INCREF(__pyx_v_frame); + __Pyx_GIVEREF(__pyx_v_frame); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_frame)) __PYX_ERR(0, 1609, __pyx_L60_error); + __Pyx_INCREF(__pyx_n_s_exception); + __Pyx_GIVEREF(__pyx_n_s_exception); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_n_s_exception)) __PYX_ERR(0, 1609, __pyx_L60_error); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_arg)) __PYX_ERR(0, 1609, __pyx_L60_error); + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1609, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_exception_type, __pyx_v_exception_type) < 0) __PYX_ERR(0, 1609, __pyx_L60_error) + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1609, __pyx_L60_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } - /* "_pydevd_bundle/pydevd_cython.pyx":1373 - * # if we're in a return, we want it to appear to the user in the previous frame! - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, back, event, arg) # <<<<<<<<<<<<<< - * else: - * # in jython we may not have a back frame + /* "_pydevd_bundle/pydevd_cython.pyx":1611 + * py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) + * finally: + * py_db.send_caught_exception_stack_proceeded(thread) # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); + /*finally:*/ { + /*normal exit:*/{ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_send_caught_exception_stack_proc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1611, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_thread}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1611, __pyx_L51_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L61; + } + __pyx_L60_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_24); + __pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; + { + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_send_caught_exception_stack_proc); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1611, __pyx_L63_error) + __Pyx_GOTREF(__pyx_t_7); __pyx_t_8 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_10 = 1; + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_thread, __pyx_v_back, __pyx_v_event, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_v_thread, __pyx_v_back, __pyx_v_event, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L170_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else #endif { - __pyx_t_3 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1373, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_10, __pyx_v_thread); - __Pyx_INCREF(__pyx_v_back); - __Pyx_GIVEREF(__pyx_v_back); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_10, __pyx_v_back); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_10, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_3, 3+__pyx_t_10, __pyx_v_arg); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1373, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_thread}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1611, __pyx_L63_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1370 - * return None if is_call else NO_FTRACE - * - * if back is not None: # <<<<<<<<<<<<<< - * # if we're in a return, we want it to appear to the user in the previous frame! - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - */ - goto __pyx_L270; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - - /* "_pydevd_bundle/pydevd_cython.pyx":1376 - * else: - * # in jython we may not have a back frame - * info.pydev_step_stop = None # <<<<<<<<<<<<<< - * info.pydev_original_step_cmd = -1 - * info.pydev_step_cmd = -1 - */ - /*else*/ { - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); - __Pyx_DECREF(__pyx_v_info->pydev_step_stop); - __pyx_v_info->pydev_step_stop = Py_None; - - /* "_pydevd_bundle/pydevd_cython.pyx":1377 - * # in jython we may not have a back frame - * info.pydev_step_stop = None - * info.pydev_original_step_cmd = -1 # <<<<<<<<<<<<<< - * info.pydev_step_cmd = -1 - * info.pydev_state = 1 - */ - __pyx_v_info->pydev_original_step_cmd = -1; - - /* "_pydevd_bundle/pydevd_cython.pyx":1378 - * info.pydev_step_stop = None - * info.pydev_original_step_cmd = -1 - * info.pydev_step_cmd = -1 # <<<<<<<<<<<<<< - * info.pydev_state = 1 - * - */ - __pyx_v_info->pydev_step_cmd = -1; - - /* "_pydevd_bundle/pydevd_cython.pyx":1379 - * info.pydev_original_step_cmd = -1 - * info.pydev_step_cmd = -1 - * info.pydev_state = 1 # <<<<<<<<<<<<<< - * - * # if we are quitting, let's stop the tracing - */ - __pyx_v_info->pydev_state = 1; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); } - __pyx_L270:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1345 - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - * self.do_wait_suspend(thread, frame, event, arg) - * elif is_return: # return event # <<<<<<<<<<<<<< - * back = frame.f_back - * if back is not None: - */ - } - __pyx_L262:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1341 - * if plugin_stop: - * stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) - * elif stop: # <<<<<<<<<<<<<< - * if is_line: - * self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) - */ - } - __pyx_L261:; - - /* "_pydevd_bundle/pydevd_cython.pyx":1382 - * - * # if we are quitting, let's stop the tracing - * if main_debugger.quitting: # <<<<<<<<<<<<<< - * return None if is_call else NO_FTRACE - * - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_quitting); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1382, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1382, __pyx_L170_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_14) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1383 - * # if we are quitting, let's stop the tracing - * if main_debugger.quitting: - * return None if is_call else NO_FTRACE # <<<<<<<<<<<<<< - * - * return self.trace_dispatch - */ - __Pyx_XDECREF(__pyx_r); - if ((__pyx_v_is_call != 0)) { - __Pyx_INCREF(Py_None); - __pyx_t_4 = Py_None; - } else { - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1383, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21); + __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; + goto __pyx_L51_error; + __pyx_L63_error:; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24); + } + __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0; + __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0; + __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; + __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; + goto __pyx_L51_error; } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L174_try_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":1382 - * - * # if we are quitting, let's stop the tracing - * if main_debugger.quitting: # <<<<<<<<<<<<<< - * return None if is_call else NO_FTRACE - * - */ + __pyx_L61:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1385 - * return None if is_call else NO_FTRACE - * - * return self.trace_dispatch # <<<<<<<<<<<<<< - * except: - * # Unfortunately Python itself stops the tracing when it originates from - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1385, __pyx_L170_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L174_try_return; - - /* "_pydevd_bundle/pydevd_cython.pyx":1155 + /* "_pydevd_bundle/pydevd_cython.pyx":1596 + * return False * - * # step handling. We stop when we hit the right frame - * try: # <<<<<<<<<<<<<< - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: + * try: # <<<<<<<<<<<<<< + * frame_id_to_frame = {} + * frame_id_to_frame[id(frame)] = frame */ } - __pyx_L170_error:; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L56_try_end; + __pyx_L51_error:; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1386 + /* "_pydevd_bundle/pydevd_cython.pyx":1612 + * finally: + * py_db.send_caught_exception_stack_proceeded(thread) + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() * - * return self.trace_dispatch - * except: # <<<<<<<<<<<<<< - * # Unfortunately Python itself stops the tracing when it originates from - * # the tracing function, so, we can't do much about it (just let the user know). */ /*except:*/ { - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(0, 1386, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_3); - - /* "_pydevd_bundle/pydevd_cython.pyx":1389 - * # Unfortunately Python itself stops the tracing when it originates from - * # the tracing function, so, we can't do much about it (just let the user know). - * exc = sys.exc_info()[0] # <<<<<<<<<<<<<< - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_sys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1389, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1389, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1389, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_8, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1389, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_exc = __pyx_t_2; - __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1390 - * # the tracing function, so, we can't do much about it (just let the user know). - * exc = sys.exc_info()[0] - * cmd = main_debugger.cmd_factory.make_console_message( # <<<<<<<<<<<<<< - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1390, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_make_console_message); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1390, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 1612, __pyx_L53_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); - /* "_pydevd_bundle/pydevd_cython.pyx":1391 - * exc = sys.exc_info()[0] - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) # <<<<<<<<<<<<<< - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): + /* "_pydevd_bundle/pydevd_cython.pyx":1613 + * py_db.send_caught_exception_stack_proceeded(thread) + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * + * py_db.set_trace_for_frame_and_parents(thread.ident, frame) */ - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1391, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_exc); - __Pyx_INCREF(__pyx_v_thread); - __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_thread); - __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_s_raised_from_within_the_callba, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1391, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1613, __pyx_L53_except_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exception); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1613, __pyx_L53_except_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; } } - __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1390, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_cmd, __pyx_t_2); - __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1392 - * cmd = main_debugger.cmd_factory.make_console_message( - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) # <<<<<<<<<<<<<< - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - * pydev_log.exception() - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_writer); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1392, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_add_command); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1392, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1613, __pyx_L53_except_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } - __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_cmd) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_cmd); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1393 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() - * raise - */ - __pyx_t_14 = PyObject_IsSubclass(__pyx_v_exc, __pyx_tuple__6); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(0, 1393, __pyx_L172_except_error) - __pyx_t_9 = ((!(__pyx_t_14 != 0)) != 0); - if (__pyx_t_9) { - - /* "_pydevd_bundle/pydevd_cython.pyx":1394 - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - * pydev_log.exception() # <<<<<<<<<<<<<< - * raise - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1394, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1394, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1394, __pyx_L172_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "_pydevd_bundle/pydevd_cython.pyx":1393 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() - * raise - */ - } - - /* "_pydevd_bundle/pydevd_cython.pyx":1395 - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): - * pydev_log.exception() - * raise # <<<<<<<<<<<<<< - * - * finally: - */ - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_3); - __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_3 = 0; - __PYX_ERR(0, 1395, __pyx_L172_except_error) + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L52_exception_handled; } - __pyx_L172_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":1155 + /* "_pydevd_bundle/pydevd_cython.pyx":1596 + * return False * - * # step handling. We stop when we hit the right frame - * try: # <<<<<<<<<<<<<< - * should_skip = 0 - * if pydevd_dont_trace.should_trace_hook is not None: + * try: # <<<<<<<<<<<<<< + * frame_id_to_frame = {} + * frame_id_to_frame[id(frame)] = frame */ - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); + __pyx_L53_except_error:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); goto __pyx_L4_error; - __pyx_L174_try_return:; - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); - goto __pyx_L3_return; + __pyx_L52_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10); + __pyx_L56_try_end:; } - } - /* "_pydevd_bundle/pydevd_cython.pyx":1398 - * - * finally: - * info.is_tracing -= 1 # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1615 + * pydev_log.exception() * - * # end trace_dispatch + * py_db.set_trace_for_frame_and_parents(thread.ident, frame) # <<<<<<<<<<<<<< + * finally: + * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. */ - /*finally:*/ { - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_27, &__pyx_t_26); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_18); - __Pyx_XGOTREF(__pyx_t_17); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_28); - __Pyx_XGOTREF(__pyx_t_27); - __Pyx_XGOTREF(__pyx_t_26); - __pyx_t_10 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_30 = __pyx_filename; - { - if (unlikely(!__pyx_v_info)) { __Pyx_RaiseUnboundLocalError("info"); __PYX_ERR(0, 1398, __pyx_L276_error) } - if (unlikely(!__pyx_v_info)) { __Pyx_RaiseUnboundLocalError("info"); __PYX_ERR(0, 1398, __pyx_L276_error) } - __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing - 1); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_28); - __Pyx_XGIVEREF(__pyx_t_27); - __Pyx_XGIVEREF(__pyx_t_26); - __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_27, __pyx_t_26); - } - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16); - __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; - __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_30; - goto __pyx_L1_error; - __pyx_L276_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_28); - __Pyx_XGIVEREF(__pyx_t_27); - __Pyx_XGIVEREF(__pyx_t_26); - __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_27, __pyx_t_26); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_trace_for_frame_and_parents); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1615, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_ident_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1615, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_28 = 0; __pyx_t_27 = 0; __pyx_t_26 = 0; - goto __pyx_L1_error; } - __pyx_L3_return: { - __pyx_t_26 = __pyx_r; - __pyx_r = 0; - __pyx_v_info->is_tracing = (__pyx_v_info->is_tracing - 1); - __pyx_r = __pyx_t_26; - __pyx_t_26 = 0; - goto __pyx_L0; + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_v_frame}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1615, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - /* "_pydevd_bundle/pydevd_cython.pyx":701 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< - * cdef tuple abs_path_canonical_path_and_base; - * cdef bint is_exception_event; + /* "_pydevd_bundle/pydevd_cython.pyx":1618 + * finally: + * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< + * # Clear some local variables... + * frame = None */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_21); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_abs_path_canonical_path_and_base); - __Pyx_XDECREF((PyObject *)__pyx_v_info); - __Pyx_XDECREF(__pyx_v_breakpoints_for_file); - __Pyx_XDECREF(__pyx_v_stop_info); - __Pyx_XDECREF(__pyx_v_curr_func_name); - __Pyx_XDECREF(__pyx_v_frame_skips_cache); - __Pyx_XDECREF(__pyx_v_frame_cache_key); - __Pyx_XDECREF(__pyx_v_line_cache_key); - __Pyx_XDECREF(__pyx_v_bp); - __Pyx_XDECREF(__pyx_v_pydev_smart_step_into_variants); - __Pyx_XDECREF(__pyx_v_main_debugger); - __Pyx_XDECREF(__pyx_v_thread); - __Pyx_XDECREF(__pyx_v_plugin_manager); - __Pyx_XDECREF(__pyx_v_stop_frame); - __Pyx_XDECREF(__pyx_v_function_breakpoint_on_call_event); - __Pyx_XDECREF(__pyx_v_returns_cache_key); - __Pyx_XDECREF(__pyx_v_return_lines); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_func_lines); - __Pyx_XDECREF(__pyx_v_offset_and_lineno); - __Pyx_XDECREF(__pyx_v_breakpoint); - __Pyx_XDECREF(__pyx_v_stop_reason); - __Pyx_XDECREF(__pyx_v_bp_type); - __Pyx_XDECREF(__pyx_v_new_frame); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_eval_result); - __Pyx_XDECREF(__pyx_v_cmd); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_XDECREF(__pyx_v_plugin_stop); - __Pyx_XDECREF(__pyx_v_force_check_project_scope); - __Pyx_XDECREF(__pyx_v_filename); - __Pyx_XDECREF(__pyx_v_f2); - __Pyx_XDECREF(__pyx_v_back); - __Pyx_XDECREF(__pyx_v_smart_step_into_variant); - __Pyx_XDECREF(__pyx_v_children_variants); - __Pyx_XDECREF(__pyx_v_f_code); - __Pyx_XDECREF(__pyx_v_stopped_on_plugin); - __Pyx_XDECREF(__pyx_v_back_absolute_filename); - __Pyx_XDECREF(__pyx_v__); - __Pyx_XDECREF(__pyx_v_base); - __Pyx_XDECREF(__pyx_v_frame); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_frame = 0; - PyObject *__pyx_v_event = 0; - PyObject *__pyx_v_arg = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("trace_dispatch (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, 1); __PYX_ERR(0, 701, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, 2); __PYX_ERR(0, 701, __pyx_L3_error) + /*finally:*/ { + /*normal exit:*/{ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace_dispatch") < 0)) __PYX_ERR(0, 701, __pyx_L3_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_frame}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_frame = values[0]; - __pyx_v_event = ((PyObject*)values[1]); - __pyx_v_arg = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 701, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_event), (&PyString_Type), 1, "event", 1))) __PYX_ERR(0, 701, __pyx_L1_error) - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_10trace_dispatch(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":1620 + * remove_exception_from_frame(frame) + * # Clear some local variables... + * frame = None # <<<<<<<<<<<<<< + * trace_obj = None + * initial_trace_obj = None + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_frame, Py_None); -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_10trace_dispatch(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_dispatch", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch(__pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; + /* "_pydevd_bundle/pydevd_cython.pyx":1621 + * # Clear some local variables... + * frame = None + * trace_obj = None # <<<<<<<<<<<<<< + * initial_trace_obj = None + * check_trace_obj = None + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_trace_obj, Py_None); + + /* "_pydevd_bundle/pydevd_cython.pyx":1622 + * frame = None + * trace_obj = None + * initial_trace_obj = None # <<<<<<<<<<<<<< + * check_trace_obj = None + * f = None + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_initial_trace_obj, Py_None); + + /* "_pydevd_bundle/pydevd_cython.pyx":1623 + * trace_obj = None + * initial_trace_obj = None + * check_trace_obj = None # <<<<<<<<<<<<<< + * f = None + * frame_id_to_frame = None + */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":1624 + * initial_trace_obj = None + * check_trace_obj = None + * f = None # <<<<<<<<<<<<<< + * frame_id_to_frame = None + * py_db = None + */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f, Py_None); -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "_pydevd_bundle/pydevd_cython.pyx":1625 + * check_trace_obj = None + * f = None + * frame_id_to_frame = None # <<<<<<<<<<<<<< + * py_db = None + * thread = None */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_12__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self)); + /* "_pydevd_bundle/pydevd_cython.pyx":1626 + * f = None + * frame_id_to_frame = None + * py_db = None # <<<<<<<<<<<<<< + * thread = None + * + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_py_db, Py_None); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":1627 + * frame_id_to_frame = None + * py_db = None + * thread = None # <<<<<<<<<<<<<< + * + * return stopped + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_thread, Py_None); + goto __pyx_L5; + } + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_24); + __Pyx_XGOTREF(__pyx_t_23); + __Pyx_XGOTREF(__pyx_t_22); + __pyx_t_17 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_25 = __pyx_filename; + { -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_12__reduce_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + /* "_pydevd_bundle/pydevd_cython.pyx":1618 + * finally: + * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< + * # Clear some local variables... + * frame = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_frame}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1618, __pyx_L67_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self._args, self.exc_info, self.should_skip) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1620 + * remove_exception_from_frame(frame) + * # Clear some local variables... + * frame = None # <<<<<<<<<<<<<< + * trace_obj = None + * initial_trace_obj = None */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->should_skip); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self->_args); - __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_args); - __Pyx_INCREF(__pyx_v_self->exc_info); - __Pyx_GIVEREF(__pyx_v_self->exc_info); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->exc_info); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_frame, Py_None); - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self._args, self.exc_info, self.should_skip) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) + /* "_pydevd_bundle/pydevd_cython.pyx":1621 + * # Clear some local variables... + * frame = None + * trace_obj = None # <<<<<<<<<<<<<< + * initial_trace_obj = None + * check_trace_obj = None */ - __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v__dict = __pyx_t_2; - __pyx_t_2 = 0; + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_trace_obj, Py_None); - /* "(tree fragment)":7 - * state = (self._args, self.exc_info, self.should_skip) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True + /* "_pydevd_bundle/pydevd_cython.pyx":1622 + * frame = None + * trace_obj = None + * initial_trace_obj = None # <<<<<<<<<<<<<< + * check_trace_obj = None + * f = None */ - __pyx_t_3 = (__pyx_v__dict != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_initial_trace_obj, Py_None); - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1623 + * trace_obj = None + * initial_trace_obj = None + * check_trace_obj = None # <<<<<<<<<<<<<< + * f = None + * frame_id_to_frame = None */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self._args is not None or self.exc_info is not None + /* "_pydevd_bundle/pydevd_cython.pyx":1624 + * initial_trace_obj = None + * check_trace_obj = None + * f = None # <<<<<<<<<<<<<< + * frame_id_to_frame = None + * py_db = None */ - __pyx_v_use_setstate = 1; + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f, Py_None); - /* "(tree fragment)":7 - * state = (self._args, self.exc_info, self.should_skip) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True + /* "_pydevd_bundle/pydevd_cython.pyx":1625 + * check_trace_obj = None + * f = None + * frame_id_to_frame = None # <<<<<<<<<<<<<< + * py_db = None + * thread = None */ - goto __pyx_L3; - } + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self._args is not None or self.exc_info is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, None), state + /* "_pydevd_bundle/pydevd_cython.pyx":1626 + * f = None + * frame_id_to_frame = None + * py_db = None # <<<<<<<<<<<<<< + * thread = None + * */ - /*else*/ { - __pyx_t_3 = (__pyx_v_self->_args != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->exc_info != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - __pyx_t_4 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_4; - } - __pyx_L3:; + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_py_db, Py_None); - /* "(tree fragment)":12 - * else: - * use_setstate = self._args is not None or self.exc_info is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, None), state - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1627 + * frame_id_to_frame = None + * py_db = None + * thread = None # <<<<<<<<<<<<<< + * + * return stopped */ - __pyx_t_4 = (__pyx_v_use_setstate != 0); - if (__pyx_t_4) { + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_thread, Py_None); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22); + } + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; + __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_25; + goto __pyx_L1_error; + __pyx_L67_error:; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_24); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_23, __pyx_t_22); + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; + goto __pyx_L1_error; + } + __pyx_L3_return: { + __pyx_t_22 = __pyx_r; + __pyx_r = 0; - /* "(tree fragment)":13 - * use_setstate = self._args is not None or self.exc_info is not None - * if use_setstate: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, state) + /* "_pydevd_bundle/pydevd_cython.pyx":1618 + * finally: + * # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + * remove_exception_from_frame(frame) # <<<<<<<<<<<<<< + * # Clear some local variables... + * frame = None */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_PyDBFrame); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_84338306); - __Pyx_GIVEREF(__pyx_int_84338306); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_84338306); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_6 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_frame}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "(tree fragment)":12 - * else: - * use_setstate = self._args is not None or self.exc_info is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, None), state - * else: + /* "_pydevd_bundle/pydevd_cython.pyx":1620 + * remove_exception_from_frame(frame) + * # Clear some local variables... + * frame = None # <<<<<<<<<<<<<< + * trace_obj = None + * initial_trace_obj = None */ - } + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_frame, Py_None); - /* "(tree fragment)":15 - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, None), state - * else: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":1621 + * # Clear some local variables... + * frame = None + * trace_obj = None # <<<<<<<<<<<<<< + * initial_trace_obj = None + * check_trace_obj = None */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_PyDBFrame); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_84338306); - __Pyx_GIVEREF(__pyx_int_84338306); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_84338306); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_6 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_trace_obj, Py_None); - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict + /* "_pydevd_bundle/pydevd_cython.pyx":1622 + * frame = None + * trace_obj = None + * initial_trace_obj = None # <<<<<<<<<<<<<< + * check_trace_obj = None + * f = None */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_initial_trace_obj, Py_None); - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":1623 + * trace_obj = None + * initial_trace_obj = None + * check_trace_obj = None # <<<<<<<<<<<<<< + * f = None + * frame_id_to_frame = None + */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_check_trace_obj, Py_None); -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":1624 + * initial_trace_obj = None + * check_trace_obj = None + * f = None # <<<<<<<<<<<<<< + * frame_id_to_frame = None + * py_db = None */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f, Py_None); -/* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + /* "_pydevd_bundle/pydevd_cython.pyx":1625 + * check_trace_obj = None + * f = None + * frame_id_to_frame = None # <<<<<<<<<<<<<< + * py_db = None + * thread = None + */ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_frame_id_to_frame, ((PyObject*)Py_None)); - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "_pydevd_bundle/pydevd_cython.pyx":1626 + * f = None + * frame_id_to_frame = None + * py_db = None # <<<<<<<<<<<<<< + * thread = None + * + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_py_db, Py_None); -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setstate_cython__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + /* "_pydevd_bundle/pydevd_cython.pyx":1627 + * frame_id_to_frame = None + * py_db = None + * thread = None # <<<<<<<<<<<<<< + * + * return stopped + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_thread, Py_None); + __pyx_r = __pyx_t_22; + __pyx_t_22 = 0; + goto __pyx_L0; + } + __pyx_L5:; + } - /* "(tree fragment)":17 - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1629 + * thread = None + * + * return stopped # <<<<<<<<<<<<<< + * from _pydev_bundle.pydev_is_thread_alive import is_thread_alive + * from _pydev_bundle.pydev_log import exception as pydev_log_exception */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFrame__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_r); + __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_stopped); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_PyDBFrame, (type(self), 0x506e682, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + /* "_pydevd_bundle/pydevd_cython.pyx":1510 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def handle_exception(py_db, thread, frame, arg, str exception_type): # <<<<<<<<<<<<<< + * cdef bint stopped; + * cdef tuple abs_real_path_and_base; */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.PyDBFrame.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.handle_exception", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; + __Pyx_XDECREF(__pyx_v_abs_real_path_and_base); + __Pyx_XDECREF(__pyx_v_absolute_filename); + __Pyx_XDECREF(__pyx_v_canonical_normalized_filename); + __Pyx_XDECREF(__pyx_v_lines_ignored); + __Pyx_XDECREF(__pyx_v_frame_id_to_frame); + __Pyx_XDECREF(__pyx_v_merged); + __Pyx_XDECREF(__pyx_v_trace_obj); + __Pyx_XDECREF(__pyx_v_initial_trace_obj); + __Pyx_XDECREF(__pyx_v_check_trace_obj); + __Pyx_XDECREF(__pyx_v_curr_stat); + __Pyx_XDECREF(__pyx_v_last_stat); + __Pyx_XDECREF(__pyx_v_from_user_input); + __Pyx_XDECREF(__pyx_v_exc_lineno); + __Pyx_XDECREF(__pyx_v_line); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_thread); + __Pyx_XDECREF(__pyx_v_frame); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1436 +/* "_pydevd_bundle/pydevd_cython.pyx":1674 * * * def notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< @@ -24537,71 +31108,117 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_14__setsta */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_5notify_skipped_step_in_because_of_filters(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_5notify_skipped_step_in_because_of_filters = {"notify_skipped_step_in_because_of_filters", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_5notify_skipped_step_in_because_of_filters, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_5notify_skipped_step_in_because_of_filters(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_17notify_skipped_step_in_because_of_filters(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_17notify_skipped_step_in_because_of_filters = {"notify_skipped_step_in_because_of_filters", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_17notify_skipped_step_in_because_of_filters, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_17notify_skipped_step_in_because_of_filters(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_py_db = 0; PyObject *__pyx_v_frame = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("notify_skipped_step_in_because_of_filters (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_py_db)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("notify_skipped_step_in_because_of_filters", 1, 2, 2, 1); __PYX_ERR(0, 1436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("notify_skipped_step_in_because_of_filters", 1, 2, 2, 1); __PYX_ERR(0, 1674, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "notify_skipped_step_in_because_of_filters") < 0)) __PYX_ERR(0, 1436, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "notify_skipped_step_in_because_of_filters") < 0)) __PYX_ERR(0, 1674, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_py_db = values[0]; __pyx_v_frame = values[1]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("notify_skipped_step_in_because_of_filters", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1436, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("notify_skipped_step_in_because_of_filters", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1674, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.notify_skipped_step_in_because_of_filters", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_in_because_of_filters(__pyx_self, __pyx_v_py_db, __pyx_v_frame); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_16notify_skipped_step_in_because_of_filters(__pyx_self, __pyx_v_py_db, __pyx_v_frame); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_in_because_of_filters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16notify_skipped_step_in_because_of_filters(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; @@ -24609,18 +31226,19 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_6; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("notify_skipped_step_in_because_of_filters", 0); + __Pyx_RefNannySetupContext("notify_skipped_step_in_because_of_filters", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1439 + /* "_pydevd_bundle/pydevd_cython.pyx":1677 * global _global_notify_skipped_step_in * * with _global_notify_skipped_step_in_lock: # <<<<<<<<<<<<<< @@ -24628,50 +31246,57 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ * # Check with lock in place (callers should actually have checked */ /*with:*/ { - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_global_notify_skipped_step_in_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1439, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_global_notify_skipped_step_in_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1439, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1439, __pyx_L3_error) + __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1677, __pyx_L3_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; } } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1439, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1677, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /*try:*/ { { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_6); + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); __Pyx_XGOTREF(__pyx_t_7); __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1440 + /* "_pydevd_bundle/pydevd_cython.pyx":1678 * * with _global_notify_skipped_step_in_lock: * if _global_notify_skipped_step_in: # <<<<<<<<<<<<<< * # Check with lock in place (callers should actually have checked * # before without the lock in place due to performance). */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1440, __pyx_L7_error) - if (__pyx_t_9) { + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1678, __pyx_L7_error) + if (__pyx_t_10) { - /* "_pydevd_bundle/pydevd_cython.pyx":1443 + /* "_pydevd_bundle/pydevd_cython.pyx":1681 * # Check with lock in place (callers should actually have checked * # before without the lock in place due to performance). * return # <<<<<<<<<<<<<< @@ -24682,7 +31307,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1440 + /* "_pydevd_bundle/pydevd_cython.pyx":1678 * * with _global_notify_skipped_step_in_lock: * if _global_notify_skipped_step_in: # <<<<<<<<<<<<<< @@ -24691,7 +31316,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1444 + /* "_pydevd_bundle/pydevd_cython.pyx":1682 * # before without the lock in place due to performance). * return * _global_notify_skipped_step_in = True # <<<<<<<<<<<<<< @@ -24703,33 +31328,40 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in, ((PyObject*)Py_True)); __Pyx_GIVEREF(Py_True); - /* "_pydevd_bundle/pydevd_cython.pyx":1445 + /* "_pydevd_bundle/pydevd_cython.pyx":1683 * return * _global_notify_skipped_step_in = True * py_db.notify_skipped_step_in_because_of_filters(frame) # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1445, __pyx_L7_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1445, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1439 + /* "_pydevd_bundle/pydevd_cython.pyx":1677 * global _global_notify_skipped_step_in * * with _global_notify_skipped_step_in_lock: # <<<<<<<<<<<<<< @@ -24737,9 +31369,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ * # Check with lock in place (callers should actually have checked */ } - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L12_try_end; __pyx_L7_error:; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -24748,28 +31380,28 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; /*except:*/ { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.notify_skipped_step_in_because_of_filters", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 1439, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L9_except_error) + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 1677, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1677, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1439, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_9 < 0) __PYX_ERR(0, 1439, __pyx_L9_except_error) - __pyx_t_11 = ((!(__pyx_t_9 != 0)) != 0); - if (__pyx_t_11) { + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1677, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_10 < 0) __PYX_ERR(0, 1677, __pyx_L9_except_error) + __pyx_t_12 = (!__pyx_t_10); + if (unlikely(__pyx_t_12)) { __Pyx_GIVEREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_4); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; - __PYX_ERR(0, 1439, __pyx_L9_except_error) + __PYX_ERR(0, 1677, __pyx_L9_except_error) } __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -24777,48 +31409,48 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ goto __pyx_L8_exception_handled; } __pyx_L9_except_error:; - __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); goto __pyx_L1_error; __pyx_L11_try_return:; - __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); goto __pyx_L4_return; __pyx_L8_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); __pyx_L12_try_end:; } } /*finally:*/ { /*normal exit:*/{ if (__pyx_t_2) { - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__2, NULL); + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__3, NULL); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1677, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } goto __pyx_L6; } __pyx_L4_return: { - __pyx_t_8 = __pyx_r; + __pyx_t_9 = __pyx_r; __pyx_r = 0; if (__pyx_t_2) { - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__2, NULL); + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__3, NULL); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1439, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1677, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; + __pyx_r = __pyx_t_9; + __pyx_t_9 = 0; goto __pyx_L0; } __pyx_L6:; @@ -24830,7 +31462,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ __pyx_L17:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1436 + /* "_pydevd_bundle/pydevd_cython.pyx":1674 * * * def notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< @@ -24854,7 +31486,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1450 +/* "_pydevd_bundle/pydevd_cython.pyx":1690 * cdef class SafeCallWrapper: * cdef method_object * def __init__(self, method_object): # <<<<<<<<<<<<<< @@ -24866,44 +31498,64 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_4notify_skipped_step_ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_method_object = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_object,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method_object,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method_object)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_method_object)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1690, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1450, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 1690, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } __pyx_v_method_object = values[0]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1450, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1690, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.SafeCallWrapper.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; @@ -24911,6 +31563,12 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__ __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self), __pyx_v_method_object); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -24918,9 +31576,9 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self, PyObject *__pyx_v_method_object) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1451 + /* "_pydevd_bundle/pydevd_cython.pyx":1691 * cdef method_object * def __init__(self, method_object): * self.method_object = method_object # <<<<<<<<<<<<<< @@ -24933,7 +31591,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__( __Pyx_DECREF(__pyx_v_self->method_object); __pyx_v_self->method_object = __pyx_v_method_object; - /* "_pydevd_bundle/pydevd_cython.pyx":1450 + /* "_pydevd_bundle/pydevd_cython.pyx":1690 * cdef class SafeCallWrapper: * cdef method_object * def __init__(self, method_object): # <<<<<<<<<<<<<< @@ -24947,7 +31605,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__( return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1452 +/* "_pydevd_bundle/pydevd_cython.pyx":1692 * def __init__(self, method_object): * self.method_object = method_object * def __call__(self, *args): # <<<<<<<<<<<<<< @@ -24959,16 +31617,24 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper___init__( static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_args = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__call__ (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__call__", 0))) return NULL; + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__call__", 0))) return NULL; __Pyx_INCREF(__pyx_args); __pyx_v_args = __pyx_args; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__call__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self), __pyx_v_args); /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); + __Pyx_DECREF(__pyx_v_args); __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -24984,9 +31650,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__call__", 0); + __Pyx_RefNannySetupContext("__call__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1455 + /* "_pydevd_bundle/pydevd_cython.pyx":1695 * #Cannot use 'self' once inside the delegate call since we are borrowing the self reference f_trace field * #in the frame, and that reference might get destroyed by set trace on frame and parents * cdef PyObject* method_obj = self.method_object # <<<<<<<<<<<<<< @@ -24995,7 +31661,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ */ __pyx_v_method_obj = ((PyObject *)__pyx_v_self->method_object); - /* "_pydevd_bundle/pydevd_cython.pyx":1456 + /* "_pydevd_bundle/pydevd_cython.pyx":1696 * #in the frame, and that reference might get destroyed by set trace on frame and parents * cdef PyObject* method_obj = self.method_object * Py_INCREF(method_obj) # <<<<<<<<<<<<<< @@ -25004,19 +31670,19 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ */ Py_INCREF(((PyObject *)__pyx_v_method_obj)); - /* "_pydevd_bundle/pydevd_cython.pyx":1457 + /* "_pydevd_bundle/pydevd_cython.pyx":1697 * cdef PyObject* method_obj = self.method_object * Py_INCREF(method_obj) * ret = (method_obj)(*args) # <<<<<<<<<<<<<< * Py_XDECREF (method_obj) * return SafeCallWrapper(ret) if ret is not None else None */ - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_method_obj), __pyx_v_args, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1457, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_method_obj), __pyx_v_args, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1697, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1458 + /* "_pydevd_bundle/pydevd_cython.pyx":1698 * Py_INCREF(method_obj) * ret = (method_obj)(*args) * Py_XDECREF (method_obj) # <<<<<<<<<<<<<< @@ -25025,7 +31691,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ */ Py_XDECREF(__pyx_v_method_obj); - /* "_pydevd_bundle/pydevd_cython.pyx":1459 + /* "_pydevd_bundle/pydevd_cython.pyx":1699 * ret = (method_obj)(*args) * Py_XDECREF (method_obj) * return SafeCallWrapper(ret) if ret is not None else None # <<<<<<<<<<<<<< @@ -25034,8 +31700,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ */ __Pyx_XDECREF(__pyx_r); __pyx_t_2 = (__pyx_v_ret != Py_None); - if ((__pyx_t_2 != 0)) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1459, __pyx_L1_error) + if (__pyx_t_2) { + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __pyx_t_3 = 0; @@ -25047,7 +31713,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1452 + /* "_pydevd_bundle/pydevd_cython.pyx":1692 * def __init__(self, method_object): * self.method_object = method_object * def __call__(self, *args): # <<<<<<<<<<<<<< @@ -25068,7 +31734,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1460 +/* "_pydevd_bundle/pydevd_cython.pyx":1700 * Py_XDECREF (method_obj) * return SafeCallWrapper(ret) if ret is not None else None * def get_method_object(self): # <<<<<<<<<<<<<< @@ -25077,11 +31743,39 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_2__ */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object = {"get_method_object", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_method_object (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("get_method_object", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_method_object", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_4get_method_object(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self)); /* function exit code */ @@ -25092,9 +31786,9 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5ge static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_4get_method_object(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_method_object", 0); + __Pyx_RefNannySetupContext("get_method_object", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1461 + /* "_pydevd_bundle/pydevd_cython.pyx":1701 * return SafeCallWrapper(ret) if ret is not None else None * def get_method_object(self): * return self.method_object # <<<<<<<<<<<<<< @@ -25106,7 +31800,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_4ge __pyx_r = __pyx_v_self->method_object; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1460 + /* "_pydevd_bundle/pydevd_cython.pyx":1700 * Py_XDECREF (method_obj) * return SafeCallWrapper(ret) if ret is not None else None * def get_method_object(self): # <<<<<<<<<<<<<< @@ -25128,11 +31822,39 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_4ge */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self)); /* function exit code */ @@ -25148,13 +31870,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -25167,7 +31888,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->method_object); __Pyx_GIVEREF(__pyx_v_self->method_object); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->method_object); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->method_object)) __PYX_ERR(2, 5, __pyx_L1_error); __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -25191,8 +31912,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ * use_setstate = True */ __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -25205,12 +31925,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; /* "(tree fragment)":9 * if _dict is not None: @@ -25236,11 +31956,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ * else: * use_setstate = self.method_object is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, None), state + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, None), state */ /*else*/ { - __pyx_t_3 = (__pyx_v_self->method_object != Py_None); - __pyx_v_use_setstate = __pyx_t_3; + __pyx_t_2 = (__pyx_v_self->method_object != Py_None); + __pyx_v_use_setstate = __pyx_t_2; } __pyx_L3:; @@ -25248,89 +31968,88 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ * else: * use_setstate = self.method_object is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, None), state + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, None), state * else: */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self.method_object is not None * if use_setstate: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, state) + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_SafeCallWrapper); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_SafeCallWrapper); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_125568891); - __Pyx_GIVEREF(__pyx_int_125568891); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_125568891); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_169093275); + __Pyx_GIVEREF(__pyx_int_169093275); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_169093275)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_3 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self.method_object is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, None), state + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, None), state + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, None), state * else: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_SafeCallWrapper); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_SafeCallWrapper); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_125568891); - __Pyx_GIVEREF(__pyx_int_125568891); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_125568891); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_169093275); + __Pyx_GIVEREF(__pyx_int_169093275); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_169093275)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error); __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; } @@ -25343,8 +32062,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.SafeCallWrapper.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -25357,20 +32076,103 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_6__ /* "(tree fragment)":16 * else: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, state) + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.SafeCallWrapper.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -25382,21 +32184,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_8__ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, state) + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCallWrapper__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_SafeCallWrapper, (type(self), 0x77c077b, state) + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) */ @@ -25414,80 +32216,126 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_8__ return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1466 +/* "_pydevd_bundle/pydevd_cython.pyx":1707 * * * def fix_top_level_trace_and_get_trace_func(py_db, frame): # <<<<<<<<<<<<<< + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef str filename; */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_7fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_7fix_top_level_trace_and_get_trace_func = {"fix_top_level_trace_and_get_trace_func", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_7fix_top_level_trace_and_get_trace_func, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_7fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_19fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_19fix_top_level_trace_and_get_trace_func = {"fix_top_level_trace_and_get_trace_func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_19fix_top_level_trace_and_get_trace_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_19fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_py_db = 0; PyObject *__pyx_v_frame = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("fix_top_level_trace_and_get_trace_func (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_py_db)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1707, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1707, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("fix_top_level_trace_and_get_trace_func", 1, 2, 2, 1); __PYX_ERR(0, 1466, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("fix_top_level_trace_and_get_trace_func", 1, 2, 2, 1); __PYX_ERR(0, 1707, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fix_top_level_trace_and_get_trace_func") < 0)) __PYX_ERR(0, 1466, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "fix_top_level_trace_and_get_trace_func") < 0)) __PYX_ERR(0, 1707, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_py_db = values[0]; __pyx_v_frame = values[1]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("fix_top_level_trace_and_get_trace_func", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1466, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("fix_top_level_trace_and_get_trace_func", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1707, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.fix_top_level_trace_and_get_trace_func", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_and_get_trace_func(__pyx_self, __pyx_v_py_db, __pyx_v_frame); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_18fix_top_level_trace_and_get_trace_func(__pyx_self, __pyx_v_py_db, __pyx_v_frame); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { PyObject *__pyx_v_name = 0; PyObject *__pyx_v_args = 0; PyObject *__pyx_v_thread = NULL; @@ -25503,13 +32351,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; - int __pyx_t_2; + PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_4; Py_ssize_t __pyx_t_5; - Py_ssize_t __pyx_t_6; + int __pyx_t_6; PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; + unsigned int __pyx_t_8; PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; @@ -25520,9 +32368,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("fix_top_level_trace_and_get_trace_func", 0); + __Pyx_RefNannySetupContext("fix_top_level_trace_and_get_trace_func", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1477 + /* "_pydevd_bundle/pydevd_cython.pyx":1720 * # where more information is cached (and will also setup the tracing for * # frames where we should deal with unhandled exceptions). * thread = None # <<<<<<<<<<<<<< @@ -25532,7 +32380,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ __Pyx_INCREF(Py_None); __pyx_v_thread = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":1481 + /* "_pydevd_bundle/pydevd_cython.pyx":1724 * # (i.e.: thread entry-points). * * f_unhandled = frame # <<<<<<<<<<<<<< @@ -25542,7 +32390,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ __Pyx_INCREF(__pyx_v_frame); __pyx_v_f_unhandled = __pyx_v_frame; - /* "_pydevd_bundle/pydevd_cython.pyx":1483 + /* "_pydevd_bundle/pydevd_cython.pyx":1726 * f_unhandled = frame * # print('called at', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) * force_only_unhandled_tracer = False # <<<<<<<<<<<<<< @@ -25551,7 +32399,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ __pyx_v_force_only_unhandled_tracer = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1484 + /* "_pydevd_bundle/pydevd_cython.pyx":1727 * # print('called at', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) * force_only_unhandled_tracer = False * while f_unhandled is not None: # <<<<<<<<<<<<<< @@ -25560,334 +32408,337 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ while (1) { __pyx_t_1 = (__pyx_v_f_unhandled != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (!__pyx_t_2) break; + if (!__pyx_t_1) break; - /* "_pydevd_bundle/pydevd_cython.pyx":1487 + /* "_pydevd_bundle/pydevd_cython.pyx":1730 * # name = splitext(basename(f_unhandled.f_code.co_filename))[0] * * name = f_unhandled.f_code.co_filename # <<<<<<<<<<<<<< * # basename - * i = name.rfind('/') + * i = name.rfind("/") */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1487, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1730, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(PyString_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1487, __pyx_L1_error) - __Pyx_XDECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 1730, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1489 + /* "_pydevd_bundle/pydevd_cython.pyx":1732 * name = f_unhandled.f_code.co_filename * # basename - * i = name.rfind('/') # <<<<<<<<<<<<<< - * j = name.rfind('\\') + * i = name.rfind("/") # <<<<<<<<<<<<<< + * j = name.rfind("\\") * if j > i: */ - __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1489, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1490 + /* "_pydevd_bundle/pydevd_cython.pyx":1733 * # basename - * i = name.rfind('/') - * j = name.rfind('\\') # <<<<<<<<<<<<<< + * i = name.rfind("/") + * j = name.rfind("\\") # <<<<<<<<<<<<<< * if j > i: * i = j */ - __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1490, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1491 - * i = name.rfind('/') - * j = name.rfind('\\') + /* "_pydevd_bundle/pydevd_cython.pyx":1734 + * i = name.rfind("/") + * j = name.rfind("\\") * if j > i: # <<<<<<<<<<<<<< * i = j * if i >= 0: */ - __pyx_t_4 = PyObject_RichCompare(__pyx_v_j, __pyx_v_i, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1491, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1491, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { + __pyx_t_3 = PyObject_RichCompare(__pyx_v_j, __pyx_v_i, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1734, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1734, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1492 - * j = name.rfind('\\') + /* "_pydevd_bundle/pydevd_cython.pyx":1735 + * j = name.rfind("\\") * if j > i: * i = j # <<<<<<<<<<<<<< * if i >= 0: - * name = name[i + 1:] + * name = name[i + 1 :] */ __Pyx_INCREF(__pyx_v_j); __Pyx_DECREF_SET(__pyx_v_i, __pyx_v_j); - /* "_pydevd_bundle/pydevd_cython.pyx":1491 - * i = name.rfind('/') - * j = name.rfind('\\') + /* "_pydevd_bundle/pydevd_cython.pyx":1734 + * i = name.rfind("/") + * j = name.rfind("\\") * if j > i: # <<<<<<<<<<<<<< * i = j * if i >= 0: */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1493 + /* "_pydevd_bundle/pydevd_cython.pyx":1736 * if j > i: * i = j * if i >= 0: # <<<<<<<<<<<<<< - * name = name[i + 1:] + * name = name[i + 1 :] * # remove ext */ - __pyx_t_4 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1493, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1493, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { + __pyx_t_3 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1736, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1736, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1494 + /* "_pydevd_bundle/pydevd_cython.pyx":1737 * i = j * if i >= 0: - * name = name[i + 1:] # <<<<<<<<<<<<<< + * name = name[i + 1 :] # <<<<<<<<<<<<<< * # remove ext - * i = name.rfind('.') + * i = name.rfind(".") */ if (unlikely(__pyx_v_name == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1494, __pyx_L1_error) + __PYX_ERR(0, 1737, __pyx_L1_error) } - __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__pyx_t_4 == Py_None); - if (__pyx_t_2) { - __pyx_t_5 = 0; + __pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_v_i, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = (__pyx_t_3 == Py_None); + if (__pyx_t_1) { + __pyx_t_4 = 0; } else { - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1494, __pyx_L1_error) - __pyx_t_5 = __pyx_t_6; + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1737, __pyx_L1_error) + __pyx_t_4 = __pyx_t_5; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PySequence_GetSlice(__pyx_v_name, __pyx_t_5, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PySequence_GetSlice(__pyx_v_name, __pyx_t_4, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1737, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1493 + /* "_pydevd_bundle/pydevd_cython.pyx":1736 * if j > i: * i = j * if i >= 0: # <<<<<<<<<<<<<< - * name = name[i + 1:] + * name = name[i + 1 :] * # remove ext */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1496 - * name = name[i + 1:] + /* "_pydevd_bundle/pydevd_cython.pyx":1739 + * name = name[i + 1 :] * # remove ext - * i = name.rfind('.') # <<<<<<<<<<<<<< + * i = name.rfind(".") # <<<<<<<<<<<<<< * if i >= 0: * name = name[:i] */ - __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1496, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyString_Type_rfind, __pyx_v_name, __pyx_kp_s__10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1739, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1497 + /* "_pydevd_bundle/pydevd_cython.pyx":1740 * # remove ext - * i = name.rfind('.') + * i = name.rfind(".") * if i >= 0: # <<<<<<<<<<<<<< * name = name[:i] * */ - __pyx_t_4 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1497, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1497, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { + __pyx_t_3 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1740, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1740, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1498 - * i = name.rfind('.') + /* "_pydevd_bundle/pydevd_cython.pyx":1741 + * i = name.rfind(".") * if i >= 0: * name = name[:i] # <<<<<<<<<<<<<< * - * if name == 'threading': + * if name == "threading": */ if (unlikely(__pyx_v_name == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1498, __pyx_L1_error) + __PYX_ERR(0, 1741, __pyx_L1_error) } __Pyx_INCREF(__pyx_v_i); - __pyx_t_4 = __pyx_v_i; - __pyx_t_2 = (__pyx_t_4 == Py_None); - if (__pyx_t_2) { - __pyx_t_5 = PY_SSIZE_T_MAX; + __pyx_t_3 = __pyx_v_i; + __pyx_t_1 = (__pyx_t_3 == Py_None); + if (__pyx_t_1) { + __pyx_t_4 = PY_SSIZE_T_MAX; } else { - __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1498, __pyx_L1_error) - __pyx_t_5 = __pyx_t_6; + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1741, __pyx_L1_error) + __pyx_t_4 = __pyx_t_5; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PySequence_GetSlice(__pyx_v_name, 0, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1498, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PySequence_GetSlice(__pyx_v_name, 0, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1741, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_name, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1497 + /* "_pydevd_bundle/pydevd_cython.pyx":1740 * # remove ext - * i = name.rfind('.') + * i = name.rfind(".") * if i >= 0: # <<<<<<<<<<<<<< * name = name[:i] * */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1500 + /* "_pydevd_bundle/pydevd_cython.pyx":1743 * name = name[:i] * - * if name == 'threading': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): + * if name == "threading": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): * # We need __bootstrap_inner, not __bootstrap. */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_threading, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1500, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_threading, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1743, __pyx_L1_error) if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1501 + /* "_pydevd_bundle/pydevd_cython.pyx":1744 * - * if name == 'threading': - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): # <<<<<<<<<<<<<< + * if name == "threading": + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): # <<<<<<<<<<<<<< * # We need __bootstrap_inner, not __bootstrap. * return None, False */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1501, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1501, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1744, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1501, __pyx_L1_error) - if (!__pyx_t_2) { + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1744, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1744, __pyx_L1_error) + if (!__pyx_t_6) { } else { - __pyx_t_1 = __pyx_t_2; + __pyx_t_1 = __pyx_t_6; goto __pyx_L10_bool_binop_done; } - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1501, __pyx_L1_error) - __pyx_t_1 = __pyx_t_2; + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1744, __pyx_L1_error) + __pyx_t_1 = __pyx_t_6; __pyx_L10_bool_binop_done:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __pyx_t_1; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1503 - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): + /* "_pydevd_bundle/pydevd_cython.pyx":1746 + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): * # We need __bootstrap_inner, not __bootstrap. * return None, False # <<<<<<<<<<<<<< * - * elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): + * elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_tuple__10); - __pyx_r = __pyx_tuple__10; + __Pyx_INCREF(__pyx_tuple__11); + __pyx_r = __pyx_tuple__11; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1501 + /* "_pydevd_bundle/pydevd_cython.pyx":1744 * - * if name == 'threading': - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): # <<<<<<<<<<<<<< + * if name == "threading": + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): # <<<<<<<<<<<<<< * # We need __bootstrap_inner, not __bootstrap. * return None, False */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1505 + /* "_pydevd_bundle/pydevd_cython.pyx":1748 * return None, False * - * elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): # <<<<<<<<<<<<<< + * elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): # <<<<<<<<<<<<<< * # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - * t = f_unhandled.f_locals.get('self') + * t = f_unhandled.f_locals.get("self") */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1505, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1748, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1748, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1505, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1748, __pyx_L1_error) if (!__pyx_t_1) { } else { - __pyx_t_2 = __pyx_t_1; + __pyx_t_6 = __pyx_t_1; goto __pyx_L12_bool_binop_done; } - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1505, __pyx_L1_error) - __pyx_t_2 = __pyx_t_1; + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1748, __pyx_L1_error) + __pyx_t_6 = __pyx_t_1; __pyx_L12_bool_binop_done:; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_1 = (__pyx_t_2 != 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_6; if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1507 - * elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): + /* "_pydevd_bundle/pydevd_cython.pyx":1750 + * elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): * # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - * t = f_unhandled.f_locals.get('self') # <<<<<<<<<<<<<< + * t = f_unhandled.f_locals.get("self") # <<<<<<<<<<<<<< * force_only_unhandled_tracer = True * if t is not None and isinstance(t, threading.Thread): */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1507, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1507, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1750, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_3)) { + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_3, __pyx_n_s_self) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_n_s_self); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1507, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_s_self}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1508 + /* "_pydevd_bundle/pydevd_cython.pyx":1751 * # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - * t = f_unhandled.f_locals.get('self') + * t = f_unhandled.f_locals.get("self") * force_only_unhandled_tracer = True # <<<<<<<<<<<<<< * if t is not None and isinstance(t, threading.Thread): * thread = t */ __pyx_v_force_only_unhandled_tracer = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1509 - * t = f_unhandled.f_locals.get('self') + /* "_pydevd_bundle/pydevd_cython.pyx":1752 + * t = f_unhandled.f_locals.get("self") * force_only_unhandled_tracer = True * if t is not None and isinstance(t, threading.Thread): # <<<<<<<<<<<<<< * thread = t * break */ - __pyx_t_2 = (__pyx_v_t != Py_None); - __pyx_t_8 = (__pyx_t_2 != 0); - if (__pyx_t_8) { + __pyx_t_6 = (__pyx_v_t != Py_None); + if (__pyx_t_6) { } else { - __pyx_t_1 = __pyx_t_8; + __pyx_t_1 = __pyx_t_6; goto __pyx_L15_bool_binop_done; } - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_threading); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1509, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Thread); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1509, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1752, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Thread); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyObject_IsInstance(__pyx_v_t, __pyx_t_7); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1509, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = PyObject_IsInstance(__pyx_v_t, __pyx_t_7); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1752, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_2 = (__pyx_t_8 != 0); - __pyx_t_1 = __pyx_t_2; + __pyx_t_1 = __pyx_t_6; __pyx_L15_bool_binop_done:; if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1510 + /* "_pydevd_bundle/pydevd_cython.pyx":1753 * force_only_unhandled_tracer = True * if t is not None and isinstance(t, threading.Thread): * thread = t # <<<<<<<<<<<<<< @@ -25897,17 +32748,17 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ __Pyx_INCREF(__pyx_v_t); __Pyx_DECREF_SET(__pyx_v_thread, __pyx_v_t); - /* "_pydevd_bundle/pydevd_cython.pyx":1511 + /* "_pydevd_bundle/pydevd_cython.pyx":1754 * if t is not None and isinstance(t, threading.Thread): * thread = t * break # <<<<<<<<<<<<<< * - * elif name == 'pydev_monkey': + * elif name == "pydev_monkey": */ goto __pyx_L4_break; - /* "_pydevd_bundle/pydevd_cython.pyx":1509 - * t = f_unhandled.f_locals.get('self') + /* "_pydevd_bundle/pydevd_cython.pyx":1752 + * t = f_unhandled.f_locals.get("self") * force_only_unhandled_tracer = True * if t is not None and isinstance(t, threading.Thread): # <<<<<<<<<<<<<< * thread = t @@ -25915,246 +32766,242 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1505 + /* "_pydevd_bundle/pydevd_cython.pyx":1748 * return None, False * - * elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): # <<<<<<<<<<<<<< + * elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): # <<<<<<<<<<<<<< * # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - * t = f_unhandled.f_locals.get('self') + * t = f_unhandled.f_locals.get("self") */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1500 + /* "_pydevd_bundle/pydevd_cython.pyx":1743 * name = name[:i] * - * if name == 'threading': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): + * if name == "threading": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): * # We need __bootstrap_inner, not __bootstrap. */ goto __pyx_L8; } - /* "_pydevd_bundle/pydevd_cython.pyx":1513 + /* "_pydevd_bundle/pydevd_cython.pyx":1756 * break * - * elif name == 'pydev_monkey': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name == '__call__': + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name == "__call__": * force_only_unhandled_tracer = True */ - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1513, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1756, __pyx_L1_error) + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1514 + /* "_pydevd_bundle/pydevd_cython.pyx":1757 * - * elif name == 'pydev_monkey': - * if f_unhandled.f_code.co_name == '__call__': # <<<<<<<<<<<<<< + * elif name == "pydev_monkey": + * if f_unhandled.f_code.co_name == "__call__": # <<<<<<<<<<<<<< * force_only_unhandled_tracer = True * break */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1514, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1757, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1514, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1757, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_call_2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1514, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_call_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1757, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1515 - * elif name == 'pydev_monkey': - * if f_unhandled.f_code.co_name == '__call__': + /* "_pydevd_bundle/pydevd_cython.pyx":1758 + * elif name == "pydev_monkey": + * if f_unhandled.f_code.co_name == "__call__": * force_only_unhandled_tracer = True # <<<<<<<<<<<<<< * break * */ __pyx_v_force_only_unhandled_tracer = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1516 - * if f_unhandled.f_code.co_name == '__call__': + /* "_pydevd_bundle/pydevd_cython.pyx":1759 + * if f_unhandled.f_code.co_name == "__call__": * force_only_unhandled_tracer = True * break # <<<<<<<<<<<<<< * - * elif name == 'pydevd': + * elif name == "pydevd": */ goto __pyx_L4_break; - /* "_pydevd_bundle/pydevd_cython.pyx":1514 + /* "_pydevd_bundle/pydevd_cython.pyx":1757 * - * elif name == 'pydev_monkey': - * if f_unhandled.f_code.co_name == '__call__': # <<<<<<<<<<<<<< + * elif name == "pydev_monkey": + * if f_unhandled.f_code.co_name == "__call__": # <<<<<<<<<<<<<< * force_only_unhandled_tracer = True * break */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1513 + /* "_pydevd_bundle/pydevd_cython.pyx":1756 * break * - * elif name == 'pydev_monkey': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name == '__call__': + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name == "__call__": * force_only_unhandled_tracer = True */ goto __pyx_L8; } - /* "_pydevd_bundle/pydevd_cython.pyx":1518 + /* "_pydevd_bundle/pydevd_cython.pyx":1761 * break * - * elif name == 'pydevd': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name in ('run', 'main'): + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name in ("run", "main"): * # We need to get to _exec */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1518, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1761, __pyx_L1_error) if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1519 + /* "_pydevd_bundle/pydevd_cython.pyx":1762 * - * elif name == 'pydevd': - * if f_unhandled.f_code.co_name in ('run', 'main'): # <<<<<<<<<<<<<< + * elif name == "pydevd": + * if f_unhandled.f_code.co_name in ("run", "main"): # <<<<<<<<<<<<<< * # We need to get to _exec * return None, False */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1519, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1519, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1762, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_run, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1519, __pyx_L1_error) - if (!__pyx_t_2) { + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_run, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1762, __pyx_L1_error) + if (!__pyx_t_6) { } else { - __pyx_t_1 = __pyx_t_2; + __pyx_t_1 = __pyx_t_6; goto __pyx_L19_bool_binop_done; } - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1519, __pyx_L1_error) - __pyx_t_1 = __pyx_t_2; + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_main, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1762, __pyx_L1_error) + __pyx_t_1 = __pyx_t_6; __pyx_L19_bool_binop_done:; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_6 = __pyx_t_1; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1521 - * if f_unhandled.f_code.co_name in ('run', 'main'): + /* "_pydevd_bundle/pydevd_cython.pyx":1764 + * if f_unhandled.f_code.co_name in ("run", "main"): * # We need to get to _exec * return None, False # <<<<<<<<<<<<<< * - * if f_unhandled.f_code.co_name == '_exec': + * if f_unhandled.f_code.co_name == "_exec": */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_tuple__10); - __pyx_r = __pyx_tuple__10; + __Pyx_INCREF(__pyx_tuple__11); + __pyx_r = __pyx_tuple__11; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1519 + /* "_pydevd_bundle/pydevd_cython.pyx":1762 * - * elif name == 'pydevd': - * if f_unhandled.f_code.co_name in ('run', 'main'): # <<<<<<<<<<<<<< + * elif name == "pydevd": + * if f_unhandled.f_code.co_name in ("run", "main"): # <<<<<<<<<<<<<< * # We need to get to _exec * return None, False */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1523 + /* "_pydevd_bundle/pydevd_cython.pyx":1766 * return None, False * - * if f_unhandled.f_code.co_name == '_exec': # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name == "_exec": # <<<<<<<<<<<<<< * force_only_unhandled_tracer = True * break */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1523, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1766, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1523, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_exec, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1523, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_exec, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1524 + /* "_pydevd_bundle/pydevd_cython.pyx":1767 * - * if f_unhandled.f_code.co_name == '_exec': + * if f_unhandled.f_code.co_name == "_exec": * force_only_unhandled_tracer = True # <<<<<<<<<<<<<< * break * */ __pyx_v_force_only_unhandled_tracer = 1; - /* "_pydevd_bundle/pydevd_cython.pyx":1525 - * if f_unhandled.f_code.co_name == '_exec': + /* "_pydevd_bundle/pydevd_cython.pyx":1768 + * if f_unhandled.f_code.co_name == "_exec": * force_only_unhandled_tracer = True * break # <<<<<<<<<<<<<< * - * elif name == 'pydevd_tracing': + * elif name == "pydevd_tracing": */ goto __pyx_L4_break; - /* "_pydevd_bundle/pydevd_cython.pyx":1523 + /* "_pydevd_bundle/pydevd_cython.pyx":1766 * return None, False * - * if f_unhandled.f_code.co_name == '_exec': # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name == "_exec": # <<<<<<<<<<<<<< * force_only_unhandled_tracer = True * break */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1518 + /* "_pydevd_bundle/pydevd_cython.pyx":1761 * break * - * elif name == 'pydevd': # <<<<<<<<<<<<<< - * if f_unhandled.f_code.co_name in ('run', 'main'): + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if f_unhandled.f_code.co_name in ("run", "main"): * # We need to get to _exec */ goto __pyx_L8; } - /* "_pydevd_bundle/pydevd_cython.pyx":1527 + /* "_pydevd_bundle/pydevd_cython.pyx":1770 * break * - * elif name == 'pydevd_tracing': # <<<<<<<<<<<<<< + * elif name == "pydevd_tracing": # <<<<<<<<<<<<<< * return None, False * */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd_tracing, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1527, __pyx_L1_error) - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd_tracing, Py_EQ)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1770, __pyx_L1_error) + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1528 + /* "_pydevd_bundle/pydevd_cython.pyx":1771 * - * elif name == 'pydevd_tracing': + * elif name == "pydevd_tracing": * return None, False # <<<<<<<<<<<<<< * * elif f_unhandled.f_back is None: */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_tuple__10); - __pyx_r = __pyx_tuple__10; + __Pyx_INCREF(__pyx_tuple__11); + __pyx_r = __pyx_tuple__11; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1527 + /* "_pydevd_bundle/pydevd_cython.pyx":1770 * break * - * elif name == 'pydevd_tracing': # <<<<<<<<<<<<<< + * elif name == "pydevd_tracing": # <<<<<<<<<<<<<< * return None, False * */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1530 + /* "_pydevd_bundle/pydevd_cython.pyx":1773 * return None, False * * elif f_unhandled.f_back is None: # <<<<<<<<<<<<<< * break * */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1530, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = (__pyx_t_4 == Py_None); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1773, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__pyx_t_3 == Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1531 + /* "_pydevd_bundle/pydevd_cython.pyx":1774 * * elif f_unhandled.f_back is None: * break # <<<<<<<<<<<<<< @@ -26163,7 +33010,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ goto __pyx_L4_break; - /* "_pydevd_bundle/pydevd_cython.pyx":1530 + /* "_pydevd_bundle/pydevd_cython.pyx":1773 * return None, False * * elif f_unhandled.f_back is None: # <<<<<<<<<<<<<< @@ -26173,105 +33020,116 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ } __pyx_L8:; - /* "_pydevd_bundle/pydevd_cython.pyx":1533 + /* "_pydevd_bundle/pydevd_cython.pyx":1776 * break * * f_unhandled = f_unhandled.f_back # <<<<<<<<<<<<<< * * if thread is None: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1533, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_f_unhandled, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1776, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_f_unhandled, __pyx_t_3); + __pyx_t_3 = 0; } __pyx_L4_break:; - /* "_pydevd_bundle/pydevd_cython.pyx":1535 + /* "_pydevd_bundle/pydevd_cython.pyx":1778 * f_unhandled = f_unhandled.f_back * * if thread is None: # <<<<<<<<<<<<<< * # Important: don't call threadingCurrentThread if we're in the threading module * # to avoid creating dummy threads. */ - __pyx_t_2 = (__pyx_v_thread == Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __pyx_t_6 = (__pyx_v_thread == Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1538 + /* "_pydevd_bundle/pydevd_cython.pyx":1781 * # Important: don't call threadingCurrentThread if we're in the threading module * # to avoid creating dummy threads. * if py_db.threading_get_ident is not None: # <<<<<<<<<<<<<< * thread = py_db.threading_active.get(py_db.threading_get_ident()) * if thread is None: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_get_ident); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1538, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = (__pyx_t_4 != Py_None); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_get_ident); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1781, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = (__pyx_t_3 != Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1539 + /* "_pydevd_bundle/pydevd_cython.pyx":1782 * # to avoid creating dummy threads. * if py_db.threading_get_ident is not None: * thread = py_db.threading_active.get(py_db.threading_get_ident()) # <<<<<<<<<<<<<< * if thread is None: * return None, False */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_active); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1539, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_active); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_get_ident); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1539, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_get_ident); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_10 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_8 = 1; } } - __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3); + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1539, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_thread, __pyx_t_4); - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF_SET(__pyx_v_thread, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1540 + /* "_pydevd_bundle/pydevd_cython.pyx":1783 * if py_db.threading_get_ident is not None: * thread = py_db.threading_active.get(py_db.threading_get_ident()) * if thread is None: # <<<<<<<<<<<<<< * return None, False * else: */ - __pyx_t_2 = (__pyx_v_thread == Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __pyx_t_6 = (__pyx_v_thread == Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1541 + /* "_pydevd_bundle/pydevd_cython.pyx":1784 * thread = py_db.threading_active.get(py_db.threading_get_ident()) * if thread is None: * return None, False # <<<<<<<<<<<<<< @@ -26279,11 +33137,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ * # Jython does not have threading.get_ident(). */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_tuple__10); - __pyx_r = __pyx_tuple__10; + __Pyx_INCREF(__pyx_tuple__11); + __pyx_r = __pyx_tuple__11; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1540 + /* "_pydevd_bundle/pydevd_cython.pyx":1783 * if py_db.threading_get_ident is not None: * thread = py_db.threading_active.get(py_db.threading_get_ident()) * if thread is None: # <<<<<<<<<<<<<< @@ -26292,7 +33150,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1538 + /* "_pydevd_bundle/pydevd_cython.pyx":1781 * # Important: don't call threadingCurrentThread if we're in the threading module * # to avoid creating dummy threads. * if py_db.threading_get_ident is not None: # <<<<<<<<<<<<<< @@ -26302,37 +33160,44 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ goto __pyx_L23; } - /* "_pydevd_bundle/pydevd_cython.pyx":1544 + /* "_pydevd_bundle/pydevd_cython.pyx":1787 * else: * # Jython does not have threading.get_ident(). * thread = py_db.threading_current_thread() # <<<<<<<<<<<<<< * - * if getattr(thread, 'pydev_do_not_trace', None): + * if getattr(thread, "pydev_do_not_trace", None): */ /*else*/ { - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_current_thread); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_threading_current_thread); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1787, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1544, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_thread, __pyx_t_4); - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1787, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF_SET(__pyx_v_thread, __pyx_t_3); + __pyx_t_3 = 0; } __pyx_L23:; - /* "_pydevd_bundle/pydevd_cython.pyx":1535 + /* "_pydevd_bundle/pydevd_cython.pyx":1778 * f_unhandled = f_unhandled.f_back * * if thread is None: # <<<<<<<<<<<<<< @@ -26341,67 +33206,74 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1546 + /* "_pydevd_bundle/pydevd_cython.pyx":1789 * thread = py_db.threading_current_thread() * - * if getattr(thread, 'pydev_do_not_trace', None): # <<<<<<<<<<<<<< + * if getattr(thread, "pydev_do_not_trace", None): # <<<<<<<<<<<<<< * py_db.disable_tracing() * return None, False */ - __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_thread, __pyx_n_s_pydev_do_not_trace, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1546, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1546, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_1) { + __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_thread, __pyx_n_s_pydev_do_not_trace, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1789, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1547 + /* "_pydevd_bundle/pydevd_cython.pyx":1790 * - * if getattr(thread, 'pydev_do_not_trace', None): + * if getattr(thread, "pydev_do_not_trace", None): * py_db.disable_tracing() # <<<<<<<<<<<<<< * return None, False * */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_disable_tracing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1547, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_disable_tracing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1548 - * if getattr(thread, 'pydev_do_not_trace', None): + /* "_pydevd_bundle/pydevd_cython.pyx":1791 + * if getattr(thread, "pydev_do_not_trace", None): * py_db.disable_tracing() * return None, False # <<<<<<<<<<<<<< * * try: */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_tuple__10); - __pyx_r = __pyx_tuple__10; + __Pyx_INCREF(__pyx_tuple__11); + __pyx_r = __pyx_tuple__11; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1546 + /* "_pydevd_bundle/pydevd_cython.pyx":1789 * thread = py_db.threading_current_thread() * - * if getattr(thread, 'pydev_do_not_trace', None): # <<<<<<<<<<<<<< + * if getattr(thread, "pydev_do_not_trace", None): # <<<<<<<<<<<<<< * py_db.disable_tracing() * return None, False */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1550 + /* "_pydevd_bundle/pydevd_cython.pyx":1793 * return None, False * * try: # <<<<<<<<<<<<<< @@ -26417,43 +33289,42 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ __Pyx_XGOTREF(__pyx_t_13); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1551 + /* "_pydevd_bundle/pydevd_cython.pyx":1794 * * try: * additional_info = thread.additional_info # <<<<<<<<<<<<<< * if additional_info is None: * raise AttributeError() */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1551, __pyx_L26_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_additional_info = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1794, __pyx_L26_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_additional_info = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1552 + /* "_pydevd_bundle/pydevd_cython.pyx":1795 * try: * additional_info = thread.additional_info * if additional_info is None: # <<<<<<<<<<<<<< * raise AttributeError() * except: */ - __pyx_t_1 = (__pyx_v_additional_info == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (unlikely(__pyx_t_2)) { + __pyx_t_6 = (__pyx_v_additional_info == Py_None); + if (unlikely(__pyx_t_6)) { - /* "_pydevd_bundle/pydevd_cython.pyx":1553 + /* "_pydevd_bundle/pydevd_cython.pyx":1796 * additional_info = thread.additional_info * if additional_info is None: * raise AttributeError() # <<<<<<<<<<<<<< * except: * additional_info = py_db.set_additional_thread_info(thread) */ - __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_builtin_AttributeError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1553, __pyx_L26_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 1553, __pyx_L26_error) + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_builtin_AttributeError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1796, __pyx_L26_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 1796, __pyx_L26_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1552 + /* "_pydevd_bundle/pydevd_cython.pyx":1795 * try: * additional_info = thread.additional_info * if additional_info is None: # <<<<<<<<<<<<<< @@ -26462,7 +33333,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1550 + /* "_pydevd_bundle/pydevd_cython.pyx":1793 * return None, False * * try: # <<<<<<<<<<<<<< @@ -26476,12 +33347,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ goto __pyx_L31_try_end; __pyx_L26_error:; __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1554 + /* "_pydevd_bundle/pydevd_cython.pyx":1797 * if additional_info is None: * raise AttributeError() * except: # <<<<<<<<<<<<<< @@ -26490,51 +33361,58 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ /*except:*/ { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.fix_top_level_trace_and_get_trace_func", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_7) < 0) __PYX_ERR(0, 1554, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_7) < 0) __PYX_ERR(0, 1797, __pyx_L28_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_7); - /* "_pydevd_bundle/pydevd_cython.pyx":1555 + /* "_pydevd_bundle/pydevd_cython.pyx":1798 * raise AttributeError() * except: * additional_info = py_db.set_additional_thread_info(thread) # <<<<<<<<<<<<<< * * # print('enter thread tracer', thread, get_current_thread_id(thread)) */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_additional_thread_info); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1555, __pyx_L28_except_error) + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_additional_thread_info); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1798, __pyx_L28_except_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_10))) { __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_14)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_14); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_8 = 1; } } - __pyx_t_9 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_14, __pyx_v_thread) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_thread); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1555, __pyx_L28_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_thread}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1798, __pyx_L28_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } __Pyx_XDECREF_SET(__pyx_v_additional_info, __pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L27_exception_handled; } - __pyx_L28_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":1550 + /* "_pydevd_bundle/pydevd_cython.pyx":1793 * return None, False * * try: # <<<<<<<<<<<<<< * additional_info = thread.additional_info * if additional_info is None: */ + __pyx_L28_except_error:; __Pyx_XGIVEREF(__pyx_t_11); __Pyx_XGIVEREF(__pyx_t_12); __Pyx_XGIVEREF(__pyx_t_13); @@ -26548,106 +33426,112 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ __pyx_L31_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1558 + /* "_pydevd_bundle/pydevd_cython.pyx":1801 * * # print('enter thread tracer', thread, get_current_thread_id(thread)) * args = (py_db, thread, additional_info, global_cache_skips, global_cache_frame_skips) # <<<<<<<<<<<<<< * * if f_unhandled is not None: */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_global_cache_skips); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1558, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_global_cache_skips); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_global_cache_frame_skips); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1558, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_global_cache_frame_skips); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1801, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1558, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v_py_db); __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_py_db); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_py_db)) __PYX_ERR(0, 1801, __pyx_L1_error); __Pyx_INCREF(__pyx_v_thread); __Pyx_GIVEREF(__pyx_v_thread); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_thread)) __PYX_ERR(0, 1801, __pyx_L1_error); __Pyx_INCREF(__pyx_v_additional_info); __Pyx_GIVEREF(__pyx_v_additional_info); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_additional_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_additional_info)) __PYX_ERR(0, 1801, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_7)) __PYX_ERR(0, 1801, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_2)) __PYX_ERR(0, 1801, __pyx_L1_error); __pyx_t_7 = 0; + __pyx_t_2 = 0; + __pyx_v_args = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_args = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1560 + /* "_pydevd_bundle/pydevd_cython.pyx":1803 * args = (py_db, thread, additional_info, global_cache_skips, global_cache_frame_skips) * * if f_unhandled is not None: # <<<<<<<<<<<<<< * if f_unhandled.f_back is None and not force_only_unhandled_tracer: * # Happens when we attach to a running program (cannot reuse instance because it's mutable). */ - __pyx_t_2 = (__pyx_v_f_unhandled != Py_None); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { + __pyx_t_6 = (__pyx_v_f_unhandled != Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1561 + /* "_pydevd_bundle/pydevd_cython.pyx":1804 * * if f_unhandled is not None: * if f_unhandled.f_back is None and not force_only_unhandled_tracer: # <<<<<<<<<<<<<< * # Happens when we attach to a running program (cannot reuse instance because it's mutable). * top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1561, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__pyx_t_4 == Py_None); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = (__pyx_t_2 != 0); - if (__pyx_t_8) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1804, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = (__pyx_t_3 == Py_None); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { } else { - __pyx_t_1 = __pyx_t_8; + __pyx_t_6 = __pyx_t_1; goto __pyx_L37_bool_binop_done; } - __pyx_t_8 = ((!(__pyx_v_force_only_unhandled_tracer != 0)) != 0); - __pyx_t_1 = __pyx_t_8; + __pyx_t_1 = (!__pyx_v_force_only_unhandled_tracer); + __pyx_t_6 = __pyx_t_1; __pyx_L37_bool_binop_done:; - if (__pyx_t_1) { + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1563 + /* "_pydevd_bundle/pydevd_cython.pyx":1806 * if f_unhandled.f_back is None and not force_only_unhandled_tracer: * # Happens when we attach to a running program (cannot reuse instance because it's mutable). * top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) # <<<<<<<<<<<<<< - * additional_info.top_level_thread_tracer_no_back_frames.append(top_level_thread_tracer) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). - * else: + * additional_info.top_level_thread_tracer_no_back_frames.append( + * top_level_thread_tracer */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1563, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1806, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L1_error); __Pyx_INCREF(__pyx_v_args); __Pyx_GIVEREF(__pyx_v_args); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1563, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_top_level_thread_tracer = __pyx_t_4; - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_args)) __PYX_ERR(0, 1806, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_top_level_thread_tracer = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1564 + /* "_pydevd_bundle/pydevd_cython.pyx":1807 * # Happens when we attach to a running program (cannot reuse instance because it's mutable). * top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) - * additional_info.top_level_thread_tracer_no_back_frames.append(top_level_thread_tracer) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). # <<<<<<<<<<<<<< + * additional_info.top_level_thread_tracer_no_back_frames.append( # <<<<<<<<<<<<<< + * top_level_thread_tracer + * ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_no_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1807, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "_pydevd_bundle/pydevd_cython.pyx":1808 + * top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) + * additional_info.top_level_thread_tracer_no_back_frames.append( + * top_level_thread_tracer # <<<<<<<<<<<<<< + * ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). * else: - * top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_no_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1564, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_15 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_v_top_level_thread_tracer); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 1564, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_15 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_v_top_level_thread_tracer); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(0, 1807, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1561 + /* "_pydevd_bundle/pydevd_cython.pyx":1804 * * if f_unhandled is not None: * if f_unhandled.f_back is None and not force_only_unhandled_tracer: # <<<<<<<<<<<<<< @@ -26657,52 +33541,51 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ goto __pyx_L36; } - /* "_pydevd_bundle/pydevd_cython.pyx":1566 - * additional_info.top_level_thread_tracer_no_back_frames.append(top_level_thread_tracer) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + /* "_pydevd_bundle/pydevd_cython.pyx":1811 + * ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). * else: * top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled # <<<<<<<<<<<<<< * if top_level_thread_tracer is None: * # Stop in some internal place to report about unhandled exceptions */ /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_unhandle); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1566, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_top_level_thread_tracer = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_unhandle); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1811, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_top_level_thread_tracer = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1567 + /* "_pydevd_bundle/pydevd_cython.pyx":1812 * else: * top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled * if top_level_thread_tracer is None: # <<<<<<<<<<<<<< * # Stop in some internal place to report about unhandled exceptions * top_level_thread_tracer = TopLevelThreadTracerOnlyUnhandledExceptions(args) */ - __pyx_t_1 = (__pyx_v_top_level_thread_tracer == Py_None); - __pyx_t_8 = (__pyx_t_1 != 0); - if (__pyx_t_8) { + __pyx_t_6 = (__pyx_v_top_level_thread_tracer == Py_None); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1569 + /* "_pydevd_bundle/pydevd_cython.pyx":1814 * if top_level_thread_tracer is None: * # Stop in some internal place to report about unhandled exceptions * top_level_thread_tracer = TopLevelThreadTracerOnlyUnhandledExceptions(args) # <<<<<<<<<<<<<< - * additional_info.top_level_thread_tracer_unhandled = top_level_thread_tracer # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). - * + * additional_info.top_level_thread_tracer_unhandled = ( + * top_level_thread_tracer */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), __pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1569, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_top_level_thread_tracer, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1814, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_top_level_thread_tracer, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1570 + /* "_pydevd_bundle/pydevd_cython.pyx":1815 * # Stop in some internal place to report about unhandled exceptions * top_level_thread_tracer = TopLevelThreadTracerOnlyUnhandledExceptions(args) - * additional_info.top_level_thread_tracer_unhandled = top_level_thread_tracer # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). # <<<<<<<<<<<<<< - * - * # print(' --> found to trace unhandled', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) + * additional_info.top_level_thread_tracer_unhandled = ( # <<<<<<<<<<<<<< + * top_level_thread_tracer + * ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_unhandle, __pyx_v_top_level_thread_tracer) < 0) __PYX_ERR(0, 1570, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_top_level_thread_tracer_unhandle, __pyx_v_top_level_thread_tracer) < 0) __PYX_ERR(0, 1815, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1567 + /* "_pydevd_bundle/pydevd_cython.pyx":1812 * else: * top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled * if top_level_thread_tracer is None: # <<<<<<<<<<<<<< @@ -26713,66 +33596,72 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ } __pyx_L36:; - /* "_pydevd_bundle/pydevd_cython.pyx":1573 + /* "_pydevd_bundle/pydevd_cython.pyx":1820 * * # print(' --> found to trace unhandled', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) * f_trace = top_level_thread_tracer.get_trace_dispatch_func() # <<<<<<<<<<<<<< + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * f_trace = SafeCallWrapper(f_trace) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_top_level_thread_tracer, __pyx_n_s_get_trace_dispatch_func); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1573, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_top_level_thread_tracer, __pyx_n_s_get_trace_dispatch_func); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1820, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __pyx_t_7 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_8 = 1; } } - __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1573, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_f_trace = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1820, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_f_trace = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1575 - * f_trace = top_level_thread_tracer.get_trace_dispatch_func() + /* "_pydevd_bundle/pydevd_cython.pyx":1823 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * f_trace = SafeCallWrapper(f_trace) # <<<<<<<<<<<<<< * # ENDIF - * f_unhandled.f_trace = f_trace + * # fmt: on */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_f_trace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1575, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_f_trace, __pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_f_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_f_trace, __pyx_t_3); + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1577 - * f_trace = SafeCallWrapper(f_trace) + /* "_pydevd_bundle/pydevd_cython.pyx":1826 * # ENDIF + * # fmt: on * f_unhandled.f_trace = f_trace # <<<<<<<<<<<<<< * * if frame is f_unhandled: */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_trace, __pyx_v_f_trace) < 0) __PYX_ERR(0, 1577, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_f_unhandled, __pyx_n_s_f_trace, __pyx_v_f_trace) < 0) __PYX_ERR(0, 1826, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1579 + /* "_pydevd_bundle/pydevd_cython.pyx":1828 * f_unhandled.f_trace = f_trace * * if frame is f_unhandled: # <<<<<<<<<<<<<< * return f_trace, False * */ - __pyx_t_8 = (__pyx_v_frame == __pyx_v_f_unhandled); - __pyx_t_1 = (__pyx_t_8 != 0); - if (__pyx_t_1) { + __pyx_t_6 = (__pyx_v_frame == __pyx_v_f_unhandled); + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1580 + /* "_pydevd_bundle/pydevd_cython.pyx":1829 * * if frame is f_unhandled: * return f_trace, False # <<<<<<<<<<<<<< @@ -26780,19 +33669,19 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ * thread_tracer = additional_info.thread_tracer */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1580, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1829, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_f_trace); __Pyx_GIVEREF(__pyx_v_f_trace); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_f_trace); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_f_trace)) __PYX_ERR(0, 1829, __pyx_L1_error); __Pyx_INCREF(Py_False); __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_4, 1, Py_False); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, Py_False)) __PYX_ERR(0, 1829, __pyx_L1_error); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1579 + /* "_pydevd_bundle/pydevd_cython.pyx":1828 * f_unhandled.f_trace = f_trace * * if frame is f_unhandled: # <<<<<<<<<<<<<< @@ -26801,7 +33690,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1560 + /* "_pydevd_bundle/pydevd_cython.pyx":1803 * args = (py_db, thread, additional_info, global_cache_skips, global_cache_frame_skips) * * if f_unhandled is not None: # <<<<<<<<<<<<<< @@ -26810,66 +33699,64 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1582 + /* "_pydevd_bundle/pydevd_cython.pyx":1831 * return f_trace, False * * thread_tracer = additional_info.thread_tracer # <<<<<<<<<<<<<< * if thread_tracer is None or thread_tracer._args[0] is not py_db: * thread_tracer = ThreadTracer(args) */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_thread_tracer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1582, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_thread_tracer = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_thread_tracer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_thread_tracer = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1583 + /* "_pydevd_bundle/pydevd_cython.pyx":1832 * * thread_tracer = additional_info.thread_tracer * if thread_tracer is None or thread_tracer._args[0] is not py_db: # <<<<<<<<<<<<<< * thread_tracer = ThreadTracer(args) * additional_info.thread_tracer = thread_tracer */ - __pyx_t_8 = (__pyx_v_thread_tracer == Py_None); - __pyx_t_2 = (__pyx_t_8 != 0); - if (!__pyx_t_2) { + __pyx_t_1 = (__pyx_v_thread_tracer == Py_None); + if (!__pyx_t_1) { } else { - __pyx_t_1 = __pyx_t_2; + __pyx_t_6 = __pyx_t_1; goto __pyx_L42_bool_binop_done; } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_tracer, __pyx_n_s_args_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1583, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1583, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_tracer, __pyx_n_s_args_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1832, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = (__pyx_t_3 != __pyx_v_py_db); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1832, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = (__pyx_t_2 != 0); - __pyx_t_1 = __pyx_t_8; + __pyx_t_1 = (__pyx_t_2 != __pyx_v_py_db); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __pyx_t_1; __pyx_L42_bool_binop_done:; - if (__pyx_t_1) { + if (__pyx_t_6) { - /* "_pydevd_bundle/pydevd_cython.pyx":1584 + /* "_pydevd_bundle/pydevd_cython.pyx":1833 * thread_tracer = additional_info.thread_tracer * if thread_tracer is None or thread_tracer._args[0] is not py_db: * thread_tracer = ThreadTracer(args) # <<<<<<<<<<<<<< * additional_info.thread_tracer = thread_tracer * */ - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1584, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_thread_tracer, __pyx_t_3); - __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1833, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_thread_tracer, __pyx_t_2); + __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1585 + /* "_pydevd_bundle/pydevd_cython.pyx":1834 * if thread_tracer is None or thread_tracer._args[0] is not py_db: * thread_tracer = ThreadTracer(args) * additional_info.thread_tracer = thread_tracer # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * # fmt: off */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_thread_tracer, __pyx_v_thread_tracer) < 0) __PYX_ERR(0, 1585, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_thread_tracer, __pyx_v_thread_tracer) < 0) __PYX_ERR(0, 1834, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1583 + /* "_pydevd_bundle/pydevd_cython.pyx":1832 * * thread_tracer = additional_info.thread_tracer * if thread_tracer is None or thread_tracer._args[0] is not py_db: # <<<<<<<<<<<<<< @@ -26878,40 +33765,40 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1588 - * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + /* "_pydevd_bundle/pydevd_cython.pyx":1838 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * return SafeCallWrapper(thread_tracer), True # <<<<<<<<<<<<<< - * # ELSE + * # ELSE * # return thread_tracer, True */ __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_thread_tracer); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1588, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_thread_tracer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1838, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1838, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1588, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 1838, __pyx_L1_error); __Pyx_INCREF(Py_True); __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_4, 1, Py_True); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, Py_True)) __PYX_ERR(0, 1838, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1466 + /* "_pydevd_bundle/pydevd_cython.pyx":1707 * * * def fix_top_level_trace_and_get_trace_func(py_db, frame): # <<<<<<<<<<<<<< + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef str filename; */ /* function exit code */ __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); @@ -26935,7 +33822,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1594 +/* "_pydevd_bundle/pydevd_cython.pyx":1845 * * * def trace_dispatch(py_db, frame, event, arg): # <<<<<<<<<<<<<< @@ -26944,93 +33831,147 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_6fix_top_level_trace_ */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9trace_dispatch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_9trace_dispatch = {"trace_dispatch", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9trace_dispatch, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_9trace_dispatch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_21trace_dispatch(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_21trace_dispatch = {"trace_dispatch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_21trace_dispatch, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_21trace_dispatch(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_py_db = 0; PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trace_dispatch (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_py_db)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 1); __PYX_ERR(0, 1594, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 1); __PYX_ERR(0, 1845, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 2); __PYX_ERR(0, 1594, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 2); __PYX_ERR(0, 1845, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1845, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 3); __PYX_ERR(0, 1594, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, 3); __PYX_ERR(0, 1845, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace_dispatch") < 0)) __PYX_ERR(0, 1594, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "trace_dispatch") < 0)) __PYX_ERR(0, 1845, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); } __pyx_v_py_db = values[0]; __pyx_v_frame = values[1]; __pyx_v_event = values[2]; __pyx_v_arg = values[3]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1594, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1845, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(__pyx_self, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_20trace_dispatch(__pyx_self, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20trace_dispatch(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { PyObject *__pyx_v_thread_trace_func = NULL; PyObject *__pyx_v_apply_to_settrace = NULL; PyObject *__pyx_r = NULL; @@ -27038,28 +33979,28 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHO PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; + unsigned int __pyx_t_4; PyObject *__pyx_t_5 = NULL; PyObject *(*__pyx_t_6)(PyObject *); int __pyx_t_7; - int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_dispatch", 0); + __Pyx_RefNannySetupContext("trace_dispatch", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1595 + /* "_pydevd_bundle/pydevd_cython.pyx":1846 * * def trace_dispatch(py_db, frame, event, arg): * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) # <<<<<<<<<<<<<< * if thread_trace_func is None: - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); @@ -27069,178 +34010,160 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHO __pyx_t_4 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1595, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1595, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_py_db); - __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_py_db); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_frame); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1595, __pyx_L1_error) + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 2)) { if (size > 2) __Pyx_RaiseTooManyValuesError(2); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1595, __pyx_L1_error) + __PYX_ERR(0, 1846, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_3); #else - __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __pyx_L1_error) + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1846, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; - __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1595, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); - index = 1; __pyx_t_5 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1595, __pyx_L1_error) + index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 1846, __pyx_L1_error) __pyx_t_6 = NULL; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L4_unpacking_done; __pyx_L3_unpacking_failed:; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1595, __pyx_L1_error) + __PYX_ERR(0, 1846, __pyx_L1_error) __pyx_L4_unpacking_done:; } __pyx_v_thread_trace_func = __pyx_t_2; __pyx_t_2 = 0; - __pyx_v_apply_to_settrace = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_v_apply_to_settrace = __pyx_t_3; + __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1596 + /* "_pydevd_bundle/pydevd_cython.pyx":1847 * def trace_dispatch(py_db, frame, event, arg): * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) * if thread_trace_func is None: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * if apply_to_settrace: */ __pyx_t_7 = (__pyx_v_thread_trace_func == Py_None); - __pyx_t_8 = (__pyx_t_7 != 0); - if (__pyx_t_8) { + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1597 + /* "_pydevd_bundle/pydevd_cython.pyx":1848 * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) * if thread_trace_func is None: - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * if apply_to_settrace: * py_db.enable_tracing(thread_trace_func) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1597, __pyx_L1_error) - if (__pyx_t_8) { + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1848, __pyx_L1_error) + if (__pyx_t_7) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1597, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = __pyx_t_5; - __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __pyx_t_3; + __pyx_t_3 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1596 + /* "_pydevd_bundle/pydevd_cython.pyx":1847 * def trace_dispatch(py_db, frame, event, arg): * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) * if thread_trace_func is None: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * if apply_to_settrace: */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1598 + /* "_pydevd_bundle/pydevd_cython.pyx":1849 * if thread_trace_func is None: - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * if apply_to_settrace: # <<<<<<<<<<<<<< * py_db.enable_tracing(thread_trace_func) * return thread_trace_func(frame, event, arg) */ - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_settrace); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1598, __pyx_L1_error) - if (__pyx_t_8) { + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_settrace); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1849, __pyx_L1_error) + if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1599 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":1850 + * return None if event == "call" else NO_FTRACE * if apply_to_settrace: * py_db.enable_tracing(thread_trace_func) # <<<<<<<<<<<<<< * return thread_trace_func(frame, event, arg) * */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_enable_tracing); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1599, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_enable_tracing); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_v_thread_trace_func) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_thread_trace_func); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1599, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_thread_trace_func}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1598 + /* "_pydevd_bundle/pydevd_cython.pyx":1849 * if thread_trace_func is None: - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * if apply_to_settrace: # <<<<<<<<<<<<<< * py_db.enable_tracing(thread_trace_func) * return thread_trace_func(frame, event, arg) */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1600 + /* "_pydevd_bundle/pydevd_cython.pyx":1851 * if apply_to_settrace: * py_db.enable_tracing(thread_trace_func) * return thread_trace_func(frame, event, arg) # <<<<<<<<<<<<<< @@ -27249,59 +34172,33 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHO */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_thread_trace_func); - __pyx_t_5 = __pyx_v_thread_trace_func; __pyx_t_2 = NULL; + __pyx_t_3 = __pyx_v_thread_trace_func; __pyx_t_2 = NULL; __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); + __Pyx_DECREF_SET(__pyx_t_3, function); __pyx_t_4 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1600, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1600, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_3 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1600, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_4, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_4, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_3, 2+__pyx_t_4, __pyx_v_arg); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1600, __pyx_L1_error) + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 3+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1851, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1594 + /* "_pydevd_bundle/pydevd_cython.pyx":1845 * * * def trace_dispatch(py_db, frame, event, arg): # <<<<<<<<<<<<<< @@ -27325,7 +34222,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHO return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1606 +/* "_pydevd_bundle/pydevd_cython.pyx":1858 * cdef class TopLevelThreadTracerOnlyUnhandledExceptions: * cdef public tuple _args; * def __init__(self, tuple args): # <<<<<<<<<<<<<< @@ -27337,49 +34234,69 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_8trace_dispatch(CYTHO static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_args = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1858, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1606, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 1858, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } __pyx_v_args = ((PyObject*)values[0]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1606, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1858, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1606, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1858, __pyx_L1_error) __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self), __pyx_v_args); /* function exit code */ @@ -27387,6 +34304,12 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -27394,9 +34317,9 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self, PyObject *__pyx_v_args) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1607 + /* "_pydevd_bundle/pydevd_cython.pyx":1859 * cdef public tuple _args; * def __init__(self, tuple args): * self._args = args # <<<<<<<<<<<<<< @@ -27409,7 +34332,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU __Pyx_DECREF(__pyx_v_self->_args); __pyx_v_self->_args = __pyx_v_args; - /* "_pydevd_bundle/pydevd_cython.pyx":1606 + /* "_pydevd_bundle/pydevd_cython.pyx":1858 * cdef class TopLevelThreadTracerOnlyUnhandledExceptions: * cdef public tuple _args; * def __init__(self, tuple args): # <<<<<<<<<<<<<< @@ -27423,8 +34346,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1615 - * # ENDIF +/* "_pydevd_bundle/pydevd_cython.pyx":1868 + * # fmt: on * * def trace_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. @@ -27432,69 +34355,114 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions = {"trace_unhandled_exceptions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { CYTHON_UNUSED PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trace_unhandled_exceptions (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1868, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1868, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, 1); __PYX_ERR(0, 1615, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, 1); __PYX_ERR(0, 1868, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1868, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, 2); __PYX_ERR(0, 1615, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, 2); __PYX_ERR(0, 1868, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace_unhandled_exceptions") < 0)) __PYX_ERR(0, 1615, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "trace_unhandled_exceptions") < 0)) __PYX_ERR(0, 1868, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v_frame = values[0]; __pyx_v_event = values[1]; __pyx_v_arg = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1615, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_unhandled_exceptions", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1868, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions.trace_unhandled_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -27502,6 +34470,12 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_2trace_unhandled_exceptions(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -27514,178 +34488,146 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; + unsigned int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_unhandled_exceptions", 0); + __Pyx_RefNannySetupContext("trace_unhandled_exceptions", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1618 + /* "_pydevd_bundle/pydevd_cython.pyx":1871 * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. * # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) - * if event == 'exception' and arg is not None: # <<<<<<<<<<<<<< + * if event == "exception" and arg is not None: # <<<<<<<<<<<<<< * py_db, t, additional_info = self._args[0:3] * if arg is not None: */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1618, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1871, __pyx_L1_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L4_bool_binop_done; } __pyx_t_2 = (__pyx_v_arg != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - __pyx_t_1 = __pyx_t_3; + __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1619 + /* "_pydevd_bundle/pydevd_cython.pyx":1872 * # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) - * if event == 'exception' and arg is not None: + * if event == "exception" and arg is not None: * py_db, t, additional_info = self._args[0:3] # <<<<<<<<<<<<<< * if arg is not None: * if not additional_info.suspended_at_unhandled: */ if (unlikely(__pyx_v_self->_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1619, __pyx_L1_error) + __PYX_ERR(0, 1872, __pyx_L1_error) } - __pyx_t_4 = __Pyx_PyTuple_GetSlice(__pyx_v_self->_args, 0, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1619, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyTuple_GetSlice(__pyx_v_self->_args, 0, 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1872, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); if (1) { - PyObject* sequence = __pyx_t_4; + PyObject* sequence = __pyx_t_3; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1619, __pyx_L1_error) + __PYX_ERR(0, 1872, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); #else - __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1619, __pyx_L1_error) + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1872, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1619, __pyx_L1_error) + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1872, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1619, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); #endif - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __pyx_v_py_db = __pyx_t_5; + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_t = __pyx_t_5; __pyx_t_5 = 0; - __pyx_v_t = __pyx_t_6; + __pyx_v_additional_info = __pyx_t_6; __pyx_t_6 = 0; - __pyx_v_additional_info = __pyx_t_7; - __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1620 - * if event == 'exception' and arg is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1873 + * if event == "exception" and arg is not None: * py_db, t, additional_info = self._args[0:3] * if arg is not None: # <<<<<<<<<<<<<< * if not additional_info.suspended_at_unhandled: * additional_info.suspended_at_unhandled = True */ __pyx_t_1 = (__pyx_v_arg != Py_None); - __pyx_t_3 = (__pyx_t_1 != 0); - if (__pyx_t_3) { + if (__pyx_t_1) { - /* "_pydevd_bundle/pydevd_cython.pyx":1621 + /* "_pydevd_bundle/pydevd_cython.pyx":1874 * py_db, t, additional_info = self._args[0:3] * if arg is not None: * if not additional_info.suspended_at_unhandled: # <<<<<<<<<<<<<< * additional_info.suspended_at_unhandled = True * */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1621, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1621, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_1 = ((!__pyx_t_3) != 0); - if (__pyx_t_1) { + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1874, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1874, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = (!__pyx_t_1); + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1622 + /* "_pydevd_bundle/pydevd_cython.pyx":1875 * if arg is not None: * if not additional_info.suspended_at_unhandled: * additional_info.suspended_at_unhandled = True # <<<<<<<<<<<<<< * * py_db.stop_on_unhandled_exception(py_db, t, additional_info, arg) */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled, Py_True) < 0) __PYX_ERR(0, 1622, __pyx_L1_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled, Py_True) < 0) __PYX_ERR(0, 1875, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1624 + /* "_pydevd_bundle/pydevd_cython.pyx":1877 * additional_info.suspended_at_unhandled = True * * py_db.stop_on_unhandled_exception(py_db, t, additional_info, arg) # <<<<<<<<<<<<<< * * # No need to reset frame.f_trace to keep the same trace function. */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1624, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1877, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_8 = 1; + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_7 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[5] = {__pyx_t_6, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_arg}; - __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_4); - } else #endif { - __pyx_t_5 = PyTuple_New(4+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1624, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_py_db); - __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_8, __pyx_v_py_db); - __Pyx_INCREF(__pyx_v_t); - __Pyx_GIVEREF(__pyx_v_t); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_8, __pyx_v_t); - __Pyx_INCREF(__pyx_v_additional_info); - __Pyx_GIVEREF(__pyx_v_additional_info); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_8, __pyx_v_additional_info); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_8, __pyx_v_arg); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_arg}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 4+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1877, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1621 + /* "_pydevd_bundle/pydevd_cython.pyx":1874 * py_db, t, additional_info = self._args[0:3] * if arg is not None: * if not additional_info.suspended_at_unhandled: # <<<<<<<<<<<<<< @@ -27694,8 +34636,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1620 - * if event == 'exception' and arg is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1873 + * if event == "exception" and arg is not None: * py_db, t, additional_info = self._args[0:3] * if arg is not None: # <<<<<<<<<<<<<< * if not additional_info.suspended_at_unhandled: @@ -27703,16 +34645,16 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1618 + /* "_pydevd_bundle/pydevd_cython.pyx":1871 * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. * # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) - * if event == 'exception' and arg is not None: # <<<<<<<<<<<<<< + * if event == "exception" and arg is not None: # <<<<<<<<<<<<<< * py_db, t, additional_info = self._args[0:3] * if arg is not None: */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1627 + /* "_pydevd_bundle/pydevd_cython.pyx":1880 * * # No need to reset frame.f_trace to keep the same trace function. * return self.trace_unhandled_exceptions # <<<<<<<<<<<<<< @@ -27720,14 +34662,14 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace * def get_trace_dispatch_func(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_unhandled_exceptions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_unhandled_exceptions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1880, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1615 - * # ENDIF + /* "_pydevd_bundle/pydevd_cython.pyx":1868 + * # fmt: on * * def trace_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. @@ -27736,10 +34678,10 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace /* function exit code */ __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions.trace_unhandled_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -27751,7 +34693,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1629 +/* "_pydevd_bundle/pydevd_cython.pyx":1882 * return self.trace_unhandled_exceptions * * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< @@ -27760,11 +34702,39 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func = {"get_trace_dispatch_func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_trace_dispatch_func (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("get_trace_dispatch_func", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_trace_dispatch_func", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_4get_trace_dispatch_func(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self)); /* function exit code */ @@ -27779,23 +34749,23 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_trace_dispatch_func", 0); + __Pyx_RefNannySetupContext("get_trace_dispatch_func", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1630 + /* "_pydevd_bundle/pydevd_cython.pyx":1883 * * def get_trace_dispatch_func(self): * return self.trace_unhandled_exceptions # <<<<<<<<<<<<<< * - * + * # fmt: off */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_unhandled_exceptions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1630, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_unhandled_exceptions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1883, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1629 + /* "_pydevd_bundle/pydevd_cython.pyx":1882 * return self.trace_unhandled_exceptions * * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< @@ -27814,7 +34784,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1605 +/* "_pydevd_bundle/pydevd_cython.pyx":1857 * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class TopLevelThreadTracerOnlyUnhandledExceptions: * cdef public tuple _args; # <<<<<<<<<<<<<< @@ -27825,9 +34795,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self)); /* function exit code */ @@ -27838,7 +34810,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_args); __pyx_r = __pyx_v_self->_args; @@ -27854,9 +34826,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -27871,8 +34845,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_value))) __PYX_ERR(0, 1857, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -27896,9 +34870,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self)); /* function exit code */ @@ -27909,7 +34885,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5_args_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_args); @@ -27929,11 +34905,39 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyU */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_6__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self)); /* function exit code */ @@ -27949,13 +34953,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -27968,7 +34971,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->_args); __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->_args); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->_args)) __PYX_ERR(2, 5, __pyx_L1_error); __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -27992,8 +34995,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace * use_setstate = True */ __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -28006,12 +35008,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; /* "(tree fragment)":9 * if _dict is not None: @@ -28037,11 +35039,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace * else: * use_setstate = self._args is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, None), state */ /*else*/ { - __pyx_t_3 = (__pyx_v_self->_args != ((PyObject*)Py_None)); - __pyx_v_use_setstate = __pyx_t_3; + __pyx_t_2 = (__pyx_v_self->_args != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_2; } __pyx_L3:; @@ -28049,89 +35051,88 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace * else: * use_setstate = self._args is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, None), state * else: */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self._args is not None * if use_setstate: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_TopLevelThreadTra); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_TopLevelThreadTra); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64458794); - __Pyx_GIVEREF(__pyx_int_64458794); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64458794); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_18997755); + __Pyx_GIVEREF(__pyx_int_18997755); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_18997755)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_3 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self._args is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, None), state * else: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_TopLevelThreadTra); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_TopLevelThreadTra); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64458794); - __Pyx_GIVEREF(__pyx_int_64458794); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64458794); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_18997755); + __Pyx_GIVEREF(__pyx_int_18997755); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_18997755)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error); __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; } @@ -28144,8 +35145,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -28158,20 +35159,103 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace /* "(tree fragment)":16 * else: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -28183,21 +35267,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) */ @@ -28215,7 +35299,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1641 +/* "_pydevd_bundle/pydevd_cython.pyx":1894 * cdef public set _raise_lines; * cdef public int _last_raise_line; * def __init__(self, frame_trace_dispatch, tuple args): # <<<<<<<<<<<<<< @@ -28228,59 +35312,83 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_frame_trace_dispatch = 0; PyObject *__pyx_v_args = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame_trace_dispatch,&__pyx_n_s_args,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame_trace_dispatch,&__pyx_n_s_args,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame_trace_dispatch)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame_trace_dispatch)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1894, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1894, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1641, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1894, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1641, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 1894, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); } __pyx_v_frame_trace_dispatch = values[0]; __pyx_v_args = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1641, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1894, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1641, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1894, __pyx_L1_error) __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), __pyx_v_frame_trace_dispatch, __pyx_v_args); /* function exit code */ @@ -28288,6 +35396,12 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -28299,9 +35413,9 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1642 + /* "_pydevd_bundle/pydevd_cython.pyx":1895 * cdef public int _last_raise_line; * def __init__(self, frame_trace_dispatch, tuple args): * self._frame_trace_dispatch = frame_trace_dispatch # <<<<<<<<<<<<<< @@ -28314,7 +35428,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __Pyx_DECREF(__pyx_v_self->_frame_trace_dispatch); __pyx_v_self->_frame_trace_dispatch = __pyx_v_frame_trace_dispatch; - /* "_pydevd_bundle/pydevd_cython.pyx":1643 + /* "_pydevd_bundle/pydevd_cython.pyx":1896 * def __init__(self, frame_trace_dispatch, tuple args): * self._frame_trace_dispatch = frame_trace_dispatch * self._args = args # <<<<<<<<<<<<<< @@ -28327,7 +35441,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __Pyx_DECREF(__pyx_v_self->_args); __pyx_v_self->_args = __pyx_v_args; - /* "_pydevd_bundle/pydevd_cython.pyx":1644 + /* "_pydevd_bundle/pydevd_cython.pyx":1897 * self._frame_trace_dispatch = frame_trace_dispatch * self._args = args * self.try_except_infos = None # <<<<<<<<<<<<<< @@ -28340,7 +35454,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __Pyx_DECREF(__pyx_v_self->try_except_infos); __pyx_v_self->try_except_infos = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":1645 + /* "_pydevd_bundle/pydevd_cython.pyx":1898 * self._args = args * self.try_except_infos = None * self._last_exc_arg = None # <<<<<<<<<<<<<< @@ -28353,14 +35467,14 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __Pyx_DECREF(__pyx_v_self->_last_exc_arg); __pyx_v_self->_last_exc_arg = Py_None; - /* "_pydevd_bundle/pydevd_cython.pyx":1646 + /* "_pydevd_bundle/pydevd_cython.pyx":1899 * self.try_except_infos = None * self._last_exc_arg = None * self._raise_lines = set() # <<<<<<<<<<<<<< * self._last_raise_line = -1 * # ELSE */ - __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1899, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_raise_lines); @@ -28368,7 +35482,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __pyx_v_self->_raise_lines = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1647 + /* "_pydevd_bundle/pydevd_cython.pyx":1900 * self._last_exc_arg = None * self._raise_lines = set() * self._last_raise_line = -1 # <<<<<<<<<<<<<< @@ -28377,7 +35491,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac */ __pyx_v_self->_last_raise_line = -1; - /* "_pydevd_bundle/pydevd_cython.pyx":1641 + /* "_pydevd_bundle/pydevd_cython.pyx":1894 * cdef public set _raise_lines; * cdef public int _last_raise_line; * def __init__(self, frame_trace_dispatch, tuple args): # <<<<<<<<<<<<<< @@ -28397,8 +35511,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1671 - * # ENDIF +/* "_pydevd_bundle/pydevd_cython.pyx":1926 + * # fmt: on * * def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< * # DEBUG = 'code_to_debug' in frame.f_code.co_filename @@ -28406,69 +35520,114 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions = {"trace_dispatch_and_unhandled_exceptions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("trace_dispatch_and_unhandled_exceptions (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, 1); __PYX_ERR(0, 1671, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, 1); __PYX_ERR(0, 1926, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1926, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, 2); __PYX_ERR(0, 1671, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, 2); __PYX_ERR(0, 1926, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "trace_dispatch_and_unhandled_exceptions") < 0)) __PYX_ERR(0, 1671, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "trace_dispatch_and_unhandled_exceptions") < 0)) __PYX_ERR(0, 1926, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v_frame = values[0]; __pyx_v_event = values[1]; __pyx_v_arg = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1671, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("trace_dispatch_and_unhandled_exceptions", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1926, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame.trace_dispatch_and_unhandled_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -28476,6 +35635,12 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_2trace_dispatch_and_unhandled_exceptions(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -28490,13 +35655,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_5; int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; + int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; + PyObject *__pyx_t_9 = NULL; int __pyx_t_10; char const *__pyx_t_11; PyObject *__pyx_t_12 = NULL; @@ -28508,9 +35673,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("trace_dispatch_and_unhandled_exceptions", 0); + __Pyx_RefNannySetupContext("trace_dispatch_and_unhandled_exceptions", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1674 + /* "_pydevd_bundle/pydevd_cython.pyx":1929 * # DEBUG = 'code_to_debug' in frame.f_code.co_filename * # if DEBUG: print('trace_dispatch_and_unhandled_exceptions: %s %s %s %s %s %s' % (event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno, self._frame_trace_dispatch, frame.f_lineno)) * frame_trace_dispatch = self._frame_trace_dispatch # <<<<<<<<<<<<<< @@ -28522,7 +35687,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __pyx_v_frame_trace_dispatch = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1675 + /* "_pydevd_bundle/pydevd_cython.pyx":1930 * # if DEBUG: print('trace_dispatch_and_unhandled_exceptions: %s %s %s %s %s %s' % (event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno, self._frame_trace_dispatch, frame.f_lineno)) * frame_trace_dispatch = self._frame_trace_dispatch * if frame_trace_dispatch is not None: # <<<<<<<<<<<<<< @@ -28530,72 +35695,45 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace * */ __pyx_t_2 = (__pyx_v_frame_trace_dispatch != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1676 + /* "_pydevd_bundle/pydevd_cython.pyx":1931 * frame_trace_dispatch = self._frame_trace_dispatch * if frame_trace_dispatch is not None: * self._frame_trace_dispatch = frame_trace_dispatch(frame, event, arg) # <<<<<<<<<<<<<< * - * if event == 'exception': + * if event == "exception": */ __Pyx_INCREF(__pyx_v_frame_trace_dispatch); - __pyx_t_4 = __pyx_v_frame_trace_dispatch; __pyx_t_5 = NULL; - __pyx_t_6 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __pyx_v_frame_trace_dispatch; __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1676, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_arg); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error) + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->_frame_trace_dispatch); __Pyx_DECREF(__pyx_v_self->_frame_trace_dispatch); __pyx_v_self->_frame_trace_dispatch = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1675 + /* "_pydevd_bundle/pydevd_cython.pyx":1930 * # if DEBUG: print('trace_dispatch_and_unhandled_exceptions: %s %s %s %s %s %s' % (event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno, self._frame_trace_dispatch, frame.f_lineno)) * frame_trace_dispatch = self._frame_trace_dispatch * if frame_trace_dispatch is not None: # <<<<<<<<<<<<<< @@ -28604,19 +35742,19 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1678 + /* "_pydevd_bundle/pydevd_cython.pyx":1933 * self._frame_trace_dispatch = frame_trace_dispatch(frame, event, arg) * - * if event == 'exception': # <<<<<<<<<<<<<< + * if event == "exception": # <<<<<<<<<<<<<< * self._last_exc_arg = arg * self._raise_lines.add(frame.f_lineno) */ - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1678, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_exception, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1933, __pyx_L1_error) + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1679 + /* "_pydevd_bundle/pydevd_cython.pyx":1934 * - * if event == 'exception': + * if event == "exception": * self._last_exc_arg = arg # <<<<<<<<<<<<<< * self._raise_lines.add(frame.f_lineno) * self._last_raise_line = frame.f_lineno @@ -28627,8 +35765,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_DECREF(__pyx_v_self->_last_exc_arg); __pyx_v_self->_last_exc_arg = __pyx_v_arg; - /* "_pydevd_bundle/pydevd_cython.pyx":1680 - * if event == 'exception': + /* "_pydevd_bundle/pydevd_cython.pyx":1935 + * if event == "exception": * self._last_exc_arg = arg * self._raise_lines.add(frame.f_lineno) # <<<<<<<<<<<<<< * self._last_raise_line = frame.f_lineno @@ -28636,57 +35774,56 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ if (unlikely(__pyx_v_self->_raise_lines == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "add"); - __PYX_ERR(0, 1680, __pyx_L1_error) + __PYX_ERR(0, 1935, __pyx_L1_error) } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1680, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1935, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PySet_Add(__pyx_v_self->_raise_lines, __pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1680, __pyx_L1_error) + __pyx_t_6 = PySet_Add(__pyx_v_self->_raise_lines, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1935, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1681 + /* "_pydevd_bundle/pydevd_cython.pyx":1936 * self._last_exc_arg = arg * self._raise_lines.add(frame.f_lineno) * self._last_raise_line = frame.f_lineno # <<<<<<<<<<<<<< * - * elif event == 'return' and self._last_exc_arg is not None: + * elif event == "return" and self._last_exc_arg is not None: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1681, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1936, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1681, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1936, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_self->_last_raise_line = __pyx_t_6; + __pyx_v_self->_last_raise_line = __pyx_t_7; - /* "_pydevd_bundle/pydevd_cython.pyx":1678 + /* "_pydevd_bundle/pydevd_cython.pyx":1933 * self._frame_trace_dispatch = frame_trace_dispatch(frame, event, arg) * - * if event == 'exception': # <<<<<<<<<<<<<< + * if event == "exception": # <<<<<<<<<<<<<< * self._last_exc_arg = arg * self._raise_lines.add(frame.f_lineno) */ goto __pyx_L4; } - /* "_pydevd_bundle/pydevd_cython.pyx":1683 + /* "_pydevd_bundle/pydevd_cython.pyx":1938 * self._last_raise_line = frame.f_lineno * - * elif event == 'return' and self._last_exc_arg is not None: # <<<<<<<<<<<<<< + * elif event == "return" and self._last_exc_arg is not None: # <<<<<<<<<<<<<< * # For unhandled exceptions we actually track the return when at the topmost level. * try: */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1683, __pyx_L1_error) - if (__pyx_t_2) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_return, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1938, __pyx_L1_error) + if (__pyx_t_8) { } else { - __pyx_t_3 = __pyx_t_2; + __pyx_t_2 = __pyx_t_8; goto __pyx_L5_bool_binop_done; } - __pyx_t_2 = (__pyx_v_self->_last_exc_arg != Py_None); - __pyx_t_9 = (__pyx_t_2 != 0); - __pyx_t_3 = __pyx_t_9; + __pyx_t_8 = (__pyx_v_self->_last_exc_arg != Py_None); + __pyx_t_2 = __pyx_t_8; __pyx_L5_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_2) { - /* "_pydevd_bundle/pydevd_cython.pyx":1685 - * elif event == 'return' and self._last_exc_arg is not None: + /* "_pydevd_bundle/pydevd_cython.pyx":1940 + * elif event == "return" and self._last_exc_arg is not None: * # For unhandled exceptions we actually track the return when at the topmost level. * try: # <<<<<<<<<<<<<< * py_db, t, additional_info = self._args[0:3] @@ -28694,7 +35831,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1686 + /* "_pydevd_bundle/pydevd_cython.pyx":1941 * # For unhandled exceptions we actually track the return when at the topmost level. * try: * py_db, t, additional_info = self._args[0:3] # <<<<<<<<<<<<<< @@ -28703,9 +35840,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ if (unlikely(__pyx_v_self->_args == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1686, __pyx_L8_error) + __PYX_ERR(0, 1941, __pyx_L8_error) } - __pyx_t_1 = __Pyx_PyTuple_GetSlice(__pyx_v_self->_args, 0, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L8_error) + __pyx_t_1 = __Pyx_PyTuple_GetSlice(__pyx_v_self->_args, 0, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1941, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_1); if (1) { PyObject* sequence = __pyx_t_1; @@ -28713,125 +35850,118 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1686, __pyx_L8_error) + __PYX_ERR(0, 1941, __pyx_L8_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_9); #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1686, __pyx_L8_error) + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1941, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1941, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1686, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1686, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1941, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_9); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_v_py_db = __pyx_t_4; + __pyx_v_py_db = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_t = __pyx_t_4; __pyx_t_4 = 0; - __pyx_v_t = __pyx_t_7; - __pyx_t_7 = 0; - __pyx_v_additional_info = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_v_additional_info = __pyx_t_9; + __pyx_t_9 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1687 + /* "_pydevd_bundle/pydevd_cython.pyx":1942 * try: * py_db, t, additional_info = self._args[0:3] * if not additional_info.suspended_at_unhandled: # Note: only check it here, don't set. # <<<<<<<<<<<<<< * if is_unhandled_exception(self, py_db, frame, self._last_raise_line, self._raise_lines): * py_db.stop_on_unhandled_exception(py_db, t, additional_info, self._last_exc_arg) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1687, __pyx_L8_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_suspended_at_unhandled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1942, __pyx_L8_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1687, __pyx_L8_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1942, __pyx_L8_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = ((!__pyx_t_3) != 0); - if (__pyx_t_9) { + __pyx_t_8 = (!__pyx_t_2); + if (__pyx_t_8) { - /* "_pydevd_bundle/pydevd_cython.pyx":1688 + /* "_pydevd_bundle/pydevd_cython.pyx":1943 * py_db, t, additional_info = self._args[0:3] * if not additional_info.suspended_at_unhandled: # Note: only check it here, don't set. * if is_unhandled_exception(self, py_db, frame, self._last_raise_line, self._raise_lines): # <<<<<<<<<<<<<< * py_db.stop_on_unhandled_exception(py_db, t, additional_info, self._last_exc_arg) * finally: */ - __pyx_t_1 = __pyx_v_self->_raise_lines; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_5 = __pyx_f_14_pydevd_bundle_13pydevd_cython_is_unhandled_exception(((PyObject *)__pyx_v_self), __pyx_v_py_db, __pyx_v_frame, __pyx_v_self->_last_raise_line, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1688, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_is_unhandled_exception); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1943, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_self->_last_raise_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1943, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_3, ((PyObject *)__pyx_v_self), __pyx_v_py_db, __pyx_v_frame, __pyx_t_4, __pyx_v_self->_raise_lines}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1943, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1943, __pyx_L8_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1688, __pyx_L8_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { + if (__pyx_t_8) { - /* "_pydevd_bundle/pydevd_cython.pyx":1689 + /* "_pydevd_bundle/pydevd_cython.pyx":1944 * if not additional_info.suspended_at_unhandled: # Note: only check it here, don't set. * if is_unhandled_exception(self, py_db, frame, self._last_raise_line, self._raise_lines): * py_db.stop_on_unhandled_exception(py_db, t, additional_info, self._last_exc_arg) # <<<<<<<<<<<<<< * finally: * # Remove reference to exception after handling it. */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1689, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = NULL; - __pyx_t_6 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1944, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_6 = 1; + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_self->_last_exc_arg}; - __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L8_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_self->_last_exc_arg}; - __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L8_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_5); - } else #endif { - __pyx_t_4 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1689, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_v_py_db); - __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, __pyx_v_py_db); - __Pyx_INCREF(__pyx_v_t); - __Pyx_GIVEREF(__pyx_v_t); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, __pyx_v_t); - __Pyx_INCREF(__pyx_v_additional_info); - __Pyx_GIVEREF(__pyx_v_additional_info); - PyTuple_SET_ITEM(__pyx_t_4, 2+__pyx_t_6, __pyx_v_additional_info); - __Pyx_INCREF(__pyx_v_self->_last_exc_arg); - __Pyx_GIVEREF(__pyx_v_self->_last_exc_arg); - PyTuple_SET_ITEM(__pyx_t_4, 3+__pyx_t_6, __pyx_v_self->_last_exc_arg); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1689, __pyx_L8_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_v_py_db, __pyx_v_t, __pyx_v_additional_info, __pyx_v_self->_last_exc_arg}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1944, __pyx_L8_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1688 + /* "_pydevd_bundle/pydevd_cython.pyx":1943 * py_db, t, additional_info = self._args[0:3] * if not additional_info.suspended_at_unhandled: # Note: only check it here, don't set. * if is_unhandled_exception(self, py_db, frame, self._last_raise_line, self._raise_lines): # <<<<<<<<<<<<<< @@ -28840,7 +35970,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1687 + /* "_pydevd_bundle/pydevd_cython.pyx":1942 * try: * py_db, t, additional_info = self._args[0:3] * if not additional_info.suspended_at_unhandled: # Note: only check it here, don't set. # <<<<<<<<<<<<<< @@ -28850,7 +35980,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace } } - /* "_pydevd_bundle/pydevd_cython.pyx":1692 + /* "_pydevd_bundle/pydevd_cython.pyx":1947 * finally: * # Remove reference to exception after handling it. * self._last_exc_arg = None # <<<<<<<<<<<<<< @@ -28872,9 +36002,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_PyThreadState_assign __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); __Pyx_XGOTREF(__pyx_t_12); @@ -28883,7 +36013,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); - __pyx_t_6 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename; + __pyx_t_7 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename; { __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); @@ -28902,49 +36032,49 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_XGIVEREF(__pyx_t_14); __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14); __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11; + __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11; goto __pyx_L1_error; } __pyx_L9:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1683 + /* "_pydevd_bundle/pydevd_cython.pyx":1938 * self._last_raise_line = frame.f_lineno * - * elif event == 'return' and self._last_exc_arg is not None: # <<<<<<<<<<<<<< + * elif event == "return" and self._last_exc_arg is not None: # <<<<<<<<<<<<<< * # For unhandled exceptions we actually track the return when at the topmost level. * try: */ } __pyx_L4:; - /* "_pydevd_bundle/pydevd_cython.pyx":1694 + /* "_pydevd_bundle/pydevd_cython.pyx":1949 * self._last_exc_arg = None * * ret = self.trace_dispatch_and_unhandled_exceptions # <<<<<<<<<<<<<< * * # Need to reset (the call to _frame_trace_dispatch may have changed it). */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch_and_unhandled_exc); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1694, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_ret = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch_and_unhandled_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1949, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_ret = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1698 - * # Need to reset (the call to _frame_trace_dispatch may have changed it). + /* "_pydevd_bundle/pydevd_cython.pyx":1954 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * frame.f_trace = SafeCallWrapper(ret) # <<<<<<<<<<<<<< * # ELSE * # frame.f_trace = ret */ - __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1698, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_5) < 0) __PYX_ERR(0, 1698, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1954, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_1) < 0) __PYX_ERR(0, 1954, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1702 - * # frame.f_trace = ret + /* "_pydevd_bundle/pydevd_cython.pyx":1959 * # ENDIF + * # fmt: on * return ret # <<<<<<<<<<<<<< * * def get_trace_dispatch_func(self): @@ -28954,8 +36084,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __pyx_r = __pyx_v_ret; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1671 - * # ENDIF + /* "_pydevd_bundle/pydevd_cython.pyx":1926 + * # fmt: on * * def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< * # DEBUG = 'code_to_debug' in frame.f_code.co_filename @@ -28965,9 +36095,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame.trace_dispatch_and_unhandled_exceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -28981,7 +36111,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1704 +/* "_pydevd_bundle/pydevd_cython.pyx":1961 * return ret * * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< @@ -28990,11 +36120,39 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func = {"get_trace_dispatch_func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_trace_dispatch_func (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("get_trace_dispatch_func", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_trace_dispatch_func", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_4get_trace_dispatch_func(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29009,9 +36167,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_trace_dispatch_func", 0); + __Pyx_RefNannySetupContext("get_trace_dispatch_func", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1705 + /* "_pydevd_bundle/pydevd_cython.pyx":1962 * * def get_trace_dispatch_func(self): * return self.trace_dispatch_and_unhandled_exceptions # <<<<<<<<<<<<<< @@ -29019,13 +36177,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch_and_unhandled_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1705, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_trace_dispatch_and_unhandled_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1962, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1704 + /* "_pydevd_bundle/pydevd_cython.pyx":1961 * return ret * * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< @@ -29044,7 +36202,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1635 +/* "_pydevd_bundle/pydevd_cython.pyx":1888 * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class TopLevelThreadTracerNoBackFrame: * cdef public object _frame_trace_dispatch; # <<<<<<<<<<<<<< @@ -29055,9 +36213,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29068,7 +36228,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_frame_trace_dispatch); __pyx_r = __pyx_v_self->_frame_trace_dispatch; @@ -29084,9 +36244,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29097,7 +36259,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->_frame_trace_dispatch); @@ -29113,9 +36275,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29126,7 +36290,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_21_frame_trace_dispatch_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_frame_trace_dispatch); @@ -29139,7 +36303,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1636 +/* "_pydevd_bundle/pydevd_cython.pyx":1889 * cdef class TopLevelThreadTracerNoBackFrame: * cdef public object _frame_trace_dispatch; * cdef public tuple _args; # <<<<<<<<<<<<<< @@ -29150,9 +36314,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29163,7 +36329,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_args); __pyx_r = __pyx_v_self->_args; @@ -29179,9 +36345,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29196,8 +36364,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 1636, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_value))) __PYX_ERR(0, 1889, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -29221,9 +36389,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29234,7 +36404,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5_args_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_args); @@ -29247,7 +36417,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1637 +/* "_pydevd_bundle/pydevd_cython.pyx":1890 * cdef public object _frame_trace_dispatch; * cdef public tuple _args; * cdef public object try_except_infos; # <<<<<<<<<<<<<< @@ -29258,9 +36428,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29271,7 +36443,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->try_except_infos); __pyx_r = __pyx_v_self->try_except_infos; @@ -29287,9 +36459,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29300,7 +36474,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->try_except_infos); @@ -29316,9 +36490,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29329,7 +36505,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16try_except_infos_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->try_except_infos); @@ -29342,7 +36518,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1638 +/* "_pydevd_bundle/pydevd_cython.pyx":1891 * cdef public tuple _args; * cdef public object try_except_infos; * cdef public object _last_exc_arg; # <<<<<<<<<<<<<< @@ -29353,9 +36529,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29366,7 +36544,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_last_exc_arg); __pyx_r = __pyx_v_self->_last_exc_arg; @@ -29382,9 +36560,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29395,7 +36575,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->_last_exc_arg); @@ -29411,9 +36591,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29424,7 +36606,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_13_last_exc_arg_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_last_exc_arg); @@ -29437,7 +36619,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1639 +/* "_pydevd_bundle/pydevd_cython.pyx":1892 * cdef public object try_except_infos; * cdef public object _last_exc_arg; * cdef public set _raise_lines; # <<<<<<<<<<<<<< @@ -29448,9 +36630,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29461,7 +36645,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_raise_lines); __pyx_r = __pyx_v_self->_raise_lines; @@ -29477,9 +36661,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29494,8 +36680,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 1639, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_v_value))) __PYX_ERR(0, 1892, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -29519,9 +36705,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29532,7 +36720,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_12_raise_lines_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_raise_lines); @@ -29545,7 +36733,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1640 +/* "_pydevd_bundle/pydevd_cython.pyx":1893 * cdef public object _last_exc_arg; * cdef public set _raise_lines; * cdef public int _last_raise_line; # <<<<<<<<<<<<<< @@ -29556,9 +36744,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29573,9 +36763,9 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_last_raise_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1640, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_last_raise_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1893, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -29595,9 +36785,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -29607,13 +36799,11 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_16_last_raise_line_2__set__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1640, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1893, __pyx_L1_error) __pyx_v_self->_last_raise_line = __pyx_t_1; /* function exit code */ @@ -29623,7 +36813,6 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame._last_raise_line.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -29634,11 +36823,39 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBac */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_6__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self)); /* function exit code */ @@ -29656,12 +36873,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace PyObject *__pyx_t_2 = NULL; int __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -29676,21 +36892,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self->_args); __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_args); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_args)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->_frame_trace_dispatch); __Pyx_GIVEREF(__pyx_v_self->_frame_trace_dispatch); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->_frame_trace_dispatch); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->_frame_trace_dispatch)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->_last_exc_arg); __Pyx_GIVEREF(__pyx_v_self->_last_exc_arg); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self->_last_exc_arg); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self->_last_exc_arg)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->_raise_lines); __Pyx_GIVEREF(__pyx_v_self->_raise_lines); - PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_self->_raise_lines); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_self->_raise_lines)) __PYX_ERR(2, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->try_except_infos); __Pyx_GIVEREF(__pyx_v_self->try_except_infos); - PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_v_self->try_except_infos); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_v_self->try_except_infos)) __PYX_ERR(2, 5, __pyx_L1_error); __pyx_t_1 = 0; __pyx_v_state = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; @@ -29715,8 +36931,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace * use_setstate = True */ __pyx_t_3 = (__pyx_v__dict != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + if (__pyx_t_3) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -29729,7 +36944,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; @@ -29760,42 +36975,37 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace * else: * use_setstate = self._args is not None or self._frame_trace_dispatch is not None or self._last_exc_arg is not None or self._raise_lines is not None or self.try_except_infos is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, None), state + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, None), state */ /*else*/ { - __pyx_t_3 = (__pyx_v_self->_args != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { + __pyx_t_4 = (__pyx_v_self->_args != ((PyObject*)Py_None)); + if (!__pyx_t_4) { } else { - __pyx_t_4 = __pyx_t_5; + __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = (__pyx_v_self->_frame_trace_dispatch != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - if (!__pyx_t_3) { + __pyx_t_4 = (__pyx_v_self->_frame_trace_dispatch != Py_None); + if (!__pyx_t_4) { } else { - __pyx_t_4 = __pyx_t_3; + __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_3 = (__pyx_v_self->_last_exc_arg != Py_None); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { + __pyx_t_4 = (__pyx_v_self->_last_exc_arg != Py_None); + if (!__pyx_t_4) { } else { - __pyx_t_4 = __pyx_t_5; + __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = (__pyx_v_self->_raise_lines != ((PyObject*)Py_None)); - __pyx_t_3 = (__pyx_t_5 != 0); - if (!__pyx_t_3) { + __pyx_t_4 = (__pyx_v_self->_raise_lines != ((PyObject*)Py_None)); + if (!__pyx_t_4) { } else { - __pyx_t_4 = __pyx_t_3; + __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_3 = (__pyx_v_self->try_except_infos != Py_None); - __pyx_t_5 = (__pyx_t_3 != 0); - __pyx_t_4 = __pyx_t_5; + __pyx_t_4 = (__pyx_v_self->try_except_infos != Py_None); + __pyx_t_3 = __pyx_t_4; __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_4; + __pyx_v_use_setstate = __pyx_t_3; } __pyx_L3:; @@ -29803,18 +37013,17 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace * else: * use_setstate = self._args is not None or self._frame_trace_dispatch is not None or self._last_exc_arg is not None or self._raise_lines is not None or self.try_except_infos is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, None), state + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, None), state * else: */ - __pyx_t_4 = (__pyx_v_use_setstate != 0); - if (__pyx_t_4) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self._args is not None or self._frame_trace_dispatch is not None or self._last_exc_arg is not None or self._raise_lines is not None or self.try_except_infos is not None * if use_setstate: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, state) + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) @@ -29823,66 +37032,66 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_171613889); - __Pyx_GIVEREF(__pyx_int_171613889); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_171613889); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_66451433); + __Pyx_GIVEREF(__pyx_int_66451433); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_66451433)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self._args is not None or self._frame_trace_dispatch is not None or self._last_exc_arg is not None or self._raise_lines is not None or self.try_except_infos is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, None), state + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, None), state + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, None), state * else: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_171613889); - __Pyx_GIVEREF(__pyx_int_171613889); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_171613889); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_66451433); + __Pyx_GIVEREF(__pyx_int_66451433); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_66451433)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_6 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_5 = 0; __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -29899,7 +37108,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -29912,20 +37121,103 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace /* "(tree fragment)":16 * else: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, state) + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_8__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -29937,21 +37229,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, state) + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0xa3a9ec1, state) + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) */ @@ -29969,7 +37261,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1711 +/* "_pydevd_bundle/pydevd_cython.pyx":1969 * cdef class ThreadTracer: * cdef public tuple _args; * def __init__(self, tuple args): # <<<<<<<<<<<<<< @@ -29981,49 +37273,69 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTrace static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_args = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_args)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1969, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1711, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 1969, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); } __pyx_v_args = ((PyObject*)values[0]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1711, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1969, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1711, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_args), (&PyTuple_Type), 1, "args", 1))) __PYX_ERR(0, 1969, __pyx_L1_error) __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer___init__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self), __pyx_v_args); /* function exit code */ @@ -30031,6 +37343,12 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__(Py __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -30038,9 +37356,9 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__(Py static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer___init__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self, PyObject *__pyx_v_args) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1712 + /* "_pydevd_bundle/pydevd_cython.pyx":1970 * cdef public tuple _args; * def __init__(self, tuple args): * self._args = args # <<<<<<<<<<<<<< @@ -30053,7 +37371,7 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer___init__(str __Pyx_DECREF(__pyx_v_self->_args); __pyx_v_self->_args = __pyx_v_args; - /* "_pydevd_bundle/pydevd_cython.pyx":1711 + /* "_pydevd_bundle/pydevd_cython.pyx":1969 * cdef class ThreadTracer: * cdef public tuple _args; * def __init__(self, tuple args): # <<<<<<<<<<<<<< @@ -30067,17 +37385,17 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer___init__(str return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1720 - * # ENDIF +/* "_pydevd_bundle/pydevd_cython.pyx":1979 + * # fmt: on * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< - * ''' This is the callback used when we enter some context in the debugger. + * """This is the callback used when we enter some context in the debugger. * */ /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_3__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__[] = " This is the callback used when we enter some context in the debugger.\n\n We also decorate the thread we are in with info about the debugging.\n The attributes added are:\n pydev_state\n pydev_step_stop\n pydev_step_cmd\n pydev_notify_kill\n\n :param PyDB py_db:\n This is the global debugger (this method should actually be added as a method to it).\n "; +PyDoc_STRVAR(__pyx_doc_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__, "This is the callback used when we enter some context in the debugger.\n\n We also decorate the thread we are in with info about the debugging.\n The attributes added are:\n pydev_state\n pydev_step_stop\n pydev_step_cmd\n pydev_notify_kill\n\n :param PyDB py_db:\n This is the global debugger (this method should actually be added as a method to it).\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__; #endif @@ -30085,64 +37403,92 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_3__cal PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__call__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1979, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1979, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, 1); __PYX_ERR(0, 1720, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, 1); __PYX_ERR(0, 1979, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1979, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, 2); __PYX_ERR(0, 1720, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, 2); __PYX_ERR(0, 1979, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(0, 1720, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__call__") < 0)) __PYX_ERR(0, 1979, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); } __pyx_v_frame = values[0]; __pyx_v_event = values[1]; __pyx_v_arg = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1720, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1979, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -30150,6 +37496,12 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_3__cal __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self), __pyx_v_frame, __pyx_v_event, __pyx_v_arg); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -30181,24 +37533,25 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; int __pyx_t_11; - int __pyx_t_12; + unsigned int __pyx_t_12; int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; + int __pyx_t_14; PyObject *__pyx_t_15 = NULL; PyObject *__pyx_t_16 = NULL; - int __pyx_t_17; - char const *__pyx_t_18; + PyObject *__pyx_t_17 = NULL; + int __pyx_t_18; + char const *__pyx_t_19; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__call__", 0); + __Pyx_RefNannySetupContext("__call__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1746 + /* "_pydevd_bundle/pydevd_cython.pyx":2007 * # DEBUG = 'code_to_debug' in frame.f_code.co_filename * # if DEBUG: print('ENTER: trace_dispatch: %s %s %s %s' % (frame.f_code.co_filename, frame.f_lineno, event, frame.f_code.co_name)) * py_db, t, additional_info, cache_skips, frame_skips_cache = self._args # <<<<<<<<<<<<<< * if additional_info.is_tracing: - * return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + * return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch */ __pyx_t_1 = __pyx_v_self->_args; __Pyx_INCREF(__pyx_t_1); @@ -30208,7 +37561,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal if (unlikely(size != 5)) { if (size > 5) __Pyx_RaiseTooManyValuesError(5); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1746, __pyx_L1_error) + __PYX_ERR(0, 2007, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); @@ -30226,7 +37579,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal Py_ssize_t i; PyObject** temps[5] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5,&__pyx_t_6}; for (i=0; i < 5; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1746, __pyx_L1_error) + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 2007, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } @@ -30234,10 +37587,10 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { - __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1746, __pyx_L1_error) + __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 2007, __pyx_L1_error) } - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 1746, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1746, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 2007, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_5))) __PYX_ERR(0, 2007, __pyx_L1_error) __pyx_v_py_db = __pyx_t_2; __pyx_t_2 = 0; __pyx_v_t = __pyx_t_3; @@ -30249,30 +37602,30 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_v_frame_skips_cache = __pyx_t_6; __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1747 + /* "_pydevd_bundle/pydevd_cython.pyx":2008 * # if DEBUG: print('ENTER: trace_dispatch: %s %s %s %s' % (frame.f_code.co_filename, frame.f_lineno, event, frame.f_code.co_name)) * py_db, t, additional_info, cache_skips, frame_skips_cache = self._args * if additional_info.is_tracing: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + * return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch * */ __pyx_t_7 = (__pyx_v_additional_info->is_tracing != 0); if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1748 + /* "_pydevd_bundle/pydevd_cython.pyx":2009 * py_db, t, additional_info, cache_skips, frame_skips_cache = self._args * if additional_info.is_tracing: - * return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch # <<<<<<<<<<<<<< * * additional_info.is_tracing += 1 */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1748, __pyx_L1_error) + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 2009, __pyx_L1_error) if (__pyx_t_7) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1748, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2009, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30281,17 +37634,17 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_1 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1747 + /* "_pydevd_bundle/pydevd_cython.pyx":2008 * # if DEBUG: print('ENTER: trace_dispatch: %s %s %s %s' % (frame.f_code.co_filename, frame.f_lineno, event, frame.f_code.co_name)) * py_db, t, additional_info, cache_skips, frame_skips_cache = self._args * if additional_info.is_tracing: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + * return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch * */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1750 - * return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":2011 + * return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch * * additional_info.is_tracing += 1 # <<<<<<<<<<<<<< * try: @@ -30299,7 +37652,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ __pyx_v_additional_info->is_tracing = (__pyx_v_additional_info->is_tracing + 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1751 + /* "_pydevd_bundle/pydevd_cython.pyx":2012 * * additional_info.is_tracing += 1 * try: # <<<<<<<<<<<<<< @@ -30316,7 +37669,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __Pyx_XGOTREF(__pyx_t_10); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1752 + /* "_pydevd_bundle/pydevd_cython.pyx":2013 * additional_info.is_tracing += 1 * try: * pydev_step_cmd = additional_info.pydev_step_cmd # <<<<<<<<<<<<<< @@ -30326,42 +37679,42 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_11 = __pyx_v_additional_info->pydev_step_cmd; __pyx_v_pydev_step_cmd = __pyx_t_11; - /* "_pydevd_bundle/pydevd_cython.pyx":1753 + /* "_pydevd_bundle/pydevd_cython.pyx":2014 * try: * pydev_step_cmd = additional_info.pydev_step_cmd * is_stepping = pydev_step_cmd != -1 # <<<<<<<<<<<<<< * if py_db.pydb_disposed: - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ __pyx_v_is_stepping = (__pyx_v_pydev_step_cmd != -1L); - /* "_pydevd_bundle/pydevd_cython.pyx":1754 + /* "_pydevd_bundle/pydevd_cython.pyx":2015 * pydev_step_cmd = additional_info.pydev_step_cmd * is_stepping = pydev_step_cmd != -1 * if py_db.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2015, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1754, __pyx_L7_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 2015, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1755 + /* "_pydevd_bundle/pydevd_cython.pyx":2016 * is_stepping = pydev_step_cmd != -1 * if py_db.pydb_disposed: - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * # if thread is not alive, cancel trace_dispatch processing */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1755, __pyx_L7_error) + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 2016, __pyx_L7_error) if (__pyx_t_7) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1755, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2016, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30370,102 +37723,123 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1754 + /* "_pydevd_bundle/pydevd_cython.pyx":2015 * pydev_step_cmd = additional_info.pydev_step_cmd * is_stepping = pydev_step_cmd != -1 * if py_db.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1758 + /* "_pydevd_bundle/pydevd_cython.pyx":2019 * * # if thread is not alive, cancel trace_dispatch processing * if not is_thread_alive(t): # <<<<<<<<<<<<<< * py_db.notify_thread_not_alive(get_current_thread_id(t)) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_is_thread_alive); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1758, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_is_thread_alive); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2019, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; } } - __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_t); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1758, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1758, __pyx_L7_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_t}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2019, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 2019, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_12 = ((!__pyx_t_7) != 0); - if (__pyx_t_12) { + __pyx_t_13 = (!__pyx_t_7); + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1759 + /* "_pydevd_bundle/pydevd_cython.pyx":2020 * # if thread is not alive, cancel trace_dispatch processing * if not is_thread_alive(t): * py_db.notify_thread_not_alive(get_current_thread_id(t)) # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_notify_thread_not_alive); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1759, __pyx_L7_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_notify_thread_not_alive); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2020, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_current_thread_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1759, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_get_current_thread_id); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2020, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_12 = 1; } } - __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_t) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_t); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1759, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_t}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2020, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1759, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2020, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1760 + /* "_pydevd_bundle/pydevd_cython.pyx":2021 * if not is_thread_alive(t): * py_db.notify_thread_not_alive(get_current_thread_id(t)) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * # Note: it's important that the context name is also given because we may hit something once */ __Pyx_XDECREF(__pyx_r); - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1760, __pyx_L7_error) - if (__pyx_t_12) { + __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2021, __pyx_L7_error) + if (__pyx_t_13) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1760, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2021, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30474,28 +37848,28 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1758 + /* "_pydevd_bundle/pydevd_cython.pyx":2019 * * # if thread is not alive, cancel trace_dispatch processing * if not is_thread_alive(t): # <<<<<<<<<<<<<< * py_db.notify_thread_not_alive(get_current_thread_id(t)) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1764 + /* "_pydevd_bundle/pydevd_cython.pyx":2025 * # Note: it's important that the context name is also given because we may hit something once * # in the global context and another in the local context. * frame_cache_key = frame.f_code # <<<<<<<<<<<<<< * if frame_cache_key in cache_skips: * if not is_stepping: */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1764, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2025, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_frame_cache_key = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1765 + /* "_pydevd_bundle/pydevd_cython.pyx":2026 * # in the global context and another in the local context. * frame_cache_key = frame.f_code * if frame_cache_key in cache_skips: # <<<<<<<<<<<<<< @@ -30504,36 +37878,35 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 1765, __pyx_L7_error) + __PYX_ERR(0, 2026, __pyx_L7_error) } - __pyx_t_12 = (__Pyx_PyDict_ContainsTF(__pyx_v_frame_cache_key, __pyx_v_cache_skips, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1765, __pyx_L7_error) - __pyx_t_7 = (__pyx_t_12 != 0); - if (__pyx_t_7) { + __pyx_t_13 = (__Pyx_PyDict_ContainsTF(__pyx_v_frame_cache_key, __pyx_v_cache_skips, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2026, __pyx_L7_error) + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1766 + /* "_pydevd_bundle/pydevd_cython.pyx":2027 * frame_cache_key = frame.f_code * if frame_cache_key in cache_skips: * if not is_stepping: # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (cache hit)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ - __pyx_t_7 = ((!(__pyx_v_is_stepping != 0)) != 0); - if (__pyx_t_7) { + __pyx_t_13 = (!__pyx_v_is_stepping); + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1768 + /* "_pydevd_bundle/pydevd_cython.pyx":2029 * if not is_stepping: * # if DEBUG: print('skipped: trace_dispatch (cache hit)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * else: * # When stepping we can't take into account caching based on the breakpoints (only global filtering). */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1768, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2029, __pyx_L7_error) + if (__pyx_t_13) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1768, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2029, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30542,217 +37915,235 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1766 + /* "_pydevd_bundle/pydevd_cython.pyx":2027 * frame_cache_key = frame.f_code * if frame_cache_key in cache_skips: * if not is_stepping: # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (cache hit)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1771 + /* "_pydevd_bundle/pydevd_cython.pyx":2032 * else: * # When stepping we can't take into account caching based on the breakpoints (only global filtering). * if cache_skips.get(frame_cache_key) == 1: # <<<<<<<<<<<<<< - * - * if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + * if ( + * additional_info.pydev_original_step_cmd in (107, 144) */ /*else*/ { if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 1771, __pyx_L7_error) + __PYX_ERR(0, 2032, __pyx_L7_error) } - __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_cache_skips, __pyx_v_frame_cache_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1771, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_cache_skips, __pyx_v_frame_cache_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2032, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1771, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_13 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_1, __pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2032, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1771, __pyx_L7_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1773 + /* "_pydevd_bundle/pydevd_cython.pyx":2034 * if cache_skips.get(frame_cache_key) == 1: - * - * if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: # <<<<<<<<<<<<<< - * notify_skipped_step_in_because_of_filters(py_db, frame) - * + * if ( + * additional_info.pydev_original_step_cmd in (107, 144) # <<<<<<<<<<<<<< + * and not _global_notify_skipped_step_in + * ): */ switch (__pyx_v_additional_info->pydev_original_step_cmd) { case 0x6B: case 0x90: - __pyx_t_12 = 1; + __pyx_t_7 = 1; break; default: - __pyx_t_12 = 0; + __pyx_t_7 = 0; break; } - __pyx_t_13 = (__pyx_t_12 != 0); - if (__pyx_t_13) { + __pyx_t_14 = __pyx_t_7; + if (__pyx_t_14) { } else { - __pyx_t_7 = __pyx_t_13; + __pyx_t_13 = __pyx_t_14; goto __pyx_L19_bool_binop_done; } - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 1773, __pyx_L7_error) - __pyx_t_12 = ((!__pyx_t_13) != 0); - __pyx_t_7 = __pyx_t_12; + + /* "_pydevd_bundle/pydevd_cython.pyx":2035 + * if ( + * additional_info.pydev_original_step_cmd in (107, 144) + * and not _global_notify_skipped_step_in # <<<<<<<<<<<<<< + * ): + * notify_skipped_step_in_because_of_filters(py_db, frame) + */ + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2035, __pyx_L7_error) + __pyx_t_7 = (!__pyx_t_14); + __pyx_t_13 = __pyx_t_7; __pyx_L19_bool_binop_done:; - if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1774 - * - * if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + /* "_pydevd_bundle/pydevd_cython.pyx":2033 + * # When stepping we can't take into account caching based on the breakpoints (only global filtering). + * if cache_skips.get(frame_cache_key) == 1: + * if ( # <<<<<<<<<<<<<< + * additional_info.pydev_original_step_cmd in (107, 144) + * and not _global_notify_skipped_step_in + */ + if (__pyx_t_13) { + + /* "_pydevd_bundle/pydevd_cython.pyx":2037 + * and not _global_notify_skipped_step_in + * ): * notify_skipped_step_in_because_of_filters(py_db, frame) # <<<<<<<<<<<<<< * * back_frame = frame.f_back */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1774, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2037, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1774, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_6); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1774, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_6); - } else #endif { - __pyx_t_4 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1774, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_py_db); - __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_11, __pyx_v_py_db); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_11, __pyx_v_frame); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1774, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2037, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1773 + /* "_pydevd_bundle/pydevd_cython.pyx":2033 + * # When stepping we can't take into account caching based on the breakpoints (only global filtering). * if cache_skips.get(frame_cache_key) == 1: - * - * if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: # <<<<<<<<<<<<<< - * notify_skipped_step_in_because_of_filters(py_db, frame) - * + * if ( # <<<<<<<<<<<<<< + * additional_info.pydev_original_step_cmd in (107, 144) + * and not _global_notify_skipped_step_in */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1776 + /* "_pydevd_bundle/pydevd_cython.pyx":2039 * notify_skipped_step_in_because_of_filters(py_db, frame) * * back_frame = frame.f_back # <<<<<<<<<<<<<< - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): - * back_frame_cache_key = back_frame.f_code + * if back_frame is not None and pydev_step_cmd in ( + * 107, */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1776, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_back_frame = __pyx_t_6; - __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2039, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_back_frame = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1777 + /* "_pydevd_bundle/pydevd_cython.pyx":2040 * * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): # <<<<<<<<<<<<<< - * back_frame_cache_key = back_frame.f_code - * if cache_skips.get(back_frame_cache_key) == 1: + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, */ - __pyx_t_12 = (__pyx_v_back_frame != Py_None); - __pyx_t_13 = (__pyx_t_12 != 0); - if (__pyx_t_13) { + __pyx_t_7 = (__pyx_v_back_frame != Py_None); + if (__pyx_t_7) { } else { - __pyx_t_7 = __pyx_t_13; + __pyx_t_13 = __pyx_t_7; goto __pyx_L22_bool_binop_done; } switch (__pyx_v_pydev_step_cmd) { case 0x6B: + + /* "_pydevd_bundle/pydevd_cython.pyx":2041 + * back_frame = frame.f_back + * if back_frame is not None and pydev_step_cmd in ( + * 107, # <<<<<<<<<<<<<< + * 144, + * 109, + */ case 0x90: + + /* "_pydevd_bundle/pydevd_cython.pyx":2042 + * if back_frame is not None and pydev_step_cmd in ( + * 107, + * 144, # <<<<<<<<<<<<<< + * 109, + * 160, + */ case 0x6D: + + /* "_pydevd_bundle/pydevd_cython.pyx":2043 + * 107, + * 144, + * 109, # <<<<<<<<<<<<<< + * 160, + * ): + */ case 0xA0: - __pyx_t_13 = 1; + + /* "_pydevd_bundle/pydevd_cython.pyx":2040 + * + * back_frame = frame.f_back + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, + */ + __pyx_t_7 = 1; break; default: - __pyx_t_13 = 0; + __pyx_t_7 = 0; break; } - __pyx_t_12 = (__pyx_t_13 != 0); - __pyx_t_7 = __pyx_t_12; + __pyx_t_14 = __pyx_t_7; + __pyx_t_13 = __pyx_t_14; __pyx_L22_bool_binop_done:; - if (__pyx_t_7) { + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1778 - * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2046 + * 160, + * ): * back_frame_cache_key = back_frame.f_code # <<<<<<<<<<<<<< * if cache_skips.get(back_frame_cache_key) == 1: * # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1778, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_back_frame_cache_key = __pyx_t_6; - __pyx_t_6 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2046, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_back_frame_cache_key = __pyx_t_1; + __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1779 - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2047 + * ): * back_frame_cache_key = back_frame.f_code * if cache_skips.get(back_frame_cache_key) == 1: # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 1779, __pyx_L7_error) + __PYX_ERR(0, 2047, __pyx_L7_error) } - __pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_cache_skips, __pyx_v_back_frame_cache_key, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_6, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1779, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_cache_skips, __pyx_v_back_frame_cache_key, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2047, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1779, __pyx_L7_error) + __pyx_t_13 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_1, __pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2047, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_7) { + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1781 + /* "_pydevd_bundle/pydevd_cython.pyx":2049 * if cache_skips.get(back_frame_cache_key) == 1: * # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * else: * # if DEBUG: print('skipped: trace_dispatch (cache hit: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1781, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2049, __pyx_L7_error) + if (__pyx_t_13) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1781, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2049, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30761,40 +38152,40 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1779 - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2047 + * ): * back_frame_cache_key = back_frame.f_code * if cache_skips.get(back_frame_cache_key) == 1: # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1777 + /* "_pydevd_bundle/pydevd_cython.pyx":2040 * * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): # <<<<<<<<<<<<<< - * back_frame_cache_key = back_frame.f_code - * if cache_skips.get(back_frame_cache_key) == 1: + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, */ goto __pyx_L21; } - /* "_pydevd_bundle/pydevd_cython.pyx":1784 + /* "_pydevd_bundle/pydevd_cython.pyx":2052 * else: * # if DEBUG: print('skipped: trace_dispatch (cache hit: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * try: */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1784, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2052, __pyx_L7_error) + if (__pyx_t_13) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1784, __pyx_L7_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2052, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_1 = __pyx_t_6; __pyx_t_6 = 0; @@ -30805,17 +38196,17 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal } __pyx_L21:; - /* "_pydevd_bundle/pydevd_cython.pyx":1771 + /* "_pydevd_bundle/pydevd_cython.pyx":2032 * else: * # When stepping we can't take into account caching based on the breakpoints (only global filtering). * if cache_skips.get(frame_cache_key) == 1: # <<<<<<<<<<<<<< - * - * if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + * if ( + * additional_info.pydev_original_step_cmd in (107, 144) */ } } - /* "_pydevd_bundle/pydevd_cython.pyx":1765 + /* "_pydevd_bundle/pydevd_cython.pyx":2026 * # in the global context and another in the local context. * frame_cache_key = frame.f_code * if frame_cache_key in cache_skips: # <<<<<<<<<<<<<< @@ -30824,8 +38215,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1786 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2054 + * return None if event == "call" else NO_FTRACE * * try: # <<<<<<<<<<<<<< * # Make fast path faster! @@ -30834,45 +38225,45 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_14); + __Pyx_ExceptionSave(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1788 + /* "_pydevd_bundle/pydevd_cython.pyx":2056 * try: * # Make fast path faster! * abs_path_canonical_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[frame.f_code.co_filename] # <<<<<<<<<<<<<< * except: * abs_path_canonical_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1788, __pyx_L25_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2056, __pyx_L25_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1788, __pyx_L25_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2056, __pyx_L25_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1788, __pyx_L25_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2056, __pyx_L25_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1788, __pyx_L25_error) + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2056, __pyx_L25_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!(likely(PyTuple_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 1788, __pyx_L25_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_6))) __PYX_ERR(0, 2056, __pyx_L25_error) __pyx_v_abs_path_canonical_path_and_base = ((PyObject*)__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1786 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2054 + * return None if event == "call" else NO_FTRACE * * try: # <<<<<<<<<<<<<< * # Make fast path faster! * abs_path_canonical_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[frame.f_code.co_filename] */ } - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; goto __pyx_L30_try_end; __pyx_L25_error:; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -30882,7 +38273,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1789 + /* "_pydevd_bundle/pydevd_cython.pyx":2057 * # Make fast path faster! * abs_path_canonical_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[frame.f_code.co_filename] * except: # <<<<<<<<<<<<<< @@ -30891,249 +38282,213 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ /*except:*/ { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(0, 1789, __pyx_L27_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(0, 2057, __pyx_L27_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); - /* "_pydevd_bundle/pydevd_cython.pyx":1790 + /* "_pydevd_bundle/pydevd_cython.pyx":2058 * abs_path_canonical_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[frame.f_code.co_filename] * except: * abs_path_canonical_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) # <<<<<<<<<<<<<< * - * file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd + * file_type = py_db.get_file_type( */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1790, __pyx_L27_except_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2058, __pyx_L27_except_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_12 = 1; } } - __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_frame) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_frame); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1790, __pyx_L27_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(PyTuple_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_5)->tp_name), 0))) __PYX_ERR(0, 1790, __pyx_L27_except_error) - __Pyx_XDECREF_SET(__pyx_v_abs_path_canonical_path_and_base, ((PyObject*)__pyx_t_5)); - __pyx_t_5 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_frame}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2058, __pyx_L27_except_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_4))) __PYX_ERR(0, 2058, __pyx_L27_except_error) + __Pyx_XDECREF_SET(__pyx_v_abs_path_canonical_path_and_base, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L26_exception_handled; } - __pyx_L27_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":1786 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2054 + * return None if event == "call" else NO_FTRACE * * try: # <<<<<<<<<<<<<< * # Make fast path faster! * abs_path_canonical_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[frame.f_code.co_filename] */ - __Pyx_XGIVEREF(__pyx_t_14); + __pyx_L27_except_error:; __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); goto __pyx_L7_error; __pyx_L26_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); __pyx_L30_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1792 + /* "_pydevd_bundle/pydevd_cython.pyx":2060 * abs_path_canonical_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) * - * file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd # <<<<<<<<<<<<<< + * file_type = py_db.get_file_type( # <<<<<<<<<<<<<< + * frame, abs_path_canonical_path_and_base + * ) # we don't want to debug threading or anything related to pydevd + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2060, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "_pydevd_bundle/pydevd_cython.pyx":2061 + * + * file_type = py_db.get_file_type( + * frame, abs_path_canonical_path_and_base # <<<<<<<<<<<<<< + * ) # we don't want to debug threading or anything related to pydevd * - * if file_type is not None: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1792, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_frame, __pyx_v_abs_path_canonical_path_and_base}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_frame, __pyx_v_abs_path_canonical_path_and_base}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_5 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1792, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_11, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_abs_path_canonical_path_and_base); - __Pyx_GIVEREF(__pyx_v_abs_path_canonical_path_and_base); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_11, __pyx_v_abs_path_canonical_path_and_base); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L7_error) + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_frame, __pyx_v_abs_path_canonical_path_and_base}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2060, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_file_type = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1794 - * file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd + /* "_pydevd_bundle/pydevd_cython.pyx":2064 + * ) # we don't want to debug threading or anything related to pydevd * * if file_type is not None: # <<<<<<<<<<<<<< * if file_type == 1: # inlining LIB_FILE = 1 * if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): */ - __pyx_t_7 = (__pyx_v_file_type != Py_None); - __pyx_t_12 = (__pyx_t_7 != 0); - if (__pyx_t_12) { + __pyx_t_13 = (__pyx_v_file_type != Py_None); + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1795 + /* "_pydevd_bundle/pydevd_cython.pyx":2065 * * if file_type is not None: * if file_type == 1: # inlining LIB_FILE = 1 # <<<<<<<<<<<<<< * if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): * # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) */ - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_file_type, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1795, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1795, __pyx_L7_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_12) { + __pyx_t_13 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_file_type, __pyx_int_1, 1, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2065, __pyx_L7_error) + if (__pyx_t_13) { - /* "_pydevd_bundle/pydevd_cython.pyx":1796 + /* "_pydevd_bundle/pydevd_cython.pyx":2066 * if file_type is not None: * if file_type == 1: # inlining LIB_FILE = 1 * if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) * cache_skips[frame_cache_key] = 1 */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_in_project_scope); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1796, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_in_project_scope); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2066, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1796, __pyx_L7_error) + __PYX_ERR(0, 2066, __pyx_L7_error) } - __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1796, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2066, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_frame, __pyx_t_5}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1796, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_frame, __pyx_t_5}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1796, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else #endif { - __pyx_t_3 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1796, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_11, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_11, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1796, __pyx_L7_error) + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_v_frame, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2066, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1796, __pyx_L7_error) + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 2066, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_7 = ((!__pyx_t_12) != 0); - if (__pyx_t_7) { + __pyx_t_14 = (!__pyx_t_13); + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1798 + /* "_pydevd_bundle/pydevd_cython.pyx":2068 * if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): * # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) * cache_skips[frame_cache_key] = 1 # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * else: */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1798, __pyx_L7_error) + __PYX_ERR(0, 2068, __pyx_L7_error) } - if (unlikely(PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0)) __PYX_ERR(0, 1798, __pyx_L7_error) + if (unlikely((PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0))) __PYX_ERR(0, 2068, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1799 + /* "_pydevd_bundle/pydevd_cython.pyx":2069 * # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) * cache_skips[frame_cache_key] = 1 - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * else: * # if DEBUG: print('skipped: trace_dispatch', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1799, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2069, __pyx_L7_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1799, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2069, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1796 + /* "_pydevd_bundle/pydevd_cython.pyx":2066 * if file_type is not None: * if file_type == 1: # inlining LIB_FILE = 1 * if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): # <<<<<<<<<<<<<< @@ -31142,7 +38497,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1795 + /* "_pydevd_bundle/pydevd_cython.pyx":2065 * * if file_type is not None: * if file_type == 1: # inlining LIB_FILE = 1 # <<<<<<<<<<<<<< @@ -31152,37 +38507,37 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal goto __pyx_L34; } - /* "_pydevd_bundle/pydevd_cython.pyx":1802 + /* "_pydevd_bundle/pydevd_cython.pyx":2072 * else: * # if DEBUG: print('skipped: trace_dispatch', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) * cache_skips[frame_cache_key] = 1 # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ /*else*/ { if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1802, __pyx_L7_error) + __PYX_ERR(0, 2072, __pyx_L7_error) } - if (unlikely(PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0)) __PYX_ERR(0, 1802, __pyx_L7_error) + if (unlikely((PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0))) __PYX_ERR(0, 2072, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1803 + /* "_pydevd_bundle/pydevd_cython.pyx":2073 * # if DEBUG: print('skipped: trace_dispatch', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) * cache_skips[frame_cache_key] = 1 - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * if py_db.is_files_filter_enabled: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1803, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2073, __pyx_L7_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1803, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2073, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -31190,8 +38545,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal } __pyx_L34:; - /* "_pydevd_bundle/pydevd_cython.pyx":1794 - * file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd + /* "_pydevd_bundle/pydevd_cython.pyx":2064 + * ) # we don't want to debug threading or anything related to pydevd * * if file_type is not None: # <<<<<<<<<<<<<< * if file_type == 1: # inlining LIB_FILE = 1 @@ -31199,394 +38554,371 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1805 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2075 + * return None if event == "call" else NO_FTRACE * * if py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< * if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): * cache_skips[frame_cache_key] = 1 */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1805, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2075, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1805, __pyx_L7_error) + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2075, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_7) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1806 + /* "_pydevd_bundle/pydevd_cython.pyx":2076 * * if py_db.is_files_filter_enabled: * if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): # <<<<<<<<<<<<<< * cache_skips[frame_cache_key] = 1 * */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2076, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); if (unlikely(__pyx_v_abs_path_canonical_path_and_base == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1806, __pyx_L7_error) + __PYX_ERR(0, 2076, __pyx_L7_error) } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v_abs_path_canonical_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2076, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_t_3, Py_False}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_t_3, Py_False}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else #endif { - __pyx_t_6 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_11, __pyx_v_frame); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_11, __pyx_t_3); - __Pyx_INCREF(Py_False); - __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_11, Py_False); - __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1806, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_1); + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_frame, __pyx_t_6, Py_False}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 3+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2076, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1806, __pyx_L7_error) + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2076, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_7) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1807 + /* "_pydevd_bundle/pydevd_cython.pyx":2077 * if py_db.is_files_filter_enabled: * if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): * cache_skips[frame_cache_key] = 1 # <<<<<<<<<<<<<< * - * if is_stepping and additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + * if ( */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1807, __pyx_L7_error) + __PYX_ERR(0, 2077, __pyx_L7_error) } - if (unlikely(PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0)) __PYX_ERR(0, 1807, __pyx_L7_error) + if (unlikely((PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_1) < 0))) __PYX_ERR(0, 2077, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1809 - * cache_skips[frame_cache_key] = 1 - * - * if is_stepping and additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: # <<<<<<<<<<<<<< - * notify_skipped_step_in_because_of_filters(py_db, frame) + /* "_pydevd_bundle/pydevd_cython.pyx":2080 * + * if ( + * is_stepping # <<<<<<<<<<<<<< + * and additional_info.pydev_original_step_cmd in (107, 144) + * and not _global_notify_skipped_step_in */ - __pyx_t_12 = (__pyx_v_is_stepping != 0); - if (__pyx_t_12) { + if (__pyx_v_is_stepping) { } else { - __pyx_t_7 = __pyx_t_12; + __pyx_t_14 = __pyx_v_is_stepping; goto __pyx_L39_bool_binop_done; } + + /* "_pydevd_bundle/pydevd_cython.pyx":2081 + * if ( + * is_stepping + * and additional_info.pydev_original_step_cmd in (107, 144) # <<<<<<<<<<<<<< + * and not _global_notify_skipped_step_in + * ): + */ switch (__pyx_v_additional_info->pydev_original_step_cmd) { case 0x6B: case 0x90: - __pyx_t_12 = 1; + __pyx_t_13 = 1; break; default: - __pyx_t_12 = 0; + __pyx_t_13 = 0; break; } - __pyx_t_13 = (__pyx_t_12 != 0); - if (__pyx_t_13) { + __pyx_t_7 = __pyx_t_13; + if (__pyx_t_7) { } else { - __pyx_t_7 = __pyx_t_13; + __pyx_t_14 = __pyx_t_7; goto __pyx_L39_bool_binop_done; } - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 1809, __pyx_L7_error) - __pyx_t_12 = ((!__pyx_t_13) != 0); - __pyx_t_7 = __pyx_t_12; + + /* "_pydevd_bundle/pydevd_cython.pyx":2082 + * is_stepping + * and additional_info.pydev_original_step_cmd in (107, 144) + * and not _global_notify_skipped_step_in # <<<<<<<<<<<<<< + * ): + * notify_skipped_step_in_because_of_filters(py_db, frame) + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 2082, __pyx_L7_error) + __pyx_t_13 = (!__pyx_t_7); + __pyx_t_14 = __pyx_t_13; __pyx_L39_bool_binop_done:; - if (__pyx_t_7) { - /* "_pydevd_bundle/pydevd_cython.pyx":1810 + /* "_pydevd_bundle/pydevd_cython.pyx":2079 + * cache_skips[frame_cache_key] = 1 * - * if is_stepping and additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + * if ( # <<<<<<<<<<<<<< + * is_stepping + * and additional_info.pydev_original_step_cmd in (107, 144) + */ + if (__pyx_t_14) { + + /* "_pydevd_bundle/pydevd_cython.pyx":2084 + * and not _global_notify_skipped_step_in + * ): * notify_skipped_step_in_because_of_filters(py_db, frame) # <<<<<<<<<<<<<< * * # A little gotcha, sometimes when we're stepping in we have to stop in a */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1810, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2084, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_py_db, __pyx_v_frame}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_3 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1810, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_3); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL; - } - __Pyx_INCREF(__pyx_v_py_db); - __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_11, __pyx_v_py_db); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_11, __pyx_v_frame); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L7_error) + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_py_db, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 2+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2084, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1809 + /* "_pydevd_bundle/pydevd_cython.pyx":2079 * cache_skips[frame_cache_key] = 1 * - * if is_stepping and additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: # <<<<<<<<<<<<<< - * notify_skipped_step_in_because_of_filters(py_db, frame) - * + * if ( # <<<<<<<<<<<<<< + * is_stepping + * and additional_info.pydev_original_step_cmd in (107, 144) */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1815 + /* "_pydevd_bundle/pydevd_cython.pyx":2089 * # return event showing the back frame as the current frame, so, we need * # to check not only the current frame but the back frame too. * back_frame = frame.f_back # <<<<<<<<<<<<<< - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): - * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): + * if back_frame is not None and pydev_step_cmd in ( + * 107, */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1815, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2089, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_back_frame, __pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1816 + /* "_pydevd_bundle/pydevd_cython.pyx":2090 * # to check not only the current frame but the back frame too. * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): # <<<<<<<<<<<<<< - * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): - * back_frame_cache_key = back_frame.f_code + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, */ - __pyx_t_12 = (__pyx_v_back_frame != Py_None); - __pyx_t_13 = (__pyx_t_12 != 0); + __pyx_t_13 = (__pyx_v_back_frame != Py_None); if (__pyx_t_13) { } else { - __pyx_t_7 = __pyx_t_13; + __pyx_t_14 = __pyx_t_13; goto __pyx_L43_bool_binop_done; } switch (__pyx_v_pydev_step_cmd) { case 0x6B: + + /* "_pydevd_bundle/pydevd_cython.pyx":2091 + * back_frame = frame.f_back + * if back_frame is not None and pydev_step_cmd in ( + * 107, # <<<<<<<<<<<<<< + * 144, + * 109, + */ case 0x90: + + /* "_pydevd_bundle/pydevd_cython.pyx":2092 + * if back_frame is not None and pydev_step_cmd in ( + * 107, + * 144, # <<<<<<<<<<<<<< + * 109, + * 160, + */ case 0x6D: + + /* "_pydevd_bundle/pydevd_cython.pyx":2093 + * 107, + * 144, + * 109, # <<<<<<<<<<<<<< + * 160, + * ): + */ case 0xA0: + + /* "_pydevd_bundle/pydevd_cython.pyx":2090 + * # to check not only the current frame but the back frame too. + * back_frame = frame.f_back + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, + */ __pyx_t_13 = 1; break; default: __pyx_t_13 = 0; break; } - __pyx_t_12 = (__pyx_t_13 != 0); - __pyx_t_7 = __pyx_t_12; + __pyx_t_7 = __pyx_t_13; + __pyx_t_14 = __pyx_t_7; __pyx_L43_bool_binop_done:; - if (__pyx_t_7) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1817 - * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2096 + * 160, + * ): * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): # <<<<<<<<<<<<<< * back_frame_cache_key = back_frame.f_code * cache_skips[back_frame_cache_key] = 1 */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1817, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1817, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1817, __pyx_L7_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2096, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2096, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2096, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_back_frame, __pyx_t_6, Py_False}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1817, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_back_frame, __pyx_t_6, Py_False}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1817, __pyx_L7_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else #endif { - __pyx_t_5 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1817, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_back_frame); - __Pyx_GIVEREF(__pyx_v_back_frame); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_11, __pyx_v_back_frame); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_11, __pyx_t_6); - __Pyx_INCREF(Py_False); - __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_11, Py_False); - __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1817, __pyx_L7_error) + PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_v_back_frame, __pyx_t_4, Py_False}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 3+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2096, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1817, __pyx_L7_error) + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2096, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_7) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1818 - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2097 + * ): * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): * back_frame_cache_key = back_frame.f_code # <<<<<<<<<<<<<< * cache_skips[back_frame_cache_key] = 1 * # if DEBUG: print('skipped: trace_dispatch (filtered out: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1818, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_back_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2097, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_back_frame_cache_key, __pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1819 + /* "_pydevd_bundle/pydevd_cython.pyx":2098 * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): * back_frame_cache_key = back_frame.f_code * cache_skips[back_frame_cache_key] = 1 # <<<<<<<<<<<<<< * # if DEBUG: print('skipped: trace_dispatch (filtered out: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1819, __pyx_L7_error) + __PYX_ERR(0, 2098, __pyx_L7_error) } - if (unlikely(PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_back_frame_cache_key, __pyx_int_1) < 0)) __PYX_ERR(0, 1819, __pyx_L7_error) + if (unlikely((PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_back_frame_cache_key, __pyx_int_1) < 0))) __PYX_ERR(0, 2098, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1821 + /* "_pydevd_bundle/pydevd_cython.pyx":2100 * cache_skips[back_frame_cache_key] = 1 * # if DEBUG: print('skipped: trace_dispatch (filtered out: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * else: * # if DEBUG: print('skipped: trace_dispatch (filtered out: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1821, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2100, __pyx_L7_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1821, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2100, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1817 - * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + /* "_pydevd_bundle/pydevd_cython.pyx":2096 + * 160, + * ): * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): # <<<<<<<<<<<<<< * back_frame_cache_key = back_frame.f_code * cache_skips[back_frame_cache_key] = 1 */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1816 + /* "_pydevd_bundle/pydevd_cython.pyx":2090 * # to check not only the current frame but the back frame too. * back_frame = frame.f_back - * if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): # <<<<<<<<<<<<<< - * if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): - * back_frame_cache_key = back_frame.f_code + * if back_frame is not None and pydev_step_cmd in ( # <<<<<<<<<<<<<< + * 107, + * 144, */ goto __pyx_L42; } - /* "_pydevd_bundle/pydevd_cython.pyx":1824 + /* "_pydevd_bundle/pydevd_cython.pyx":2103 * else: * # if DEBUG: print('skipped: trace_dispatch (filtered out: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * # if DEBUG: print('trace_dispatch', filename, frame.f_lineno, event, frame.f_code.co_name, file_type) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1824, __pyx_L7_error) - if (__pyx_t_7) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2103, __pyx_L7_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1824, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2103, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; @@ -31594,7 +38926,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal } __pyx_L42:; - /* "_pydevd_bundle/pydevd_cython.pyx":1806 + /* "_pydevd_bundle/pydevd_cython.pyx":2076 * * if py_db.is_files_filter_enabled: * if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): # <<<<<<<<<<<<<< @@ -31603,8 +38935,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1805 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2075 + * return None if event == "call" else NO_FTRACE * * if py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< * if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): @@ -31612,106 +38944,105 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1832 + /* "_pydevd_bundle/pydevd_cython.pyx":2111 * ret = PyDBFrame( * ( - * py_db, abs_path_canonical_path_and_base, additional_info, t, frame_skips_cache, frame_cache_key, # <<<<<<<<<<<<<< - * ) - * ).trace_dispatch(frame, event, arg) + * py_db, # <<<<<<<<<<<<<< + * abs_path_canonical_path_and_base, + * additional_info, */ - __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1832, __pyx_L7_error) + __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2111, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_py_db); __Pyx_GIVEREF(__pyx_v_py_db); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_py_db); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_py_db)) __PYX_ERR(0, 2111, __pyx_L7_error); __Pyx_INCREF(__pyx_v_abs_path_canonical_path_and_base); __Pyx_GIVEREF(__pyx_v_abs_path_canonical_path_and_base); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_abs_path_canonical_path_and_base); - __Pyx_INCREF(((PyObject *)__pyx_v_additional_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_additional_info)); - PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_additional_info)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_abs_path_canonical_path_and_base)) __PYX_ERR(0, 2111, __pyx_L7_error); + __Pyx_INCREF((PyObject *)__pyx_v_additional_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_additional_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_additional_info))) __PYX_ERR(0, 2111, __pyx_L7_error); __Pyx_INCREF(__pyx_v_t); __Pyx_GIVEREF(__pyx_v_t); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_t); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_t)) __PYX_ERR(0, 2111, __pyx_L7_error); __Pyx_INCREF(__pyx_v_frame_skips_cache); __Pyx_GIVEREF(__pyx_v_frame_skips_cache); - PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_frame_skips_cache); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_frame_skips_cache)) __PYX_ERR(0, 2111, __pyx_L7_error); __Pyx_INCREF(__pyx_v_frame_cache_key); __Pyx_GIVEREF(__pyx_v_frame_cache_key); - PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_frame_cache_key); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_frame_cache_key)) __PYX_ERR(0, 2111, __pyx_L7_error); - /* "_pydevd_bundle/pydevd_cython.pyx":1830 + /* "_pydevd_bundle/pydevd_cython.pyx":2109 * # Just create PyDBFrame directly (removed support for Python versions < 2.5, which required keeping a weak * # reference to the frame). * ret = PyDBFrame( # <<<<<<<<<<<<<< * ( - * py_db, abs_path_canonical_path_and_base, additional_info, t, frame_skips_cache, frame_cache_key, + * py_db, */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1830, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame), __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2109, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1834 - * py_db, abs_path_canonical_path_and_base, additional_info, t, frame_skips_cache, frame_cache_key, + /* "_pydevd_bundle/pydevd_cython.pyx":2118 + * frame_cache_key, * ) * ).trace_dispatch(frame, event, arg) # <<<<<<<<<<<<<< * if ret is None: * # 1 means skipped because of filters. */ - if (!(likely(PyString_CheckExact(__pyx_v_event))||((__pyx_v_event) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_event)->tp_name), 0))) __PYX_ERR(0, 1834, __pyx_L7_error) - __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_t_4)->__pyx_vtab)->trace_dispatch(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_t_4), __pyx_v_frame, ((PyObject*)__pyx_v_event), __pyx_v_arg, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1834, __pyx_L7_error) + if (!(likely(PyString_CheckExact(__pyx_v_event))||((__pyx_v_event) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_event))) __PYX_ERR(0, 2118, __pyx_L7_error) + __pyx_t_1 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_t_5)->__pyx_vtab)->trace_dispatch(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_t_5), __pyx_v_frame, ((PyObject*)__pyx_v_event), __pyx_v_arg, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2118, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ret = __pyx_t_1; __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1835 + /* "_pydevd_bundle/pydevd_cython.pyx":2119 * ) * ).trace_dispatch(frame, event, arg) * if ret is None: # <<<<<<<<<<<<<< * # 1 means skipped because of filters. * # 2 means skipped because no breakpoints were hit. */ - __pyx_t_7 = (__pyx_v_ret == Py_None); - __pyx_t_12 = (__pyx_t_7 != 0); - if (__pyx_t_12) { + __pyx_t_14 = (__pyx_v_ret == Py_None); + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1838 + /* "_pydevd_bundle/pydevd_cython.pyx":2122 * # 1 means skipped because of filters. * # 2 means skipped because no breakpoints were hit. * cache_skips[frame_cache_key] = 2 # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ if (unlikely(__pyx_v_cache_skips == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1838, __pyx_L7_error) + __PYX_ERR(0, 2122, __pyx_L7_error) } - if (unlikely(PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_2) < 0)) __PYX_ERR(0, 1838, __pyx_L7_error) + if (unlikely((PyDict_SetItem(__pyx_v_cache_skips, __pyx_v_frame_cache_key, __pyx_int_2) < 0))) __PYX_ERR(0, 2122, __pyx_L7_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1839 + /* "_pydevd_bundle/pydevd_cython.pyx":2123 * # 2 means skipped because no breakpoints were hit. * cache_skips[frame_cache_key] = 2 - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * # fmt: off */ __Pyx_XDECREF(__pyx_r); - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1839, __pyx_L7_error) - if (__pyx_t_12) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2123, __pyx_L7_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_1 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1839, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __pyx_t_4; - __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2123, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __pyx_t_5; + __pyx_t_5 = 0; } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1835 + /* "_pydevd_bundle/pydevd_cython.pyx":2119 * ) * ).trace_dispatch(frame, event, arg) * if ret is None: # <<<<<<<<<<<<<< @@ -31720,21 +39051,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1842 - * + /* "_pydevd_bundle/pydevd_cython.pyx":2127 + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * frame.f_trace = SafeCallWrapper(ret) # Make sure we keep the returned tracer. # <<<<<<<<<<<<<< * # ELSE * # frame.f_trace = ret # Make sure we keep the returned tracer. */ - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1842, __pyx_L7_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_v_ret); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2127, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_1) < 0) __PYX_ERR(0, 1842, __pyx_L7_error) + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_1) < 0) __PYX_ERR(0, 2127, __pyx_L7_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1846 - * # frame.f_trace = ret # Make sure we keep the returned tracer. + /* "_pydevd_bundle/pydevd_cython.pyx":2132 * # ENDIF + * # fmt: on * return ret # <<<<<<<<<<<<<< * * except SystemExit: @@ -31744,7 +39075,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __pyx_r = __pyx_v_ret; goto __pyx_L11_try_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1751 + /* "_pydevd_bundle/pydevd_cython.pyx":2012 * * additional_info.is_tracing += 1 * try: # <<<<<<<<<<<<<< @@ -31760,35 +39091,35 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1848 + /* "_pydevd_bundle/pydevd_cython.pyx":2134 * return ret * * except SystemExit: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE + * return None if event == "call" else NO_FTRACE * */ __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_SystemExit); if (__pyx_t_11) { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(0, 1848, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(0, 2134, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); - /* "_pydevd_bundle/pydevd_cython.pyx":1849 + /* "_pydevd_bundle/pydevd_cython.pyx":2135 * * except SystemExit: - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * * except Exception: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1849, __pyx_L9_except_error) - if (__pyx_t_12) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2135, __pyx_L9_except_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1849, __pyx_L9_except_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2135, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_t_3; __pyx_t_3 = 0; @@ -31801,48 +39132,48 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal goto __pyx_L10_except_return; } - /* "_pydevd_bundle/pydevd_cython.pyx":1851 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2137 + * return None if event == "call" else NO_FTRACE * * except Exception: # <<<<<<<<<<<<<< * if py_db.pydb_disposed: - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. */ __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); if (__pyx_t_11) { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(0, 1851, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(0, 2137, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); - /* "_pydevd_bundle/pydevd_cython.pyx":1852 + /* "_pydevd_bundle/pydevd_cython.pyx":2138 * * except Exception: * if py_db.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. * # Log it */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1852, __pyx_L9_except_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2138, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1852, __pyx_L9_except_error) + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2138, __pyx_L9_except_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_12) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1853 + /* "_pydevd_bundle/pydevd_cython.pyx":2139 * except Exception: * if py_db.pydb_disposed: - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. # <<<<<<<<<<<<<< * # Log it * try: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1853, __pyx_L9_except_error) - if (__pyx_t_12) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2139, __pyx_L9_except_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1853, __pyx_L9_except_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2139, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_t_3; __pyx_t_3 = 0; @@ -31854,17 +39185,17 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L10_except_return; - /* "_pydevd_bundle/pydevd_cython.pyx":1852 + /* "_pydevd_bundle/pydevd_cython.pyx":2138 * * except Exception: * if py_db.pydb_disposed: # <<<<<<<<<<<<<< - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. * # Log it */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1855 - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + /* "_pydevd_bundle/pydevd_cython.pyx":2141 + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. * # Log it * try: # <<<<<<<<<<<<<< * if pydev_log_exception is not None: @@ -31873,53 +39204,59 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14); + __Pyx_ExceptionSave(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_17); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_14); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":1856 + /* "_pydevd_bundle/pydevd_cython.pyx":2142 * # Log it * try: * if pydev_log_exception is not None: # <<<<<<<<<<<<<< * # This can actually happen during the interpreter shutdown in Python 2.7 * pydev_log_exception() */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydev_log_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1856, __pyx_L52_error) + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydev_log_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2142, __pyx_L52_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_12 = (__pyx_t_6 != Py_None); + __pyx_t_14 = (__pyx_t_6 != Py_None); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = (__pyx_t_12 != 0); - if (__pyx_t_7) { + if (__pyx_t_14) { - /* "_pydevd_bundle/pydevd_cython.pyx":1858 + /* "_pydevd_bundle/pydevd_cython.pyx":2144 * if pydev_log_exception is not None: * # This can actually happen during the interpreter shutdown in Python 2.7 * pydev_log_exception() # <<<<<<<<<<<<<< * except: * # Error logging? We're really in the interpreter shutdown... */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pydev_log_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1858, __pyx_L52_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pydev_log_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2144, __pyx_L52_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_12 = 1; } } - __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1858, __pyx_L52_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 0+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2144, __pyx_L52_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1856 + /* "_pydevd_bundle/pydevd_cython.pyx":2142 * # Log it * try: * if pydev_log_exception is not None: # <<<<<<<<<<<<<< @@ -31928,24 +39265,24 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal */ } - /* "_pydevd_bundle/pydevd_cython.pyx":1855 - * return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + /* "_pydevd_bundle/pydevd_cython.pyx":2141 + * return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. * # Log it * try: # <<<<<<<<<<<<<< * if pydev_log_exception is not None: * # This can actually happen during the interpreter shutdown in Python 2.7 */ } + __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; goto __pyx_L59_try_end; __pyx_L52_error:; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1859 + /* "_pydevd_bundle/pydevd_cython.pyx":2145 * # This can actually happen during the interpreter shutdown in Python 2.7 * pydev_log_exception() * except: # <<<<<<<<<<<<<< @@ -31957,27 +39294,27 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal goto __pyx_L53_exception_handled; } __pyx_L53_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_17); __Pyx_XGIVEREF(__pyx_t_16); __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_15, __pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_16, __pyx_t_15); __pyx_L59_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":1863 + /* "_pydevd_bundle/pydevd_cython.pyx":2149 * # (https://github.com/fabioz/PyDev.Debugger/issues/8) * pass - * return None if event == 'call' else NO_FTRACE # <<<<<<<<<<<<<< + * return None if event == "call" else NO_FTRACE # <<<<<<<<<<<<<< * finally: * additional_info.is_tracing -= 1 */ __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 1863, __pyx_L9_except_error) - if (__pyx_t_7) { + __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 2149, __pyx_L9_except_error) + if (__pyx_t_14) { __Pyx_INCREF(Py_None); __pyx_t_6 = Py_None; } else { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1863, __pyx_L9_except_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2149, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __pyx_t_3; __pyx_t_3 = 0; @@ -31990,15 +39327,15 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal goto __pyx_L10_except_return; } goto __pyx_L9_except_error; - __pyx_L9_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":1751 + /* "_pydevd_bundle/pydevd_cython.pyx":2012 * * additional_info.is_tracing += 1 * try: # <<<<<<<<<<<<<< * pydev_step_cmd = additional_info.pydev_step_cmd * is_stepping = pydev_step_cmd != -1 */ + __pyx_L9_except_error:; __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_10); @@ -32019,8 +39356,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal } } - /* "_pydevd_bundle/pydevd_cython.pyx":1865 - * return None if event == 'call' else NO_FTRACE + /* "_pydevd_bundle/pydevd_cython.pyx":2151 + * return None if event == "call" else NO_FTRACE * finally: * additional_info.is_tracing -= 1 # <<<<<<<<<<<<<< * @@ -32031,54 +39368,54 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; + __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16); + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8); __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_9); __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_14); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); - __pyx_t_11 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename; + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_11 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename; { __pyx_v_additional_info->is_tracing = (__pyx_v_additional_info->is_tracing - 1); } if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_14); __Pyx_XGIVEREF(__pyx_t_15); __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); } __Pyx_XGIVEREF(__pyx_t_10); __Pyx_XGIVEREF(__pyx_t_9); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_ErrRestore(__pyx_t_10, __pyx_t_9, __pyx_t_8); - __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; - __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18; + __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19; goto __pyx_L1_error; } __pyx_L4_return: { - __pyx_t_16 = __pyx_r; + __pyx_t_17 = __pyx_r; __pyx_r = 0; __pyx_v_additional_info->is_tracing = (__pyx_v_additional_info->is_tracing - 1); - __pyx_r = __pyx_t_16; - __pyx_t_16 = 0; + __pyx_r = __pyx_t_17; + __pyx_t_17 = 0; goto __pyx_L0; } } - /* "_pydevd_bundle/pydevd_cython.pyx":1720 - * # ENDIF + /* "_pydevd_bundle/pydevd_cython.pyx":1979 + * # fmt: on * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< - * ''' This is the callback used when we enter some context in the debugger. + * """This is the callback used when we enter some context in the debugger. * */ @@ -32109,7 +39446,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1710 +/* "_pydevd_bundle/pydevd_cython.pyx":1968 * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) * cdef class ThreadTracer: * cdef public tuple _args; # <<<<<<<<<<<<<< @@ -32120,9 +39457,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__cal /* Python wrapper */ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args___get__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self)); /* function exit code */ @@ -32133,7 +39472,7 @@ static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args___get__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->_args); __pyx_r = __pyx_v_self->_args; @@ -32149,9 +39488,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_2__set__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -32166,8 +39507,8 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_2__se int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 1710, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v_value))) __PYX_ERR(0, 1968, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -32191,9 +39532,11 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_2__se /* Python wrapper */ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_4__del__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self)); /* function exit code */ @@ -32204,7 +39547,7 @@ static int __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_5__de static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_4__del__(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->_args); @@ -32224,11 +39567,39 @@ static int __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5_args_4__de */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__reduce_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self)); /* function exit code */ @@ -32244,13 +39615,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -32263,7 +39633,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->_args); __Pyx_GIVEREF(__pyx_v_self->_args); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->_args); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->_args)) __PYX_ERR(2, 5, __pyx_L1_error); __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -32287,8 +39657,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red * use_setstate = True */ __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -32301,12 +39670,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; /* "(tree fragment)":9 * if _dict is not None: @@ -32332,11 +39701,11 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red * else: * use_setstate = self._args is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, None), state */ /*else*/ { - __pyx_t_3 = (__pyx_v_self->_args != ((PyObject*)Py_None)); - __pyx_v_use_setstate = __pyx_t_3; + __pyx_t_2 = (__pyx_v_self->_args != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_2; } __pyx_L3:; @@ -32344,89 +39713,88 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red * else: * use_setstate = self._args is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, None), state * else: */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self._args is not None * if use_setstate: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_ThreadTracer); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_ThreadTracer); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64458794); - __Pyx_GIVEREF(__pyx_int_64458794); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64458794); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_18997755); + __Pyx_GIVEREF(__pyx_int_18997755); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_18997755)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error); + __pyx_t_3 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self._args is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, None), state + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, None), state * else: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_ThreadTracer); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_ThreadTracer); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64458794); - __Pyx_GIVEREF(__pyx_int_64458794); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64458794); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_18997755); + __Pyx_GIVEREF(__pyx_int_18997755); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_18997755)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_5 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error); __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; } @@ -32439,8 +39807,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -32453,20 +39821,103 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_4__red /* "(tree fragment)":16 * else: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.ThreadTracer.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__setstate_cython__(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -32478,21 +39929,21 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__set int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadTracer__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_ThreadTracer, (type(self), 0x3d7902a, state) + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) */ @@ -32510,7 +39961,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__set return __pyx_r; } -/* "_pydevd_bundle/pydevd_cython.pyx":1880 +/* "_pydevd_bundle/pydevd_cython.pyx":2166 * _original_call = ThreadTracer.__call__ * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< @@ -32519,127 +39970,180 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_6__set */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_11__call__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_11__call__ = {"__call__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_11__call__, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_11__call__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__call__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_23__call__ = {"__call__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__call__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__call__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_self = 0; PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__call__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2166, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2166, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 1); __PYX_ERR(0, 1880, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 1); __PYX_ERR(0, 2166, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2166, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 2); __PYX_ERR(0, 1880, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 2); __PYX_ERR(0, 2166, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2166, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 3); __PYX_ERR(0, 1880, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, 3); __PYX_ERR(0, 2166, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(0, 1880, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__call__") < 0)) __PYX_ERR(0, 2166, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); } __pyx_v_self = values[0]; __pyx_v_frame = values[1]; __pyx_v_event = values[2]; __pyx_v_arg = values[3]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1880, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__call__", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 2166, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(__pyx_self, __pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22__call__(__pyx_self, __pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__call__", 0); + __Pyx_RefNannySetupContext("__call__", 1); - /* "_pydevd_bundle/pydevd_cython.pyx":1881 + /* "_pydevd_bundle/pydevd_cython.pyx":2167 * * def __call__(self, frame, event, arg): * constructed_tid_to_last_frame[self._args[1].ident] = frame # <<<<<<<<<<<<<< * return _original_call(self, frame, event, arg) * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_constructed_tid_to_last_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1881, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_constructed_tid_to_last_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_args_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1881, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_args_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1881, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1881, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ident_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2167, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_t_2, __pyx_v_frame) < 0)) __PYX_ERR(0, 1881, __pyx_L1_error) + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_t_2, __pyx_v_frame) < 0))) __PYX_ERR(0, 2167, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1882 + /* "_pydevd_bundle/pydevd_cython.pyx":2168 * def __call__(self, frame, event, arg): * constructed_tid_to_last_frame[self._args[1].ident] = frame * return _original_call(self, frame, event, arg) # <<<<<<<<<<<<<< @@ -32647,11 +40151,12 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNU * ThreadTracer.__call__ = __call__ */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_original_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1882, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_original_call); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); @@ -32661,50 +40166,20 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNU __pyx_t_4 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) { - PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else #endif { - __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1882, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_arg); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error) + PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_self, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0; - /* "_pydevd_bundle/pydevd_cython.pyx":1880 + /* "_pydevd_bundle/pydevd_cython.pyx":2166 * _original_call = ThreadTracer.__call__ * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< @@ -32717,7 +40192,6 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNU __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -32726,6 +40200,79 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNU return __pyx_r; } +/* "_pydevd_bundle/pydevd_cython.pyx":2174 + * if PYDEVD_USE_SYS_MONITORING: + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): # <<<<<<<<<<<<<< + * raise RuntimeError("Not used in sys.monitoring mode.") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_25fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_25fix_top_level_trace_and_get_trace_func = {"fix_top_level_trace_and_get_trace_func", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_25fix_top_level_trace_and_get_trace_func, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_25fix_top_level_trace_and_get_trace_func(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_args = 0; + CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fix_top_level_trace_and_get_trace_func (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "fix_top_level_trace_and_get_trace_func", 1))) return NULL; + __Pyx_INCREF(__pyx_args); + __pyx_v_args = __pyx_args; + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24fix_top_level_trace_and_get_trace_func(__pyx_self, __pyx_v_args, __pyx_v_kwargs); + + /* function exit code */ + __Pyx_DECREF(__pyx_v_args); + __Pyx_XDECREF(__pyx_v_kwargs); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24fix_top_level_trace_and_get_trace_func(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fix_top_level_trace_and_get_trace_func", 1); + + /* "_pydevd_bundle/pydevd_cython.pyx":2175 + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + * raise RuntimeError("Not used in sys.monitoring mode.") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 2175, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":2174 + * if PYDEVD_USE_SYS_MONITORING: + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): # <<<<<<<<<<<<<< + * raise RuntimeError("Not used in sys.monitoring mode.") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.fix_top_level_trace_and_get_trace_func", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + /* "(tree fragment)":1 * def __pyx_unpickle_PyDBAdditionalThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError @@ -32733,211 +40280,248 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_10__call__(CYTHON_UNU */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_13__pyx_unpickle_PyDBAdditionalThreadInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_13__pyx_unpickle_PyDBAdditionalThreadInfo = {"__pyx_unpickle_PyDBAdditionalThreadInfo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_13__pyx_unpickle_PyDBAdditionalThreadInfo, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_13__pyx_unpickle_PyDBAdditionalThreadInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_27__pyx_unpickle_PyDBAdditionalThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_27__pyx_unpickle_PyDBAdditionalThreadInfo = {"__pyx_unpickle_PyDBAdditionalThreadInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_27__pyx_unpickle_PyDBAdditionalThreadInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_27__pyx_unpickle_PyDBAdditionalThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBAdditionalThreadInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBAdditionalThreadInfo", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBAdditionalThreadInfo", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_PyDBAdditionalThreadInfo") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_PyDBAdditionalThreadInfo") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBAdditionalThreadInfo", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBAdditionalThreadInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBAdditionalThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDBAdditionalThreadInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_26__pyx_unpickle_PyDBAdditionalThreadInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDBAdditionalThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_26__pyx_unpickle_PyDBAdditionalThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBAdditionalThreadInfo", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBAdditionalThreadInfo", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x75b3b02, 0x5f02be1, 0xa5a0d63): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xd33aa14, 0x024feed, 0x4342dfb): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__11, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__13, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x75b3b02, 0x5f02be1, 0xa5a0d63): + * if __pyx_checksum not in (0xd33aa14, 0x024feed, 0x4342dfb): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum * __pyx_result = PyDBAdditionalThreadInfo.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x75b3b02, 0x5f02be1, 0xa5a0d63): + * if __pyx_checksum not in (0xd33aa14, 0x024feed, 0x4342dfb): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = PyDBAdditionalThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x75b3b02, 0x5f02be1, 0xa5a0d63): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xd33aa14, 0x024feed, 0x4342dfb): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum * __pyx_result = PyDBAdditionalThreadInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum * __pyx_result = PyDBAdditionalThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -32947,13 +40531,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDB * return __pyx_result * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdditionalThreadInfo__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdditionalThreadInfo__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum * __pyx_result = PyDBAdditionalThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) @@ -32966,7 +40550,7 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDB * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result # <<<<<<<<<<<<<< * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v___pyx_result); @@ -32982,9 +40566,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDB /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBAdditionalThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -32999,8 +40582,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_12__pyx_unpickle_PyDB * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): */ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdditionalThreadInfo__set_state(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { @@ -33011,21 +40594,21 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBAdditionalThreadInfo__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBAdditionalThreadInfo__set_state", 1); /* "(tree fragment)":12 * return __pyx_result * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[26]) + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[28]) */ if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); @@ -33033,7 +40616,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->conditional_breakpoint_exception); __Pyx_DECREF(__pyx_v___pyx_result->conditional_breakpoint_exception); @@ -33045,15 +40628,24 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->is_tracing = __pyx_t_2; + __pyx_v___pyx_result->is_in_wait_loop = __pyx_t_2; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->is_tracing = __pyx_t_3; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(2, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_call_from_jinja2); __Pyx_DECREF(__pyx_v___pyx_result->pydev_call_from_jinja2); @@ -33063,7 +40655,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_call_inside_jinja2); @@ -33074,18 +40666,18 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_django_resolve_frame = __pyx_t_3; + __pyx_v___pyx_result->pydev_django_resolve_frame = __pyx_t_2; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_func_name); __Pyx_DECREF(__pyx_v___pyx_result->pydev_func_name); @@ -33095,9 +40687,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_message); __Pyx_DECREF(__pyx_v___pyx_result->pydev_message); @@ -33107,54 +40699,54 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_next_line = __pyx_t_2; + __pyx_v___pyx_result->pydev_next_line = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_notify_kill = __pyx_t_3; + __pyx_v___pyx_result->pydev_notify_kill = __pyx_t_2; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_original_step_cmd = __pyx_t_2; + __pyx_v___pyx_result->pydev_original_step_cmd = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_smart_child_offset = __pyx_t_2; + __pyx_v___pyx_result->pydev_smart_child_offset = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_smart_parent_offset = __pyx_t_2; + __pyx_v___pyx_result->pydev_smart_parent_offset = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_smart_step_into_variants); __Pyx_DECREF(__pyx_v___pyx_result->pydev_smart_step_into_variants); @@ -33164,7 +40756,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_smart_step_stop); @@ -33175,25 +40767,25 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_state = __pyx_t_2; + __pyx_v___pyx_result->pydev_state = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_step_cmd = __pyx_t_2; + __pyx_v___pyx_result->pydev_step_cmd = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->pydev_step_stop); @@ -33204,16 +40796,16 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 18, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->pydev_use_scoped_step_frame = __pyx_t_3; + __pyx_v___pyx_result->pydev_use_scoped_step_frame = __pyx_t_2; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 18, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 19, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->step_in_initial_location); @@ -33224,27 +40816,27 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 19, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 20, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->suspend_type = __pyx_t_2; + __pyx_v___pyx_result->suspend_type = __pyx_t_3; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 20, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 21, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->suspended_at_unhandled = __pyx_t_3; + __pyx_v___pyx_result->suspended_at_unhandled = __pyx_t_2; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 21, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 22, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->target_id_to_smart_step_into_variant); __Pyx_DECREF(__pyx_v___pyx_result->target_id_to_smart_step_into_variant); @@ -33254,7 +40846,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 22, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 23, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->thread_tracer); @@ -33265,7 +40857,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 23, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 24, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->top_level_thread_tracer_no_back_frames); @@ -33276,7 +40868,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 24, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 25, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->top_level_thread_tracer_unhandled); @@ -33287,77 +40879,94 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 12, __pyx_L1_error) } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 25, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 26, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->trace_suspend_type); __Pyx_DECREF(__pyx_v___pyx_result->trace_suspend_type); __pyx_v___pyx_result->trace_suspend_type = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(2, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 27, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->weak_thread); + __Pyx_DECREF(__pyx_v___pyx_result->weak_thread); + __pyx_v___pyx_result->weak_thread = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":13 * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[26]) + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[28]) */ if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 26) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 28); if (__pyx_t_5) { } else { - __pyx_t_3 = __pyx_t_5; + __pyx_t_2 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; + __pyx_t_2 = __pyx_t_5; __pyx_L4_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":14 - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[26]) # <<<<<<<<<<<<<< + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[28]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 26, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 28, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[26]) + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[28]) */ } @@ -33365,8 +40974,8 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): */ /* function exit code */ @@ -33374,9 +40983,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBAdditionalThreadInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -33392,211 +41001,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBAdd */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_15__pyx_unpickle__TryExceptContainerObj = {"__pyx_unpickle__TryExceptContainerObj", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15__pyx_unpickle__TryExceptContainerObj, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_15__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_29__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_29__pyx_unpickle__TryExceptContainerObj = {"__pyx_unpickle__TryExceptContainerObj", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_29__pyx_unpickle__TryExceptContainerObj, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_29__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle__TryExceptContainerObj") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle__TryExceptContainerObj") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle__TryExceptContainerObj", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_14__pyx_unpickle__TryExceptContainerObj(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_28__pyx_unpickle__TryExceptContainerObj(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_28__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xc8b6eb1, 0xdbf5e44, 0xde17cd3): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__12, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__14, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0xc8b6eb1, 0xdbf5e44, 0xde17cd3): + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0xc8b6eb1, 0xdbf5e44, 0xde17cd3): + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xc8b6eb1, 0xdbf5e44, 0xde17cd3): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -33606,13 +41252,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14__pyx_unpickle__Try * return __pyx_result * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExceptContainerObj__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExceptContainerObj__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xc8b6eb1, 0xdbf5e44, 0xde17cd3) = (try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) @@ -33641,9 +41287,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_14__pyx_unpickle__Try /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle__TryExceptContainerObj", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -33669,14 +41314,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -33691,7 +41336,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->try_except_infos); __Pyx_DECREF(__pyx_v___pyx_result->try_except_infos); @@ -33708,16 +41353,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -33726,33 +41370,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -33776,9 +41427,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle__TryExceptContainerObj__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -33794,211 +41445,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle__TryExc */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_17__pyx_unpickle_PyDBFrame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_17__pyx_unpickle_PyDBFrame = {"__pyx_unpickle_PyDBFrame", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_17__pyx_unpickle_PyDBFrame, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_17__pyx_unpickle_PyDBFrame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31__pyx_unpickle_PyDBFrame(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_31__pyx_unpickle_PyDBFrame = {"__pyx_unpickle_PyDBFrame", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31__pyx_unpickle_PyDBFrame, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_31__pyx_unpickle_PyDBFrame(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBFrame (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBFrame", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBFrame", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_PyDBFrame") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_PyDBFrame") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBFrame", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_PyDBFrame", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBFrame", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_16__pyx_unpickle_PyDBFrame(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_30__pyx_unpickle_PyDBFrame(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16__pyx_unpickle_PyDBFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_30__pyx_unpickle_PyDBFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBFrame", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBFrame", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x506e682, 0x3a8c26e, 0xb793695): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x3a8c26e, 0xb793695, 0x506e682): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__13, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__15, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x506e682, 0x3a8c26e, 0xb793695): + * if __pyx_checksum not in (0x3a8c26e, 0xb793695, 0x506e682): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum * __pyx_result = PyDBFrame.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x506e682, 0x3a8c26e, 0xb793695): + * if __pyx_checksum not in (0x3a8c26e, 0xb793695, 0x506e682): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = PyDBFrame.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x506e682, 0x3a8c26e, 0xb793695): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x3a8c26e, 0xb793695, 0x506e682): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum * __pyx_result = PyDBFrame.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_PyDBFrame__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum * __pyx_result = PyDBFrame.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBFrame__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -34008,13 +41696,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16__pyx_unpickle_PyDB * return __pyx_result * cdef __pyx_unpickle_PyDBFrame__set_state(PyDBFrame __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFrame__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFrame__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x506e682, 0x3a8c26e, 0xb793695) = (_args, exc_info, should_skip))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3a8c26e, 0xb793695, 0x506e682) = (_args, exc_info, should_skip))" % __pyx_checksum * __pyx_result = PyDBFrame.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_PyDBFrame__set_state( __pyx_result, __pyx_state) @@ -34043,9 +41731,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_16__pyx_unpickle_PyDB /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBFrame", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -34072,14 +41759,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBFrame__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_PyDBFrame__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -34094,7 +41781,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->_args); __Pyx_DECREF(__pyx_v___pyx_result->_args); @@ -34131,16 +41818,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 3) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 3); if (__pyx_t_5) { } else { __pyx_t_3 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; + __pyx_t_3 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_3) { @@ -34149,33 +41835,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[3]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -34199,9 +41892,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_PyDBFrame__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -34217,211 +41910,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_PyDBFra */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_19__pyx_unpickle_SafeCallWrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_19__pyx_unpickle_SafeCallWrapper = {"__pyx_unpickle_SafeCallWrapper", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_19__pyx_unpickle_SafeCallWrapper, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_19__pyx_unpickle_SafeCallWrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_33__pyx_unpickle_SafeCallWrapper(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_33__pyx_unpickle_SafeCallWrapper = {"__pyx_unpickle_SafeCallWrapper", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_33__pyx_unpickle_SafeCallWrapper, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_33__pyx_unpickle_SafeCallWrapper(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_SafeCallWrapper (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SafeCallWrapper", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SafeCallWrapper", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_SafeCallWrapper") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_SafeCallWrapper") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SafeCallWrapper", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SafeCallWrapper", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_SafeCallWrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_18__pyx_unpickle_SafeCallWrapper(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_32__pyx_unpickle_SafeCallWrapper(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18__pyx_unpickle_SafeCallWrapper(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_32__pyx_unpickle_SafeCallWrapper(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_SafeCallWrapper", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_SafeCallWrapper", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x77c077b, 0xa14289b, 0x3cc10aa): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xa14289b, 0x3cc10aa, 0x77c077b): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__14, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__16, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x77c077b, 0xa14289b, 0x3cc10aa): + * if __pyx_checksum not in (0xa14289b, 0x3cc10aa, 0x77c077b): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum * __pyx_result = SafeCallWrapper.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x77c077b, 0xa14289b, 0x3cc10aa): + * if __pyx_checksum not in (0xa14289b, 0x3cc10aa, 0x77c077b): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = SafeCallWrapper.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x77c077b, 0xa14289b, 0x3cc10aa): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xa14289b, 0x3cc10aa, 0x77c077b): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum * __pyx_result = SafeCallWrapper.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_SafeCallWrapper__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum * __pyx_result = SafeCallWrapper.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_SafeCallWrapper__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -34431,13 +42161,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18__pyx_unpickle_Safe * return __pyx_result * cdef __pyx_unpickle_SafeCallWrapper__set_state(SafeCallWrapper __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCallWrapper__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCallWrapper__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x77c077b, 0xa14289b, 0x3cc10aa) = (method_object))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xa14289b, 0x3cc10aa, 0x77c077b) = (method_object))" % __pyx_checksum * __pyx_result = SafeCallWrapper.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_SafeCallWrapper__set_state( __pyx_result, __pyx_state) @@ -34466,9 +42196,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_18__pyx_unpickle_Safe /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_SafeCallWrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -34494,14 +42223,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_SafeCallWrapper__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_SafeCallWrapper__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -34532,16 +42261,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -34550,33 +42278,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -34600,9 +42335,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_SafeCallWrapper__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -34618,211 +42353,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_SafeCal */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_21__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_21__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions = {"__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_21__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_21__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_35__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_35__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions = {"__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_35__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_35__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_20__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_34__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_34__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__15, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__17, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerOnlyUnhandledExceptions.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = TopLevelThreadTracerOnlyUnhandledExceptions.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerOnlyUnhandledExceptions.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerOnlyUnhandledExceptions.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -34832,13 +42604,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20__pyx_unpickle_TopL * return __pyx_result * cdef __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(TopLevelThreadTracerOnlyUnhandledExceptions __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerOnlyUnhandledExceptions.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state( __pyx_result, __pyx_state) @@ -34867,9 +42639,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_20__pyx_unpickle_TopL /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -34895,14 +42666,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -34917,7 +42688,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->_args); __Pyx_DECREF(__pyx_v___pyx_result->_args); @@ -34934,16 +42705,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -34952,33 +42722,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -35002,9 +42779,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -35020,211 +42797,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__pyx_unpickle_TopLevelThreadTracerNoBackFrame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_23__pyx_unpickle_TopLevelThreadTracerNoBackFrame = {"__pyx_unpickle_TopLevelThreadTracerNoBackFrame", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__pyx_unpickle_TopLevelThreadTracerNoBackFrame, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_23__pyx_unpickle_TopLevelThreadTracerNoBackFrame(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_37__pyx_unpickle_TopLevelThreadTracerNoBackFrame(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_37__pyx_unpickle_TopLevelThreadTracerNoBackFrame = {"__pyx_unpickle_TopLevelThreadTracerNoBackFrame", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_37__pyx_unpickle_TopLevelThreadTracerNoBackFrame, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_37__pyx_unpickle_TopLevelThreadTracerNoBackFrame(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerNoBackFrame (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_TopLevelThreadTracerNoBackFrame") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_TopLevelThreadTracerNoBackFrame") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerNoBackFrame", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_22__pyx_unpickle_TopLevelThreadTracerNoBackFrame(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_36__pyx_unpickle_TopLevelThreadTracerNoBackFrame(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__pyx_unpickle_TopLevelThreadTracerNoBackFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_36__pyx_unpickle_TopLevelThreadTracerNoBackFrame(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerNoBackFrame", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__16, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__18, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96): + * if __pyx_checksum not in (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerNoBackFrame.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96): + * if __pyx_checksum not in (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = TopLevelThreadTracerNoBackFrame.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerNoBackFrame.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerNoBackFrame.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -35234,13 +43048,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__pyx_unpickle_TopL * return __pyx_result * cdef __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(TopLevelThreadTracerNoBackFrame __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xa3a9ec1, 0x3f5f7e9, 0x0ff9c96) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f5f7e9, 0x0ff9c96, 0xa3a9ec1) = (_args, _frame_trace_dispatch, _last_exc_arg, _last_raise_line, _raise_lines, try_except_infos))" % __pyx_checksum * __pyx_result = TopLevelThreadTracerNoBackFrame.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state( __pyx_result, __pyx_state) @@ -35269,9 +43083,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_22__pyx_unpickle_TopL /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerNoBackFrame", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -35298,14 +43111,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -35320,7 +43133,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->_args); __Pyx_DECREF(__pyx_v___pyx_result->_args); @@ -35363,7 +43176,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->_raise_lines); __Pyx_DECREF(__pyx_v___pyx_result->_raise_lines); @@ -35391,16 +43204,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 6) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 6); if (__pyx_t_5) { } else { __pyx_t_3 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; + __pyx_t_3 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_3) { @@ -35409,33 +43221,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve * if len(__pyx_state) > 6 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[6]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -35459,9 +43278,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -35477,211 +43296,248 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_TopLeve */ /* Python wrapper */ -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_25__pyx_unpickle_ThreadTracer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_25__pyx_unpickle_ThreadTracer = {"__pyx_unpickle_ThreadTracer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_25__pyx_unpickle_ThreadTracer, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_25__pyx_unpickle_ThreadTracer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_39__pyx_unpickle_ThreadTracer(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_14_pydevd_bundle_13pydevd_cython_39__pyx_unpickle_ThreadTracer = {"__pyx_unpickle_ThreadTracer", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_39__pyx_unpickle_ThreadTracer, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_14_pydevd_bundle_13pydevd_cython_39__pyx_unpickle_ThreadTracer(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadTracer (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadTracer", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadTracer", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_ThreadTracer") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_ThreadTracer") < 0)) __PYX_ERR(2, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadTracer", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadTracer", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_ThreadTracer", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_24__pyx_unpickle_ThreadTracer(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + __pyx_r = __pyx_pf_14_pydevd_bundle_13pydevd_cython_38__pyx_unpickle_ThreadTracer(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24__pyx_unpickle_ThreadTracer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_38__pyx_unpickle_ThreadTracer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_v___pyx_PickleError = 0; PyObject *__pyx_v___pyx_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadTracer", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadTracer", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__15, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__17, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = ThreadTracer.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = ThreadTracer.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(2, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d7902a, 0x121e1fb, 0xf3a61b1): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x121e1fb, 0xf3a61b1, 0x3d7902a): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = ThreadTracer.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_ThreadTracer__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = ThreadTracer.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadTracer__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -35691,13 +43547,13 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24__pyx_unpickle_Thre * return __pyx_result * cdef __pyx_unpickle_ThreadTracer__set_state(ThreadTracer __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadTracer__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadTracer__set_state(((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d7902a, 0x121e1fb, 0xf3a61b1) = (_args))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x121e1fb, 0xf3a61b1, 0x3d7902a) = (_args))" % __pyx_checksum * __pyx_result = ThreadTracer.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadTracer__set_state( __pyx_result, __pyx_state) @@ -35726,9 +43582,8 @@ static PyObject *__pyx_pf_14_pydevd_bundle_13pydevd_cython_24__pyx_unpickle_Thre /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_ThreadTracer", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -35754,14 +43609,14 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadTracer__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadTracer__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -35776,7 +43631,7 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(2, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->_args); __Pyx_DECREF(__pyx_v___pyx_result->_args); @@ -35793,16 +43648,15 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(2, 13, __pyx_L1_error) } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 1) != 0); + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -35811,33 +43665,40 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(2, 14, __pyx_L1_error) } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -35861,9 +43722,9 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython.__pyx_unpickle_ThreadTracer__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -35871,17 +43732,24 @@ static PyObject *__pyx_f_14_pydevd_bundle_13pydevd_cython___pyx_unpickle_ThreadT __Pyx_RefNannyFinishContext(); return __pyx_r; } +static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)o); + p->__pyx_vtab = __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; p->pydev_step_stop = Py_None; Py_INCREF(Py_None); p->pydev_smart_step_stop = Py_None; Py_INCREF(Py_None); p->pydev_call_from_jinja2 = Py_None; Py_INCREF(Py_None); @@ -35896,14 +43764,17 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThr p->step_in_initial_location = Py_None; Py_INCREF(Py_None); p->pydev_smart_step_into_variants = ((PyObject*)Py_None); Py_INCREF(Py_None); p->target_id_to_smart_step_into_variant = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->weak_thread = Py_None; Py_INCREF(Py_None); return o; } static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -35921,7 +43792,15 @@ static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThre Py_CLEAR(p->step_in_initial_location); Py_CLEAR(p->pydev_smart_step_into_variants); Py_CLEAR(p->target_id_to_smart_step_into_variant); + Py_CLEAR(p->weak_thread); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo(PyObject *o, visitproc v, void *a) { @@ -35960,6 +43839,9 @@ static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThre if (p->target_id_to_smart_step_into_variant) { e = (*v)(p->target_id_to_smart_step_into_variant, a); if (e) return e; } + if (p->weak_thread) { + e = (*v)(p->weak_thread, a); if (e) return e; + } return 0; } @@ -35999,6 +43881,9 @@ static int __pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadI tmp = ((PyObject*)p->target_id_to_smart_step_into_variant); p->target_id_to_smart_step_into_variant = ((PyObject*)Py_None); Py_INCREF(Py_None); Py_XDECREF(tmp); + tmp = ((PyObject*)p->weak_thread); + p->weak_thread = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); return 0; } @@ -36352,10 +44237,36 @@ static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThread } } +static PyObject *__pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_weak_thread(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_1__get__(o); +} + +static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_weak_thread(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_3__set__(o, v); + } + else { + return __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11weak_thread_5__del__(o); + } +} + +static PyObject *__pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_is_in_wait_loop(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_1__get__(o); +} + +static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_is_in_wait_loop(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15is_in_wait_loop_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } +} + static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo[] = { - {"get_topmost_frame", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3get_topmost_frame, METH_O, __pyx_doc_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_2get_topmost_frame}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -36386,12 +44297,34 @@ static struct PyGetSetDef __pyx_getsets_14_pydevd_bundle_13pydevd_cython_PyDBAdd {(char *)"pydev_smart_step_into_variants", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_pydev_smart_step_into_variants, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_pydev_smart_step_into_variants, (char *)0, 0}, {(char *)"target_id_to_smart_step_into_variant", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_target_id_to_smart_step_into_variant, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_target_id_to_smart_step_into_variant, (char *)0, 0}, {(char *)"pydev_use_scoped_step_frame", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_pydev_use_scoped_step_frame, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_pydev_use_scoped_step_frame, (char *)0, 0}, + {(char *)"weak_thread", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_weak_thread, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_weak_thread, (char *)0, 0}, + {(char *)"is_in_wait_loop", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_is_in_wait_loop, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_is_in_wait_loop, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {Py_tp_str, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11__str__}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {Py_tp_getset, (void *)__pyx_getsets_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo_spec = { + "_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.PyDBAdditionalThreadInfo", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""PyDBAdditionalThreadInfo", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, /*tp_dealloc*/ @@ -36415,7 +44348,7 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalTh 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ - __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5__str__, /*tp_str*/ + __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_11__str__, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ @@ -36434,7 +44367,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalTh 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, /*tp_new*/ @@ -36448,28 +44383,44 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalTh 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)o); p->try_except_infos = ((PyObject*)Py_None); Py_INCREF(Py_None); return o; @@ -36478,13 +44429,22 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython__TryExceptContain static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->try_except_infos); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj(PyObject *o, visitproc v, void *a) { @@ -36519,8 +44479,8 @@ static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerO } static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -36528,10 +44488,29 @@ static struct PyGetSetDef __pyx_getsets_14_pydevd_bundle_13pydevd_cython__TryExc {(char *)"try_except_infos", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_try_except_infos, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_try_except_infos, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {Py_tp_getset, (void *)__pyx_getsets_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj_spec = { + "_pydevd_bundle.pydevd_cython._TryExceptContainerObj", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython._TryExceptContainerObj", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""_TryExceptContainerObj", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj, /*tp_dealloc*/ @@ -36574,7 +44553,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContai 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj, /*tp_new*/ @@ -36588,29 +44569,45 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContai 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBFrame __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame; static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)o); p->__pyx_vtab = __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBFrame; p->_args = ((PyObject*)Py_None); Py_INCREF(Py_None); @@ -36621,14 +44618,23 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyTypeO static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBFrame) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->_args); Py_CLEAR(p->exc_info); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyObject *o, visitproc v, void *a) { @@ -36658,17 +44664,34 @@ static int __pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_PyDBFrame(PyObject *o static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_PyDBFrame[] = { {"set_suspend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend, METH_VARARGS|METH_KEYWORDS, 0}, {"do_wait_suspend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend, METH_VARARGS|METH_KEYWORDS, 0}, - {"trace_exception", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception, METH_VARARGS|METH_KEYWORDS, 0}, - {"handle_user_exception", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception, METH_O, 0}, - {"trace_dispatch", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch, METH_VARARGS|METH_KEYWORDS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__, METH_O, 0}, + {"trace_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"handle_user_exception", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBFrame}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_PyDBFrame}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_PyDBFrame}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_PyDBFrame}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBFrame}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame_spec = { + "_pydevd_bundle.pydevd_cython.PyDBFrame", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.PyDBFrame", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""PyDBFrame", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_PyDBFrame, /*tp_dealloc*/ @@ -36711,7 +44734,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_PyDBFrame, /*tp_new*/ @@ -36725,28 +44750,44 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)o); p->method_object = Py_None; Py_INCREF(Py_None); return o; @@ -36755,13 +44796,22 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(P static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->method_object); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(PyObject *o, visitproc v, void *a) { @@ -36783,15 +44833,34 @@ static int __pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper(PyObj } static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper[] = { - {"get_method_object", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object, METH_NOARGS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__, METH_O, 0}, + {"get_method_object", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper}, + {Py_tp_call, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_3__call__}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper_spec = { + "_pydevd_bundle.pydevd_cython.SafeCallWrapper", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.SafeCallWrapper", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""SafeCallWrapper", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper, /*tp_dealloc*/ @@ -36834,7 +44903,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper, /*tp_new*/ @@ -36848,28 +44919,44 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)o); p->_args = ((PyObject*)Py_None); Py_INCREF(Py_None); return o; @@ -36878,13 +44965,22 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTra static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->_args); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions(PyObject *o, visitproc v, void *a) { @@ -36919,10 +45015,10 @@ static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracer } static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions[] = { - {"trace_unhandled_exceptions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions, METH_VARARGS|METH_KEYWORDS, 0}, - {"get_trace_dispatch_func", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func, METH_NOARGS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__, METH_O, 0}, + {"trace_unhandled_exceptions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"get_trace_dispatch_func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -36930,10 +45026,29 @@ static struct PyGetSetDef __pyx_getsets_14_pydevd_bundle_13pydevd_cython_TopLeve {(char *)"_args", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions__args, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions__args, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {Py_tp_getset, (void *)__pyx_getsets_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions_spec = { + "_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.TopLevelThreadTracerOnlyUnhandledExceptions", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""TopLevelThreadTracerOnlyUnhandledExceptions", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, /*tp_dealloc*/ @@ -36976,7 +45091,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTr 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, /*tp_new*/ @@ -36990,28 +45107,44 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTr 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)o); p->_frame_trace_dispatch = Py_None; Py_INCREF(Py_None); p->_args = ((PyObject*)Py_None); Py_INCREF(Py_None); @@ -37024,8 +45157,10 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTra static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -37034,7 +45169,14 @@ static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTrac Py_CLEAR(p->try_except_infos); Py_CLEAR(p->_last_exc_arg); Py_CLEAR(p->_raise_lines); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame(PyObject *o, visitproc v, void *a) { @@ -37159,10 +45301,10 @@ static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracer } static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame[] = { - {"trace_dispatch_and_unhandled_exceptions", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions, METH_VARARGS|METH_KEYWORDS, 0}, - {"get_trace_dispatch_func", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func, METH_NOARGS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__, METH_O, 0}, + {"trace_dispatch_and_unhandled_exceptions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"get_trace_dispatch_func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -37175,10 +45317,29 @@ static struct PyGetSetDef __pyx_getsets_14_pydevd_bundle_13pydevd_cython_TopLeve {(char *)"_last_raise_line", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame__last_raise_line, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame__last_raise_line, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {Py_tp_getset, (void *)__pyx_getsets_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame_spec = { + "_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.TopLevelThreadTracerNoBackFrame", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""TopLevelThreadTracerNoBackFrame", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, /*tp_dealloc*/ @@ -37221,7 +45382,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTr 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, /*tp_new*/ @@ -37235,28 +45398,44 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTr 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_ThreadTracer(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)o); p->_args = ((PyObject*)Py_None); Py_INCREF(Py_None); return o; @@ -37265,13 +45444,22 @@ static PyObject *__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_ThreadTracer(PyTy static void __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_ThreadTracer(PyObject *o) { struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *p = (struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_ThreadTracer) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->_args); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_ThreadTracer(PyObject *o, visitproc v, void *a) { @@ -37306,8 +45494,8 @@ static int __pyx_setprop_14_pydevd_bundle_13pydevd_cython_12ThreadTracer__args(P } static PyMethodDef __pyx_methods_14_pydevd_bundle_13pydevd_cython_ThreadTracer[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -37315,10 +45503,30 @@ static struct PyGetSetDef __pyx_getsets_14_pydevd_bundle_13pydevd_cython_ThreadT {(char *)"_args", __pyx_getprop_14_pydevd_bundle_13pydevd_cython_12ThreadTracer__args, __pyx_setprop_14_pydevd_bundle_13pydevd_cython_12ThreadTracer__args, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {Py_tp_call, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_3__call__}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {Py_tp_clear, (void *)__pyx_tp_clear_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {Py_tp_methods, (void *)__pyx_methods_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {Py_tp_getset, (void *)__pyx_getsets_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {Py_tp_init, (void *)__pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_14_pydevd_bundle_13pydevd_cython_ThreadTracer}, + {0, 0}, +}; +static PyType_Spec __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer_spec = { + "_pydevd_bundle.pydevd_cython.ThreadTracer", + sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer_slots, +}; +#else static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_bundle.pydevd_cython.ThreadTracer", /*tp_name*/ + "_pydevd_bundle.pydevd_cython.""ThreadTracer", /*tp_name*/ sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_ThreadTracer), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_14_pydevd_bundle_13pydevd_cython_ThreadTracer, /*tp_dealloc*/ @@ -37361,7 +45569,9 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer = { 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_14_pydevd_bundle_13pydevd_cython_ThreadTracer, /*tp_new*/ @@ -37375,54 +45585,33 @@ static PyTypeObject __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer = { 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_pydevd_cython(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_pydevd_cython}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "pydevd_cython", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE @@ -37432,573 +45621,1023 @@ static struct PyModuleDef __pyx_moduledef = { #define CYTHON_SMALL_CODE #endif #endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, - {&__pyx_n_s_ALL, __pyx_k_ALL, sizeof(__pyx_k_ALL), 0, 0, 1, 1}, - {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, - {&__pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_k_CMD_SET_FUNCTION_BREAK, sizeof(__pyx_k_CMD_SET_FUNCTION_BREAK), 0, 0, 1, 1}, - {&__pyx_n_s_DEBUG_START, __pyx_k_DEBUG_START, sizeof(__pyx_k_DEBUG_START), 0, 0, 1, 1}, - {&__pyx_n_s_DEBUG_START_PY3K, __pyx_k_DEBUG_START_PY3K, sizeof(__pyx_k_DEBUG_START_PY3K), 0, 0, 1, 1}, - {&__pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_k_EXCEPTION_TYPE_HANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_HANDLED), 0, 0, 1, 1}, - {&__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_k_EXCEPTION_TYPE_USER_UNHANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_USER_UNHANDLED), 0, 0, 1, 1}, - {&__pyx_kp_s_Error_in_linecache_checkcache_r, __pyx_k_Error_in_linecache_checkcache_r, sizeof(__pyx_k_Error_in_linecache_checkcache_r), 0, 0, 1, 0}, - {&__pyx_kp_s_Error_in_linecache_getline_r_s_f, __pyx_k_Error_in_linecache_getline_r_s_f, sizeof(__pyx_k_Error_in_linecache_getline_r_s_f), 0, 0, 1, 0}, - {&__pyx_n_s_ForkSafeLock, __pyx_k_ForkSafeLock, sizeof(__pyx_k_ForkSafeLock), 0, 0, 1, 1}, - {&__pyx_n_s_GeneratorExit, __pyx_k_GeneratorExit, sizeof(__pyx_k_GeneratorExit), 0, 0, 1, 1}, - {&__pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_k_IGNORE_EXCEPTION_TAG, sizeof(__pyx_k_IGNORE_EXCEPTION_TAG), 0, 0, 1, 1}, - {&__pyx_kp_s_IgnoreException, __pyx_k_IgnoreException, sizeof(__pyx_k_IgnoreException), 0, 0, 1, 0}, - {&__pyx_kp_s_Ignore_exception_s_in_library_s, __pyx_k_Ignore_exception_s_in_library_s, sizeof(__pyx_k_Ignore_exception_s_in_library_s), 0, 0, 1, 0}, - {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_k_Incompatible_checksums_0x_x_vs_0_4, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_k_Incompatible_checksums_0x_x_vs_0_5, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6, __pyx_k_Incompatible_checksums_0x_x_vs_0_6, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_6), 0, 0, 1, 0}, - {&__pyx_n_s_KeyboardInterrupt, __pyx_k_KeyboardInterrupt, sizeof(__pyx_k_KeyboardInterrupt), 0, 0, 1, 1}, - {&__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_k_NORM_PATHS_AND_BASE_CONTAINER, sizeof(__pyx_k_NORM_PATHS_AND_BASE_CONTAINER), 0, 0, 1, 1}, - {&__pyx_n_s_NO_FTRACE, __pyx_k_NO_FTRACE, sizeof(__pyx_k_NO_FTRACE), 0, 0, 1, 1}, - {&__pyx_n_s_NameError, __pyx_k_NameError, sizeof(__pyx_k_NameError), 0, 0, 1, 1}, - {&__pyx_n_s_None, __pyx_k_None, sizeof(__pyx_k_None), 0, 0, 1, 1}, - {&__pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_k_PYDEVD_IPYTHON_CONTEXT, sizeof(__pyx_k_PYDEVD_IPYTHON_CONTEXT), 0, 0, 1, 1}, - {&__pyx_n_s_PYDEV_FILE, __pyx_k_PYDEV_FILE, sizeof(__pyx_k_PYDEV_FILE), 0, 0, 1, 1}, - {&__pyx_n_s_PYTHON_SUSPEND, __pyx_k_PYTHON_SUSPEND, sizeof(__pyx_k_PYTHON_SUSPEND), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_PyDBAdditionalThreadInfo, __pyx_k_PyDBAdditionalThreadInfo, sizeof(__pyx_k_PyDBAdditionalThreadInfo), 0, 0, 1, 1}, - {&__pyx_n_s_PyDBFrame, __pyx_k_PyDBFrame, sizeof(__pyx_k_PyDBFrame), 0, 0, 1, 1}, - {&__pyx_n_s_RETURN_VALUES_DICT, __pyx_k_RETURN_VALUES_DICT, sizeof(__pyx_k_RETURN_VALUES_DICT), 0, 0, 1, 1}, - {&__pyx_n_s_STATE_RUN, __pyx_k_STATE_RUN, sizeof(__pyx_k_STATE_RUN), 0, 0, 1, 1}, - {&__pyx_n_s_SUPPORT_GEVENT, __pyx_k_SUPPORT_GEVENT, sizeof(__pyx_k_SUPPORT_GEVENT), 0, 0, 1, 1}, - {&__pyx_n_s_SafeCallWrapper, __pyx_k_SafeCallWrapper, sizeof(__pyx_k_SafeCallWrapper), 0, 0, 1, 1}, - {&__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s, __pyx_k_State_s_Stop_s_Cmd_s_Kill_s, sizeof(__pyx_k_State_s_Stop_s_Cmd_s_Kill_s), 0, 0, 1, 0}, - {&__pyx_n_s_StopAsyncIteration, __pyx_k_StopAsyncIteration, sizeof(__pyx_k_StopAsyncIteration), 0, 0, 1, 1}, - {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1}, - {&__pyx_kp_s_Stop_inside_ipython_call, __pyx_k_Stop_inside_ipython_call, sizeof(__pyx_k_Stop_inside_ipython_call), 0, 0, 1, 0}, - {&__pyx_n_s_SystemExit, __pyx_k_SystemExit, sizeof(__pyx_k_SystemExit), 0, 0, 1, 1}, - {&__pyx_n_s_TRACE_PROPERTY, __pyx_k_TRACE_PROPERTY, sizeof(__pyx_k_TRACE_PROPERTY), 0, 0, 1, 1}, - {&__pyx_n_s_Thread, __pyx_k_Thread, sizeof(__pyx_k_Thread), 0, 0, 1, 1}, - {&__pyx_n_s_ThreadTracer, __pyx_k_ThreadTracer, sizeof(__pyx_k_ThreadTracer), 0, 0, 1, 1}, - {&__pyx_n_s_TopLevelThreadTracerNoBackFrame, __pyx_k_TopLevelThreadTracerNoBackFrame, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame), 0, 0, 1, 1}, - {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle, __pyx_k_TopLevelThreadTracerOnlyUnhandle, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle), 0, 0, 1, 1}, - {&__pyx_n_s_TryExceptContainerObj, __pyx_k_TryExceptContainerObj, sizeof(__pyx_k_TryExceptContainerObj), 0, 0, 1, 1}, - {&__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, __pyx_k_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, sizeof(__pyx_k_USE_CUSTOM_SYS_CURRENT_FRAMES_MA), 0, 0, 1, 1}, - {&__pyx_kp_s_Unable_to_get_topmost_frame_for, __pyx_k_Unable_to_get_topmost_frame_for, sizeof(__pyx_k_Unable_to_get_topmost_frame_for), 0, 0, 1, 0}, - {&__pyx_kp_s_Using_Cython_speedups, __pyx_k_Using_Cython_speedups, sizeof(__pyx_k_Using_Cython_speedups), 0, 0, 1, 0}, - {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0}, - {&__pyx_kp_s__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 0, 1, 0}, - {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0}, - {&__pyx_kp_s__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 0, 1, 0}, - {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1}, - {&__pyx_n_s_add_command, __pyx_k_add_command, sizeof(__pyx_k_add_command), 0, 0, 1, 1}, - {&__pyx_n_s_add_exception_to_frame, __pyx_k_add_exception_to_frame, sizeof(__pyx_k_add_exception_to_frame), 0, 0, 1, 1}, - {&__pyx_n_s_additional_info, __pyx_k_additional_info, sizeof(__pyx_k_additional_info), 0, 0, 1, 1}, - {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, - {&__pyx_n_s_apply_files_filter, __pyx_k_apply_files_filter, sizeof(__pyx_k_apply_files_filter), 0, 0, 1, 1}, - {&__pyx_n_s_apply_to_settrace, __pyx_k_apply_to_settrace, sizeof(__pyx_k_apply_to_settrace), 0, 0, 1, 1}, - {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_args_2, __pyx_k_args_2, sizeof(__pyx_k_args_2), 0, 0, 1, 1}, - {&__pyx_n_s_basename, __pyx_k_basename, sizeof(__pyx_k_basename), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap, __pyx_k_bootstrap, sizeof(__pyx_k_bootstrap), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_2, __pyx_k_bootstrap_2, sizeof(__pyx_k_bootstrap_2), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_inner, __pyx_k_bootstrap_inner, sizeof(__pyx_k_bootstrap_inner), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_inner_2, __pyx_k_bootstrap_inner_2, sizeof(__pyx_k_bootstrap_inner_2), 0, 0, 1, 1}, - {&__pyx_n_s_break_on_caught_exceptions, __pyx_k_break_on_caught_exceptions, sizeof(__pyx_k_break_on_caught_exceptions), 0, 0, 1, 1}, - {&__pyx_n_s_break_on_user_uncaught_exception, __pyx_k_break_on_user_uncaught_exception, sizeof(__pyx_k_break_on_user_uncaught_exception), 0, 0, 1, 1}, - {&__pyx_n_s_breakpoints, __pyx_k_breakpoints, sizeof(__pyx_k_breakpoints), 0, 0, 1, 1}, - {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, - {&__pyx_n_s_call_2, __pyx_k_call_2, sizeof(__pyx_k_call_2), 0, 0, 1, 1}, - {&__pyx_n_s_can_skip, __pyx_k_can_skip, sizeof(__pyx_k_can_skip), 0, 0, 1, 1}, - {&__pyx_kp_s_cell, __pyx_k_cell, sizeof(__pyx_k_cell), 0, 0, 1, 0}, - {&__pyx_n_s_checkcache, __pyx_k_checkcache, sizeof(__pyx_k_checkcache), 0, 0, 1, 1}, - {&__pyx_n_s_children_variants, __pyx_k_children_variants, sizeof(__pyx_k_children_variants), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_cmd_factory, __pyx_k_cmd_factory, sizeof(__pyx_k_cmd_factory), 0, 0, 1, 1}, - {&__pyx_n_s_cmd_step_into, __pyx_k_cmd_step_into, sizeof(__pyx_k_cmd_step_into), 0, 0, 1, 1}, - {&__pyx_n_s_cmd_step_over, __pyx_k_cmd_step_over, sizeof(__pyx_k_cmd_step_over), 0, 0, 1, 1}, - {&__pyx_n_s_co_filename, __pyx_k_co_filename, sizeof(__pyx_k_co_filename), 0, 0, 1, 1}, - {&__pyx_n_s_co_firstlineno, __pyx_k_co_firstlineno, sizeof(__pyx_k_co_firstlineno), 0, 0, 1, 1}, - {&__pyx_n_s_co_flags, __pyx_k_co_flags, sizeof(__pyx_k_co_flags), 0, 0, 1, 1}, - {&__pyx_n_s_co_name, __pyx_k_co_name, sizeof(__pyx_k_co_name), 0, 0, 1, 1}, - {&__pyx_n_s_collect_return_info, __pyx_k_collect_return_info, sizeof(__pyx_k_collect_return_info), 0, 0, 1, 1}, - {&__pyx_n_s_collect_try_except_info, __pyx_k_collect_try_except_info, sizeof(__pyx_k_collect_try_except_info), 0, 0, 1, 1}, - {&__pyx_n_s_compile, __pyx_k_compile, sizeof(__pyx_k_compile), 0, 0, 1, 1}, - {&__pyx_n_s_condition, __pyx_k_condition, sizeof(__pyx_k_condition), 0, 0, 1, 1}, - {&__pyx_n_s_constant_to_str, __pyx_k_constant_to_str, sizeof(__pyx_k_constant_to_str), 0, 0, 1, 1}, - {&__pyx_n_s_constructed_tid_to_last_frame, __pyx_k_constructed_tid_to_last_frame, sizeof(__pyx_k_constructed_tid_to_last_frame), 0, 0, 1, 1}, - {&__pyx_n_s_current_frames, __pyx_k_current_frames, sizeof(__pyx_k_current_frames), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_dis, __pyx_k_dis, sizeof(__pyx_k_dis), 0, 0, 1, 1}, - {&__pyx_n_s_disable_tracing, __pyx_k_disable_tracing, sizeof(__pyx_k_disable_tracing), 0, 0, 1, 1}, - {&__pyx_n_s_do_wait_suspend, __pyx_k_do_wait_suspend, sizeof(__pyx_k_do_wait_suspend), 0, 0, 1, 1}, - {&__pyx_n_s_enable_tracing, __pyx_k_enable_tracing, sizeof(__pyx_k_enable_tracing), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1}, - {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, - {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, - {&__pyx_n_s_exc_info, __pyx_k_exc_info, sizeof(__pyx_k_exc_info), 0, 0, 1, 1}, - {&__pyx_n_s_except_line, __pyx_k_except_line, sizeof(__pyx_k_except_line), 0, 0, 1, 1}, - {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, - {&__pyx_n_s_exception_break, __pyx_k_exception_break, sizeof(__pyx_k_exception_break), 0, 0, 1, 1}, - {&__pyx_n_s_exception_type, __pyx_k_exception_type, sizeof(__pyx_k_exception_type), 0, 0, 1, 1}, - {&__pyx_n_s_exclude_exception_by_filter, __pyx_k_exclude_exception_by_filter, sizeof(__pyx_k_exclude_exception_by_filter), 0, 0, 1, 1}, - {&__pyx_n_s_exec, __pyx_k_exec, sizeof(__pyx_k_exec), 0, 0, 1, 1}, - {&__pyx_n_s_execfile, __pyx_k_execfile, sizeof(__pyx_k_execfile), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_expression, __pyx_k_expression, sizeof(__pyx_k_expression), 0, 0, 1, 1}, - {&__pyx_n_s_f_back, __pyx_k_f_back, sizeof(__pyx_k_f_back), 0, 0, 1, 1}, - {&__pyx_n_s_f_code, __pyx_k_f_code, sizeof(__pyx_k_f_code), 0, 0, 1, 1}, - {&__pyx_n_s_f_globals, __pyx_k_f_globals, sizeof(__pyx_k_f_globals), 0, 0, 1, 1}, - {&__pyx_n_s_f_lasti, __pyx_k_f_lasti, sizeof(__pyx_k_f_lasti), 0, 0, 1, 1}, - {&__pyx_n_s_f_lineno, __pyx_k_f_lineno, sizeof(__pyx_k_f_lineno), 0, 0, 1, 1}, - {&__pyx_n_s_f_locals, __pyx_k_f_locals, sizeof(__pyx_k_f_locals), 0, 0, 1, 1}, - {&__pyx_n_s_f_trace, __pyx_k_f_trace, sizeof(__pyx_k_f_trace), 0, 0, 1, 1}, - {&__pyx_n_s_f_unhandled, __pyx_k_f_unhandled, sizeof(__pyx_k_f_unhandled), 0, 0, 1, 1}, - {&__pyx_n_s_filename, __pyx_k_filename, sizeof(__pyx_k_filename), 0, 0, 1, 1}, - {&__pyx_n_s_filename_to_lines_where_exceptio, __pyx_k_filename_to_lines_where_exceptio, sizeof(__pyx_k_filename_to_lines_where_exceptio), 0, 0, 1, 1}, - {&__pyx_n_s_filename_to_stat_info, __pyx_k_filename_to_stat_info, sizeof(__pyx_k_filename_to_stat_info), 0, 0, 1, 1}, - {&__pyx_n_s_findlinestarts, __pyx_k_findlinestarts, sizeof(__pyx_k_findlinestarts), 0, 0, 1, 1}, - {&__pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_k_fix_top_level_trace_and_get_trac, sizeof(__pyx_k_fix_top_level_trace_and_get_trac), 0, 0, 1, 1}, - {&__pyx_n_s_force_only_unhandled_tracer, __pyx_k_force_only_unhandled_tracer, sizeof(__pyx_k_force_only_unhandled_tracer), 0, 0, 1, 1}, - {&__pyx_n_s_frame, __pyx_k_frame, sizeof(__pyx_k_frame), 0, 0, 1, 1}, - {&__pyx_n_s_frame_trace_dispatch, __pyx_k_frame_trace_dispatch, sizeof(__pyx_k_frame_trace_dispatch), 0, 0, 1, 1}, - {&__pyx_n_s_func_name, __pyx_k_func_name, sizeof(__pyx_k_func_name), 0, 0, 1, 1}, - {&__pyx_n_s_function_breakpoint_name_to_brea, __pyx_k_function_breakpoint_name_to_brea, sizeof(__pyx_k_function_breakpoint_name_to_brea), 0, 0, 1, 1}, - {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, - {&__pyx_n_s_get_abs_path_real_path_and_base, __pyx_k_get_abs_path_real_path_and_base, sizeof(__pyx_k_get_abs_path_real_path_and_base), 0, 0, 1, 1}, - {&__pyx_n_s_get_breakpoint, __pyx_k_get_breakpoint, sizeof(__pyx_k_get_breakpoint), 0, 0, 1, 1}, - {&__pyx_n_s_get_clsname_for_code, __pyx_k_get_clsname_for_code, sizeof(__pyx_k_get_clsname_for_code), 0, 0, 1, 1}, - {&__pyx_n_s_get_current_thread_id, __pyx_k_get_current_thread_id, sizeof(__pyx_k_get_current_thread_id), 0, 0, 1, 1}, - {&__pyx_n_s_get_exception_breakpoint, __pyx_k_get_exception_breakpoint, sizeof(__pyx_k_get_exception_breakpoint), 0, 0, 1, 1}, - {&__pyx_n_s_get_file_type, __pyx_k_get_file_type, sizeof(__pyx_k_get_file_type), 0, 0, 1, 1}, - {&__pyx_n_s_get_smart_step_into_variant_from, __pyx_k_get_smart_step_into_variant_from, sizeof(__pyx_k_get_smart_step_into_variant_from), 0, 0, 1, 1}, - {&__pyx_n_s_get_trace_dispatch_func, __pyx_k_get_trace_dispatch_func, sizeof(__pyx_k_get_trace_dispatch_func), 0, 0, 1, 1}, - {&__pyx_n_s_getline, __pyx_k_getline, sizeof(__pyx_k_getline), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_s_global_cache_frame_skips, __pyx_k_global_cache_frame_skips, sizeof(__pyx_k_global_cache_frame_skips), 0, 0, 1, 1}, - {&__pyx_n_s_global_cache_skips, __pyx_k_global_cache_skips, sizeof(__pyx_k_global_cache_skips), 0, 0, 1, 1}, - {&__pyx_n_s_global_notify_skipped_step_in_l, __pyx_k_global_notify_skipped_step_in_l, sizeof(__pyx_k_global_notify_skipped_step_in_l), 0, 0, 1, 1}, - {&__pyx_n_s_handle_breakpoint_condition, __pyx_k_handle_breakpoint_condition, sizeof(__pyx_k_handle_breakpoint_condition), 0, 0, 1, 1}, - {&__pyx_n_s_handle_breakpoint_expression, __pyx_k_handle_breakpoint_expression, sizeof(__pyx_k_handle_breakpoint_expression), 0, 0, 1, 1}, - {&__pyx_n_s_handle_user_exception, __pyx_k_handle_user_exception, sizeof(__pyx_k_handle_user_exception), 0, 0, 1, 1}, - {&__pyx_n_s_has_condition, __pyx_k_has_condition, sizeof(__pyx_k_has_condition), 0, 0, 1, 1}, - {&__pyx_n_s_has_plugin_exception_breaks, __pyx_k_has_plugin_exception_breaks, sizeof(__pyx_k_has_plugin_exception_breaks), 0, 0, 1, 1}, - {&__pyx_n_s_has_plugin_line_breaks, __pyx_k_has_plugin_line_breaks, sizeof(__pyx_k_has_plugin_line_breaks), 0, 0, 1, 1}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, - {&__pyx_n_s_ident, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 0, 1, 1}, - {&__pyx_n_s_ignore_exception_trace, __pyx_k_ignore_exception_trace, sizeof(__pyx_k_ignore_exception_trace), 0, 0, 1, 1}, - {&__pyx_n_s_ignore_exceptions_thrown_in_line, __pyx_k_ignore_exceptions_thrown_in_line, sizeof(__pyx_k_ignore_exceptions_thrown_in_line), 0, 0, 1, 1}, - {&__pyx_n_s_ignore_system_exit_code, __pyx_k_ignore_system_exit_code, sizeof(__pyx_k_ignore_system_exit_code), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_in_project_scope, __pyx_k_in_project_scope, sizeof(__pyx_k_in_project_scope), 0, 0, 1, 1}, - {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, - {&__pyx_kp_s_invalid, __pyx_k_invalid, sizeof(__pyx_k_invalid), 0, 0, 1, 0}, - {&__pyx_n_s_is_files_filter_enabled, __pyx_k_is_files_filter_enabled, sizeof(__pyx_k_is_files_filter_enabled), 0, 0, 1, 1}, - {&__pyx_n_s_is_line_in_except_block, __pyx_k_is_line_in_except_block, sizeof(__pyx_k_is_line_in_except_block), 0, 0, 1, 1}, - {&__pyx_n_s_is_line_in_try_block, __pyx_k_is_line_in_try_block, sizeof(__pyx_k_is_line_in_try_block), 0, 0, 1, 1}, - {&__pyx_n_s_is_logpoint, __pyx_k_is_logpoint, sizeof(__pyx_k_is_logpoint), 0, 0, 1, 1}, - {&__pyx_n_s_is_thread_alive, __pyx_k_is_thread_alive, sizeof(__pyx_k_is_thread_alive), 0, 0, 1, 1}, - {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, - {&__pyx_n_s_just_raised, __pyx_k_just_raised, sizeof(__pyx_k_just_raised), 0, 0, 1, 1}, - {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, - {&__pyx_kp_s_lambda, __pyx_k_lambda, sizeof(__pyx_k_lambda), 0, 0, 1, 0}, - {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, - {&__pyx_n_s_linecache, __pyx_k_linecache, sizeof(__pyx_k_linecache), 0, 0, 1, 1}, - {&__pyx_n_s_linesep, __pyx_k_linesep, sizeof(__pyx_k_linesep), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_main_2, __pyx_k_main_2, sizeof(__pyx_k_main_2), 0, 0, 1, 1}, - {&__pyx_n_s_make_console_message, __pyx_k_make_console_message, sizeof(__pyx_k_make_console_message), 0, 0, 1, 1}, - {&__pyx_n_s_make_io_message, __pyx_k_make_io_message, sizeof(__pyx_k_make_io_message), 0, 0, 1, 1}, - {&__pyx_n_s_match, __pyx_k_match, sizeof(__pyx_k_match), 0, 0, 1, 1}, - {&__pyx_n_s_method_object, __pyx_k_method_object, sizeof(__pyx_k_method_object), 0, 0, 1, 1}, - {&__pyx_kp_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 0}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_notify_on_first_raise_only, __pyx_k_notify_on_first_raise_only, sizeof(__pyx_k_notify_on_first_raise_only), 0, 0, 1, 1}, - {&__pyx_n_s_notify_skipped_step_in_because_o, __pyx_k_notify_skipped_step_in_because_o, sizeof(__pyx_k_notify_skipped_step_in_because_o), 0, 0, 1, 1}, - {&__pyx_n_s_notify_thread_not_alive, __pyx_k_notify_thread_not_alive, sizeof(__pyx_k_notify_thread_not_alive), 0, 0, 1, 1}, - {&__pyx_n_s_original_call, __pyx_k_original_call, sizeof(__pyx_k_original_call), 0, 0, 1, 1}, - {&__pyx_n_s_original_step_cmd, __pyx_k_original_step_cmd, sizeof(__pyx_k_original_step_cmd), 0, 0, 1, 1}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_os_path, __pyx_k_os_path, sizeof(__pyx_k_os_path), 0, 0, 1, 1}, - {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_plugin, __pyx_k_plugin, sizeof(__pyx_k_plugin), 0, 0, 1, 1}, - {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, - {&__pyx_n_s_py_db, __pyx_k_py_db, sizeof(__pyx_k_py_db), 0, 0, 1, 1}, - {&__pyx_kp_s_pyc, __pyx_k_pyc, sizeof(__pyx_k_pyc), 0, 0, 1, 0}, - {&__pyx_n_s_pydb_disposed, __pyx_k_pydb_disposed, sizeof(__pyx_k_pydb_disposed), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_bundle, __pyx_k_pydev_bundle, sizeof(__pyx_k_pydev_bundle), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_k_pydev_bundle__pydev_saved_modul, sizeof(__pyx_k_pydev_bundle__pydev_saved_modul), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_bundle_pydev_is_thread_al, __pyx_k_pydev_bundle_pydev_is_thread_al, sizeof(__pyx_k_pydev_bundle_pydev_is_thread_al), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_bundle_pydev_log, __pyx_k_pydev_bundle_pydev_log, sizeof(__pyx_k_pydev_bundle_pydev_log), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_do_not_trace, __pyx_k_pydev_do_not_trace, sizeof(__pyx_k_pydev_do_not_trace), 0, 0, 1, 1}, - {&__pyx_kp_s_pydev_execfile_py, __pyx_k_pydev_execfile_py, sizeof(__pyx_k_pydev_execfile_py), 0, 0, 1, 0}, - {&__pyx_n_s_pydev_log, __pyx_k_pydev_log, sizeof(__pyx_k_pydev_log), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_log_exception, __pyx_k_pydev_log_exception, sizeof(__pyx_k_pydev_log_exception), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_monkey, __pyx_k_pydev_monkey, sizeof(__pyx_k_pydev_monkey), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd, __pyx_k_pydevd, sizeof(__pyx_k_pydevd), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle, __pyx_k_pydevd_bundle, sizeof(__pyx_k_pydevd_bundle), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_k_pydevd_bundle_pydevd_bytecode_u, sizeof(__pyx_k_pydevd_bundle_pydevd_bytecode_u), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_comm_const, __pyx_k_pydevd_bundle_pydevd_comm_const, sizeof(__pyx_k_pydevd_bundle_pydevd_comm_const), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_k_pydevd_bundle_pydevd_constants, sizeof(__pyx_k_pydevd_bundle_pydevd_constants), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_k_pydevd_bundle_pydevd_cython, sizeof(__pyx_k_pydevd_bundle_pydevd_cython), 0, 0, 1, 1}, - {&__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_k_pydevd_bundle_pydevd_cython_pyx, sizeof(__pyx_k_pydevd_bundle_pydevd_cython_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_k_pydevd_bundle_pydevd_frame_util, sizeof(__pyx_k_pydevd_bundle_pydevd_frame_util), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_k_pydevd_bundle_pydevd_utils, sizeof(__pyx_k_pydevd_bundle_pydevd_utils), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_dont_trace, __pyx_k_pydevd_dont_trace, sizeof(__pyx_k_pydevd_dont_trace), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_file_utils, __pyx_k_pydevd_file_utils, sizeof(__pyx_k_pydevd_file_utils), 0, 0, 1, 1}, - {&__pyx_kp_s_pydevd_py, __pyx_k_pydevd_py, sizeof(__pyx_k_pydevd_py), 0, 0, 1, 0}, - {&__pyx_kp_s_pydevd_traceproperty_py, __pyx_k_pydevd_traceproperty_py, sizeof(__pyx_k_pydevd_traceproperty_py), 0, 0, 1, 0}, - {&__pyx_n_s_pydevd_tracing, __pyx_k_pydevd_tracing, sizeof(__pyx_k_pydevd_tracing), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_PyDBAdditionalThr, __pyx_k_pyx_unpickle_PyDBAdditionalThr, sizeof(__pyx_k_pyx_unpickle_PyDBAdditionalThr), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_PyDBFrame, __pyx_k_pyx_unpickle_PyDBFrame, sizeof(__pyx_k_pyx_unpickle_PyDBFrame), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_SafeCallWrapper, __pyx_k_pyx_unpickle_SafeCallWrapper, sizeof(__pyx_k_pyx_unpickle_SafeCallWrapper), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_ThreadTracer, __pyx_k_pyx_unpickle_ThreadTracer, sizeof(__pyx_k_pyx_unpickle_ThreadTracer), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_TopLevelThreadTra, __pyx_k_pyx_unpickle_TopLevelThreadTra, sizeof(__pyx_k_pyx_unpickle_TopLevelThreadTra), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, __pyx_k_pyx_unpickle_TopLevelThreadTra_2, sizeof(__pyx_k_pyx_unpickle_TopLevelThreadTra_2), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_k_pyx_unpickle__TryExceptContain, sizeof(__pyx_k_pyx_unpickle__TryExceptContain), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_qname, __pyx_k_qname, sizeof(__pyx_k_qname), 0, 0, 1, 1}, - {&__pyx_n_s_quitting, __pyx_k_quitting, sizeof(__pyx_k_quitting), 0, 0, 1, 1}, - {&__pyx_n_s_raise_lines_in_except, __pyx_k_raise_lines_in_except, sizeof(__pyx_k_raise_lines_in_except), 0, 0, 1, 1}, - {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_remove_exception_from_frame, __pyx_k_remove_exception_from_frame, sizeof(__pyx_k_remove_exception_from_frame), 0, 0, 1, 1}, - {&__pyx_n_s_remove_return_values_flag, __pyx_k_remove_return_values_flag, sizeof(__pyx_k_remove_return_values_flag), 0, 0, 1, 1}, - {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1}, - {&__pyx_n_s_return_line, __pyx_k_return_line, sizeof(__pyx_k_return_line), 0, 0, 1, 1}, - {&__pyx_n_s_returns, __pyx_k_returns, sizeof(__pyx_k_returns), 0, 0, 1, 1}, - {&__pyx_n_s_rfind, __pyx_k_rfind, sizeof(__pyx_k_rfind), 0, 0, 1, 1}, - {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, - {&__pyx_kp_s_s_raised_from_within_the_callba, __pyx_k_s_raised_from_within_the_callba, sizeof(__pyx_k_s_raised_from_within_the_callba), 0, 0, 1, 0}, - {&__pyx_kp_s_s_s, __pyx_k_s_s, sizeof(__pyx_k_s_s), 0, 0, 1, 0}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_send_caught_exception_stack, __pyx_k_send_caught_exception_stack, sizeof(__pyx_k_send_caught_exception_stack), 0, 0, 1, 1}, - {&__pyx_n_s_send_caught_exception_stack_proc, __pyx_k_send_caught_exception_stack_proc, sizeof(__pyx_k_send_caught_exception_stack_proc), 0, 0, 1, 1}, - {&__pyx_n_s_set_additional_thread_info, __pyx_k_set_additional_thread_info, sizeof(__pyx_k_set_additional_thread_info), 0, 0, 1, 1}, - {&__pyx_n_s_set_additional_thread_info_lock, __pyx_k_set_additional_thread_info_lock, sizeof(__pyx_k_set_additional_thread_info_lock), 0, 0, 1, 1}, - {&__pyx_n_s_set_suspend, __pyx_k_set_suspend, sizeof(__pyx_k_set_suspend), 0, 0, 1, 1}, - {&__pyx_n_s_set_trace_for_frame_and_parents, __pyx_k_set_trace_for_frame_and_parents, sizeof(__pyx_k_set_trace_for_frame_and_parents), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_should_trace_hook, __pyx_k_should_trace_hook, sizeof(__pyx_k_should_trace_hook), 0, 0, 1, 1}, - {&__pyx_n_s_show_return_values, __pyx_k_show_return_values, sizeof(__pyx_k_show_return_values), 0, 0, 1, 1}, - {&__pyx_n_s_skip_on_exceptions_thrown_in_sam, __pyx_k_skip_on_exceptions_thrown_in_sam, sizeof(__pyx_k_skip_on_exceptions_thrown_in_sam), 0, 0, 1, 1}, - {&__pyx_n_s_st_mtime, __pyx_k_st_mtime, sizeof(__pyx_k_st_mtime), 0, 0, 1, 1}, - {&__pyx_n_s_st_size, __pyx_k_st_size, sizeof(__pyx_k_st_size), 0, 0, 1, 1}, - {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, - {&__pyx_n_s_stat, __pyx_k_stat, sizeof(__pyx_k_stat), 0, 0, 1, 1}, - {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, - {&__pyx_n_s_stop_on_unhandled_exception, __pyx_k_stop_on_unhandled_exception, sizeof(__pyx_k_stop_on_unhandled_exception), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_suspend, __pyx_k_suspend, sizeof(__pyx_k_suspend), 0, 0, 1, 1}, - {&__pyx_n_s_suspend_other_threads, __pyx_k_suspend_other_threads, sizeof(__pyx_k_suspend_other_threads), 0, 0, 1, 1}, - {&__pyx_n_s_suspend_policy, __pyx_k_suspend_policy, sizeof(__pyx_k_suspend_policy), 0, 0, 1, 1}, - {&__pyx_n_s_suspended_at_unhandled, __pyx_k_suspended_at_unhandled, sizeof(__pyx_k_suspended_at_unhandled), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1}, - {&__pyx_n_s_tb_frame, __pyx_k_tb_frame, sizeof(__pyx_k_tb_frame), 0, 0, 1, 1}, - {&__pyx_n_s_tb_lineno, __pyx_k_tb_lineno, sizeof(__pyx_k_tb_lineno), 0, 0, 1, 1}, - {&__pyx_n_s_tb_next, __pyx_k_tb_next, sizeof(__pyx_k_tb_next), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1}, - {&__pyx_n_s_thread_trace_func, __pyx_k_thread_trace_func, sizeof(__pyx_k_thread_trace_func), 0, 0, 1, 1}, - {&__pyx_n_s_thread_tracer, __pyx_k_thread_tracer, sizeof(__pyx_k_thread_tracer), 0, 0, 1, 1}, - {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1}, - {&__pyx_n_s_threading_active, __pyx_k_threading_active, sizeof(__pyx_k_threading_active), 0, 0, 1, 1}, - {&__pyx_n_s_threading_current_thread, __pyx_k_threading_current_thread, sizeof(__pyx_k_threading_current_thread), 0, 0, 1, 1}, - {&__pyx_n_s_threading_get_ident, __pyx_k_threading_get_ident, sizeof(__pyx_k_threading_get_ident), 0, 0, 1, 1}, - {&__pyx_n_s_top_level_thread_tracer, __pyx_k_top_level_thread_tracer, sizeof(__pyx_k_top_level_thread_tracer), 0, 0, 1, 1}, - {&__pyx_n_s_top_level_thread_tracer_no_back, __pyx_k_top_level_thread_tracer_no_back, sizeof(__pyx_k_top_level_thread_tracer_no_back), 0, 0, 1, 1}, - {&__pyx_n_s_top_level_thread_tracer_unhandle, __pyx_k_top_level_thread_tracer_unhandle, sizeof(__pyx_k_top_level_thread_tracer_unhandle), 0, 0, 1, 1}, - {&__pyx_n_s_trace, __pyx_k_trace, sizeof(__pyx_k_trace), 0, 0, 1, 1}, - {&__pyx_n_s_trace_dispatch, __pyx_k_trace_dispatch, sizeof(__pyx_k_trace_dispatch), 0, 0, 1, 1}, - {&__pyx_n_s_trace_dispatch_and_unhandled_exc, __pyx_k_trace_dispatch_and_unhandled_exc, sizeof(__pyx_k_trace_dispatch_and_unhandled_exc), 0, 0, 1, 1}, - {&__pyx_n_s_trace_exception, __pyx_k_trace_exception, sizeof(__pyx_k_trace_exception), 0, 0, 1, 1}, - {&__pyx_n_s_trace_unhandled_exceptions, __pyx_k_trace_unhandled_exceptions, sizeof(__pyx_k_trace_unhandled_exceptions), 0, 0, 1, 1}, - {&__pyx_n_s_try_exc_info, __pyx_k_try_exc_info, sizeof(__pyx_k_try_exc_info), 0, 0, 1, 1}, - {&__pyx_n_s_try_except_infos, __pyx_k_try_except_infos, sizeof(__pyx_k_try_except_infos), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_kp_s_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 0, 1, 0}, - {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, - {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, - {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, + {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, + {&__pyx_n_s_ALL, __pyx_k_ALL, sizeof(__pyx_k_ALL), 0, 0, 1, 1}, + {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_k_CMD_SET_FUNCTION_BREAK, sizeof(__pyx_k_CMD_SET_FUNCTION_BREAK), 0, 0, 1, 1}, + {&__pyx_n_s_DEBUG_START, __pyx_k_DEBUG_START, sizeof(__pyx_k_DEBUG_START), 0, 0, 1, 1}, + {&__pyx_n_s_DEBUG_START_PY3K, __pyx_k_DEBUG_START_PY3K, sizeof(__pyx_k_DEBUG_START_PY3K), 0, 0, 1, 1}, + {&__pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_k_EXCEPTION_TYPE_HANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_HANDLED), 0, 0, 1, 1}, + {&__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_k_EXCEPTION_TYPE_USER_UNHANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_USER_UNHANDLED), 0, 0, 1, 1}, + {&__pyx_kp_s_Error_in_linecache_checkcache_r, __pyx_k_Error_in_linecache_checkcache_r, sizeof(__pyx_k_Error_in_linecache_checkcache_r), 0, 0, 1, 0}, + {&__pyx_kp_s_Error_in_linecache_getline_r_s_f, __pyx_k_Error_in_linecache_getline_r_s_f, sizeof(__pyx_k_Error_in_linecache_getline_r_s_f), 0, 0, 1, 0}, + {&__pyx_n_s_ForkSafeLock, __pyx_k_ForkSafeLock, sizeof(__pyx_k_ForkSafeLock), 0, 0, 1, 1}, + {&__pyx_n_s_GeneratorExit, __pyx_k_GeneratorExit, sizeof(__pyx_k_GeneratorExit), 0, 0, 1, 1}, + {&__pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_k_IGNORE_EXCEPTION_TAG, sizeof(__pyx_k_IGNORE_EXCEPTION_TAG), 0, 0, 1, 1}, + {&__pyx_kp_s_IgnoreException, __pyx_k_IgnoreException, sizeof(__pyx_k_IgnoreException), 0, 0, 1, 0}, + {&__pyx_kp_s_Ignore_exception_s_in_library_s, __pyx_k_Ignore_exception_s_in_library_s, sizeof(__pyx_k_Ignore_exception_s_in_library_s), 0, 0, 1, 0}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_k_Incompatible_checksums_0x_x_vs_0_4, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_4), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_5, __pyx_k_Incompatible_checksums_0x_x_vs_0_5, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_5), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_6, __pyx_k_Incompatible_checksums_0x_x_vs_0_6, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_6), 0, 0, 1, 0}, + {&__pyx_n_s_KeyboardInterrupt, __pyx_k_KeyboardInterrupt, sizeof(__pyx_k_KeyboardInterrupt), 0, 0, 1, 1}, + {&__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_k_NORM_PATHS_AND_BASE_CONTAINER, sizeof(__pyx_k_NORM_PATHS_AND_BASE_CONTAINER), 0, 0, 1, 1}, + {&__pyx_n_s_NO_FTRACE, __pyx_k_NO_FTRACE, sizeof(__pyx_k_NO_FTRACE), 0, 0, 1, 1}, + {&__pyx_n_s_NameError, __pyx_k_NameError, sizeof(__pyx_k_NameError), 0, 0, 1, 1}, + {&__pyx_n_s_None, __pyx_k_None, sizeof(__pyx_k_None), 0, 0, 1, 1}, + {&__pyx_kp_s_Not_used_in_sys_monitoring_mode, __pyx_k_Not_used_in_sys_monitoring_mode, sizeof(__pyx_k_Not_used_in_sys_monitoring_mode), 0, 0, 1, 0}, + {&__pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_k_PYDEVD_IPYTHON_CONTEXT, sizeof(__pyx_k_PYDEVD_IPYTHON_CONTEXT), 0, 0, 1, 1}, + {&__pyx_n_s_PYDEVD_USE_SYS_MONITORING, __pyx_k_PYDEVD_USE_SYS_MONITORING, sizeof(__pyx_k_PYDEVD_USE_SYS_MONITORING), 0, 0, 1, 1}, + {&__pyx_n_s_PYDEV_FILE, __pyx_k_PYDEV_FILE, sizeof(__pyx_k_PYDEV_FILE), 0, 0, 1, 1}, + {&__pyx_n_s_PYTHON_SUSPEND, __pyx_k_PYTHON_SUSPEND, sizeof(__pyx_k_PYTHON_SUSPEND), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo, __pyx_k_PyDBAdditionalThreadInfo, sizeof(__pyx_k_PyDBAdditionalThreadInfo), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo___reduc, __pyx_k_PyDBAdditionalThreadInfo___reduc, sizeof(__pyx_k_PyDBAdditionalThreadInfo___reduc), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo___setst, __pyx_k_PyDBAdditionalThreadInfo___setst, sizeof(__pyx_k_PyDBAdditionalThreadInfo___setst), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo__get_re, __pyx_k_PyDBAdditionalThreadInfo__get_re, sizeof(__pyx_k_PyDBAdditionalThreadInfo__get_re), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo__is_ste, __pyx_k_PyDBAdditionalThreadInfo__is_ste, sizeof(__pyx_k_PyDBAdditionalThreadInfo__is_ste), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo_get_top, __pyx_k_PyDBAdditionalThreadInfo_get_top, sizeof(__pyx_k_PyDBAdditionalThreadInfo_get_top), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBAdditionalThreadInfo_update, __pyx_k_PyDBAdditionalThreadInfo_update, sizeof(__pyx_k_PyDBAdditionalThreadInfo_update), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame, __pyx_k_PyDBFrame, sizeof(__pyx_k_PyDBFrame), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame___reduce_cython, __pyx_k_PyDBFrame___reduce_cython, sizeof(__pyx_k_PyDBFrame___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame___setstate_cython, __pyx_k_PyDBFrame___setstate_cython, sizeof(__pyx_k_PyDBFrame___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame_do_wait_suspend, __pyx_k_PyDBFrame_do_wait_suspend, sizeof(__pyx_k_PyDBFrame_do_wait_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame_handle_user_exception, __pyx_k_PyDBFrame_handle_user_exception, sizeof(__pyx_k_PyDBFrame_handle_user_exception), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame_set_suspend, __pyx_k_PyDBFrame_set_suspend, sizeof(__pyx_k_PyDBFrame_set_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame_trace_dispatch, __pyx_k_PyDBFrame_trace_dispatch, sizeof(__pyx_k_PyDBFrame_trace_dispatch), 0, 0, 1, 1}, + {&__pyx_n_s_PyDBFrame_trace_exception, __pyx_k_PyDBFrame_trace_exception, sizeof(__pyx_k_PyDBFrame_trace_exception), 0, 0, 1, 1}, + {&__pyx_n_s_RETURN_VALUES_DICT, __pyx_k_RETURN_VALUES_DICT, sizeof(__pyx_k_RETURN_VALUES_DICT), 0, 0, 1, 1}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s_STATE_RUN, __pyx_k_STATE_RUN, sizeof(__pyx_k_STATE_RUN), 0, 0, 1, 1}, + {&__pyx_n_s_STATE_SUSPEND, __pyx_k_STATE_SUSPEND, sizeof(__pyx_k_STATE_SUSPEND), 0, 0, 1, 1}, + {&__pyx_n_s_SUPPORT_GEVENT, __pyx_k_SUPPORT_GEVENT, sizeof(__pyx_k_SUPPORT_GEVENT), 0, 0, 1, 1}, + {&__pyx_n_s_SafeCallWrapper, __pyx_k_SafeCallWrapper, sizeof(__pyx_k_SafeCallWrapper), 0, 0, 1, 1}, + {&__pyx_n_s_SafeCallWrapper___reduce_cython, __pyx_k_SafeCallWrapper___reduce_cython, sizeof(__pyx_k_SafeCallWrapper___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_SafeCallWrapper___setstate_cytho, __pyx_k_SafeCallWrapper___setstate_cytho, sizeof(__pyx_k_SafeCallWrapper___setstate_cytho), 0, 0, 1, 1}, + {&__pyx_n_s_SafeCallWrapper_get_method_objec, __pyx_k_SafeCallWrapper_get_method_objec, sizeof(__pyx_k_SafeCallWrapper_get_method_objec), 0, 0, 1, 1}, + {&__pyx_kp_s_State_s_Stop_s_Cmd_s_Kill_s, __pyx_k_State_s_Stop_s_Cmd_s_Kill_s, sizeof(__pyx_k_State_s_Stop_s_Cmd_s_Kill_s), 0, 0, 1, 0}, + {&__pyx_n_s_StopAsyncIteration, __pyx_k_StopAsyncIteration, sizeof(__pyx_k_StopAsyncIteration), 0, 0, 1, 1}, + {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1}, + {&__pyx_kp_s_Stop_inside_ipython_call, __pyx_k_Stop_inside_ipython_call, sizeof(__pyx_k_Stop_inside_ipython_call), 0, 0, 1, 0}, + {&__pyx_n_s_SystemExit, __pyx_k_SystemExit, sizeof(__pyx_k_SystemExit), 0, 0, 1, 1}, + {&__pyx_n_s_TRACE_PROPERTY, __pyx_k_TRACE_PROPERTY, sizeof(__pyx_k_TRACE_PROPERTY), 0, 0, 1, 1}, + {&__pyx_n_s_Thread, __pyx_k_Thread, sizeof(__pyx_k_Thread), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadTracer, __pyx_k_ThreadTracer, sizeof(__pyx_k_ThreadTracer), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadTracer___reduce_cython, __pyx_k_ThreadTracer___reduce_cython, sizeof(__pyx_k_ThreadTracer___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadTracer___setstate_cython, __pyx_k_ThreadTracer___setstate_cython, sizeof(__pyx_k_ThreadTracer___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerNoBackFrame, __pyx_k_TopLevelThreadTracerNoBackFrame, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerNoBackFrame_2, __pyx_k_TopLevelThreadTracerNoBackFrame_2, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame_2), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerNoBackFrame_3, __pyx_k_TopLevelThreadTracerNoBackFrame_3, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame_3), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerNoBackFrame_4, __pyx_k_TopLevelThreadTracerNoBackFrame_4, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame_4), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerNoBackFrame_5, __pyx_k_TopLevelThreadTracerNoBackFrame_5, sizeof(__pyx_k_TopLevelThreadTracerNoBackFrame_5), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle, __pyx_k_TopLevelThreadTracerOnlyUnhandle, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2, __pyx_k_TopLevelThreadTracerOnlyUnhandle_2, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle_2), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3, __pyx_k_TopLevelThreadTracerOnlyUnhandle_3, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle_3), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4, __pyx_k_TopLevelThreadTracerOnlyUnhandle_4, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle_4), 0, 0, 1, 1}, + {&__pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5, __pyx_k_TopLevelThreadTracerOnlyUnhandle_5, sizeof(__pyx_k_TopLevelThreadTracerOnlyUnhandle_5), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj, __pyx_k_TryExceptContainerObj, sizeof(__pyx_k_TryExceptContainerObj), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj___reduce, __pyx_k_TryExceptContainerObj___reduce, sizeof(__pyx_k_TryExceptContainerObj___reduce), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj___setstat, __pyx_k_TryExceptContainerObj___setstat, sizeof(__pyx_k_TryExceptContainerObj___setstat), 0, 0, 1, 1}, + {&__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, __pyx_k_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, sizeof(__pyx_k_USE_CUSTOM_SYS_CURRENT_FRAMES_MA), 0, 0, 1, 1}, + {&__pyx_kp_s_Unable_to_get_topmost_frame_for, __pyx_k_Unable_to_get_topmost_frame_for, sizeof(__pyx_k_Unable_to_get_topmost_frame_for), 0, 0, 1, 0}, + {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0}, + {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0}, + {&__pyx_n_s__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 0, 1, 1}, + {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0}, + {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0}, + {&__pyx_kp_s__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 0, 1, 0}, + {&__pyx_n_s_abs_real_path_and_base, __pyx_k_abs_real_path_and_base, sizeof(__pyx_k_abs_real_path_and_base), 0, 0, 1, 1}, + {&__pyx_n_s_absolute_filename, __pyx_k_absolute_filename, sizeof(__pyx_k_absolute_filename), 0, 0, 1, 1}, + {&__pyx_n_s_active, __pyx_k_active, sizeof(__pyx_k_active), 0, 0, 1, 1}, + {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1}, + {&__pyx_n_s_add_additional_info, __pyx_k_add_additional_info, sizeof(__pyx_k_add_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_add_command, __pyx_k_add_command, sizeof(__pyx_k_add_command), 0, 0, 1, 1}, + {&__pyx_n_s_add_exception_to_frame, __pyx_k_add_exception_to_frame, sizeof(__pyx_k_add_exception_to_frame), 0, 0, 1, 1}, + {&__pyx_n_s_additional_info, __pyx_k_additional_info, sizeof(__pyx_k_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_any_thread_stepping, __pyx_k_any_thread_stepping, sizeof(__pyx_k_any_thread_stepping), 0, 0, 1, 1}, + {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, + {&__pyx_n_s_apply_files_filter, __pyx_k_apply_files_filter, sizeof(__pyx_k_apply_files_filter), 0, 0, 1, 1}, + {&__pyx_n_s_apply_to_settrace, __pyx_k_apply_to_settrace, sizeof(__pyx_k_apply_to_settrace), 0, 0, 1, 1}, + {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_args_2, __pyx_k_args_2, sizeof(__pyx_k_args_2), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_basename, __pyx_k_basename, sizeof(__pyx_k_basename), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap, __pyx_k_bootstrap, sizeof(__pyx_k_bootstrap), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_2, __pyx_k_bootstrap_2, sizeof(__pyx_k_bootstrap_2), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner, __pyx_k_bootstrap_inner, sizeof(__pyx_k_bootstrap_inner), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner_2, __pyx_k_bootstrap_inner_2, sizeof(__pyx_k_bootstrap_inner_2), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_caught_exceptions, __pyx_k_break_on_caught_exceptions, sizeof(__pyx_k_break_on_caught_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_user_uncaught_exception, __pyx_k_break_on_user_uncaught_exception, sizeof(__pyx_k_break_on_user_uncaught_exception), 0, 0, 1, 1}, + {&__pyx_n_s_breakpoints, __pyx_k_breakpoints, sizeof(__pyx_k_breakpoints), 0, 0, 1, 1}, + {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, + {&__pyx_n_s_call_2, __pyx_k_call_2, sizeof(__pyx_k_call_2), 0, 0, 1, 1}, + {&__pyx_n_s_can_skip, __pyx_k_can_skip, sizeof(__pyx_k_can_skip), 0, 0, 1, 1}, + {&__pyx_n_s_canonical_normalized_filename, __pyx_k_canonical_normalized_filename, sizeof(__pyx_k_canonical_normalized_filename), 0, 0, 1, 1}, + {&__pyx_kp_s_cell, __pyx_k_cell, sizeof(__pyx_k_cell), 0, 0, 1, 0}, + {&__pyx_n_s_check_excs, __pyx_k_check_excs, sizeof(__pyx_k_check_excs), 0, 0, 1, 1}, + {&__pyx_n_s_check_trace_obj, __pyx_k_check_trace_obj, sizeof(__pyx_k_check_trace_obj), 0, 0, 1, 1}, + {&__pyx_n_s_checkcache, __pyx_k_checkcache, sizeof(__pyx_k_checkcache), 0, 0, 1, 1}, + {&__pyx_n_s_children_variants, __pyx_k_children_variants, sizeof(__pyx_k_children_variants), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_factory, __pyx_k_cmd_factory, sizeof(__pyx_k_cmd_factory), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_step_into, __pyx_k_cmd_step_into, sizeof(__pyx_k_cmd_step_into), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_step_over, __pyx_k_cmd_step_over, sizeof(__pyx_k_cmd_step_over), 0, 0, 1, 1}, + {&__pyx_n_s_co_filename, __pyx_k_co_filename, sizeof(__pyx_k_co_filename), 0, 0, 1, 1}, + {&__pyx_n_s_co_firstlineno, __pyx_k_co_firstlineno, sizeof(__pyx_k_co_firstlineno), 0, 0, 1, 1}, + {&__pyx_n_s_co_flags, __pyx_k_co_flags, sizeof(__pyx_k_co_flags), 0, 0, 1, 1}, + {&__pyx_n_s_co_name, __pyx_k_co_name, sizeof(__pyx_k_co_name), 0, 0, 1, 1}, + {&__pyx_n_s_collect_return_info, __pyx_k_collect_return_info, sizeof(__pyx_k_collect_return_info), 0, 0, 1, 1}, + {&__pyx_n_s_collect_try_except_info, __pyx_k_collect_try_except_info, sizeof(__pyx_k_collect_try_except_info), 0, 0, 1, 1}, + {&__pyx_n_s_compile, __pyx_k_compile, sizeof(__pyx_k_compile), 0, 0, 1, 1}, + {&__pyx_n_s_condition, __pyx_k_condition, sizeof(__pyx_k_condition), 0, 0, 1, 1}, + {&__pyx_n_s_constant_to_str, __pyx_k_constant_to_str, sizeof(__pyx_k_constant_to_str), 0, 0, 1, 1}, + {&__pyx_n_s_constructed_tid_to_last_frame, __pyx_k_constructed_tid_to_last_frame, sizeof(__pyx_k_constructed_tid_to_last_frame), 0, 0, 1, 1}, + {&__pyx_n_s_container_obj, __pyx_k_container_obj, sizeof(__pyx_k_container_obj), 0, 0, 1, 1}, + {&__pyx_n_s_critical, __pyx_k_critical, sizeof(__pyx_k_critical), 0, 0, 1, 1}, + {&__pyx_n_s_curr_stat, __pyx_k_curr_stat, sizeof(__pyx_k_curr_stat), 0, 0, 1, 1}, + {&__pyx_n_s_current_frames, __pyx_k_current_frames, sizeof(__pyx_k_current_frames), 0, 0, 1, 1}, + {&__pyx_n_s_custom_key, __pyx_k_custom_key, sizeof(__pyx_k_custom_key), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, + {&__pyx_n_s_dis, __pyx_k_dis, sizeof(__pyx_k_dis), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_disable_tracing, __pyx_k_disable_tracing, sizeof(__pyx_k_disable_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_do_wait_suspend, __pyx_k_do_wait_suspend, sizeof(__pyx_k_do_wait_suspend), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_enable_tracing, __pyx_k_enable_tracing, sizeof(__pyx_k_enable_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1}, + {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, + {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, + {&__pyx_n_s_exc_break, __pyx_k_exc_break, sizeof(__pyx_k_exc_break), 0, 0, 1, 1}, + {&__pyx_n_s_exc_break_caught, __pyx_k_exc_break_caught, sizeof(__pyx_k_exc_break_caught), 0, 0, 1, 1}, + {&__pyx_n_s_exc_break_user, __pyx_k_exc_break_user, sizeof(__pyx_k_exc_break_user), 0, 0, 1, 1}, + {&__pyx_n_s_exc_info, __pyx_k_exc_info, sizeof(__pyx_k_exc_info), 0, 0, 1, 1}, + {&__pyx_n_s_exc_lineno, __pyx_k_exc_lineno, sizeof(__pyx_k_exc_lineno), 0, 0, 1, 1}, + {&__pyx_n_s_except_line, __pyx_k_except_line, sizeof(__pyx_k_except_line), 0, 0, 1, 1}, + {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, + {&__pyx_n_s_exception_break, __pyx_k_exception_break, sizeof(__pyx_k_exception_break), 0, 0, 1, 1}, + {&__pyx_n_s_exception_breakpoint, __pyx_k_exception_breakpoint, sizeof(__pyx_k_exception_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_exception_type, __pyx_k_exception_type, sizeof(__pyx_k_exception_type), 0, 0, 1, 1}, + {&__pyx_n_s_exclude_exception_by_filter, __pyx_k_exclude_exception_by_filter, sizeof(__pyx_k_exclude_exception_by_filter), 0, 0, 1, 1}, + {&__pyx_n_s_exec, __pyx_k_exec, sizeof(__pyx_k_exec), 0, 0, 1, 1}, + {&__pyx_n_s_execfile, __pyx_k_execfile, sizeof(__pyx_k_execfile), 0, 0, 1, 1}, + {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, + {&__pyx_n_s_expression, __pyx_k_expression, sizeof(__pyx_k_expression), 0, 0, 1, 1}, + {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, + {&__pyx_n_s_f_back, __pyx_k_f_back, sizeof(__pyx_k_f_back), 0, 0, 1, 1}, + {&__pyx_n_s_f_code, __pyx_k_f_code, sizeof(__pyx_k_f_code), 0, 0, 1, 1}, + {&__pyx_n_s_f_globals, __pyx_k_f_globals, sizeof(__pyx_k_f_globals), 0, 0, 1, 1}, + {&__pyx_n_s_f_lasti, __pyx_k_f_lasti, sizeof(__pyx_k_f_lasti), 0, 0, 1, 1}, + {&__pyx_n_s_f_lineno, __pyx_k_f_lineno, sizeof(__pyx_k_f_lineno), 0, 0, 1, 1}, + {&__pyx_n_s_f_locals, __pyx_k_f_locals, sizeof(__pyx_k_f_locals), 0, 0, 1, 1}, + {&__pyx_n_s_f_trace, __pyx_k_f_trace, sizeof(__pyx_k_f_trace), 0, 0, 1, 1}, + {&__pyx_n_s_f_unhandled, __pyx_k_f_unhandled, sizeof(__pyx_k_f_unhandled), 0, 0, 1, 1}, + {&__pyx_n_s_filename, __pyx_k_filename, sizeof(__pyx_k_filename), 0, 0, 1, 1}, + {&__pyx_n_s_filename_to_lines_where_exceptio, __pyx_k_filename_to_lines_where_exceptio, sizeof(__pyx_k_filename_to_lines_where_exceptio), 0, 0, 1, 1}, + {&__pyx_n_s_filename_to_stat_info, __pyx_k_filename_to_stat_info, sizeof(__pyx_k_filename_to_stat_info), 0, 0, 1, 1}, + {&__pyx_n_s_findlinestarts, __pyx_k_findlinestarts, sizeof(__pyx_k_findlinestarts), 0, 0, 1, 1}, + {&__pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_k_fix_top_level_trace_and_get_trac, sizeof(__pyx_k_fix_top_level_trace_and_get_trac), 0, 0, 1, 1}, + {&__pyx_n_s_force_only_unhandled_tracer, __pyx_k_force_only_unhandled_tracer, sizeof(__pyx_k_force_only_unhandled_tracer), 0, 0, 1, 1}, + {&__pyx_n_s_frame, __pyx_k_frame, sizeof(__pyx_k_frame), 0, 0, 1, 1}, + {&__pyx_n_s_frame_cache_key, __pyx_k_frame_cache_key, sizeof(__pyx_k_frame_cache_key), 0, 0, 1, 1}, + {&__pyx_n_s_frame_id_to_frame, __pyx_k_frame_id_to_frame, sizeof(__pyx_k_frame_id_to_frame), 0, 0, 1, 1}, + {&__pyx_n_s_frame_skips_cache, __pyx_k_frame_skips_cache, sizeof(__pyx_k_frame_skips_cache), 0, 0, 1, 1}, + {&__pyx_n_s_frame_trace_dispatch, __pyx_k_frame_trace_dispatch, sizeof(__pyx_k_frame_trace_dispatch), 0, 0, 1, 1}, + {&__pyx_n_s_from_user_input, __pyx_k_from_user_input, sizeof(__pyx_k_from_user_input), 0, 0, 1, 1}, + {&__pyx_n_s_func_name, __pyx_k_func_name, sizeof(__pyx_k_func_name), 0, 0, 1, 1}, + {&__pyx_n_s_function_breakpoint_name_to_brea, __pyx_k_function_breakpoint_name_to_brea, sizeof(__pyx_k_function_breakpoint_name_to_brea), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_abs_path_real_path_and_base, __pyx_k_get_abs_path_real_path_and_base, sizeof(__pyx_k_get_abs_path_real_path_and_base), 0, 0, 1, 1}, + {&__pyx_n_s_get_breakpoint, __pyx_k_get_breakpoint, sizeof(__pyx_k_get_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_get_clsname_for_code, __pyx_k_get_clsname_for_code, sizeof(__pyx_k_get_clsname_for_code), 0, 0, 1, 1}, + {&__pyx_n_s_get_current_thread_id, __pyx_k_get_current_thread_id, sizeof(__pyx_k_get_current_thread_id), 0, 0, 1, 1}, + {&__pyx_n_s_get_exception_breakpoint, __pyx_k_get_exception_breakpoint, sizeof(__pyx_k_get_exception_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_get_file_type, __pyx_k_get_file_type, sizeof(__pyx_k_get_file_type), 0, 0, 1, 1}, + {&__pyx_n_s_get_global_debugger, __pyx_k_get_global_debugger, sizeof(__pyx_k_get_global_debugger), 0, 0, 1, 1}, + {&__pyx_n_s_get_internal_queue_and_event, __pyx_k_get_internal_queue_and_event, sizeof(__pyx_k_get_internal_queue_and_event), 0, 0, 1, 1}, + {&__pyx_n_s_get_method_object, __pyx_k_get_method_object, sizeof(__pyx_k_get_method_object), 0, 0, 1, 1}, + {&__pyx_n_s_get_related_thread, __pyx_k_get_related_thread, sizeof(__pyx_k_get_related_thread), 0, 0, 1, 1}, + {&__pyx_n_s_get_smart_step_into_variant_from, __pyx_k_get_smart_step_into_variant_from, sizeof(__pyx_k_get_smart_step_into_variant_from), 0, 0, 1, 1}, + {&__pyx_n_s_get_thread_id, __pyx_k_get_thread_id, sizeof(__pyx_k_get_thread_id), 0, 0, 1, 1}, + {&__pyx_n_s_get_topmost_frame, __pyx_k_get_topmost_frame, sizeof(__pyx_k_get_topmost_frame), 0, 0, 1, 1}, + {&__pyx_n_s_get_trace_dispatch_func, __pyx_k_get_trace_dispatch_func, sizeof(__pyx_k_get_trace_dispatch_func), 0, 0, 1, 1}, + {&__pyx_n_s_getline, __pyx_k_getline, sizeof(__pyx_k_getline), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_global_cache_frame_skips, __pyx_k_global_cache_frame_skips, sizeof(__pyx_k_global_cache_frame_skips), 0, 0, 1, 1}, + {&__pyx_n_s_global_cache_skips, __pyx_k_global_cache_skips, sizeof(__pyx_k_global_cache_skips), 0, 0, 1, 1}, + {&__pyx_n_s_global_notify_skipped_step_in_l, __pyx_k_global_notify_skipped_step_in_l, sizeof(__pyx_k_global_notify_skipped_step_in_l), 0, 0, 1, 1}, + {&__pyx_n_s_handle_breakpoint_condition, __pyx_k_handle_breakpoint_condition, sizeof(__pyx_k_handle_breakpoint_condition), 0, 0, 1, 1}, + {&__pyx_n_s_handle_breakpoint_expression, __pyx_k_handle_breakpoint_expression, sizeof(__pyx_k_handle_breakpoint_expression), 0, 0, 1, 1}, + {&__pyx_n_s_handle_exception, __pyx_k_handle_exception, sizeof(__pyx_k_handle_exception), 0, 0, 1, 1}, + {&__pyx_n_s_handle_user_exception, __pyx_k_handle_user_exception, sizeof(__pyx_k_handle_user_exception), 0, 0, 1, 1}, + {&__pyx_n_s_has_condition, __pyx_k_has_condition, sizeof(__pyx_k_has_condition), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_exception_breaks, __pyx_k_has_plugin_exception_breaks, sizeof(__pyx_k_has_plugin_exception_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_line_breaks, __pyx_k_has_plugin_line_breaks, sizeof(__pyx_k_has_plugin_line_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_ident, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 0, 1, 1}, + {&__pyx_n_s_ident_2, __pyx_k_ident_2, sizeof(__pyx_k_ident_2), 0, 0, 1, 1}, + {&__pyx_n_s_ignore_exception_trace, __pyx_k_ignore_exception_trace, sizeof(__pyx_k_ignore_exception_trace), 0, 0, 1, 1}, + {&__pyx_n_s_ignore_exceptions_thrown_in_line, __pyx_k_ignore_exceptions_thrown_in_line, sizeof(__pyx_k_ignore_exceptions_thrown_in_line), 0, 0, 1, 1}, + {&__pyx_n_s_ignore_system_exit_code, __pyx_k_ignore_system_exit_code, sizeof(__pyx_k_ignore_system_exit_code), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_in_project_scope, __pyx_k_in_project_scope, sizeof(__pyx_k_in_project_scope), 0, 0, 1, 1}, + {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, + {&__pyx_n_s_initial_trace_obj, __pyx_k_initial_trace_obj, sizeof(__pyx_k_initial_trace_obj), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_kp_s_invalid, __pyx_k_invalid, sizeof(__pyx_k_invalid), 0, 0, 1, 0}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_files_filter_enabled, __pyx_k_is_files_filter_enabled, sizeof(__pyx_k_is_files_filter_enabled), 0, 0, 1, 1}, + {&__pyx_n_s_is_line_in_except_block, __pyx_k_is_line_in_except_block, sizeof(__pyx_k_is_line_in_except_block), 0, 0, 1, 1}, + {&__pyx_n_s_is_line_in_try_block, __pyx_k_is_line_in_try_block, sizeof(__pyx_k_is_line_in_try_block), 0, 0, 1, 1}, + {&__pyx_n_s_is_logpoint, __pyx_k_is_logpoint, sizeof(__pyx_k_is_logpoint), 0, 0, 1, 1}, + {&__pyx_n_s_is_stepping, __pyx_k_is_stepping, sizeof(__pyx_k_is_stepping), 0, 0, 1, 1}, + {&__pyx_n_s_is_stopped, __pyx_k_is_stopped, sizeof(__pyx_k_is_stopped), 0, 0, 1, 1}, + {&__pyx_n_s_is_thread_alive, __pyx_k_is_thread_alive, sizeof(__pyx_k_is_thread_alive), 0, 0, 1, 1}, + {&__pyx_n_s_is_unhandled_exception, __pyx_k_is_unhandled_exception, sizeof(__pyx_k_is_unhandled_exception), 0, 0, 1, 1}, + {&__pyx_n_s_is_user_uncaught, __pyx_k_is_user_uncaught, sizeof(__pyx_k_is_user_uncaught), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_just_raised, __pyx_k_just_raised, sizeof(__pyx_k_just_raised), 0, 0, 1, 1}, + {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, + {&__pyx_kp_s_lambda, __pyx_k_lambda, sizeof(__pyx_k_lambda), 0, 0, 1, 0}, + {&__pyx_n_s_last_raise_line, __pyx_k_last_raise_line, sizeof(__pyx_k_last_raise_line), 0, 0, 1, 1}, + {&__pyx_n_s_last_stat, __pyx_k_last_stat, sizeof(__pyx_k_last_stat), 0, 0, 1, 1}, + {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, + {&__pyx_n_s_linecache, __pyx_k_linecache, sizeof(__pyx_k_linecache), 0, 0, 1, 1}, + {&__pyx_n_s_lines, __pyx_k_lines, sizeof(__pyx_k_lines), 0, 0, 1, 1}, + {&__pyx_n_s_lines_ignored, __pyx_k_lines_ignored, sizeof(__pyx_k_lines_ignored), 0, 0, 1, 1}, + {&__pyx_n_s_linesep, __pyx_k_linesep, sizeof(__pyx_k_linesep), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_main_2, __pyx_k_main_2, sizeof(__pyx_k_main_2), 0, 0, 1, 1}, + {&__pyx_n_s_make_console_message, __pyx_k_make_console_message, sizeof(__pyx_k_make_console_message), 0, 0, 1, 1}, + {&__pyx_n_s_make_io_message, __pyx_k_make_io_message, sizeof(__pyx_k_make_io_message), 0, 0, 1, 1}, + {&__pyx_n_s_match, __pyx_k_match, sizeof(__pyx_k_match), 0, 0, 1, 1}, + {&__pyx_n_s_maybe_user_uncaught_exc_info, __pyx_k_maybe_user_uncaught_exc_info, sizeof(__pyx_k_maybe_user_uncaught_exc_info), 0, 0, 1, 1}, + {&__pyx_n_s_merged, __pyx_k_merged, sizeof(__pyx_k_merged), 0, 0, 1, 1}, + {&__pyx_n_s_method_object, __pyx_k_method_object, sizeof(__pyx_k_method_object), 0, 0, 1, 1}, + {&__pyx_kp_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 0}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_next_additional_info, __pyx_k_next_additional_info, sizeof(__pyx_k_next_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_notify_on_first_raise_only, __pyx_k_notify_on_first_raise_only, sizeof(__pyx_k_notify_on_first_raise_only), 0, 0, 1, 1}, + {&__pyx_n_s_notify_skipped_step_in_because_o, __pyx_k_notify_skipped_step_in_because_o, sizeof(__pyx_k_notify_skipped_step_in_because_o), 0, 0, 1, 1}, + {&__pyx_n_s_notify_thread_not_alive, __pyx_k_notify_thread_not_alive, sizeof(__pyx_k_notify_thread_not_alive), 0, 0, 1, 1}, + {&__pyx_n_s_original_call, __pyx_k_original_call, sizeof(__pyx_k_original_call), 0, 0, 1, 1}, + {&__pyx_n_s_original_step_cmd, __pyx_k_original_step_cmd, sizeof(__pyx_k_original_step_cmd), 0, 0, 1, 1}, + {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, + {&__pyx_n_s_os_path, __pyx_k_os_path, sizeof(__pyx_k_os_path), 0, 0, 1, 1}, + {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_plugin, __pyx_k_plugin, sizeof(__pyx_k_plugin), 0, 0, 1, 1}, + {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, + {&__pyx_n_s_prev_user_uncaught_exc_info, __pyx_k_prev_user_uncaught_exc_info, sizeof(__pyx_k_prev_user_uncaught_exc_info), 0, 0, 1, 1}, + {&__pyx_n_s_py_db, __pyx_k_py_db, sizeof(__pyx_k_py_db), 0, 0, 1, 1}, + {&__pyx_kp_s_pyc, __pyx_k_pyc, sizeof(__pyx_k_pyc), 0, 0, 1, 0}, + {&__pyx_n_s_pydb_disposed, __pyx_k_pydb_disposed, sizeof(__pyx_k_pydb_disposed), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle, __pyx_k_pydev_bundle, sizeof(__pyx_k_pydev_bundle), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_k_pydev_bundle__pydev_saved_modul, sizeof(__pyx_k_pydev_bundle__pydev_saved_modul), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle_pydev_is_thread_al, __pyx_k_pydev_bundle_pydev_is_thread_al, sizeof(__pyx_k_pydev_bundle_pydev_is_thread_al), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle_pydev_log, __pyx_k_pydev_bundle_pydev_log, sizeof(__pyx_k_pydev_bundle_pydev_log), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_do_not_trace, __pyx_k_pydev_do_not_trace, sizeof(__pyx_k_pydev_do_not_trace), 0, 0, 1, 1}, + {&__pyx_kp_s_pydev_execfile_py, __pyx_k_pydev_execfile_py, sizeof(__pyx_k_pydev_execfile_py), 0, 0, 1, 0}, + {&__pyx_n_s_pydev_log, __pyx_k_pydev_log, sizeof(__pyx_k_pydev_log), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_log_exception, __pyx_k_pydev_log_exception, sizeof(__pyx_k_pydev_log_exception), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_monkey, __pyx_k_pydev_monkey, sizeof(__pyx_k_pydev_monkey), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd, __pyx_k_pydevd, sizeof(__pyx_k_pydevd), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle, __pyx_k_pydevd_bundle, sizeof(__pyx_k_pydevd_bundle), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_k_pydevd_bundle_pydevd_bytecode_u, sizeof(__pyx_k_pydevd_bundle_pydevd_bytecode_u), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_comm_const, __pyx_k_pydevd_bundle_pydevd_comm_const, sizeof(__pyx_k_pydevd_bundle_pydevd_comm_const), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_k_pydevd_bundle_pydevd_constants, sizeof(__pyx_k_pydevd_bundle_pydevd_constants), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_k_pydevd_bundle_pydevd_cython, sizeof(__pyx_k_pydevd_bundle_pydevd_cython), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_k_pydevd_bundle_pydevd_cython_pyx, sizeof(__pyx_k_pydevd_bundle_pydevd_cython_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_k_pydevd_bundle_pydevd_frame_util, sizeof(__pyx_k_pydevd_bundle_pydevd_frame_util), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_k_pydevd_bundle_pydevd_utils, sizeof(__pyx_k_pydevd_bundle_pydevd_utils), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_dont_trace, __pyx_k_pydevd_dont_trace, sizeof(__pyx_k_pydevd_dont_trace), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_file_utils, __pyx_k_pydevd_file_utils, sizeof(__pyx_k_pydevd_file_utils), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_py, __pyx_k_pydevd_py, sizeof(__pyx_k_pydevd_py), 0, 0, 1, 0}, + {&__pyx_kp_s_pydevd_traceproperty_py, __pyx_k_pydevd_traceproperty_py, sizeof(__pyx_k_pydevd_traceproperty_py), 0, 0, 1, 0}, + {&__pyx_n_s_pydevd_tracing, __pyx_k_pydevd_tracing, sizeof(__pyx_k_pydevd_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_PyDBAdditionalThr, __pyx_k_pyx_unpickle_PyDBAdditionalThr, sizeof(__pyx_k_pyx_unpickle_PyDBAdditionalThr), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_PyDBFrame, __pyx_k_pyx_unpickle_PyDBFrame, sizeof(__pyx_k_pyx_unpickle_PyDBFrame), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_SafeCallWrapper, __pyx_k_pyx_unpickle_SafeCallWrapper, sizeof(__pyx_k_pyx_unpickle_SafeCallWrapper), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_ThreadTracer, __pyx_k_pyx_unpickle_ThreadTracer, sizeof(__pyx_k_pyx_unpickle_ThreadTracer), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_TopLevelThreadTra, __pyx_k_pyx_unpickle_TopLevelThreadTra, sizeof(__pyx_k_pyx_unpickle_TopLevelThreadTra), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, __pyx_k_pyx_unpickle_TopLevelThreadTra_2, sizeof(__pyx_k_pyx_unpickle_TopLevelThreadTra_2), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_k_pyx_unpickle__TryExceptContain, sizeof(__pyx_k_pyx_unpickle__TryExceptContain), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_qname, __pyx_k_qname, sizeof(__pyx_k_qname), 0, 0, 1, 1}, + {&__pyx_n_s_quitting, __pyx_k_quitting, sizeof(__pyx_k_quitting), 0, 0, 1, 1}, + {&__pyx_n_s_raise_lines, __pyx_k_raise_lines, sizeof(__pyx_k_raise_lines), 0, 0, 1, 1}, + {&__pyx_n_s_raise_lines_in_except, __pyx_k_raise_lines_in_except, sizeof(__pyx_k_raise_lines_in_except), 0, 0, 1, 1}, + {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_ref, __pyx_k_ref, sizeof(__pyx_k_ref), 0, 0, 1, 1}, + {&__pyx_n_s_remove_additional_info, __pyx_k_remove_additional_info, sizeof(__pyx_k_remove_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_remove_exception_from_frame, __pyx_k_remove_exception_from_frame, sizeof(__pyx_k_remove_exception_from_frame), 0, 0, 1, 1}, + {&__pyx_n_s_remove_return_values_flag, __pyx_k_remove_return_values_flag, sizeof(__pyx_k_remove_return_values_flag), 0, 0, 1, 1}, + {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, + {&__pyx_n_s_ret, __pyx_k_ret, sizeof(__pyx_k_ret), 0, 0, 1, 1}, + {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1}, + {&__pyx_n_s_return_line, __pyx_k_return_line, sizeof(__pyx_k_return_line), 0, 0, 1, 1}, + {&__pyx_n_s_returns, __pyx_k_returns, sizeof(__pyx_k_returns), 0, 0, 1, 1}, + {&__pyx_n_s_rfind, __pyx_k_rfind, sizeof(__pyx_k_rfind), 0, 0, 1, 1}, + {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, + {&__pyx_kp_s_s_raised_from_within_the_callba, __pyx_k_s_raised_from_within_the_callba, sizeof(__pyx_k_s_raised_from_within_the_callba), 0, 0, 1, 0}, + {&__pyx_kp_s_s_s, __pyx_k_s_s, sizeof(__pyx_k_s_s), 0, 0, 1, 0}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_send_caught_exception_stack, __pyx_k_send_caught_exception_stack, sizeof(__pyx_k_send_caught_exception_stack), 0, 0, 1, 1}, + {&__pyx_n_s_send_caught_exception_stack_proc, __pyx_k_send_caught_exception_stack_proc, sizeof(__pyx_k_send_caught_exception_stack_proc), 0, 0, 1, 1}, + {&__pyx_n_s_set, __pyx_k_set, sizeof(__pyx_k_set), 0, 0, 1, 1}, + {&__pyx_n_s_set_additional_thread_info, __pyx_k_set_additional_thread_info, sizeof(__pyx_k_set_additional_thread_info), 0, 0, 1, 1}, + {&__pyx_n_s_set_additional_thread_info_lock, __pyx_k_set_additional_thread_info_lock, sizeof(__pyx_k_set_additional_thread_info_lock), 0, 0, 1, 1}, + {&__pyx_n_s_set_suspend, __pyx_k_set_suspend, sizeof(__pyx_k_set_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_set_trace_for_frame_and_parents, __pyx_k_set_trace_for_frame_and_parents, sizeof(__pyx_k_set_trace_for_frame_and_parents), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_should_stop, __pyx_k_should_stop, sizeof(__pyx_k_should_stop), 0, 0, 1, 1}, + {&__pyx_n_s_should_stop_on_exception, __pyx_k_should_stop_on_exception, sizeof(__pyx_k_should_stop_on_exception), 0, 0, 1, 1}, + {&__pyx_n_s_should_trace_hook, __pyx_k_should_trace_hook, sizeof(__pyx_k_should_trace_hook), 0, 0, 1, 1}, + {&__pyx_n_s_show_return_values, __pyx_k_show_return_values, sizeof(__pyx_k_show_return_values), 0, 0, 1, 1}, + {&__pyx_n_s_skip_on_exceptions_thrown_in_sam, __pyx_k_skip_on_exceptions_thrown_in_sam, sizeof(__pyx_k_skip_on_exceptions_thrown_in_sam), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_st_mtime, __pyx_k_st_mtime, sizeof(__pyx_k_st_mtime), 0, 0, 1, 1}, + {&__pyx_n_s_st_size, __pyx_k_st_size, sizeof(__pyx_k_st_size), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_stat, __pyx_k_stat, sizeof(__pyx_k_stat), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_n_s_stop_on_unhandled_exception, __pyx_k_stop_on_unhandled_exception, sizeof(__pyx_k_stop_on_unhandled_exception), 0, 0, 1, 1}, + {&__pyx_n_s_stopped, __pyx_k_stopped, sizeof(__pyx_k_stopped), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_suspend, __pyx_k_suspend, sizeof(__pyx_k_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_suspend_other_threads, __pyx_k_suspend_other_threads, sizeof(__pyx_k_suspend_other_threads), 0, 0, 1, 1}, + {&__pyx_n_s_suspend_policy, __pyx_k_suspend_policy, sizeof(__pyx_k_suspend_policy), 0, 0, 1, 1}, + {&__pyx_n_s_suspended_at_unhandled, __pyx_k_suspended_at_unhandled, sizeof(__pyx_k_suspended_at_unhandled), 0, 0, 1, 1}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1}, + {&__pyx_n_s_tb_frame, __pyx_k_tb_frame, sizeof(__pyx_k_tb_frame), 0, 0, 1, 1}, + {&__pyx_n_s_tb_lineno, __pyx_k_tb_lineno, sizeof(__pyx_k_tb_lineno), 0, 0, 1, 1}, + {&__pyx_n_s_tb_next, __pyx_k_tb_next, sizeof(__pyx_k_tb_next), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1}, + {&__pyx_kp_s_thread__ident_is_None_in__get_re, __pyx_k_thread__ident_is_None_in__get_re, sizeof(__pyx_k_thread__ident_is_None_in__get_re), 0, 0, 1, 0}, + {&__pyx_n_s_thread_trace_func, __pyx_k_thread_trace_func, sizeof(__pyx_k_thread_trace_func), 0, 0, 1, 1}, + {&__pyx_n_s_thread_tracer, __pyx_k_thread_tracer, sizeof(__pyx_k_thread_tracer), 0, 0, 1, 1}, + {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1}, + {&__pyx_n_s_threading_active, __pyx_k_threading_active, sizeof(__pyx_k_threading_active), 0, 0, 1, 1}, + {&__pyx_n_s_threading_current_thread, __pyx_k_threading_current_thread, sizeof(__pyx_k_threading_current_thread), 0, 0, 1, 1}, + {&__pyx_n_s_threading_get_ident, __pyx_k_threading_get_ident, sizeof(__pyx_k_threading_get_ident), 0, 0, 1, 1}, + {&__pyx_n_s_top_level_thread_tracer, __pyx_k_top_level_thread_tracer, sizeof(__pyx_k_top_level_thread_tracer), 0, 0, 1, 1}, + {&__pyx_n_s_top_level_thread_tracer_no_back, __pyx_k_top_level_thread_tracer_no_back, sizeof(__pyx_k_top_level_thread_tracer_no_back), 0, 0, 1, 1}, + {&__pyx_n_s_top_level_thread_tracer_unhandle, __pyx_k_top_level_thread_tracer_unhandle, sizeof(__pyx_k_top_level_thread_tracer_unhandle), 0, 0, 1, 1}, + {&__pyx_n_s_trace, __pyx_k_trace, sizeof(__pyx_k_trace), 0, 0, 1, 1}, + {&__pyx_n_s_trace_dispatch, __pyx_k_trace_dispatch, sizeof(__pyx_k_trace_dispatch), 0, 0, 1, 1}, + {&__pyx_n_s_trace_dispatch_and_unhandled_exc, __pyx_k_trace_dispatch_and_unhandled_exc, sizeof(__pyx_k_trace_dispatch_and_unhandled_exc), 0, 0, 1, 1}, + {&__pyx_n_s_trace_exception, __pyx_k_trace_exception, sizeof(__pyx_k_trace_exception), 0, 0, 1, 1}, + {&__pyx_n_s_trace_obj, __pyx_k_trace_obj, sizeof(__pyx_k_trace_obj), 0, 0, 1, 1}, + {&__pyx_n_s_trace_unhandled_exceptions, __pyx_k_trace_unhandled_exceptions, sizeof(__pyx_k_trace_unhandled_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_try_exc_info, __pyx_k_try_exc_info, sizeof(__pyx_k_try_exc_info), 0, 0, 1, 1}, + {&__pyx_n_s_try_except_info, __pyx_k_try_except_info, sizeof(__pyx_k_try_except_info), 0, 0, 1, 1}, + {&__pyx_n_s_try_except_infos, __pyx_k_try_except_infos, sizeof(__pyx_k_try_except_infos), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_update_stepping_info, __pyx_k_update_stepping_info, sizeof(__pyx_k_update_stepping_info), 0, 0, 1, 1}, + {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1}, + {&__pyx_kp_s_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 0, 1, 0}, + {&__pyx_n_s_valid_try_except_infos, __pyx_k_valid_try_except_infos, sizeof(__pyx_k_valid_try_except_infos), 0, 0, 1, 1}, + {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, + {&__pyx_n_s_was_just_raised, __pyx_k_was_just_raised, sizeof(__pyx_k_was_just_raised), 0, 0, 1, 1}, + {&__pyx_n_s_weak_thread, __pyx_k_weak_thread, sizeof(__pyx_k_weak_thread), 0, 0, 1, 1}, + {&__pyx_n_s_weakref, __pyx_k_weakref, sizeof(__pyx_k_weakref), 0, 0, 1, 1}, + {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 175, __pyx_L1_error) - __pyx_builtin_NameError = __Pyx_GetBuiltinName(__pyx_n_s_NameError); if (!__pyx_builtin_NameError) __PYX_ERR(0, 208, __pyx_L1_error) - __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 209, __pyx_L1_error) - __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(0, 130, __pyx_L1_error) - __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 149, __pyx_L1_error) - __pyx_builtin_SystemExit = __Pyx_GetBuiltinName(__pyx_n_s_SystemExit); if (!__pyx_builtin_SystemExit) __PYX_ERR(0, 376, __pyx_L1_error) - __pyx_builtin_GeneratorExit = __Pyx_GetBuiltinName(__pyx_n_s_GeneratorExit); if (!__pyx_builtin_GeneratorExit) __PYX_ERR(0, 379, __pyx_L1_error) - __pyx_builtin_KeyboardInterrupt = __Pyx_GetBuiltinName(__pyx_n_s_KeyboardInterrupt); if (!__pyx_builtin_KeyboardInterrupt) __PYX_ERR(0, 1149, __pyx_L1_error) + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 356, __pyx_L1_error) + __pyx_builtin_NameError = __Pyx_GetBuiltinName(__pyx_n_s_NameError); if (!__pyx_builtin_NameError) __PYX_ERR(0, 390, __pyx_L1_error) + __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 230, __pyx_L1_error) + __pyx_builtin_KeyboardInterrupt = __Pyx_GetBuiltinName(__pyx_n_s_KeyboardInterrupt); if (!__pyx_builtin_KeyboardInterrupt) __PYX_ERR(0, 1109, __pyx_L1_error) + __pyx_builtin_SystemExit = __Pyx_GetBuiltinName(__pyx_n_s_SystemExit); if (!__pyx_builtin_SystemExit) __PYX_ERR(0, 1109, __pyx_L1_error) + __pyx_builtin_GeneratorExit = __Pyx_GetBuiltinName(__pyx_n_s_GeneratorExit); if (!__pyx_builtin_GeneratorExit) __PYX_ERR(0, 1410, __pyx_L1_error) + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 2175, __pyx_L1_error) return 0; __pyx_L1_error:; return -1; } +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "_pydevd_bundle/pydevd_cython.pyx":249 + * additional_info.weak_thread = weakref.ref(thread) + * add_additional_info(additional_info) + * del _next_additional_info[:] # <<<<<<<<<<<<<< + * _next_additional_info.append(PyDBAdditionalThreadInfo()) + * + */ + __pyx_slice__2 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__2)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__2); + __Pyx_GIVEREF(__pyx_slice__2); + + /* "_pydevd_bundle/pydevd_cython.pyx":232 + * raise AttributeError() + * except: + * with _set_additional_thread_info_lock: # <<<<<<<<<<<<<< + * # If it's not there, set it within a lock to avoid any racing + * # conditions. + */ + __pyx_tuple__3 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 232, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "_pydevd_bundle/pydevd_cython.pyx":1109 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * + */ + __pyx_tuple__5 = PyTuple_Pack(2, __pyx_builtin_KeyboardInterrupt, __pyx_builtin_SystemExit); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "_pydevd_bundle/pydevd_cython.pyx":1151 + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): + * filename = filename[:-1] # <<<<<<<<<<<<<< + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + */ + __pyx_slice__6 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__6)) __PYX_ERR(0, 1151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__6); + __Pyx_GIVEREF(__pyx_slice__6); + + /* "_pydevd_bundle/pydevd_cython.pyx":1366 + * ) + * py_db.writer.add_command(cmd) + * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< + * pydev_log.exception() + * raise + */ + __pyx_tuple__7 = PyTuple_Pack(2, __pyx_builtin_KeyboardInterrupt, __pyx_builtin_SystemExit); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "_pydevd_bundle/pydevd_cython.pyx":1746 + * if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): + * # We need __bootstrap_inner, not __bootstrap. + * return None, False # <<<<<<<<<<<<<< + * + * elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): + */ + __pyx_tuple__11 = PyTuple_Pack(2, Py_None, Py_False); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 1746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "_pydevd_bundle/pydevd_cython.pyx":2175 + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + * raise RuntimeError("Not used in sys.monitoring mode.") # <<<<<<<<<<<<<< + */ + __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Not_used_in_sys_monitoring_mode); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 2175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xd33aa14, 0x024feed, 0x4342dfb): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd33aa14, 0x024feed, 0x4342dfb) = (conditional_breakpoint_exception, is_in_wait_loop, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type, weak_thread))" % __pyx_checksum + */ + __pyx_tuple__13 = PyTuple_Pack(3, __pyx_int_221489684, __pyx_int_2424557, __pyx_int_70528507); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + __pyx_tuple__14 = PyTuple_Pack(3, __pyx_int_230645316, __pyx_int_232881363, __pyx_int_210464433); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + __pyx_tuple__15 = PyTuple_Pack(3, __pyx_int_61391470, __pyx_int_192493205, __pyx_int_84338306); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + __pyx_tuple__16 = PyTuple_Pack(3, __pyx_int_169093275, __pyx_int_63705258, __pyx_int_125568891); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + __pyx_tuple__17 = PyTuple_Pack(3, __pyx_int_18997755, __pyx_int_255484337, __pyx_int_64458794); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_tuple__18 = PyTuple_Pack(3, __pyx_int_66451433, __pyx_int_16751766, __pyx_int_171613889); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + + /* "_pydevd_bundle/pydevd_cython.pyx":129 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef object _get_related_thread(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_related_thread(self): + */ + __pyx_tuple__20 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_related_thread, 129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 129, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":158 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint _is_stepping(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_stepping(self): + */ + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_is_stepping, 158, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 158, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":176 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef get_topmost_frame(self, thread): # <<<<<<<<<<<<<< + * # ELSE + * # def get_topmost_frame(self, thread): + */ + __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_thread); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_topmost_frame, 176, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 176, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":205 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef update_stepping_info(self): # <<<<<<<<<<<<<< + * # ELSE + * # def update_stepping_info(self): + */ + __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_update_stepping_info, 205, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 205, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_tuple__26 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(2, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) + */ + __pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(2, 16, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":222 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef set_additional_thread_info(thread): # <<<<<<<<<<<<<< + * # ELSE + * # def set_additional_thread_info(thread): + */ + __pyx_tuple__30 = PyTuple_Pack(1, __pyx_n_s_thread); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_set_additional_thread_info, 222, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 222, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":304 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef add_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def add_additional_info(info): + */ + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_n_s_info); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_add_additional_info, 304, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 304, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":316 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef remove_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def remove_additional_info(info): + */ + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_remove_additional_info, 316, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 316, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":328 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint any_thread_stepping(): # <<<<<<<<<<<<<< + * # ELSE + * # def any_thread_stepping(): + */ + __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_any_thread_stepping, 328, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(0, 328, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":335 + * return bool(_infos_stepping) + * import linecache + * import os.path # <<<<<<<<<<<<<< + * import re + * + */ + __pyx_tuple__36 = PyTuple_Pack(2, __pyx_n_s_os, __pyx_n_s_path); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 335, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + + /* "_pydevd_bundle/pydevd_cython.pyx":358 + * except ImportError: + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_tuple__37 = PyTuple_Pack(2, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_smart_step_into_variant_from, 358, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 358, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":381 + * basename = os.path.basename + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") # <<<<<<<<<<<<<< + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + */ + __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_IgnoreException); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + + /* "_pydevd_bundle/pydevd_cython.pyx":382 + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") # <<<<<<<<<<<<<< + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" + */ + __pyx_tuple__40 = PyTuple_Pack(2, __pyx_kp_s_pydevd_py, __pyx_n_s_run); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + + /* "_pydevd_bundle/pydevd_cython.pyx":383 + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") # <<<<<<<<<<<<<< + * TRACE_PROPERTY = "pydevd_traceproperty.py" + * + */ + __pyx_tuple__41 = PyTuple_Pack(2, __pyx_kp_s_pydev_execfile_py, __pyx_n_s_execfile); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + + /* "_pydevd_bundle/pydevd_cython.pyx":395 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * # ELSE + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): + */ + __pyx_tuple__42 = PyTuple_Pack(8, __pyx_n_s_container_obj, __pyx_n_s_py_db, __pyx_n_s_frame, __pyx_n_s_last_raise_line, __pyx_n_s_raise_lines, __pyx_n_s_try_except_infos, __pyx_n_s_valid_try_except_infos, __pyx_n_s_try_except_info); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_is_unhandled_exception, 395, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 395, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(2, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(2, 16, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":491 + * # ENDIF + * + * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].set_suspend(*args, **kwargs) + * + */ + __pyx_tuple__46 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__46); + __Pyx_GIVEREF(__pyx_tuple__46); + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_set_suspend, 491, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 491, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":494 + * self._args[0].set_suspend(*args, **kwargs) + * + * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].do_wait_suspend(*args, **kwargs) + * + */ + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_do_wait_suspend, 494, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 494, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":498 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef tuple exc_info; + */ + __pyx_tuple__49 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg, __pyx_n_s_should_stop, __pyx_n_s_exc_info, __pyx_n_s_frame_skips_cache, __pyx_n_s_frame_cache_key, __pyx_n_s_custom_key, __pyx_n_s_container_obj); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_exception, 498, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 498, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":527 + * return self.trace_exception + * + * def handle_user_exception(self, frame): # <<<<<<<<<<<<<< + * exc_info = self.exc_info + * if exc_info: + */ + __pyx_tuple__51 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_exc_info); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_handle_user_exception, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 527, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":635 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef tuple abs_path_canonical_path_and_base; + * cdef bint is_exception_event; + */ + __pyx_tuple__53 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__53); + __Pyx_GIVEREF(__pyx_tuple__53); + __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_dispatch, 635, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 635, __pyx_L1_error) -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(2, 1, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":151 - * raise AttributeError() - * except: - * with _set_additional_thread_info_lock: # <<<<<<<<<<<<<< - * # If it's not there, set it within a lock to avoid any racing - * # conditions. + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) */ - __pyx_tuple__2 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(2, 16, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1149 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() + /* "_pydevd_bundle/pydevd_cython.pyx":1377 * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef bint was_just_raised; */ - __pyx_tuple__4 = PyTuple_Pack(2, __pyx_builtin_KeyboardInterrupt, __pyx_builtin_SystemExit); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 1149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); + __pyx_tuple__57 = PyTuple_Pack(21, __pyx_n_s_py_db, __pyx_n_s_info, __pyx_n_s_frame, __pyx_n_s_thread, __pyx_n_s_arg, __pyx_n_s_prev_user_uncaught_exc_info, __pyx_n_s_should_stop, __pyx_n_s_was_just_raised, __pyx_n_s_check_excs, __pyx_n_s_maybe_user_uncaught_exc_info, __pyx_n_s_exception, __pyx_n_s_value, __pyx_n_s_trace, __pyx_n_s_exception_breakpoint, __pyx_n_s_result, __pyx_n_s_exc_break_user, __pyx_n_s_exc_break_caught, __pyx_n_s_exc_break, __pyx_n_s_is_user_uncaught, __pyx_n_s_exc_info, __pyx_n_s_lines); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__57); + __Pyx_GIVEREF(__pyx_tuple__57); + __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(6, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_should_stop_on_exception, 1377, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 1377, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1191 - * filename = frame.f_code.co_filename - * if filename.endswith('.pyc'): - * filename = filename[:-1] # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":1510 * - * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def handle_exception(py_db, thread, frame, arg, str exception_type): # <<<<<<<<<<<<<< + * cdef bint stopped; + * cdef tuple abs_real_path_and_base; */ - __pyx_slice__5 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__5)) __PYX_ERR(0, 1191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__5); - __Pyx_GIVEREF(__pyx_slice__5); + __pyx_tuple__59 = PyTuple_Pack(21, __pyx_n_s_py_db, __pyx_n_s_thread, __pyx_n_s_frame, __pyx_n_s_arg, __pyx_n_s_exception_type, __pyx_n_s_stopped, __pyx_n_s_abs_real_path_and_base, __pyx_n_s_absolute_filename, __pyx_n_s_canonical_normalized_filename, __pyx_n_s_lines_ignored, __pyx_n_s_frame_id_to_frame, __pyx_n_s_merged, __pyx_n_s_trace_obj, __pyx_n_s_initial_trace_obj, __pyx_n_s_check_trace_obj, __pyx_n_s_curr_stat, __pyx_n_s_last_stat, __pyx_n_s_from_user_input, __pyx_n_s_exc_lineno, __pyx_n_s_line, __pyx_n_s_f); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__59); + __Pyx_GIVEREF(__pyx_tuple__59); + __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 21, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_handle_exception, 1510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 1510, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1393 - * '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - * main_debugger.writer.add_command(cmd) - * if not issubclass(exc, (KeyboardInterrupt, SystemExit)): # <<<<<<<<<<<<<< - * pydev_log.exception() - * raise + /* "_pydevd_bundle/pydevd_cython.pyx":1674 + * + * + * def notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< + * global _global_notify_skipped_step_in + * */ - __pyx_tuple__6 = PyTuple_Pack(2, __pyx_builtin_KeyboardInterrupt, __pyx_builtin_SystemExit); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 1393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); + __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_py_db, __pyx_n_s_frame); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 1674, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__61); + __Pyx_GIVEREF(__pyx_tuple__61); + __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_notify_skipped_step_in_because_o, 1674, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 1674, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1503 - * if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): - * # We need __bootstrap_inner, not __bootstrap. - * return None, False # <<<<<<<<<<<<<< - * - * elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): + /* "_pydevd_bundle/pydevd_cython.pyx":1700 + * Py_XDECREF (method_obj) + * return SafeCallWrapper(ret) if ret is not None else None + * def get_method_object(self): # <<<<<<<<<<<<<< + * return self.method_object + * # ELSE */ - __pyx_tuple__10 = PyTuple_Pack(2, Py_None, Py_False); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 1503, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); + __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_method_object, 1700, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 1700, __pyx_L1_error) - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum not in (0x75b3b02, 0x5f02be1, 0xa5a0d63): # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x75b3b02, 0x5f02be1, 0xa5a0d63) = (conditional_breakpoint_exception, is_tracing, pydev_call_from_jinja2, pydev_call_inside_jinja2, pydev_django_resolve_frame, pydev_func_name, pydev_message, pydev_next_line, pydev_notify_kill, pydev_original_step_cmd, pydev_smart_child_offset, pydev_smart_parent_offset, pydev_smart_step_into_variants, pydev_smart_step_stop, pydev_state, pydev_step_cmd, pydev_step_stop, pydev_use_scoped_step_frame, step_in_initial_location, suspend_type, suspended_at_unhandled, target_id_to_smart_step_into_variant, thread_tracer, top_level_thread_tracer_no_back_frames, top_level_thread_tracer_unhandled, trace_suspend_type))" % __pyx_checksum) + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_tuple__11 = PyTuple_Pack(3, __pyx_int_123419394, __pyx_int_99625953, __pyx_int_173673827); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_tuple__12 = PyTuple_Pack(3, __pyx_int_210464433, __pyx_int_230645316, __pyx_int_232881363); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_tuple__13 = PyTuple_Pack(3, __pyx_int_84338306, __pyx_int_61391470, __pyx_int_192493205); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_tuple__14 = PyTuple_Pack(3, __pyx_int_125568891, __pyx_int_169093275, __pyx_int_63705258); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - __pyx_tuple__15 = PyTuple_Pack(3, __pyx_int_64458794, __pyx_int_18997755, __pyx_int_255484337); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_tuple__16 = PyTuple_Pack(3, __pyx_int_171613889, __pyx_int_66451433, __pyx_int_16751766); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); + __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(2, 1, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":11 - * from _pydev_bundle import pydev_log - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * pydev_log.debug("Using Cython speedups") # <<<<<<<<<<<<<< - * # ELSE - * # from _pydevd_bundle.pydevd_frame import PyDBFrame + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Using_Cython_speedups); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(2, 16, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":145 + /* "_pydevd_bundle/pydevd_cython.pyx":1707 * * - * def set_additional_thread_info(thread): # <<<<<<<<<<<<<< - * try: - * additional_info = thread.additional_info + * def fix_top_level_trace_and_get_trace_func(py_db, frame): # <<<<<<<<<<<<<< + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) */ - __pyx_tuple__18 = PyTuple_Pack(2, __pyx_n_s_thread, __pyx_n_s_additional_info); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_set_additional_thread_info, 145, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_tuple__66 = PyTuple_Pack(15, __pyx_n_s_py_db, __pyx_n_s_frame, __pyx_n_s_filename, __pyx_n_s_name_2, __pyx_n_s_args, __pyx_n_s_thread, __pyx_n_s_f_unhandled, __pyx_n_s_force_only_unhandled_tracer, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_t, __pyx_n_s_additional_info, __pyx_n_s_top_level_thread_tracer, __pyx_n_s_f_trace, __pyx_n_s_thread_tracer); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 1707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__66); + __Pyx_GIVEREF(__pyx_tuple__66); + __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_fix_top_level_trace_and_get_trac, 1707, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 1707, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":177 - * except ImportError: + /* "_pydevd_bundle/pydevd_cython.pyx":1845 * - * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< - * return None * + * def trace_dispatch(py_db, frame, event, arg): # <<<<<<<<<<<<<< + * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) + * if thread_trace_func is None: */ - __pyx_tuple__20 = PyTuple_Pack(2, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_smart_step_into_variant_from, 177, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_tuple__68 = PyTuple_Pack(6, __pyx_n_s_py_db, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg, __pyx_n_s_thread_trace_func, __pyx_n_s_apply_to_settrace); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1845, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__68); + __Pyx_GIVEREF(__pyx_tuple__68); + __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_dispatch, 1845, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(0, 1845, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":199 - * basename = os.path.basename + /* "_pydevd_bundle/pydevd_cython.pyx":1868 + * # fmt: on * - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') # <<<<<<<<<<<<<< - * DEBUG_START = ('pydevd.py', 'run') - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') + * def trace_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< + * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. + * # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_IgnoreException); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 199, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); + __pyx_tuple__70 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg, __pyx_n_s_py_db, __pyx_n_s_t, __pyx_n_s_additional_info); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__70); + __Pyx_GIVEREF(__pyx_tuple__70); + __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_unhandled_exceptions, 1868, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(0, 1868, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":200 + /* "_pydevd_bundle/pydevd_cython.pyx":1882 + * return self.trace_unhandled_exceptions + * + * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< + * return self.trace_unhandled_exceptions * - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') - * DEBUG_START = ('pydevd.py', 'run') # <<<<<<<<<<<<<< - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') - * TRACE_PROPERTY = 'pydevd_traceproperty.py' */ - __pyx_tuple__23 = PyTuple_Pack(2, __pyx_kp_s_pydevd_py, __pyx_n_s_run); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_trace_dispatch_func, 1882, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 1882, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":201 - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') - * DEBUG_START = ('pydevd.py', 'run') - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') # <<<<<<<<<<<<<< - * TRACE_PROPERTY = 'pydevd_traceproperty.py' - * + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict */ - __pyx_tuple__24 = PyTuple_Pack(2, __pyx_kp_s_pydev_execfile_py, __pyx_n_s_execfile); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); + __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(2, 1, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1436 - * - * - * def notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< - * global _global_notify_skipped_step_in - * + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) */ - __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_py_db, __pyx_n_s_frame); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 1436, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_notify_skipped_step_in_because_o, 1436, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(2, 16, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1466 - * + /* "_pydevd_bundle/pydevd_cython.pyx":1926 + * # fmt: on * - * def fix_top_level_trace_and_get_trace_func(py_db, frame): # <<<<<<<<<<<<<< - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef str filename; + * def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< + * # DEBUG = 'code_to_debug' in frame.f_code.co_filename + * # if DEBUG: print('trace_dispatch_and_unhandled_exceptions: %s %s %s %s %s %s' % (event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno, self._frame_trace_dispatch, frame.f_lineno)) */ - __pyx_tuple__27 = PyTuple_Pack(15, __pyx_n_s_py_db, __pyx_n_s_frame, __pyx_n_s_filename, __pyx_n_s_name_2, __pyx_n_s_args, __pyx_n_s_thread, __pyx_n_s_f_unhandled, __pyx_n_s_force_only_unhandled_tracer, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_t, __pyx_n_s_additional_info, __pyx_n_s_top_level_thread_tracer, __pyx_n_s_f_trace, __pyx_n_s_thread_tracer); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 1466, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_fix_top_level_trace_and_get_trac, 1466, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 1466, __pyx_L1_error) + __pyx_tuple__75 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg, __pyx_n_s_frame_trace_dispatch, __pyx_n_s_py_db, __pyx_n_s_t, __pyx_n_s_additional_info, __pyx_n_s_ret); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 1926, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__75); + __Pyx_GIVEREF(__pyx_tuple__75); + __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_dispatch_and_unhandled_exc, 1926, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 1926, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1594 + /* "_pydevd_bundle/pydevd_cython.pyx":1961 + * return ret * + * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< + * return self.trace_dispatch_and_unhandled_exceptions * - * def trace_dispatch(py_db, frame, event, arg): # <<<<<<<<<<<<<< - * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) - * if thread_trace_func is None: */ - __pyx_tuple__29 = PyTuple_Pack(6, __pyx_n_s_py_db, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg, __pyx_n_s_thread_trace_func, __pyx_n_s_apply_to_settrace); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1594, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_trace_dispatch, 1594, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 1594, __pyx_L1_error) + __pyx_codeobj__77 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_get_trace_dispatch_func, 1961, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__77)) __PYX_ERR(0, 1961, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":1880 + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(2, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) + */ + __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(2, 16, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(2, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) + */ + __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(2, 16, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":2166 * _original_call = ThreadTracer.__call__ * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< * constructed_tid_to_last_frame[self._args[1].ident] = frame * return _original_call(self, frame, event, arg) */ - __pyx_tuple__31 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 1880, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_call_2, 1880, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 1880, __pyx_L1_error) + __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_call_2, 2166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(0, 2166, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":2174 + * if PYDEVD_USE_SYS_MONITORING: + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): # <<<<<<<<<<<<<< + * raise RuntimeError("Not used in sys.monitoring mode.") + */ + __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_bundle_pydevd_cython_pyx, __pyx_n_s_fix_top_level_trace_and_get_trac, 2174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 2174, __pyx_L1_error) /* "(tree fragment)":1 * def __pyx_unpickle_PyDBAdditionalThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_tuple__33 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__35 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__TryExceptContain, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__37 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PyDBFrame, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__39 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_SafeCallWrapper, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__41 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__41); - __Pyx_GIVEREF(__pyx_tuple__41); - __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_TopLevelThreadTra, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__43 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__43); - __Pyx_GIVEREF(__pyx_tuple__43); - __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(2, 1, __pyx_L1_error) - __pyx_tuple__45 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__45); - __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_ThreadTracer, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_tuple__84 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__84); + __Pyx_GIVEREF(__pyx_tuple__84); + __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__TryExceptContain, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_PyDBFrame, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_SafeCallWrapper, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_TopLevelThreadTra, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_ThreadTracer, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } +/* #### Code section: init_constants ### */ -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_get.method_name = &__pyx_n_s_get; __pyx_umethod_PyDict_Type_update.type = (PyObject*)&PyDict_Type; - __pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_update.method_name = &__pyx_n_s_update; __pyx_umethod_PyString_Type_rfind.type = (PyObject*)&PyString_Type; - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_umethod_PyString_Type_rfind.method_name = &__pyx_n_s_rfind; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) @@ -38006,21 +46645,21 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { __pyx_int_111 = PyInt_FromLong(111); if (unlikely(!__pyx_int_111)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_137 = PyInt_FromLong(137); if (unlikely(!__pyx_int_137)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_160 = PyInt_FromLong(160); if (unlikely(!__pyx_int_160)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2424557 = PyInt_FromLong(2424557L); if (unlikely(!__pyx_int_2424557)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_16751766 = PyInt_FromLong(16751766L); if (unlikely(!__pyx_int_16751766)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_18997755 = PyInt_FromLong(18997755L); if (unlikely(!__pyx_int_18997755)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_61391470 = PyInt_FromLong(61391470L); if (unlikely(!__pyx_int_61391470)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_63705258 = PyInt_FromLong(63705258L); if (unlikely(!__pyx_int_63705258)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_64458794 = PyInt_FromLong(64458794L); if (unlikely(!__pyx_int_64458794)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_66451433 = PyInt_FromLong(66451433L); if (unlikely(!__pyx_int_66451433)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_70528507 = PyInt_FromLong(70528507L); if (unlikely(!__pyx_int_70528507)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_84338306 = PyInt_FromLong(84338306L); if (unlikely(!__pyx_int_84338306)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_99625953 = PyInt_FromLong(99625953L); if (unlikely(!__pyx_int_99625953)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_123419394 = PyInt_FromLong(123419394L); if (unlikely(!__pyx_int_123419394)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_125568891 = PyInt_FromLong(125568891L); if (unlikely(!__pyx_int_125568891)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_169093275 = PyInt_FromLong(169093275L); if (unlikely(!__pyx_int_169093275)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_171613889 = PyInt_FromLong(171613889L); if (unlikely(!__pyx_int_171613889)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_173673827 = PyInt_FromLong(173673827L); if (unlikely(!__pyx_int_173673827)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_192493205 = PyInt_FromLong(192493205L); if (unlikely(!__pyx_int_192493205)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_210464433 = PyInt_FromLong(210464433L); if (unlikely(!__pyx_int_210464433)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_221489684 = PyInt_FromLong(221489684L); if (unlikely(!__pyx_int_221489684)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_230645316 = PyInt_FromLong(230645316L); if (unlikely(!__pyx_int_230645316)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_232881363 = PyInt_FromLong(232881363L); if (unlikely(!__pyx_int_232881363)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_255484337 = PyInt_FromLong(255484337L); if (unlikely(!__pyx_int_255484337)) __PYX_ERR(0, 1, __pyx_L1_error) @@ -38029,6 +46668,12 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { __pyx_L1_error:; return -1; } +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + return 0; +} +/* #### Code section: init_module ### */ static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ @@ -38042,6 +46687,9 @@ static int __Pyx_modinit_global_init_code(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); /*--- Global init code ---*/ + __pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos = ((PyObject*)Py_None); Py_INCREF(Py_None); + __pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping = ((PyObject*)Py_None); Py_INCREF(Py_None); + __pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock = Py_None; Py_INCREF(Py_None); __pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in = ((PyObject*)Py_None); Py_INCREF(Py_None); __Pyx_RefNannyFinishContext(); return 0; @@ -38057,10 +46705,20 @@ static int __Pyx_modinit_variable_export_code(void) { static int __Pyx_modinit_function_export_code(void) { __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); /*--- Function export code ---*/ + if (__Pyx_ExportFunction("set_additional_thread_info", (void (*)(void))__pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info, "PyObject *(PyObject *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ExportFunction("add_additional_info", (void (*)(void))__pyx_f_14_pydevd_bundle_13pydevd_cython_add_additional_info, "PyObject *(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ExportFunction("remove_additional_info", (void (*)(void))__pyx_f_14_pydevd_bundle_13pydevd_cython_remove_additional_info, "PyObject *(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ExportFunction("any_thread_stepping", (void (*)(void))__pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping, "int (int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; } static int __Pyx_modinit_type_init_code(void) { @@ -38070,96 +46728,197 @@ static int __Pyx_modinit_type_init_code(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 23, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyDBAdditionalThreadInfo, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 23, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = &__pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.get_topmost_frame = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *, int __pyx_skip_dispatch))__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_get_topmost_frame; + __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo.update_stepping_info = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch))__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_update_stepping_info; + __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo._get_related_thread = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch))__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__get_related_thread; + __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo._is_stepping = (int (*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch))__pyx_f_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo__is_stepping; + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)) __PYX_ERR(0, 29, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = &__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TryExceptContainerObj, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 256, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 256, __pyx_L1_error) + #endif + if (__Pyx_SetVtable(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyDBAdditionalThreadInfo, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj)) __PYX_ERR(0, 435, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj = &__pyx_type_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TryExceptContainerObj, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + #endif __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBFrame = &__pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame; - __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._should_stop_on_exception = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__should_stop_on_exception; - __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._handle_exception = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__handle_exception; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame.get_func_name = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_get_func_name; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._show_return_values = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__show_return_values; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._remove_return_values = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__remove_return_values; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._get_unfiltered_back_frame = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__get_unfiltered_back_frame; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame._is_same_frame = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame__is_same_frame; __pyx_vtable_14_pydevd_bundle_13pydevd_cython_PyDBFrame.trace_dispatch = (PyObject *(*)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBFrame *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_trace_dispatch; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 274, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame.tp_dict, __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 274, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyDBFrame, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 274, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 274, __pyx_L1_error) + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame)) __PYX_ERR(0, 456, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame = &__pyx_type_14_pydevd_bundle_13pydevd_cython_PyDBFrame; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1448, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SafeCallWrapper, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1448, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1448, __pyx_L1_error) + #endif + if (__Pyx_SetVtable(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PyDBFrame, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame) < 0) __PYX_ERR(0, 456, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper)) __PYX_ERR(0, 1688, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1688, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper = &__pyx_type_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1604, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1688, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1604, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1604, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SafeCallWrapper, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1688, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper) < 0) __PYX_ERR(0, 1688, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions)) __PYX_ERR(0, 1856, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1856, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions = &__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1634, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1856, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TopLevelThreadTracerNoBackFrame, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1634, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1634, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1856, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions) < 0) __PYX_ERR(0, 1856, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame)) __PYX_ERR(0, 1887, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1887, __pyx_L1_error) + #else __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame = &__pyx_type_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame; - if (PyType_Ready(&__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1709, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer.tp_dictoffset && __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1887, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TopLevelThreadTracerNoBackFrame, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1887, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame) < 0) __PYX_ERR(0, 1887, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer_spec, NULL); if (unlikely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer)) __PYX_ERR(0, 1967, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer_spec, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1967, __pyx_L1_error) + #else + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer = &__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1967, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer->tp_dictoffset && __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer->tp_getattro = __Pyx_PyObject_GenericGetAttr; } + #endif #if CYTHON_UPDATE_DESCRIPTOR_DOC { - PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1709, __pyx_L1_error) - if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer, "__call__"); if (unlikely(!wrapper)) __PYX_ERR(0, 1967, __pyx_L1_error) + if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) { __pyx_wrapperbase_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__ = *((PyWrapperDescrObject *)wrapper)->d_base; __pyx_wrapperbase_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__.doc = __pyx_doc_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__; ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_2__call__; } } #endif - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ThreadTracer, (PyObject *)&__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1709, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1709, __pyx_L1_error) - __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer = &__pyx_type_14_pydevd_bundle_13pydevd_cython_ThreadTracer; + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ThreadTracer, (PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1967, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer) < 0) __PYX_ERR(0, 1967, __pyx_L1_error) + #endif __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -38177,14 +46936,15 @@ static int __Pyx_modinit_type_import_code(void) { /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_0_11(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), + #elif CYTHON_COMPILING_IN_LIMITED_API + sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyTypeObject), #else - sizeof(PyHeapTypeObject), + sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(PyHeapTypeObject), #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) + __Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(3, 9, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -38211,6 +46971,55 @@ static int __Pyx_modinit_function_import_code(void) { } +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_pydevd_cython(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_pydevd_cython}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "pydevd_cython", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + #ifndef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #elif PY_MAJOR_VERSION < 3 @@ -38261,12 +47070,21 @@ static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { } return 0; } -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else result = PyDict_SetItemString(moddict, to_name, value); +#endif } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -38276,8 +47094,9 @@ static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject } return result; } -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) @@ -38287,8 +47106,12 @@ static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNU module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; +#endif if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; @@ -38304,6 +47127,10 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_pydevd_cython(PyObject *__pyx_pyin #endif #endif { + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; @@ -38326,6 +47153,33 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_pydevd_cython(PyObject *__pyx_pyin #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("pydevd_cython", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "pydevd_cython" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { @@ -38336,7 +47190,7 @@ if (!__Pyx_RefNanny) { } #endif __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_pydevd_cython(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pxy_PyFrame_Initialize_Offsets __Pxy_PyFrame_Initialize_Offsets(); #endif @@ -38344,48 +47198,31 @@ if (!__Pyx_RefNanny) { __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS PyEval_InitThreads(); #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("pydevd_cython", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) @@ -38397,7 +47234,7 @@ if (!__Pyx_RefNanny) { { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) if (!PyDict_GetItemString(modules, "_pydevd_bundle.pydevd_cython")) { - if (unlikely(PyDict_SetItemString(modules, "_pydevd_bundle.pydevd_cython", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((PyDict_SetItemString(modules, "_pydevd_bundle.pydevd_cython", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) } } #endif @@ -38408,9 +47245,9 @@ if (!__Pyx_RefNanny) { /*--- Global type/function init code ---*/ (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_function_export_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) (void)__Pyx_modinit_variable_import_code(); (void)__Pyx_modinit_function_import_code(); /*--- Execution code ---*/ @@ -38418,383 +47255,616 @@ if (!__Pyx_RefNanny) { if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif - /* "_pydevd_bundle/pydevd_cython.pyx":7 + /* "_pydevd_bundle/pydevd_cython.pyx":8 * # DO NOT edit manually! - * # DO NOT edit manually! - * from _pydevd_bundle.pydevd_constants import (STATE_RUN, PYTHON_SUSPEND, SUPPORT_GEVENT, ForkSafeLock, # <<<<<<<<<<<<<< - * _current_frames) - * from _pydev_bundle import pydev_log + * from _pydevd_bundle.pydevd_constants import ( + * STATE_RUN, # <<<<<<<<<<<<<< + * PYTHON_SUSPEND, + * SUPPORT_GEVENT, */ - __pyx_t_1 = PyList_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyList_New(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_STATE_RUN); __Pyx_GIVEREF(__pyx_n_s_STATE_RUN); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_STATE_RUN); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_STATE_RUN)) __PYX_ERR(0, 8, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_PYTHON_SUSPEND); __Pyx_GIVEREF(__pyx_n_s_PYTHON_SUSPEND); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_PYTHON_SUSPEND); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_PYTHON_SUSPEND)) __PYX_ERR(0, 8, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_SUPPORT_GEVENT); __Pyx_GIVEREF(__pyx_n_s_SUPPORT_GEVENT); - PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_SUPPORT_GEVENT); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_SUPPORT_GEVENT)) __PYX_ERR(0, 8, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_ForkSafeLock); __Pyx_GIVEREF(__pyx_n_s_ForkSafeLock); - PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_ForkSafeLock); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_ForkSafeLock)) __PYX_ERR(0, 8, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_current_frames); __Pyx_GIVEREF(__pyx_n_s_current_frames); - PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_current_frames); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_current_frames)) __PYX_ERR(0, 8, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_STATE_SUSPEND); + __Pyx_GIVEREF(__pyx_n_s_STATE_SUSPEND); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_STATE_SUSPEND)) __PYX_ERR(0, 8, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_global_debugger); + __Pyx_GIVEREF(__pyx_n_s_get_global_debugger); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_get_global_debugger)) __PYX_ERR(0, 8, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_thread_id); + __Pyx_GIVEREF(__pyx_n_s_get_thread_id); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 7, __pyx_n_s_get_thread_id)) __PYX_ERR(0, 8, __pyx_L1_error); + + /* "_pydevd_bundle/pydevd_cython.pyx":7 + * # DO NOT edit manually! + * # DO NOT edit manually! + * from _pydevd_bundle.pydevd_constants import ( # <<<<<<<<<<<<<< + * STATE_RUN, + * PYTHON_SUSPEND, + */ + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_RUN, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYTHON_SUSPEND, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_SUPPORT_GEVENT); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUPPORT_GEVENT, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ForkSafeLock, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_current_frames); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_current_frames, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_RUN, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYTHON_SUSPEND, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_SUPPORT_GEVENT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUPPORT_GEVENT, __pyx_t_2) < 0) __PYX_ERR(0, 10, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ForkSafeLock, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_current_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_current_frames, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_STATE_SUSPEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_SUSPEND, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_global_debugger); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_global_debugger, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_thread_id); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_thread_id, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":9 - * from _pydevd_bundle.pydevd_constants import (STATE_RUN, PYTHON_SUSPEND, SUPPORT_GEVENT, ForkSafeLock, - * _current_frames) + /* "_pydevd_bundle/pydevd_cython.pyx":17 + * get_thread_id, + * ) * from _pydev_bundle import pydev_log # <<<<<<<<<<<<<< - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * pydev_log.debug("Using Cython speedups") + * from _pydev_bundle._pydev_saved_modules import threading + * import weakref */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_pydev_log); __Pyx_GIVEREF(__pyx_n_s_pydev_log); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_pydev_log); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydev_bundle, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_pydev_log)) __PYX_ERR(0, 17, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":11 + /* "_pydevd_bundle/pydevd_cython.pyx":18 + * ) * from _pydev_bundle import pydev_log - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * pydev_log.debug("Using Cython speedups") # <<<<<<<<<<<<<< - * # ELSE - * # from _pydevd_bundle.pydevd_frame import PyDBFrame + * from _pydev_bundle._pydev_saved_modules import threading # <<<<<<<<<<<<<< + * import weakref + * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_threading); + __Pyx_GIVEREF(__pyx_n_s_threading); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_threading)) __PYX_ERR(0, 18, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":16 - * # ENDIF + /* "_pydevd_bundle/pydevd_cython.pyx":19 + * from _pydev_bundle import pydev_log + * from _pydev_bundle._pydev_saved_modules import threading + * import weakref # <<<<<<<<<<<<<< + * + * version = 11 + */ + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_weakref, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_weakref, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":21 + * import weakref * * version = 11 # <<<<<<<<<<<<<< * * */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_version, __pyx_int_11) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_version, __pyx_int_11) < 0) __PYX_ERR(0, 21, __pyx_L1_error) + + /* "_pydevd_bundle/pydevd_cython.pyx":129 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef object _get_related_thread(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_related_thread(self): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_3_get_related_thread, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo__get_re, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_get_related_thread, __pyx_t_3) < 0) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + + /* "_pydevd_bundle/pydevd_cython.pyx":158 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint _is_stepping(self): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_stepping(self): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_5_is_stepping, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo__is_ste, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_is_stepping, __pyx_t_3) < 0) __PYX_ERR(0, 158, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + + /* "_pydevd_bundle/pydevd_cython.pyx":176 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef get_topmost_frame(self, thread): # <<<<<<<<<<<<<< + * # ELSE + * # def get_topmost_frame(self, thread): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_7get_topmost_frame, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo_get_top, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_get_topmost_frame, __pyx_t_3) < 0) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + + /* "_pydevd_bundle/pydevd_cython.pyx":205 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef update_stepping_info(self): # <<<<<<<<<<<<<< + * # ELSE + * # def update_stepping_info(self): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_9update_stepping_info, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo_update, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_update_stepping_info, __pyx_t_3) < 0) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_13__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo___reduc, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_reduce_cython, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBAdditionalThreadInfo, (type(self), 0xd33aa14, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(self, __pyx_state) + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_24PyDBAdditionalThreadInfo_15__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBAdditionalThreadInfo___setst, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, __pyx_n_s_setstate_cython, __pyx_t_3) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); - /* "_pydevd_bundle/pydevd_cython.pyx":142 + /* "_pydevd_bundle/pydevd_cython.pyx":216 * * * _set_additional_thread_info_lock = ForkSafeLock() # <<<<<<<<<<<<<< - * + * _next_additional_info = [PyDBAdditionalThreadInfo()] * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 216, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info_lock, __pyx_t_2) < 0) __PYX_ERR(0, 142, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info_lock, __pyx_t_2) < 0) __PYX_ERR(0, 216, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":145 + /* "_pydevd_bundle/pydevd_cython.pyx":217 + * + * _set_additional_thread_info_lock = ForkSafeLock() + * _next_additional_info = [PyDBAdditionalThreadInfo()] # <<<<<<<<<<<<<< * * - * def set_additional_thread_info(thread): # <<<<<<<<<<<<<< - * try: - * additional_info = thread.additional_info */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info, __pyx_t_2) < 0) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 217, __pyx_L1_error); + __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_next_additional_info, __pyx_t_3) < 0) __PYX_ERR(0, 217, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":222 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef set_additional_thread_info(thread): # <<<<<<<<<<<<<< + * # ELSE + * # def set_additional_thread_info(thread): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_1set_additional_thread_info, 0, __pyx_n_s_set_additional_thread_info, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info, __pyx_t_3) < 0) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":160 + /* "_pydevd_bundle/pydevd_cython.pyx":264 + * # fmt: on * - * return additional_info + * _all_infos = set() # <<<<<<<<<<<<<< + * _infos_stepping = set() + * _update_infos_lock = ForkSafeLock() + */ + __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos); + __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__all_infos, ((PyObject*)__pyx_t_3)); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":265 + * + * _all_infos = set() + * _infos_stepping = set() # <<<<<<<<<<<<<< + * _update_infos_lock = ForkSafeLock() + * + */ + __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping); + __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__infos_stepping, ((PyObject*)__pyx_t_3)); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":266 + * _all_infos = set() + * _infos_stepping = set() + * _update_infos_lock = ForkSafeLock() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XGOTREF(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock); + __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__update_infos_lock, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":304 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef add_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def add_additional_info(info): + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_3add_additional_info, 0, __pyx_n_s_add_additional_info, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_additional_info, __pyx_t_2) < 0) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":316 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef remove_additional_info(PyDBAdditionalThreadInfo info): # <<<<<<<<<<<<<< + * # ELSE + * # def remove_additional_info(info): + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_5remove_additional_info, 0, __pyx_n_s_remove_additional_info, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_remove_additional_info, __pyx_t_2) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":328 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef bint any_thread_stepping(): # <<<<<<<<<<<<<< + * # ELSE + * # def any_thread_stepping(): + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_7any_thread_stepping, 0, __pyx_n_s_any_thread_stepping, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_any_thread_stepping, __pyx_t_2) < 0) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":334 + * # fmt: on + * return bool(_infos_stepping) * import linecache # <<<<<<<<<<<<<< * import os.path * import re */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_linecache, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_linecache, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 334, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_linecache, __pyx_t_2) < 0) __PYX_ERR(0, 160, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_linecache, __pyx_t_2) < 0) __PYX_ERR(0, 334, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":161 - * return additional_info + /* "_pydevd_bundle/pydevd_cython.pyx":335 + * return bool(_infos_stepping) * import linecache * import os.path # <<<<<<<<<<<<<< * import re * */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_os_path, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_2 = __Pyx_Import(__pyx_n_s_os_path, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 161, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 335, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":162 + /* "_pydevd_bundle/pydevd_cython.pyx":336 * import linecache * import os.path * import re # <<<<<<<<<<<<<< * * from _pydev_bundle import pydev_log */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_re, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_re, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_2) < 0) __PYX_ERR(0, 162, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_2) < 0) __PYX_ERR(0, 336, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":164 + /* "_pydevd_bundle/pydevd_cython.pyx":338 * import re * * from _pydev_bundle import pydev_log # <<<<<<<<<<<<<< * from _pydevd_bundle import pydevd_dont_trace - * from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, + * from _pydevd_bundle.pydevd_constants import ( */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_pydev_log); __Pyx_GIVEREF(__pyx_n_s_pydev_log); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_pydev_log); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydev_bundle, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 164, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_pydev_log)) __PYX_ERR(0, 338, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydev_bundle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 164, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log, __pyx_t_2) < 0) __PYX_ERR(0, 164, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log, __pyx_t_2) < 0) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":165 + /* "_pydevd_bundle/pydevd_cython.pyx":339 * * from _pydev_bundle import pydev_log * from _pydevd_bundle import pydevd_dont_trace # <<<<<<<<<<<<<< - * from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, - * EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) + * from _pydevd_bundle.pydevd_constants import ( + * RETURN_VALUES_DICT, */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_pydevd_dont_trace); __Pyx_GIVEREF(__pyx_n_s_pydevd_dont_trace); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_pydevd_dont_trace); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_pydevd_dont_trace)) __PYX_ERR(0, 339, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 339, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydevd_dont_trace, __pyx_t_1) < 0) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydevd_dont_trace, __pyx_t_3) < 0) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":166 - * from _pydev_bundle import pydev_log + /* "_pydevd_bundle/pydevd_cython.pyx":341 * from _pydevd_bundle import pydevd_dont_trace - * from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, # <<<<<<<<<<<<<< - * EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) - * from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace + * from _pydevd_bundle.pydevd_constants import ( + * RETURN_VALUES_DICT, # <<<<<<<<<<<<<< + * NO_FTRACE, + * EXCEPTION_TYPE_HANDLED, */ - __pyx_t_2 = PyList_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = PyList_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_RETURN_VALUES_DICT); __Pyx_GIVEREF(__pyx_n_s_RETURN_VALUES_DICT); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_RETURN_VALUES_DICT); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_RETURN_VALUES_DICT)) __PYX_ERR(0, 341, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_NO_FTRACE); __Pyx_GIVEREF(__pyx_n_s_NO_FTRACE); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NO_FTRACE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NO_FTRACE)) __PYX_ERR(0, 341, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_EXCEPTION_TYPE_HANDLED); __Pyx_GIVEREF(__pyx_n_s_EXCEPTION_TYPE_HANDLED); - PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_EXCEPTION_TYPE_HANDLED); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_EXCEPTION_TYPE_HANDLED)) __PYX_ERR(0, 341, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); __Pyx_GIVEREF(__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); - PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED)) __PYX_ERR(0, 341, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); __Pyx_GIVEREF(__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); - PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT)) __PYX_ERR(0, 341, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + __Pyx_GIVEREF(__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_PYDEVD_USE_SYS_MONITORING)) __PYX_ERR(0, 341, __pyx_L1_error); + + /* "_pydevd_bundle/pydevd_cython.pyx":340 + * from _pydev_bundle import pydev_log + * from _pydevd_bundle import pydevd_dont_trace + * from _pydevd_bundle.pydevd_constants import ( # <<<<<<<<<<<<<< + * RETURN_VALUES_DICT, + * NO_FTRACE, + */ + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_RETURN_VALUES_DICT, __pyx_t_2) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RETURN_VALUES_DICT, __pyx_t_2) < 0) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_FTRACE, __pyx_t_2) < 0) __PYX_ERR(0, 166, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_FTRACE, __pyx_t_2) < 0) __PYX_ERR(0, 342, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_t_2) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_t_2) < 0) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_t_2) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_t_2) < 0) __PYX_ERR(0, 344, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_t_2) < 0) __PYX_ERR(0, 167, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_t_2) < 0) __PYX_ERR(0, 345, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PYDEVD_USE_SYS_MONITORING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYDEVD_USE_SYS_MONITORING, __pyx_t_2) < 0) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":168 - * from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, - * EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) + /* "_pydevd_bundle/pydevd_cython.pyx":348 + * PYDEVD_USE_SYS_MONITORING, + * ) * from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace # <<<<<<<<<<<<<< * from _pydevd_bundle.pydevd_utils import get_clsname_for_code * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame */ - __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_add_exception_to_frame); __Pyx_GIVEREF(__pyx_n_s_add_exception_to_frame); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_add_exception_to_frame); - __Pyx_INCREF(__pyx_n_s_just_raised); - __Pyx_GIVEREF(__pyx_n_s_just_raised); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_just_raised); - __Pyx_INCREF(__pyx_n_s_remove_exception_from_frame); - __Pyx_GIVEREF(__pyx_n_s_remove_exception_from_frame); - PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_remove_exception_from_frame); - __Pyx_INCREF(__pyx_n_s_ignore_exception_trace); - __Pyx_GIVEREF(__pyx_n_s_ignore_exception_trace); - PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_ignore_exception_trace); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_exception_to_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_exception_to_frame, __pyx_t_1) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_just_raised); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_just_raised, __pyx_t_1) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_remove_exception_from_frame, __pyx_t_1) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ignore_exception_trace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ignore_exception_trace, __pyx_t_1) < 0) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_add_exception_to_frame)) __PYX_ERR(0, 348, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_just_raised); + __Pyx_GIVEREF(__pyx_n_s_just_raised); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_just_raised)) __PYX_ERR(0, 348, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_remove_exception_from_frame); + __Pyx_GIVEREF(__pyx_n_s_remove_exception_from_frame); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_remove_exception_from_frame)) __PYX_ERR(0, 348, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ignore_exception_trace); + __Pyx_GIVEREF(__pyx_n_s_ignore_exception_trace); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_ignore_exception_trace)) __PYX_ERR(0, 348, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_add_exception_to_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_add_exception_to_frame, __pyx_t_3) < 0) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_just_raised); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_just_raised, __pyx_t_3) < 0) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_remove_exception_from_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_remove_exception_from_frame, __pyx_t_3) < 0) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ignore_exception_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ignore_exception_trace, __pyx_t_3) < 0) __PYX_ERR(0, 348, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":169 - * EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) + /* "_pydevd_bundle/pydevd_cython.pyx":349 + * ) * from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace * from _pydevd_bundle.pydevd_utils import get_clsname_for_code # <<<<<<<<<<<<<< * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_get_clsname_for_code); __Pyx_GIVEREF(__pyx_n_s_get_clsname_for_code); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_clsname_for_code); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_clsname_for_code)) __PYX_ERR(0, 349, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_clsname_for_code, __pyx_t_2) < 0) __PYX_ERR(0, 169, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_clsname_for_code, __pyx_t_2) < 0) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":170 + /* "_pydevd_bundle/pydevd_cython.pyx":350 * from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace * from _pydevd_bundle.pydevd_utils import get_clsname_for_code * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame # <<<<<<<<<<<<<< * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK * import sys */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_get_abs_path_real_path_and_base); __Pyx_GIVEREF(__pyx_n_s_get_abs_path_real_path_and_base); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_abs_path_real_path_and_base); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_get_abs_path_real_path_and_base)) __PYX_ERR(0, 350, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 350, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_1) < 0) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_3) < 0) __PYX_ERR(0, 350, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":171 + /* "_pydevd_bundle/pydevd_cython.pyx":351 * from _pydevd_bundle.pydevd_utils import get_clsname_for_code * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK # <<<<<<<<<<<<<< * import sys - * try: + * */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_constant_to_str); __Pyx_GIVEREF(__pyx_n_s_constant_to_str); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_constant_to_str); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_constant_to_str)) __PYX_ERR(0, 351, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_CMD_SET_FUNCTION_BREAK); __Pyx_GIVEREF(__pyx_n_s_CMD_SET_FUNCTION_BREAK); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_CMD_SET_FUNCTION_BREAK); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_comm_const, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_CMD_SET_FUNCTION_BREAK)) __PYX_ERR(0, 351, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_comm_const, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_constant_to_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_constant_to_str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_constant_to_str, __pyx_t_2) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_constant_to_str, __pyx_t_2) < 0) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_CMD_SET_FUNCTION_BREAK); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_CMD_SET_FUNCTION_BREAK); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_t_2) < 0) __PYX_ERR(0, 171, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_t_2) < 0) __PYX_ERR(0, 351, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":172 + /* "_pydevd_bundle/pydevd_cython.pyx":352 * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK * import sys # <<<<<<<<<<<<<< + * * try: - * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_3) < 0) __PYX_ERR(0, 352, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":173 - * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":354 * import sys + * * try: # <<<<<<<<<<<<<< * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset * except ImportError: @@ -38802,50 +47872,50 @@ if (!__Pyx_RefNanny) { { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_3); + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":174 - * import sys + /* "_pydevd_bundle/pydevd_cython.pyx":355 + * * try: * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset # <<<<<<<<<<<<<< * except ImportError: * */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L2_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_get_smart_step_into_variant_from); __Pyx_GIVEREF(__pyx_n_s_get_smart_step_into_variant_from); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_smart_step_into_variant_from); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L2_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_get_smart_step_into_variant_from)) __PYX_ERR(0, 355, __pyx_L2_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L2_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_1) < 0) __PYX_ERR(0, 174, __pyx_L2_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_3) < 0) __PYX_ERR(0, 355, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":173 - * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":354 * import sys + * * try: # <<<<<<<<<<<<<< * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset * except ImportError: */ } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L7_try_end; __pyx_L2_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":175 + /* "_pydevd_bundle/pydevd_cython.pyx":356 * try: * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset * except ImportError: # <<<<<<<<<<<<<< @@ -38855,126 +47925,126 @@ if (!__Pyx_RefNanny) { __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); if (__pyx_t_6) { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_7) < 0) __PYX_ERR(0, 175, __pyx_L4_except_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_7) < 0) __PYX_ERR(0, 356, __pyx_L4_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_7); - /* "_pydevd_bundle/pydevd_cython.pyx":177 + /* "_pydevd_bundle/pydevd_cython.pyx":358 * except ImportError: * * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< * return None * */ - __pyx_t_8 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_3get_smart_step_into_variant_from_frame_offset, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L4_except_error) + __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9get_smart_step_into_variant_from_frame_offset, 0, __pyx_n_s_get_smart_step_into_variant_from, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 358, __pyx_L4_except_error) __Pyx_GOTREF(__pyx_t_8); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_8) < 0) __PYX_ERR(0, 177, __pyx_L4_except_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_8) < 0) __PYX_ERR(0, 358, __pyx_L4_except_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L3_exception_handled; } goto __pyx_L4_except_error; - __pyx_L4_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":173 - * from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK + /* "_pydevd_bundle/pydevd_cython.pyx":354 * import sys + * * try: # <<<<<<<<<<<<<< * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset * except ImportError: */ - __Pyx_XGIVEREF(__pyx_t_3); + __pyx_L4_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_4, __pyx_t_5); goto __pyx_L1_error; __pyx_L3_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_4, __pyx_t_5); __pyx_L7_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":197 + /* "_pydevd_bundle/pydevd_cython.pyx":379 * # ENDIF * * basename = os.path.basename # <<<<<<<<<<<<<< * - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_os); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_basename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 197, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_basename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_basename, __pyx_t_7) < 0) __PYX_ERR(0, 197, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_basename, __pyx_t_7) < 0) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":199 + /* "_pydevd_bundle/pydevd_cython.pyx":381 * basename = os.path.basename * - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') # <<<<<<<<<<<<<< - * DEBUG_START = ('pydevd.py', 'run') - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") # <<<<<<<<<<<<<< + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_re); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 199, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_compile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 199, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_t_7) < 0) __PYX_ERR(0, 199, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_t_7) < 0) __PYX_ERR(0, 381, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":200 + /* "_pydevd_bundle/pydevd_cython.pyx":382 * - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') - * DEBUG_START = ('pydevd.py', 'run') # <<<<<<<<<<<<<< - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') - * TRACE_PROPERTY = 'pydevd_traceproperty.py' + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") # <<<<<<<<<<<<<< + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START, __pyx_tuple__23) < 0) __PYX_ERR(0, 200, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START, __pyx_tuple__40) < 0) __PYX_ERR(0, 382, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":201 - * IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') - * DEBUG_START = ('pydevd.py', 'run') - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') # <<<<<<<<<<<<<< - * TRACE_PROPERTY = 'pydevd_traceproperty.py' + /* "_pydevd_bundle/pydevd_cython.pyx":383 + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") # <<<<<<<<<<<<<< + * TRACE_PROPERTY = "pydevd_traceproperty.py" * */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START_PY3K, __pyx_tuple__24) < 0) __PYX_ERR(0, 201, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START_PY3K, __pyx_tuple__41) < 0) __PYX_ERR(0, 383, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":202 - * DEBUG_START = ('pydevd.py', 'run') - * DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') - * TRACE_PROPERTY = 'pydevd_traceproperty.py' # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":384 + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" # <<<<<<<<<<<<<< * * import dis */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRACE_PROPERTY, __pyx_kp_s_pydevd_traceproperty_py) < 0) __PYX_ERR(0, 202, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRACE_PROPERTY, __pyx_kp_s_pydevd_traceproperty_py) < 0) __PYX_ERR(0, 384, __pyx_L1_error) - /* "_pydevd_bundle/pydevd_cython.pyx":204 - * TRACE_PROPERTY = 'pydevd_traceproperty.py' + /* "_pydevd_bundle/pydevd_cython.pyx":386 + * TRACE_PROPERTY = "pydevd_traceproperty.py" * * import dis # <<<<<<<<<<<<<< * * try: */ - __pyx_t_7 = __Pyx_Import(__pyx_n_s_dis, 0, -1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 204, __pyx_L1_error) + __pyx_t_7 = __Pyx_ImportDottedModule(__pyx_n_s_dis, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 386, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dis, __pyx_t_7) < 0) __PYX_ERR(0, 204, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dis, __pyx_t_7) < 0) __PYX_ERR(0, 386, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":206 + /* "_pydevd_bundle/pydevd_cython.pyx":388 * import dis * * try: # <<<<<<<<<<<<<< @@ -38984,24 +48054,24 @@ if (!__Pyx_RefNanny) { { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3); + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_4, &__pyx_t_1); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); /*try:*/ { - /* "_pydevd_bundle/pydevd_cython.pyx":207 + /* "_pydevd_bundle/pydevd_cython.pyx":389 * * try: * StopAsyncIteration # <<<<<<<<<<<<<< * except NameError: * StopAsyncIteration = StopIteration */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_StopAsyncIteration); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 207, __pyx_L10_error) + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_StopAsyncIteration); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 389, __pyx_L10_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":206 + /* "_pydevd_bundle/pydevd_cython.pyx":388 * import dis * * try: # <<<<<<<<<<<<<< @@ -39011,15 +48081,15 @@ if (!__Pyx_RefNanny) { } __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; goto __pyx_L15_try_end; __pyx_L10_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":208 + /* "_pydevd_bundle/pydevd_cython.pyx":390 * try: * StopAsyncIteration * except NameError: # <<<<<<<<<<<<<< @@ -39029,231 +48099,391 @@ if (!__Pyx_RefNanny) { __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_NameError); if (__pyx_t_6) { __Pyx_AddTraceback("_pydevd_bundle.pydevd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 208, __pyx_L12_except_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 390, __pyx_L12_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); - /* "_pydevd_bundle/pydevd_cython.pyx":209 + /* "_pydevd_bundle/pydevd_cython.pyx":391 * StopAsyncIteration * except NameError: * StopAsyncIteration = StopIteration # <<<<<<<<<<<<<< * * */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_StopAsyncIteration, __pyx_builtin_StopIteration) < 0) __PYX_ERR(0, 209, __pyx_L12_except_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_StopAsyncIteration, __pyx_builtin_StopIteration) < 0) __PYX_ERR(0, 391, __pyx_L12_except_error) __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L11_exception_handled; } goto __pyx_L12_except_error; - __pyx_L12_except_error:; - /* "_pydevd_bundle/pydevd_cython.pyx":206 + /* "_pydevd_bundle/pydevd_cython.pyx":388 * import dis * * try: # <<<<<<<<<<<<<< * StopAsyncIteration * except NameError: */ + __pyx_L12_except_error:; __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_1); goto __pyx_L1_error; __pyx_L11_exception_handled:; __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_1); __pyx_L15_try_end:; } - /* "_pydevd_bundle/pydevd_cython.pyx":287 - * # Same thing in the main debugger but only considering the file contents, while the one in the main debugger - * # considers the user input (so, the actual result must be a join of both). - * filename_to_lines_where_exceptions_are_ignored = {} # <<<<<<<<<<<<<< - * filename_to_stat_info = {} + /* "_pydevd_bundle/pydevd_cython.pyx":395 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # <<<<<<<<<<<<<< + * # ELSE + * # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_11is_unhandled_exception, 0, __pyx_n_s_is_unhandled_exception, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_unhandled_exception, __pyx_t_2) < 0) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TryExceptContainerObj___reduce, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TryExceptContainerObj___setstat, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython__TryExceptContainerObj); + + /* "_pydevd_bundle/pydevd_cython.pyx":491 + * # ENDIF + * + * def set_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].set_suspend(*args, **kwargs) + * + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_3set_suspend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame_set_suspend, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_set_suspend, __pyx_t_2) < 0) __PYX_ERR(0, 491, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + + /* "_pydevd_bundle/pydevd_cython.pyx":494 + * self._args[0].set_suspend(*args, **kwargs) + * + * def do_wait_suspend(self, *args, **kwargs): # <<<<<<<<<<<<<< + * self._args[0].do_wait_suspend(*args, **kwargs) * */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_5do_wait_suspend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame_do_wait_suspend, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_dict, __pyx_n_s_filename_to_lines_where_exceptio, __pyx_t_2) < 0) __PYX_ERR(0, 287, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_do_wait_suspend, __pyx_t_2) < 0) __PYX_ERR(0, 494, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); - /* "_pydevd_bundle/pydevd_cython.pyx":288 - * # considers the user input (so, the actual result must be a join of both). - * filename_to_lines_where_exceptions_are_ignored = {} - * filename_to_stat_info = {} # <<<<<<<<<<<<<< + /* "_pydevd_bundle/pydevd_cython.pyx":498 * * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def trace_exception(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef tuple exc_info; */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_7trace_exception, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame_trace_exception, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame->tp_dict, __pyx_n_s_filename_to_stat_info, __pyx_t_2) < 0) __PYX_ERR(0, 288, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_trace_exception, __pyx_t_2) < 0) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); - /* "_pydevd_bundle/pydevd_cython.pyx":1401 + /* "_pydevd_bundle/pydevd_cython.pyx":527 + * return self.trace_exception * - * # end trace_dispatch + * def handle_user_exception(self, frame): # <<<<<<<<<<<<<< + * exc_info = self.exc_info + * if exc_info: + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_9handle_user_exception, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame_handle_user_exception, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_handle_user_exception, __pyx_t_2) < 0) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + + /* "_pydevd_bundle/pydevd_cython.pyx":635 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef trace_dispatch(self, frame, str event, arg): # <<<<<<<<<<<<<< + * cdef tuple abs_path_canonical_path_and_base; + * cdef bint is_exception_event; + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_11trace_dispatch, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame_trace_dispatch, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_trace_dispatch, __pyx_t_2) < 0) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_13__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame___reduce_cython, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_PyDBFrame, (type(self), 0x3a8c26e, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_PyDBFrame__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9PyDBFrame_15__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_PyDBFrame___setstate_cython, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBFrame); + + /* "_pydevd_bundle/pydevd_cython.pyx":1377 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): # <<<<<<<<<<<<<< + * cdef bint should_stop; + * cdef bint was_just_raised; + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_13should_stop_on_exception, 0, __pyx_n_s_should_stop_on_exception, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_should_stop_on_exception, __pyx_t_2) < 0) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1505 + * # Same thing in the main debugger but only considering the file contents, while the one in the main debugger + * # considers the user input (so, the actual result must be a join of both). + * filename_to_lines_where_exceptions_are_ignored: dict = {} # <<<<<<<<<<<<<< + * filename_to_stat_info: dict = {} + * + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_filename_to_lines_where_exceptio, __pyx_t_2) < 0) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1506 + * # considers the user input (so, the actual result must be a join of both). + * filename_to_lines_where_exceptions_are_ignored: dict = {} + * filename_to_stat_info: dict = {} # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_filename_to_stat_info, __pyx_t_2) < 0) __PYX_ERR(0, 1506, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1510 + * + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def handle_exception(py_db, thread, frame, arg, str exception_type): # <<<<<<<<<<<<<< + * cdef bint stopped; + * cdef tuple abs_real_path_and_base; + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_15handle_exception, 0, __pyx_n_s_handle_exception, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_handle_exception, __pyx_t_2) < 0) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1630 + * + * return stopped * from _pydev_bundle.pydev_is_thread_alive import is_thread_alive # <<<<<<<<<<<<<< * from _pydev_bundle.pydev_log import exception as pydev_log_exception * from _pydev_bundle._pydev_saved_modules import threading */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_is_thread_alive); __Pyx_GIVEREF(__pyx_n_s_is_thread_alive); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_is_thread_alive); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydev_bundle_pydev_is_thread_al, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1401, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_is_thread_alive)) __PYX_ERR(0, 1630, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydev_bundle_pydev_is_thread_al, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1630, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_is_thread_alive); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_is_thread_alive); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1630, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_thread_alive, __pyx_t_2) < 0) __PYX_ERR(0, 1401, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_thread_alive, __pyx_t_2) < 0) __PYX_ERR(0, 1630, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1402 - * # end trace_dispatch + /* "_pydevd_bundle/pydevd_cython.pyx":1631 + * return stopped * from _pydev_bundle.pydev_is_thread_alive import is_thread_alive * from _pydev_bundle.pydev_log import exception as pydev_log_exception # <<<<<<<<<<<<<< * from _pydev_bundle._pydev_saved_modules import threading - * from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, + * from _pydevd_bundle.pydevd_constants import ( */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1402, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_exception); __Pyx_GIVEREF(__pyx_n_s_exception); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_exception); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle_pydev_log, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1402, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_exception)) __PYX_ERR(0, 1631, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle_pydev_log, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1631, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1402, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log_exception, __pyx_t_1) < 0) __PYX_ERR(0, 1402, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log_exception, __pyx_t_3) < 0) __PYX_ERR(0, 1631, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1403 + /* "_pydevd_bundle/pydevd_cython.pyx":1632 * from _pydev_bundle.pydev_is_thread_alive import is_thread_alive * from _pydev_bundle.pydev_log import exception as pydev_log_exception * from _pydev_bundle._pydev_saved_modules import threading # <<<<<<<<<<<<<< - * from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, - * USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, ForkSafeLock) + * from _pydevd_bundle.pydevd_constants import ( + * get_current_thread_id, */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1403, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_threading); __Pyx_GIVEREF(__pyx_n_s_threading); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_threading); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1403, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_threading)) __PYX_ERR(0, 1632, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1403, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_2) < 0) __PYX_ERR(0, 1403, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_2) < 0) __PYX_ERR(0, 1632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1404 - * from _pydev_bundle.pydev_log import exception as pydev_log_exception + /* "_pydevd_bundle/pydevd_cython.pyx":1634 * from _pydev_bundle._pydev_saved_modules import threading - * from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, # <<<<<<<<<<<<<< - * USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, ForkSafeLock) - * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER + * from _pydevd_bundle.pydevd_constants import ( + * get_current_thread_id, # <<<<<<<<<<<<<< + * NO_FTRACE, + * USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, */ - __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1634, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_get_current_thread_id); __Pyx_GIVEREF(__pyx_n_s_get_current_thread_id); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_current_thread_id); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_get_current_thread_id)) __PYX_ERR(0, 1634, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_NO_FTRACE); __Pyx_GIVEREF(__pyx_n_s_NO_FTRACE); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_NO_FTRACE); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_NO_FTRACE)) __PYX_ERR(0, 1634, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); __Pyx_GIVEREF(__pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); - PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA)) __PYX_ERR(0, 1634, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_ForkSafeLock); __Pyx_GIVEREF(__pyx_n_s_ForkSafeLock); - PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_ForkSafeLock); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1404, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_ForkSafeLock)) __PYX_ERR(0, 1634, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + __Pyx_GIVEREF(__pyx_n_s_PYDEVD_USE_SYS_MONITORING); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_PYDEVD_USE_SYS_MONITORING)) __PYX_ERR(0, 1634, __pyx_L1_error); + + /* "_pydevd_bundle/pydevd_cython.pyx":1633 + * from _pydev_bundle.pydev_log import exception as pydev_log_exception + * from _pydev_bundle._pydev_saved_modules import threading + * from _pydevd_bundle.pydevd_constants import ( # <<<<<<<<<<<<<< + * get_current_thread_id, + * NO_FTRACE, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_current_thread_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_current_thread_id, __pyx_t_1) < 0) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_FTRACE, __pyx_t_1) < 0) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, __pyx_t_1) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ForkSafeLock, __pyx_t_1) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_current_thread_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_current_thread_id, __pyx_t_3) < 0) __PYX_ERR(0, 1634, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_NO_FTRACE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_FTRACE, __pyx_t_3) < 0) __PYX_ERR(0, 1635, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA, __pyx_t_3) < 0) __PYX_ERR(0, 1636, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ForkSafeLock, __pyx_t_3) < 0) __PYX_ERR(0, 1637, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PYDEVD_USE_SYS_MONITORING); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYDEVD_USE_SYS_MONITORING, __pyx_t_3) < 0) __PYX_ERR(0, 1638, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1406 - * from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, - * USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, ForkSafeLock) + /* "_pydevd_bundle/pydevd_cython.pyx":1640 + * PYDEVD_USE_SYS_MONITORING, + * ) * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER # <<<<<<<<<<<<<< * - * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * # fmt: off */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1406, __pyx_L1_error) + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_get_abs_path_real_path_and_base); __Pyx_GIVEREF(__pyx_n_s_get_abs_path_real_path_and_base); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_abs_path_real_path_and_base); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_abs_path_real_path_and_base)) __PYX_ERR(0, 1640, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); __Pyx_GIVEREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER)) __PYX_ERR(0, 1640, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1406, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_2) < 0) __PYX_ERR(0, 1406, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_2) < 0) __PYX_ERR(0, 1640, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1406, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_t_2) < 0) __PYX_ERR(0, 1406, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_t_2) < 0) __PYX_ERR(0, 1640, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1429 + /* "_pydevd_bundle/pydevd_cython.pyx":1667 * # - Breakpoints are changed * # It can be used when running regularly (without step over/step in/step return) * global_cache_skips = {} # <<<<<<<<<<<<<< * global_cache_frame_skips = {} * */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_cache_skips, __pyx_t_1) < 0) __PYX_ERR(0, 1429, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_cache_skips, __pyx_t_3) < 0) __PYX_ERR(0, 1667, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1430 + /* "_pydevd_bundle/pydevd_cython.pyx":1668 * # It can be used when running regularly (without step over/step in/step return) * global_cache_skips = {} * global_cache_frame_skips = {} # <<<<<<<<<<<<<< * * _global_notify_skipped_step_in = False */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1430, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_cache_frame_skips, __pyx_t_1) < 0) __PYX_ERR(0, 1430, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_cache_frame_skips, __pyx_t_3) < 0) __PYX_ERR(0, 1668, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1432 + /* "_pydevd_bundle/pydevd_cython.pyx":1670 * global_cache_frame_skips = {} * * _global_notify_skipped_step_in = False # <<<<<<<<<<<<<< @@ -39265,126 +48495,285 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF_SET(__pyx_v_14_pydevd_bundle_13pydevd_cython__global_notify_skipped_step_in, ((PyObject*)Py_False)); __Pyx_GIVEREF(Py_False); - /* "_pydevd_bundle/pydevd_cython.pyx":1433 + /* "_pydevd_bundle/pydevd_cython.pyx":1671 * * _global_notify_skipped_step_in = False * _global_notify_skipped_step_in_lock = ForkSafeLock() # <<<<<<<<<<<<<< * * */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1433, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1671, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_notify_skipped_step_in_l, __pyx_t_2) < 0) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_notify_skipped_step_in_l, __pyx_t_2) < 0) __PYX_ERR(0, 1671, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1436 + /* "_pydevd_bundle/pydevd_cython.pyx":1674 * * * def notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< * global _global_notify_skipped_step_in * */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_5notify_skipped_step_in_because_of_filters, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_17notify_skipped_step_in_because_of_filters, 0, __pyx_n_s_notify_skipped_step_in_because_o, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1674, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_notify_skipped_step_in_because_o, __pyx_t_2) < 0) __PYX_ERR(0, 1674, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":1700 + * Py_XDECREF (method_obj) + * return SafeCallWrapper(ret) if ret is not None else None + * def get_method_object(self): # <<<<<<<<<<<<<< + * return self.method_object + * # ELSE + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_5get_method_object, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SafeCallWrapper_get_method_objec, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1700, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper, __pyx_n_s_get_method_object, __pyx_t_2) < 0) __PYX_ERR(0, 1700, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SafeCallWrapper___reduce_cython, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SafeCallWrapper, (type(self), 0xa14289b, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SafeCallWrapper__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_15SafeCallWrapper_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SafeCallWrapper___setstate_cytho, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_notify_skipped_step_in_because_o, __pyx_t_2) < 0) __PYX_ERR(0, 1436, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_SafeCallWrapper); - /* "_pydevd_bundle/pydevd_cython.pyx":1466 + /* "_pydevd_bundle/pydevd_cython.pyx":1707 * * * def fix_top_level_trace_and_get_trace_func(py_db, frame): # <<<<<<<<<<<<<< + * # fmt: off * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - * cdef str filename; */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_7fix_top_level_trace_and_get_trace_func, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1466, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_19fix_top_level_trace_and_get_trace_func, 0, __pyx_n_s_fix_top_level_trace_and_get_trac, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_t_2) < 0) __PYX_ERR(0, 1466, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_t_2) < 0) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1594 + /* "_pydevd_bundle/pydevd_cython.pyx":1845 * * * def trace_dispatch(py_db, frame, event, arg): # <<<<<<<<<<<<<< * thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) * if thread_trace_func is None: */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_9trace_dispatch, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1594, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_21trace_dispatch, 0, __pyx_n_s_trace_dispatch, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1845, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_trace_dispatch, __pyx_t_2) < 0) __PYX_ERR(0, 1594, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_trace_dispatch, __pyx_t_2) < 0) __PYX_ERR(0, 1845, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_bundle/pydevd_cython.pyx":1868 + * # fmt: on + * + * def trace_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< + * # Note that we ignore the frame as this tracing method should only be put in topmost frames already. + * # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_3trace_unhandled_exceptions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_2, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, __pyx_n_s_trace_unhandled_exceptions, __pyx_t_2) < 0) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + + /* "_pydevd_bundle/pydevd_cython.pyx":1882 + * return self.trace_unhandled_exceptions + * + * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< + * return self.trace_unhandled_exceptions + * + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_5get_trace_dispatch_func, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_3, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1882, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, __pyx_n_s_get_trace_dispatch_func, __pyx_t_2) < 0) __PYX_ERR(0, 1882, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_4, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, (type(self), 0x121e1fb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_43TopLevelThreadTracerOnlyUnhandledExceptions_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerOnlyUnhandle_5, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerOnlyUnhandledExceptions); + + /* "_pydevd_bundle/pydevd_cython.pyx":1926 + * # fmt: on + * + * def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # <<<<<<<<<<<<<< + * # DEBUG = 'code_to_debug' in frame.f_code.co_filename + * # if DEBUG: print('trace_dispatch_and_unhandled_exceptions: %s %s %s %s %s %s' % (event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno, self._frame_trace_dispatch, frame.f_lineno)) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_3trace_dispatch_and_unhandled_exceptions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerNoBackFrame_2, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1926, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, __pyx_n_s_trace_dispatch_and_unhandled_exc, __pyx_t_2) < 0) __PYX_ERR(0, 1926, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + + /* "_pydevd_bundle/pydevd_cython.pyx":1961 + * return ret + * + * def get_trace_dispatch_func(self): # <<<<<<<<<<<<<< + * return self.trace_dispatch_and_unhandled_exceptions + * + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_5get_trace_dispatch_func, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerNoBackFrame_3, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__77)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1961, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, __pyx_n_s_get_trace_dispatch_func, __pyx_t_2) < 0) __PYX_ERR(0, 1961, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerNoBackFrame_4, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_TopLevelThreadTracerNoBackFrame, (type(self), 0x3f5f7e9, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_TopLevelThreadTracerNoBackFrame__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_31TopLevelThreadTracerNoBackFrame_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TopLevelThreadTracerNoBackFrame_5, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__79)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_TopLevelThreadTracerNoBackFrame); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadTracer___reduce_cython, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadTracer, (type(self), 0x121e1fb, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadTracer__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_12ThreadTracer_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadTracer___setstate_cython, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(2, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer); + + /* "_pydevd_bundle/pydevd_cython.pyx":2154 * * * if USE_CUSTOM_SYS_CURRENT_FRAMES_MAP: # <<<<<<<<<<<<<< * # This is far from ideal, as we'll leak frames (we'll always have the last created frame, not really * # the last topmost frame saved -- this should be Ok for our usage, but it may leak frames and things */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_USE_CUSTOM_SYS_CURRENT_FRAMES_MA); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1868, __pyx_L1_error) + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 2154, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_9) { - /* "_pydevd_bundle/pydevd_cython.pyx":1876 + /* "_pydevd_bundle/pydevd_cython.pyx":2162 * # * # See: https://github.com/IronLanguages/main/issues/1630 * from _pydevd_bundle.pydevd_constants import constructed_tid_to_last_frame # <<<<<<<<<<<<<< * * _original_call = ThreadTracer.__call__ */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1876, __pyx_L1_error) + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_constructed_tid_to_last_frame); __Pyx_GIVEREF(__pyx_n_s_constructed_tid_to_last_frame); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_constructed_tid_to_last_frame); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1876, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_constructed_tid_to_last_frame)) __PYX_ERR(0, 2162, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_constructed_tid_to_last_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1876, __pyx_L1_error) + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_constructed_tid_to_last_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2162, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_constructed_tid_to_last_frame, __pyx_t_2) < 0) __PYX_ERR(0, 1876, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_constructed_tid_to_last_frame, __pyx_t_2) < 0) __PYX_ERR(0, 2162, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1878 + /* "_pydevd_bundle/pydevd_cython.pyx":2164 * from _pydevd_bundle.pydevd_constants import constructed_tid_to_last_frame * * _original_call = ThreadTracer.__call__ # <<<<<<<<<<<<<< * * def __call__(self, frame, event, arg): */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_call_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_original_call, __pyx_t_1) < 0) __PYX_ERR(0, 1878, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_call_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_original_call, __pyx_t_3) < 0) __PYX_ERR(0, 2164, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1880 + /* "_pydevd_bundle/pydevd_cython.pyx":2166 * _original_call = ThreadTracer.__call__ * * def __call__(self, frame, event, arg): # <<<<<<<<<<<<<< * constructed_tid_to_last_frame[self._args[1].ident] = frame * return _original_call(self, frame, event, arg) */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_11__call__, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1880, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_call_2, __pyx_t_1) < 0) __PYX_ERR(0, 1880, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_23__call__, 0, __pyx_n_s_call_2, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_call_2, __pyx_t_3) < 0) __PYX_ERR(0, 2166, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1884 + /* "_pydevd_bundle/pydevd_cython.pyx":2170 * return _original_call(self, frame, event, arg) * * ThreadTracer.__call__ = __call__ # <<<<<<<<<<<<<< + * + * if PYDEVD_USE_SYS_MONITORING: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_call_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1884, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_call_2, __pyx_t_1) < 0) __PYX_ERR(0, 1884, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_call_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_ptype_14_pydevd_bundle_13pydevd_cython_ThreadTracer), __pyx_n_s_call_2, __pyx_t_3) < 0) __PYX_ERR(0, 2170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "_pydevd_bundle/pydevd_cython.pyx":1868 + /* "_pydevd_bundle/pydevd_cython.pyx":2154 * * * if USE_CUSTOM_SYS_CURRENT_FRAMES_MAP: # <<<<<<<<<<<<<< @@ -39393,37 +48782,70 @@ if (!__Pyx_RefNanny) { */ } + /* "_pydevd_bundle/pydevd_cython.pyx":2172 + * ThreadTracer.__call__ = __call__ + * + * if PYDEVD_USE_SYS_MONITORING: # <<<<<<<<<<<<<< + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYDEVD_USE_SYS_MONITORING); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 2172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_9) { + + /* "_pydevd_bundle/pydevd_cython.pyx":2174 + * if PYDEVD_USE_SYS_MONITORING: + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): # <<<<<<<<<<<<<< + * raise RuntimeError("Not used in sys.monitoring mode.") + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_25fix_top_level_trace_and_get_trace_func, 0, __pyx_n_s_fix_top_level_trace_and_get_trac, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__83)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_t_3) < 0) __PYX_ERR(0, 2174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_bundle/pydevd_cython.pyx":2172 + * ThreadTracer.__call__ = __call__ + * + * if PYDEVD_USE_SYS_MONITORING: # <<<<<<<<<<<<<< + * + * def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + */ + } + /* "(tree fragment)":1 * def __pyx_unpickle_PyDBAdditionalThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_13__pyx_unpickle_PyDBAdditionalThreadInfo, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_27__pyx_unpickle_PyDBAdditionalThreadInfo, 0, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_PyDBAdditionalThr, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":11 * __pyx_unpickle_PyDBAdditionalThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result * cdef __pyx_unpickle_PyDBAdditionalThreadInfo__set_state(PyDBAdditionalThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_tracing = __pyx_state[1]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[2]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[3]; __pyx_result.pydev_django_resolve_frame = __pyx_state[4]; __pyx_result.pydev_func_name = __pyx_state[5]; __pyx_result.pydev_message = __pyx_state[6]; __pyx_result.pydev_next_line = __pyx_state[7]; __pyx_result.pydev_notify_kill = __pyx_state[8]; __pyx_result.pydev_original_step_cmd = __pyx_state[9]; __pyx_result.pydev_smart_child_offset = __pyx_state[10]; __pyx_result.pydev_smart_parent_offset = __pyx_state[11]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[12]; __pyx_result.pydev_smart_step_stop = __pyx_state[13]; __pyx_result.pydev_state = __pyx_state[14]; __pyx_result.pydev_step_cmd = __pyx_state[15]; __pyx_result.pydev_step_stop = __pyx_state[16]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[17]; __pyx_result.step_in_initial_location = __pyx_state[18]; __pyx_result.suspend_type = __pyx_state[19]; __pyx_result.suspended_at_unhandled = __pyx_state[20]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[21]; __pyx_result.thread_tracer = __pyx_state[22]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[23]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[24]; __pyx_result.trace_suspend_type = __pyx_state[25] - * if len(__pyx_state) > 26 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.conditional_breakpoint_exception = __pyx_state[0]; __pyx_result.is_in_wait_loop = __pyx_state[1]; __pyx_result.is_tracing = __pyx_state[2]; __pyx_result.pydev_call_from_jinja2 = __pyx_state[3]; __pyx_result.pydev_call_inside_jinja2 = __pyx_state[4]; __pyx_result.pydev_django_resolve_frame = __pyx_state[5]; __pyx_result.pydev_func_name = __pyx_state[6]; __pyx_result.pydev_message = __pyx_state[7]; __pyx_result.pydev_next_line = __pyx_state[8]; __pyx_result.pydev_notify_kill = __pyx_state[9]; __pyx_result.pydev_original_step_cmd = __pyx_state[10]; __pyx_result.pydev_smart_child_offset = __pyx_state[11]; __pyx_result.pydev_smart_parent_offset = __pyx_state[12]; __pyx_result.pydev_smart_step_into_variants = __pyx_state[13]; __pyx_result.pydev_smart_step_stop = __pyx_state[14]; __pyx_result.pydev_state = __pyx_state[15]; __pyx_result.pydev_step_cmd = __pyx_state[16]; __pyx_result.pydev_step_stop = __pyx_state[17]; __pyx_result.pydev_use_scoped_step_frame = __pyx_state[18]; __pyx_result.step_in_initial_location = __pyx_state[19]; __pyx_result.suspend_type = __pyx_state[20]; __pyx_result.suspended_at_unhandled = __pyx_state[21]; __pyx_result.target_id_to_smart_step_into_variant = __pyx_state[22]; __pyx_result.thread_tracer = __pyx_state[23]; __pyx_result.top_level_thread_tracer_no_back_frames = __pyx_state[24]; __pyx_result.top_level_thread_tracer_unhandled = __pyx_state[25]; __pyx_result.trace_suspend_type = __pyx_state[26]; __pyx_result.weak_thread = __pyx_state[27] + * if len(__pyx_state) > 28 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_15__pyx_unpickle__TryExceptContainerObj, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_29__pyx_unpickle__TryExceptContainerObj, 0, __pyx_n_s_pyx_unpickle__TryExceptContain, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":1 * def __pyx_unpickle_PyDBFrame(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_17__pyx_unpickle_PyDBFrame, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_PyDBFrame, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_31__pyx_unpickle_PyDBFrame, 0, __pyx_n_s_pyx_unpickle_PyDBFrame, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_PyDBFrame, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":11 * __pyx_unpickle_PyDBFrame__set_state( __pyx_result, __pyx_state) @@ -39432,20 +48854,20 @@ if (!__Pyx_RefNanny) { * __pyx_result._args = __pyx_state[0]; __pyx_result.exc_info = __pyx_state[1]; __pyx_result.should_skip = __pyx_state[2] * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_19__pyx_unpickle_SafeCallWrapper, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_SafeCallWrapper, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_33__pyx_unpickle_SafeCallWrapper, 0, __pyx_n_s_pyx_unpickle_SafeCallWrapper, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__88)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_SafeCallWrapper, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":1 * def __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_21__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_TopLevelThreadTra, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_35__pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions, 0, __pyx_n_s_pyx_unpickle_TopLevelThreadTra, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_TopLevelThreadTra, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":11 * __pyx_unpickle_TopLevelThreadTracerOnlyUnhandledExceptions__set_state( __pyx_result, __pyx_state) @@ -39454,44 +48876,54 @@ if (!__Pyx_RefNanny) { * __pyx_result._args = __pyx_state[0] * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_23__pyx_unpickle_TopLevelThreadTracerNoBackFrame, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_37__pyx_unpickle_TopLevelThreadTracerNoBackFrame, 0, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__90)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_TopLevelThreadTra_2, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":1 * def __pyx_unpickle_ThreadTracer(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_25__pyx_unpickle_ThreadTracer, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_ThreadTracer, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_14_pydevd_bundle_13pydevd_cython_39__pyx_unpickle_ThreadTracer, 0, __pyx_n_s_pyx_unpickle_ThreadTracer, NULL, __pyx_n_s_pydevd_bundle_pydevd_cython, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_ThreadTracer, __pyx_t_3) < 0) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_bundle/pydevd_cython.pyx":1 * from __future__ import print_function # <<<<<<<<<<<<<< * * # Important: Autogenerated file. */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /*--- Wrapped vars code ---*/ goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); if (__pyx_m) { - if (__pyx_d) { + if (__pyx_d && stringtab_initialized) { __Pyx_AddTraceback("init _pydevd_bundle.pydevd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); } + #if !CYTHON_USE_MODULE_STATE Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init _pydevd_bundle.pydevd_cython"); } @@ -39505,22 +48937,140 @@ if (!__Pyx_RefNanny) { return; #endif } - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif } #endif @@ -39538,10 +49088,39 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject } #endif +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + /* GetBuiltinName */ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 "name '%U' is not defined", name); @@ -39552,6 +49131,231 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { return result; } +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 0x030500A1 +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) if (likely(result)) { @@ -39661,6 +49499,14 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) } else if (unlikely(PyErr_Occurred())) { return NULL; } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } #else result = PyDict_GetItem(__pyx_d, name); __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) @@ -39680,7 +49526,7 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) } /* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, PyObject *globals) { PyFrameObject *f; @@ -39709,7 +49555,6 @@ static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args --tstate->recursion_depth; return result; } -#if 1 || PY_VERSION_HEX < 0x030600B1 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); PyObject *globals = PyFunction_GET_GLOBALS(func); @@ -39725,9 +49570,15 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, PyObject *result; assert(kwargs == NULL || PyDict_Check(kwargs)); nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { return NULL; } + #endif if ( #if PY_MAJOR_VERSION >= 3 co->co_kwonlyargcount == 0 && @@ -39796,7 +49647,6 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, return result; } #endif -#endif /* PyObjectCall */ #if CYTHON_COMPILING_IN_CPYTHON @@ -39805,8 +49655,13 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg ternaryfunc call = Py_TYPE(func)->tp_call; if (unlikely(!call)) return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif result = (*call)(func, arg, kw); Py_LeaveRecursiveCall(); if (unlikely(!result) && unlikely(!PyErr_Occurred())) { @@ -39823,10 +49678,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { PyObject *self, *result; PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif result = cfunc(self, arg); Py_LeaveRecursiveCall(); if (unlikely(!result) && unlikely(!PyErr_Occurred())) { @@ -39838,183 +49698,273 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject } #endif -/* PyObjectCallNoArg */ +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); } #endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) -#else - if (likely(PyCFunction_Check(func))) -#endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); } } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); } -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL + #endif + #endif + #if CYTHON_FAST_PYCALL if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (__Pyx_PyFastCFunction_Check(func)) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); } - return __Pyx__PyObject_CallOneArg(func, arg); + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif } -#else + +/* PyObjectCallOneArg */ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -#endif -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif } -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; i= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; #endif - for (i=0; i= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } } + Py_XDECREF(key); + Py_XDECREF(value); return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; } -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) { - PyObject *exc_type = tstate->curexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif -/* GetAttr */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); +/* RaiseUnexpectedTypeError */ +static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; } /* GetAttr3 */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 static PyObject *__Pyx_GetAttr3Default(PyObject *d) { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign @@ -40024,16 +49974,38 @@ static PyObject *__Pyx_GetAttr3Default(PyObject *d) { Py_INCREF(d); return d; } +#endif static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); + PyObject *r; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + int res = PyObject_GetOptionalAttr(o, n, &r); + return (res != 0) ? r : __Pyx_NewRef(d); +#else + #if CYTHON_USE_TYPE_SLOTS + if (likely(PyString_Check(n))) { + r = __Pyx_PyObject_GetAttrStrNoError(o, n); + if (unlikely(!r) && likely(!PyErr_Occurred())) { + r = __Pyx_NewRef(d); + } + return r; + } + #endif + r = PyObject_GetAttr(o, n); return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } /* RaiseException */ #if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); Py_XINCREF(type); if (!value || value == Py_None) value = NULL; @@ -40166,13 +50138,9 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject } PyErr_SetObject(type, value); if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE PyThreadState *tstate = __Pyx_PyThreadState_Current; PyObject* tmp_tb = tstate->curexc_traceback; if (tb != tmp_tb) { @@ -40180,6 +50148,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject tstate->curexc_traceback = tb; Py_XDECREF(tmp_tb); } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); #endif } bad: @@ -40189,12 +50163,12 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject #endif /* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate) { _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && exc_info->previous_item != NULL) { exc_info = exc_info->previous_item; @@ -40206,21 +50180,46 @@ __Pyx_PyErr_GetTopmostException(PyThreadState *tstate) /* SaveResetException */ #if CYTHON_FAST_THREAD_STATE static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); *type = exc_info->exc_type; *value = exc_info->exc_value; *tb = exc_info->exc_traceback; - #else + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else *type = tstate->exc_type; *value = tstate->exc_value; *tb = tstate->exc_traceback; - #endif Py_XINCREF(*type); Py_XINCREF(*value); Py_XINCREF(*tb); + #endif } static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else PyObject *tmp_type, *tmp_value, *tmp_tb; #if CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = tstate->exc_info; @@ -40241,6 +50240,7 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject Py_XDECREF(tmp_type); Py_XDECREF(tmp_value); Py_XDECREF(tmp_tb); + #endif } #endif @@ -40251,20 +50251,32 @@ static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) #endif { - PyObject *local_type, *local_value, *local_tb; + PyObject *local_type = NULL, *local_value, *local_tb = NULL; #if CYTHON_FAST_THREAD_STATE PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else local_type = tstate->curexc_type; local_value = tstate->curexc_value; local_tb = tstate->curexc_traceback; tstate->curexc_type = 0; tstate->curexc_value = 0; tstate->curexc_traceback = 0; + #endif #else PyErr_Fetch(&local_type, &local_value, &local_tb); #endif PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE if (unlikely(tstate->curexc_type)) #else if (unlikely(PyErr_Occurred())) @@ -40286,12 +50298,21 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) #if CYTHON_USE_EXC_INFO_STACK { _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else tmp_type = exc_info->exc_type; tmp_value = exc_info->exc_value; tmp_tb = exc_info->exc_traceback; exc_info->exc_type = local_type; exc_info->exc_value = local_value; exc_info->exc_traceback = local_tb; + #endif } #else tmp_type = tstate->exc_type; @@ -40318,450 +50339,481 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) return -1; } -/* PyObjectSetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); +/* PyObjectLookupSpecial */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); #if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); #endif - return PyObject_SetAttr(obj, attr_name, value); + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; } #endif -/* None */ -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; } - -/* pyfrozenset_new */ -static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) { - if (it) { - PyObject* result; -#if CYTHON_COMPILING_IN_PYPY - PyObject* args; - args = PyTuple_Pack(1, it); - if (unlikely(!args)) - return NULL; - result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL); - Py_DECREF(args); - return result; +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else - if (PyFrozenSet_CheckExact(it)) { - Py_INCREF(it); - return it; - } - result = PyFrozenSet_New(it); - if (unlikely(!result)) - return NULL; - if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result))) - return result; - Py_DECREF(result); + return PySequence_GetItem(o, i); #endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); } -#if CYTHON_USE_TYPE_SLOTS - return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, __pyx_empty_tuple, NULL); + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else - return PyObject_Call((PyObject*)&PyFrozenSet_Type, __pyx_empty_tuple, NULL); + return PySequence_GetItem(o, i); #endif } - -/* PySetContains */ -static int __Pyx_PySet_ContainsUnhashable(PyObject *set, PyObject *key) { - int result = -1; - if (PySet_Check(key) && PyErr_ExceptionMatches(PyExc_TypeError)) { - PyObject *tmpkey; - PyErr_Clear(); - tmpkey = __Pyx_PyFrozenSet_New(key); - if (tmpkey != NULL) { - result = PySet_Contains(set, tmpkey); - Py_DECREF(tmpkey); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; } } - return result; -} -static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq) { - int result = PySet_Contains(set, key); - if (unlikely(result < 0)) { - result = __Pyx_PySet_ContainsUnhashable(set, key); + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } } - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); } -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; } -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; +/* SliceObject */ +static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; +#if PY_MAJOR_VERSION < 3 + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_ass_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; + } + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; + } + return ms->sq_ass_slice(obj, cstart, cstop, value); + } +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_ass_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + { + int result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; + } +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_ass_subscript(obj, py_slice, value); +#else + result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); } + return result; } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif + "'" __Pyx_FMT_TYPENAME "' object does not support slice %.10s", + obj_type_name, value ? "assignment" : "deletion"); + __Pyx_DECREF_TypeName(obj_type_name); bad: return -1; } -/* ArgTypeTest */ -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { return 0; } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); +#endif + *method = attr; return 0; } -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; +/* PyObjectCallMethod1 */ +#if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; } -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); #endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); #else - return PySequence_GetItem(o, i); + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); #endif } -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } + +/* append */ +static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { + if (likely(PyList_CheckExact(L))) { + if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); + PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); + if (unlikely(!retval)) + return -1; + Py_DECREF(retval); } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); + return 0; } -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; + __Pyx_PyErr_Clear(); + return 0; } -#endif + return 0; } -/* UnicodeEquals */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); +/* set_iter */ +static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set, + Py_ssize_t* p_orig_length, int* p_source_is_set) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 + is_set = is_set || likely(PySet_CheckExact(iterable) || PyFrozenSet_CheckExact(iterable)); + *p_source_is_set = is_set; + if (likely(is_set)) { + *p_orig_length = PySet_Size(iterable); + Py_INCREF(iterable); + return iterable; + } #else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; + CYTHON_UNUSED_VAR(is_set); + *p_source_is_set = 0; #endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; + *p_orig_length = 0; + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_set_iter_next( + PyObject* iter_obj, Py_ssize_t orig_length, + Py_ssize_t* ppos, PyObject **value, + int source_is_set) { + if (!CYTHON_COMPILING_IN_CPYTHON || PY_VERSION_HEX >= 0x030d0000 || unlikely(!source_is_set)) { + *value = PyIter_Next(iter_obj); + if (unlikely(!*value)) { + return __Pyx_IterFinish(); + } + CYTHON_UNUSED_VAR(orig_length); + CYTHON_UNUSED_VAR(ppos); + return 1; } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 + if (unlikely(PySet_GET_SIZE(iter_obj) != orig_length)) { + PyErr_SetString( + PyExc_RuntimeError, + "set changed size during iteration"); + return -1; } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } - } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); + { + Py_hash_t hash; + int ret = _PySet_NextEntry(iter_obj, ppos, value, &hash); + assert (ret != -1); + if (likely(ret)) { + Py_INCREF(*value); + return 1; } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); #endif + return 0; } /* RaiseTooManyValuesToUnpack */ @@ -40777,247 +50829,145 @@ static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { index, (index == 1) ? "" : "s"); } -/* IterFinish */ -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -#endif -} - /* UnpackItemEndCheck */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { if (unlikely(retval)) { Py_DECREF(retval); __Pyx_RaiseTooManyValuesError(expected); return -1; - } else { - return __Pyx_IterFinish(); } - return 0; + return __Pyx_IterFinish(); } -/* ExtTypeTest */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; if (unlikely(!type)) { PyErr_SetString(PyExc_SystemError, "Missing type object"); return 0; } - if (likely(__Pyx_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; - } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif } -} - -/* UnpackUnboundCMethod */ -static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { - PyObject *method; - method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); - if (unlikely(!method)) - return -1; - target->method = method; -#if CYTHON_COMPILING_IN_CPYTHON - #if PY_MAJOR_VERSION >= 3 - if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) - #endif - { - PyMethodDescrObject *descr = (PyMethodDescrObject*) method; - target->func = descr->d_method->ml_meth; - target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; } -#endif + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); return 0; } -/* CallUnboundCMethod1 */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { - if (likely(cfunc->func)) { - int flag = cfunc->flag; - if (flag == METH_O) { - return (*(cfunc->func))(self, arg); - } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) { - if (PY_VERSION_HEX >= 0x030700A0) { - return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); - } else { - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); - } - } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) { - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); +/* pyfrozenset_new */ +static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) { + if (it) { + PyObject* result; +#if CYTHON_COMPILING_IN_PYPY + PyObject* args; + args = PyTuple_Pack(1, it); + if (unlikely(!args)) + return NULL; + result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL); + Py_DECREF(args); + return result; +#else + if (PyFrozenSet_CheckExact(it)) { + Py_INCREF(it); + return it; } - } - return __Pyx__CallUnboundCMethod1(cfunc, self, arg); -} + result = PyFrozenSet_New(it); + if (unlikely(!result)) + return NULL; + if ((PY_VERSION_HEX >= 0x031000A1) || likely(PySet_GET_SIZE(result))) + return result; + Py_DECREF(result); #endif -static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ - PyObject *args, *result = NULL; - if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; -#if CYTHON_COMPILING_IN_CPYTHON - if (cfunc->func && (cfunc->flag & METH_VARARGS)) { - args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - if (cfunc->flag & METH_KEYWORDS) - result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); - else - result = (*cfunc->func)(self, args); - } else { - args = PyTuple_New(2); - if (unlikely(!args)) goto bad; - Py_INCREF(self); - PyTuple_SET_ITEM(args, 0, self); - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 1, arg); - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); } +#if CYTHON_USE_TYPE_SLOTS + return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, __pyx_empty_tuple, NULL); #else - args = PyTuple_Pack(2, self, arg); - if (unlikely(!args)) goto bad; - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + return PyObject_Call((PyObject*)&PyFrozenSet_Type, __pyx_empty_tuple, NULL); #endif -bad: - Py_XDECREF(args); - return result; } -/* CallUnboundCMethod2 */ -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 -static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) { - if (likely(cfunc->func)) { - PyObject *args[2] = {arg1, arg2}; - if (cfunc->flag == METH_FASTCALL) { - #if PY_VERSION_HEX >= 0x030700A0 - return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, args, 2); - #else - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); - #endif - } - #if PY_VERSION_HEX >= 0x030700A0 - if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS)) - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); - #endif - } - return __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2); +/* py_set_discard_unhashable */ +static int __Pyx_PySet_DiscardUnhashable(PyObject *set, PyObject *key) { + PyObject *tmpkey; + int rv; + if (likely(!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))) + return -1; + PyErr_Clear(); + tmpkey = __Pyx_PyFrozenSet_New(key); + if (tmpkey == NULL) + return -1; + rv = PySet_Discard(set, tmpkey); + Py_DECREF(tmpkey); + return rv; } -#endif -static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){ - PyObject *args, *result = NULL; - if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; -#if CYTHON_COMPILING_IN_CPYTHON - if (cfunc->func && (cfunc->flag & METH_VARARGS)) { - args = PyTuple_New(2); - if (unlikely(!args)) goto bad; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - if (cfunc->flag & METH_KEYWORDS) - result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); - else - result = (*cfunc->func)(self, args); - } else { - args = PyTuple_New(3); - if (unlikely(!args)) goto bad; - Py_INCREF(self); - PyTuple_SET_ITEM(args, 0, self); - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 1, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 2, arg2); - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + +/* py_set_discard */ +static CYTHON_INLINE int __Pyx_PySet_Discard(PyObject *set, PyObject *key) { + int found = PySet_Discard(set, key); + if (unlikely(found < 0)) { + found = __Pyx_PySet_DiscardUnhashable(set, key); } -#else - args = PyTuple_Pack(3, self, arg1, arg2); - if (unlikely(!args)) goto bad; - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); -#endif -bad: - Py_XDECREF(args); - return result; + return found; } -/* dict_getitem_default */ -static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) { - PyObject* value; -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (unlikely(PyErr_Occurred())) - return NULL; - value = default_value; - } - Py_INCREF(value); - if ((1)); -#else - if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) { - value = PyDict_GetItem(d, key); - if (unlikely(!value)) { - value = default_value; +/* PySetContains */ +static int __Pyx_PySet_ContainsUnhashable(PyObject *set, PyObject *key) { + int result = -1; + if (PySet_Check(key) && PyErr_ExceptionMatches(PyExc_TypeError)) { + PyObject *tmpkey; + PyErr_Clear(); + tmpkey = __Pyx_PyFrozenSet_New(key); + if (tmpkey != NULL) { + result = PySet_Contains(set, tmpkey); + Py_DECREF(tmpkey); } - Py_INCREF(value); } -#endif - else { - if (default_value == Py_None) - value = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_get, d, key); - else - value = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyDict_Type_get, d, key, default_value); + return result; +} +static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq) { + int result = PySet_Contains(set, key); + if (unlikely(result < 0)) { + result = __Pyx_PySet_ContainsUnhashable(set, key); } - return value; + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } /* SwapException */ #if CYTHON_FAST_THREAD_STATE static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK _PyErr_StackItem *exc_info = tstate->exc_info; tmp_type = exc_info->exc_type; tmp_value = exc_info->exc_value; @@ -41025,14 +50975,14 @@ static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject * exc_info->exc_type = *type; exc_info->exc_value = *value; exc_info->exc_traceback = *tb; - #else + #else tmp_type = tstate->exc_type; tmp_value = tstate->exc_value; tmp_tb = tstate->exc_traceback; tstate->exc_type = *type; tstate->exc_value = *value; tstate->exc_traceback = *tb; - #endif + #endif *type = tmp_type; *value = tmp_value; *tb = tmp_tb; @@ -41055,13 +51005,15 @@ static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op1))) { const long b = intval; long a = PyInt_AS_LONG(op1); + return PyInt_FromLong(a & b); } #endif @@ -41073,77 +51025,84 @@ static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED const PY_LONG_LONG llb = intval; PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; + if ((intval & PyLong_MASK) == intval) { + long last_digit = (long) __Pyx_PyLong_Digits(op1)[0]; + long result = intval & (likely(__Pyx_PyLong_IsPos(op1)) ? last_digit : (PyLong_MASK - last_digit + 1)); + return PyLong_FromLong(result); + } + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op1); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_and(op1, op2); @@ -41164,100 +51123,204 @@ static PyObject* __Pyx_PyInt_AndObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED } #endif -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; - } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; - } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif +/* UnpackUnboundCMethod */ +static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *result; + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else +#endif +#if CYTHON_COMPILING_IN_PYPY #else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif + if (PyCFunction_Check(method)) #endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); +#endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; } } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; + return 0; +} + +/* CallUnboundCMethod1 */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + #endif + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); } - Py_DECREF(dict); } - if (meth_found) { - *method = descr; - return 1; + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* CallUnboundCMethod2 */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 +static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) { + if (likely(cfunc->func)) { + PyObject *args[2] = {arg1, arg2}; + if (cfunc->flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, args, 2); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif + } + #if PY_VERSION_HEX >= 0x030700A0 + if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS)) + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif } - if (descr != NULL) { - *method = descr; - return 0; + return __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(3); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 1, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 2, arg2); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); } - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); + args = PyTuple_Pack(3, self, arg1, arg2); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); #endif - return 0; +bad: + Py_XDECREF(args); + return result; +} + +/* dict_getitem_default */ +static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) { + PyObject* value; +#if PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (unlikely(PyErr_Occurred())) + return NULL; + value = default_value; + } + Py_INCREF(value); + if ((1)); #else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; -#endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; + if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) { + value = PyDict_GetItem(d, key); + if (unlikely(!value)) { + value = default_value; + } + Py_INCREF(value); } #endif - *method = attr; - return 0; + else { + if (default_value == Py_None) + value = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_get, d, key); + else + value = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyDict_Type_get, d, key, default_value); + } + return value; } /* PyObjectCallMethod0 */ @@ -41320,7 +51383,7 @@ static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyOb iter = PyObject_GetIter(tuple); if (unlikely(!iter)) goto bad; if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } - iternext = Py_TYPE(iter)->tp_iternext; + iternext = __Pyx_PyObject_GetIterNextFunc(iter); value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; @@ -41340,6 +51403,9 @@ static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyOb } /* dict_iter */ +#if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, Py_ssize_t* p_orig_length, int* p_source_is_dict) { is_dict = is_dict || likely(PyDict_CheckExact(iterable)); @@ -41452,33 +51518,6 @@ static CYTHON_INLINE int __Pyx_dict_iter_next( return 1; } -/* CallUnboundCMethod0 */ -static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) { - PyObject *args, *result = NULL; - if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; -#if CYTHON_ASSUME_SAFE_MACROS - args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - Py_INCREF(self); - PyTuple_SET_ITEM(args, 0, self); -#else - args = PyTuple_Pack(1, self); - if (unlikely(!args)) goto bad; -#endif - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); - Py_DECREF(args); -bad: - return result; -} - -/* py_dict_values */ -static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) { - if (PY_MAJOR_VERSION >= 3) - return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_values, d); - else - return PyDict_Values(d); -} - /* DictGetItem */ #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { @@ -41507,7 +51546,8 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; #if CYTHON_USE_TYPE_SLOTS PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 @@ -41546,9 +51586,13 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, } return ms->sq_slice(obj, cstart, cstop); } +#else + CYTHON_UNUSED_VAR(wraparound); #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); #endif { PyObject* result; @@ -41594,23 +51638,58 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, } return result; } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); + "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); bad: return NULL; } +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + /* PyIntBinop */ #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op1))) { const long b = intval; long x; long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a + b); + + x = (long)((unsigned long)a + (unsigned long)b); if (likely((x^a) >= 0 || (x^b) >= 0)) return PyInt_FromLong(x); return PyLong_Type.tp_as_number->nb_add(op1, op2); @@ -41624,77 +51703,79 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED const PY_LONG_LONG llb = intval; PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); switch (size) { case -2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_add(op1, op2); @@ -41713,8 +51794,13 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED #endif if (PyFloat_CheckExact(op1)) { const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else double a = PyFloat_AS_DOUBLE(op1); +#endif double result; + PyFPE_START_PROTECT("add", return NULL) result = ((double)a) + (double)b; PyFPE_END_PROTECT(result) @@ -41724,37 +51810,6 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED } #endif -/* PyObjectCallMethod1 */ -static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { - PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); - Py_DECREF(method); - return result; -} -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { - PyObject *method = NULL, *result; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_Call2Args(method, obj, arg); - Py_DECREF(method); - return result; - } - if (unlikely(!method)) return NULL; - return __Pyx__PyObject_CallMethod1(method, arg); -} - -/* append */ -static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { - if (likely(PyList_CheckExact(L))) { - if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; - } else { - PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); - if (unlikely(!retval)) - return -1; - Py_DECREF(retval); - } - return 0; -} - /* SliceTupleAndList */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) { @@ -41772,76 +51827,52 @@ static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop *_start = start; *_stop = stop; } -static CYTHON_INLINE void __Pyx_copy_object_array(PyObject** CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { - PyObject *v; - Py_ssize_t i; - for (i = 0; i < length; i++) { - v = dest[i] = src[i]; - Py_INCREF(v); - } -} static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice( PyObject* src, Py_ssize_t start, Py_ssize_t stop) { - PyObject* dest; Py_ssize_t length = PyList_GET_SIZE(src); __Pyx_crop_slice(&start, &stop, &length); - if (unlikely(length <= 0)) + if (length <= 0) { return PyList_New(0); - dest = PyList_New(length); - if (unlikely(!dest)) - return NULL; - __Pyx_copy_object_array( - ((PyListObject*)src)->ob_item + start, - ((PyListObject*)dest)->ob_item, - length); - return dest; + } + return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length); } static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice( PyObject* src, Py_ssize_t start, Py_ssize_t stop) { - PyObject* dest; Py_ssize_t length = PyTuple_GET_SIZE(src); __Pyx_crop_slice(&start, &stop, &length); - if (unlikely(length <= 0)) - return PyTuple_New(0); - dest = PyTuple_New(length); - if (unlikely(!dest)) - return NULL; - __Pyx_copy_object_array( - ((PyTupleObject*)src)->ob_item + start, - ((PyTupleObject*)dest)->ob_item, - length); - return dest; + return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length); } #endif /* PyIntCompare */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) { +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); if (op1 == op2) { - Py_RETURN_TRUE; + return 1; } #if PY_MAJOR_VERSION < 3 if (likely(PyInt_CheckExact(op1))) { const long b = intval; long a = PyInt_AS_LONG(op1); - if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE; + return (a == b); } #endif #if CYTHON_USE_PYLONG_INTERNALS if (likely(PyLong_CheckExact(op1))) { int unequal; unsigned long uintval; - Py_ssize_t size = Py_SIZE(op1); - const digit* digits = ((PyLongObject*)op1)->ob_digit; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); if (intval == 0) { - if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + return (__Pyx_PyLong_IsZero(op1) == 1); } else if (intval < 0) { - if (size >= 0) - Py_RETURN_FALSE; + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; intval = -intval; - size = -size; } else { - if (size <= 0) - Py_RETURN_FALSE; + if (__Pyx_PyLong_IsNeg(op1)) + return 0; } uintval = (unsigned long) intval; #if PyLong_SHIFT * 4 < SIZEOF_LONG*8 @@ -41869,82 +51900,100 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, } else #endif unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); - if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + return (unequal == 0); } #endif if (PyFloat_CheckExact(op1)) { const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else double a = PyFloat_AS_DOUBLE(op1); - if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE; +#endif + return ((double)a == (double)b); } - return ( + return __Pyx_PyObject_IsTrueAndDecref( PyObject_RichCompare(op1, op2, Py_EQ)); } /* ObjectGetItem */ #if CYTHON_USE_TYPE_SLOTS -static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { - PyObject *runerr; +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; Py_ssize_t key_value; - PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; - if (unlikely(!(m && m->sq_item))) { - PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); - return NULL; - } key_value = __Pyx_PyIndex_AsSsize_t(index); if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); } if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); PyErr_Clear(); - PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); return NULL; } -static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { - PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; - if (likely(m && m->mp_subscript)) { - return m->mp_subscript(obj, key); +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); } - return __Pyx_PyObject_GetIndex(obj, key); + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); } #endif /* Import */ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; PyObject *module = 0; - PyObject *global_dict = 0; PyObject *empty_dict = 0; - PyObject *list; + PyObject *empty_list = 0; #if PY_MAJOR_VERSION < 3 PyObject *py_import; py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) + if (unlikely(!py_import)) goto bad; - #endif - if (from_list) - list = from_list; - else { + if (!from_list) { empty_list = PyList_New(0); - if (!empty_list) + if (unlikely(!empty_list)) goto bad; - list = empty_list; + from_list = empty_list; } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; + #endif empty_dict = PyDict_New(); - if (!empty_dict) + if (unlikely(!empty_dict)) goto bad; { #if PY_MAJOR_VERSION >= 3 if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) goto bad; PyErr_Clear(); } @@ -41955,23 +52004,23 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { if (!module) { #if PY_MAJOR_VERSION < 3 PyObject *py_level = PyInt_FromLong(level); - if (!py_level) + if (unlikely(!py_level)) goto bad; module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); Py_DECREF(py_level); #else module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); + name, __pyx_d, empty_dict, from_list, level); #endif } } bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); #if PY_MAJOR_VERSION < 3 Py_XDECREF(py_import); #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); return module; } @@ -41979,6 +52028,35 @@ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__10); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { PyErr_Format(PyExc_ImportError, #if PY_MAJOR_VERSION < 3 "cannot import name %.230s", PyString_AS_STRING(name)); @@ -41989,17 +52067,259 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { return value; } +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* ValidateBasesTuple */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ +static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + /* PyObject_GenericGetAttrNoDict */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); PyErr_Format(PyExc_AttributeError, #if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); #endif + __Pyx_DECREF_TypeName(type_name); return NULL; } static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { @@ -42025,233 +52345,1619 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj return res; } } - return descr; + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetVTable */ +static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { + PyObject *ob = PyCapsule_New(vtable, 0, 0); + if (unlikely(!ob)) + goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) +#else + if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) +#endif + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; +} + +/* GetVTable */ +static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); +#endif + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; +} + +/* MergeVTables */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type) { + int i; + void** base_vtables; + __Pyx_TypeName tp_base_name; + __Pyx_TypeName base_name; + void* unknown = (void*)-1; + PyObject* bases = type->tp_bases; + int base_depth = 0; + { + PyTypeObject* base = type->tp_base; + while (base) { + base_depth += 1; + base = base->tp_base; + } + } + base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); + base_vtables[0] = unknown; + for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { + void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); + if (base_vtable != NULL) { + int j; + PyTypeObject* base = type->tp_base; + for (j = 0; j < base_depth; j++) { + if (base_vtables[j] == unknown) { + base_vtables[j] = __Pyx_GetVtable(base); + base_vtables[j + 1] = unknown; + } + if (base_vtables[j] == base_vtable) { + break; + } else if (base_vtables[j] == NULL) { + goto bad; + } + base = base->tp_base; + } + } + } + PyErr_Clear(); + free(base_vtables); + return 0; +bad: + tp_base_name = __Pyx_PyType_GetName(type->tp_base); + base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); + PyErr_Format(PyExc_TypeError, + "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); + __Pyx_DECREF_TypeName(tp_base_name); + __Pyx_DECREF_TypeName(base_name); + free(base_vtables); + return -1; +} +#endif + +/* SetupReduce */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_getstate = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; + PyObject *getstate = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +#else + getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); + if (!getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (getstate) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); +#else + object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); + if (!object_getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (object_getstate != getstate) { + goto __PYX_GOOD; + } + } +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); + } + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); + Py_XDECREF(object_getstate); + Py_XDECREF(getstate); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* ImportDottedModule */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__19; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ +#if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; } +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } #endif - -/* PyObject_GenericGetAttr */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif } +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) #endif - -/* PyObjectGetAttrStrNoError */ -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; } -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); } #endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; } - return result; + return 0; } - -/* SetupReduce */ -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); } -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_getstate = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; - PyObject *getstate = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); #else - getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); - if (!getstate && PyErr_Occurred()) { - goto __PYX_BAD; + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); } -#endif - if (getstate) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); #else - object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); - if (!object_getstate && PyErr_Occurred()) { - goto __PYX_BAD; - } + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); #endif - if (object_getstate != getstate) { - goto __PYX_GOOD; + return NULL; } - } -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); #else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; #endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); #else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); #endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); + return NULL; } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); - Py_XDECREF(object_getstate); - Py_XDECREF(getstate); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); #endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); - return ret; + return NULL; } - -/* SetVTable */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 - PyObject *ob = PyCapsule_New(vtable, 0, 0); +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; #else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); + self = ((PyCFunctionObject*)func)->m_self; #endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) - goto bad; - Py_DECREF(ob); - return 0; -bad: - Py_XDECREF(ob); - return -1; + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; } - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); #endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); #else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; #endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; + return ret; } +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); #endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} /* CLineInTraceback */ #ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { PyObject *use_cline; PyObject *ptype, *pvalue, *ptraceback; #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif + CYTHON_MAYBE_UNUSED_VAR(tstate); if (unlikely(!__pyx_cython_runtime)) { return c_line; } @@ -42265,7 +53971,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int } else #endif { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); @@ -42287,6 +53993,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int #endif /* CodeObjectCache */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { @@ -42365,17 +54072,101 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { __pyx_code_cache.count++; Py_INCREF(code_object); } +#endif /* AddTraceback */ #include "compile.h" #include "frameobject.h" #include "traceback.h" -#if PY_VERSION_HEX >= 0x030b00a6 +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API #ifndef Py_BUILD_CORE #define Py_BUILD_CORE 1 #endif #include "internal/pycore_frame.h" #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { @@ -42410,6 +54201,7 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( 0, 0, 0, + 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ @@ -42425,7 +54217,7 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( #else py_code = PyCode_NewEmpty(filename, funcname, py_line); #endif - Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline + Py_XDECREF(py_funcname); return py_code; bad: Py_XDECREF(py_funcname); @@ -42472,6 +54264,7 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, Py_XDECREF(py_code); Py_XDECREF(py_frame); } +#endif /* CIntFromPyVerify */ #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ @@ -42526,10 +54319,43 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { } } { - int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; return _PyLong_FromByteArray(bytes, sizeof(int), little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif } } @@ -42546,7 +54372,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { + if ((sizeof(int) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -42555,168 +54381,239 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { } return (int) val; } - } else + } #endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); } } break; } + } #endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } #endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif - } - } else { + } + } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); } } break; } + } #endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif - } + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { Py_DECREF(v); - if (likely(!ret)) - return val; + return (int) -1; } -#endif + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); return val; } raise_overflow: @@ -42742,7 +54639,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { + if ((sizeof(long) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -42751,168 +54648,239 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { } return (long) val; } - } else + } #endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); } } break; } + } #endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } #endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif - } - } else { + } + } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); } } break; } + } #endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif - } + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { Py_DECREF(v); - if (likely(!ret)) - return val; + return (long) -1; } -#endif + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); return val; } raise_overflow: @@ -42956,18 +54924,67 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { } } { - int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; return _PyLong_FromByteArray(bytes, sizeof(long), little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ +#if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_kp_s__4); } + return name; } +#endif /* FastTypeChecks */ #if CYTHON_COMPILING_IN_CPYTHON static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { while (a) { - a = a->tp_base; + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); if (a == b) return 1; } @@ -42988,6 +55005,22 @@ static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { } return __Pyx_InBases(a, b); } +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} #if PY_MAJOR_VERSION == 2 static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { PyObject *exception, *value, *tb; @@ -43012,11 +55045,11 @@ static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc } #else static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); } - return res; } #endif static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { @@ -43064,47 +55097,111 @@ static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObj #endif /* CheckBinaryVersion */ -static int __Pyx_check_binary_version(void) { - char ctversion[5]; - int same=1, i, found_dot; - const char* rt_from_call = Py_GetVersion(); - PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - found_dot = 0; - for (i = 0; i < 4; i++) { - if (!ctversion[i]) { - same = (rt_from_call[i] < '0' || rt_from_call[i] > '9'); - break; - } - if (rt_from_call[i] != ctversion[i]) { - same = 0; +static unsigned long __Pyx_get_runtime_version(void) { +#if __PYX_LIMITED_VERSION_HEX >= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') break; - } + digit = 0; + factor >>= 8; + ++i; } - if (!same) { - char rtversion[5] = {'\0'}; + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { char message[200]; - for (i=0; i<4; ++i) { - if (rt_from_call[i] == '.') { - if (found_dot) break; - found_dot = 1; - } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') { - break; - } - rtversion[i] = rt_from_call[i]; - } PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); return PyErr_WarnEx(NULL, message, 1); } +} + +/* FunctionExport */ +static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) { + PyObject *d = 0; + PyObject *cobj = 0; + union { + void (*fp)(void); + void *p; + } tmp; + d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__"); + if (!d) { + PyErr_Clear(); + d = PyDict_New(); + if (!d) + goto bad; + Py_INCREF(d); + if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0) + goto bad; + } + tmp.fp = f; + cobj = PyCapsule_New(tmp.p, sig, 0); + if (!cobj) + goto bad; + if (PyDict_SetItemString(d, name, cobj) < 0) + goto bad; + Py_DECREF(cobj); + Py_DECREF(d); return 0; +bad: + Py_XDECREF(cobj); + Py_XDECREF(d); + return -1; } /* InitStrings */ +#if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - #if PY_MAJOR_VERSION < 3 + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { @@ -43112,30 +55209,34 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; + #endif ++t; } return 0; } +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); } static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; @@ -43190,7 +55291,7 @@ static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); @@ -43219,22 +55320,26 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } + __Pyx_DECREF_TypeName(result_type_name); return result; } #endif PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } @@ -43300,13 +55405,11 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { @@ -43374,4 +55477,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { } +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ #endif /* Py_PYTHON_H */ diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd index 51bb49532..5b0e116aa 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pxd @@ -25,3 +25,18 @@ cdef class PyDBAdditionalThreadInfo: cdef public tuple pydev_smart_step_into_variants cdef public dict target_id_to_smart_step_into_variant cdef public bint pydev_use_scoped_step_frame + cdef public object weak_thread + cdef public bint is_in_wait_loop + + cpdef get_topmost_frame(self, thread) + cpdef update_stepping_info(self) + + # Private APIs + cpdef object _get_related_thread(self) + cpdef bint _is_stepping(self) + +cpdef set_additional_thread_info(thread) + +cpdef add_additional_info(PyDBAdditionalThreadInfo info) +cpdef remove_additional_info(PyDBAdditionalThreadInfo info) +cpdef bint any_thread_stepping() \ No newline at end of file diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx index 6620c671b..a3a66ab7d 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython.pyx @@ -4,65 +4,73 @@ from __future__ import print_function # DO NOT edit manually! # DO NOT edit manually! -from _pydevd_bundle.pydevd_constants import (STATE_RUN, PYTHON_SUSPEND, SUPPORT_GEVENT, ForkSafeLock, - _current_frames) +from _pydevd_bundle.pydevd_constants import ( + STATE_RUN, + PYTHON_SUSPEND, + SUPPORT_GEVENT, + ForkSafeLock, + _current_frames, + STATE_SUSPEND, + get_global_debugger, + get_thread_id, +) from _pydev_bundle import pydev_log -# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) -pydev_log.debug("Using Cython speedups") -# ELSE -# from _pydevd_bundle.pydevd_frame import PyDBFrame -# ENDIF +from _pydev_bundle._pydev_saved_modules import threading +import weakref version = 11 -#======================================================================================================================= +# ======================================================================================================================= # PyDBAdditionalThreadInfo -#======================================================================================================================= +# ======================================================================================================================= +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class PyDBAdditionalThreadInfo: # ELSE # class PyDBAdditionalThreadInfo(object): # ENDIF +# fmt: on # Note: the params in cython are declared in pydevd_cython.pxd. + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) # ELSE # __slots__ = [ -# 'pydev_state', -# 'pydev_step_stop', -# 'pydev_original_step_cmd', -# 'pydev_step_cmd', -# 'pydev_notify_kill', -# 'pydev_django_resolve_frame', -# 'pydev_call_from_jinja2', -# 'pydev_call_inside_jinja2', -# 'is_tracing', -# 'conditional_breakpoint_exception', -# 'pydev_message', -# 'suspend_type', -# 'pydev_next_line', -# 'pydev_func_name', -# 'suspended_at_unhandled', -# 'trace_suspend_type', -# 'top_level_thread_tracer_no_back_frames', -# 'top_level_thread_tracer_unhandled', -# 'thread_tracer', -# 'step_in_initial_location', -# +# "pydev_state", +# "pydev_step_stop", +# "pydev_original_step_cmd", +# "pydev_step_cmd", +# "pydev_notify_kill", +# "pydev_django_resolve_frame", +# "pydev_call_from_jinja2", +# "pydev_call_inside_jinja2", +# "is_tracing", +# "conditional_breakpoint_exception", +# "pydev_message", +# "suspend_type", +# "pydev_next_line", +# "pydev_func_name", +# "suspended_at_unhandled", +# "trace_suspend_type", +# "top_level_thread_tracer_no_back_frames", +# "top_level_thread_tracer_unhandled", +# "thread_tracer", +# "step_in_initial_location", # # Used for CMD_SMART_STEP_INTO (to know which smart step into variant to use) -# 'pydev_smart_parent_offset', -# 'pydev_smart_child_offset', -# +# "pydev_smart_parent_offset", +# "pydev_smart_child_offset", # # Used for CMD_SMART_STEP_INTO (list[_pydevd_bundle.pydevd_bytecode_utils.Variant]) # # Filled when the cmd_get_smart_step_into_variants is requested (so, this is a copy # # of the last request for a given thread and pydev_smart_parent_offset/pydev_smart_child_offset relies on it). -# 'pydev_smart_step_into_variants', -# 'target_id_to_smart_step_into_variant', -# -# 'pydev_use_scoped_step_frame', +# "pydev_smart_step_into_variants", +# "target_id_to_smart_step_into_variant", +# "pydev_use_scoped_step_frame", +# "weak_thread", +# "is_in_wait_loop", # ] # ENDIF + # fmt: on def __init__(self): self.pydev_state = STATE_RUN # STATE_RUN or STATE_SUSPEND @@ -83,12 +91,12 @@ cdef class PyDBAdditionalThreadInfo: self.pydev_call_inside_jinja2 = None self.is_tracing = 0 self.conditional_breakpoint_exception = None - self.pydev_message = '' + self.pydev_message = "" self.suspend_type = PYTHON_SUSPEND self.pydev_next_line = -1 - self.pydev_func_name = '.invalid.' # Must match the type in cython + self.pydev_func_name = ".invalid." # Must match the type in cython self.suspended_at_unhandled = False - self.trace_suspend_type = 'trace' # 'trace' or 'frame_eval' + self.trace_suspend_type = "trace" # 'trace' or 'frame_eval' self.top_level_thread_tracer_no_back_frames = [] self.top_level_thread_tracer_unhandled = None self.thread_tracer = None @@ -109,22 +117,80 @@ cdef class PyDBAdditionalThreadInfo: # # See: https://github.com/microsoft/debugpy/issues/869#issuecomment-1132141003 self.pydev_use_scoped_step_frame = False + self.weak_thread = None + + # Purpose: detect if this thread is suspended and actually in the wait loop + # at this time (otherwise it may be suspended but still didn't reach a point. + # to pause). + self.is_in_wait_loop = False + + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + cpdef object _get_related_thread(self): + # ELSE +# def _get_related_thread(self): + # ENDIF + # fmt: on + if self.pydev_notify_kill: # Already killed + return None + + if self.weak_thread is None: + return None + + thread = self.weak_thread() + if thread is None: + return False + + if thread._is_stopped: + return None + + if thread._ident is None: # Can this happen? + pydev_log.critical("thread._ident is None in _get_related_thread!") + return None + + if threading._active.get(thread._ident) is not thread: + return None + + return thread - def get_topmost_frame(self, thread): - ''' + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + cpdef bint _is_stepping(self): + # ELSE +# def _is_stepping(self): + # ENDIF + # fmt: on + if self.pydev_state == STATE_RUN and self.pydev_step_cmd != -1: + # This means actually stepping in a step operation. + return True + + if self.pydev_state == STATE_SUSPEND and self.is_in_wait_loop: + # This means stepping because it was suspended but still didn't + # reach a suspension point. + return True + + return False + + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + cpdef get_topmost_frame(self, thread): + # ELSE +# def get_topmost_frame(self, thread): + # ENDIF + # fmt: on + """ Gets the topmost frame for the given thread. Note that it may be None and callers should remove the reference to the frame as soon as possible to avoid disturbing user code. - ''' + """ # sys._current_frames(): dictionary with thread id -> topmost frame current_frames = _current_frames() - topmost_frame = current_frames.get(thread.ident) + topmost_frame = current_frames.get(thread._ident) if topmost_frame is None: # Note: this is expected for dummy threads (so, getting the topmost frame should be # treated as optional). pydev_log.info( - 'Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n' - 'GEVENT_SUPPORT: %s', + "Unable to get topmost frame for thread: %s, thread.ident: %s, id(thread): %s\nCurrent frames: %s.\n" "GEVENT_SUPPORT: %s", thread, thread.ident, id(thread), @@ -134,15 +200,30 @@ cdef class PyDBAdditionalThreadInfo: return topmost_frame + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + cpdef update_stepping_info(self): + # ELSE +# def update_stepping_info(self): + # ENDIF + # fmt: on + _update_stepping_info(self) + def __str__(self): - return 'State:%s Stop:%s Cmd: %s Kill:%s' % ( - self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) + return "State:%s Stop:%s Cmd: %s Kill:%s" % (self.pydev_state, self.pydev_step_stop, self.pydev_step_cmd, self.pydev_notify_kill) _set_additional_thread_info_lock = ForkSafeLock() +_next_additional_info = [PyDBAdditionalThreadInfo()] -def set_additional_thread_info(thread): +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef set_additional_thread_info(thread): +# ELSE +# def set_additional_thread_info(thread): +# ENDIF +# fmt: on try: additional_info = thread.additional_info if additional_info is None: @@ -151,25 +232,125 @@ def set_additional_thread_info(thread): with _set_additional_thread_info_lock: # If it's not there, set it within a lock to avoid any racing # conditions. - additional_info = getattr(thread, 'additional_info', None) + try: + additional_info = thread.additional_info + except: + additional_info = None + if additional_info is None: - additional_info = PyDBAdditionalThreadInfo() - thread.additional_info = additional_info + # Note: don't call PyDBAdditionalThreadInfo constructor at this + # point as it can piggy-back into the debugger which could + # get here again, rather get the global ref which was pre-created + # and add a new entry only after we set thread.additional_info. + additional_info = _next_additional_info[0] + thread.additional_info = additional_info + additional_info.weak_thread = weakref.ref(thread) + add_additional_info(additional_info) + del _next_additional_info[:] + _next_additional_info.append(PyDBAdditionalThreadInfo()) return additional_info + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef set _all_infos +cdef set _infos_stepping +cdef object _update_infos_lock +# ELSE +# ENDIF +# fmt: on + +_all_infos = set() +_infos_stepping = set() +_update_infos_lock = ForkSafeLock() + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _update_stepping_info(PyDBAdditionalThreadInfo info): +# ELSE +# def _update_stepping_info(info): +# ENDIF +# fmt: on + + global _infos_stepping + global _all_infos + + with _update_infos_lock: + # Removes entries that are no longer valid. + new_all_infos = set() + for info in _all_infos: + if info._get_related_thread() is not None: + new_all_infos.add(info) + _all_infos = new_all_infos + + new_stepping = set() + for info in _all_infos: + if info._is_stepping(): + new_stepping.add(info) + _infos_stepping = new_stepping + + py_db = get_global_debugger() + if py_db is not None and not py_db.pydb_disposed: + thread = info.weak_thread() + if thread is not None: + thread_id = get_thread_id(thread) + _queue, event = py_db.get_internal_queue_and_event(thread_id) + event.set() + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef add_additional_info(PyDBAdditionalThreadInfo info): +# ELSE +# def add_additional_info(info): +# ENDIF +# fmt: on + with _update_infos_lock: + _all_infos.add(info) + if info._is_stepping(): + _infos_stepping.add(info) + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef remove_additional_info(PyDBAdditionalThreadInfo info): +# ELSE +# def remove_additional_info(info): +# ENDIF +# fmt: on + with _update_infos_lock: + _all_infos.discard(info) + _infos_stepping.discard(info) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef bint any_thread_stepping(): +# ELSE +# def any_thread_stepping(): +# ENDIF +# fmt: on + return bool(_infos_stepping) import linecache import os.path import re from _pydev_bundle import pydev_log from _pydevd_bundle import pydevd_dont_trace -from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, - EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) +from _pydevd_bundle.pydevd_constants import ( + RETURN_VALUES_DICT, + NO_FTRACE, + EXCEPTION_TYPE_HANDLED, + EXCEPTION_TYPE_USER_UNHANDLED, + PYDEVD_IPYTHON_CONTEXT, + PYDEVD_USE_SYS_MONITORING, +) from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace from _pydevd_bundle.pydevd_utils import get_clsname_for_code from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK import sys + try: from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset except ImportError: @@ -177,6 +358,7 @@ except ImportError: def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): return None + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) # ELSE # # Note: those are now inlined on cython. @@ -196,10 +378,10 @@ except ImportError: basename = os.path.basename -IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') -DEBUG_START = ('pydevd.py', 'run') -DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') -TRACE_PROPERTY = 'pydevd_traceproperty.py' +IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") +DEBUG_START = ("pydevd.py", "run") +DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") +TRACE_PROPERTY = "pydevd_traceproperty.py" import dis @@ -210,10 +392,10 @@ except NameError: # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) -cdef is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): +def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # ELSE # def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): -# ENDIF + # ENDIF if frame.f_lineno in raise_lines: return True @@ -242,10 +424,7 @@ cdef is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, se # and it's gotten in the except line. for try_except_info in try_except_infos: if try_except_info.is_line_in_except_block(frame.f_lineno): - if ( - frame.f_lineno == try_except_info.except_line or - frame.f_lineno in try_except_info.raise_lines_in_except - ): + if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: # In a raise inside a try..except block or some except which doesn't # match the raised exception. return True @@ -259,33 +438,30 @@ cdef class _TryExceptContainerObj: self.try_except_infos = None # ELSE # class _TryExceptContainerObj(object): -# ''' -# A dumb container object just to containe the try..except info when needed. Meant to be -# persisent among multiple PyDBFrames to the same code object. -# ''' +# """ +# A dumb container object just to contain the try..except info when needed. Meant to be +# persistent among multiple PyDBFrames to the same code object. +# """ +# # try_except_infos = None +# +# # ENDIF -#======================================================================================================================= +# ======================================================================================================================= # PyDBFrame -#======================================================================================================================= +# ======================================================================================================================= # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class PyDBFrame: # ELSE # class PyDBFrame: -# '''This makes the tracing for a given frame, so, the trace_dispatch +# """This makes the tracing for a given frame, so, the trace_dispatch # is used initially when we enter into a new context ('call') and then # is reused for the entire context. -# ''' -# ENDIF - - # Note: class (and not instance) attributes. - - # Same thing in the main debugger but only considering the file contents, while the one in the main debugger - # considers the user input (so, the actual result must be a join of both). - filename_to_lines_where_exceptions_are_ignored = {} - filename_to_stat_info = {} +# """ +# + # ENDIF # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef tuple _args @@ -299,10 +475,17 @@ cdef class PyDBFrame: # should_skip = -1 # Default value in class (put in instance on set). # exc_info = () # Default value in class (put in instance on set). # -# def __init__(self, args): -# # args = main_debugger, abs_path_canonical_path_and_base, base, info, t, frame -# # yeap, much faster than putting in self and then getting it from self later on -# self._args = args +# if PYDEVD_USE_SYS_MONITORING: +# +# def __init__(self, *args, **kwargs): +# raise RuntimeError("Not expected to be used in sys.monitoring.") +# +# else: +# +# def __init__(self, args): +# # args = py_db, abs_path_canonical_path_and_base, base, info, t, frame +# # yeap, much faster than putting in self and then getting it from self later on +# self._args = args # ENDIF def set_suspend(self, *args, **kwargs): @@ -317,291 +500,42 @@ cdef class PyDBFrame: cdef tuple exc_info; # ELSE # def trace_exception(self, frame, event, arg): - # ENDIF - if event == 'exception': - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + # ENDIF + if event == "exception": + should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch - elif event == 'return': + elif event == "return": exc_info = self.exc_info if exc_info and arg is None: frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - custom_key = (frame_cache_key, 'try_exc_info') + custom_key = (frame_cache_key, "try_exc_info") container_obj = frame_skips_cache.get(custom_key) if container_obj is None: container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - self.handle_user_exception(frame): + if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + frame + ): return self.trace_dispatch return self.trace_exception - # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - cdef _should_stop_on_exception(self, frame, str event, arg): - cdef PyDBAdditionalThreadInfo info; - cdef bint should_stop; - cdef bint was_just_raised; - cdef list check_excs; - # ELSE -# def _should_stop_on_exception(self, frame, event, arg): - # ENDIF - - # main_debugger, _filename, info, _thread = self._args - main_debugger = self._args[0] - info = self._args[2] - should_stop = False - - # 2 = 2 - if info.pydev_state != 2: # and breakpoint is not None: - exception, value, trace = arg - - if trace is not None and hasattr(trace, 'tb_next'): - # on jython trace is None on the first event and it may not have a tb_next. - - should_stop = False - exception_breakpoint = None - try: - if main_debugger.plugin is not None: - result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - if result: - should_stop, frame = result - except: - pydev_log.exception() - - if not should_stop: - # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). - if exception == SystemExit and main_debugger.ignore_system_exit_code(value): - pass - - elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): - # These exceptions are control-flow related (they work as a generator - # pause), so, we shouldn't stop on them. - pass - - elif ignore_exception_trace(trace): - pass - - else: - was_just_raised = trace.tb_next is None - - # It was not handled by any plugin, lets check exception breakpoints. - check_excs = [] - - # Note: check user unhandled before regular exceptions. - exc_break_user = main_debugger.get_exception_breakpoint( - exception, main_debugger.break_on_user_uncaught_exceptions) - if exc_break_user is not None: - check_excs.append((exc_break_user, True)) - - exc_break_caught = main_debugger.get_exception_breakpoint( - exception, main_debugger.break_on_caught_exceptions) - if exc_break_caught is not None: - check_excs.append((exc_break_caught, False)) - - for exc_break, is_user_uncaught in check_excs: - # Initially mark that it should stop and then go into exclusions. - should_stop = True - - if main_debugger.exclude_exception_by_filter(exc_break, trace): - pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) - should_stop = False - - elif exc_break.condition is not None and \ - not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - should_stop = False - - elif is_user_uncaught: - # Note: we don't stop here, we just collect the exc_info to use later on... - should_stop = False - if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ - and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - # User uncaught means that we're currently in user code but the code - # up the stack is library code. - exc_info = self.exc_info - if not exc_info: - exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - else: - lines = exc_info[2] - lines.add(frame.f_lineno) - exc_info = (arg, frame.f_lineno, lines) - self.exc_info = exc_info - else: - # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ - and not was_just_raised and not just_raised(trace.tb_next): - # In this case we never stop if it was just raised, so, to know if it was the first we - # need to check if we're in the 2nd method. - should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception - - elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ - and not was_just_raised: - should_stop = False # I.e.: we stop only when it was just raised - - elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: - # Option: Don't break if an exception is caught in the same function from which it is thrown - should_stop = False - - if should_stop: - exception_breakpoint = exc_break - try: - info.pydev_message = exc_break.qname - except: - info.pydev_message = exc_break.qname.encode('utf-8') - break - - if should_stop: - # Always add exception to frame (must remove later after we proceed). - add_exception_to_frame(frame, (exception, value, trace)) - - if exception_breakpoint is not None and exception_breakpoint.expression is not None: - main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) - - return should_stop, frame - def handle_user_exception(self, frame): exc_info = self.exc_info if exc_info: - return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) return False - # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - cdef _handle_exception(self, frame, str event, arg, str exception_type): - cdef bint stopped; - cdef tuple abs_real_path_and_base; - cdef str absolute_filename; - cdef str canonical_normalized_filename; - cdef dict filename_to_lines_where_exceptions_are_ignored; - cdef dict lines_ignored; - cdef dict frame_id_to_frame; - cdef dict merged; - cdef object trace_obj; - cdef object main_debugger; - # ELSE -# def _handle_exception(self, frame, event, arg, exception_type): - # ENDIF - stopped = False - try: - # print('_handle_exception', frame.f_lineno, frame.f_code.co_name) - - # We have 3 things in arg: exception type, description, traceback object - trace_obj = arg[2] - main_debugger = self._args[0] - - initial_trace_obj = trace_obj - if trace_obj.tb_next is None and trace_obj.tb_frame is frame: - # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). - pass - else: - # Get the trace_obj from where the exception was raised... - while trace_obj.tb_next is not None: - trace_obj = trace_obj.tb_next - - if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: - for check_trace_obj in (initial_trace_obj, trace_obj): - abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - absolute_filename = abs_real_path_and_base[0] - canonical_normalized_filename = abs_real_path_and_base[1] - - filename_to_lines_where_exceptions_are_ignored = self.filename_to_lines_where_exceptions_are_ignored - - lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - if lines_ignored is None: - lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} - - try: - curr_stat = os.stat(absolute_filename) - curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - except: - curr_stat = None - - last_stat = self.filename_to_stat_info.get(absolute_filename) - if last_stat != curr_stat: - self.filename_to_stat_info[absolute_filename] = curr_stat - lines_ignored.clear() - try: - linecache.checkcache(absolute_filename) - except: - pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) - - from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - if from_user_input: - merged = {} - merged.update(lines_ignored) - # Override what we have with the related entries that the user entered - merged.update(from_user_input) - else: - merged = lines_ignored - - exc_lineno = check_trace_obj.tb_lineno - - # print ('lines ignored', lines_ignored) - # print ('user input', from_user_input) - # print ('merged', merged, 'curr', exc_lineno) - - if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - try: - line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - except: - pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) - line = '' - - if IGNORE_EXCEPTION_TAG.match(line) is not None: - lines_ignored[exc_lineno] = 1 - return False - else: - # Put in the cache saying not to ignore - lines_ignored[exc_lineno] = 0 - else: - # Ok, dict has it already cached, so, let's check it... - if merged.get(exc_lineno, 0): - return False - - thread = self._args[3] - - try: - frame_id_to_frame = {} - frame_id_to_frame[id(frame)] = frame - f = trace_obj.tb_frame - while f is not None: - frame_id_to_frame[id(f)] = f - f = f.f_back - f = None - - stopped = True - main_debugger.send_caught_exception_stack(thread, arg, id(frame)) - try: - self.set_suspend(thread, 137) - self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) - finally: - main_debugger.send_caught_exception_stack_proceeded(thread) - except: - pydev_log.exception() - - main_debugger.set_trace_for_frame_and_parents(frame) - finally: - # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. - remove_exception_from_frame(frame) - # Clear some local variables... - frame = None - trace_obj = None - initial_trace_obj = None - check_trace_obj = None - f = None - frame_id_to_frame = None - main_debugger = None - thread = None - - return stopped - # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef get_func_name(self, frame): cdef str func_name # ELSE # def get_func_name(self, frame): - # ENDIF + # ENDIF code_obj = frame.f_code func_name = code_obj.co_name try: @@ -618,7 +552,7 @@ cdef class PyDBFrame: cdef _show_return_values(self, frame, arg): # ELSE # def _show_return_values(self, frame, arg): - # ENDIF + # ENDIF try: try: f_locals_back = getattr(frame.f_back, "f_locals", None) @@ -635,10 +569,10 @@ cdef class PyDBFrame: f_locals_back = None # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - cdef _remove_return_values(self, main_debugger, frame): + cdef _remove_return_values(self, py_db, frame): # ELSE -# def _remove_return_values(self, main_debugger, frame): - # ENDIF +# def _remove_return_values(self, py_db, frame): + # ENDIF try: try: # Showing return values was turned off, we should remove them from locals dict. @@ -654,17 +588,17 @@ cdef class PyDBFrame: f_locals_back = None # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) - cdef _get_unfiltered_back_frame(self, main_debugger, frame): + cdef _get_unfiltered_back_frame(self, py_db, frame): # ELSE -# def _get_unfiltered_back_frame(self, main_debugger, frame): - # ENDIF +# def _get_unfiltered_back_frame(self, py_db, frame): + # ENDIF f = frame.f_back while f is not None: - if not main_debugger.is_files_filter_enabled: + if not py_db.is_files_filter_enabled: return f else: - if main_debugger.apply_files_filter(f, f.f_code.co_filename, False): + if py_db.apply_files_filter(f, f.f_code.co_filename, False): f = f.f_back else: @@ -677,7 +611,7 @@ cdef class PyDBFrame: cdef PyDBAdditionalThreadInfo info; # ELSE # def _is_same_frame(self, target_frame, current_frame): - # ENDIF + # ENDIF if target_frame is current_frame: return True @@ -729,7 +663,7 @@ cdef class PyDBFrame: cdef tuple pydev_smart_step_into_variants # ELSE # def trace_dispatch(self, frame, event, arg): - # ENDIF + # ENDIF # Note: this is a big function because most of the logic related to hitting a breakpoint and # stepping is contained in it. Ideally this could be split among multiple functions, but the # problem in this case is that in pure-python function calls are expensive and even more so @@ -739,8 +673,8 @@ cdef class PyDBFrame: # generation be better split among what each part does). try: - # DEBUG = '_debugger_case_generator.py' in frame.f_code.co_filename - main_debugger, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args + # DEBUG = '_debugger_case_yield_from.py' in frame.f_code.co_filename + py_db, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) info.is_tracing += 1 @@ -750,36 +684,35 @@ cdef class PyDBFrame: line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None line_cache_key = (frame_cache_key, line) - if main_debugger.pydb_disposed: - return None if event == 'call' else NO_FTRACE + if py_db.pydb_disposed: + return None if event == "call" else NO_FTRACE - plugin_manager = main_debugger.plugin + plugin_manager = py_db.plugin has_exception_breakpoints = ( - main_debugger.break_on_caught_exceptions - or main_debugger.break_on_user_uncaught_exceptions - or main_debugger.has_plugin_exception_breaks) + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) stop_frame = info.pydev_step_stop step_cmd = info.pydev_step_cmd function_breakpoint_on_call_event = None - if frame.f_code.co_flags & 0xa0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 + if frame.f_code.co_flags & 0xA0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # Dealing with coroutines and generators: # When in a coroutine we change the perceived event to the debugger because # a call, StopIteration exception and return are usually just pausing/unpausing it. - if event == 'line': + if event == "line": is_line = True is_call = False is_return = False is_exception_event = False - elif event == 'return': + elif event == "return": is_line = False is_call = False is_return = True is_exception_event = False - returns_cache_key = (frame_cache_key, 'returns') + returns_cache_key = (frame_cache_key, "returns") return_lines = frame_skips_cache.get(returns_cache_key) if return_lines is None: # Note: we're collecting the return lines by inspecting the bytecode as @@ -787,7 +720,7 @@ cdef class PyDBFrame: # it doesn't give any clear indication when a coroutine or generator is # finishing or just pausing. return_lines = set() - for x in main_debugger.collect_return_info(frame.f_code): + for x in py_db.collect_return_info(frame.f_code): # Note: cython does not support closures in cpdefs (so we can't use # a list comprehension). return_lines.add(x.return_line) @@ -820,7 +753,7 @@ cdef class PyDBFrame: # frame in this case). if stop_frame is frame and not info.pydev_use_scoped_step_frame: if step_cmd in (108, 159, 107, 144): - f = self._get_unfiltered_back_frame(main_debugger, frame) + f = self._get_unfiltered_back_frame(py_db, frame) if f is not None: info.pydev_step_cmd = 206 info.pydev_step_stop = f @@ -835,19 +768,22 @@ cdef class PyDBFrame: elif step_cmd == 206: # We're exiting this one, so, mark the new coroutine context. - f = self._get_unfiltered_back_frame(main_debugger, frame) + f = self._get_unfiltered_back_frame(py_db, frame) if f is not None: info.pydev_step_stop = f else: info.pydev_step_cmd = 107 info.pydev_step_stop = None - elif event == 'exception': + elif event == "exception": breakpoints_for_file = None if has_exception_breakpoints: - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + should_stop, frame, exc_info = should_stop_on_exception( + self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + ) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch return self.trace_dispatch @@ -856,13 +792,13 @@ cdef class PyDBFrame: return self.trace_dispatch else: # Not coroutine nor generator - if event == 'line': + if event == "line": is_line = True is_call = False is_return = False is_exception_event = False - elif event == 'return': + elif event == "return": is_line = False is_return = True is_call = False @@ -875,11 +811,12 @@ cdef class PyDBFrame: # Note: this is especially troublesome when we're skipping code with the # @DontTrace comment. if ( - stop_frame is frame and - not info.pydev_use_scoped_step_frame and is_return and - step_cmd in (108, 109, 159, 160, 128) - ): - + stop_frame is frame + and not info.pydev_use_scoped_step_frame + and is_return + and step_cmd + in (108, 109, 159, 160, 128) + ): if step_cmd in (108, 109, 128): info.pydev_step_cmd = 107 else: @@ -890,21 +827,24 @@ cdef class PyDBFrame: if self.handle_user_exception(frame): return self.trace_dispatch - elif event == 'call': + elif event == "call": is_line = False is_call = True is_return = False is_exception_event = False if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. - function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) - elif event == 'exception': + elif event == "exception": is_exception_event = True breakpoints_for_file = None if has_exception_breakpoints: - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + should_stop, frame, exc_info = should_stop_on_exception( + self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + ) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch is_line = False is_return = False @@ -915,7 +855,7 @@ cdef class PyDBFrame: return self.trace_dispatch if not is_exception_event: - breakpoints_for_file = main_debugger.breakpoints.get(abs_path_canonical_path_and_base[1]) + breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) can_skip = False @@ -927,22 +867,27 @@ cdef class PyDBFrame: if step_cmd == -1: can_skip = True - elif step_cmd in (108, 109, 159, 160) and not self._is_same_frame(stop_frame, frame): + elif step_cmd in ( + 108, + 109, + 159, + 160, + ) and not self._is_same_frame(stop_frame, frame): can_skip = True elif step_cmd == 128 and ( - stop_frame is not None and - stop_frame is not frame and - stop_frame is not frame.f_back and - (frame.f_back is None or stop_frame is not frame.f_back.f_back)): + stop_frame is not None + and stop_frame is not frame + and stop_frame is not frame.f_back + and (frame.f_back is None or stop_frame is not frame.f_back.f_back) + ): can_skip = True elif step_cmd == 144: - if ( - main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) - ): - can_skip = True + if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ): + can_skip = True elif step_cmd == 206: f = frame @@ -954,11 +899,15 @@ cdef class PyDBFrame: can_skip = True if can_skip: - if plugin_manager is not None and ( - main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - can_skip = plugin_manager.can_skip(main_debugger, frame) + if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): + can_skip = plugin_manager.can_skip(py_db, frame) - if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (108, 159) and self._is_same_frame(stop_frame, frame.f_back): + if ( + can_skip + and py_db.show_return_values + and info.pydev_step_cmd in (108, 159) + and self._is_same_frame(stop_frame, frame.f_back) + ): # trace function for showing return values after step over can_skip = False @@ -1006,12 +955,12 @@ cdef class PyDBFrame: curr_func_name = frame.f_code.co_name # global context is set with an empty name - if curr_func_name in ('?', '', ''): - curr_func_name = '' + if curr_func_name in ("?", "", ""): + curr_func_name = "" for bp in breakpoints_for_file.values(): # will match either global or some function - if bp.func_name in ('None', curr_func_name): + if bp.func_name in ("None", curr_func_name): has_breakpoint_in_frame = True break else: @@ -1057,26 +1006,29 @@ cdef class PyDBFrame: new_frame = frame stop = True - elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) + elif plugin_manager is not None and py_db.has_plugin_line_breaks: + result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) if result: - stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + stop_on_plugin_breakpoint = True + breakpoint, new_frame, bp_type = result if breakpoint: # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint # lets do the conditional stuff here if breakpoint.expression is not None: - main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) + py_db.handle_breakpoint_expression(breakpoint, info, new_frame) if stop or stop_on_plugin_breakpoint: eval_result = False if breakpoint.has_condition: - eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) + eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) if not eval_result: stop = False stop_on_plugin_breakpoint = False - if is_call and (frame.f_code.co_name in ('', '') or (line == 1 and frame.f_code.co_name.startswith('", "") or (line == 1 and frame.f_code.co_name.startswith(" 0: - cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") + py_db.writer.add_command(cmd) - if main_debugger.show_return_values: + if py_db.show_return_values: if is_return and ( - (info.pydev_step_cmd in (108, 159, 128) and (self._is_same_frame(stop_frame, frame.f_back))) or - (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) or - (info.pydev_step_cmd in (107, 206)) or - ( - info.pydev_step_cmd == 144 - and frame.f_back is not None - and not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) - ) - ): + ( + info.pydev_step_cmd in (108, 159, 128) + and (self._is_same_frame(stop_frame, frame.f_back)) + ) + or (info.pydev_step_cmd in (109, 160) and (self._is_same_frame(stop_frame, frame))) + or (info.pydev_step_cmd in (107, 206)) + or ( + info.pydev_step_cmd == 144 + and frame.f_back is not None + and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ) + ): self._show_return_values(frame, arg) - elif main_debugger.remove_return_values_flag: + elif py_db.remove_return_values_flag: try: - self._remove_return_values(main_debugger, frame) + self._remove_return_values(py_db, frame) finally: - main_debugger.remove_return_values_flag = False + py_db.remove_return_values_flag = False if stop: self.set_suspend( @@ -1126,7 +1081,7 @@ cdef class PyDBFrame: ) elif stop_on_plugin_breakpoint and plugin_manager is not None: - result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + result = plugin_manager.suspend(py_db, thread, frame, bp_type) if result: frame = result @@ -1143,9 +1098,14 @@ cdef class PyDBFrame: # Unfortunately Python itself stops the tracing when it originates from # the tracing function, so, we can't do much about it (just let the user know). exc = sys.exc_info()[0] - cmd = main_debugger.cmd_factory.make_console_message( - '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_console_message( + "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + % ( + exc, + thread, + ) + ) + py_db.writer.add_command(cmd) if not issubclass(exc, (KeyboardInterrupt, SystemExit)): pydev_log.exception() @@ -1159,7 +1119,7 @@ cdef class PyDBFrame: # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code # Which will be handled by this frame is read-only, so, we can cache it safely. - if not pydevd_dont_trace.should_trace_hook(frame, abs_path_canonical_path_and_base[0]): + if not pydevd_dont_trace.should_trace_hook(frame.f_code, abs_path_canonical_path_and_base[0]): # -1, 0, 1 to be Cython-friendly should_skip = self.should_skip = 1 else: @@ -1175,19 +1135,19 @@ cdef class PyDBFrame: force_check_project_scope = step_cmd == 144 if is_line: if not info.pydev_use_scoped_step_frame: - if force_check_project_scope or main_debugger.is_files_filter_enabled: - stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + if force_check_project_scope or py_db.is_files_filter_enabled: + stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) else: stop = True else: - if force_check_project_scope or main_debugger.is_files_filter_enabled: + if force_check_project_scope or py_db.is_files_filter_enabled: # Make sure we check the filtering inside ipython calls too... - if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): return None if is_call else NO_FTRACE # We can only stop inside the ipython call. filename = frame.f_code.co_filename - if filename.endswith('.pyc'): + if filename.endswith(".pyc"): filename = filename[:-1] if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): @@ -1196,7 +1156,7 @@ cdef class PyDBFrame: if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: f2 = f.f_back if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - pydev_log.debug('Stop inside ipython call') + pydev_log.debug("Stop inside ipython call") stop = True break f = f.f_back @@ -1209,11 +1169,13 @@ cdef class PyDBFrame: return None if is_call else NO_FTRACE elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: - if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: + if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: stop = False else: - if force_check_project_scope or main_debugger.is_files_filter_enabled: - stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) + if force_check_project_scope or py_db.is_files_filter_enabled: + stop = not py_db.apply_files_filter( + frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + ) if stop: # Prevent stopping in a return to the same location we were initially # (i.e.: double-stop at the same place due to some filtering). @@ -1236,7 +1198,7 @@ cdef class PyDBFrame: stop = False if plugin_manager is not None: - result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) + result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) if result: stop, plugin_stop = result @@ -1249,7 +1211,7 @@ cdef class PyDBFrame: # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. if plugin_manager is not None: - result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) + result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) if result: stop, plugin_stop = result @@ -1273,16 +1235,19 @@ cdef class PyDBFrame: if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # Preferred mode (when the smart step into variants are available # and the offset is set). - stop = get_smart_step_into_variant_from_frame_offset(back.f_lasti, pydev_smart_step_into_variants) is \ - get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + stop = get_smart_step_into_variant_from_frame_offset( + back.f_lasti, pydev_smart_step_into_variants + ) is get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) else: # Only the name/line is available, so, check that. curr_func_name = frame.f_code.co_name # global context is set with an empty name - if curr_func_name in ('?', '') or curr_func_name is None: - curr_func_name = '' + if curr_func_name in ("?", "") or curr_func_name is None: + curr_func_name = "" if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: stop = True @@ -1309,13 +1274,15 @@ cdef class PyDBFrame: # the child (because this is a generator, the parent may have moved forward # already -- and that's ok, so, we just check that the parent frame # matches in this case). - smart_step_into_variant = get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) # print('matched parent offset', pydev_smart_parent_offset) # Ok, now, check the child variant children_variants = smart_step_into_variant.children_variants stop = children_variants and ( - get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ - get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) ) # print('stop at child', stop) @@ -1331,13 +1298,13 @@ cdef class PyDBFrame: stop = False if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): - f_code = getattr(frame.f_back, 'f_code', None) + f_code = getattr(frame.f_back, "f_code", None) if f_code is not None: - if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: + if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: stop = False if plugin_stop: - stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) + plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) elif stop: if is_line: self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) @@ -1358,13 +1325,13 @@ cdef class PyDBFrame: return None if is_call else NO_FTRACE elif pydevd_dont_trace.should_trace_hook is not None: - if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): + if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # In this case, we'll have to skip the previous one because it shouldn't be traced. # Also, we have to reset the tracing, because if the parent's parent (or some # other parent) has to be traced and it's not currently, we wouldn't stop where # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). # Related test: _debugger_case17a.py - main_debugger.set_trace_for_frame_and_parents(back) + py_db.set_trace_for_frame_and_parents(thread.ident, back) return None if is_call else NO_FTRACE if back is not None: @@ -1377,9 +1344,10 @@ cdef class PyDBFrame: info.pydev_original_step_cmd = -1 info.pydev_step_cmd = -1 info.pydev_state = 1 + info.update_stepping_info() # if we are quitting, let's stop the tracing - if main_debugger.quitting: + if py_db.quitting: return None if is_call else NO_FTRACE return self.trace_dispatch @@ -1387,9 +1355,14 @@ cdef class PyDBFrame: # Unfortunately Python itself stops the tracing when it originates from # the tracing function, so, we can't do much about it (just let the user know). exc = sys.exc_info()[0] - cmd = main_debugger.cmd_factory.make_console_message( - '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_console_message( + "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + % ( + exc, + thread, + ) + ) + py_db.writer.add_command(cmd) if not issubclass(exc, (KeyboardInterrupt, SystemExit)): pydev_log.exception() raise @@ -1398,20 +1371,284 @@ cdef class PyDBFrame: info.is_tracing -= 1 # end trace_dispatch + + +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): + cdef bint should_stop; + cdef bint was_just_raised; + cdef list check_excs; +# ELSE +# def should_stop_on_exception(py_db, info, frame, thread, arg, prev_user_uncaught_exc_info): + # ENDIF + + should_stop = False + maybe_user_uncaught_exc_info = prev_user_uncaught_exc_info + + # 2 = 2 + if info.pydev_state != 2: # and breakpoint is not None: + exception, value, trace = arg + + if trace is not None and hasattr(trace, "tb_next"): + # on jython trace is None on the first event and it may not have a tb_next. + + should_stop = False + exception_breakpoint = None + try: + if py_db.plugin is not None: + result = py_db.plugin.exception_break(py_db, frame, thread, arg) + if result: + should_stop, frame = result + except: + pydev_log.exception() + + if not should_stop: + # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). + if exception == SystemExit and py_db.ignore_system_exit_code(value): + pass + + elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): + # These exceptions are control-flow related (they work as a generator + # pause), so, we shouldn't stop on them. + pass + + elif ignore_exception_trace(trace): + pass + + else: + was_just_raised = just_raised(trace) + + # It was not handled by any plugin, lets check exception breakpoints. + check_excs = [] + + # Note: check user unhandled before regular exceptions. + exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) + if exc_break_user is not None: + check_excs.append((exc_break_user, True)) + + exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) + if exc_break_caught is not None: + check_excs.append((exc_break_caught, False)) + + for exc_break, is_user_uncaught in check_excs: + # Initially mark that it should stop and then go into exclusions. + should_stop = True + + if py_db.exclude_exception_by_filter(exc_break, trace): + pydev_log.debug( + "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) + ) + should_stop = False + + elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): + should_stop = False + + elif is_user_uncaught: + # Note: we don't stop here, we just collect the exc_info to use later on... + should_stop = False + if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ): + # User uncaught means that we're currently in user code but the code + # up the stack is library code. + exc_info = prev_user_uncaught_exc_info + if not exc_info: + exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + else: + lines = exc_info[2] + lines.add(frame.f_lineno) + exc_info = (arg, frame.f_lineno, lines) + maybe_user_uncaught_exc_info = exc_info + else: + # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + if ( + exc_break.notify_on_first_raise_only + and py_db.skip_on_exceptions_thrown_in_same_context + and not was_just_raised + and not just_raised(trace.tb_next) + ): + # In this case we never stop if it was just raised, so, to know if it was the first we + # need to check if we're in the 2nd method. + should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception + + elif ( + exc_break.notify_on_first_raise_only + and not py_db.skip_on_exceptions_thrown_in_same_context + and not was_just_raised + ): + should_stop = False # I.e.: we stop only when it was just raised + + elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: + # Option: Don't break if an exception is caught in the same function from which it is thrown + should_stop = False + + if should_stop: + exception_breakpoint = exc_break + try: + info.pydev_message = exc_break.qname + except: + info.pydev_message = exc_break.qname.encode("utf-8") + break + + if should_stop: + # Always add exception to frame (must remove later after we proceed). + add_exception_to_frame(frame, (exception, value, trace)) + + if exception_breakpoint is not None and exception_breakpoint.expression is not None: + py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) + + return should_stop, frame, maybe_user_uncaught_exc_info + + +# Same thing in the main debugger but only considering the file contents, while the one in the main debugger +# considers the user input (so, the actual result must be a join of both). +filename_to_lines_where_exceptions_are_ignored: dict = {} +filename_to_stat_info: dict = {} + + +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +def handle_exception(py_db, thread, frame, arg, str exception_type): + cdef bint stopped; + cdef tuple abs_real_path_and_base; + cdef str absolute_filename; + cdef str canonical_normalized_filename; + cdef dict lines_ignored; + cdef dict frame_id_to_frame; + cdef dict merged; + cdef object trace_obj; +# ELSE +# def handle_exception(py_db, thread, frame, arg, exception_type): + # ENDIF + stopped = False + try: + # print('handle_exception', frame.f_lineno, frame.f_code.co_name) + + # We have 3 things in arg: exception type, description, traceback object + trace_obj = arg[2] + + initial_trace_obj = trace_obj + if trace_obj.tb_next is None and trace_obj.tb_frame is frame: + # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). + pass + else: + # Get the trace_obj from where the exception was raised... + while trace_obj.tb_next is not None: + trace_obj = trace_obj.tb_next + + if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: + for check_trace_obj in (initial_trace_obj, trace_obj): + abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + absolute_filename = abs_real_path_and_base[0] + canonical_normalized_filename = abs_real_path_and_base[1] + + lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + if lines_ignored is None: + lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} + + try: + curr_stat = os.stat(absolute_filename) + curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + except: + curr_stat = None + + last_stat = filename_to_stat_info.get(absolute_filename) + if last_stat != curr_stat: + filename_to_stat_info[absolute_filename] = curr_stat + lines_ignored.clear() + try: + linecache.checkcache(absolute_filename) + except: + pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) + + from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + if from_user_input: + merged = {} + merged.update(lines_ignored) + # Override what we have with the related entries that the user entered + merged.update(from_user_input) + else: + merged = lines_ignored + + exc_lineno = check_trace_obj.tb_lineno + + # print ('lines ignored', lines_ignored) + # print ('user input', from_user_input) + # print ('merged', merged, 'curr', exc_lineno) + + if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + try: + line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + except: + pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) + line = "" + + if IGNORE_EXCEPTION_TAG.match(line) is not None: + lines_ignored[exc_lineno] = 1 + return False + else: + # Put in the cache saying not to ignore + lines_ignored[exc_lineno] = 0 + else: + # Ok, dict has it already cached, so, let's check it... + if merged.get(exc_lineno, 0): + return False + + try: + frame_id_to_frame = {} + frame_id_to_frame[id(frame)] = frame + f = trace_obj.tb_frame + while f is not None: + frame_id_to_frame[id(f)] = f + f = f.f_back + f = None + + stopped = True + py_db.send_caught_exception_stack(thread, arg, id(frame)) + try: + py_db.set_suspend(thread, 137) + py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) + finally: + py_db.send_caught_exception_stack_proceeded(thread) + except: + pydev_log.exception() + + py_db.set_trace_for_frame_and_parents(thread.ident, frame) + finally: + # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + remove_exception_from_frame(frame) + # Clear some local variables... + frame = None + trace_obj = None + initial_trace_obj = None + check_trace_obj = None + f = None + frame_id_to_frame = None + py_db = None + thread = None + + return stopped from _pydev_bundle.pydev_is_thread_alive import is_thread_alive from _pydev_bundle.pydev_log import exception as pydev_log_exception from _pydev_bundle._pydev_saved_modules import threading -from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, - USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, ForkSafeLock) +from _pydevd_bundle.pydevd_constants import ( + get_current_thread_id, + NO_FTRACE, + USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, + ForkSafeLock, + PYDEVD_USE_SYS_MONITORING, +) from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) from cpython.object cimport PyObject from cpython.ref cimport Py_INCREF, Py_XDECREF # ELSE # from _pydevd_bundle.pydevd_frame import PyDBFrame, is_unhandled_exception # ENDIF +# fmt: on +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef dict _global_notify_skipped_step_in # ELSE @@ -1421,6 +1658,7 @@ cdef dict _global_notify_skipped_step_in # 109 = 109 # 160 = 160 # ENDIF +# fmt: on # Cache where we should keep that we completely skipped entering some context. # It needs to be invalidated when: @@ -1444,6 +1682,8 @@ def notify_skipped_step_in_because_of_filters(py_db, frame): _global_notify_skipped_step_in = True py_db.notify_skipped_step_in_because_of_filters(frame) + +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class SafeCallWrapper: cdef method_object @@ -1461,14 +1701,17 @@ cdef class SafeCallWrapper: return self.method_object # ELSE # ENDIF +# fmt: on def fix_top_level_trace_and_get_trace_func(py_db, frame): + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef str filename; cdef str name; cdef tuple args; # ENDIF + # fmt: on # Note: this is always the first entry-point in the tracing for any thread. # After entering here we'll set a new tracing function for this thread @@ -1486,45 +1729,45 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): name = f_unhandled.f_code.co_filename # basename - i = name.rfind('/') - j = name.rfind('\\') + i = name.rfind("/") + j = name.rfind("\\") if j > i: i = j if i >= 0: - name = name[i + 1:] + name = name[i + 1 :] # remove ext - i = name.rfind('.') + i = name.rfind(".") if i >= 0: name = name[:i] - if name == 'threading': - if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): + if name == "threading": + if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): # We need __bootstrap_inner, not __bootstrap. return None, False - elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): + elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - t = f_unhandled.f_locals.get('self') + t = f_unhandled.f_locals.get("self") force_only_unhandled_tracer = True if t is not None and isinstance(t, threading.Thread): thread = t break - elif name == 'pydev_monkey': - if f_unhandled.f_code.co_name == '__call__': + elif name == "pydev_monkey": + if f_unhandled.f_code.co_name == "__call__": force_only_unhandled_tracer = True break - elif name == 'pydevd': - if f_unhandled.f_code.co_name in ('run', 'main'): + elif name == "pydevd": + if f_unhandled.f_code.co_name in ("run", "main"): # We need to get to _exec return None, False - if f_unhandled.f_code.co_name == '_exec': + if f_unhandled.f_code.co_name == "_exec": force_only_unhandled_tracer = True break - elif name == 'pydevd_tracing': + elif name == "pydevd_tracing": return None, False elif f_unhandled.f_back is None: @@ -1543,7 +1786,7 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): # Jython does not have threading.get_ident(). thread = py_db.threading_current_thread() - if getattr(thread, 'pydev_do_not_trace', None): + if getattr(thread, "pydev_do_not_trace", None): py_db.disable_tracing() return None, False @@ -1561,19 +1804,25 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): if f_unhandled.f_back is None and not force_only_unhandled_tracer: # Happens when we attach to a running program (cannot reuse instance because it's mutable). top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) - additional_info.top_level_thread_tracer_no_back_frames.append(top_level_thread_tracer) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + additional_info.top_level_thread_tracer_no_back_frames.append( + top_level_thread_tracer + ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). else: top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled if top_level_thread_tracer is None: # Stop in some internal place to report about unhandled exceptions top_level_thread_tracer = TopLevelThreadTracerOnlyUnhandledExceptions(args) - additional_info.top_level_thread_tracer_unhandled = top_level_thread_tracer # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + additional_info.top_level_thread_tracer_unhandled = ( + top_level_thread_tracer + ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). # print(' --> found to trace unhandled', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) f_trace = top_level_thread_tracer.get_trace_dispatch_func() + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) f_trace = SafeCallWrapper(f_trace) # ENDIF + # fmt: on f_unhandled.f_trace = f_trace if frame is f_unhandled: @@ -1584,22 +1833,25 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): thread_tracer = ThreadTracer(args) additional_info.thread_tracer = thread_tracer -# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) return SafeCallWrapper(thread_tracer), True -# ELSE + # ELSE # return thread_tracer, True -# ENDIF + # ENDIF + # fmt: on def trace_dispatch(py_db, frame, event, arg): thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) if thread_trace_func is None: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE if apply_to_settrace: py_db.enable_tracing(thread_trace_func) return thread_trace_func(frame, event, arg) +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class TopLevelThreadTracerOnlyUnhandledExceptions: cdef public tuple _args; @@ -1607,15 +1859,16 @@ cdef class TopLevelThreadTracerOnlyUnhandledExceptions: self._args = args # ELSE # class TopLevelThreadTracerOnlyUnhandledExceptions(object): -# # def __init__(self, args): # self._args = args +# # ENDIF +# fmt: on def trace_unhandled_exceptions(self, frame, event, arg): # Note that we ignore the frame as this tracing method should only be put in topmost frames already. # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) - if event == 'exception' and arg is not None: + if event == "exception" and arg is not None: py_db, t, additional_info = self._args[0:3] if arg is not None: if not additional_info.suspended_at_unhandled: @@ -1629,7 +1882,7 @@ cdef class TopLevelThreadTracerOnlyUnhandledExceptions: def get_trace_dispatch_func(self): return self.trace_unhandled_exceptions - +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class TopLevelThreadTracerNoBackFrame: cdef public object _frame_trace_dispatch; @@ -1647,7 +1900,7 @@ cdef class TopLevelThreadTracerNoBackFrame: self._last_raise_line = -1 # ELSE # class TopLevelThreadTracerNoBackFrame(object): -# ''' +# """ # This tracer is pretty special in that it's dealing with a frame without f_back (i.e.: top frame # on remote attach or QThread). # @@ -1657,7 +1910,7 @@ cdef class TopLevelThreadTracerNoBackFrame: # work with in the tracing -- see: https://bugs.python.org/issue34099, so, we inspect bytecode to # determine if some exception will be traced or not... note that if this is not available -- such # as on Jython -- we consider any top-level exception to be unnhandled). -# ''' +# """ # # def __init__(self, frame_trace_dispatch, args): # self._frame_trace_dispatch = frame_trace_dispatch @@ -1666,7 +1919,9 @@ cdef class TopLevelThreadTracerNoBackFrame: # self._last_exc_arg = None # self._raise_lines = set() # self._last_raise_line = -1 +# # ENDIF +# fmt: on def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # DEBUG = 'code_to_debug' in frame.f_code.co_filename @@ -1675,12 +1930,12 @@ cdef class TopLevelThreadTracerNoBackFrame: if frame_trace_dispatch is not None: self._frame_trace_dispatch = frame_trace_dispatch(frame, event, arg) - if event == 'exception': + if event == "exception": self._last_exc_arg = arg self._raise_lines.add(frame.f_lineno) self._last_raise_line = frame.f_lineno - elif event == 'return' and self._last_exc_arg is not None: + elif event == "return" and self._last_exc_arg is not None: # For unhandled exceptions we actually track the return when at the topmost level. try: py_db, t, additional_info = self._args[0:3] @@ -1694,17 +1949,20 @@ cdef class TopLevelThreadTracerNoBackFrame: ret = self.trace_dispatch_and_unhandled_exceptions # Need to reset (the call to _frame_trace_dispatch may have changed it). + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) frame.f_trace = SafeCallWrapper(ret) # ELSE # frame.f_trace = ret # ENDIF + # fmt: on return ret def get_trace_dispatch_func(self): return self.trace_dispatch_and_unhandled_exceptions +# fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef class ThreadTracer: cdef public tuple _args; @@ -1712,13 +1970,14 @@ cdef class ThreadTracer: self._args = args # ELSE # class ThreadTracer(object): -# # def __init__(self, args): # self._args = args +# # ENDIF +# fmt: on def __call__(self, frame, event, arg): - ''' This is the callback used when we enter some context in the debugger. + """This is the callback used when we enter some context in the debugger. We also decorate the thread we are in with info about the debugging. The attributes added are: @@ -1729,7 +1988,8 @@ cdef class ThreadTracer: :param PyDB py_db: This is the global debugger (this method should actually be added as a method to it). - ''' + """ + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) cdef str filename; cdef str base; @@ -1740,24 +2000,25 @@ cdef class ThreadTracer: cdef tuple abs_path_canonical_path_and_base; cdef PyDBAdditionalThreadInfo additional_info; # ENDIF + # fmt: on # DEBUG = 'code_to_debug' in frame.f_code.co_filename # if DEBUG: print('ENTER: trace_dispatch: %s %s %s %s' % (frame.f_code.co_filename, frame.f_lineno, event, frame.f_code.co_name)) py_db, t, additional_info, cache_skips, frame_skips_cache = self._args if additional_info.is_tracing: - return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch additional_info.is_tracing += 1 try: pydev_step_cmd = additional_info.pydev_step_cmd is_stepping = pydev_step_cmd != -1 if py_db.pydb_disposed: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # if thread is not alive, cancel trace_dispatch processing if not is_thread_alive(t): py_db.notify_thread_not_alive(get_current_thread_id(t)) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # Note: it's important that the context name is also given because we may hit something once # in the global context and another in the local context. @@ -1765,23 +2026,30 @@ cdef class ThreadTracer: if frame_cache_key in cache_skips: if not is_stepping: # if DEBUG: print('skipped: trace_dispatch (cache hit)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # When stepping we can't take into account caching based on the breakpoints (only global filtering). if cache_skips.get(frame_cache_key) == 1: - - if additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + if ( + additional_info.pydev_original_step_cmd in (107, 144) + and not _global_notify_skipped_step_in + ): notify_skipped_step_in_because_of_filters(py_db, frame) back_frame = frame.f_back - if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + if back_frame is not None and pydev_step_cmd in ( + 107, + 144, + 109, + 160, + ): back_frame_cache_key = back_frame.f_code if cache_skips.get(back_frame_cache_key) == 1: # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch (cache hit: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE try: # Make fast path faster! @@ -1789,39 +2057,50 @@ cdef class ThreadTracer: except: abs_path_canonical_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) - file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd + file_type = py_db.get_file_type( + frame, abs_path_canonical_path_and_base + ) # we don't want to debug threading or anything related to pydevd if file_type is not None: if file_type == 1: # inlining LIB_FILE = 1 if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) cache_skips[frame_cache_key] = 1 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) cache_skips[frame_cache_key] = 1 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE if py_db.is_files_filter_enabled: if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): cache_skips[frame_cache_key] = 1 - if is_stepping and additional_info.pydev_original_step_cmd in (107, 144) and not _global_notify_skipped_step_in: + if ( + is_stepping + and additional_info.pydev_original_step_cmd in (107, 144) + and not _global_notify_skipped_step_in + ): notify_skipped_step_in_because_of_filters(py_db, frame) # A little gotcha, sometimes when we're stepping in we have to stop in a # return event showing the back frame as the current frame, so, we need # to check not only the current frame but the back frame too. back_frame = frame.f_back - if back_frame is not None and pydev_step_cmd in (107, 144, 109, 160): + if back_frame is not None and pydev_step_cmd in ( + 107, + 144, + 109, + 160, + ): if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): back_frame_cache_key = back_frame.f_code cache_skips[back_frame_cache_key] = 1 # if DEBUG: print('skipped: trace_dispatch (filtered out: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch (filtered out: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # if DEBUG: print('trace_dispatch', filename, frame.f_lineno, event, frame.f_code.co_name, file_type) @@ -1829,28 +2108,35 @@ cdef class ThreadTracer: # reference to the frame). ret = PyDBFrame( ( - py_db, abs_path_canonical_path_and_base, additional_info, t, frame_skips_cache, frame_cache_key, + py_db, + abs_path_canonical_path_and_base, + additional_info, + t, + frame_skips_cache, + frame_cache_key, ) ).trace_dispatch(frame, event, arg) if ret is None: # 1 means skipped because of filters. # 2 means skipped because no breakpoints were hit. cache_skips[frame_cache_key] = 2 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE + # fmt: off # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) frame.f_trace = SafeCallWrapper(ret) # Make sure we keep the returned tracer. # ELSE # frame.f_trace = ret # Make sure we keep the returned tracer. # ENDIF + # fmt: on return ret except SystemExit: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE except Exception: if py_db.pydb_disposed: - return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. # Log it try: if pydev_log_exception is not None: @@ -1860,7 +2146,7 @@ cdef class ThreadTracer: # Error logging? We're really in the interpreter shutdown... # (https://github.com/fabioz/PyDev.Debugger/issues/8) pass - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE finally: additional_info.is_tracing -= 1 @@ -1882,3 +2168,8 @@ if USE_CUSTOM_SYS_CURRENT_FRAMES_MAP: return _original_call(self, frame, event, arg) ThreadTracer.__call__ = __call__ + +if PYDEVD_USE_SYS_MONITORING: + + def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + raise RuntimeError("Not used in sys.monitoring mode.") diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py index 1058519b3..4d5038c43 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_cython_wrapper.py @@ -1,4 +1,5 @@ import sys + try: try: from _pydevd_bundle_ext import pydevd_cython as mod @@ -10,13 +11,13 @@ import struct try: - is_python_64bit = (struct.calcsize('P') == 8) + is_python_64bit = struct.calcsize("P") == 8 except: # In Jython this call fails, but this is Ok, we don't support Jython for speedups anyways. raise ImportError - plat = '32' + plat = "32" if is_python_64bit: - plat = '64' + plat = "64" # We also accept things as: # @@ -26,14 +27,14 @@ # to have multiple pre-compiled pyds distributed along the IDE # (generated by build_tools/build_binaries_windows.py). - mod_name = 'pydevd_cython_%s_%s%s_%s' % (sys.platform, sys.version_info[0], sys.version_info[1], plat) - check_name = '_pydevd_bundle.%s' % (mod_name,) + mod_name = "pydevd_cython_%s_%s%s_%s" % (sys.platform, sys.version_info[0], sys.version_info[1], plat) + check_name = "_pydevd_bundle.%s" % (mod_name,) mod = getattr(__import__(check_name), mod_name) # Regardless of how it was found, make sure it's later available as the # initial name so that the expected types from cython in frame eval # are valid. -sys.modules['_pydevd_bundle.pydevd_cython'] = mod +sys.modules["_pydevd_bundle.pydevd_cython"] = mod trace_dispatch = mod.trace_dispatch @@ -41,6 +42,10 @@ set_additional_thread_info = mod.set_additional_thread_info +any_thread_stepping = mod.any_thread_stepping + +remove_additional_info = mod.remove_additional_info + global_cache_skips = mod.global_cache_skips global_cache_frame_skips = mod.global_cache_frame_skips @@ -49,4 +54,10 @@ fix_top_level_trace_and_get_trace_func = mod.fix_top_level_trace_and_get_trace_func -version = getattr(mod, 'version', 0) +handle_exception = mod.handle_exception + +should_stop_on_exception = mod.should_stop_on_exception + +is_unhandled_exception = mod.is_unhandled_exception + +version = getattr(mod, "version", 0) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py index 87295974d..de2f59874 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_daemon_thread.py @@ -2,26 +2,30 @@ from _pydev_bundle import _pydev_saved_modules from _pydevd_bundle.pydevd_utils import notify_about_gevent_if_needed import weakref -from _pydevd_bundle.pydevd_constants import IS_JYTHON, IS_IRONPYTHON, \ - PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS +from _pydevd_bundle.pydevd_constants import ( + IS_JYTHON, + IS_IRONPYTHON, + PYDEVD_APPLY_PATCHING_TO_HIDE_PYDEVD_THREADS, + PYDEVD_USE_SYS_MONITORING, +) from _pydev_bundle.pydev_log import exception as pydev_log_exception import sys from _pydev_bundle import pydev_log import pydevd_tracing from _pydevd_bundle.pydevd_collect_bytecode_info import iter_instructions +from _pydevd_sys_monitoring import pydevd_sys_monitoring if IS_JYTHON: import org.python.core as JyCore # @UnresolvedImport class PyDBDaemonThread(threading.Thread): - def __init__(self, py_db, target_and_args=None): - ''' + """ :param target_and_args: tuple(func, args, kwargs) if this should be a function and args to run. -- Note: use through run_as_pydevd_daemon_thread(). - ''' + """ threading.Thread.__init__(self) notify_about_gevent_if_needed() self._py_db = weakref.ref(py_db) @@ -58,61 +62,65 @@ def _on_run(self): target, args, kwargs = self._target_and_args target(*args, **kwargs) else: - raise NotImplementedError('Should be reimplemented by: %s' % self.__class__) + raise NotImplementedError("Should be reimplemented by: %s" % self.__class__) def do_kill_pydev_thread(self): if not self._kill_received: - pydev_log.debug('%s received kill signal', self.name) + pydev_log.debug("%s received kill signal", self.name) self._kill_received = True def _stop_trace(self): if self.pydev_do_not_trace: + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.stop_monitoring(all_threads=False) + return pydevd_tracing.SetTrace(None) # no debugging on this thread def _collect_load_names(func): found_load_names = set() for instruction in iter_instructions(func.__code__): - if instruction.opname in ('LOAD_GLOBAL', 'LOAD_ATTR', 'LOAD_METHOD'): + if instruction.opname in ("LOAD_GLOBAL", "LOAD_ATTR", "LOAD_METHOD"): found_load_names.add(instruction.argrepr) return found_load_names def _patch_threading_to_hide_pydevd_threads(): - ''' + """ Patches the needed functions on the `threading` module so that the pydevd threads are hidden. Note that we patch the functions __code__ to avoid issues if some code had already imported those variables prior to the patching. - ''' + """ found_load_names = _collect_load_names(threading.enumerate) # i.e.: we'll only apply the patching if the function seems to be what we expect. new_threading_enumerate = None if found_load_names in ( - {'_active_limbo_lock', '_limbo', '_active', 'values', 'list'}, - {'_active_limbo_lock', '_limbo', '_active', 'values', 'NULL + list'} - ): - pydev_log.debug('Applying patching to hide pydevd threads (Py3 version).') + {"_active_limbo_lock", "_limbo", "_active", "values", "list"}, + {"_active_limbo_lock", "_limbo", "_active", "values", "NULL + list"}, + {"NULL + list", "_active", "_active_limbo_lock", "NULL|self + values", "_limbo"}, + ): + pydev_log.debug("Applying patching to hide pydevd threads (Py3 version).") def new_threading_enumerate(): with _active_limbo_lock: ret = list(_active.values()) + list(_limbo.values()) - return [t for t in ret if not getattr(t, 'is_pydev_daemon_thread', False)] + return [t for t in ret if not getattr(t, "is_pydev_daemon_thread", False)] - elif found_load_names == set(('_active_limbo_lock', '_limbo', '_active', 'values')): - pydev_log.debug('Applying patching to hide pydevd threads (Py2 version).') + elif found_load_names == set(("_active_limbo_lock", "_limbo", "_active", "values")): + pydev_log.debug("Applying patching to hide pydevd threads (Py2 version).") def new_threading_enumerate(): with _active_limbo_lock: ret = _active.values() + _limbo.values() - return [t for t in ret if not getattr(t, 'is_pydev_daemon_thread', False)] + return [t for t in ret if not getattr(t, "is_pydev_daemon_thread", False)] else: - pydev_log.info('Unable to hide pydevd threads. Found names in threading.enumerate: %s', found_load_names) + pydev_log.info("Unable to hide pydevd threads. Found names in threading.enumerate: %s", found_load_names) if new_threading_enumerate is not None: @@ -143,7 +151,7 @@ def new_active_count(): # But in this particular case, we do want threads with `is_pydev_daemon_thread` to appear # explicitly due to the pydevd `CheckAliveThread` (because we want the shutdown to wait on it). # So, it can't rely on the `enumerate` for that anymore as it's patched to not return pydevd threads. - if hasattr(threading, '_pickSomeNonDaemonThread'): + if hasattr(threading, "_pickSomeNonDaemonThread"): def new_pick_some_non_daemon_thread(): with _active_limbo_lock: @@ -176,7 +184,7 @@ def mark_as_pydevd_daemon_thread(thread): try: _patch_threading_to_hide_pydevd_threads() except: - pydev_log.exception('Error applying patching to hide pydevd threads.') + pydev_log.exception("Error applying patching to hide pydevd threads.") thread.pydev_do_not_trace = True thread.is_pydev_daemon_thread = True @@ -184,10 +192,10 @@ def mark_as_pydevd_daemon_thread(thread): def run_as_pydevd_daemon_thread(py_db, func, *args, **kwargs): - ''' + """ Runs a function as a pydevd daemon thread (without any tracing in place). - ''' + """ t = PyDBDaemonThread(py_db, target_and_args=(func, args, kwargs)) - t.name = '%s (pydevd daemon thread)' % (func.__name__,) + t.name = "%s (pydevd daemon thread)" % (func.__name__,) t.start() return t diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py index 918ce719e..b32576baa 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_defaults.py @@ -1,6 +1,6 @@ -''' +""" This module holds the customization settings for the debugger. -''' +""" from _pydevd_bundle.pydevd_constants import QUOTED_LINE_PROTOCOL from _pydev_bundle import pydev_log @@ -17,7 +17,7 @@ class PydevdCustomization(object): # py_db.skip_suspend_on_breakpoint_exception = (BaseException,) # py_db.skip_print_breakpoint_exception = (NameError,) # py_db.multi_threads_single_notification = True - DEBUG_MODE: str = '' + DEBUG_MODE: str = "" # This may be a ; to be pre-imported # Something as: 'c:/temp/foo;my_module.bar' @@ -33,24 +33,24 @@ class PydevdCustomization(object): # If the pre-import fails an output message is # sent (but apart from that debugger execution # should continue). - PREIMPORT: str = '' + PREIMPORT: str = "" def on_pydb_init(py_db): - if PydevdCustomization.DEBUG_MODE == 'debugpy-dap': - pydev_log.debug('Apply debug mode: debugpy-dap') + if PydevdCustomization.DEBUG_MODE == "debugpy-dap": + pydev_log.debug("Apply debug mode: debugpy-dap") py_db.skip_suspend_on_breakpoint_exception = (BaseException,) py_db.skip_print_breakpoint_exception = (NameError,) py_db.multi_threads_single_notification = True elif not PydevdCustomization.DEBUG_MODE: - pydev_log.debug('Apply debug mode: default') + pydev_log.debug("Apply debug mode: default") else: - pydev_log.debug('WARNING: unknown debug mode: %s', PydevdCustomization.DEBUG_MODE) + pydev_log.debug("WARNING: unknown debug mode: %s", PydevdCustomization.DEBUG_MODE) if PydevdCustomization.PREIMPORT: - pydev_log.debug('Preimport: %s', PydevdCustomization.PREIMPORT) + pydev_log.debug("Preimport: %s", PydevdCustomization.PREIMPORT) try: - sys_path_entry, module_name = PydevdCustomization.PREIMPORT.rsplit(';', maxsplit=1) + sys_path_entry, module_name = PydevdCustomization.PREIMPORT.rsplit(";", maxsplit=1) except Exception: pydev_log.exception("Expected ';' in %s" % (PydevdCustomization.PREIMPORT,)) else: @@ -61,6 +61,4 @@ def on_pydb_init(py_db): finally: sys.path.remove(sys_path_entry) except Exception: - pydev_log.exception( - "Error importing %s (with sys.path entry: %s)" % (module_name, sys_path_entry)) - + pydev_log.exception("Error importing %s (with sys.path entry: %s)" % (module_name, sys_path_entry)) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py index 684af672b..500cbcefc 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace.py @@ -1,6 +1,6 @@ -''' +""" Support for a tag that allows skipping over functions while debugging. -''' +""" import linecache import re @@ -17,21 +17,21 @@ # # def test2(): #@DontTrace # pass -DONT_TRACE_TAG = '@DontTrace' +DONT_TRACE_TAG = "@DontTrace" # Regular expression to match a decorator (at the beginning # of a line). -RE_DECORATOR = re.compile(r'^\s*@') +RE_DECORATOR = re.compile(r"^\s*@") # Mapping from code object to bool. # If the key exists, the value is the cached result of should_trace_hook _filename_to_ignored_lines = {} -def default_should_trace_hook(frame, absolute_filename): - ''' +def default_should_trace_hook(code, absolute_filename): + """ Return True if this frame should be traced, False if tracing should be blocked. - ''' + """ # First, check whether this code object has a cached value ignored_lines = _filename_to_ignored_lines.get(absolute_filename) if ignored_lines is None: @@ -47,7 +47,7 @@ def default_should_trace_hook(frame, absolute_filename): ignored_lines = {} lines = linecache.getlines(absolute_filename) for i_line, line in enumerate(lines): - j = line.find('#') + j = line.find("#") if j >= 0: comment = line[j:] if DONT_TRACE_TAG in comment: @@ -72,20 +72,21 @@ def default_should_trace_hook(frame, absolute_filename): _filename_to_ignored_lines[absolute_filename] = ignored_lines - func_line = frame.f_code.co_firstlineno - 1 # co_firstlineno is 1-based, so -1 is needed + func_line = code.co_firstlineno - 1 # co_firstlineno is 1-based, so -1 is needed return not ( - func_line - 1 in ignored_lines or # -1 to get line before method - func_line in ignored_lines) # method line + func_line - 1 in ignored_lines # -1 to get line before method + or func_line in ignored_lines + ) # method line should_trace_hook = None def clear_trace_filter_cache(): - ''' + """ Clear the trace filter cache. Call this after reloading. - ''' + """ global should_trace_hook try: # Need to temporarily disable a hook because otherwise @@ -102,14 +103,14 @@ def clear_trace_filter_cache(): def trace_filter(mode): - ''' + """ Set the trace filter mode. mode: Whether to enable the trace hook. True: Trace filtering on (skipping methods tagged @DontTrace) False: Trace filtering off (trace methods tagged @DontTrace) None/default: Toggle trace filtering. - ''' + """ global should_trace_hook if mode is None: mode = should_trace_hook is None @@ -120,4 +121,3 @@ def trace_filter(mode): should_trace_hook = None return mode - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py index d37b1fc53..7fe198165 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_dont_trace_files.py @@ -1,5 +1,6 @@ # Important: Autogenerated file. +# fmt: off # DO NOT edit manually! # DO NOT edit manually! @@ -11,7 +12,8 @@ '_pydev_runfiles': PYDEV_FILE, '_pydevd_bundle': PYDEV_FILE, '_pydevd_frame_eval': PYDEV_FILE, - 'pydev_ipython': PYDEV_FILE, + '_pydevd_sys_monitoring': PYDEV_FILE, + 'pydev_ipython': LIB_FILE, 'pydev_sitecustomize': PYDEV_FILE, 'pydevd_attach_to_process': PYDEV_FILE, 'pydevd_concurrency_analyser': PYDEV_FILE, @@ -19,6 +21,25 @@ 'test_pydevd_reload': PYDEV_FILE, } +LIB_FILES_IN_DONT_TRACE_DIRS = { + '__init__.py', + 'inputhook.py', + 'inputhookglut.py', + 'inputhookgtk.py', + 'inputhookgtk3.py', + 'inputhookpyglet.py', + 'inputhookqt4.py', + 'inputhookqt5.py', + 'inputhookqt6.py', + 'inputhooktk.py', + 'inputhookwx.py', + 'matplotlibtools.py', + 'qt.py', + 'qt_for_kernel.py', + 'qt_loaders.py', + 'version.py', +} + DONT_TRACE = { # commonly used things from the stdlib that we don't want to trace 'Queue.py':LIB_FILE, @@ -43,6 +64,7 @@ '_pydev_saved_modules.py': PYDEV_FILE, '_pydev_sys_patch.py': PYDEV_FILE, '_pydev_tipper_common.py': PYDEV_FILE, + '_pydevd_sys_monitoring.py': PYDEV_FILE, 'django_debug.py': PYDEV_FILE, 'jinja2_debug.py': PYDEV_FILE, 'pycompletionserver.py': PYDEV_FILE, @@ -78,6 +100,7 @@ 'pydevd_base_schema.py': PYDEV_FILE, 'pydevd_breakpoints.py': PYDEV_FILE, 'pydevd_bytecode_utils.py': PYDEV_FILE, + 'pydevd_bytecode_utils_py311.py': PYDEV_FILE, 'pydevd_code_to_source.py': PYDEV_FILE, 'pydevd_collect_bytecode_info.py': PYDEV_FILE, 'pydevd_comm.py': PYDEV_FILE, @@ -130,10 +153,10 @@ 'pydevd_source_mapping.py': PYDEV_FILE, 'pydevd_stackless.py': PYDEV_FILE, 'pydevd_suspended_frames.py': PYDEV_FILE, + 'pydevd_sys_monitoring.py': PYDEV_FILE, 'pydevd_thread_lifecycle.py': PYDEV_FILE, 'pydevd_thread_wrappers.py': PYDEV_FILE, 'pydevd_timeout.py': PYDEV_FILE, - 'pydevd_trace_api.py': PYDEV_FILE, 'pydevd_trace_dispatch.py': PYDEV_FILE, 'pydevd_trace_dispatch_regular.py': PYDEV_FILE, 'pydevd_traceproperty.py': PYDEV_FILE, @@ -151,3 +174,5 @@ DONT_TRACE['cp1252.py'] = LIB_FILE DONT_TRACE['utf_8.py'] = LIB_FILE DONT_TRACE['codecs.py'] = LIB_FILE + +# fmt: on diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py index ee4f37a6c..486e8eb1d 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_exec2.py @@ -2,4 +2,4 @@ def Exec(exp, global_vars, local_vars=None): if local_vars is not None: exec(exp, global_vars, local_vars) else: - exec(exp, global_vars) \ No newline at end of file + exec(exp, global_vars) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py index 8c5a441b1..8cabe7995 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_api.py @@ -7,11 +7,10 @@ def _with_metaclass(meta, *bases): """Create a base class with a metaclass.""" class metaclass(meta): - def __new__(cls, name, this_bases, d): return meta(name, bases, d) - return type.__new__(metaclass, 'temporary_class', (), {}) + return type.__new__(metaclass, "temporary_class", (), {}) # ======================================================================================================================= @@ -50,11 +49,11 @@ def get_dictionary(self, var): class _AbstractProvider(_with_metaclass(abc.ABCMeta)): - @abc.abstractmethod def can_provide(self, type_object, type_name): raise NotImplementedError + # ======================================================================================================================= # API CLASSES: # ======================================================================================================================= @@ -72,7 +71,7 @@ class StrPresentationProvider(_AbstractProvider): """ def get_str_in_context(self, val: Any, context: str): - ''' + """ :param val: This is the object for which we want a string representation. @@ -86,7 +85,7 @@ def get_str_in_context(self, val: Any, context: str): :note: this method is not required (if it's not available, get_str is called directly, so, it's only needed if the string representation needs to be converted based on the context). - ''' + """ return self.get_str(val) @abc.abstractmethod diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py index 1386cc758..e10b69b4a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_extension_utils.py @@ -1,6 +1,7 @@ import pkgutil import sys from _pydev_bundle import pydev_log + try: import pydevd_plugins.extensions as extensions except: @@ -9,7 +10,6 @@ class ExtensionManager(object): - def __init__(self): self.loaded_extensions = None self.type_to_instance = {} @@ -17,16 +17,15 @@ def __init__(self): def _load_modules(self): self.loaded_extensions = [] if extensions: - for module_loader, name, ispkg in pkgutil.walk_packages(extensions.__path__, - extensions.__name__ + '.'): - mod_name = name.split('.')[-1] - if not ispkg and mod_name.startswith('pydevd_plugin'): + for module_loader, name, ispkg in pkgutil.walk_packages(extensions.__path__, extensions.__name__ + "."): + mod_name = name.split(".")[-1] + if not ispkg and mod_name.startswith("pydevd_plugin"): try: __import__(name) module = sys.modules[name] self.loaded_extensions.append(module) except ImportError: - pydev_log.critical('Unable to load extension: %s', name) + pydev_log.critical("Unable to load extension: %s", name) def _ensure_loaded(self): if self.loaded_extensions is None: @@ -34,9 +33,9 @@ def _ensure_loaded(self): def _iter_attr(self): for extension in self.loaded_extensions: - dunder_all = getattr(extension, '__all__', None) + dunder_all = getattr(extension, "__all__", None) for attr_name in dir(extension): - if not attr_name.startswith('_'): + if not attr_name.startswith("_"): if dunder_all is None or attr_name in dunder_all: yield attr_name, getattr(extension, attr_name) @@ -50,7 +49,7 @@ def get_extension_classes(self, extension_type): try: handlers.append(attr()) except: - pydev_log.exception('Unable to load extension class: %s', attr_name) + pydev_log.exception("Unable to load extension class: %s", attr_name) return handlers @@ -64,4 +63,3 @@ def extensions_of_type(extension_type): :rtype: list[T] """ return EXTENSION_MANAGER_INSTANCE.get_extension_classes(extension_type) - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py index d5f0d5667..c0cf39542 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_filtering.py @@ -9,17 +9,17 @@ from collections import namedtuple from _pydev_bundle._pydev_saved_modules import threading from pydevd_file_utils import normcase -from _pydevd_bundle.pydevd_constants import USER_CODE_BASENAMES_STARTING_WITH, \ - LIBRARY_CODE_BASENAMES_STARTING_WITH, IS_PYPY, IS_WINDOWS +from _pydevd_bundle.pydevd_constants import USER_CODE_BASENAMES_STARTING_WITH, LIBRARY_CODE_BASENAMES_STARTING_WITH, IS_PYPY, IS_WINDOWS from _pydevd_bundle import pydevd_constants +from _pydevd_bundle.pydevd_constants import is_true_in_env -ExcludeFilter = namedtuple('ExcludeFilter', 'name, exclude, is_path') +ExcludeFilter = namedtuple("ExcludeFilter", "name, exclude, is_path") def _convert_to_str_and_clear_empty(roots): new_roots = [] for root in roots: - assert isinstance(root, str), '%s not str (found: %s)' % (root, type(root)) + assert isinstance(root, str), "%s not str (found: %s)" % (root, type(root)) if root: new_roots.append(root) return new_roots @@ -37,11 +37,10 @@ def _check_matches(patterns, paths): path = normcase(paths[0]) if not glob.has_magic(pattern): - if pattern != path: return False - elif pattern == '**': + elif pattern == "**": if len(patterns) == 1: return True # if ** is the last one it matches anything to the right. @@ -63,12 +62,12 @@ def glob_matches_path(path, pattern, sep=os.sep, altsep=os.altsep): pattern = pattern.replace(altsep, sep) path = path.replace(altsep, sep) - drive = '' - if len(path) > 1 and path[1] == ':': + drive = "" + if len(path) > 1 and path[1] == ":": drive, path = path[0], path[2:] if drive and len(pattern) > 1: - if pattern[1] == ':': + if pattern[1] == ":": if drive.lower() != pattern[0].lower(): return False pattern = pattern[2:] @@ -76,21 +75,21 @@ def glob_matches_path(path, pattern, sep=os.sep, altsep=os.altsep): patterns = pattern.split(sep) paths = path.split(sep) if paths: - if paths[0] == '': + if paths[0] == "": paths = paths[1:] if patterns: - if patterns[0] == '': + if patterns[0] == "": patterns = patterns[1:] return _check_matches(patterns, paths) class FilesFiltering(object): - ''' + """ Note: calls at FilesFiltering are uncached. The actual API used should be through PyDB. - ''' + """ def __init__(self): self._exclude_filters = [] @@ -101,16 +100,16 @@ def __init__(self): self._use_libraries_filter = False self.require_module = False # True if some exclude filter filters by the module. - self.set_use_libraries_filter(os.getenv('PYDEVD_FILTER_LIBRARIES') is not None) + self.set_use_libraries_filter(is_true_in_env("PYDEVD_FILTER_LIBRARIES")) - project_roots = os.getenv('IDE_PROJECT_ROOTS', None) + project_roots = os.getenv("IDE_PROJECT_ROOTS", None) if project_roots is not None: project_roots = project_roots.split(os.pathsep) else: project_roots = [] self.set_project_roots(project_roots) - library_roots = os.getenv('LIBRARY_ROOTS', None) + library_roots = os.getenv("LIBRARY_ROOTS", None) if library_roots is not None: library_roots = library_roots.split(os.pathsep) else: @@ -118,11 +117,11 @@ def __init__(self): self.set_library_roots(library_roots) # Stepping filters. - pydevd_filters = os.getenv('PYDEVD_FILTERS', '') + pydevd_filters = os.getenv("PYDEVD_FILTERS", "") # To filter out it's something as: {'**/not_my_code/**': True} if pydevd_filters: pydev_log.debug("PYDEVD_FILTERS %s", (pydevd_filters,)) - if pydevd_filters.startswith('{'): + if pydevd_filters.startswith("{"): # dict(glob_pattern (str) -> exclude(True or False)) exclude_filters = [] for key, val in json.loads(pydevd_filters).items(): @@ -131,7 +130,7 @@ def __init__(self): else: # A ';' separated list of strings with globs for the # list of excludes. - filters = pydevd_filters.split(';') + filters = pydevd_filters.split(";") new_filters = [] for new_filter in filters: if new_filter.strip(): @@ -151,7 +150,7 @@ def _get_default_library_roots(cls): except ImportError: pass else: - for path_name in set(('stdlib', 'platstdlib', 'purelib', 'platlib')) & set(sysconfig.get_path_names()): + for path_name in set(("stdlib", "platstdlib", "purelib", "platlib")) & set(sysconfig.get_path_names()): roots.append(sysconfig.get_path(path_name)) # Make sure we always get at least the standard library location (based on the `os` and @@ -170,7 +169,7 @@ def _get_default_library_roots(cls): pydev_log.debug("Adding %s to default library roots.", pypy_lib_dir) roots.append(pypy_lib_dir) - if hasattr(site, 'getusersitepackages'): + if hasattr(site, "getusersitepackages"): site_paths = site.getusersitepackages() if isinstance(site_paths, (list, tuple)): for site_path in site_paths: @@ -178,7 +177,7 @@ def _get_default_library_roots(cls): else: roots.append(site_paths) - if hasattr(site, 'getsitepackages'): + if hasattr(site, "getsitepackages"): site_paths = site.getsitepackages() if isinstance(site_paths, (list, tuple)): for site_path in site_paths: @@ -187,7 +186,7 @@ def _get_default_library_roots(cls): roots.append(site_paths) for path in sys.path: - if os.path.exists(path) and os.path.basename(path) in ('site-packages', 'pip-global'): + if os.path.exists(path) and os.path.basename(path) in ("site-packages", "pip-global"): roots.append(path) # On WASM some of the roots may not exist, filter those out. @@ -202,15 +201,15 @@ def _fix_roots(self, roots): for root in roots: path = self._absolute_normalized_path(root) if pydevd_constants.IS_WINDOWS: - new_roots.append(path + '\\') + new_roots.append(path + "\\") else: - new_roots.append(path + '/') + new_roots.append(path + "/") return new_roots def _absolute_normalized_path(self, filename): - ''' + """ Provides a version of the filename that's absolute and normalized. - ''' + """ return normcase(pydevd_file_utils.absolute_path(filename)) def set_project_roots(self, project_roots): @@ -228,33 +227,39 @@ def _get_library_roots(self): return self._library_roots def in_project_roots(self, received_filename): - ''' + """ Note: don't call directly. Use PyDb.in_project_scope (there's no caching here and it doesn't handle all possibilities for knowing whether a project is actually in the scope, it just handles the heuristics based on the absolute_normalized_filename without the actual frame). - ''' + """ DEBUG = False if received_filename.startswith(USER_CODE_BASENAMES_STARTING_WITH): if DEBUG: - pydev_log.debug('In in_project_roots - user basenames - starts with %s (%s)', received_filename, USER_CODE_BASENAMES_STARTING_WITH) + pydev_log.debug( + "In in_project_roots - user basenames - starts with %s (%s)", received_filename, USER_CODE_BASENAMES_STARTING_WITH + ) return True if received_filename.startswith(LIBRARY_CODE_BASENAMES_STARTING_WITH): if DEBUG: - pydev_log.debug('Not in in_project_roots - library basenames - starts with %s (%s)', received_filename, LIBRARY_CODE_BASENAMES_STARTING_WITH) + pydev_log.debug( + "Not in in_project_roots - library basenames - starts with %s (%s)", + received_filename, + LIBRARY_CODE_BASENAMES_STARTING_WITH, + ) return False project_roots = self._get_project_roots() # roots are absolute/normalized. absolute_normalized_filename = self._absolute_normalized_path(received_filename) - absolute_normalized_filename_as_dir = absolute_normalized_filename + ('\\' if IS_WINDOWS else '/') + absolute_normalized_filename_as_dir = absolute_normalized_filename + ("\\" if IS_WINDOWS else "/") found_in_project = [] for root in project_roots: if root and (absolute_normalized_filename.startswith(root) or root == absolute_normalized_filename_as_dir): if DEBUG: - pydev_log.debug('In project: %s (%s)', absolute_normalized_filename, root) + pydev_log.debug("In project: %s (%s)", absolute_normalized_filename, root) found_in_project.append(root) found_in_library = [] @@ -263,10 +268,10 @@ def in_project_roots(self, received_filename): if root and (absolute_normalized_filename.startswith(root) or root == absolute_normalized_filename_as_dir): found_in_library.append(root) if DEBUG: - pydev_log.debug('In library: %s (%s)', absolute_normalized_filename, root) + pydev_log.debug("In library: %s (%s)", absolute_normalized_filename, root) else: if DEBUG: - pydev_log.debug('Not in library: %s (%s)', absolute_normalized_filename, root) + pydev_log.debug("Not in library: %s (%s)", absolute_normalized_filename, root) if not project_roots: # If we have no project roots configured, consider it being in the project @@ -274,28 +279,28 @@ def in_project_roots(self, received_filename): # and not the other way around). in_project = not found_in_library if DEBUG: - pydev_log.debug('Final in project (no project roots): %s (%s)', absolute_normalized_filename, in_project) + pydev_log.debug("Final in project (no project roots): %s (%s)", absolute_normalized_filename, in_project) else: in_project = False if found_in_project: if not found_in_library: if DEBUG: - pydev_log.debug('Final in project (in_project and not found_in_library): %s (True)', absolute_normalized_filename) + pydev_log.debug("Final in project (in_project and not found_in_library): %s (True)", absolute_normalized_filename) in_project = True else: # Found in both, let's see which one has the bigger path matched. if max(len(x) for x in found_in_project) > max(len(x) for x in found_in_library): in_project = True if DEBUG: - pydev_log.debug('Final in project (found in both): %s (%s)', absolute_normalized_filename, in_project) + pydev_log.debug("Final in project (found in both): %s (%s)", absolute_normalized_filename, in_project) return in_project def use_libraries_filter(self): - ''' + """ Should we debug only what's inside project folders? - ''' + """ return self._use_libraries_filter def set_use_libraries_filter(self, use): @@ -307,24 +312,24 @@ def use_exclude_filters(self): return len(self._exclude_filters) > 0 def exclude_by_filter(self, absolute_filename, module_name): - ''' + """ :return: True if it should be excluded, False if it should be included and None if no rule matched the given file. - ''' + """ for exclude_filter in self._exclude_filters: # : :type exclude_filter: ExcludeFilter if exclude_filter.is_path: if glob_matches_path(absolute_filename, exclude_filter.name): return exclude_filter.exclude else: # Module filter. - if exclude_filter.name == module_name or module_name.startswith(exclude_filter.name + '.'): + if exclude_filter.name == module_name or module_name.startswith(exclude_filter.name + "."): return exclude_filter.exclude return None def set_exclude_filters(self, exclude_filters): - ''' + """ :param list(ExcludeFilter) exclude_filters: - ''' + """ self._exclude_filters = exclude_filters self.require_module = False for exclude_filter in exclude_filters: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py index 1460551f8..97a947dce 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame.py @@ -4,13 +4,20 @@ from _pydev_bundle import pydev_log from _pydevd_bundle import pydevd_dont_trace -from _pydevd_bundle.pydevd_constants import (RETURN_VALUES_DICT, NO_FTRACE, - EXCEPTION_TYPE_HANDLED, EXCEPTION_TYPE_USER_UNHANDLED, PYDEVD_IPYTHON_CONTEXT) +from _pydevd_bundle.pydevd_constants import ( + RETURN_VALUES_DICT, + NO_FTRACE, + EXCEPTION_TYPE_HANDLED, + EXCEPTION_TYPE_USER_UNHANDLED, + PYDEVD_IPYTHON_CONTEXT, + PYDEVD_USE_SYS_MONITORING, +) from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, just_raised, remove_exception_from_frame, ignore_exception_trace from _pydevd_bundle.pydevd_utils import get_clsname_for_code from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame from _pydevd_bundle.pydevd_comm_constants import constant_to_str, CMD_SET_FUNCTION_BREAK import sys + try: from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset except ImportError: @@ -18,6 +25,7 @@ def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): return None + # IFDEF CYTHON # cython_inline_constant: CMD_STEP_INTO = 107 # cython_inline_constant: CMD_STEP_INTO_MY_CODE = 144 @@ -49,10 +57,10 @@ def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): basename = os.path.basename -IGNORE_EXCEPTION_TAG = re.compile('[^#]*#.*@IgnoreException') -DEBUG_START = ('pydevd.py', 'run') -DEBUG_START_PY3K = ('_pydev_execfile.py', 'execfile') -TRACE_PROPERTY = 'pydevd_traceproperty.py' +IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") +DEBUG_START = ("pydevd.py", "run") +DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") +TRACE_PROPERTY = "pydevd_traceproperty.py" import dis @@ -63,10 +71,10 @@ def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # IFDEF CYTHON -# cdef is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): +# def is_unhandled_exception(container_obj, py_db, frame, int last_raise_line, set raise_lines): # ELSE def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_lines): -# ENDIF + # ENDIF if frame.f_lineno in raise_lines: return True @@ -95,10 +103,7 @@ def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_l # and it's gotten in the except line. for try_except_info in try_except_infos: if try_except_info.is_line_in_except_block(frame.f_lineno): - if ( - frame.f_lineno == try_except_info.except_line or - frame.f_lineno in try_except_info.raise_lines_in_except - ): + if frame.f_lineno == try_except_info.except_line or frame.f_lineno in try_except_info.raise_lines_in_except: # In a raise inside a try..except block or some except which doesn't # match the raised exception. return True @@ -112,50 +117,54 @@ def is_unhandled_exception(container_obj, py_db, frame, last_raise_line, raise_l # self.try_except_infos = None # ELSE class _TryExceptContainerObj(object): - ''' - A dumb container object just to containe the try..except info when needed. Meant to be - persisent among multiple PyDBFrames to the same code object. - ''' + """ + A dumb container object just to contain the try..except info when needed. Meant to be + persistent among multiple PyDBFrames to the same code object. + """ + try_except_infos = None + + # ENDIF -#======================================================================================================================= +# ======================================================================================================================= # PyDBFrame -#======================================================================================================================= +# ======================================================================================================================= # IFDEF CYTHON # cdef class PyDBFrame: # ELSE class PyDBFrame: - '''This makes the tracing for a given frame, so, the trace_dispatch + """This makes the tracing for a given frame, so, the trace_dispatch is used initially when we enter into a new context ('call') and then is reused for the entire context. - ''' -# ENDIF - - # Note: class (and not instance) attributes. + """ - # Same thing in the main debugger but only considering the file contents, while the one in the main debugger - # considers the user input (so, the actual result must be a join of both). - filename_to_lines_where_exceptions_are_ignored = {} - filename_to_stat_info = {} + # ENDIF # IFDEF CYTHON # cdef tuple _args # cdef int should_skip # cdef object exc_info # def __init__(self, tuple args): - # self._args = args # In the cython version we don't need to pass the frame - # self.should_skip = -1 # On cythonized version, put in instance. - # self.exc_info = () + # self._args = args # In the cython version we don't need to pass the frame + # self.should_skip = -1 # On cythonized version, put in instance. + # self.exc_info = () # ELSE should_skip = -1 # Default value in class (put in instance on set). exc_info = () # Default value in class (put in instance on set). - def __init__(self, args): - # args = main_debugger, abs_path_canonical_path_and_base, base, info, t, frame - # yeap, much faster than putting in self and then getting it from self later on - self._args = args + if PYDEVD_USE_SYS_MONITORING: + + def __init__(self, *args, **kwargs): + raise RuntimeError("Not expected to be used in sys.monitoring.") + + else: + + def __init__(self, args): + # args = py_db, abs_path_canonical_path_and_base, base, info, t, frame + # yeap, much faster than putting in self and then getting it from self later on + self._args = args # ENDIF def set_suspend(self, *args, **kwargs): @@ -170,291 +179,42 @@ def do_wait_suspend(self, *args, **kwargs): # cdef tuple exc_info; # ELSE def trace_exception(self, frame, event, arg): - # ENDIF - if event == 'exception': - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + # ENDIF + if event == "exception": + should_stop, frame, exc_info = should_stop_on_exception(self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch - elif event == 'return': + elif event == "return": exc_info = self.exc_info if exc_info and arg is None: frame_skips_cache, frame_cache_key = self._args[4], self._args[5] - custom_key = (frame_cache_key, 'try_exc_info') + custom_key = (frame_cache_key, "try_exc_info") container_obj = frame_skips_cache.get(custom_key) if container_obj is None: container_obj = frame_skips_cache[custom_key] = _TryExceptContainerObj() - if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and \ - self.handle_user_exception(frame): + if is_unhandled_exception(container_obj, self._args[0], frame, exc_info[1], exc_info[2]) and self.handle_user_exception( + frame + ): return self.trace_dispatch return self.trace_exception - # IFDEF CYTHON - # cdef _should_stop_on_exception(self, frame, str event, arg): - # cdef PyDBAdditionalThreadInfo info; - # cdef bint should_stop; - # cdef bint was_just_raised; - # cdef list check_excs; - # ELSE - def _should_stop_on_exception(self, frame, event, arg): - # ENDIF - - # main_debugger, _filename, info, _thread = self._args - main_debugger = self._args[0] - info = self._args[2] - should_stop = False - - # STATE_SUSPEND = 2 - if info.pydev_state != 2: # and breakpoint is not None: - exception, value, trace = arg - - if trace is not None and hasattr(trace, 'tb_next'): - # on jython trace is None on the first event and it may not have a tb_next. - - should_stop = False - exception_breakpoint = None - try: - if main_debugger.plugin is not None: - result = main_debugger.plugin.exception_break(main_debugger, self, frame, self._args, arg) - if result: - should_stop, frame = result - except: - pydev_log.exception() - - if not should_stop: - # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). - if exception == SystemExit and main_debugger.ignore_system_exit_code(value): - pass - - elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): - # These exceptions are control-flow related (they work as a generator - # pause), so, we shouldn't stop on them. - pass - - elif ignore_exception_trace(trace): - pass - - else: - was_just_raised = trace.tb_next is None - - # It was not handled by any plugin, lets check exception breakpoints. - check_excs = [] - - # Note: check user unhandled before regular exceptions. - exc_break_user = main_debugger.get_exception_breakpoint( - exception, main_debugger.break_on_user_uncaught_exceptions) - if exc_break_user is not None: - check_excs.append((exc_break_user, True)) - - exc_break_caught = main_debugger.get_exception_breakpoint( - exception, main_debugger.break_on_caught_exceptions) - if exc_break_caught is not None: - check_excs.append((exc_break_caught, False)) - - for exc_break, is_user_uncaught in check_excs: - # Initially mark that it should stop and then go into exclusions. - should_stop = True - - if main_debugger.exclude_exception_by_filter(exc_break, trace): - pydev_log.debug("Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name)) - should_stop = False - - elif exc_break.condition is not None and \ - not main_debugger.handle_breakpoint_condition(info, exc_break, frame): - should_stop = False - - elif is_user_uncaught: - # Note: we don't stop here, we just collect the exc_info to use later on... - should_stop = False - if not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) \ - and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)): - # User uncaught means that we're currently in user code but the code - # up the stack is library code. - exc_info = self.exc_info - if not exc_info: - exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) - else: - lines = exc_info[2] - lines.add(frame.f_lineno) - exc_info = (arg, frame.f_lineno, lines) - self.exc_info = exc_info - else: - # I.e.: these are only checked if we're not dealing with user uncaught exceptions. - if exc_break.notify_on_first_raise_only and main_debugger.skip_on_exceptions_thrown_in_same_context \ - and not was_just_raised and not just_raised(trace.tb_next): - # In this case we never stop if it was just raised, so, to know if it was the first we - # need to check if we're in the 2nd method. - should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception - - elif exc_break.notify_on_first_raise_only and not main_debugger.skip_on_exceptions_thrown_in_same_context \ - and not was_just_raised: - should_stop = False # I.e.: we stop only when it was just raised - - elif was_just_raised and main_debugger.skip_on_exceptions_thrown_in_same_context: - # Option: Don't break if an exception is caught in the same function from which it is thrown - should_stop = False - - if should_stop: - exception_breakpoint = exc_break - try: - info.pydev_message = exc_break.qname - except: - info.pydev_message = exc_break.qname.encode('utf-8') - break - - if should_stop: - # Always add exception to frame (must remove later after we proceed). - add_exception_to_frame(frame, (exception, value, trace)) - - if exception_breakpoint is not None and exception_breakpoint.expression is not None: - main_debugger.handle_breakpoint_expression(exception_breakpoint, info, frame) - - return should_stop, frame - def handle_user_exception(self, frame): exc_info = self.exc_info if exc_info: - return self._handle_exception(frame, 'exception', exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + return handle_exception(self._args[0], self._args[3], frame, exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) return False - # IFDEF CYTHON - # cdef _handle_exception(self, frame, str event, arg, str exception_type): - # cdef bint stopped; - # cdef tuple abs_real_path_and_base; - # cdef str absolute_filename; - # cdef str canonical_normalized_filename; - # cdef dict filename_to_lines_where_exceptions_are_ignored; - # cdef dict lines_ignored; - # cdef dict frame_id_to_frame; - # cdef dict merged; - # cdef object trace_obj; - # cdef object main_debugger; - # ELSE - def _handle_exception(self, frame, event, arg, exception_type): - # ENDIF - stopped = False - try: - # print('_handle_exception', frame.f_lineno, frame.f_code.co_name) - - # We have 3 things in arg: exception type, description, traceback object - trace_obj = arg[2] - main_debugger = self._args[0] - - initial_trace_obj = trace_obj - if trace_obj.tb_next is None and trace_obj.tb_frame is frame: - # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). - pass - else: - # Get the trace_obj from where the exception was raised... - while trace_obj.tb_next is not None: - trace_obj = trace_obj.tb_next - - if main_debugger.ignore_exceptions_thrown_in_lines_with_ignore_exception: - for check_trace_obj in (initial_trace_obj, trace_obj): - abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) - absolute_filename = abs_real_path_and_base[0] - canonical_normalized_filename = abs_real_path_and_base[1] - - filename_to_lines_where_exceptions_are_ignored = self.filename_to_lines_where_exceptions_are_ignored - - lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - if lines_ignored is None: - lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} - - try: - curr_stat = os.stat(absolute_filename) - curr_stat = (curr_stat.st_size, curr_stat.st_mtime) - except: - curr_stat = None - - last_stat = self.filename_to_stat_info.get(absolute_filename) - if last_stat != curr_stat: - self.filename_to_stat_info[absolute_filename] = curr_stat - lines_ignored.clear() - try: - linecache.checkcache(absolute_filename) - except: - pydev_log.exception('Error in linecache.checkcache(%r)', absolute_filename) - - from_user_input = main_debugger.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) - if from_user_input: - merged = {} - merged.update(lines_ignored) - # Override what we have with the related entries that the user entered - merged.update(from_user_input) - else: - merged = lines_ignored - - exc_lineno = check_trace_obj.tb_lineno - - # print ('lines ignored', lines_ignored) - # print ('user input', from_user_input) - # print ('merged', merged, 'curr', exc_lineno) - - if exc_lineno not in merged: # Note: check on merged but update lines_ignored. - try: - line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) - except: - pydev_log.exception('Error in linecache.getline(%r, %s, f_globals)', absolute_filename, exc_lineno) - line = '' - - if IGNORE_EXCEPTION_TAG.match(line) is not None: - lines_ignored[exc_lineno] = 1 - return False - else: - # Put in the cache saying not to ignore - lines_ignored[exc_lineno] = 0 - else: - # Ok, dict has it already cached, so, let's check it... - if merged.get(exc_lineno, 0): - return False - - thread = self._args[3] - - try: - frame_id_to_frame = {} - frame_id_to_frame[id(frame)] = frame - f = trace_obj.tb_frame - while f is not None: - frame_id_to_frame[id(f)] = f - f = f.f_back - f = None - - stopped = True - main_debugger.send_caught_exception_stack(thread, arg, id(frame)) - try: - self.set_suspend(thread, CMD_STEP_CAUGHT_EXCEPTION) - self.do_wait_suspend(thread, frame, event, arg, exception_type=exception_type) - finally: - main_debugger.send_caught_exception_stack_proceeded(thread) - except: - pydev_log.exception() - - main_debugger.set_trace_for_frame_and_parents(frame) - finally: - # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. - remove_exception_from_frame(frame) - # Clear some local variables... - frame = None - trace_obj = None - initial_trace_obj = None - check_trace_obj = None - f = None - frame_id_to_frame = None - main_debugger = None - thread = None - - return stopped - # IFDEF CYTHON # cdef get_func_name(self, frame): # cdef str func_name # ELSE def get_func_name(self, frame): - # ENDIF + # ENDIF code_obj = frame.f_code func_name = code_obj.co_name try: @@ -471,7 +231,7 @@ def get_func_name(self, frame): # cdef _show_return_values(self, frame, arg): # ELSE def _show_return_values(self, frame, arg): - # ENDIF + # ENDIF try: try: f_locals_back = getattr(frame.f_back, "f_locals", None) @@ -488,10 +248,10 @@ def _show_return_values(self, frame, arg): f_locals_back = None # IFDEF CYTHON - # cdef _remove_return_values(self, main_debugger, frame): + # cdef _remove_return_values(self, py_db, frame): # ELSE - def _remove_return_values(self, main_debugger, frame): - # ENDIF + def _remove_return_values(self, py_db, frame): + # ENDIF try: try: # Showing return values was turned off, we should remove them from locals dict. @@ -507,17 +267,17 @@ def _remove_return_values(self, main_debugger, frame): f_locals_back = None # IFDEF CYTHON - # cdef _get_unfiltered_back_frame(self, main_debugger, frame): + # cdef _get_unfiltered_back_frame(self, py_db, frame): # ELSE - def _get_unfiltered_back_frame(self, main_debugger, frame): - # ENDIF + def _get_unfiltered_back_frame(self, py_db, frame): + # ENDIF f = frame.f_back while f is not None: - if not main_debugger.is_files_filter_enabled: + if not py_db.is_files_filter_enabled: return f else: - if main_debugger.apply_files_filter(f, f.f_code.co_filename, False): + if py_db.apply_files_filter(f, f.f_code.co_filename, False): f = f.f_back else: @@ -530,7 +290,7 @@ def _get_unfiltered_back_frame(self, main_debugger, frame): # cdef PyDBAdditionalThreadInfo info; # ELSE def _is_same_frame(self, target_frame, current_frame): - # ENDIF + # ENDIF if target_frame is current_frame: return True @@ -582,7 +342,7 @@ def _is_same_frame(self, target_frame, current_frame): # cdef tuple pydev_smart_step_into_variants # ELSE def trace_dispatch(self, frame, event, arg): - # ENDIF + # ENDIF # Note: this is a big function because most of the logic related to hitting a breakpoint and # stepping is contained in it. Ideally this could be split among multiple functions, but the # problem in this case is that in pure-python function calls are expensive and even more so @@ -592,8 +352,8 @@ def trace_dispatch(self, frame, event, arg): # generation be better split among what each part does). try: - # DEBUG = '_debugger_case_generator.py' in frame.f_code.co_filename - main_debugger, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args + # DEBUG = '_debugger_case_yield_from.py' in frame.f_code.co_filename + py_db, abs_path_canonical_path_and_base, info, thread, frame_skips_cache, frame_cache_key = self._args # if DEBUG: print('frame trace_dispatch %s %s %s %s %s %s, stop: %s' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, constant_to_str(info.pydev_step_cmd), arg, info.pydev_step_stop)) info.is_tracing += 1 @@ -603,36 +363,35 @@ def trace_dispatch(self, frame, event, arg): line = frame.f_lineno or 0 # Workaround or case where frame.f_lineno is None line_cache_key = (frame_cache_key, line) - if main_debugger.pydb_disposed: - return None if event == 'call' else NO_FTRACE + if py_db.pydb_disposed: + return None if event == "call" else NO_FTRACE - plugin_manager = main_debugger.plugin + plugin_manager = py_db.plugin has_exception_breakpoints = ( - main_debugger.break_on_caught_exceptions - or main_debugger.break_on_user_uncaught_exceptions - or main_debugger.has_plugin_exception_breaks) + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) stop_frame = info.pydev_step_stop step_cmd = info.pydev_step_cmd function_breakpoint_on_call_event = None - if frame.f_code.co_flags & 0xa0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 + if frame.f_code.co_flags & 0xA0: # 0xa0 == CO_GENERATOR = 0x20 | CO_COROUTINE = 0x80 # Dealing with coroutines and generators: # When in a coroutine we change the perceived event to the debugger because # a call, StopIteration exception and return are usually just pausing/unpausing it. - if event == 'line': + if event == "line": is_line = True is_call = False is_return = False is_exception_event = False - elif event == 'return': + elif event == "return": is_line = False is_call = False is_return = True is_exception_event = False - returns_cache_key = (frame_cache_key, 'returns') + returns_cache_key = (frame_cache_key, "returns") return_lines = frame_skips_cache.get(returns_cache_key) if return_lines is None: # Note: we're collecting the return lines by inspecting the bytecode as @@ -640,7 +399,7 @@ def trace_dispatch(self, frame, event, arg): # it doesn't give any clear indication when a coroutine or generator is # finishing or just pausing. return_lines = set() - for x in main_debugger.collect_return_info(frame.f_code): + for x in py_db.collect_return_info(frame.f_code): # Note: cython does not support closures in cpdefs (so we can't use # a list comprehension). return_lines.add(x.return_line) @@ -673,7 +432,7 @@ def trace_dispatch(self, frame, event, arg): # frame in this case). if stop_frame is frame and not info.pydev_use_scoped_step_frame: if step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE): - f = self._get_unfiltered_back_frame(main_debugger, frame) + f = self._get_unfiltered_back_frame(py_db, frame) if f is not None: info.pydev_step_cmd = CMD_STEP_INTO_COROUTINE info.pydev_step_stop = f @@ -688,19 +447,22 @@ def trace_dispatch(self, frame, event, arg): elif step_cmd == CMD_STEP_INTO_COROUTINE: # We're exiting this one, so, mark the new coroutine context. - f = self._get_unfiltered_back_frame(main_debugger, frame) + f = self._get_unfiltered_back_frame(py_db, frame) if f is not None: info.pydev_step_stop = f else: info.pydev_step_cmd = CMD_STEP_INTO info.pydev_step_stop = None - elif event == 'exception': + elif event == "exception": breakpoints_for_file = None if has_exception_breakpoints: - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + should_stop, frame, exc_info = should_stop_on_exception( + self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + ) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch return self.trace_dispatch @@ -709,13 +471,13 @@ def trace_dispatch(self, frame, event, arg): return self.trace_dispatch else: # Not coroutine nor generator - if event == 'line': + if event == "line": is_line = True is_call = False is_return = False is_exception_event = False - elif event == 'return': + elif event == "return": is_line = False is_return = True is_call = False @@ -728,11 +490,12 @@ def trace_dispatch(self, frame, event, arg): # Note: this is especially troublesome when we're skipping code with the # @DontTrace comment. if ( - stop_frame is frame and - not info.pydev_use_scoped_step_frame and is_return and - step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO) - ): - + stop_frame is frame + and not info.pydev_use_scoped_step_frame + and is_return + and step_cmd + in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO) + ): if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): info.pydev_step_cmd = CMD_STEP_INTO else: @@ -743,21 +506,24 @@ def trace_dispatch(self, frame, event, arg): if self.handle_user_exception(frame): return self.trace_dispatch - elif event == 'call': + elif event == "call": is_line = False is_call = True is_return = False is_exception_event = False if frame.f_code.co_firstlineno == frame.f_lineno: # Check line to deal with async/await. - function_breakpoint_on_call_event = main_debugger.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) + function_breakpoint_on_call_event = py_db.function_breakpoint_name_to_breakpoint.get(frame.f_code.co_name) - elif event == 'exception': + elif event == "exception": is_exception_event = True breakpoints_for_file = None if has_exception_breakpoints: - should_stop, frame = self._should_stop_on_exception(frame, event, arg) + should_stop, frame, exc_info = should_stop_on_exception( + self._args[0], self._args[2], frame, self._args[3], arg, self.exc_info + ) + self.exc_info = exc_info if should_stop: - if self._handle_exception(frame, event, arg, EXCEPTION_TYPE_HANDLED): + if handle_exception(self._args[0], self._args[3], frame, arg, EXCEPTION_TYPE_HANDLED): return self.trace_dispatch is_line = False is_return = False @@ -768,7 +534,7 @@ def trace_dispatch(self, frame, event, arg): return self.trace_dispatch if not is_exception_event: - breakpoints_for_file = main_debugger.breakpoints.get(abs_path_canonical_path_and_base[1]) + breakpoints_for_file = py_db.breakpoints.get(abs_path_canonical_path_and_base[1]) can_skip = False @@ -780,22 +546,27 @@ def trace_dispatch(self, frame, event, arg): if step_cmd == -1: can_skip = True - elif step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE) and not self._is_same_frame(stop_frame, frame): + elif step_cmd in ( + CMD_STEP_OVER, + CMD_STEP_RETURN, + CMD_STEP_OVER_MY_CODE, + CMD_STEP_RETURN_MY_CODE, + ) and not self._is_same_frame(stop_frame, frame): can_skip = True elif step_cmd == CMD_SMART_STEP_INTO and ( - stop_frame is not None and - stop_frame is not frame and - stop_frame is not frame.f_back and - (frame.f_back is None or stop_frame is not frame.f_back.f_back)): + stop_frame is not None + and stop_frame is not frame + and stop_frame is not frame.f_back + and (frame.f_back is None or stop_frame is not frame.f_back.f_back) + ): can_skip = True elif step_cmd == CMD_STEP_INTO_MY_CODE: - if ( - main_debugger.apply_files_filter(frame, frame.f_code.co_filename, True) - and (frame.f_back is None or main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True)) - ): - can_skip = True + if py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ): + can_skip = True elif step_cmd == CMD_STEP_INTO_COROUTINE: f = frame @@ -807,11 +578,15 @@ def trace_dispatch(self, frame, event, arg): can_skip = True if can_skip: - if plugin_manager is not None and ( - main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks): - can_skip = plugin_manager.can_skip(main_debugger, frame) + if plugin_manager is not None and (py_db.has_plugin_line_breaks or py_db.has_plugin_exception_breaks): + can_skip = plugin_manager.can_skip(py_db, frame) - if can_skip and main_debugger.show_return_values and info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) and self._is_same_frame(stop_frame, frame.f_back): + if ( + can_skip + and py_db.show_return_values + and info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + and self._is_same_frame(stop_frame, frame.f_back) + ): # trace function for showing return values after step over can_skip = False @@ -859,12 +634,12 @@ def trace_dispatch(self, frame, event, arg): curr_func_name = frame.f_code.co_name # global context is set with an empty name - if curr_func_name in ('?', '', ''): - curr_func_name = '' + if curr_func_name in ("?", "", ""): + curr_func_name = "" for bp in breakpoints_for_file.values(): # will match either global or some function - if bp.func_name in ('None', curr_func_name): + if bp.func_name in ("None", curr_func_name): has_breakpoint_in_frame = True break else: @@ -910,26 +685,29 @@ def trace_dispatch(self, frame, event, arg): new_frame = frame stop = True - elif plugin_manager is not None and main_debugger.has_plugin_line_breaks: - result = plugin_manager.get_breakpoint(main_debugger, self, frame, event, self._args) + elif plugin_manager is not None and py_db.has_plugin_line_breaks: + result = plugin_manager.get_breakpoint(py_db, frame, event, self._args[2]) if result: - stop_on_plugin_breakpoint, breakpoint, new_frame, bp_type = result + stop_on_plugin_breakpoint = True + breakpoint, new_frame, bp_type = result if breakpoint: # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint # lets do the conditional stuff here if breakpoint.expression is not None: - main_debugger.handle_breakpoint_expression(breakpoint, info, new_frame) + py_db.handle_breakpoint_expression(breakpoint, info, new_frame) if stop or stop_on_plugin_breakpoint: eval_result = False if breakpoint.has_condition: - eval_result = main_debugger.handle_breakpoint_condition(info, breakpoint, new_frame) + eval_result = py_db.handle_breakpoint_condition(info, breakpoint, new_frame) if not eval_result: stop = False stop_on_plugin_breakpoint = False - if is_call and (frame.f_code.co_name in ('', '') or (line == 1 and frame.f_code.co_name.startswith('", "") or (line == 1 and frame.f_code.co_name.startswith(" 0: - cmd = main_debugger.cmd_factory.make_io_message(info.pydev_message + os.linesep, '1') - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_io_message(info.pydev_message + os.linesep, "1") + py_db.writer.add_command(cmd) - if main_debugger.show_return_values: + if py_db.show_return_values: if is_return and ( - (info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) and (self._is_same_frame(stop_frame, frame.f_back))) or - (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (self._is_same_frame(stop_frame, frame))) or - (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) or - ( - info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE - and frame.f_back is not None - and not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) - ) - ): + ( + info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + and (self._is_same_frame(stop_frame, frame.f_back)) + ) + or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (self._is_same_frame(stop_frame, frame))) + or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) + or ( + info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + and frame.f_back is not None + and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ) + ): self._show_return_values(frame, arg) - elif main_debugger.remove_return_values_flag: + elif py_db.remove_return_values_flag: try: - self._remove_return_values(main_debugger, frame) + self._remove_return_values(py_db, frame) finally: - main_debugger.remove_return_values_flag = False + py_db.remove_return_values_flag = False if stop: self.set_suspend( @@ -979,7 +760,7 @@ def trace_dispatch(self, frame, event, arg): ) elif stop_on_plugin_breakpoint and plugin_manager is not None: - result = plugin_manager.suspend(main_debugger, thread, frame, bp_type) + result = plugin_manager.suspend(py_db, thread, frame, bp_type) if result: frame = result @@ -996,9 +777,14 @@ def trace_dispatch(self, frame, event, arg): # Unfortunately Python itself stops the tracing when it originates from # the tracing function, so, we can't do much about it (just let the user know). exc = sys.exc_info()[0] - cmd = main_debugger.cmd_factory.make_console_message( - '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_console_message( + "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + % ( + exc, + thread, + ) + ) + py_db.writer.add_command(cmd) if not issubclass(exc, (KeyboardInterrupt, SystemExit)): pydev_log.exception() @@ -1012,7 +798,7 @@ def trace_dispatch(self, frame, event, arg): # I.e.: cache the result on self.should_skip (no need to evaluate the same frame multiple times). # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code # Which will be handled by this frame is read-only, so, we can cache it safely. - if not pydevd_dont_trace.should_trace_hook(frame, abs_path_canonical_path_and_base[0]): + if not pydevd_dont_trace.should_trace_hook(frame.f_code, abs_path_canonical_path_and_base[0]): # -1, 0, 1 to be Cython-friendly should_skip = self.should_skip = 1 else: @@ -1028,19 +814,19 @@ def trace_dispatch(self, frame, event, arg): force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE if is_line: if not info.pydev_use_scoped_step_frame: - if force_check_project_scope or main_debugger.is_files_filter_enabled: - stop = not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) + if force_check_project_scope or py_db.is_files_filter_enabled: + stop = not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope) else: stop = True else: - if force_check_project_scope or main_debugger.is_files_filter_enabled: + if force_check_project_scope or py_db.is_files_filter_enabled: # Make sure we check the filtering inside ipython calls too... - if not not main_debugger.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): + if not not py_db.apply_files_filter(frame, frame.f_code.co_filename, force_check_project_scope): return None if is_call else NO_FTRACE # We can only stop inside the ipython call. filename = frame.f_code.co_filename - if filename.endswith('.pyc'): + if filename.endswith(".pyc"): filename = filename[:-1] if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): @@ -1049,7 +835,7 @@ def trace_dispatch(self, frame, event, arg): if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: f2 = f.f_back if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: - pydev_log.debug('Stop inside ipython call') + pydev_log.debug("Stop inside ipython call") stop = True break f = f.f_back @@ -1062,11 +848,13 @@ def trace_dispatch(self, frame, event, arg): return None if is_call else NO_FTRACE elif is_return and frame.f_back is not None and not info.pydev_use_scoped_step_frame: - if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: + if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: stop = False else: - if force_check_project_scope or main_debugger.is_files_filter_enabled: - stop = not main_debugger.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope) + if force_check_project_scope or py_db.is_files_filter_enabled: + stop = not py_db.apply_files_filter( + frame.f_back, frame.f_back.f_code.co_filename, force_check_project_scope + ) if stop: # Prevent stopping in a return to the same location we were initially # (i.e.: double-stop at the same place due to some filtering). @@ -1089,7 +877,7 @@ def trace_dispatch(self, frame, event, arg): stop = False if plugin_manager is not None: - result = plugin_manager.cmd_step_into(main_debugger, frame, event, self._args, stop_info, stop) + result = plugin_manager.cmd_step_into(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) if result: stop, plugin_stop = result @@ -1102,7 +890,7 @@ def trace_dispatch(self, frame, event, arg): # i.e.: don't stop in: (stop_frame is frame.f_back and is_return) as we'd stop twice in that line. if plugin_manager is not None: - result = plugin_manager.cmd_step_over(main_debugger, frame, event, self._args, stop_info, stop) + result = plugin_manager.cmd_step_over(py_db, frame, event, self._args[2], self._args[3], stop_info, stop) if result: stop, plugin_stop = result @@ -1126,16 +914,19 @@ def trace_dispatch(self, frame, event, arg): if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # Preferred mode (when the smart step into variants are available # and the offset is set). - stop = get_smart_step_into_variant_from_frame_offset(back.f_lasti, pydev_smart_step_into_variants) is \ - get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + stop = get_smart_step_into_variant_from_frame_offset( + back.f_lasti, pydev_smart_step_into_variants + ) is get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) else: # Only the name/line is available, so, check that. curr_func_name = frame.f_code.co_name # global context is set with an empty name - if curr_func_name in ('?', '') or curr_func_name is None: - curr_func_name = '' + if curr_func_name in ("?", "") or curr_func_name is None: + curr_func_name = "" if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: stop = True @@ -1162,13 +953,15 @@ def trace_dispatch(self, frame, event, arg): # the child (because this is a generator, the parent may have moved forward # already -- and that's ok, so, we just check that the parent frame # matches in this case). - smart_step_into_variant = get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) # print('matched parent offset', pydev_smart_parent_offset) # Ok, now, check the child variant children_variants = smart_step_into_variant.children_variants stop = children_variants and ( - get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) is \ - get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) ) # print('stop at child', stop) @@ -1184,13 +977,13 @@ def trace_dispatch(self, frame, event, arg): stop = False if stop and step_cmd != -1 and is_return and hasattr(frame, "f_back"): - f_code = getattr(frame.f_back, 'f_code', None) + f_code = getattr(frame.f_back, "f_code", None) if f_code is not None: - if main_debugger.get_file_type(frame.f_back) == main_debugger.PYDEV_FILE: + if py_db.get_file_type(frame.f_back) == py_db.PYDEV_FILE: stop = False if plugin_stop: - stopped_on_plugin = plugin_manager.stop(main_debugger, frame, event, self._args, stop_info, arg, step_cmd) + plugin_manager.stop(py_db, frame, event, self._args[3], stop_info, arg, step_cmd) elif stop: if is_line: self.set_suspend(thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) @@ -1211,13 +1004,13 @@ def trace_dispatch(self, frame, event, arg): return None if is_call else NO_FTRACE elif pydevd_dont_trace.should_trace_hook is not None: - if not pydevd_dont_trace.should_trace_hook(back, back_absolute_filename): + if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # In this case, we'll have to skip the previous one because it shouldn't be traced. # Also, we have to reset the tracing, because if the parent's parent (or some # other parent) has to be traced and it's not currently, we wouldn't stop where # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). # Related test: _debugger_case17a.py - main_debugger.set_trace_for_frame_and_parents(back) + py_db.set_trace_for_frame_and_parents(thread.ident, back) return None if is_call else NO_FTRACE if back is not None: @@ -1230,9 +1023,10 @@ def trace_dispatch(self, frame, event, arg): info.pydev_original_step_cmd = -1 info.pydev_step_cmd = -1 info.pydev_state = STATE_RUN + info.update_stepping_info() # if we are quitting, let's stop the tracing - if main_debugger.quitting: + if py_db.quitting: return None if is_call else NO_FTRACE return self.trace_dispatch @@ -1240,9 +1034,14 @@ def trace_dispatch(self, frame, event, arg): # Unfortunately Python itself stops the tracing when it originates from # the tracing function, so, we can't do much about it (just let the user know). exc = sys.exc_info()[0] - cmd = main_debugger.cmd_factory.make_console_message( - '%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n' % (exc, thread,)) - main_debugger.writer.add_command(cmd) + cmd = py_db.cmd_factory.make_console_message( + "%s raised from within the callback set in sys.settrace.\nDebugging will be disabled for this thread (%s).\n" + % ( + exc, + thread, + ) + ) + py_db.writer.add_command(cmd) if not issubclass(exc, (KeyboardInterrupt, SystemExit)): pydev_log.exception() raise @@ -1251,3 +1050,259 @@ def trace_dispatch(self, frame, event, arg): info.is_tracing -= 1 # end trace_dispatch + + +# IFDEF CYTHON +# def should_stop_on_exception(py_db, PyDBAdditionalThreadInfo info, frame, thread, arg, prev_user_uncaught_exc_info): +# cdef bint should_stop; +# cdef bint was_just_raised; +# cdef list check_excs; +# ELSE +def should_stop_on_exception(py_db, info, frame, thread, arg, prev_user_uncaught_exc_info): + # ENDIF + + should_stop = False + maybe_user_uncaught_exc_info = prev_user_uncaught_exc_info + + # STATE_SUSPEND = 2 + if info.pydev_state != 2: # and breakpoint is not None: + exception, value, trace = arg + + if trace is not None and hasattr(trace, "tb_next"): + # on jython trace is None on the first event and it may not have a tb_next. + + should_stop = False + exception_breakpoint = None + try: + if py_db.plugin is not None: + result = py_db.plugin.exception_break(py_db, frame, thread, arg) + if result: + should_stop, frame = result + except: + pydev_log.exception() + + if not should_stop: + # Apply checks that don't need the exception breakpoint (where we shouldn't ever stop). + if exception == SystemExit and py_db.ignore_system_exit_code(value): + pass + + elif exception in (GeneratorExit, StopIteration, StopAsyncIteration): + # These exceptions are control-flow related (they work as a generator + # pause), so, we shouldn't stop on them. + pass + + elif ignore_exception_trace(trace): + pass + + else: + was_just_raised = just_raised(trace) + + # It was not handled by any plugin, lets check exception breakpoints. + check_excs = [] + + # Note: check user unhandled before regular exceptions. + exc_break_user = py_db.get_exception_breakpoint(exception, py_db.break_on_user_uncaught_exceptions) + if exc_break_user is not None: + check_excs.append((exc_break_user, True)) + + exc_break_caught = py_db.get_exception_breakpoint(exception, py_db.break_on_caught_exceptions) + if exc_break_caught is not None: + check_excs.append((exc_break_caught, False)) + + for exc_break, is_user_uncaught in check_excs: + # Initially mark that it should stop and then go into exclusions. + should_stop = True + + if py_db.exclude_exception_by_filter(exc_break, trace): + pydev_log.debug( + "Ignore exception %s in library %s -- (%s)" % (exception, frame.f_code.co_filename, frame.f_code.co_name) + ) + should_stop = False + + elif exc_break.condition is not None and not py_db.handle_breakpoint_condition(info, exc_break, frame): + should_stop = False + + elif is_user_uncaught: + # Note: we don't stop here, we just collect the exc_info to use later on... + should_stop = False + if not py_db.apply_files_filter(frame, frame.f_code.co_filename, True) and ( + frame.f_back is None or py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ): + # User uncaught means that we're currently in user code but the code + # up the stack is library code. + exc_info = prev_user_uncaught_exc_info + if not exc_info: + exc_info = (arg, frame.f_lineno, set([frame.f_lineno])) + else: + lines = exc_info[2] + lines.add(frame.f_lineno) + exc_info = (arg, frame.f_lineno, lines) + maybe_user_uncaught_exc_info = exc_info + else: + # I.e.: these are only checked if we're not dealing with user uncaught exceptions. + if ( + exc_break.notify_on_first_raise_only + and py_db.skip_on_exceptions_thrown_in_same_context + and not was_just_raised + and not just_raised(trace.tb_next) + ): + # In this case we never stop if it was just raised, so, to know if it was the first we + # need to check if we're in the 2nd method. + should_stop = False # I.e.: we stop only when we're at the caller of a method that throws an exception + + elif ( + exc_break.notify_on_first_raise_only + and not py_db.skip_on_exceptions_thrown_in_same_context + and not was_just_raised + ): + should_stop = False # I.e.: we stop only when it was just raised + + elif was_just_raised and py_db.skip_on_exceptions_thrown_in_same_context: + # Option: Don't break if an exception is caught in the same function from which it is thrown + should_stop = False + + if should_stop: + exception_breakpoint = exc_break + try: + info.pydev_message = exc_break.qname + except: + info.pydev_message = exc_break.qname.encode("utf-8") + break + + if should_stop: + # Always add exception to frame (must remove later after we proceed). + add_exception_to_frame(frame, (exception, value, trace)) + + if exception_breakpoint is not None and exception_breakpoint.expression is not None: + py_db.handle_breakpoint_expression(exception_breakpoint, info, frame) + + return should_stop, frame, maybe_user_uncaught_exc_info + + +# Same thing in the main debugger but only considering the file contents, while the one in the main debugger +# considers the user input (so, the actual result must be a join of both). +filename_to_lines_where_exceptions_are_ignored: dict = {} +filename_to_stat_info: dict = {} + + +# IFDEF CYTHON +# def handle_exception(py_db, thread, frame, arg, str exception_type): +# cdef bint stopped; +# cdef tuple abs_real_path_and_base; +# cdef str absolute_filename; +# cdef str canonical_normalized_filename; +# cdef dict lines_ignored; +# cdef dict frame_id_to_frame; +# cdef dict merged; +# cdef object trace_obj; +# ELSE +def handle_exception(py_db, thread, frame, arg, exception_type): + # ENDIF + stopped = False + try: + # print('handle_exception', frame.f_lineno, frame.f_code.co_name) + + # We have 3 things in arg: exception type, description, traceback object + trace_obj = arg[2] + + initial_trace_obj = trace_obj + if trace_obj.tb_next is None and trace_obj.tb_frame is frame: + # I.e.: tb_next should be only None in the context it was thrown (trace_obj.tb_frame is frame is just a double check). + pass + else: + # Get the trace_obj from where the exception was raised... + while trace_obj.tb_next is not None: + trace_obj = trace_obj.tb_next + + if py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception: + for check_trace_obj in (initial_trace_obj, trace_obj): + abs_real_path_and_base = get_abs_path_real_path_and_base_from_frame(check_trace_obj.tb_frame) + absolute_filename = abs_real_path_and_base[0] + canonical_normalized_filename = abs_real_path_and_base[1] + + lines_ignored = filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + if lines_ignored is None: + lines_ignored = filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} + + try: + curr_stat = os.stat(absolute_filename) + curr_stat = (curr_stat.st_size, curr_stat.st_mtime) + except: + curr_stat = None + + last_stat = filename_to_stat_info.get(absolute_filename) + if last_stat != curr_stat: + filename_to_stat_info[absolute_filename] = curr_stat + lines_ignored.clear() + try: + linecache.checkcache(absolute_filename) + except: + pydev_log.exception("Error in linecache.checkcache(%r)", absolute_filename) + + from_user_input = py_db.filename_to_lines_where_exceptions_are_ignored.get(canonical_normalized_filename) + if from_user_input: + merged = {} + merged.update(lines_ignored) + # Override what we have with the related entries that the user entered + merged.update(from_user_input) + else: + merged = lines_ignored + + exc_lineno = check_trace_obj.tb_lineno + + # print ('lines ignored', lines_ignored) + # print ('user input', from_user_input) + # print ('merged', merged, 'curr', exc_lineno) + + if exc_lineno not in merged: # Note: check on merged but update lines_ignored. + try: + line = linecache.getline(absolute_filename, exc_lineno, check_trace_obj.tb_frame.f_globals) + except: + pydev_log.exception("Error in linecache.getline(%r, %s, f_globals)", absolute_filename, exc_lineno) + line = "" + + if IGNORE_EXCEPTION_TAG.match(line) is not None: + lines_ignored[exc_lineno] = 1 + return False + else: + # Put in the cache saying not to ignore + lines_ignored[exc_lineno] = 0 + else: + # Ok, dict has it already cached, so, let's check it... + if merged.get(exc_lineno, 0): + return False + + try: + frame_id_to_frame = {} + frame_id_to_frame[id(frame)] = frame + f = trace_obj.tb_frame + while f is not None: + frame_id_to_frame[id(f)] = f + f = f.f_back + f = None + + stopped = True + py_db.send_caught_exception_stack(thread, arg, id(frame)) + try: + py_db.set_suspend(thread, CMD_STEP_CAUGHT_EXCEPTION) + py_db.do_wait_suspend(thread, frame, "exception", arg, exception_type=exception_type) + finally: + py_db.send_caught_exception_stack_proceeded(thread) + except: + pydev_log.exception() + + py_db.set_trace_for_frame_and_parents(thread.ident, frame) + finally: + # Make sure the user cannot see the '__exception__' we added after we leave the suspend state. + remove_exception_from_frame(frame) + # Clear some local variables... + frame = None + trace_obj = None + initial_trace_obj = None + check_trace_obj = None + f = None + frame_id_to_frame = None + py_db = None + thread = None + + return stopped diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py index f079757a6..add2c08fa 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_frame_utils.py @@ -1,20 +1,13 @@ -from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_USER_UNHANDLED, EXCEPTION_TYPE_UNHANDLED, \ - IS_PY311_OR_GREATER +from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_USER_UNHANDLED, EXCEPTION_TYPE_UNHANDLED, IS_PY311_OR_GREATER from _pydev_bundle import pydev_log import itertools from typing import Any, Dict +import threading +from os.path import basename, splitext class Frame(object): - - def __init__( - self, - f_back, - f_fileno, - f_code, - f_locals, - f_globals=None, - f_trace=None): + def __init__(self, f_back, f_fileno, f_code, f_locals, f_globals=None, f_trace=None): self.f_back = f_back self.f_lineno = f_fileno self.f_code = f_code @@ -27,36 +20,61 @@ def __init__( class FCode(object): - def __init__(self, name, filename): self.co_name = name self.co_filename = filename self.co_firstlineno = 1 self.co_flags = 0 + def co_lines(self): + return () + def add_exception_to_frame(frame, exception_info): - frame.f_locals['__exception__'] = exception_info + frame.f_locals["__exception__"] = exception_info def remove_exception_from_frame(frame): - frame.f_locals.pop('__exception__', None) + frame.f_locals.pop("__exception__", None) + +FILES_WITH_IMPORT_HOOKS = ["pydev_monkey_qt.py", "pydev_import_hook.py"] -FILES_WITH_IMPORT_HOOKS = ['pydev_monkey_qt.py', 'pydev_import_hook.py'] +_thread_local_info = threading.local() +def flag_as_unwinding(trace): + _thread_local_info._unwinding_trace = trace def just_raised(trace): if trace is None: return False + + if hasattr(_thread_local_info, "_unwinding_trace") and _thread_local_info._unwinding_trace is trace: + return False + return trace.tb_next is None +def short_tb(exc_type, exc_value, exc_tb): + traceback = [] + while exc_tb: + traceback.append('{%r, %r, %r}' % (exc_tb.tb_frame.f_code.co_filename, + exc_tb.tb_frame.f_code.co_name, + exc_tb.tb_lineno)) + exc_tb = exc_tb.tb_next + return 'Traceback: %s\nError: %s %r\n' % (' -> '.join(traceback), exc_type.__name__, str(exc_value)) + +def short_frame(frame): + if frame is None: + return 'None' + + filename = frame.f_code.co_filename + name = splitext(basename(filename))[0] + return '%s::%s %s' % (name, frame.f_code.co_name, frame.f_lineno) def ignore_exception_trace(trace): while trace is not None: filename = trace.tb_frame.f_code.co_filename - if filename in ( - '', ''): + if filename in ("", ""): # Do not stop on inner exceptions in py3 while importing return True @@ -71,7 +89,7 @@ def ignore_exception_trace(trace): def cached_call(obj, func, *args): - cached_name = '_cached_' + func.__name__ + cached_name = "_cached_" + func.__name__ if not hasattr(obj, cached_name): setattr(obj, cached_name, func(*args)) @@ -79,7 +97,6 @@ def cached_call(obj, func, *args): class _LineColInfo: - def __init__(self, lineno, end_lineno, colno, end_colno): self.lineno = lineno self.end_lineno = end_lineno @@ -87,7 +104,7 @@ def __init__(self, lineno, end_lineno, colno, end_colno): self.end_colno = end_colno def map_columns_to_line(self, original_line: str): - ''' + """ The columns internally are actually based on bytes. Also, the position isn't always the ideal one as the start may not be @@ -97,19 +114,17 @@ def map_columns_to_line(self, original_line: str): https://github.com/microsoft/debugpy/issues/1099#issuecomment-1303403995 So, this function maps the start/end columns to the position to be shown in the editor. - ''' + """ colno = _utf8_byte_offset_to_character_offset(original_line, self.colno) end_colno = _utf8_byte_offset_to_character_offset(original_line, self.end_colno) if self.lineno == self.end_lineno: try: - ret = _extract_caret_anchors_in_bytes_from_line_segment( - original_line[colno:end_colno] - ) + ret = _extract_caret_anchors_in_bytes_from_line_segment(original_line[colno:end_colno]) if ret is not None: return ( _utf8_byte_offset_to_character_offset(original_line, ret[0] + self.colno), - _utf8_byte_offset_to_character_offset(original_line, ret[1] + self.colno) + _utf8_byte_offset_to_character_offset(original_line, ret[1] + self.colno), ) except Exception: pass # Suppress exception @@ -153,7 +168,7 @@ def _extract_caret_anchors_in_bytes_from_line_segment(segment: str): import ast try: - segment = segment.encode('utf-8') + segment = segment.encode("utf-8") except UnicodeEncodeError: return None try: @@ -168,15 +183,12 @@ def _extract_caret_anchors_in_bytes_from_line_segment(segment: str): if isinstance(statement, ast.Expr): expr = statement.value if isinstance(expr, ast.BinOp): - operator_str = segment[expr.left.end_col_offset:expr.right.col_offset] + operator_str = segment[expr.left.end_col_offset : expr.right.col_offset] operator_offset = len(operator_str) - len(operator_str.lstrip()) left_anchor = expr.left.end_col_offset + operator_offset right_anchor = left_anchor + 1 - if ( - operator_offset + 1 < len(operator_str) - and not operator_str[operator_offset + 1] == ord(b' ') - ): + if operator_offset + 1 < len(operator_str) and not operator_str[operator_offset + 1] == ord(b" "): right_anchor += 1 return left_anchor, right_anchor if isinstance(expr, ast.Subscript): @@ -186,7 +198,6 @@ def _extract_caret_anchors_in_bytes_from_line_segment(segment: str): class FramesList(object): - def __init__(self): self._frames = [] @@ -206,7 +217,7 @@ def __init__(self): self.current_frame = None # This is to know whether an exception was extracted from a __cause__ or __context__. - self.exc_context_msg = '' + self.exc_context_msg = "" self.chained_frames_list = None @@ -223,38 +234,37 @@ def __iter__(self): return iter(self._frames) def __repr__(self): - lst = ['FramesList('] + lst = ["FramesList("] - lst.append('\n exc_type: ') + lst.append("\n exc_type: ") lst.append(str(self.exc_type)) - lst.append('\n exc_desc: ') + lst.append("\n exc_desc: ") lst.append(str(self.exc_desc)) - lst.append('\n trace_obj: ') + lst.append("\n trace_obj: ") lst.append(str(self.trace_obj)) - lst.append('\n current_frame: ') + lst.append("\n current_frame: ") lst.append(str(self.current_frame)) for frame in self._frames: - lst.append('\n ') + lst.append("\n ") lst.append(repr(frame)) - lst.append(',') + lst.append(",") if self.chained_frames_list is not None: - lst.append('\n--- Chained ---\n') + lst.append("\n--- Chained ---\n") lst.append(str(self.chained_frames_list)) - lst.append('\n)') + lst.append("\n)") - return ''.join(lst) + return "".join(lst) __str__ = __repr__ class _DummyFrameWrapper(object): - def __init__(self, frame, f_lineno, f_back): self._base_frame = frame self.f_lineno = f_lineno @@ -278,27 +288,23 @@ def __str__(self): __repr__ = __str__ -_cause_message = ( - "\nThe above exception was the direct cause " - "of the following exception:\n\n") +_cause_message = "\nThe above exception was the direct cause " "of the following exception:\n\n" -_context_message = ( - "\nDuring handling of the above exception, " - "another exception occurred:\n\n") +_context_message = "\nDuring handling of the above exception, " "another exception occurred:\n\n" def create_frames_list_from_exception_cause(trace_obj, frame, exc_type, exc_desc, memo): lst = [] - msg = '' + msg = "" try: - exc_cause = getattr(exc_desc, '__cause__', None) + exc_cause = getattr(exc_desc, "__cause__", None) msg = _cause_message except Exception: exc_cause = None if exc_cause is None: try: - exc_cause = getattr(exc_desc, '__context__', None) + exc_cause = getattr(exc_desc, "__context__", None) msg = _context_message except Exception: exc_cause = None @@ -355,7 +361,7 @@ def _get_line_col_info_from_tb(tb): def create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exception_type=None): - ''' + """ :param trace_obj: This is the traceback from which the list should be created. @@ -366,7 +372,7 @@ def create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exce :param exception_type: If this is an unhandled exception or user unhandled exception, we'll not trim the stack to create from the passed frame, rather, we'll just mark the frame in the frames list. - ''' + """ lst = [] tb = trace_obj @@ -383,11 +389,7 @@ def create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exce frames_list = None for tb_frame, tb_lineno, line_col_info in reversed(lst): - if frames_list is None and ( - (frame is tb_frame) or - (frame is None) or - (exception_type == EXCEPTION_TYPE_USER_UNHANDLED) - ): + if frames_list is None and ((frame is tb_frame) or (frame is None) or (exception_type == EXCEPTION_TYPE_USER_UNHANDLED)): frames_list = FramesList() if frames_list is not None: @@ -397,7 +399,7 @@ def create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exce if frames_list is None and frame is not None: # Fallback (shouldn't happen in practice). - pydev_log.info('create_frames_list_from_traceback did not find topmost frame in list.') + pydev_log.info("create_frames_list_from_traceback did not find topmost frame in list.") frames_list = create_frames_list_from_frame(frame) frames_list.exc_type = exc_type diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py index f42d909d5..ee5acc2d0 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_gevent_integration.py @@ -3,8 +3,7 @@ import gevent from _pydev_bundle._pydev_saved_modules import threading from _pydevd_bundle.pydevd_custom_frames import add_custom_frame, update_custom_frame, remove_custom_frame -from _pydevd_bundle.pydevd_constants import GEVENT_SHOW_PAUSED_GREENLETS, get_global_debugger, \ - thread_get_ident +from _pydevd_bundle.pydevd_constants import GEVENT_SHOW_PAUSED_GREENLETS, get_global_debugger, thread_get_ident from _pydev_bundle import pydev_log from pydevd_file_utils import basename @@ -27,10 +26,10 @@ def _get_paused_name(py_db, g): if use_frame is None: use_frame = frame - return '%s: %s - %s' % (type(g).__name__, use_frame.f_code.co_name, basename(use_frame.f_code.co_filename)) + return "%s: %s - %s" % (type(g).__name__, use_frame.f_code.co_name, basename(use_frame.f_code.co_filename)) def greenlet_events(event, args): - if event in ('switch', 'throw'): + if event in ("switch", "throw"): py_db = get_global_debugger() origin, target = args @@ -38,10 +37,10 @@ def greenlet_events(event, args): frame_custom_thread_id = _saved_greenlets_to_custom_frame_thread_id.get(origin) if frame_custom_thread_id is None: _saved_greenlets_to_custom_frame_thread_id[origin] = add_custom_frame( - origin.gr_frame, _get_paused_name(py_db, origin), thread_get_ident()) + origin.gr_frame, _get_paused_name(py_db, origin), thread_get_ident() + ) else: - update_custom_frame( - frame_custom_thread_id, origin.gr_frame, _get_paused_name(py_db, origin), thread_get_ident()) + update_custom_frame(frame_custom_thread_id, origin.gr_frame, _get_paused_name(py_db, origin), thread_get_ident()) else: frame_custom_thread_id = _saved_greenlets_to_custom_frame_thread_id.pop(origin, None) if frame_custom_thread_id is not None: @@ -57,7 +56,6 @@ def greenlet_events(event, args): pydevd_tracing.reapply_settrace() else: - # i.e.: no logic related to showing paused greenlets is needed. def greenlet_events(event, args): pydevd_tracing.reapply_settrace() @@ -70,24 +68,24 @@ def enable_gevent_integration(): # Note: gevent.version_info is WRONG (gevent.__version__ must be used). try: - if tuple(int(x) for x in gevent.__version__.split('.')[:2]) <= (20, 0): + if tuple(int(x) for x in gevent.__version__.split(".")[:2]) <= (20, 0): if not GEVENT_SHOW_PAUSED_GREENLETS: return - if not hasattr(greenlet, 'settrace'): + if not hasattr(greenlet, "settrace"): # In older versions it was optional. # We still try to use if available though. - pydev_log.debug('greenlet.settrace not available. GEVENT_SHOW_PAUSED_GREENLETS will have no effect.') + pydev_log.debug("greenlet.settrace not available. GEVENT_SHOW_PAUSED_GREENLETS will have no effect.") return try: greenlet.settrace(greenlet_events) except: - pydev_log.exception('Error with greenlet.settrace.') + pydev_log.exception("Error with greenlet.settrace.") except: - pydev_log.exception('Error setting up gevent %s.', gevent.__version__) + pydev_log.exception("Error setting up gevent %s.", gevent.__version__) def log_gevent_debug_info(): - pydev_log.debug('Greenlet version: %s', greenlet.__version__) - pydev_log.debug('Gevent version: %s', gevent.__version__) - pydev_log.debug('Gevent install location: %s', gevent.__file__) + pydev_log.debug("Greenlet version: %s", greenlet.__version__) + pydev_log.debug("Gevent version: %s", gevent.__version__) + pydev_log.debug("Gevent install location: %s", gevent.__file__) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py index ee3527c50..a655e4700 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_import_class.py @@ -1,68 +1,70 @@ -#Note: code gotten from _pydev_imports_tipper. +# Note: code gotten from _pydev_imports_tipper. import sys + def _imp(name, log=None): try: return __import__(name) except: - if '.' in name: - sub = name[0:name.rfind('.')] - + if "." in name: + sub = name[0 : name.rfind(".")] + if log is not None: - log.add_content('Unable to import', name, 'trying with', sub) + log.add_content("Unable to import", name, "trying with", sub) log.add_exception() - + return _imp(sub, log) else: - s = 'Unable to import module: %s - sys.path: %s' % (str(name), sys.path) + s = "Unable to import module: %s - sys.path: %s" % (str(name), sys.path) if log is not None: log.add_content(s) log.add_exception() - + raise ImportError(s) - + IS_IPY = False -if sys.platform == 'cli': +if sys.platform == "cli": IS_IPY = True _old_imp = _imp + def _imp(name, log=None): - #We must add a reference in clr for .Net - import clr #@UnresolvedImport + # We must add a reference in clr for .Net + import clr # @UnresolvedImport + initial_name = name - while '.' in name: + while "." in name: try: clr.AddReference(name) - break #If it worked, that's OK. + break # If it worked, that's OK. except: - name = name[0:name.rfind('.')] + name = name[0 : name.rfind(".")] else: try: clr.AddReference(name) except: - pass #That's OK (not dot net module). - + pass # That's OK (not dot net module). + return _old_imp(initial_name, log) - + def import_name(name, log=None): mod = _imp(name, log) - components = name.split('.') + components = name.split(".") old_comp = None for comp in components[1:]: try: - #this happens in the following case: - #we have mx.DateTime.mxDateTime.mxDateTime.pyd - #but after importing it, mx.DateTime.mxDateTime shadows access to mxDateTime.pyd + # this happens in the following case: + # we have mx.DateTime.mxDateTime.mxDateTime.pyd + # but after importing it, mx.DateTime.mxDateTime shadows access to mxDateTime.pyd mod = getattr(mod, comp) except AttributeError: if old_comp != comp: raise - + old_comp = comp - + return mod - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py index 3682c4ded..7d3bffb80 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_io.py @@ -5,12 +5,12 @@ class IORedirector: - ''' + """ This class works to wrap a stream (stdout/stderr) with an additional redirect. - ''' + """ def __init__(self, original, new_redirect, wrap_buffer=False): - ''' + """ :param stream original: The stream to be wrapped (usually stdout/stderr, but could be None). @@ -20,11 +20,11 @@ def __init__(self, original, new_redirect, wrap_buffer=False): :param bool wrap_buffer: Whether to create a buffer attribute (needed to mimick python 3 s tdout/stderr which has a buffer to write binary data). - ''' + """ self._lock = ForkSafeLock(rlock=True) self._writing = False self._redirect_to = (original, new_redirect) - if wrap_buffer and hasattr(original, 'buffer'): + if wrap_buffer and hasattr(original, "buffer"): self.buffer = IORedirector(original.buffer, new_redirect.buffer, False) def write(self, s): @@ -36,20 +36,20 @@ def write(self, s): self._writing = True try: for r in self._redirect_to: - if hasattr(r, 'write'): + if hasattr(r, "write"): r.write(s) finally: self._writing = False def isatty(self): for r in self._redirect_to: - if hasattr(r, 'isatty'): + if hasattr(r, "isatty"): return r.isatty() return False def flush(self): for r in self._redirect_to: - if hasattr(r, 'flush'): + if hasattr(r, "flush"): r.flush() def __getattr__(self, name): @@ -60,9 +60,8 @@ def __getattr__(self, name): class RedirectToPyDBIoMessages(object): - def __init__(self, out_ctx, wrap_stream, wrap_buffer, on_write=None): - ''' + """ :param out_ctx: 1=stdout and 2=stderr @@ -77,10 +76,10 @@ def __init__(self, out_ctx, wrap_stream, wrap_buffer, on_write=None): May be a custom callable to be called when to write something. If not passed the default implementation will create an io message and send it through the debugger. - ''' - encoding = getattr(wrap_stream, 'encoding', None) + """ + encoding = getattr(wrap_stream, "encoding", None) if not encoding: - encoding = os.environ.get('PYTHONIOENCODING', 'utf-8') + encoding = os.environ.get("PYTHONIOENCODING", "utf-8") self.encoding = encoding self._out_ctx = out_ctx if wrap_buffer: @@ -102,7 +101,7 @@ def write(self, s): if s: # Need s in str if isinstance(s, bytes): - s = s.decode(self.encoding, errors='replace') + s = s.decode(self.encoding, errors="replace") py_db = self.get_pydb() if py_db is not None: @@ -114,24 +113,25 @@ def write(self, s): class IOBuf: - '''This class works as a replacement for stdio and stderr. + """This class works as a replacement for stdio and stderr. It is a buffer and when its contents are requested, it will erase what it has so far so that the next return will not return the same contents again. - ''' + """ def __init__(self): self.buflist = [] import os - self.encoding = os.environ.get('PYTHONIOENCODING', 'utf-8') + + self.encoding = os.environ.get("PYTHONIOENCODING", "utf-8") def getvalue(self): b = self.buflist self.buflist = [] # clear it - return ''.join(b) # bytes on py2, str on py3. + return "".join(b) # bytes on py2, str on py3. def write(self, s): if isinstance(s, bytes): - s = s.decode(self.encoding, errors='replace') + s = s.decode(self.encoding, errors="replace") self.buflist.append(s) def isatty(self): @@ -145,7 +145,6 @@ def empty(self): class _RedirectInfo(object): - def __init__(self, original, redirect_to): self.original = original self.redirect_to = redirect_to @@ -160,25 +159,25 @@ class _RedirectionsHolder: _pydevd_stderr_redirect_ = None -def start_redirect(keep_original_redirection=False, std='stdout', redirect_to=None): - ''' +def start_redirect(keep_original_redirection=False, std="stdout", redirect_to=None): + """ @param std: 'stdout', 'stderr', or 'both' - ''' + """ with _RedirectionsHolder._lock: if redirect_to is None: redirect_to = IOBuf() - if std == 'both': - config_stds = ['stdout', 'stderr'] + if std == "both": + config_stds = ["stdout", "stderr"] else: config_stds = [std] for std in config_stds: original = getattr(sys, std) - stack = getattr(_RedirectionsHolder, '_stack_%s' % std) + stack = getattr(_RedirectionsHolder, "_stack_%s" % std) if keep_original_redirection: - wrap_buffer = True if hasattr(redirect_to, 'buffer') else False + wrap_buffer = True if hasattr(redirect_to, "buffer") else False new_std_instance = IORedirector(getattr(sys, std), redirect_to, wrap_buffer=wrap_buffer) setattr(sys, std, new_std_instance) else: @@ -190,33 +189,33 @@ def start_redirect(keep_original_redirection=False, std='stdout', redirect_to=No return redirect_to -def end_redirect(std='stdout'): +def end_redirect(std="stdout"): with _RedirectionsHolder._lock: - if std == 'both': - config_stds = ['stdout', 'stderr'] + if std == "both": + config_stds = ["stdout", "stderr"] else: config_stds = [std] for std in config_stds: - stack = getattr(_RedirectionsHolder, '_stack_%s' % std) + stack = getattr(_RedirectionsHolder, "_stack_%s" % std) redirect_info = stack.pop() setattr(sys, std, redirect_info.original) def redirect_stream_to_pydb_io_messages(std): - ''' + """ :param std: 'stdout' or 'stderr' - ''' + """ with _RedirectionsHolder._lock: - redirect_to_name = '_pydevd_%s_redirect_' % (std,) + redirect_to_name = "_pydevd_%s_redirect_" % (std,) if getattr(_RedirectionsHolder, redirect_to_name) is None: wrap_buffer = True original = getattr(sys, std) - redirect_to = RedirectToPyDBIoMessages(1 if std == 'stdout' else 2, original, wrap_buffer) + redirect_to = RedirectToPyDBIoMessages(1 if std == "stdout" else 2, original, wrap_buffer) start_redirect(keep_original_redirection=True, std=std, redirect_to=redirect_to) - stack = getattr(_RedirectionsHolder, '_stack_%s' % std) + stack = getattr(_RedirectionsHolder, "_stack_%s" % std) setattr(_RedirectionsHolder, redirect_to_name, stack[-1]) return True @@ -224,17 +223,17 @@ def redirect_stream_to_pydb_io_messages(std): def stop_redirect_stream_to_pydb_io_messages(std): - ''' + """ :param std: 'stdout' or 'stderr' - ''' + """ with _RedirectionsHolder._lock: - redirect_to_name = '_pydevd_%s_redirect_' % (std,) + redirect_to_name = "_pydevd_%s_redirect_" % (std,) redirect_info = getattr(_RedirectionsHolder, redirect_to_name) if redirect_info is not None: # :type redirect_info: _RedirectInfo setattr(_RedirectionsHolder, redirect_to_name, None) - stack = getattr(_RedirectionsHolder, '_stack_%s' % std) + stack = getattr(_RedirectionsHolder, "_stack_%s" % std) prev_info = stack.pop() curr = getattr(sys, std) @@ -246,7 +245,7 @@ def stop_redirect_stream_to_pydb_io_messages(std): def redirect_stream_to_pydb_io_messages_context(): with _RedirectionsHolder._lock: redirecting = [] - for std in ('stdout', 'stderr'): + for std in ("stdout", "stderr"): if redirect_stream_to_pydb_io_messages(std): redirecting.append(std) @@ -255,4 +254,3 @@ def redirect_stream_to_pydb_io_messages_context(): finally: for std in redirecting: stop_redirect_stream_to_pydb_io_messages(std) - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py index 0165455c9..d8f93c1ea 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_json_debug_options.py @@ -3,18 +3,17 @@ class DebugOptions(object): - __slots__ = [ - 'just_my_code', - 'redirect_output', - 'show_return_value', - 'break_system_exit_zero', - 'django_debug', - 'flask_debug', - 'stop_on_entry', - 'max_exception_stack_frames', - 'gui_event_loop', - 'client_os', + "just_my_code", + "redirect_output", + "show_return_value", + "break_system_exit_zero", + "django_debug", + "flask_debug", + "stop_on_entry", + "max_exception_stack_frames", + "gui_event_loop", + "client_os", ] def __init__(self): @@ -26,7 +25,7 @@ def __init__(self): self.flask_debug = False self.stop_on_entry = False self.max_exception_stack_frames = 0 - self.gui_event_loop = 'matplotlib' + self.gui_event_loop = "matplotlib" self.client_os = None def to_json(self): @@ -36,68 +35,68 @@ def to_json(self): return json.dumps(dct) def update_fom_debug_options(self, debug_options): - if 'DEBUG_STDLIB' in debug_options: - self.just_my_code = not debug_options.get('DEBUG_STDLIB') + if "DEBUG_STDLIB" in debug_options: + self.just_my_code = not debug_options.get("DEBUG_STDLIB") - if 'REDIRECT_OUTPUT' in debug_options: - self.redirect_output = debug_options.get('REDIRECT_OUTPUT') + if "REDIRECT_OUTPUT" in debug_options: + self.redirect_output = debug_options.get("REDIRECT_OUTPUT") - if 'SHOW_RETURN_VALUE' in debug_options: - self.show_return_value = debug_options.get('SHOW_RETURN_VALUE') + if "SHOW_RETURN_VALUE" in debug_options: + self.show_return_value = debug_options.get("SHOW_RETURN_VALUE") - if 'BREAK_SYSTEMEXIT_ZERO' in debug_options: - self.break_system_exit_zero = debug_options.get('BREAK_SYSTEMEXIT_ZERO') + if "BREAK_SYSTEMEXIT_ZERO" in debug_options: + self.break_system_exit_zero = debug_options.get("BREAK_SYSTEMEXIT_ZERO") - if 'DJANGO_DEBUG' in debug_options: - self.django_debug = debug_options.get('DJANGO_DEBUG') + if "DJANGO_DEBUG" in debug_options: + self.django_debug = debug_options.get("DJANGO_DEBUG") - if 'FLASK_DEBUG' in debug_options: - self.flask_debug = debug_options.get('FLASK_DEBUG') + if "FLASK_DEBUG" in debug_options: + self.flask_debug = debug_options.get("FLASK_DEBUG") - if 'STOP_ON_ENTRY' in debug_options: - self.stop_on_entry = debug_options.get('STOP_ON_ENTRY') + if "STOP_ON_ENTRY" in debug_options: + self.stop_on_entry = debug_options.get("STOP_ON_ENTRY") - if 'CLIENT_OS_TYPE' in debug_options: - self.client_os = debug_options.get('CLIENT_OS_TYPE') + if "CLIENT_OS_TYPE" in debug_options: + self.client_os = debug_options.get("CLIENT_OS_TYPE") # Note: _max_exception_stack_frames cannot be set by debug options. def update_from_args(self, args): - if 'justMyCode' in args: - self.just_my_code = bool_parser(args['justMyCode']) + if "justMyCode" in args: + self.just_my_code = bool_parser(args["justMyCode"]) else: # i.e.: if justMyCode is provided, don't check the deprecated value - if 'debugStdLib' in args: - self.just_my_code = not bool_parser(args['debugStdLib']) + if "debugStdLib" in args: + self.just_my_code = not bool_parser(args["debugStdLib"]) - if 'redirectOutput' in args: - self.redirect_output = bool_parser(args['redirectOutput']) + if "redirectOutput" in args: + self.redirect_output = bool_parser(args["redirectOutput"]) - if 'showReturnValue' in args: - self.show_return_value = bool_parser(args['showReturnValue']) + if "showReturnValue" in args: + self.show_return_value = bool_parser(args["showReturnValue"]) - if 'breakOnSystemExitZero' in args: - self.break_system_exit_zero = bool_parser(args['breakOnSystemExitZero']) + if "breakOnSystemExitZero" in args: + self.break_system_exit_zero = bool_parser(args["breakOnSystemExitZero"]) - if 'django' in args: - self.django_debug = bool_parser(args['django']) + if "django" in args: + self.django_debug = bool_parser(args["django"]) - if 'flask' in args: - self.flask_debug = bool_parser(args['flask']) + if "flask" in args: + self.flask_debug = bool_parser(args["flask"]) - if 'jinja' in args: - self.flask_debug = bool_parser(args['jinja']) + if "jinja" in args: + self.flask_debug = bool_parser(args["jinja"]) - if 'stopOnEntry' in args: - self.stop_on_entry = bool_parser(args['stopOnEntry']) + if "stopOnEntry" in args: + self.stop_on_entry = bool_parser(args["stopOnEntry"]) - self.max_exception_stack_frames = int_parser(args.get('maxExceptionStackFrames', 0)) + self.max_exception_stack_frames = int_parser(args.get("maxExceptionStackFrames", 0)) - if 'guiEventLoop' in args: - self.gui_event_loop = str(args['guiEventLoop']) + if "guiEventLoop" in args: + self.gui_event_loop = str(args["guiEventLoop"]) - if 'clientOS' in args: - self.client_os = str(args['clientOS']).upper() + if "clientOS" in args: + self.client_os = str(args["clientOS"]).upper() def int_parser(s, default_value=0): @@ -116,55 +115,52 @@ def unquote(s): DEBUG_OPTIONS_PARSER = { - 'WAIT_ON_ABNORMAL_EXIT': bool_parser, - 'WAIT_ON_NORMAL_EXIT': bool_parser, - 'BREAK_SYSTEMEXIT_ZERO': bool_parser, - 'REDIRECT_OUTPUT': bool_parser, - 'DJANGO_DEBUG': bool_parser, - 'FLASK_DEBUG': bool_parser, - 'FIX_FILE_PATH_CASE': bool_parser, - 'CLIENT_OS_TYPE': unquote, - 'DEBUG_STDLIB': bool_parser, - 'STOP_ON_ENTRY': bool_parser, - 'SHOW_RETURN_VALUE': bool_parser, - 'MULTIPROCESS': bool_parser, + "WAIT_ON_ABNORMAL_EXIT": bool_parser, + "WAIT_ON_NORMAL_EXIT": bool_parser, + "BREAK_SYSTEMEXIT_ZERO": bool_parser, + "REDIRECT_OUTPUT": bool_parser, + "DJANGO_DEBUG": bool_parser, + "FLASK_DEBUG": bool_parser, + "FIX_FILE_PATH_CASE": bool_parser, + "CLIENT_OS_TYPE": unquote, + "DEBUG_STDLIB": bool_parser, + "STOP_ON_ENTRY": bool_parser, + "SHOW_RETURN_VALUE": bool_parser, + "MULTIPROCESS": bool_parser, } DEBUG_OPTIONS_BY_FLAG = { - 'RedirectOutput': 'REDIRECT_OUTPUT=True', - 'WaitOnNormalExit': 'WAIT_ON_NORMAL_EXIT=True', - 'WaitOnAbnormalExit': 'WAIT_ON_ABNORMAL_EXIT=True', - 'BreakOnSystemExitZero': 'BREAK_SYSTEMEXIT_ZERO=True', - 'Django': 'DJANGO_DEBUG=True', - 'Flask': 'FLASK_DEBUG=True', - 'Jinja': 'FLASK_DEBUG=True', - 'FixFilePathCase': 'FIX_FILE_PATH_CASE=True', - 'DebugStdLib': 'DEBUG_STDLIB=True', - 'WindowsClient': 'CLIENT_OS_TYPE=WINDOWS', - 'UnixClient': 'CLIENT_OS_TYPE=UNIX', - 'StopOnEntry': 'STOP_ON_ENTRY=True', - 'ShowReturnValue': 'SHOW_RETURN_VALUE=True', - 'Multiprocess': 'MULTIPROCESS=True', + "RedirectOutput": "REDIRECT_OUTPUT=True", + "WaitOnNormalExit": "WAIT_ON_NORMAL_EXIT=True", + "WaitOnAbnormalExit": "WAIT_ON_ABNORMAL_EXIT=True", + "BreakOnSystemExitZero": "BREAK_SYSTEMEXIT_ZERO=True", + "Django": "DJANGO_DEBUG=True", + "Flask": "FLASK_DEBUG=True", + "Jinja": "FLASK_DEBUG=True", + "FixFilePathCase": "FIX_FILE_PATH_CASE=True", + "DebugStdLib": "DEBUG_STDLIB=True", + "WindowsClient": "CLIENT_OS_TYPE=WINDOWS", + "UnixClient": "CLIENT_OS_TYPE=UNIX", + "StopOnEntry": "STOP_ON_ENTRY=True", + "ShowReturnValue": "SHOW_RETURN_VALUE=True", + "Multiprocess": "MULTIPROCESS=True", } def _build_debug_options(flags): """Build string representation of debug options from the launch config.""" - return ';'.join(DEBUG_OPTIONS_BY_FLAG[flag] - for flag in flags or [] - if flag in DEBUG_OPTIONS_BY_FLAG) + return ";".join(DEBUG_OPTIONS_BY_FLAG[flag] for flag in flags or [] if flag in DEBUG_OPTIONS_BY_FLAG) def _parse_debug_options(opts): - """Debug options are semicolon separated key=value pairs - """ + """Debug options are semicolon separated key=value pairs""" options = {} if not opts: return options - for opt in opts.split(';'): + for opt in opts.split(";"): try: - key, value = opt.split('=') + key, value = opt.split("=") except ValueError: continue try: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py index 506f5fd27..cc345f1c4 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command.py @@ -1,15 +1,17 @@ -from _pydevd_bundle.pydevd_constants import DebugInfoHolder, \ - get_global_debugger, GetGlobalDebugger, set_global_debugger # Keep for backward compatibility @UnusedImport +from _pydevd_bundle.pydevd_constants import ( + DebugInfoHolder, + get_global_debugger, + GetGlobalDebugger, + set_global_debugger, +) # Keep for backward compatibility @UnusedImport from _pydevd_bundle.pydevd_utils import quote_smart as quote, to_string from _pydevd_bundle.pydevd_comm_constants import ID_TO_MEANING, CMD_EXIT -from _pydevd_bundle.pydevd_constants import HTTP_PROTOCOL, HTTP_JSON_PROTOCOL, \ - get_protocol, IS_JYTHON, ForkSafeLock +from _pydevd_bundle.pydevd_constants import HTTP_PROTOCOL, HTTP_JSON_PROTOCOL, get_protocol, IS_JYTHON, ForkSafeLock import json from _pydev_bundle import pydev_log class _BaseNetCommand(object): - # Command id. Should be set in instance. id = -1 @@ -28,7 +30,6 @@ class _NullNetCommand(_BaseNetCommand): class _NullExitCommand(_NullNetCommand): - id = CMD_EXIT @@ -46,6 +47,7 @@ class NetCommand(_BaseNetCommand): Command can represent command received from the debugger, or one to be sent by daemon. """ + next_seq = 0 # sequence numbers _showing_debug_info = 0 @@ -67,13 +69,13 @@ def __init__(self, cmd_id, seq, text, is_json=False): self.seq = seq if is_json: - if hasattr(text, 'to_dict'): + if hasattr(text, "to_dict"): as_dict = text.to_dict(update_ids_to_dap=True) else: assert isinstance(text, dict) as_dict = text - as_dict['pydevd_cmd_id'] = cmd_id - as_dict['seq'] = seq + as_dict["pydevd_cmd_id"] = cmd_id + as_dict["seq"] = seq self.as_dict = as_dict text = json.dumps(as_dict) @@ -87,13 +89,13 @@ def __init__(self, cmd_id, seq, text, is_json=False): else: if protocol not in (HTTP_PROTOCOL, HTTP_JSON_PROTOCOL): encoded = quote(to_string(text), '/<>_=" \t') - msg = '%s\t%s\t%s\n' % (cmd_id, seq, encoded) + msg = "%s\t%s\t%s\n" % (cmd_id, seq, encoded) else: - msg = '%s\t%s\t%s' % (cmd_id, seq, text) + msg = "%s\t%s\t%s" % (cmd_id, seq, text) if isinstance(msg, str): - msg = msg.encode('utf-8') + msg = msg.encode("utf-8") assert isinstance(msg, bytes) as_bytes = msg @@ -103,7 +105,7 @@ def send(self, sock): as_bytes = self._as_bytes try: if get_protocol() in (HTTP_PROTOCOL, HTTP_JSON_PROTOCOL): - sock.sendall(('Content-Length: %s\r\n\r\n' % len(as_bytes)).encode('ascii')) + sock.sendall(("Content-Length: %s\r\n\r\n" % len(as_bytes)).encode("ascii")) sock.sendall(as_bytes) if self._after_send: for method in self._after_send: @@ -133,14 +135,13 @@ def _show_debug_info(cls, cmd_id, seq, text): cls._showing_debug_info += 1 try: - out_message = 'sending cmd (%s) --> ' % (get_protocol(),) - out_message += "%20s" % ID_TO_MEANING.get(str(cmd_id), 'UNKNOWN') - out_message += ' ' - out_message += text.replace('\n', ' ') + out_message = "sending cmd (%s) --> " % (get_protocol(),) + out_message += "%20s" % ID_TO_MEANING.get(str(cmd_id), "UNKNOWN") + out_message += " " + out_message += text.replace("\n", " ") try: - pydev_log.critical('%s\n', out_message) + pydev_log.critical("%s\n", out_message) except: pass finally: cls._showing_debug_info -= 1 - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py index 266653f40..7715ddb00 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_json.py @@ -4,21 +4,46 @@ import sys import socket as socket_module -from _pydev_bundle._pydev_imports_tipper import TYPE_IMPORT, TYPE_CLASS, TYPE_FUNCTION, TYPE_ATTR, \ - TYPE_BUILTIN, TYPE_PARAM +from _pydev_bundle._pydev_imports_tipper import TYPE_IMPORT, TYPE_CLASS, TYPE_FUNCTION, TYPE_ATTR, TYPE_BUILTIN, TYPE_PARAM from _pydev_bundle.pydev_is_thread_alive import is_thread_alive from _pydev_bundle.pydev_override import overrides from _pydevd_bundle._debug_adapter import pydevd_schema -from _pydevd_bundle._debug_adapter.pydevd_schema import ModuleEvent, ModuleEventBody, Module, \ - OutputEventBody, OutputEvent, ContinuedEventBody, ExitedEventBody, \ - ExitedEvent -from _pydevd_bundle.pydevd_comm_constants import CMD_THREAD_CREATE, CMD_RETURN, CMD_MODULE_EVENT, \ - CMD_WRITE_TO_CONSOLE, CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, \ - CMD_STEP_RETURN, CMD_STEP_CAUGHT_EXCEPTION, CMD_ADD_EXCEPTION_BREAK, CMD_SET_BREAK, \ - CMD_SET_NEXT_STATEMENT, CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, \ - CMD_THREAD_RESUME_SINGLE_NOTIFICATION, CMD_THREAD_KILL, CMD_STOP_ON_START, CMD_INPUT_REQUESTED, \ - CMD_EXIT, CMD_STEP_INTO_COROUTINE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO, \ - CMD_SET_FUNCTION_BREAK +from _pydevd_bundle._debug_adapter.pydevd_schema import ( + ModuleEvent, + ModuleEventBody, + Module, + OutputEventBody, + OutputEvent, + ContinuedEventBody, + ExitedEventBody, + ExitedEvent, +) +from _pydevd_bundle.pydevd_comm_constants import ( + CMD_THREAD_CREATE, + CMD_RETURN, + CMD_MODULE_EVENT, + CMD_WRITE_TO_CONSOLE, + CMD_STEP_INTO, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_OVER, + CMD_STEP_OVER_MY_CODE, + CMD_STEP_RETURN, + CMD_STEP_CAUGHT_EXCEPTION, + CMD_ADD_EXCEPTION_BREAK, + CMD_SET_BREAK, + CMD_SET_NEXT_STATEMENT, + CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, + CMD_THREAD_RESUME_SINGLE_NOTIFICATION, + CMD_THREAD_KILL, + CMD_STOP_ON_START, + CMD_INPUT_REQUESTED, + CMD_EXIT, + CMD_STEP_INTO_COROUTINE, + CMD_STEP_RETURN_MY_CODE, + CMD_SMART_STEP_INTO, + CMD_SET_FUNCTION_BREAK, + CMD_THREAD_RUN, +) from _pydevd_bundle.pydevd_constants import get_thread_id, ForkSafeLock, DebugInfoHolder from _pydevd_bundle.pydevd_net_command import NetCommand, NULL_NET_COMMAND from _pydevd_bundle.pydevd_net_command_factory_xml import NetCommandFactory @@ -33,17 +58,16 @@ class ModulesManager(object): - def __init__(self): self._lock = ForkSafeLock() self._modules = {} self._next_id = partial(next, itertools.count(0)) def track_module(self, filename_in_utf8, module_name, frame): - ''' + """ :return list(NetCommand): Returns a list with the module events to be sent. - ''' + """ if filename_in_utf8 in self._modules: return [] @@ -54,14 +78,14 @@ def track_module(self, filename_in_utf8, module_name, frame): return try: - version = str(frame.f_globals.get('__version__', '')) + version = str(frame.f_globals.get("__version__", "")) except: - version = '' + version = "" try: - package_name = str(frame.f_globals.get('__package__', '')) + package_name = str(frame.f_globals.get("__package__", "")) except: - package_name = '' + package_name = "" module_id = self._next_id() @@ -71,9 +95,9 @@ def track_module(self, filename_in_utf8, module_name, frame): if package_name: # Note: package doesn't appear in the docs but seems to be expected? - module.kwargs['package'] = package_name + module.kwargs["package"] = package_name - module_event = ModuleEvent(ModuleEventBody('new', module)) + module_event = ModuleEvent(ModuleEventBody("new", module)) module_events.append(NetCommand(CMD_MODULE_EVENT, 0, module_event, is_json=True)) @@ -81,15 +105,15 @@ def track_module(self, filename_in_utf8, module_name, frame): return module_events def get_modules_info(self): - ''' + """ :return list(Module) - ''' + """ with self._lock: return list(self._modules.values()) class NetCommandFactoryJson(NetCommandFactory): - ''' + """ Factory for commands which will provide messages as json (they should be similar to the debug adapter where possible, although some differences are currently Ok). @@ -98,7 +122,7 @@ class NetCommandFactoryJson(NetCommandFactory): can be done one at a time (any message not overridden will currently use the xml version) -- after having all messages handled, it should no longer use NetCommandFactory as the base class. - ''' + """ def __init__(self): NetCommandFactory.__init__(self) @@ -114,11 +138,10 @@ def make_protocol_set_message(self, seq): @overrides(NetCommandFactory.make_thread_created_message) def make_thread_created_message(self, thread): - # Note: the thread id for the debug adapter must be an int # (make the actual id from get_thread_id respect that later on). msg = pydevd_schema.ThreadEvent( - pydevd_schema.ThreadEventBody('started', get_thread_id(thread)), + pydevd_schema.ThreadEventBody("started", get_thread_id(thread)), ) return NetCommand(CMD_THREAD_CREATE, 0, msg, is_json=True) @@ -127,7 +150,7 @@ def make_thread_created_message(self, thread): def make_custom_frame_created_message(self, frame_id, frame_description): self._additional_thread_id_to_thread_name[frame_id] = frame_description msg = pydevd_schema.ThreadEvent( - pydevd_schema.ThreadEventBody('started', frame_id), + pydevd_schema.ThreadEventBody("started", frame_id), ) return NetCommand(CMD_THREAD_CREATE, 0, msg, is_json=True) @@ -136,7 +159,7 @@ def make_custom_frame_created_message(self, frame_id, frame_description): def make_thread_killed_message(self, tid): self._additional_thread_id_to_thread_name.pop(tid, None) msg = pydevd_schema.ThreadEvent( - pydevd_schema.ThreadEventBody('exited', tid), + pydevd_schema.ThreadEventBody("exited", tid), ) return NetCommand(CMD_THREAD_KILL, 0, msg, is_json=True) @@ -159,8 +182,7 @@ def make_list_threads_message(self, py_db, seq): threads.append(thread_schema.to_dict()) body = pydevd_schema.ThreadsResponseBody(threads) - response = pydevd_schema.ThreadsResponse( - request_seq=seq, success=True, command='threads', body=body) + response = pydevd_schema.ThreadsResponse(request_seq=seq, success=True, command="threads", body=body) return NetCommand(CMD_RETURN, 0, response, is_json=True) @@ -182,34 +204,34 @@ def make_get_completions_message(self, seq, completions, qualifier, start): label = completion[0] if label.lower().startswith(qualifier): completion = pydevd_schema.CompletionItem( - label=label, type=COMPLETION_TYPE_LOOK_UP[completion[3]], start=start, length=qualifier_len) + label=label, type=COMPLETION_TYPE_LOOK_UP[completion[3]], start=start, length=qualifier_len + ) targets.append(completion.to_dict()) body = pydevd_schema.CompletionsResponseBody(targets) - response = pydevd_schema.CompletionsResponse( - request_seq=seq, success=True, command='completions', body=body) + response = pydevd_schema.CompletionsResponse(request_seq=seq, success=True, command="completions", body=body) return NetCommand(CMD_RETURN, 0, response, is_json=True) def _format_frame_name(self, fmt, initial_name, module_name, line, path): if fmt is None: return initial_name frame_name = initial_name - if fmt.get('module', False): + if fmt.get("module", False): if module_name: - if initial_name == '': + if initial_name == "": frame_name = module_name else: - frame_name = '%s.%s' % (module_name, initial_name) + frame_name = "%s.%s" % (module_name, initial_name) else: basename = os.path.basename(path) - basename = basename[0:-3] if basename.lower().endswith('.py') else basename - if initial_name == '': - frame_name = '%s in %s' % (initial_name, basename) + basename = basename[0:-3] if basename.lower().endswith(".py") else basename + if initial_name == "": + frame_name = "%s in %s" % (initial_name, basename) else: - frame_name = '%s.%s' % (basename, initial_name) + frame_name = "%s.%s" % (basename, initial_name) - if fmt.get('line', False): - frame_name = '%s : %d' % (frame_name, line) + if fmt.get("line", False): + frame_name = "%s : %d" % (frame_name, line) return frame_name @@ -229,32 +251,39 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm else: frames_list = pydevd_frame_utils.create_frames_list_from_frame(topmost_frame) - for frame_id, frame, method_name, original_filename, filename_in_utf8, lineno, applied_mapping, show_as_current_frame, line_col_info in self._iter_visible_frames_info( - py_db, frames_list, flatten_chained=True - ): - + for ( + frame_id, + frame, + method_name, + original_filename, + filename_in_utf8, + lineno, + applied_mapping, + show_as_current_frame, + line_col_info, + ) in self._iter_visible_frames_info(py_db, frames_list, flatten_chained=True): try: - module_name = str(frame.f_globals.get('__name__', '')) + module_name = str(frame.f_globals.get("__name__", "")) except: - module_name = '' + module_name = "" module_events.extend(self.modules_manager.track_module(filename_in_utf8, module_name, frame)) presentation_hint = None - if not getattr(frame, 'IS_PLUGIN_FRAME', False): # Never filter out plugin frames! + if not getattr(frame, "IS_PLUGIN_FRAME", False): # Never filter out plugin frames! if py_db.is_files_filter_enabled and py_db.apply_files_filter(frame, original_filename, False): continue if not py_db.in_project_scope(frame): - presentation_hint = 'subtle' + presentation_hint = "subtle" formatted_name = self._format_frame_name(fmt, method_name, module_name, lineno, filename_in_utf8) if show_as_current_frame: - formatted_name += ' (Current frame)' + formatted_name += " (Current frame)" source_reference = pydevd_file_utils.get_client_filename_source_reference(filename_in_utf8) if not source_reference and not applied_mapping and not os.path.exists(original_filename): - if getattr(frame.f_code, 'co_lines', None) or getattr(frame.f_code, 'co_lnotab', None): + if getattr(frame.f_code, "co_lines", None) or getattr(frame.f_code, "co_lnotab", None): # Create a source-reference to be used where we provide the source by decompiling the code. # Note: When the time comes to retrieve the source reference in this case, we'll # check the linecache first (see: get_decompiled_source_from_frame_id). @@ -262,8 +291,7 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm else: # Check if someone added a source reference to the linecache (Python attrs does this). if linecache.getline(original_filename, 1): - source_reference = pydevd_file_utils.create_source_reference_for_linecache( - original_filename) + source_reference = pydevd_file_utils.create_source_reference_for_linecache(original_filename) column = 1 endcol = None @@ -272,7 +300,7 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm line_text = linecache.getline(original_filename, lineno) except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 2: - pydev_log.exception('Unable to get line from linecache for file: %s', original_filename) + pydev_log.exception("Unable to get line from linecache for file: %s", original_filename) else: if line_text: colno, endcolno = line_col_info.map_columns_to_line(line_text) @@ -280,12 +308,20 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm if line_col_info.lineno == line_col_info.end_lineno: endcol = endcolno + 1 - frames.append(pydevd_schema.StackFrame( - frame_id, formatted_name, lineno, column=column, endColumn=endcol, source={ - 'path': filename_in_utf8, - 'sourceReference': source_reference, - }, - presentationHint=presentation_hint).to_dict()) + frames.append( + pydevd_schema.StackFrame( + frame_id, + formatted_name, + lineno, + column=column, + endColumn=endcol, + source={ + "path": filename_in_utf8, + "sourceReference": source_reference, + }, + presentationHint=presentation_hint, + ).to_dict() + ) finally: topmost_frame = None @@ -302,47 +338,52 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm response = pydevd_schema.StackTraceResponse( request_seq=seq, success=True, - command='stackTrace', - body=pydevd_schema.StackTraceResponseBody(stackFrames=stack_frames, totalFrames=total_frames)) + command="stackTrace", + body=pydevd_schema.StackTraceResponseBody(stackFrames=stack_frames, totalFrames=total_frames), + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) @overrides(NetCommandFactory.make_warning_message) def make_warning_message(self, msg): - category = 'important' + category = "important" body = OutputEventBody(msg, category) event = OutputEvent(body) return NetCommand(CMD_WRITE_TO_CONSOLE, 0, event, is_json=True) @overrides(NetCommandFactory.make_io_message) def make_io_message(self, msg, ctx): - category = 'stdout' if int(ctx) == 1 else 'stderr' + category = "stdout" if int(ctx) == 1 else "stderr" body = OutputEventBody(msg, category) event = OutputEvent(body) return NetCommand(CMD_WRITE_TO_CONSOLE, 0, event, is_json=True) @overrides(NetCommandFactory.make_console_message) def make_console_message(self, msg): - category = 'console' + category = "console" body = OutputEventBody(msg, category) event = OutputEvent(body) return NetCommand(CMD_WRITE_TO_CONSOLE, 0, event, is_json=True) - _STEP_REASONS = set([ - CMD_STEP_INTO, - CMD_STEP_INTO_MY_CODE, - CMD_STEP_OVER, - CMD_STEP_OVER_MY_CODE, - CMD_STEP_RETURN, - CMD_STEP_RETURN_MY_CODE, - CMD_STEP_INTO_MY_CODE, - CMD_STOP_ON_START, - CMD_STEP_INTO_COROUTINE, - CMD_SMART_STEP_INTO, - ]) - _EXCEPTION_REASONS = set([ - CMD_STEP_CAUGHT_EXCEPTION, - CMD_ADD_EXCEPTION_BREAK, - ]) + _STEP_REASONS = set( + [ + CMD_STEP_INTO, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_OVER, + CMD_STEP_OVER_MY_CODE, + CMD_STEP_RETURN, + CMD_STEP_RETURN_MY_CODE, + CMD_STEP_INTO_MY_CODE, + CMD_STOP_ON_START, + CMD_STEP_INTO_COROUTINE, + CMD_SMART_STEP_INTO, + ] + ) + _EXCEPTION_REASONS = set( + [ + CMD_STEP_CAUGHT_EXCEPTION, + CMD_ADD_EXCEPTION_BREAK, + ] + ) @overrides(NetCommandFactory.make_thread_suspend_single_notification) def make_thread_suspend_single_notification(self, py_db, thread_id, thread, stop_reason): @@ -353,27 +394,27 @@ def make_thread_suspend_single_notification(self, py_db, thread_id, thread, stop preserve_focus_hint = False if stop_reason in self._STEP_REASONS: if info.pydev_original_step_cmd == CMD_STOP_ON_START: - # Just to make sure that's not set as the original reason anymore. info.pydev_original_step_cmd = -1 - stop_reason = 'entry' + stop_reason = "entry" else: - stop_reason = 'step' + stop_reason = "step" elif stop_reason in self._EXCEPTION_REASONS: - stop_reason = 'exception' + stop_reason = "exception" elif stop_reason == CMD_SET_BREAK: - stop_reason = 'breakpoint' + stop_reason = "breakpoint" elif stop_reason == CMD_SET_FUNCTION_BREAK: - stop_reason = 'function breakpoint' + stop_reason = "function breakpoint" elif stop_reason == CMD_SET_NEXT_STATEMENT: - stop_reason = 'goto' + stop_reason = "goto" else: - stop_reason = 'pause' + stop_reason = "pause" preserve_focus_hint = True - if stop_reason == 'exception': + if stop_reason == "exception": exception_info_response = build_exception_info_response( - py_db, thread_id, thread, -1, set_additional_thread_info, self._iter_visible_frames_info, max_frames=-1) + py_db, thread_id, thread, -1, set_additional_thread_info, self._iter_visible_frames_info, max_frames=-1 + ) exception_info_response exc_name = exception_info_response.body.exceptionId @@ -399,11 +440,8 @@ def make_thread_resume_single_notification(self, thread_id): @overrides(NetCommandFactory.make_set_next_stmnt_status_message) def make_set_next_stmnt_status_message(self, seq, is_success, exception_msg): response = pydevd_schema.GotoResponse( - request_seq=int(seq), - success=is_success, - command='goto', - body={}, - message=(None if is_success else exception_msg)) + request_seq=int(seq), success=is_success, command="goto", body={}, message=(None if is_success else exception_msg) + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) @overrides(NetCommandFactory.make_send_curr_exception_trace_message) @@ -435,12 +473,63 @@ def after_send(socket): return cmd @overrides(NetCommandFactory.make_thread_suspend_message) - def make_thread_suspend_message(self, *args, **kwargs): - return NULL_NET_COMMAND # Not a part of the debug adapter protocol + def make_thread_suspend_message(self, py_db, thread_id, frames_list, stop_reason, message, trace_suspend_type, thread, info): + from _pydevd_bundle.pydevd_comm_constants import CMD_THREAD_SUSPEND + + if py_db.multi_threads_single_notification: + pydev_log.debug("Skipping per-thread thread suspend notification.") + return NULL_NET_COMMAND # Don't send per-thread, send a single one. + pydev_log.debug("Sending per-thread thread suspend notification (stop_reason: %s)", stop_reason) + + exc_desc = None + exc_name = None + preserve_focus_hint = False + if stop_reason in self._STEP_REASONS: + if info.pydev_original_step_cmd == CMD_STOP_ON_START: + # Just to make sure that's not set as the original reason anymore. + info.pydev_original_step_cmd = -1 + stop_reason = "entry" + else: + stop_reason = "step" + elif stop_reason in self._EXCEPTION_REASONS: + stop_reason = "exception" + elif stop_reason == CMD_SET_BREAK: + stop_reason = "breakpoint" + elif stop_reason == CMD_SET_FUNCTION_BREAK: + stop_reason = "function breakpoint" + elif stop_reason == CMD_SET_NEXT_STATEMENT: + stop_reason = "goto" + else: + stop_reason = "pause" + preserve_focus_hint = True + + if stop_reason == "exception": + exception_info_response = build_exception_info_response( + py_db, thread_id, thread, -1, set_additional_thread_info, self._iter_visible_frames_info, max_frames=-1 + ) + exception_info_response + + exc_name = exception_info_response.body.exceptionId + exc_desc = exception_info_response.body.description + + body = pydevd_schema.StoppedEventBody( + reason=stop_reason, + description=exc_desc, + threadId=thread_id, + text=exc_name, + allThreadsStopped=False, + preserveFocusHint=preserve_focus_hint, + ) + event = pydevd_schema.StoppedEvent(body) + return NetCommand(CMD_THREAD_SUSPEND, 0, event, is_json=True) @overrides(NetCommandFactory.make_thread_run_message) - def make_thread_run_message(self, *args, **kwargs): - return NULL_NET_COMMAND # Not a part of the debug adapter protocol + def make_thread_run_message(self, py_db, thread_id, reason): + if py_db.multi_threads_single_notification: + return NULL_NET_COMMAND # Don't send per-thread, send a single one. + body = ContinuedEventBody(threadId=thread_id, allThreadsContinued=False) + event = pydevd_schema.ContinuedEvent(body) + return NetCommand(CMD_THREAD_RUN, 0, event, is_json=True) @overrides(NetCommandFactory.make_reloaded_code_message) def make_reloaded_code_message(self, *args, **kwargs): @@ -453,15 +542,17 @@ def make_input_requested_message(self, started): @overrides(NetCommandFactory.make_skipped_step_in_because_of_filters) def make_skipped_step_in_because_of_filters(self, py_db, frame): - msg = 'Frame skipped from debugging during step-in.' + msg = "Frame skipped from debugging during step-in." if py_db.get_use_libraries_filter(): - msg += ('\nNote: may have been skipped because of "justMyCode" option (default == true). ' - 'Try setting \"justMyCode\": false in the debug configuration (e.g., launch.json).\n') + msg += ( + '\nNote: may have been skipped because of "justMyCode" option (default == true). ' + 'Try setting "justMyCode": false in the debug configuration (e.g., launch.json).\n' + ) return self.make_warning_message(msg) @overrides(NetCommandFactory.make_evaluation_timeout_msg) def make_evaluation_timeout_msg(self, py_db, expression, curr_thread): - msg = '''Evaluating: %s did not finish after %.2f seconds. + msg = """Evaluating: %s did not finish after %.2f seconds. This may mean a number of things: - This evaluation is really slow and this is expected. In this case it's possible to silence this error by raising the timeout, setting the @@ -481,12 +572,12 @@ def make_evaluation_timeout_msg(self, py_db, expression, curr_thread): environment variable to true so that a thread dump is shown along with this message and optionally, set the PYDEVD_INTERRUPT_THREAD_TIMEOUT to some value so that the debugger tries to interrupt the evaluation (if possible) when this happens. -''' % (expression, pydevd_constants.PYDEVD_WARN_EVALUATION_TIMEOUT) +""" % (expression, pydevd_constants.PYDEVD_WARN_EVALUATION_TIMEOUT) if pydevd_constants.PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT: stream = StringIO() pydevd_utils.dump_threads(stream, show_pydevd_threads=False) - msg += '\n\n%s\n' % stream.getvalue() + msg += "\n\n%s\n" % stream.getvalue() return self.make_warning_message(msg) @overrides(NetCommandFactory.make_exit_command) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py index 7df810595..a9c3ad5be 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_net_command_factory_xml.py @@ -4,21 +4,52 @@ from _pydev_bundle._pydev_saved_modules import thread from _pydevd_bundle import pydevd_xml, pydevd_frame_utils, pydevd_constants, pydevd_utils from _pydevd_bundle.pydevd_comm_constants import ( - CMD_THREAD_CREATE, CMD_THREAD_KILL, CMD_THREAD_SUSPEND, CMD_THREAD_RUN, CMD_GET_VARIABLE, - CMD_EVALUATE_EXPRESSION, CMD_GET_FRAME, CMD_WRITE_TO_CONSOLE, CMD_GET_COMPLETIONS, - CMD_LOAD_SOURCE, CMD_SET_NEXT_STATEMENT, CMD_EXIT, CMD_GET_FILE_CONTENTS, - CMD_EVALUATE_CONSOLE_EXPRESSION, CMD_RUN_CUSTOM_OPERATION, - CMD_GET_BREAKPOINT_EXCEPTION, CMD_SEND_CURR_EXCEPTION_TRACE, - CMD_SEND_CURR_EXCEPTION_TRACE_PROCEEDED, CMD_SHOW_CONSOLE, CMD_GET_ARRAY, - CMD_INPUT_REQUESTED, CMD_GET_DESCRIPTION, CMD_PROCESS_CREATED, - CMD_SHOW_CYTHON_WARNING, CMD_LOAD_FULL_VALUE, CMD_GET_THREAD_STACK, - CMD_GET_EXCEPTION_DETAILS, CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, + CMD_THREAD_CREATE, + CMD_THREAD_KILL, + CMD_THREAD_SUSPEND, + CMD_THREAD_RUN, + CMD_GET_VARIABLE, + CMD_EVALUATE_EXPRESSION, + CMD_GET_FRAME, + CMD_WRITE_TO_CONSOLE, + CMD_GET_COMPLETIONS, + CMD_LOAD_SOURCE, + CMD_SET_NEXT_STATEMENT, + CMD_EXIT, + CMD_GET_FILE_CONTENTS, + CMD_EVALUATE_CONSOLE_EXPRESSION, + CMD_RUN_CUSTOM_OPERATION, + CMD_GET_BREAKPOINT_EXCEPTION, + CMD_SEND_CURR_EXCEPTION_TRACE, + CMD_SEND_CURR_EXCEPTION_TRACE_PROCEEDED, + CMD_SHOW_CONSOLE, + CMD_GET_ARRAY, + CMD_INPUT_REQUESTED, + CMD_GET_DESCRIPTION, + CMD_PROCESS_CREATED, + CMD_SHOW_CYTHON_WARNING, + CMD_LOAD_FULL_VALUE, + CMD_GET_THREAD_STACK, + CMD_GET_EXCEPTION_DETAILS, + CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, CMD_THREAD_RESUME_SINGLE_NOTIFICATION, - CMD_GET_NEXT_STATEMENT_TARGETS, CMD_VERSION, - CMD_RETURN, CMD_SET_PROTOCOL, CMD_ERROR, MAX_IO_MSG_SIZE, VERSION_STRING, - CMD_RELOAD_CODE, CMD_LOAD_SOURCE_FROM_FRAME_ID) -from _pydevd_bundle.pydevd_constants import (DebugInfoHolder, get_thread_id, - get_global_debugger, GetGlobalDebugger, set_global_debugger) # Keep for backward compatibility @UnusedImport + CMD_GET_NEXT_STATEMENT_TARGETS, + CMD_VERSION, + CMD_RETURN, + CMD_SET_PROTOCOL, + CMD_ERROR, + MAX_IO_MSG_SIZE, + VERSION_STRING, + CMD_RELOAD_CODE, + CMD_LOAD_SOURCE_FROM_FRAME_ID, +) +from _pydevd_bundle.pydevd_constants import ( + DebugInfoHolder, + get_thread_id, + get_global_debugger, + GetGlobalDebugger, + set_global_debugger, +) # Keep for backward compatibility @UnusedImport from _pydevd_bundle.pydevd_net_command import NetCommand, NULL_NET_COMMAND, NULL_EXIT_COMMAND from _pydevd_bundle.pydevd_utils import quote_smart as quote, get_non_pydevd_threads from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame @@ -30,16 +61,15 @@ from io import StringIO -#======================================================================================================================= +# ======================================================================================================================= # NetCommandFactory -#======================================================================================================================= +# ======================================================================================================================= class NetCommandFactory(object): - def __init__(self): self._additional_thread_id_to_thread_name = {} def _thread_to_xml(self, thread): - """ thread information as XML """ + """thread information as XML""" name = pydevd_xml.make_valid_xml_value(thread.name) cmd_text = '' % (quote(name), get_thread_id(thread)) return cmd_text @@ -51,14 +81,14 @@ def make_error_message(self, seq, text): return cmd def make_protocol_set_message(self, seq): - return NetCommand(CMD_SET_PROTOCOL, seq, '') + return NetCommand(CMD_SET_PROTOCOL, seq, "") def make_thread_created_message(self, thread): cmdText = "" + self._thread_to_xml(thread) + "" return NetCommand(CMD_THREAD_CREATE, 0, cmdText) def make_process_created_message(self): - cmdText = '' + cmdText = "" return NetCommand(CMD_PROCESS_CREATED, 0, cmdText) def make_process_about_to_be_replaced_message(self): @@ -66,7 +96,7 @@ def make_process_about_to_be_replaced_message(self): def make_show_cython_warning_message(self): try: - return NetCommand(CMD_SHOW_CYTHON_WARNING, 0, '') + return NetCommand(CMD_SHOW_CYTHON_WARNING, 0, "") except: return self.make_error_message(0, get_exception_traceback_str()) @@ -76,7 +106,7 @@ def make_custom_frame_created_message(self, frame_id, frame_description): return NetCommand(CMD_THREAD_CREATE, 0, '' % (frame_description, frame_id)) def make_list_threads_message(self, py_db, seq): - """ returns thread listing as XML """ + """returns thread listing as XML""" try: threads = get_non_pydevd_threads() cmd_text = [""] @@ -90,7 +120,7 @@ def make_list_threads_message(self, py_db, seq): append('' % (quote(name), thread_id)) append("") - return NetCommand(CMD_RETURN, seq, ''.join(cmd_text)) + return NetCommand(CMD_RETURN, seq, "".join(cmd_text)) except: return self.make_error_message(seq, get_exception_traceback_str()) @@ -119,8 +149,8 @@ def make_get_thread_stack_message(self, py_db, seq, thread_id, topmost_frame, fm cmd_text.append(self.make_thread_stack_str(py_db, frames_list)) finally: topmost_frame = None - cmd_text.append('') - return NetCommand(CMD_GET_THREAD_STACK, seq, ''.join(cmd_text)) + cmd_text.append("") + return NetCommand(CMD_GET_THREAD_STACK, seq, "".join(cmd_text)) except: return self.make_error_message(seq, get_exception_traceback_str()) @@ -135,18 +165,18 @@ def make_console_message(self, msg): return self.make_io_message(msg, 2) def make_io_message(self, msg, ctx): - ''' + """ @param msg: the message to pass to the debug server @param ctx: 1 for stdio 2 for stderr - ''' + """ try: msg = pydevd_constants.as_str(msg) if len(msg) > MAX_IO_MSG_SIZE: msg = msg[0:MAX_IO_MSG_SIZE] - msg += '...' + msg += "..." - msg = pydevd_xml.make_valid_xml_value(quote(msg, '/>_= ')) + msg = pydevd_xml.make_valid_xml_value(quote(msg, "/>_= ")) return NetCommand(str(CMD_WRITE_TO_CONSOLE), 0, '' % (msg, ctx)) except: return self.make_error_message(0, get_exception_traceback_str()) @@ -171,16 +201,16 @@ def _iter_visible_frames_info(self, py_db, frames_list, flatten_chained=False): for frame in frames_list: show_as_current_frame = frame is frames_list.current_frame if frame.f_code is None: - pydev_log.info('Frame without f_code: %s', frame) + pydev_log.info("Frame without f_code: %s", frame) continue # IronPython sometimes does not have it! method_name = frame.f_code.co_name # method name (if in method) or ? if global if method_name is None: - pydev_log.info('Frame without co_name: %s', frame) + pydev_log.info("Frame without co_name: %s", frame) continue # IronPython sometimes does not have it! if is_chained: - method_name = '[Chained Exc: %s] %s' % (frames_list.exc_desc, method_name) + method_name = "[Chained Exc: %s] %s" % (frames_list.exc_desc, method_name) abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) if py_db.get_file_type(frame, abs_path_real_path_and_base) == py_db.PYDEV_FILE: @@ -196,7 +226,17 @@ def _iter_visible_frames_info(self, py_db, frames_list, flatten_chained=False): new_filename_in_utf8, applied_mapping = pydevd_file_utils.map_file_to_client(filename_in_utf8) applied_mapping = applied_mapping or changed - yield frame_id, frame, method_name, abs_path_real_path_and_base[0], new_filename_in_utf8, lineno, applied_mapping, show_as_current_frame, line_col_info + yield ( + frame_id, + frame, + method_name, + abs_path_real_path_and_base[0], + new_filename_in_utf8, + lineno, + applied_mapping, + show_as_current_frame, + line_col_info, + ) if not flatten_chained: break @@ -213,21 +253,28 @@ def make_thread_stack_str(self, py_db, frames_list): append = cmd_text_list.append try: - for frame_id, frame, method_name, _original_filename, filename_in_utf8, lineno, _applied_mapping, _show_as_current_frame, line_col_info in self._iter_visible_frames_info( - py_db, frames_list, flatten_chained=True - ): - + for ( + frame_id, + frame, + method_name, + _original_filename, + filename_in_utf8, + lineno, + _applied_mapping, + _show_as_current_frame, + line_col_info, + ) in self._iter_visible_frames_info(py_db, frames_list, flatten_chained=True): # print("file is ", filename_in_utf8) # print("line is ", lineno) # Note: variables are all gotten 'on-demand'. - append('' % (quote(make_valid_xml_value(filename_in_utf8), '/>_= \t'), lineno)) + append('' % (quote(make_valid_xml_value(filename_in_utf8), "/>_= \t"), lineno)) append("") except: pydev_log.exception() - return ''.join(cmd_text_list) + return "".join(cmd_text_list) def make_thread_suspend_str( self, @@ -236,8 +283,8 @@ def make_thread_suspend_str( frames_list, stop_reason=None, message=None, - suspend_type="trace", - ): + trace_suspend_type="trace", + ): """ :return tuple(str,str): Returns tuple(thread_suspended_str, thread_stack_str). @@ -264,7 +311,7 @@ def make_thread_suspend_str( cmd_text_list = [] append = cmd_text_list.append - cmd_text_list.append('') + cmd_text_list.append("") if message: message = make_valid_xml_value(message) @@ -273,19 +320,20 @@ def make_thread_suspend_str( append(' stop_reason="%s"' % (stop_reason,)) if message is not None: append(' message="%s"' % (message,)) - if suspend_type is not None: - append(' suspend_type="%s"' % (suspend_type,)) - append('>') + if trace_suspend_type is not None: + append(' suspend_type="%s"' % (trace_suspend_type,)) + append(">") thread_stack_str = self.make_thread_stack_str(py_db, frames_list) append(thread_stack_str) append("") - return ''.join(cmd_text_list), thread_stack_str + return "".join(cmd_text_list), thread_stack_str - def make_thread_suspend_message(self, py_db, thread_id, frames_list, stop_reason, message, suspend_type): + def make_thread_suspend_message(self, py_db, thread_id, frames_list, stop_reason, message, trace_suspend_type, thread, additional_info): try: thread_suspend_str, thread_stack_str = self.make_thread_suspend_str( - py_db, thread_id, frames_list, stop_reason, message, suspend_type) + py_db, thread_id, frames_list, stop_reason, message, trace_suspend_type + ) cmd = NetCommand(CMD_THREAD_SUSPEND, 0, thread_suspend_str) cmd.thread_stack_str = thread_stack_str cmd.thread_suspend_str = thread_suspend_str @@ -295,19 +343,17 @@ def make_thread_suspend_message(self, py_db, thread_id, frames_list, stop_reason def make_thread_suspend_single_notification(self, py_db, thread_id, thread, stop_reason): try: - return NetCommand(CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, 0, json.dumps( - {'thread_id': thread_id, 'stop_reason':stop_reason})) + return NetCommand(CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, 0, json.dumps({"thread_id": thread_id, "stop_reason": stop_reason})) except: return self.make_error_message(0, get_exception_traceback_str()) def make_thread_resume_single_notification(self, thread_id): try: - return NetCommand(CMD_THREAD_RESUME_SINGLE_NOTIFICATION, 0, json.dumps( - {'thread_id': thread_id})) + return NetCommand(CMD_THREAD_RESUME_SINGLE_NOTIFICATION, 0, json.dumps({"thread_id": thread_id})) except: return self.make_error_message(0, get_exception_traceback_str()) - def make_thread_run_message(self, thread_id, reason): + def make_thread_run_message(self, py_db, thread_id, reason): try: return NetCommand(CMD_THREAD_RUN, 0, "%s\t%s" % (thread_id, reason)) except: @@ -371,24 +417,26 @@ def make_send_breakpoint_exception_message(self, seq, payload): def _make_send_curr_exception_trace_str(self, py_db, thread_id, exc_type, exc_desc, trace_obj): frames_list = pydevd_frame_utils.create_frames_list_from_traceback(trace_obj, None, exc_type, exc_desc) - exc_type = pydevd_xml.make_valid_xml_value(str(exc_type)).replace('\t', ' ') or 'exception: type unknown' - exc_desc = pydevd_xml.make_valid_xml_value(str(exc_desc)).replace('\t', ' ') or 'exception: no description' + exc_type = pydevd_xml.make_valid_xml_value(str(exc_type)).replace("\t", " ") or "exception: type unknown" + exc_desc = pydevd_xml.make_valid_xml_value(str(exc_desc)).replace("\t", " ") or "exception: no description" thread_suspend_str, thread_stack_str = self.make_thread_suspend_str( - py_db, thread_id, frames_list, CMD_SEND_CURR_EXCEPTION_TRACE, '') + py_db, thread_id, frames_list, CMD_SEND_CURR_EXCEPTION_TRACE, "" + ) return exc_type, exc_desc, thread_suspend_str, thread_stack_str def make_send_curr_exception_trace_message(self, py_db, seq, thread_id, curr_frame_id, exc_type, exc_desc, trace_obj): try: exc_type, exc_desc, thread_suspend_str, _thread_stack_str = self._make_send_curr_exception_trace_str( - py_db, thread_id, exc_type, exc_desc, trace_obj) - payload = str(curr_frame_id) + '\t' + exc_type + "\t" + exc_desc + "\t" + thread_suspend_str + py_db, thread_id, exc_type, exc_desc, trace_obj + ) + payload = str(curr_frame_id) + "\t" + exc_type + "\t" + exc_desc + "\t" + thread_suspend_str return NetCommand(CMD_SEND_CURR_EXCEPTION_TRACE, seq, payload) except Exception: return self.make_error_message(seq, get_exception_traceback_str()) def make_get_exception_details_message(self, py_db, seq, thread_id, topmost_frame): - """Returns exception details as XML """ + """Returns exception details as XML""" try: # If the debugger is not suspended, just return the thread and its id. cmd_text = ['') + cmd_text.append(">") cmd_text.append(thread_stack_str) break frame = frame.f_back else: - cmd_text.append('>') + cmd_text.append(">") finally: frame = None - cmd_text.append('') - return NetCommand(CMD_GET_EXCEPTION_DETAILS, seq, ''.join(cmd_text)) + cmd_text.append("") + return NetCommand(CMD_GET_EXCEPTION_DETAILS, seq, "".join(cmd_text)) except: return self.make_error_message(seq, get_exception_traceback_str()) @@ -445,8 +494,7 @@ def make_load_source_from_frame_id_message(self, seq, source): def make_show_console_message(self, py_db, thread_id, frame): try: frames_list = pydevd_frame_utils.create_frames_list_from_frame(frame) - thread_suspended_str, _thread_stack_str = self.make_thread_suspend_str( - py_db, thread_id, frames_list, CMD_SHOW_CONSOLE, '') + thread_suspended_str, _thread_stack_str = self.make_thread_suspend_str(py_db, thread_id, frames_list, CMD_SHOW_CONSOLE, "") return NetCommand(CMD_SHOW_CONSOLE, 0, thread_suspended_str) except: return self.make_error_message(0, get_exception_traceback_str()) @@ -459,7 +507,7 @@ def make_input_requested_message(self, started): def make_set_next_stmnt_status_message(self, seq, is_success, exception_msg): try: - message = str(is_success) + '\t' + exception_msg + message = str(is_success) + "\t" + exception_msg return NetCommand(CMD_SET_NEXT_STATEMENT, int(seq), message) except: return self.make_error_message(0, get_exception_traceback_str()) @@ -480,7 +528,7 @@ def make_skipped_step_in_because_of_filters(self, py_db, frame): return NULL_NET_COMMAND # Not a part of the xml protocol def make_evaluation_timeout_msg(self, py_db, expression, thread): - msg = '''pydevd: Evaluating: %s did not finish after %.2f seconds. + msg = """pydevd: Evaluating: %s did not finish after %.2f seconds. This may mean a number of things: - This evaluation is really slow and this is expected. In this case it's possible to silence this error by raising the timeout, setting the @@ -498,12 +546,12 @@ def make_evaluation_timeout_msg(self, py_db, expression, thread): environment variable to true so that a thread dump is shown along with this message and optionally, set the PYDEVD_INTERRUPT_THREAD_TIMEOUT to some value so that the debugger tries to interrupt the evaluation (if possible) when this happens. -''' % (expression, pydevd_constants.PYDEVD_WARN_EVALUATION_TIMEOUT) +""" % (expression, pydevd_constants.PYDEVD_WARN_EVALUATION_TIMEOUT) if pydevd_constants.PYDEVD_THREAD_DUMP_ON_WARN_EVALUATION_TIMEOUT: stream = StringIO() pydevd_utils.dump_threads(stream, show_pydevd_threads=False) - msg += '\n\n%s\n' % stream.getvalue() + msg += "\n\n%s\n" % stream.getvalue() return self.make_warning_message(msg) def make_exit_command(self, py_db): diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py index 0cd0d7615..71b526896 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_plugin_utils.py @@ -1,19 +1,20 @@ import types from _pydev_bundle import pydev_log -from _pydevd_bundle import pydevd_trace_api +from typing import Tuple, Literal try: from pydevd_plugins import django_debug except: django_debug = None - pydev_log.debug('Unable to load django_debug plugin') + pydev_log.debug("Unable to load django_debug plugin") try: from pydevd_plugins import jinja2_debug except: jinja2_debug = None - pydev_log.debug('Unable to load jinja2_debug plugin') + pydev_log.debug("Unable to load jinja2_debug plugin") + def load_plugins(): plugins = [] @@ -33,59 +34,175 @@ def bind_func_to_method(func, obj, method_name): class PluginManager(object): + EMPTY_SENTINEL = object() def __init__(self, main_debugger): self.plugins = load_plugins() + + # When some breakpoint is added for a given plugin it becomes active. self.active_plugins = [] + self.main_debugger = main_debugger - self.rebind_methods() def add_breakpoint(self, func_name, *args, **kwargs): - # add breakpoint for plugin and remember which plugin to use in tracing + # add breakpoint for plugin for plugin in self.plugins: if hasattr(plugin, func_name): func = getattr(plugin, func_name) - result = func(self, *args, **kwargs) + result = func(*args, **kwargs) if result: self.activate(plugin) - return result return None def activate(self, plugin): if plugin not in self.active_plugins: self.active_plugins.append(plugin) - self.rebind_methods() - - def rebind_methods(self): - if len(self.active_plugins) == 0: - self.bind_functions(pydevd_trace_api, getattr, pydevd_trace_api) - elif len(self.active_plugins) == 1: - self.bind_functions(pydevd_trace_api, getattr, self.active_plugins[0]) - else: - self.bind_functions(pydevd_trace_api, create_dispatch, self.active_plugins) - def bind_functions(self, interface, function_factory, arg): - for name in dir(interface): - func = function_factory(arg, name) - if type(func) == types.FunctionType: - bind_func_to_method(func, self, name) + # These are not a part of the API, rather, `add_breakpoint` should be used with `add_line_breakpoint` or `add_exception_breakpoint` + # which will call it for all plugins and then if it's valid it'll be activated. + # + # def add_line_breakpoint(self, py_db, type, canonical_normalized_filename, breakpoint_id, line, condition, expression, func_name, hit_condition=None, is_logpoint=False, add_breakpoint_result=None, on_changed_breakpoint_state=None): + # def add_exception_breakpoint(plugin, py_db, type, exception): + + def after_breakpoints_consolidated(self, py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): + for plugin in self.active_plugins: + plugin.after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints) + + def remove_exception_breakpoint(self, py_db, exception_type, exception): + """ + :param exception_type: 'django', 'jinja2' (can be extended) + """ + for plugin in self.active_plugins: + ret = plugin.remove_exception_breakpoint(py_db, exception_type, exception) + if ret: + return ret + return None -def create_dispatch(obj, name): - def dispatch(self, *args, **kwargs): - result = None - for p in self.active_plugins: - r = getattr(p, name)(self, *args, **kwargs) - if not result: - result = r - return result - return dispatch - + def remove_all_exception_breakpoints(self, py_db): + for plugin in self.active_plugins: + plugin.remove_all_exception_breakpoints(py_db) + + def get_breakpoints(self, py_db, breakpoint_type): + """ + :param breakpoint_type: 'django-line', 'jinja2-line' + """ + for plugin in self.active_plugins: + ret = plugin.get_breakpoints(py_db, breakpoint_type) + if ret: + return ret + + def can_skip(self, py_db, frame): + for plugin in self.active_plugins: + if not plugin.can_skip(py_db, frame): + return False + return True + + def required_events_breakpoint(self) -> Tuple[Literal["line", "call"], ...]: + ret = () + for plugin in self.active_plugins: + new = plugin.required_events_breakpoint() + if new: + ret += new + + return ret + + def required_events_stepping(self) -> Tuple[Literal["line", "call", "return"], ...]: + ret = () + for plugin in self.active_plugins: + new = plugin.required_events_stepping() + if new: + ret += new + + return ret + + def is_tracked_frame(self, frame) -> bool: + for plugin in self.active_plugins: + if plugin.is_tracked_frame(frame): + return True + return False + + def has_exception_breaks(self, py_db) -> bool: + for plugin in self.active_plugins: + if plugin.has_exception_breaks(py_db): + return True + return False + + def has_line_breaks(self, py_db) -> bool: + for plugin in self.active_plugins: + if plugin.has_line_breaks(py_db): + return True + return False + + def cmd_step_into(self, py_db, frame, event, info, thread, stop_info, stop: bool): + """ + :param stop_info: in/out information. If it should stop then it'll be + filled by the plugin. + :param stop: whether the stop has already been flagged for this frame. + :returns: + tuple(stop, plugin_stop) + """ + plugin_stop = False + for plugin in self.active_plugins: + stop, plugin_stop = plugin.cmd_step_into(py_db, frame, event, info, thread, stop_info, stop) + if plugin_stop: + return stop, plugin_stop + return stop, plugin_stop + + def cmd_step_over(self, py_db, frame, event, info, thread, stop_info, stop): + plugin_stop = False + for plugin in self.active_plugins: + stop, plugin_stop = plugin.cmd_step_over(py_db, frame, event, info, thread, stop_info, stop) + if plugin_stop: + return stop, plugin_stop + return stop, plugin_stop + + def stop(self, py_db, frame, event, thread, stop_info, arg, step_cmd): + """ + The way this works is that the `cmd_step_into` or `cmd_step_over` + is called which then fills the `stop_info` and then this method + is called to do the actual stop. + """ + for plugin in self.active_plugins: + stopped = plugin.stop(py_db, frame, event, thread, stop_info, arg, step_cmd) + if stopped: + return stopped + return False + + def get_breakpoint(self, py_db, frame, event, info): + for plugin in self.active_plugins: + ret = plugin.get_breakpoint(py_db, frame, event, info) + if ret: + return ret + return None + def suspend(self, py_db, thread, frame, bp_type): + """ + :param bp_type: 'django' or 'jinja2' + :return: + The frame for the suspend or None if it should not be suspended. + """ + for plugin in self.active_plugins: + ret = plugin.suspend(py_db, thread, frame, bp_type) + if ret is not None: + return ret + return None + def exception_break(self, py_db, frame, thread, arg): + for plugin in self.active_plugins: + ret = plugin.exception_break(py_db, frame, thread, arg) + if ret is not None: + return ret + return None + def change_variable(self, frame, attr, expression): + for plugin in self.active_plugins: + ret = plugin.change_variable(frame, attr, expression, self.EMPTY_SENTINEL) + if ret is not self.EMPTY_SENTINEL: + return ret + return self.EMPTY_SENTINEL diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py index 046048411..92902ed2f 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command.py @@ -9,8 +9,12 @@ from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info from _pydevd_bundle.pydevd_breakpoints import get_exception_class from _pydevd_bundle.pydevd_comm import ( - InternalEvaluateConsoleExpression, InternalConsoleGetCompletions, InternalRunCustomOperation, - internal_get_next_statement_targets, internal_get_smart_step_into_variants) + InternalEvaluateConsoleExpression, + InternalConsoleGetCompletions, + InternalRunCustomOperation, + internal_get_next_statement_targets, + internal_get_smart_step_into_variants, +) from _pydevd_bundle.pydevd_constants import NEXT_VALUE_SEPARATOR, IS_WINDOWS, NULL from _pydevd_bundle.pydevd_comm_constants import ID_TO_MEANING, CMD_EXEC_EXPRESSION, CMD_AUTHENTICATE from _pydevd_bundle.pydevd_api import PyDevdAPI @@ -21,22 +25,21 @@ class _PyDevCommandProcessor(object): - def __init__(self): self.api = PyDevdAPI() def process_net_command(self, py_db, cmd_id, seq, text): - '''Processes a command received from the Java side + """Processes a command received from the Java side @param cmd_id: the id of the command @param seq: the sequence of the command @param text: the text received in the command - ''' + """ # We can only proceed if the client is already authenticated or if it's the # command to authenticate. if cmd_id != CMD_AUTHENTICATE and not py_db.authentication.is_authenticated(): - cmd = py_db.cmd_factory.make_error_message(seq, 'Client not authenticated.') + cmd = py_db.cmd_factory.make_error_message(seq, "Client not authenticated.") py_db.writer.add_command(cmd) return @@ -54,7 +57,7 @@ def process_net_command(self, py_db, cmd_id, seq, text): return lock = py_db._main_lock - if method_name == 'cmd_thread_dump_to_stderr': + if method_name == "cmd_thread_dump_to_stderr": # We can skip the main debugger locks for cases where we know it's not needed. lock = NULL @@ -71,9 +74,8 @@ def process_net_command(self, py_db, cmd_id, seq, text): traceback.print_exc(file=stream) cmd = py_db.cmd_factory.make_error_message( seq, - "Unexpected exception in process_net_command.\nInitial params: %s. Exception: %s" % ( - ((cmd_id, seq, text), stream.getvalue()) - ) + "Unexpected exception in process_net_command.\nInitial params: %s. Exception: %s" + % (((cmd_id, seq, text), stream.getvalue())), ) if cmd is not None: py_db.writer.add_command(cmd) @@ -84,7 +86,7 @@ def cmd_authenticate(self, py_db, cmd_id, seq, text): if py_db.authentication.is_authenticated(): return NetCommand(cmd_id, seq, py_db.authentication.client_access_token) - return py_db.cmd_factory.make_error_message(seq, 'Client not authenticated.') + return py_db.cmd_factory.make_error_message(seq, "Client not authenticated.") def cmd_run(self, py_db, cmd_id, seq, text): return self.api.run(py_db) @@ -95,19 +97,19 @@ def cmd_list_threads(self, py_db, cmd_id, seq, text): def cmd_get_completions(self, py_db, cmd_id, seq, text): # we received some command to get a variable # the text is: thread_id\tframe_id\tactivation token - thread_id, frame_id, _scope, act_tok = text.split('\t', 3) + thread_id, frame_id, _scope, act_tok = text.split("\t", 3) return self.api.request_completions(py_db, seq, thread_id, frame_id, act_tok) def cmd_get_thread_stack(self, py_db, cmd_id, seq, text): # Receives a thread_id and a given timeout, which is the time we should # wait to the provide the stack if a given thread is still not suspended. - if '\t' in text: - thread_id, timeout = text.split('\t') + if "\t" in text: + thread_id, timeout = text.split("\t") timeout = float(timeout) else: thread_id = text - timeout = .5 # Default timeout is .5 seconds + timeout = 0.5 # Default timeout is .5 seconds return self.api.request_stack(py_db, seq, thread_id, fmt={}, timeout=timeout) @@ -121,14 +123,14 @@ def cmd_version(self, py_db, cmd_id, seq, text): # Default based on server process (although ideally the IDE should # provide it). if IS_WINDOWS: - ide_os = 'WINDOWS' + ide_os = "WINDOWS" else: - ide_os = 'UNIX' + ide_os = "UNIX" # Breakpoints can be grouped by 'LINE' or by 'ID'. - breakpoints_by = 'LINE' + breakpoints_by = "LINE" - splitted = text.split('\t') + splitted = text.split("\t") if len(splitted) == 1: _local_version = splitted @@ -159,23 +161,23 @@ def _cmd_step(self, py_db, cmd_id, seq, text): cmd_step_return_my_code = _cmd_step def _cmd_set_next(self, py_db, cmd_id, seq, text): - thread_id, line, func_name = text.split('\t', 2) + thread_id, line, func_name = text.split("\t", 2) return self.api.request_set_next(py_db, seq, thread_id, cmd_id, None, line, func_name) cmd_run_to_line = _cmd_set_next cmd_set_next_statement = _cmd_set_next def cmd_smart_step_into(self, py_db, cmd_id, seq, text): - thread_id, line_or_bytecode_offset, func_name = text.split('\t', 2) - if line_or_bytecode_offset.startswith('offset='): + thread_id, line_or_bytecode_offset, func_name = text.split("\t", 2) + if line_or_bytecode_offset.startswith("offset="): # In this case we request the smart step into to stop given the parent frame # and the location of the parent frame bytecode offset and not just the func_name # (this implies that `CMD_GET_SMART_STEP_INTO_VARIANTS` was previously used # to know what are the valid stop points). - temp = line_or_bytecode_offset[len('offset='):] - if ';' in temp: - offset, child_offset = temp.split(';') + temp = line_or_bytecode_offset[len("offset=") :] + if ";" in temp: + offset, child_offset = temp.split(";") offset = int(offset) child_offset = int(child_offset) else: @@ -188,29 +190,29 @@ def cmd_smart_step_into(self, py_db, cmd_id, seq, text): def cmd_reload_code(self, py_db, cmd_id, seq, text): text = text.strip() - if '\t' not in text: + if "\t" not in text: module_name = text.strip() filename = None else: - module_name, filename = text.split('\t', 1) + module_name, filename = text.split("\t", 1) self.api.request_reload_code(py_db, seq, module_name, filename) def cmd_change_variable(self, py_db, cmd_id, seq, text): # the text is: thread\tstackframe\tFRAME|GLOBAL\tattribute_to_change\tvalue_to_change - thread_id, frame_id, scope, attr_and_value = text.split('\t', 3) + thread_id, frame_id, scope, attr_and_value = text.split("\t", 3) - tab_index = attr_and_value.rindex('\t') - attr = attr_and_value[0:tab_index].replace('\t', '.') - value = attr_and_value[tab_index + 1:] + tab_index = attr_and_value.rindex("\t") + attr = attr_and_value[0:tab_index].replace("\t", ".") + value = attr_and_value[tab_index + 1 :] self.api.request_change_variable(py_db, seq, thread_id, frame_id, scope, attr, value) def cmd_get_variable(self, py_db, cmd_id, seq, text): # we received some command to get a variable # the text is: thread_id\tframe_id\tFRAME|GLOBAL\tattributes* - thread_id, frame_id, scopeattrs = text.split('\t', 2) + thread_id, frame_id, scopeattrs = text.split("\t", 2) - if scopeattrs.find('\t') != -1: # there are attributes beyond scope - scope, attrs = scopeattrs.split('\t', 1) + if scopeattrs.find("\t") != -1: # there are attributes beyond scope + scope, attrs = scopeattrs.split("\t", 1) else: scope, attrs = (scopeattrs, None) @@ -220,84 +222,91 @@ def cmd_get_array(self, py_db, cmd_id, seq, text): # Note: untested and unused in pydev # we received some command to get an array variable # the text is: thread_id\tframe_id\tFRAME|GLOBAL\tname\ttemp\troffs\tcoffs\trows\tcols\tformat - roffset, coffset, rows, cols, format, thread_id, frame_id, scopeattrs = text.split('\t', 7) + roffset, coffset, rows, cols, format, thread_id, frame_id, scopeattrs = text.split("\t", 7) - if scopeattrs.find('\t') != -1: # there are attributes beyond scope - scope, attrs = scopeattrs.split('\t', 1) + if scopeattrs.find("\t") != -1: # there are attributes beyond scope + scope, attrs = scopeattrs.split("\t", 1) else: scope, attrs = (scopeattrs, None) self.api.request_get_array(py_db, seq, roffset, coffset, rows, cols, format, thread_id, frame_id, scope, attrs) def cmd_show_return_values(self, py_db, cmd_id, seq, text): - show_return_values = text.split('\t')[1] + show_return_values = text.split("\t")[1] self.api.set_show_return_values(py_db, int(show_return_values) == 1) def cmd_load_full_value(self, py_db, cmd_id, seq, text): # Note: untested and unused in pydev - thread_id, frame_id, scopeattrs = text.split('\t', 2) + thread_id, frame_id, scopeattrs = text.split("\t", 2) vars = scopeattrs.split(NEXT_VALUE_SEPARATOR) self.api.request_load_full_value(py_db, seq, thread_id, frame_id, vars) def cmd_get_description(self, py_db, cmd_id, seq, text): # Note: untested and unused in pydev - thread_id, frame_id, expression = text.split('\t', 2) + thread_id, frame_id, expression = text.split("\t", 2) self.api.request_get_description(py_db, seq, thread_id, frame_id, expression) def cmd_get_frame(self, py_db, cmd_id, seq, text): - thread_id, frame_id, scope = text.split('\t', 2) + thread_id, frame_id, scope = text.split("\t", 2) self.api.request_get_frame(py_db, seq, thread_id, frame_id) def cmd_set_break(self, py_db, cmd_id, seq, text): # func name: 'None': match anything. Empty: match global, specified: only method context. # command to add some breakpoint. # text is filename\tline. Add to breakpoints dictionary - suspend_policy = u"NONE" # Can be 'NONE' or 'ALL' + suspend_policy = "NONE" # Can be 'NONE' or 'ALL' is_logpoint = False hit_condition = None if py_db._set_breakpoints_with_id: try: try: - breakpoint_id, btype, filename, line, func_name, condition, expression, hit_condition, is_logpoint, suspend_policy = text.split(u'\t', 9) + ( + breakpoint_id, + btype, + filename, + line, + func_name, + condition, + expression, + hit_condition, + is_logpoint, + suspend_policy, + ) = text.split("\t", 9) except ValueError: # not enough values to unpack # No suspend_policy passed (use default). - breakpoint_id, btype, filename, line, func_name, condition, expression, hit_condition, is_logpoint = text.split(u'\t', 8) - is_logpoint = is_logpoint == u'True' + breakpoint_id, btype, filename, line, func_name, condition, expression, hit_condition, is_logpoint = text.split("\t", 8) + is_logpoint = is_logpoint == "True" except ValueError: # not enough values to unpack - breakpoint_id, btype, filename, line, func_name, condition, expression = text.split(u'\t', 6) + breakpoint_id, btype, filename, line, func_name, condition, expression = text.split("\t", 6) breakpoint_id = int(breakpoint_id) line = int(line) # We must restore new lines and tabs as done in # AbstractDebugTarget.breakpointAdded - condition = condition.replace(u"@_@NEW_LINE_CHAR@_@", u'\n').\ - replace(u"@_@TAB_CHAR@_@", u'\t').strip() + condition = condition.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() - expression = expression.replace(u"@_@NEW_LINE_CHAR@_@", u'\n').\ - replace(u"@_@TAB_CHAR@_@", u'\t').strip() + expression = expression.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() else: # Note: this else should be removed after PyCharm migrates to setting # breakpoints by id (and ideally also provides func_name). - btype, filename, line, func_name, suspend_policy, condition, expression = text.split(u'\t', 6) + btype, filename, line, func_name, suspend_policy, condition, expression = text.split("\t", 6) # If we don't have an id given for each breakpoint, consider # the id to be the line. breakpoint_id = line = int(line) - condition = condition.replace(u"@_@NEW_LINE_CHAR@_@", u'\n'). \ - replace(u"@_@TAB_CHAR@_@", u'\t').strip() + condition = condition.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() - expression = expression.replace(u"@_@NEW_LINE_CHAR@_@", u'\n'). \ - replace(u"@_@TAB_CHAR@_@", u'\t').strip() + expression = expression.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() - if condition is not None and (len(condition) <= 0 or condition == u"None"): + if condition is not None and (len(condition) <= 0 or condition == "None"): condition = None - if expression is not None and (len(expression) <= 0 or expression == u"None"): + if expression is not None and (len(expression) <= 0 or expression == "None"): expression = None - if hit_condition is not None and (len(hit_condition) <= 0 or hit_condition == u"None"): + if hit_condition is not None and (len(hit_condition) <= 0 or hit_condition == "None"): hit_condition = None def on_changed_breakpoint_state(breakpoint_id, add_breakpoint_result): @@ -305,49 +314,73 @@ def on_changed_breakpoint_state(breakpoint_id, add_breakpoint_result): translated_line = add_breakpoint_result.translated_line translated_filename = add_breakpoint_result.translated_filename - msg = '' + msg = "" if error_code: - if error_code == self.api.ADD_BREAKPOINT_FILE_NOT_FOUND: - msg = 'pydev debugger: Trying to add breakpoint to file that does not exist: %s (will have no effect).\n' % (translated_filename,) + msg = "pydev debugger: Trying to add breakpoint to file that does not exist: %s (will have no effect).\n" % ( + translated_filename, + ) elif error_code == self.api.ADD_BREAKPOINT_FILE_EXCLUDED_BY_FILTERS: - msg = 'pydev debugger: Trying to add breakpoint to file that is excluded by filters: %s (will have no effect).\n' % (translated_filename,) + msg = "pydev debugger: Trying to add breakpoint to file that is excluded by filters: %s (will have no effect).\n" % ( + translated_filename, + ) elif error_code == self.api.ADD_BREAKPOINT_LAZY_VALIDATION: - msg = '' # Ignore this here (if/when loaded, it'll call on_changed_breakpoint_state again accordingly). + msg = "" # Ignore this here (if/when loaded, it'll call on_changed_breakpoint_state again accordingly). elif error_code == self.api.ADD_BREAKPOINT_INVALID_LINE: - msg = 'pydev debugger: Trying to add breakpoint to line (%s) that is not valid in: %s.\n' % (translated_line, translated_filename,) + msg = "pydev debugger: Trying to add breakpoint to line (%s) that is not valid in: %s.\n" % ( + translated_line, + translated_filename, + ) else: # Shouldn't get here. - msg = 'pydev debugger: Breakpoint not validated (reason unknown -- please report as error): %s (%s).\n' % (translated_filename, translated_line) + msg = "pydev debugger: Breakpoint not validated (reason unknown -- please report as error): %s (%s).\n" % ( + translated_filename, + translated_line, + ) else: if add_breakpoint_result.original_line != translated_line: - msg = 'pydev debugger (info): Breakpoint in line: %s moved to line: %s (in %s).\n' % (add_breakpoint_result.original_line, translated_line, translated_filename) + msg = "pydev debugger (info): Breakpoint in line: %s moved to line: %s (in %s).\n" % ( + add_breakpoint_result.original_line, + translated_line, + translated_filename, + ) if msg: py_db.writer.add_command(py_db.cmd_factory.make_warning_message(msg)) result = self.api.add_breakpoint( - py_db, self.api.filename_to_str(filename), btype, breakpoint_id, line, condition, func_name, - expression, suspend_policy, hit_condition, is_logpoint, on_changed_breakpoint_state=on_changed_breakpoint_state) + py_db, + self.api.filename_to_str(filename), + btype, + breakpoint_id, + line, + condition, + func_name, + expression, + suspend_policy, + hit_condition, + is_logpoint, + on_changed_breakpoint_state=on_changed_breakpoint_state, + ) on_changed_breakpoint_state(breakpoint_id, result) def cmd_remove_break(self, py_db, cmd_id, seq, text): # command to remove some breakpoint # text is type\file\tid. Remove from breakpoints dictionary - breakpoint_type, filename, breakpoint_id = text.split('\t', 2) + breakpoint_type, filename, breakpoint_id = text.split("\t", 2) filename = self.api.filename_to_str(filename) try: breakpoint_id = int(breakpoint_id) except ValueError: - pydev_log.critical('Error removing breakpoint. Expected breakpoint_id to be an int. Found: %s', breakpoint_id) + pydev_log.critical("Error removing breakpoint. Expected breakpoint_id to be an int. Found: %s", breakpoint_id) else: self.api.remove_breakpoint(py_db, filename, breakpoint_type, breakpoint_id) @@ -357,14 +390,13 @@ def _cmd_exec_or_evaluate_expression(self, py_db, cmd_id, seq, text): # text is: thread\tstackframe\tLOCAL\texpression attr_to_set_result = "" try: - thread_id, frame_id, scope, expression, trim, attr_to_set_result = text.split('\t', 5) + thread_id, frame_id, scope, expression, trim, attr_to_set_result = text.split("\t", 5) except ValueError: - thread_id, frame_id, scope, expression, trim = text.split('\t', 4) + thread_id, frame_id, scope, expression, trim = text.split("\t", 4) is_exec = cmd_id == CMD_EXEC_EXPRESSION trim_if_too_big = int(trim) == 1 - self.api.request_exec_or_evaluate( - py_db, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result) + self.api.request_exec_or_evaluate(py_db, seq, thread_id, frame_id, expression, is_exec, trim_if_too_big, attr_to_set_result) cmd_evaluate_expression = _cmd_exec_or_evaluate_expression cmd_exec_expression = _cmd_exec_or_evaluate_expression @@ -373,11 +405,11 @@ def cmd_console_exec(self, py_db, cmd_id, seq, text): # command to exec expression in console, in case expression is only partially valid 'False' is returned # text is: thread\tstackframe\tLOCAL\texpression - thread_id, frame_id, scope, expression = text.split('\t', 3) + thread_id, frame_id, scope, expression = text.split("\t", 3) self.api.request_console_exec(py_db, seq, thread_id, frame_id, expression) def cmd_set_path_mapping_json(self, py_db, cmd_id, seq, text): - ''' + """ :param text: Json text. Something as: @@ -391,21 +423,21 @@ def cmd_set_path_mapping_json(self, py_db, cmd_id, seq, text): "debug": true, "force": false } - ''' + """ as_json = json.loads(text) - force = as_json.get('force', False) + force = as_json.get("force", False) path_mappings = [] - for pathMapping in as_json.get('pathMappings', []): - localRoot = pathMapping.get('localRoot', '') - remoteRoot = pathMapping.get('remoteRoot', '') - if (localRoot != '') and (remoteRoot != ''): + for pathMapping in as_json.get("pathMappings", []): + localRoot = pathMapping.get("localRoot", "") + remoteRoot = pathMapping.get("remoteRoot", "") + if (localRoot != "") and (remoteRoot != ""): path_mappings.append((localRoot, remoteRoot)) if bool(path_mappings) or force: pydevd_file_utils.setup_client_server_paths(path_mappings) - debug = as_json.get('debug', False) + debug = as_json.get("debug", False) if debug or force: pydevd_file_utils.DEBUG_CLIENT_SERVER_TRANSLATION = debug @@ -423,13 +455,15 @@ def cmd_set_py_exception_json(self, py_db, cmd_id, seq, text): py_db.break_on_user_uncaught_exceptions = {} as_json = json.loads(text) - break_on_uncaught = as_json.get('break_on_uncaught', False) - break_on_caught = as_json.get('break_on_caught', False) - break_on_user_caught = as_json.get('break_on_user_caught', False) - py_db.skip_on_exceptions_thrown_in_same_context = as_json.get('skip_on_exceptions_thrown_in_same_context', False) - py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception = as_json.get('ignore_exceptions_thrown_in_lines_with_ignore_exception', False) - ignore_libraries = as_json.get('ignore_libraries', False) - exception_types = as_json.get('exception_types', []) + break_on_uncaught = as_json.get("break_on_uncaught", False) + break_on_caught = as_json.get("break_on_caught", False) + break_on_user_caught = as_json.get("break_on_user_caught", False) + py_db.skip_on_exceptions_thrown_in_same_context = as_json.get("skip_on_exceptions_thrown_in_same_context", False) + py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception = as_json.get( + "ignore_exceptions_thrown_in_lines_with_ignore_exception", False + ) + ignore_libraries = as_json.get("ignore_libraries", False) + exception_types = as_json.get("exception_types", []) for exception_type in exception_types: if not exception_type: @@ -453,32 +487,32 @@ def cmd_set_py_exception_json(self, py_db, cmd_id, seq, text): def cmd_set_py_exception(self, py_db, cmd_id, seq, text): # DEPRECATED. Use cmd_set_py_exception_json instead. try: - splitted = text.split(';') + splitted = text.split(";") py_db.break_on_uncaught_exceptions = {} py_db.break_on_caught_exceptions = {} py_db.break_on_user_uncaught_exceptions = {} if len(splitted) >= 5: - if splitted[0] == 'true': + if splitted[0] == "true": break_on_uncaught = True else: break_on_uncaught = False - if splitted[1] == 'true': + if splitted[1] == "true": break_on_caught = True else: break_on_caught = False - if splitted[2] == 'true': + if splitted[2] == "true": py_db.skip_on_exceptions_thrown_in_same_context = True else: py_db.skip_on_exceptions_thrown_in_same_context = False - if splitted[3] == 'true': + if splitted[3] == "true": py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception = True else: py_db.ignore_exceptions_thrown_in_lines_with_ignore_exception = False - if splitted[4] == 'true': + if splitted[4] == "true": ignore_libraries = True else: ignore_libraries = False @@ -520,24 +554,24 @@ def cmd_set_property_trace(self, py_db, cmd_id, seq, text): # Command which receives whether to trace property getter/setter/deleter # text is feature_state(true/false);disable_getter/disable_setter/disable_deleter if text: - splitted = text.split(';') + splitted = text.split(";") if len(splitted) >= 3: - if not py_db.disable_property_trace and splitted[0] == 'true': + if not py_db.disable_property_trace and splitted[0] == "true": # Replacing property by custom property only when the debugger starts pydevd_traceproperty.replace_builtin_property() py_db.disable_property_trace = True # Enable/Disable tracing of the property getter - if splitted[1] == 'true': + if splitted[1] == "true": py_db.disable_property_getter_trace = True else: py_db.disable_property_getter_trace = False # Enable/Disable tracing of the property setter - if splitted[2] == 'true': + if splitted[2] == "true": py_db.disable_property_setter_trace = True else: py_db.disable_property_setter_trace = False # Enable/Disable tracing of the property deleter - if splitted[3] == 'true': + if splitted[3] == "true": py_db.disable_property_deleter_trace = True else: py_db.disable_property_deleter_trace = False @@ -565,32 +599,42 @@ def cmd_add_exception_break(self, py_db, cmd_id, seq, text): condition = "" expression = "" - if text.find('\t') != -1: + if text.find("\t") != -1: try: - exception, condition, expression, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries = text.split('\t', 5) + ( + exception, + condition, + expression, + notify_on_handled_exceptions, + notify_on_unhandled_exceptions, + ignore_libraries, + ) = text.split("\t", 5) except: - exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries = text.split('\t', 3) + exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries = text.split("\t", 3) else: exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries = text, 0, 0, 0 - condition = condition.replace("@_@NEW_LINE_CHAR@_@", '\n').replace("@_@TAB_CHAR@_@", '\t').strip() + condition = condition.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() if condition is not None and (len(condition) == 0 or condition == "None"): condition = None - expression = expression.replace("@_@NEW_LINE_CHAR@_@", '\n').replace("@_@TAB_CHAR@_@", '\t').strip() + expression = expression.replace("@_@NEW_LINE_CHAR@_@", "\n").replace("@_@TAB_CHAR@_@", "\t").strip() if expression is not None and (len(expression) == 0 or expression == "None"): expression = None - if exception.find('-') != -1: - breakpoint_type, exception = exception.split('-') + if exception.find("-") != -1: + breakpoint_type, exception = exception.split("-") else: - breakpoint_type = 'python' + breakpoint_type = "python" - if breakpoint_type == 'python': + if breakpoint_type == "python": self.api.add_python_exception_breakpoint( - py_db, exception, condition, expression, + py_db, + exception, + condition, + expression, notify_on_handled_exceptions=int(notify_on_handled_exceptions) > 0, notify_on_unhandled_exceptions=int(notify_on_unhandled_exceptions) == 1, notify_on_user_unhandled_exceptions=0, # TODO (not currently supported in this API). @@ -602,41 +646,39 @@ def cmd_add_exception_break(self, py_db, cmd_id, seq, text): def cmd_remove_exception_break(self, py_db, cmd_id, seq, text): exception = text - if exception.find('-') != -1: - exception_type, exception = exception.split('-') + if exception.find("-") != -1: + exception_type, exception = exception.split("-") else: - exception_type = 'python' + exception_type = "python" - if exception_type == 'python': + if exception_type == "python": self.api.remove_python_exception_breakpoint(py_db, exception) else: self.api.remove_plugins_exception_breakpoint(py_db, exception_type, exception) def cmd_add_django_exception_break(self, py_db, cmd_id, seq, text): - self.api.add_plugins_exception_breakpoint(py_db, breakpoint_type='django', exception=text) + self.api.add_plugins_exception_breakpoint(py_db, breakpoint_type="django", exception=text) def cmd_remove_django_exception_break(self, py_db, cmd_id, seq, text): - self.api.remove_plugins_exception_breakpoint(py_db, exception_type='django', exception=text) + self.api.remove_plugins_exception_breakpoint(py_db, exception_type="django", exception=text) def cmd_evaluate_console_expression(self, py_db, cmd_id, seq, text): # Command which takes care for the debug console communication if text != "": - thread_id, frame_id, console_command = text.split('\t', 2) - console_command, line = console_command.split('\t') + thread_id, frame_id, console_command = text.split("\t", 2) + console_command, line = console_command.split("\t") - if console_command == 'EVALUATE': - int_cmd = InternalEvaluateConsoleExpression( - seq, thread_id, frame_id, line, buffer_output=True) + if console_command == "EVALUATE": + int_cmd = InternalEvaluateConsoleExpression(seq, thread_id, frame_id, line, buffer_output=True) - elif console_command == 'EVALUATE_UNBUFFERED': - int_cmd = InternalEvaluateConsoleExpression( - seq, thread_id, frame_id, line, buffer_output=False) + elif console_command == "EVALUATE_UNBUFFERED": + int_cmd = InternalEvaluateConsoleExpression(seq, thread_id, frame_id, line, buffer_output=False) - elif console_command == 'GET_COMPLETIONS': + elif console_command == "GET_COMPLETIONS": int_cmd = InternalConsoleGetCompletions(seq, thread_id, frame_id, line) else: - raise ValueError('Unrecognized command: %s' % (console_command,)) + raise ValueError("Unrecognized command: %s" % (console_command,)) py_db.post_internal_command(int_cmd, thread_id) @@ -644,36 +686,35 @@ def cmd_run_custom_operation(self, py_db, cmd_id, seq, text): # Command which runs a custom operation if text != "": try: - location, custom = text.split('||', 1) + location, custom = text.split("||", 1) except: - sys.stderr.write('Custom operation now needs a || separator. Found: %s\n' % (text,)) + sys.stderr.write("Custom operation now needs a || separator. Found: %s\n" % (text,)) raise - thread_id, frame_id, scopeattrs = location.split('\t', 2) + thread_id, frame_id, scopeattrs = location.split("\t", 2) - if scopeattrs.find('\t') != -1: # there are attributes beyond scope - scope, attrs = scopeattrs.split('\t', 1) + if scopeattrs.find("\t") != -1: # there are attributes beyond scope + scope, attrs = scopeattrs.split("\t", 1) else: scope, attrs = (scopeattrs, None) # : style: EXECFILE or EXEC # : encoded_code_or_file: file to execute or code # : fname: name of function to be executed in the resulting namespace - style, encoded_code_or_file, fnname = custom.split('\t', 3) - int_cmd = InternalRunCustomOperation(seq, thread_id, frame_id, scope, attrs, - style, encoded_code_or_file, fnname) + style, encoded_code_or_file, fnname = custom.split("\t", 3) + int_cmd = InternalRunCustomOperation(seq, thread_id, frame_id, scope, attrs, style, encoded_code_or_file, fnname) py_db.post_internal_command(int_cmd, thread_id) def cmd_ignore_thrown_exception_at(self, py_db, cmd_id, seq, text): if text: - replace = 'REPLACE:' # Not all 3.x versions support u'REPLACE:', so, doing workaround. + replace = "REPLACE:" # Not all 3.x versions support u'REPLACE:', so, doing workaround. if text.startswith(replace): text = text[8:] py_db.filename_to_lines_where_exceptions_are_ignored.clear() if text: - for line in text.split('||'): # Can be bulk-created (one in each line) - original_filename, line_number = line.split('|') + for line in text.split("||"): # Can be bulk-created (one in each line) + original_filename, line_number = line.split("|") original_filename = self.api.filename_to_server(original_filename) canonical_normalized_filename = pydevd_file_utils.canonical_normalized_path(original_filename) @@ -685,39 +726,48 @@ def cmd_ignore_thrown_exception_at(self, py_db, cmd_id, seq, text): lines_ignored = py_db.filename_to_lines_where_exceptions_are_ignored[canonical_normalized_filename] = {} lines_ignored[int(line_number)] = 1 else: - sys.stderr.write('pydev debugger: warning: trying to ignore exception thrown'\ - ' on file that does not exist: %s (will have no effect)\n' % (absolute_filename,)) + sys.stderr.write( + "pydev debugger: warning: trying to ignore exception thrown" + " on file that does not exist: %s (will have no effect)\n" % (absolute_filename,) + ) def cmd_enable_dont_trace(self, py_db, cmd_id, seq, text): if text: - true_str = 'true' # Not all 3.x versions support u'str', so, doing workaround. + true_str = "true" # Not all 3.x versions support u'str', so, doing workaround. mode = text.strip() == true_str pydevd_dont_trace.trace_filter(mode) def cmd_redirect_output(self, py_db, cmd_id, seq, text): if text: - py_db.enable_output_redirection('STDOUT' in text, 'STDERR' in text) + py_db.enable_output_redirection("STDOUT" in text, "STDERR" in text) def cmd_get_next_statement_targets(self, py_db, cmd_id, seq, text): - thread_id, frame_id = text.split('\t', 1) + thread_id, frame_id = text.split("\t", 1) - py_db.post_method_as_internal_command( - thread_id, internal_get_next_statement_targets, seq, thread_id, frame_id) + py_db.post_method_as_internal_command(thread_id, internal_get_next_statement_targets, seq, thread_id, frame_id) def cmd_get_smart_step_into_variants(self, py_db, cmd_id, seq, text): - thread_id, frame_id, start_line, end_line = text.split('\t', 3) + thread_id, frame_id, start_line, end_line = text.split("\t", 3) py_db.post_method_as_internal_command( - thread_id, internal_get_smart_step_into_variants, seq, thread_id, frame_id, start_line, end_line, set_additional_thread_info=set_additional_thread_info) + thread_id, + internal_get_smart_step_into_variants, + seq, + thread_id, + frame_id, + start_line, + end_line, + set_additional_thread_info=set_additional_thread_info, + ) def cmd_set_project_roots(self, py_db, cmd_id, seq, text): - self.api.set_project_roots(py_db, text.split(u'\t')) + self.api.set_project_roots(py_db, text.split("\t")) def cmd_thread_dump_to_stderr(self, py_db, cmd_id, seq, text): pydevd_utils.dump_threads() def cmd_stop_on_start(self, py_db, cmd_id, seq, text): - if text.strip() in ('True', 'true', '1'): + if text.strip() in ("True", "true", "1"): self.api.stop_on_entry() def cmd_pydevd_json_config(self, py_db, cmd_id, seq, text): @@ -728,22 +778,20 @@ def cmd_pydevd_json_config(self, py_db, cmd_id, seq, text): # 'multi_threads_single_notification': bool, # } msg = json.loads(text.strip()) - if 'skip_suspend_on_breakpoint_exception' in msg: - py_db.skip_suspend_on_breakpoint_exception = tuple( - get_exception_class(x) for x in msg['skip_suspend_on_breakpoint_exception']) + if "skip_suspend_on_breakpoint_exception" in msg: + py_db.skip_suspend_on_breakpoint_exception = tuple(get_exception_class(x) for x in msg["skip_suspend_on_breakpoint_exception"]) - if 'skip_print_breakpoint_exception' in msg: - py_db.skip_print_breakpoint_exception = tuple( - get_exception_class(x) for x in msg['skip_print_breakpoint_exception']) + if "skip_print_breakpoint_exception" in msg: + py_db.skip_print_breakpoint_exception = tuple(get_exception_class(x) for x in msg["skip_print_breakpoint_exception"]) - if 'multi_threads_single_notification' in msg: - py_db.multi_threads_single_notification = msg['multi_threads_single_notification'] + if "multi_threads_single_notification" in msg: + py_db.multi_threads_single_notification = msg["multi_threads_single_notification"] def cmd_get_exception_details(self, py_db, cmd_id, seq, text): thread_id = text t = pydevd_find_thread_by_id(thread_id) frame = None - if t is not None and not getattr(t, 'pydev_do_not_trace', None): + if t is not None and not getattr(t, "pydev_do_not_trace", None): additional_info = set_additional_thread_info(t) frame = additional_info.get_topmost_frame(t) try: @@ -755,4 +803,3 @@ def cmd_get_exception_details(self, py_db, cmd_id, seq, text): process_net_command = _PyDevCommandProcessor().process_net_command - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py index 42eb59914..9b51fcf9e 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_process_net_command_json.py @@ -10,26 +10,50 @@ from _pydev_bundle import pydev_log from _pydevd_bundle._debug_adapter import pydevd_base_schema, pydevd_schema from _pydevd_bundle._debug_adapter.pydevd_schema import ( - CompletionsResponseBody, EvaluateResponseBody, ExceptionOptions, - GotoTargetsResponseBody, ModulesResponseBody, ProcessEventBody, - ProcessEvent, Scope, ScopesResponseBody, SetExpressionResponseBody, - SetVariableResponseBody, SourceBreakpoint, SourceResponseBody, - VariablesResponseBody, SetBreakpointsResponseBody, Response, - Capabilities, PydevdAuthorizeRequest, Request, - StepInTargetsResponseBody, SetFunctionBreakpointsResponseBody, BreakpointEvent, - BreakpointEventBody, InitializedEvent) + CompletionsResponseBody, + EvaluateResponseBody, + ExceptionOptions, + GotoTargetsResponseBody, + ModulesResponseBody, + ProcessEventBody, + ProcessEvent, + Scope, + ScopesResponseBody, + SetExpressionResponseBody, + SetVariableResponseBody, + SourceBreakpoint, + SourceResponseBody, + VariablesResponseBody, + SetBreakpointsResponseBody, + Response, + Capabilities, + PydevdAuthorizeRequest, + Request, + StepInTargetsResponseBody, + SetFunctionBreakpointsResponseBody, + BreakpointEvent, + BreakpointEventBody, + InitializedEvent, +) from _pydevd_bundle.pydevd_api import PyDevdAPI from _pydevd_bundle.pydevd_breakpoints import get_exception_class, FunctionBreakpoint from _pydevd_bundle.pydevd_comm_constants import ( - CMD_PROCESS_EVENT, CMD_RETURN, CMD_SET_NEXT_STATEMENT, CMD_STEP_INTO, - CMD_STEP_INTO_MY_CODE, CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, file_system_encoding, - CMD_STEP_RETURN_MY_CODE, CMD_STEP_RETURN) + CMD_PROCESS_EVENT, + CMD_RETURN, + CMD_SET_NEXT_STATEMENT, + CMD_STEP_INTO, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_OVER, + CMD_STEP_OVER_MY_CODE, + file_system_encoding, + CMD_STEP_RETURN_MY_CODE, + CMD_STEP_RETURN, +) from _pydevd_bundle.pydevd_filtering import ExcludeFilter from _pydevd_bundle.pydevd_json_debug_options import _extract_debug_options, DebugOptions from _pydevd_bundle.pydevd_net_command import NetCommand from _pydevd_bundle.pydevd_utils import convert_dap_log_message_to_expression, ScopeRequest -from _pydevd_bundle.pydevd_constants import (PY_IMPL_NAME, DebugInfoHolder, PY_VERSION_STR, - PY_IMPL_VERSION_STR, IS_64BIT_PROCESS) +from _pydevd_bundle.pydevd_constants import PY_IMPL_NAME, DebugInfoHolder, PY_VERSION_STR, PY_IMPL_VERSION_STR, IS_64BIT_PROCESS from _pydevd_bundle.pydevd_trace_dispatch import USING_CYTHON from _pydevd_frame_eval.pydevd_frame_eval_main import USING_FRAME_EVAL from _pydevd_bundle.pydevd_comm import internal_get_step_in_targets_json @@ -52,27 +76,27 @@ def _convert_rules_to_exclude_filters(rules, on_error): on_error('Invalid "rules" (expected list of dicts). Found: %s' % (rules,)) continue - include = rule.get('include') + include = rule.get("include") if include is None: on_error('Invalid "rule" (expected dict with "include"). Found: %s' % (rule,)) continue - path = rule.get('path') - module = rule.get('module') + path = rule.get("path") + module = rule.get("module") if path is None and module is None: on_error('Invalid "rule" (expected dict with "path" or "module"). Found: %s' % (rule,)) continue if path is not None: glob_pattern = path - if '*' not in path and '?' not in path: + if "*" not in path and "?" not in path: if os.path.isdir(glob_pattern): # If a directory was specified, add a '/**' # to be consistent with the glob pattern required # by pydevd. - if not glob_pattern.endswith('/') and not glob_pattern.endswith('\\'): - glob_pattern += '/' - glob_pattern += '**' + if not glob_pattern.endswith("/") and not glob_pattern.endswith("\\"): + glob_pattern += "/" + glob_pattern += "**" directory_exclude_filters.append(ExcludeFilter(glob_pattern, not include, True)) else: glob_exclude_filters.append(ExcludeFilter(glob_pattern, not include, True)) @@ -81,22 +105,21 @@ def _convert_rules_to_exclude_filters(rules, on_error): module_exclude_filters.append(ExcludeFilter(module, not include, False)) else: - on_error('Internal error: expected path or module to be specified.') + on_error("Internal error: expected path or module to be specified.") # Note that we have to sort the directory/module exclude filters so that the biggest # paths match first. # i.e.: if we have: # /sub1/sub2/sub3 # a rule with /sub1/sub2 would match before a rule only with /sub1. - directory_exclude_filters = sorted(directory_exclude_filters, key=lambda exclude_filter:-len(exclude_filter.name)) - module_exclude_filters = sorted(module_exclude_filters, key=lambda exclude_filter:-len(exclude_filter.name)) + directory_exclude_filters = sorted(directory_exclude_filters, key=lambda exclude_filter: -len(exclude_filter.name)) + module_exclude_filters = sorted(module_exclude_filters, key=lambda exclude_filter: -len(exclude_filter.name)) exclude_filters = directory_exclude_filters + glob_exclude_filters + module_exclude_filters return exclude_filters class IDMap(object): - def __init__(self): self._value_to_key = {} self._key_to_value = {} @@ -116,7 +139,6 @@ def obtain_key(self, value): class PyDevJsonCommandProcessor(object): - def __init__(self, from_json): self.from_json = from_json self.api = PyDevdAPI() @@ -126,24 +148,24 @@ def __init__(self, from_json): self._launch_or_attach_request_done = False def process_net_command_json(self, py_db, json_contents, send_response=True): - ''' + """ Processes a debug adapter protocol json command. - ''' + """ DEBUG = False try: if isinstance(json_contents, bytes): - json_contents = json_contents.decode('utf-8') + json_contents = json_contents.decode("utf-8") request = self.from_json(json_contents, update_ids_from_dap=True) except Exception as e: try: loaded_json = json.loads(json_contents) - request = Request(loaded_json.get('command', ''), loaded_json['seq']) + request = Request(loaded_json.get("command", ""), loaded_json["seq"]) except: # There's not much we can do in this case... - pydev_log.exception('Error loading json: %s', json_contents) + pydev_log.exception("Error loading json: %s", json_contents) return error_msg = str(e) @@ -154,28 +176,33 @@ def process_net_command_json(self, py_db, json_contents, send_response=True): # so, answer with a failure response). def on_request(py_db, request): error_response = { - 'type': 'response', - 'request_seq': request.seq, - 'success': False, - 'command': request.command, - 'message': error_msg, + "type": "response", + "request_seq": request.seq, + "success": False, + "command": request.command, + "message": error_msg, } return NetCommand(CMD_RETURN, 0, error_response, is_json=True) else: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: - pydev_log.info('Process %s: %s\n' % ( - request.__class__.__name__, json.dumps(request.to_dict(update_ids_to_dap=True), indent=4, sort_keys=True),)) + pydev_log.info( + "Process %s: %s\n" + % ( + request.__class__.__name__, + json.dumps(request.to_dict(update_ids_to_dap=True), indent=4, sort_keys=True), + ) + ) - assert request.type == 'request' - method_name = 'on_%s_request' % (request.command.lower(),) + assert request.type == "request" + method_name = "on_%s_request" % (request.command.lower(),) on_request = getattr(self, method_name, None) if on_request is None: - print('Unhandled: %s not available in PyDevJsonCommandProcessor.\n' % (method_name,)) + print("Unhandled: %s not available in PyDevJsonCommandProcessor.\n" % (method_name,)) return if DEBUG: - print('Handled in pydevd: %s (in PyDevJsonCommandProcessor).\n' % (method_name,)) + print("Handled in pydevd: %s (in PyDevJsonCommandProcessor).\n" % (method_name,)) with py_db._main_lock: if request.__class__ == PydevdAuthorizeRequest: @@ -184,8 +211,7 @@ def on_request(py_db, request): py_db.authentication.login(access_token) if not py_db.authentication.is_authenticated(): - response = Response( - request.seq, success=False, command=request.command, message='Client not authenticated.', body={}) + response = Response(request.seq, success=False, command=request.command, message="Client not authenticated.", body={}) cmd = NetCommand(CMD_RETURN, 0, response, is_json=True) py_db.writer.add_command(cmd) return @@ -196,11 +222,11 @@ def on_request(py_db, request): def on_pydevdauthorize_request(self, py_db, request): client_access_token = py_db.authentication.client_access_token - body = {'clientAccessToken': None} + body = {"clientAccessToken": None} if client_access_token: - body['clientAccessToken'] = client_access_token + body["clientAccessToken"] = client_access_token - response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_initialize_request(self, py_db, request): @@ -224,13 +250,11 @@ def on_initialize_request(self, py_db, request): supportsTerminateRequest=True, supportsClipboardContext=True, supportsFunctionBreakpoints=True, - exceptionBreakpointFilters=[ - {'filter': 'raised', 'label': 'Raised Exceptions', 'default': False}, - {'filter': 'uncaught', 'label': 'Uncaught Exceptions', 'default': True}, + {"filter": "raised", "label": "Raised Exceptions", "default": False}, + {"filter": "uncaught", "label": "Uncaught Exceptions", "default": True}, {"filter": "userUnhandled", "label": "User Uncaught Exceptions", "default": False}, ], - # Not supported. supportsStepBack=False, supportsRestartFrame=False, @@ -247,20 +271,20 @@ def on_initialize_request(self, py_db, request): ).to_dict() # Non-standard capabilities/info below. - body['supportsDebuggerProperties'] = True + body["supportsDebuggerProperties"] = True - body['pydevd'] = pydevd_info = {} - pydevd_info['processId'] = os.getpid() + body["pydevd"] = pydevd_info = {} + pydevd_info["processId"] = os.getpid() self.api.notify_initialize(py_db) - response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_configurationdone_request(self, py_db, request): - ''' + """ :param ConfigurationDoneRequest request: - ''' + """ if not self._launch_or_attach_request_done: - pydev_log.critical('Missing launch request or attach request before configuration done request.') + pydev_log.critical("Missing launch request or attach request before configuration done request.") self.api.run(py_db) self.api.notify_configuration_done(py_db) @@ -269,15 +293,15 @@ def on_configurationdone_request(self, py_db, request): return NetCommand(CMD_RETURN, 0, configuration_done_response, is_json=True) def on_threads_request(self, py_db, request): - ''' + """ :param ThreadsRequest request: - ''' + """ return self.api.list_threads(py_db, request.seq) def on_terminate_request(self, py_db, request): - ''' + """ :param TerminateRequest request: - ''' + """ self._request_terminate_process(py_db) response = pydevd_base_schema.build_response(request) return NetCommand(CMD_RETURN, 0, response, is_json=True) @@ -286,25 +310,20 @@ def _request_terminate_process(self, py_db): self.api.request_terminate_process(py_db) def on_completions_request(self, py_db, request): - ''' + """ :param CompletionsRequest request: - ''' + """ arguments = request.arguments # : :type arguments: CompletionsArguments seq = request.seq text = arguments.text frame_id = arguments.frameId - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - frame_id) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(frame_id) if thread_id is None: body = CompletionsResponseBody([]) variables_response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': body, - 'success': False, - 'message': 'Thread to get completions seems to have resumed already.' - }) + request, kwargs={"body": body, "success": False, "message": "Thread to get completions seems to have resumed already."} + ) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) # Note: line and column are 1-based (convert to 0-based for pydevd). @@ -319,61 +338,62 @@ def on_completions_request(self, py_db, request): self.api.request_completions(py_db, seq, thread_id, frame_id, text, line=line, column=column) def _resolve_remote_root(self, local_root, remote_root): - if remote_root == '.': + if remote_root == ".": cwd = os.getcwd() - append_pathsep = local_root.endswith('\\') or local_root.endswith('/') - return cwd + (os.path.sep if append_pathsep else '') + append_pathsep = local_root.endswith("\\") or local_root.endswith("/") + return cwd + (os.path.sep if append_pathsep else "") return remote_root def _set_debug_options(self, py_db, args, start_reason): - rules = args.get('rules') - stepping_resumes_all_threads = args.get('steppingResumesAllThreads', True) + rules = args.get("rules") + stepping_resumes_all_threads = args.get("steppingResumesAllThreads", True) self.api.set_stepping_resumes_all_threads(py_db, stepping_resumes_all_threads) - terminate_child_processes = args.get('terminateChildProcesses', True) + terminate_child_processes = args.get("terminateChildProcesses", True) self.api.set_terminate_child_processes(py_db, terminate_child_processes) - terminate_keyboard_interrupt = args.get('onTerminate', 'kill') == 'KeyboardInterrupt' + terminate_keyboard_interrupt = args.get("onTerminate", "kill") == "KeyboardInterrupt" self.api.set_terminate_keyboard_interrupt(py_db, terminate_keyboard_interrupt) - variable_presentation = args.get('variablePresentation', None) + variable_presentation = args.get("variablePresentation", None) if isinstance(variable_presentation, dict): def get_variable_presentation(setting, default): value = variable_presentation.get(setting, default) - if value not in ('group', 'inline', 'hide'): + if value not in ("group", "inline", "hide"): pydev_log.info( - 'The value set for "%s" (%s) in the variablePresentation is not valid. Valid values are: "group", "inline", "hide"' % ( - setting, value,)) + 'The value set for "%s" (%s) in the variablePresentation is not valid. Valid values are: "group", "inline", "hide"' + % ( + setting, + value, + ) + ) value = default return value - default = get_variable_presentation('all', 'group') + default = get_variable_presentation("all", "group") - special_presentation = get_variable_presentation('special', default) - function_presentation = get_variable_presentation('function', default) - class_presentation = get_variable_presentation('class', default) - protected_presentation = get_variable_presentation('protected', default) + special_presentation = get_variable_presentation("special", default) + function_presentation = get_variable_presentation("function", default) + class_presentation = get_variable_presentation("class", default) + protected_presentation = get_variable_presentation("protected", default) - self.api.set_variable_presentation(py_db, self.api.VariablePresentation( - special_presentation, - function_presentation, - class_presentation, - protected_presentation - )) + self.api.set_variable_presentation( + py_db, + self.api.VariablePresentation(special_presentation, function_presentation, class_presentation, protected_presentation), + ) exclude_filters = [] if rules is not None: - exclude_filters = _convert_rules_to_exclude_filters( - rules, lambda msg: self.api.send_error_message(py_db, msg)) + exclude_filters = _convert_rules_to_exclude_filters(rules, lambda msg: self.api.send_error_message(py_db, msg)) self.api.set_exclude_filters(py_db, exclude_filters) debug_options = _extract_debug_options( - args.get('options'), - args.get('debugOptions'), + args.get("options"), + args.get("debugOptions"), ) self._options.update_fom_debug_options(debug_options) self._options.update_from_args(args) @@ -384,17 +404,17 @@ def get_variable_presentation(setting, default): self.api.set_ide_os(self._options.client_os) path_mappings = [] - for pathMapping in args.get('pathMappings', []): - localRoot = pathMapping.get('localRoot', '') - remoteRoot = pathMapping.get('remoteRoot', '') + for pathMapping in args.get("pathMappings", []): + localRoot = pathMapping.get("localRoot", "") + remoteRoot = pathMapping.get("remoteRoot", "") remoteRoot = self._resolve_remote_root(localRoot, remoteRoot) - if (localRoot != '') and (remoteRoot != ''): + if (localRoot != "") and (remoteRoot != ""): path_mappings.append((localRoot, remoteRoot)) if bool(path_mappings): pydevd_file_utils.setup_client_server_paths(path_mappings) - resolve_symlinks = args.get('resolveSymlinks', None) + resolve_symlinks = args.get("resolveSymlinks", None) if resolve_symlinks is not None: pydevd_file_utils.set_resolve_symlinks(resolve_symlinks) @@ -416,13 +436,13 @@ def get_variable_presentation(setting, default): self.api.set_ignore_system_exit_codes(py_db, ignore_system_exit_codes) - auto_reload = args.get('autoReload', {}) + auto_reload = args.get("autoReload", {}) if not isinstance(auto_reload, dict): - pydev_log.info('Expected autoReload to be a dict. Received: %s' % (auto_reload,)) + pydev_log.info("Expected autoReload to be a dict. Received: %s" % (auto_reload,)) auto_reload = {} - enable_auto_reload = auto_reload.get('enable', False) - watch_dirs = auto_reload.get('watchDirectories') + enable_auto_reload = auto_reload.get("enable", False) + watch_dirs = auto_reload.get("watchDirectories") if not watch_dirs: watch_dirs = [] # Note: by default this is no longer done because on some cases there are entries in the PYTHONPATH @@ -435,15 +455,15 @@ def get_variable_presentation(setting, default): # watch_dirs = [pydevd_file_utils.absolute_path(w) for w in check] # watch_dirs = [w for w in watch_dirs if py_db.in_project_roots_filename_uncached(w) and os.path.isdir(w)] - program = args.get('program') + program = args.get("program") if program: if os.path.isdir(program): watch_dirs.append(program) else: watch_dirs.append(os.path.dirname(program)) - watch_dirs.append(os.path.abspath('.')) + watch_dirs.append(os.path.abspath(".")) - argv = getattr(sys, 'argv', []) + argv = getattr(sys, "argv", []) if argv: f = argv[0] if f: # argv[0] could be None (https://github.com/microsoft/debugpy/issues/987) @@ -459,30 +479,31 @@ def get_variable_presentation(setting, default): try: new_watch_dirs.add(pydevd_file_utils.get_path_with_real_case(pydevd_file_utils.absolute_path(w))) except Exception: - pydev_log.exception('Error adding watch dir: %s', w) + pydev_log.exception("Error adding watch dir: %s", w) watch_dirs = new_watch_dirs - poll_target_time = auto_reload.get('pollingInterval', 1) - exclude_patterns = auto_reload.get('exclude', ('**/.git/**', '**/__pycache__/**', '**/node_modules/**', '**/.metadata/**', '**/site-packages/**')) - include_patterns = auto_reload.get('include', ('**/*.py', '**/*.pyw')) - self.api.setup_auto_reload_watcher( - py_db, enable_auto_reload, watch_dirs, poll_target_time, exclude_patterns, include_patterns) + poll_target_time = auto_reload.get("pollingInterval", 1) + exclude_patterns = auto_reload.get( + "exclude", ("**/.git/**", "**/__pycache__/**", "**/node_modules/**", "**/.metadata/**", "**/site-packages/**") + ) + include_patterns = auto_reload.get("include", ("**/*.py", "**/*.pyw")) + self.api.setup_auto_reload_watcher(py_db, enable_auto_reload, watch_dirs, poll_target_time, exclude_patterns, include_patterns) - if self._options.stop_on_entry and start_reason == 'launch': + if self._options.stop_on_entry and start_reason == "launch": self.api.stop_on_entry() self.api.set_gui_event_loop(py_db, self._options.gui_event_loop) def _send_process_event(self, py_db, start_method): - argv = getattr(sys, 'argv', []) + argv = getattr(sys, "argv", []) if len(argv) > 0: name = argv[0] else: - name = '' + name = "" if isinstance(name, bytes): - name = name.decode(file_system_encoding, 'replace') - name = name.encode('utf-8') + name = name.decode(file_system_encoding, "replace") + name = name.encode("utf-8") body = ProcessEventBody( name=name, @@ -505,21 +526,21 @@ def _handle_launch_or_attach_request(self, py_db, request, start_reason): return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_launch_request(self, py_db, request): - ''' + """ :param LaunchRequest request: - ''' - return self._handle_launch_or_attach_request(py_db, request, start_reason='launch') + """ + return self._handle_launch_or_attach_request(py_db, request, start_reason="launch") def on_attach_request(self, py_db, request): - ''' + """ :param AttachRequest request: - ''' - return self._handle_launch_or_attach_request(py_db, request, start_reason='attach') + """ + return self._handle_launch_or_attach_request(py_db, request, start_reason="attach") def on_pause_request(self, py_db, request): - ''' + """ :param PauseRequest request: - ''' + """ arguments = request.arguments # : :type arguments: PauseArguments thread_id = arguments.threadId @@ -529,29 +550,37 @@ def on_pause_request(self, py_db, request): return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_continue_request(self, py_db, request): - ''' + """ :param ContinueRequest request: - ''' + """ arguments = request.arguments # : :type arguments: ContinueArguments thread_id = arguments.threadId def on_resumed(): - body = {'allThreadsContinued': thread_id == '*'} - response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + body = {"allThreadsContinued": thread_id == "*"} + response = pydevd_base_schema.build_response(request, kwargs={"body": body}) cmd = NetCommand(CMD_RETURN, 0, response, is_json=True) py_db.writer.add_command(cmd) - # Only send resumed notification when it has actually resumed! - # (otherwise the user could send a continue, receive the notification and then - # request a new pause which would be paused without sending any notification as - # it didn't really run in the first place). - py_db.threads_suspended_single_notification.add_on_resumed_callback(on_resumed) - self.api.request_resume_thread(thread_id) + if py_db.multi_threads_single_notification: + # Only send resumed notification when it has actually resumed! + # (otherwise the user could send a continue, receive the notification and then + # request a new pause which would be paused without sending any notification as + # it didn't really run in the first place). + py_db.threads_suspended_single_notification.add_on_resumed_callback(on_resumed) + self.api.request_resume_thread(thread_id) + else: + # Only send resumed notification when it has actually resumed! + # (otherwise the user could send a continue, receive the notification and then + # request a new pause which would be paused without sending any notification as + # it didn't really run in the first place). + self.api.request_resume_thread(thread_id) + on_resumed() def on_next_request(self, py_db, request): - ''' + """ :param NextRequest request: - ''' + """ arguments = request.arguments # : :type arguments: NextArguments thread_id = arguments.threadId @@ -566,9 +595,9 @@ def on_next_request(self, py_db, request): return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_stepin_request(self, py_db, request): - ''' + """ :param StepInRequest request: - ''' + """ arguments = request.arguments # : :type arguments: StepInArguments thread_id = arguments.threadId @@ -580,7 +609,7 @@ def on_stepin_request(self, py_db, request): request_seq=request.seq, success=False, command=request.command, - message='Unable to find thread from thread_id: %s' % (thread_id,), + message="Unable to find thread from thread_id: %s" % (thread_id,), body={}, ) return NetCommand(CMD_RETURN, 0, response, is_json=True) @@ -589,11 +618,8 @@ def on_stepin_request(self, py_db, request): target_id_to_smart_step_into_variant = info.target_id_to_smart_step_into_variant if not target_id_to_smart_step_into_variant: variables_response = pydevd_base_schema.build_response( - request, - kwargs={ - 'success': False, - 'message': 'Unable to step into target (no targets are saved in the thread info).' - }) + request, kwargs={"success": False, "message": "Unable to step into target (no targets are saved in the thread info)."} + ) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) variant = target_id_to_smart_step_into_variant.get(target_id) @@ -607,10 +633,11 @@ def on_stepin_request(self, py_db, request): variables_response = pydevd_base_schema.build_response( request, kwargs={ - 'success': False, - 'message': 'Unable to find step into target %s. Available targets: %s' % ( - target_id, target_id_to_smart_step_into_variant) - }) + "success": False, + "message": "Unable to find step into target %s. Available targets: %s" + % (target_id, target_id_to_smart_step_into_variant), + }, + ) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) else: @@ -625,31 +652,32 @@ def on_stepin_request(self, py_db, request): return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_stepintargets_request(self, py_db, request): - ''' + """ :param StepInTargetsRequest request: - ''' + """ frame_id = request.arguments.frameId - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - frame_id) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(frame_id) if thread_id is None: body = StepInTargetsResponseBody([]) variables_response = pydevd_base_schema.build_response( request, kwargs={ - 'body': body, - 'success': False, - 'message': 'Unable to get thread_id from frame_id (thread to get step in targets seems to have resumed already).' - }) + "body": body, + "success": False, + "message": "Unable to get thread_id from frame_id (thread to get step in targets seems to have resumed already).", + }, + ) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) py_db.post_method_as_internal_command( - thread_id, internal_get_step_in_targets_json, request.seq, thread_id, frame_id, request, set_additional_thread_info) + thread_id, internal_get_step_in_targets_json, request.seq, thread_id, frame_id, request, set_additional_thread_info + ) def on_stepout_request(self, py_db, request): - ''' + """ :param StepOutRequest request: - ''' + """ arguments = request.arguments # : :type arguments: StepOutArguments thread_id = arguments.threadId @@ -664,38 +692,36 @@ def on_stepout_request(self, py_db, request): return NetCommand(CMD_RETURN, 0, response, is_json=True) def _get_hit_condition_expression(self, hit_condition): - '''Following hit condition values are supported + """Following hit condition values are supported * x or == x when breakpoint is hit x times * >= x when breakpoint is hit more than or equal to x times * % x when breakpoint is hit multiple of x times Returns '@HIT@ == x' where @HIT@ will be replaced by number of hits - ''' + """ if not hit_condition: return None expr = hit_condition.strip() try: int(expr) - return '@HIT@ == {}'.format(expr) + return "@HIT@ == {}".format(expr) except ValueError: pass - if expr.startswith('%'): - return '@HIT@ {} == 0'.format(expr) + if expr.startswith("%"): + return "@HIT@ {} == 0".format(expr) - if expr.startswith('==') or \ - expr.startswith('>') or \ - expr.startswith('<'): - return '@HIT@ {}'.format(expr) + if expr.startswith("==") or expr.startswith(">") or expr.startswith("<"): + return "@HIT@ {}".format(expr) return hit_condition def on_disconnect_request(self, py_db, request): - ''' + """ :param DisconnectRequest request: - ''' + """ if request.arguments.terminateDebuggee: self._request_terminate_process(py_db) response = pydevd_base_schema.build_response(request) @@ -712,30 +738,27 @@ def _verify_launch_or_attach_done(self, request): if not self._launch_or_attach_request_done: # Note that to validate the breakpoints we need the launch request to be done already # (otherwise the filters wouldn't be set for the breakpoint validation). - if request.command == 'setFunctionBreakpoints': + if request.command == "setFunctionBreakpoints": body = SetFunctionBreakpointsResponseBody([]) else: body = SetBreakpointsResponseBody([]) response = pydevd_base_schema.build_response( request, - kwargs={ - 'body': body, - 'success': False, - 'message': 'Breakpoints may only be set after the launch request is received.' - }) + kwargs={"body": body, "success": False, "message": "Breakpoints may only be set after the launch request is received."}, + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_setfunctionbreakpoints_request(self, py_db, request): - ''' + """ :param SetFunctionBreakpointsRequest request: - ''' + """ response = self._verify_launch_or_attach_done(request) if response is not None: return response arguments = request.arguments # : :type arguments: SetFunctionBreakpointsArguments function_breakpoints = [] - suspend_policy = 'ALL' + suspend_policy = "ALL" if py_db.multi_threads_single_notification else "NONE" # Not currently covered by the DAP. is_logpoint = False @@ -743,26 +766,24 @@ def on_setfunctionbreakpoints_request(self, py_db, request): breakpoints_set = [] for bp in arguments.breakpoints: - hit_condition = self._get_hit_condition_expression(bp.get('hitCondition')) - condition = bp.get('condition') + hit_condition = self._get_hit_condition_expression(bp.get("hitCondition")) + condition = bp.get("condition") - function_breakpoints.append( - FunctionBreakpoint(bp['name'], condition, expression, suspend_policy, hit_condition, is_logpoint)) + function_breakpoints.append(FunctionBreakpoint(bp["name"], condition, expression, suspend_policy, hit_condition, is_logpoint)) # Note: always succeeds. - breakpoints_set.append(pydevd_schema.Breakpoint( - verified=True, id=self._next_breakpoint_id()).to_dict()) + breakpoints_set.append(pydevd_schema.Breakpoint(verified=True, id=self._next_breakpoint_id()).to_dict()) self.api.set_function_breakpoints(py_db, function_breakpoints) - body = {'breakpoints': breakpoints_set} - set_breakpoints_response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + body = {"breakpoints": breakpoints_set} + set_breakpoints_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, set_breakpoints_response, is_json=True) def on_setbreakpoints_request(self, py_db, request): - ''' + """ :param SetBreakpointsRequest request: - ''' + """ response = self._verify_launch_or_attach_done(request) if response is not None: return response @@ -770,18 +791,18 @@ def on_setbreakpoints_request(self, py_db, request): arguments = request.arguments # : :type arguments: SetBreakpointsArguments # TODO: Path is optional here it could be source reference. filename = self.api.filename_to_str(arguments.source.path) - func_name = 'None' + func_name = "None" self.api.remove_all_breakpoints(py_db, filename) - btype = 'python-line' - suspend_policy = 'ALL' + btype = "python-line" + suspend_policy = "ALL" if py_db.multi_threads_single_notification else "NONE" - if not filename.lower().endswith('.py'): # Note: check based on original file, not mapping. + if not filename.lower().endswith(".py"): # Note: check based on original file, not mapping. if self._options.django_debug: - btype = 'django-line' + btype = "django-line" elif self._options.flask_debug: - btype = 'jinja2-line' + btype = "jinja2-line" breakpoints_set = [] @@ -802,20 +823,32 @@ def on_setbreakpoints_request(self, py_db, request): on_changed_breakpoint_state = partial(self._on_changed_breakpoint_state, py_db, arguments.source) result = self.api.add_breakpoint( - py_db, filename, btype, breakpoint_id, line, condition, func_name, expression, - suspend_policy, hit_condition, is_logpoint, adjust_line=True, on_changed_breakpoint_state=on_changed_breakpoint_state) + py_db, + filename, + btype, + breakpoint_id, + line, + condition, + func_name, + expression, + suspend_policy, + hit_condition, + is_logpoint, + adjust_line=True, + on_changed_breakpoint_state=on_changed_breakpoint_state, + ) bp = self._create_breakpoint_from_add_breakpoint_result(py_db, arguments.source, breakpoint_id, result) breakpoints_set.append(bp) - body = {'breakpoints': breakpoints_set} - set_breakpoints_response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + body = {"breakpoints": breakpoints_set} + set_breakpoints_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, set_breakpoints_response, is_json=True) def _on_changed_breakpoint_state(self, py_db, source, breakpoint_id, result): bp = self._create_breakpoint_from_add_breakpoint_result(py_db, source, breakpoint_id, result) body = BreakpointEventBody( - reason='changed', + reason="changed", breakpoint=bp, ) event = BreakpointEvent(body) @@ -827,34 +860,36 @@ def _create_breakpoint_from_add_breakpoint_result(self, py_db, source, breakpoin if error_code: if error_code == self.api.ADD_BREAKPOINT_FILE_NOT_FOUND: - error_msg = 'Breakpoint in file that does not exist.' + error_msg = "Breakpoint in file that does not exist." elif error_code == self.api.ADD_BREAKPOINT_FILE_EXCLUDED_BY_FILTERS: - error_msg = 'Breakpoint in file excluded by filters.' + error_msg = "Breakpoint in file excluded by filters." if py_db.get_use_libraries_filter(): - error_msg += ('\nNote: may be excluded because of "justMyCode" option (default == true).' - 'Try setting \"justMyCode\": false in the debug configuration (e.g., launch.json).\n') + error_msg += ( + '\nNote: may be excluded because of "justMyCode" option (default == true).' + 'Try setting "justMyCode": false in the debug configuration (e.g., launch.json).\n' + ) elif error_code == self.api.ADD_BREAKPOINT_LAZY_VALIDATION: - error_msg = 'Waiting for code to be loaded to verify breakpoint.' + error_msg = "Waiting for code to be loaded to verify breakpoint." elif error_code == self.api.ADD_BREAKPOINT_INVALID_LINE: - error_msg = 'Breakpoint added to invalid line.' + error_msg = "Breakpoint added to invalid line." else: # Shouldn't get here. - error_msg = 'Breakpoint not validated (reason unknown -- please report as bug).' + error_msg = "Breakpoint not validated (reason unknown -- please report as bug)." return pydevd_schema.Breakpoint( - verified=False, id=breakpoint_id, line=result.translated_line, message=error_msg, source=source).to_dict() + verified=False, id=breakpoint_id, line=result.translated_line, message=error_msg, source=source + ).to_dict() else: - return pydevd_schema.Breakpoint( - verified=True, id=breakpoint_id, line=result.translated_line, source=source).to_dict() + return pydevd_schema.Breakpoint(verified=True, id=breakpoint_id, line=result.translated_line, source=source).to_dict() def on_setexceptionbreakpoints_request(self, py_db, request): - ''' + """ :param SetExceptionBreakpointsRequest request: - ''' + """ # : :type arguments: SetExceptionBreakpointsArguments arguments = request.arguments filters = arguments.filters @@ -885,9 +920,9 @@ def on_setexceptionbreakpoints_request(self, py_db, request): # # userUnhandled: breaks if the exception is not handled by user code - notify_on_handled_exceptions = 1 if option.breakMode == 'always' else 0 - notify_on_unhandled_exceptions = 1 if option.breakMode == 'unhandled' else 0 - notify_on_user_unhandled_exceptions = 1 if option.breakMode == 'userUnhandled' else 0 + notify_on_handled_exceptions = 1 if option.breakMode == "always" else 0 + notify_on_unhandled_exceptions = 1 if option.breakMode == "unhandled" else 0 + notify_on_user_unhandled_exceptions = 1 if option.breakMode == "userUnhandled" else 0 exception_paths = option.path break_raised |= notify_on_handled_exceptions break_uncaught |= notify_on_unhandled_exceptions @@ -897,14 +932,14 @@ def on_setexceptionbreakpoints_request(self, py_db, request): continue elif len(exception_paths) == 1: - if 'Python Exceptions' in exception_paths[0]['names']: - exception_names = ['BaseException'] + if "Python Exceptions" in exception_paths[0]["names"]: + exception_names = ["BaseException"] else: path_iterator = iter(exception_paths) - if 'Python Exceptions' in next(path_iterator)['names']: + if "Python Exceptions" in next(path_iterator)["names"]: for path in path_iterator: - for ex_name in path['names']: + for ex_name in path["names"]: exception_names.append(ex_name) for exception_name in exception_names: @@ -917,18 +952,18 @@ def on_setexceptionbreakpoints_request(self, py_db, request): notify_on_unhandled_exceptions, notify_on_user_unhandled_exceptions, notify_on_first_raise_only, - ignore_libraries + ignore_libraries, ) else: - break_raised = 'raised' in filters - break_uncaught = 'uncaught' in filters - break_user = 'userUnhandled' in filters + break_raised = "raised" in filters + break_uncaught = "uncaught" in filters + break_user = "userUnhandled" in filters if break_raised or break_uncaught or break_user: notify_on_handled_exceptions = 1 if break_raised else 0 notify_on_unhandled_exceptions = 1 if break_uncaught else 0 notify_on_user_unhandled_exceptions = 1 if break_user else 0 - exception = 'BaseException' + exception = "BaseException" self.api.add_python_exception_breakpoint( py_db, @@ -939,28 +974,27 @@ def on_setexceptionbreakpoints_request(self, py_db, request): notify_on_unhandled_exceptions, notify_on_user_unhandled_exceptions, notify_on_first_raise_only, - ignore_libraries + ignore_libraries, ) if break_raised: btype = None if self._options.django_debug: - btype = 'django' + btype = "django" elif self._options.flask_debug: - btype = 'jinja2' + btype = "jinja2" if btype: - self.api.add_plugins_exception_breakpoint( - py_db, btype, 'BaseException') # Note: Exception name could be anything here. + self.api.add_plugins_exception_breakpoint(py_db, btype, "BaseException") # Note: Exception name could be anything here. # Note: no body required on success. set_breakpoints_response = pydevd_base_schema.build_response(request) return NetCommand(CMD_RETURN, 0, set_breakpoints_response, is_json=True) def on_stacktrace_request(self, py_db, request): - ''' + """ :param StackTraceRequest request: - ''' + """ # : :type stack_trace_arguments: StackTraceArguments stack_trace_arguments = request.arguments thread_id = stack_trace_arguments.threadId @@ -976,14 +1010,14 @@ def on_stacktrace_request(self, py_db, request): levels = 0 fmt = stack_trace_arguments.format - if hasattr(fmt, 'to_dict'): + if hasattr(fmt, "to_dict"): fmt = fmt.to_dict() self.api.request_stack(py_db, request.seq, thread_id, fmt=fmt, start_frame=start_frame, levels=levels) def on_exceptioninfo_request(self, py_db, request): - ''' + """ :param ExceptionInfoRequest request: - ''' + """ # : :type exception_into_arguments: ExceptionInfoArguments exception_into_arguments = request.arguments thread_id = exception_into_arguments.threadId @@ -996,78 +1030,67 @@ def on_exceptioninfo_request(self, py_db, request): request_seq=request.seq, success=False, command=request.command, - message='Unable to find thread from thread_id: %s' % (thread_id,), + message="Unable to find thread from thread_id: %s" % (thread_id,), body={}, ) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_scopes_request(self, py_db, request): - ''' + """ Scopes are the top-level items which appear for a frame (so, we receive the frame id and provide the scopes it has). :param ScopesRequest request: - ''' + """ frame_id = request.arguments.frameId variables_reference = frame_id scopes = [ - Scope('Locals', ScopeRequest(int(variables_reference), 'locals'), False, presentationHint='locals'), - Scope('Globals', ScopeRequest(int(variables_reference), 'globals'), False), + Scope("Locals", ScopeRequest(int(variables_reference), "locals"), False, presentationHint="locals"), + Scope("Globals", ScopeRequest(int(variables_reference), "globals"), False), ] body = ScopesResponseBody(scopes) - scopes_response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + scopes_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, scopes_response, is_json=True) def on_evaluate_request(self, py_db, request): - ''' + """ :param EvaluateRequest request: - ''' + """ # : :type arguments: EvaluateArguments arguments = request.arguments if arguments.frameId is None: - self.api.request_exec_or_evaluate_json(py_db, request, thread_id='*') + self.api.request_exec_or_evaluate_json(py_db, request, thread_id="*") else: - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - arguments.frameId) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(arguments.frameId) if thread_id is not None: - self.api.request_exec_or_evaluate_json( - py_db, request, thread_id) + self.api.request_exec_or_evaluate_json(py_db, request, thread_id) else: - body = EvaluateResponseBody('', 0) + body = EvaluateResponseBody("", 0) response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': body, - 'success': False, - 'message': 'Unable to find thread for evaluation.' - }) + request, kwargs={"body": body, "success": False, "message": "Unable to find thread for evaluation."} + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_setexpression_request(self, py_db, request): # : :type arguments: SetExpressionArguments arguments = request.arguments - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - arguments.frameId) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(arguments.frameId) if thread_id is not None: self.api.request_set_expression_json(py_db, request, thread_id) else: - body = SetExpressionResponseBody('') + body = SetExpressionResponseBody("") response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': body, - 'success': False, - 'message': 'Unable to find thread to set expression.' - }) + request, kwargs={"body": body, "success": False, "message": "Unable to find thread to set expression."} + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_variables_request(self, py_db, request): - ''' + """ Variables can be asked whenever some place returned a variables reference (so, it can be a scope gotten from on_scopes_request, the result of some evaluation, etc.). @@ -1080,25 +1103,22 @@ def on_variables_request(self, py_db, request): see: SuspendedFramesManager :param VariablesRequest request: - ''' + """ arguments = request.arguments # : :type arguments: VariablesArguments variables_reference = arguments.variablesReference if isinstance(variables_reference, ScopeRequest): variables_reference = variables_reference.variable_reference - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - variables_reference) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(variables_reference) if thread_id is not None: self.api.request_get_variable_json(py_db, request, thread_id) else: variables = [] body = VariablesResponseBody(variables) - variables_response = pydevd_base_schema.build_response(request, kwargs={ - 'body': body, - 'success': False, - 'message': 'Unable to find thread to evaluate variable reference.' - }) + variables_response = pydevd_base_schema.build_response( + request, kwargs={"body": body, "success": False, "message": "Unable to find thread to evaluate variable reference."} + ) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) def on_setvariable_request(self, py_db, request): @@ -1108,18 +1128,13 @@ def on_setvariable_request(self, py_db, request): if isinstance(variables_reference, ScopeRequest): variables_reference = variables_reference.variable_reference - if arguments.name.startswith('(return) '): + if arguments.name.startswith("(return) "): response = pydevd_base_schema.build_response( - request, - kwargs={ - 'body': SetVariableResponseBody(''), - 'success': False, - 'message': 'Cannot change return value' - }) + request, kwargs={"body": SetVariableResponseBody(""), "success": False, "message": "Cannot change return value"} + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) - thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference( - variables_reference) + thread_id = py_db.suspended_frames_manager.get_thread_id_for_variable_reference(variables_reference) if thread_id is not None: self.api.request_change_variable_json(py_db, request, thread_id) @@ -1127,23 +1142,24 @@ def on_setvariable_request(self, py_db, request): response = pydevd_base_schema.build_response( request, kwargs={ - 'body': SetVariableResponseBody(''), - 'success': False, - 'message': 'Unable to find thread to evaluate variable reference.' - }) + "body": SetVariableResponseBody(""), + "success": False, + "message": "Unable to find thread to evaluate variable reference.", + }, + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_modules_request(self, py_db, request): modules_manager = py_db.cmd_factory.modules_manager # : :type modules_manager: ModulesManager modules_info = modules_manager.get_modules_info() body = ModulesResponseBody(modules_info) - variables_response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + variables_response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, variables_response, is_json=True) def on_source_request(self, py_db, request): - ''' + """ :param SourceRequest request: - ''' + """ source_reference = request.arguments.sourceReference server_filename = None content = None @@ -1156,7 +1172,7 @@ def on_source_request(self, py_db, request): if server_filename: # Try direct file access first - it's much faster when available. try: - with open(server_filename, 'r') as stream: + with open(server_filename, "r") as stream: content = stream.read() except: pass @@ -1170,29 +1186,29 @@ def on_source_request(self, py_db, request): # If we didn't get at least one line back, reset it to None so that it's # reported as error below, and not as an empty file. - content = ''.join(lines) or None + content = "".join(lines) or None if content is None: frame_id = pydevd_file_utils.get_frame_id_from_source_reference(source_reference) - pydev_log.debug('Found frame id: %s for source reference: %s', frame_id, source_reference) + pydev_log.debug("Found frame id: %s for source reference: %s", frame_id, source_reference) if frame_id is not None: try: content = self.api.get_decompiled_source_from_frame_id(py_db, frame_id) except Exception: - pydev_log.exception('Error getting source for frame id: %s', frame_id) + pydev_log.exception("Error getting source for frame id: %s", frame_id) content = None - body = SourceResponseBody(content or '') - response_args = {'body': body} + body = SourceResponseBody(content or "") + response_args = {"body": body} if content is None: if source_reference == 0: - message = 'Source unavailable' + message = "Source unavailable" elif server_filename: - message = 'Unable to retrieve source for %s' % (server_filename,) + message = "Unable to retrieve source for %s" % (server_filename,) else: - message = 'Invalid sourceReference %d' % (source_reference,) - response_args.update({'success': False, 'message': message}) + message = "Invalid sourceReference %d" % (source_reference,) + response_args.update({"success": False, "message": message}) response = pydevd_base_schema.build_response(request, kwargs=response_args) return NetCommand(CMD_RETURN, 0, response, is_json=True) @@ -1201,13 +1217,9 @@ def on_gototargets_request(self, py_db, request): path = request.arguments.source.path line = request.arguments.line target_id = self._goto_targets_map.obtain_key((path, line)) - target = { - 'id': target_id, - 'label': '%s:%s' % (path, line), - 'line': line - } + target = {"id": target_id, "label": "%s:%s" % (path, line), "line": line} body = GotoTargetsResponseBody(targets=[target]) - response_args = {'body': body} + response_args = {"body": body} response = pydevd_base_schema.build_response(request, kwargs=response_args) return NetCommand(CMD_RETURN, 0, response, is_json=True) @@ -1220,13 +1232,14 @@ def on_goto_request(self, py_db, request): response = pydevd_base_schema.build_response( request, kwargs={ - 'body': {}, - 'success': False, - 'message': 'Unknown goto target id: %d' % (target_id,), - }) + "body": {}, + "success": False, + "message": "Unknown goto target id: %d" % (target_id,), + }, + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) - self.api.request_set_next(py_db, request.seq, thread_id, CMD_SET_NEXT_STATEMENT, path, line, '*') + self.api.request_set_next(py_db, request.seq, thread_id, CMD_SET_NEXT_STATEMENT, path, line, "*") # See 'NetCommandFactoryJson.make_set_next_stmnt_status_message' for response return None @@ -1241,12 +1254,10 @@ def on_setdebuggerproperty_request(self, py_db, request): self.api.set_dont_trace_start_end_patterns(py_db, start_patterns, end_patterns) if args.skipSuspendOnBreakpointException is not None: - py_db.skip_suspend_on_breakpoint_exception = tuple( - get_exception_class(x) for x in args.skipSuspendOnBreakpointException) + py_db.skip_suspend_on_breakpoint_exception = tuple(get_exception_class(x) for x in args.skipSuspendOnBreakpointException) if args.skipPrintBreakpointException is not None: - py_db.skip_print_breakpoint_exception = tuple( - get_exception_class(x) for x in args.skipPrintBreakpointException) + py_db.skip_print_breakpoint_exception = tuple(get_exception_class(x) for x in args.skipPrintBreakpointException) if args.multiThreadsSingleNotification is not None: py_db.multi_threads_single_notification = args.multiThreadsSingleNotification @@ -1260,7 +1271,7 @@ def on_setdebuggerproperty_request(self, py_db, request): # WarnIfNoUserCodeOnLaunch: 0 or 1 # EnableStepFiltering: true of false - response = pydevd_base_schema.build_response(request, kwargs={'body': {}}) + response = pydevd_base_schema.build_response(request, kwargs={"body": {}}) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_pydevdsysteminfo_request(self, py_db, request): @@ -1287,7 +1298,7 @@ def on_pydevdsysteminfo_request(self, py_db, request): name=PY_IMPL_NAME, version=PY_IMPL_VERSION_STR, description=impl_desc, - ) + ), ) platform_info = pydevd_schema.PydevdPlatformInfo(name=sys.platform) process_info = pydevd_schema.PydevdProcessInfo( @@ -1301,12 +1312,12 @@ def on_pydevdsysteminfo_request(self, py_db, request): usingFrameEval=USING_FRAME_EVAL, ) body = { - 'python': py_info, - 'platform': platform_info, - 'process': process_info, - 'pydevd': pydevd_info, + "python": py_info, + "platform": platform_info, + "process": process_info, + "pydevd": pydevd_info, } - response = pydevd_base_schema.build_response(request, kwargs={'body': body}) + response = pydevd_base_schema.build_response(request, kwargs={"body": body}) return NetCommand(CMD_RETURN, 0, response, is_json=True) def on_setpydevdsourcemap_request(self, py_db, request): @@ -1318,11 +1329,12 @@ def on_setpydevdsourcemap_request(self, py_db, request): # : :type source_map: PydevdSourceMap new_mappings = [ SourceMappingEntry( - source_map['line'], - source_map['endLine'], - source_map['runtimeLine'], - self.api.filename_to_str(source_map['runtimeSource']['path']) - ) for source_map in source_maps + source_map["line"], + source_map["endLine"], + source_map["runtimeLine"], + self.api.filename_to_str(source_map["runtimeSource"]["path"]), + ) + for source_map in source_maps ] error_msg = self.api.set_source_mapping(py_db, path, new_mappings) @@ -1330,12 +1342,12 @@ def on_setpydevdsourcemap_request(self, py_db, request): response = pydevd_base_schema.build_response( request, kwargs={ - 'body': {}, - 'success': False, - 'message': error_msg, - }) + "body": {}, + "success": False, + "message": error_msg, + }, + ) return NetCommand(CMD_RETURN, 0, response, is_json=True) response = pydevd_base_schema.build_response(request) return NetCommand(CMD_RETURN, 0, response, is_json=True) - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py index c7e1bfaf4..9f8a29c4e 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_referrers.py @@ -6,103 +6,107 @@ from _pydevd_bundle.pydevd_constants import IS_PY311_OR_GREATER -#=================================================================================================== +# =================================================================================================== # print_var_node -#=================================================================================================== +# =================================================================================================== def print_var_node(xml_node, stream): - name = xml_node.getAttribute('name') - value = xml_node.getAttribute('value') - val_type = xml_node.getAttribute('type') + name = xml_node.getAttribute("name") + value = xml_node.getAttribute("value") + val_type = xml_node.getAttribute("type") - found_as = xml_node.getAttribute('found_as') - stream.write('Name: ') + found_as = xml_node.getAttribute("found_as") + stream.write("Name: ") stream.write(unquote_plus(name)) - stream.write(', Value: ') + stream.write(", Value: ") stream.write(unquote_plus(value)) - stream.write(', Type: ') + stream.write(", Type: ") stream.write(unquote_plus(val_type)) if found_as: - stream.write(', Found as: %s' % (unquote_plus(found_as),)) - stream.write('\n') + stream.write(", Found as: %s" % (unquote_plus(found_as),)) + stream.write("\n") -#=================================================================================================== +# =================================================================================================== # print_referrers -#=================================================================================================== +# =================================================================================================== def print_referrers(obj, stream=None): if stream is None: stream = sys.stdout result = get_referrer_info(obj) from xml.dom.minidom import parseString + dom = parseString(result) - xml = dom.getElementsByTagName('xml')[0] + xml = dom.getElementsByTagName("xml")[0] for node in xml.childNodes: if node.nodeType == node.TEXT_NODE: continue - if node.localName == 'for': - stream.write('Searching references for: ') + if node.localName == "for": + stream.write("Searching references for: ") for child in node.childNodes: if child.nodeType == node.TEXT_NODE: continue print_var_node(child, stream) - elif node.localName == 'var': - stream.write('Referrer found: ') + elif node.localName == "var": + stream.write("Referrer found: ") print_var_node(node, stream) else: - sys.stderr.write('Unhandled node: %s\n' % (node,)) + sys.stderr.write("Unhandled node: %s\n" % (node,)) return result -#=================================================================================================== +# =================================================================================================== # get_referrer_info -#=================================================================================================== +# =================================================================================================== def get_referrer_info(searched_obj): DEBUG = 0 if DEBUG: - sys.stderr.write('Getting referrers info.\n') + sys.stderr.write("Getting referrers info.\n") try: try: if searched_obj is None: - ret = ['\n'] - - ret.append('\n') - ret.append(pydevd_xml.var_to_xml( - searched_obj, - 'Skipping getting referrers for None', - additional_in_xml=' id="%s"' % (id(searched_obj),))) - ret.append('\n') - ret.append('') - ret = ''.join(ret) + ret = ["\n"] + + ret.append("\n") + ret.append( + pydevd_xml.var_to_xml( + searched_obj, "Skipping getting referrers for None", additional_in_xml=' id="%s"' % (id(searched_obj),) + ) + ) + ret.append("\n") + ret.append("") + ret = "".join(ret) return ret obj_id = id(searched_obj) try: if DEBUG: - sys.stderr.write('Getting referrers...\n') + sys.stderr.write("Getting referrers...\n") import gc + referrers = gc.get_referrers(searched_obj) except: pydev_log.exception() - ret = ['\n'] - - ret.append('\n') - ret.append(pydevd_xml.var_to_xml( - searched_obj, - 'Exception raised while trying to get_referrers.', - additional_in_xml=' id="%s"' % (id(searched_obj),))) - ret.append('\n') - ret.append('') - ret = ''.join(ret) + ret = ["\n"] + + ret.append("\n") + ret.append( + pydevd_xml.var_to_xml( + searched_obj, "Exception raised while trying to get_referrers.", additional_in_xml=' id="%s"' % (id(searched_obj),) + ) + ) + ret.append("\n") + ret.append("") + ret = "".join(ret) return ret if DEBUG: - sys.stderr.write('Found %s referrers.\n' % (len(referrers),)) + sys.stderr.write("Found %s referrers.\n" % (len(referrers),)) curr_frame = sys._getframe() frame_type = type(curr_frame) @@ -111,20 +115,18 @@ def get_referrer_info(searched_obj): ignore_frames = {} # Should be a set, but it's not available on all python versions. while curr_frame is not None: - if basename(curr_frame.f_code.co_filename).startswith('pydev'): + if basename(curr_frame.f_code.co_filename).startswith("pydev"): ignore_frames[curr_frame] = 1 curr_frame = curr_frame.f_back - ret = ['\n'] + ret = ["\n"] - ret.append('\n') + ret.append("\n") if DEBUG: sys.stderr.write('Searching Referrers of obj with id="%s"\n' % (obj_id,)) - ret.append(pydevd_xml.var_to_xml( - searched_obj, - 'Referrers of obj with id="%s"' % (obj_id,))) - ret.append('\n') + ret.append(pydevd_xml.var_to_xml(searched_obj, 'Referrers of obj with id="%s"' % (obj_id,))) + ret.append("\n") curr_frame = sys._getframe() all_objects = None @@ -147,10 +149,10 @@ def get_referrer_info(searched_obj): representation = str(r_type) - found_as = '' + found_as = "" if r_type == frame_type: if DEBUG: - sys.stderr.write('Found frame referrer: %r\n' % (r,)) + sys.stderr.write("Found frame referrer: %r\n" % (r,)) for key, val in r.f_locals.items(): if val is searched_obj: found_as = key @@ -158,14 +160,14 @@ def get_referrer_info(searched_obj): elif r_type == dict: if DEBUG: - sys.stderr.write('Found dict referrer: %r\n' % (r,)) + sys.stderr.write("Found dict referrer: %r\n" % (r,)) # Try to check if it's a value in the dict (and under which key it was found) for key, val in r.items(): if val is searched_obj: found_as = key if DEBUG: - sys.stderr.write(' Found as %r in dict\n' % (found_as,)) + sys.stderr.write(" Found as %r in dict\n" % (found_as,)) break # Ok, there's one annoying thing: many times we find it in a dict from an instance, @@ -176,7 +178,7 @@ def get_referrer_info(searched_obj): for x in all_objects: try: - if getattr(x, '__dict__', None) is r: + if getattr(x, "__dict__", None) is r: r = x r_type = type(x) r_id = str(id(r)) @@ -187,13 +189,13 @@ def get_referrer_info(searched_obj): elif r_type in (tuple, list): if DEBUG: - sys.stderr.write('Found tuple referrer: %r\n' % (r,)) + sys.stderr.write("Found tuple referrer: %r\n" % (r,)) for i, x in enumerate(r): if x is searched_obj: - found_as = '%s[%s]' % (r_type.__name__, i) + found_as = "%s[%s]" % (r_type.__name__, i) if DEBUG: - sys.stderr.write(' Found as %s in tuple: \n' % (found_as,)) + sys.stderr.write(" Found as %s in tuple: \n" % (found_as,)) break elif IS_PY311_OR_GREATER: @@ -202,16 +204,16 @@ def get_referrer_info(searched_obj): # handling is a bit easier (we don't need the workaround from the dict # case to find the actual instance, we just need to find the attribute name). if DEBUG: - sys.stderr.write('Found dict referrer: %r\n' % (r,)) + sys.stderr.write("Found dict referrer: %r\n" % (r,)) - dct = getattr(r, '__dict__', None) + dct = getattr(r, "__dict__", None) if dct: # Try to check if it's a value in the dict (and under which key it was found) for key, val in dct.items(): if val is searched_obj: found_as = key if DEBUG: - sys.stderr.write(' Found as %r in object instance\n' % (found_as,)) + sys.stderr.write(" Found as %r in object instance\n" % (found_as,)) break if found_as: @@ -219,13 +221,10 @@ def get_referrer_info(searched_obj): found_as = str(found_as) found_as = ' found_as="%s"' % (pydevd_xml.make_valid_xml_value(found_as),) - ret.append(pydevd_xml.var_to_xml( - r, - representation, - additional_in_xml=' id="%s"%s' % (r_id, found_as))) + ret.append(pydevd_xml.var_to_xml(r, representation, additional_in_xml=' id="%s"%s' % (r_id, found_as))) finally: if DEBUG: - sys.stderr.write('Done searching for references.\n') + sys.stderr.write("Done searching for references.\n") # If we have any exceptions, don't keep dangling references from this frame to any of our objects. all_objects = None @@ -239,19 +238,15 @@ def get_referrer_info(searched_obj): ignore_frames = None except: pydev_log.exception() - ret = ['\n'] - - ret.append('\n') - ret.append(pydevd_xml.var_to_xml( - searched_obj, - 'Error getting referrers for:', - additional_in_xml=' id="%s"' % (id(searched_obj),))) - ret.append('\n') - ret.append('') - ret = ''.join(ret) + ret = ["\n"] + + ret.append("\n") + ret.append(pydevd_xml.var_to_xml(searched_obj, "Error getting referrers for:", additional_in_xml=' id="%s"' % (id(searched_obj),))) + ret.append("\n") + ret.append("") + ret = "".join(ret) return ret - ret.append('') - ret = ''.join(ret) + ret.append("") + ret = "".join(ret) return ret - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py index 507e73be2..60131a7cc 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_reload.py @@ -118,8 +118,8 @@ def write_err(*args): for a in args: new_lst.append(str(a)) - msg = ' '.join(new_lst) - s = 'code reload: %s\n' % (msg,) + msg = " ".join(new_lst) + s = "code reload: %s\n" % (msg,) cmd = py_db.cmd_factory.make_io_message(s, 2) if py_db.writer is not None: py_db.writer.add_command(cmd) @@ -143,21 +143,21 @@ def notify_error(*args): write_err(*args) -#======================================================================================================================= +# ======================================================================================================================= # code_objects_equal -#======================================================================================================================= +# ======================================================================================================================= def code_objects_equal(code0, code1): for d in dir(code0): - if d.startswith('_') or 'line' in d or d in ('replace', 'co_positions', 'co_qualname'): + if d.startswith("_") or "line" in d or d in ("replace", "co_positions", "co_qualname"): continue if getattr(code0, d) != getattr(code1, d): return False return True -#======================================================================================================================= +# ======================================================================================================================= # xreload -#======================================================================================================================= +# ======================================================================================================================= def xreload(mod): """Reload a module in place, updating classes, methods and functions. @@ -172,6 +172,7 @@ def xreload(mod): pydevd_dont_trace.clear_trace_filter_cache() return found_change + # This isn't actually used... Initially I planned to reload variables which are immutable on the # namespace, but this can destroy places where we're saving state, which may not be what we want, # so, we're being conservative and giving the user hooks if he wants to do a reload. @@ -186,11 +187,10 @@ def xreload(mod): # immutable_types = tuple(immutable_types) -#======================================================================================================================= +# ======================================================================================================================= # Reload -#======================================================================================================================= +# ======================================================================================================================= class Reload: - def __init__(self, mod, mod_name=None, mod_filename=None): self.mod = mod if mod_name: @@ -229,11 +229,11 @@ def apply(self): if self.mod_name: new_namespace["__name__"] = self.mod_name - if new_namespace["__name__"] == '__main__': + if new_namespace["__name__"] == "__main__": # We do this because usually the __main__ starts-up the program, guarded by # the if __name__ == '__main__', but we don't want to start the program again # on a reload. - new_namespace["__name__"] = '__main_reloaded__' + new_namespace["__name__"] = "__main_reloaded__" execfile(self.mod_filename, new_namespace, new_namespace) # Now we get to the hard part @@ -242,7 +242,7 @@ def apply(self): # Create new tokens (note: not deleting existing) for name in newnames - oldnames: - notify_info0('Added:', name, 'to namespace') + notify_info0("Added:", name, "to namespace") self.found_change = True modns[name] = new_namespace[name] @@ -261,13 +261,13 @@ def apply(self): def _handle_namespace(self, namespace, is_class_namespace=False): on_finish = None if is_class_namespace: - xreload_after_update = getattr(namespace, '__xreload_after_reload_update__', None) + xreload_after_update = getattr(namespace, "__xreload_after_reload_update__", None) if xreload_after_update is not None: self.found_change = True on_finish = lambda: xreload_after_update() - elif '__xreload_after_reload_update__' in namespace: - xreload_after_update = namespace['__xreload_after_reload_update__'] + elif "__xreload_after_reload_update__" in namespace: + xreload_after_update = namespace["__xreload_after_reload_update__"] self.found_change = True on_finish = lambda: xreload_after_update(namespace) @@ -285,15 +285,15 @@ def _update(self, namespace, name, oldobj, newobj, is_class_namespace=False): newobj: the object used as the source for the update """ try: - notify_info2('Updating: ', oldobj) + notify_info2("Updating: ", oldobj) if oldobj is newobj: # Probably something imported return if type(oldobj) is not type(newobj): # Cop-out: if the type changed, give up - if name not in ('__builtins__',): - notify_error('Type of: %s (old: %s != new: %s) changed... Skipping.' % (name, type(oldobj), type(newobj))) + if name not in ("__builtins__",): + notify_error("Type of: %s (old: %s != new: %s) changed... Skipping." % (name, type(oldobj), type(newobj))) return if isinstance(newobj, types.FunctionType): @@ -312,7 +312,7 @@ def _update(self, namespace, name, oldobj, newobj, is_class_namespace=False): self._update_staticmethod(oldobj, newobj) return - if hasattr(types, 'ClassType'): + if hasattr(types, "ClassType"): classtype = (types.ClassType, type) # object is not instance of types.ClassType. else: classtype = type @@ -322,7 +322,7 @@ def _update(self, namespace, name, oldobj, newobj, is_class_namespace=False): return # New: dealing with metaclasses. - if hasattr(newobj, '__metaclass__') and hasattr(newobj, '__class__') and newobj.__metaclass__ == newobj.__class__: + if hasattr(newobj, "__metaclass__") and hasattr(newobj, "__class__") and newobj.__metaclass__ == newobj.__class__: self._update_class(oldobj, newobj) return @@ -331,13 +331,13 @@ def _update(self, namespace, name, oldobj, newobj, is_class_namespace=False): # as even doing a comparison may break things -- see: https://github.com/microsoft/debugpy/issues/615). xreload_old_new = None if is_class_namespace: - xreload_old_new = getattr(namespace, '__xreload_old_new__', None) + xreload_old_new = getattr(namespace, "__xreload_old_new__", None) if xreload_old_new is not None: self.found_change = True xreload_old_new(name, oldobj, newobj) - elif '__xreload_old_new__' in namespace: - xreload_old_new = namespace['__xreload_old_new__'] + elif "__xreload_old_new__" in namespace: + xreload_old_new = namespace["__xreload_old_new__"] xreload_old_new(namespace, name, oldobj, newobj) self.found_change = True @@ -346,7 +346,7 @@ def _update(self, namespace, name, oldobj, newobj, is_class_namespace=False): # notify_info0('%s NOT updated. Create __xreload_old_new__(name, old, new) for custom reload' % (name,)) except: - notify_error('Exception found when updating %s. Proceeding for other items.' % (name,)) + notify_error("Exception found when updating %s. Proceeding for other items." % (name,)) pydev_log.exception() # All of the following functions have the same signature as _update() @@ -358,15 +358,15 @@ def _update_function(self, oldfunc, newfunc): try: newfunc.__code__ - attr_name = '__code__' + attr_name = "__code__" except AttributeError: newfunc.func_code - attr_name = 'func_code' + attr_name = "func_code" old_code = getattr(oldfunc, attr_name) new_code = getattr(newfunc, attr_name) if not code_objects_equal(old_code, new_code): - notify_info0('Updated function code:', oldfunc) + notify_info0("Updated function code:", oldfunc) setattr(oldfunc, attr_name, new_code) self.found_change = True @@ -380,9 +380,9 @@ def _update_function(self, oldfunc, newfunc): def _update_method(self, oldmeth, newmeth): """Update a method object.""" # XXX What if im_func is not a function? - if hasattr(oldmeth, 'im_func') and hasattr(newmeth, 'im_func'): + if hasattr(oldmeth, "im_func") and hasattr(newmeth, "im_func"): self._update(None, None, oldmeth.im_func, newmeth.im_func) - elif hasattr(oldmeth, '__func__') and hasattr(newmeth, '__func__'): + elif hasattr(oldmeth, "__func__") and hasattr(newmeth, "__func__"): self._update(None, None, oldmeth.__func__, newmeth.__func__) return oldmeth @@ -396,7 +396,7 @@ def _update_class(self, oldclass, newclass): for name in newnames - oldnames: setattr(oldclass, name, newdict[name]) - notify_info0('Added:', name, 'to', oldclass) + notify_info0("Added:", name, "to", oldclass) self.found_change = True # Note: not removing old things... @@ -404,13 +404,13 @@ def _update_class(self, oldclass, newclass): # notify_info('Removed:', name, 'from', oldclass) # delattr(oldclass, name) - for name in (oldnames & newnames) - set(['__dict__', '__doc__']): + for name in (oldnames & newnames) - set(["__dict__", "__doc__"]): self._update(oldclass, name, olddict[name], newdict[name], is_class_namespace=True) - old_bases = getattr(oldclass, '__bases__', None) - new_bases = getattr(newclass, '__bases__', None) + old_bases = getattr(oldclass, "__bases__", None) + new_bases = getattr(newclass, "__bases__", None) if str(old_bases) != str(new_bases): - notify_error('Changing the hierarchy of a class is not supported. %s may be inconsistent.' % (oldclass,)) + notify_error("Changing the hierarchy of a class is not supported. %s may be inconsistent." % (oldclass,)) self._handle_namespace(oldclass, is_class_namespace=True) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py index 90e313fa6..20a7351a9 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_resolver.py @@ -5,18 +5,24 @@ from os.path import basename from functools import partial -from _pydevd_bundle.pydevd_constants import IS_PY36_OR_GREATER, \ - MethodWrapperType, RETURN_VALUES_DICT, DebugInfoHolder, IS_PYPY, GENERATED_LEN_ATTR_NAME +from _pydevd_bundle.pydevd_constants import ( + IS_PY36_OR_GREATER, + MethodWrapperType, + RETURN_VALUES_DICT, + DebugInfoHolder, + IS_PYPY, + GENERATED_LEN_ATTR_NAME, +) from _pydevd_bundle.pydevd_safe_repr import SafeRepr from _pydevd_bundle import pydevd_constants -TOO_LARGE_MSG = 'Maximum number of items (%s) reached. To show more items customize the value of the PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS environment variable.' -TOO_LARGE_ATTR = 'Unable to handle:' +TOO_LARGE_MSG = "Maximum number of items (%s) reached. To show more items customize the value of the PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS environment variable." +TOO_LARGE_ATTR = "Unable to handle:" -#======================================================================================================================= +# ======================================================================================================================= # UnableToResolveVariableException -#======================================================================================================================= +# ======================================================================================================================= class UnableToResolveVariableException(Exception): pass @@ -31,20 +37,20 @@ class UnableToResolveVariableException(Exception): except: pass -#======================================================================================================================= +# ======================================================================================================================= # See: pydevd_extension_api module for resolver interface -#======================================================================================================================= +# ======================================================================================================================= def sorted_attributes_key(attr_name): - if attr_name.startswith('__'): - if attr_name.endswith('__'): + if attr_name.startswith("__"): + if attr_name.endswith("__"): # __ double under before and after __ return (3, attr_name) else: # __ double under before return (2, attr_name) - elif attr_name.startswith('_'): + elif attr_name.startswith("_"): # _ single under return (1, attr_name) else: @@ -52,13 +58,13 @@ def sorted_attributes_key(attr_name): return (0, attr_name) -#======================================================================================================================= +# ======================================================================================================================= # DefaultResolver -#======================================================================================================================= +# ======================================================================================================================= class DefaultResolver: - ''' - DefaultResolver is the class that'll actually resolve how to show some variable. - ''' + """ + DefaultResolver is the class that'll actually resolve how to show some variable. + """ def resolve(self, var, attribute): return getattr(var, attribute) @@ -71,9 +77,9 @@ def get_contents_debug_adapter_protocol(self, obj, fmt=None): lst = sorted(dct.items(), key=lambda tup: sorted_attributes_key(tup[0])) if used___dict__: - eval_name = '.__dict__[%s]' + eval_name = ".__dict__[%s]" else: - eval_name = '.%s' + eval_name = ".%s" ret = [] for attr_name, attr_value in lst: @@ -93,8 +99,7 @@ def _get_jy_dictionary(self, obj): found = java.util.HashMap() original = obj - if hasattr_checked(obj, '__class__') and obj.__class__ == java.lang.Class: - + if hasattr_checked(obj, "__class__") and obj.__class__ == java.lang.Class: # get info about superclasses classes = [] classes.append(obj) @@ -111,7 +116,6 @@ def _get_jy_dictionary(self, obj): # now is the time when we actually get info on the declared methods and fields for obj in classes: - declaredMethods = obj.getDeclaredMethods() declaredFields = obj.getDeclaredFields() for i in range(len(declaredMethods)): @@ -151,16 +155,16 @@ def get_names(self, var): except Exception: names = [] if not names: - if hasattr_checked(var, '__dict__'): + if hasattr_checked(var, "__dict__"): names = list(var.__dict__) used___dict__ = True return names, used___dict__ def _get_py_dictionary(self, var, names=None, used___dict__=False): - ''' + """ :return tuple(names, used___dict__), where used___dict__ means we have to access using obj.__dict__[name] instead of getattr(obj, name) - ''' + """ # On PyPy we never show functions. This is because of a corner case where PyPy becomes # absurdly slow -- it takes almost half a second to introspect a single numpy function (so, @@ -183,7 +187,7 @@ def _get_py_dictionary(self, var, names=None, used___dict__=False): try: name_as_str = name if name_as_str.__class__ != str: - name_as_str = '%r' % (name_as_str,) + name_as_str = "%r" % (name_as_str,) if not used___dict__: attr = getattr(var, name) @@ -209,7 +213,6 @@ def _get_py_dictionary(self, var, names=None, used___dict__=False): class DAPGrouperResolver: - def get_contents_debug_adapter_protocol(self, obj, fmt=None): return obj.get_contents_debug_adapter_protocol() @@ -218,10 +221,10 @@ def get_contents_debug_adapter_protocol(self, obj, fmt=None): def _does_obj_repr_evaluate_to_obj(obj): - ''' + """ If obj is an object where evaluating its representation leads to the same object, return True, otherwise, return False. - ''' + """ try: if isinstance(obj, tuple): for o in obj: @@ -234,18 +237,17 @@ def _does_obj_repr_evaluate_to_obj(obj): return False -#======================================================================================================================= +# ======================================================================================================================= # DictResolver -#======================================================================================================================= +# ======================================================================================================================= class DictResolver: - sort_keys = not IS_PY36_OR_GREATER def resolve(self, dct, key): if key in (GENERATED_LEN_ATTR_NAME, TOO_LARGE_ATTR): return None - if '(' not in key: + if "(" not in key: # we have to treat that because the dict resolver is also used to directly resolve the global and local # scopes (which already have the items directly) try: @@ -255,7 +257,7 @@ def resolve(self, dct, key): # ok, we have to iterate over the items to find the one that matches the id, because that's the only way # to actually find the reference from the string we have before. - expected_id = int(key.split('(')[-1][:-1]) + expected_id = int(key.split("(")[-1][:-1]) for key, val in dct.items(): if id(key) == expected_id: return val @@ -264,17 +266,17 @@ def resolve(self, dct, key): def key_to_str(self, key, fmt=None): if fmt is not None: - if fmt.get('hex', False): + if fmt.get("hex", False): safe_repr = SafeRepr() safe_repr.convert_to_hex = True return safe_repr(key) - return '%r' % (key,) + return "%r" % (key,) def init_dict(self): return {} def get_contents_debug_adapter_protocol(self, dct, fmt=None): - ''' + """ This method is to be used in the case where the variables are all saved by its id (and as such don't need to have the `resolve` method called later on, so, keys don't need to embed the reference in the key). @@ -282,7 +284,7 @@ def get_contents_debug_adapter_protocol(self, dct, fmt=None): Note that the return should be ordered. :return list(tuple(name:str, value:object, evaluateName:str)) - ''' + """ ret = [] i = 0 @@ -299,12 +301,12 @@ def get_contents_debug_adapter_protocol(self, dct, fmt=None): # If the key would be a duplicate, add the key id (otherwise # VSCode won't show all keys correctly). # See: https://github.com/microsoft/debugpy/issues/148 - key_as_str = '%s (id: %s)' % (key_as_str, id(key)) + key_as_str = "%s (id: %s)" % (key_as_str, id(key)) found_representations.add(key_as_str) if _does_obj_repr_evaluate_to_obj(key): s = self.key_to_str(key) # do not format the key - eval_key_str = '[%s]' % (s,) + eval_key_str = "[%s]" % (s,) else: eval_key_str = None ret.append((key_as_str, val, eval_key_str)) @@ -321,7 +323,7 @@ def get_contents_debug_adapter_protocol(self, dct, fmt=None): if self.sort_keys: ret = sorted(ret, key=lambda tup: sorted_attributes_key(tup[0])) - ret.append((GENERATED_LEN_ATTR_NAME, len(dct), partial(_apply_evaluate_name, evaluate_name='len(%s)'))) + ret.append((GENERATED_LEN_ATTR_NAME, len(dct), partial(_apply_evaluate_name, evaluate_name="len(%s)"))) return ret def get_dictionary(self, dct): @@ -331,7 +333,7 @@ def get_dictionary(self, dct): for key, val in dct.items(): i += 1 # we need to add the id because otherwise we cannot find the real object to get its contents later on. - key = '%s (%s)' % (self.key_to_str(key), id(key)) + key = "%s (%s)" % (self.key_to_str(key), id(key)) ret[key] = val if i >= pydevd_constants.PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS: ret[TOO_LARGE_ATTR] = TOO_LARGE_MSG % (pydevd_constants.PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS,) @@ -349,7 +351,6 @@ def _apply_evaluate_name(parent_name, evaluate_name): class MoreItemsRange: - def __init__(self, value, from_i, to_i): self.value = value self.from_i = from_i @@ -359,13 +360,13 @@ def get_contents_debug_adapter_protocol(self, _self, fmt=None): l = len(self.value) ret = [] - format_str = '%0' + str(int(len(str(l - 1)))) + 'd' - if fmt is not None and fmt.get('hex', False): - format_str = '0x%0' + str(int(len(hex(l).lstrip('0x')))) + 'x' + format_str = "%0" + str(int(len(str(l - 1)))) + "d" + if fmt is not None and fmt.get("hex", False): + format_str = "0x%0" + str(int(len(hex(l).lstrip("0x")))) + "x" - for i, item in enumerate(self.value[self.from_i:self.to_i]): + for i, item in enumerate(self.value[self.from_i : self.to_i]): i += self.from_i - ret.append((format_str % i, item, '[%s]' % i)) + ret.append((format_str % i, item, "[%s]" % i)) return ret def get_dictionary(self, _self, fmt=None): @@ -375,25 +376,23 @@ def get_dictionary(self, _self, fmt=None): return dct def resolve(self, attribute): - ''' + """ :param var: that's the original object we're dealing with. :param attribute: that's the key to resolve -- either the dict key in get_dictionary or the name in the dap protocol. - ''' + """ return self.value[int(attribute)] def __eq__(self, o): - return isinstance(o, MoreItemsRange) and self.value is o.value and \ - self.from_i == o.from_i and self.to_i == o.to_i + return isinstance(o, MoreItemsRange) and self.value is o.value and self.from_i == o.from_i and self.to_i == o.to_i def __str__(self): - return '[%s:%s]' % (self.from_i, self.to_i) + return "[%s:%s]" % (self.from_i, self.to_i) __repr__ = __str__ class MoreItems: - def __init__(self, value, handled_items): self.value = value self.handled_items = handled_items @@ -424,7 +423,7 @@ def get_dictionary(self, _self, fmt=None): return dct def resolve(self, attribute): - from_i, to_i = attribute[1:-1].split(':') + from_i, to_i = attribute[1:-1].split(":") from_i = int(from_i) to_i = int(to_i) return MoreItemsRange(self.value, from_i, to_i) @@ -433,15 +432,15 @@ def __eq__(self, o): return isinstance(o, MoreItems) and self.value is o.value def __str__(self): - return '...' + return "..." __repr__ = __str__ class ForwardInternalResolverToObject: - ''' + """ To be used when we provide some internal object that'll actually do the resolution. - ''' + """ def get_contents_debug_adapter_protocol(self, obj, fmt=None): return obj.get_contents_debug_adapter_protocol(fmt) @@ -454,25 +453,24 @@ def resolve(self, var, attribute): class TupleResolver: # to enumerate tuples and lists - def resolve(self, var, attribute): - ''' + """ :param var: that's the original object we're dealing with. :param attribute: that's the key to resolve -- either the dict key in get_dictionary or the name in the dap protocol. - ''' + """ if attribute in (GENERATED_LEN_ATTR_NAME, TOO_LARGE_ATTR): return None try: return var[int(attribute)] except: - if attribute == 'more': + if attribute == "more": return MoreItems(var, pydevd_constants.PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS) return getattr(var, attribute) def get_contents_debug_adapter_protocol(self, lst, fmt=None): - ''' + """ This method is to be used in the case where the variables are all saved by its id (and as such don't need to have the `resolve` method called later on, so, keys don't need to embed the reference in the key). @@ -480,17 +478,17 @@ def get_contents_debug_adapter_protocol(self, lst, fmt=None): Note that the return should be ordered. :return list(tuple(name:str, value:object, evaluateName:str)) - ''' + """ lst_len = len(lst) ret = [] - format_str = '%0' + str(int(len(str(lst_len - 1)))) + 'd' - if fmt is not None and fmt.get('hex', False): - format_str = '0x%0' + str(int(len(hex(lst_len).lstrip('0x')))) + 'x' + format_str = "%0" + str(int(len(str(lst_len - 1)))) + "d" + if fmt is not None and fmt.get("hex", False): + format_str = "0x%0" + str(int(len(hex(lst_len).lstrip("0x")))) + "x" initial_expanded = pydevd_constants.PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS for i, item in enumerate(lst): - ret.append((format_str % i, item, '[%s]' % i)) + ret.append((format_str % i, item, "[%s]" % i)) if i >= initial_expanded - 1: if (lst_len - initial_expanded) < pydevd_constants.PYDEVD_CONTAINER_BUCKET_SIZE: @@ -500,7 +498,7 @@ def get_contents_debug_adapter_protocol(self, lst, fmt=None): else: # Multiple buckets item = MoreItems(lst, initial_expanded) - ret.append(('more', item, None)) + ret.append(("more", item, None)) break # Needed in case the class extends the built-in type and has some additional fields. @@ -508,16 +506,16 @@ def get_contents_debug_adapter_protocol(self, lst, fmt=None): if from_default_resolver: ret = from_default_resolver + ret - ret.append((GENERATED_LEN_ATTR_NAME, len(lst), partial(_apply_evaluate_name, evaluate_name='len(%s)'))) + ret.append((GENERATED_LEN_ATTR_NAME, len(lst), partial(_apply_evaluate_name, evaluate_name="len(%s)"))) return ret def get_dictionary(self, var, fmt={}): l = len(var) d = {} - format_str = '%0' + str(int(len(str(l - 1)))) + 'd' - if fmt is not None and fmt.get('hex', False): - format_str = '0x%0' + str(int(len(hex(l).lstrip('0x')))) + 'x' + format_str = "%0" + str(int(len(str(l - 1)))) + "d" + if fmt is not None and fmt.get("hex", False): + format_str = "0x%0" + str(int(len(hex(l).lstrip("0x")))) + "x" initial_expanded = pydevd_constants.PYDEVD_CONTAINER_INITIAL_EXPANDED_ITEMS for i, item in enumerate(var): @@ -525,7 +523,7 @@ def get_dictionary(self, var, fmt={}): if i >= initial_expanded - 1: item = MoreItems(var, initial_expanded) - d['more'] = item + d["more"] = item break # in case if the class extends built-in type and has some additional fields @@ -535,13 +533,13 @@ def get_dictionary(self, var, fmt={}): return d -#======================================================================================================================= +# ======================================================================================================================= # SetResolver -#======================================================================================================================= +# ======================================================================================================================= class SetResolver: - ''' - Resolves a set as dict id(object)->object - ''' + """ + Resolves a set as dict id(object)->object + """ def get_contents_debug_adapter_protocol(self, obj, fmt=None): ret = [] @@ -557,7 +555,7 @@ def get_contents_debug_adapter_protocol(self, obj, fmt=None): from_default_resolver = defaultResolver.get_contents_debug_adapter_protocol(obj, fmt=fmt) if from_default_resolver: ret = from_default_resolver + ret - ret.append((GENERATED_LEN_ATTR_NAME, len(obj), partial(_apply_evaluate_name, evaluate_name='len(%s)'))) + ret.append((GENERATED_LEN_ATTR_NAME, len(obj), partial(_apply_evaluate_name, evaluate_name="len(%s)"))) return ret def resolve(self, var, attribute): @@ -573,7 +571,7 @@ def resolve(self, var, attribute): if id(v) == attribute: return v - raise UnableToResolveVariableException('Unable to resolve %s in %s' % (attribute, var)) + raise UnableToResolveVariableException("Unable to resolve %s in %s" % (attribute, var)) def get_dictionary(self, var): d = {} @@ -609,11 +607,10 @@ def change_var_from_name(self, container, name, new_value): return None -#======================================================================================================================= +# ======================================================================================================================= # InstanceResolver -#======================================================================================================================= +# ======================================================================================================================= class InstanceResolver: - def resolve(self, var, attribute): field = var.__class__.getDeclaredField(attribute) field.setAccessible(True) @@ -634,13 +631,13 @@ def get_dictionary(self, obj): return ret -#======================================================================================================================= +# ======================================================================================================================= # JyArrayResolver -#======================================================================================================================= +# ======================================================================================================================= class JyArrayResolver: - ''' - This resolves a regular Object[] array from java - ''' + """ + This resolves a regular Object[] array from java + """ def resolve(self, var, attribute): if attribute == GENERATED_LEN_ATTR_NAME: @@ -651,24 +648,23 @@ def get_dictionary(self, obj): ret = {} for i in range(len(obj)): - ret[ i ] = obj[i] + ret[i] = obj[i] ret[GENERATED_LEN_ATTR_NAME] = len(obj) return ret -#======================================================================================================================= +# ======================================================================================================================= # MultiValueDictResolver -#======================================================================================================================= +# ======================================================================================================================= class MultiValueDictResolver(DictResolver): - def resolve(self, dct, key): if key in (GENERATED_LEN_ATTR_NAME, TOO_LARGE_ATTR): return None # ok, we have to iterate over the items to find the one that matches the id, because that's the only way # to actually find the reference from the string we have before. - expected_id = int(key.split('(')[-1][:-1]) + expected_id = int(key.split("(")[-1][:-1]) for key in list(dct.keys()): val = dct.getlist(key) if id(key) == expected_id: @@ -677,11 +673,10 @@ def resolve(self, dct, key): raise UnableToResolveVariableException() -#======================================================================================================================= +# ======================================================================================================================= # DjangoFormResolver -#======================================================================================================================= +# ======================================================================================================================= class DjangoFormResolver(DefaultResolver): - def get_dictionary(self, var, names=None): # Do not call self.errors because it is a property and has side effects. names, used___dict__ = self.get_names(var) @@ -701,53 +696,51 @@ def get_dictionary(self, var, names=None): return d -#======================================================================================================================= +# ======================================================================================================================= # DequeResolver -#======================================================================================================================= +# ======================================================================================================================= class DequeResolver(TupleResolver): - def get_dictionary(self, var): d = TupleResolver.get_dictionary(self, var) - d['maxlen'] = getattr(var, 'maxlen', None) + d["maxlen"] = getattr(var, "maxlen", None) return d -#======================================================================================================================= +# ======================================================================================================================= # OrderedDictResolver -#======================================================================================================================= +# ======================================================================================================================= class OrderedDictResolver(DictResolver): - sort_keys = False def init_dict(self): return OrderedDict() -#======================================================================================================================= +# ======================================================================================================================= # FrameResolver -#======================================================================================================================= +# ======================================================================================================================= class FrameResolver: - ''' + """ This resolves a frame. - ''' + """ def resolve(self, obj, attribute): - if attribute == '__internals__': + if attribute == "__internals__": return defaultResolver.get_dictionary(obj) - if attribute == 'stack': + if attribute == "stack": return self.get_frame_stack(obj) - if attribute == 'f_locals': + if attribute == "f_locals": return obj.f_locals return None def get_dictionary(self, obj): ret = {} - ret['__internals__'] = defaultResolver.get_dictionary(obj) - ret['stack'] = self.get_frame_stack(obj) - ret['f_locals'] = obj.f_locals + ret["__internals__"] = defaultResolver.get_dictionary(obj) + ret["stack"] = self.get_frame_stack(obj) + ret["f_locals"] = obj.f_locals return ret def get_frame_stack(self, frame): @@ -763,12 +756,12 @@ def get_frame_stack(self, frame): def get_frame_name(self, frame): if frame is None: - return 'None' + return "None" try: name = basename(frame.f_code.co_filename) - return 'frame: %s [%s:%s] id:%s' % (frame.f_code.co_name, name, frame.f_lineno, id(frame)) + return "frame: %s [%s:%s] id:%s" % (frame.f_code.co_name, name, frame.f_lineno, id(frame)) except: - return 'frame object' + return "frame object" defaultResolver = DefaultResolver() @@ -787,7 +780,6 @@ def get_frame_name(self, frame): class InspectStub: - def isbuiltin(self, _args): return False @@ -805,23 +797,23 @@ def get_var_scope(attr_name, attr_value, evaluate_name, handle_return_values): if attr_name.startswith("'"): if attr_name.endswith("'"): # i.e.: strings denote that it is a regular value in some container. - return '' + return "" else: i = attr_name.find("__' (") if i >= 0: # Handle attr_name such as: >>'__name__' (1732494379184)<< - attr_name = attr_name[1: i + 2] + attr_name = attr_name[1 : i + 2] if handle_return_values and attr_name == RETURN_VALUES_DICT: - return '' + return "" elif attr_name == GENERATED_LEN_ATTR_NAME: - return '' + return "" - if attr_name.startswith('__') and attr_name.endswith('__'): + if attr_name.startswith("__") and attr_name.endswith("__"): return DAPGrouper.SCOPE_SPECIAL_VARS - if attr_name.startswith('_') or attr_name.endswith('__'): + if attr_name.startswith("_") or attr_name.endswith("__"): return DAPGrouper.SCOPE_PROTECTED_VARS try: @@ -835,4 +827,4 @@ def get_var_scope(attr_name, attr_value, evaluate_name, handle_return_values): if DebugInfoHolder.DEBUG_TRACE_LEVEL > 0: pydev_log.exception() - return '' + return "" diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py index 09b713f06..ba8f7afca 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py @@ -23,7 +23,8 @@ import os __all__ = [ - "run_module", "run_path", + "run_module", + "run_path", ] @@ -81,7 +82,6 @@ def __exit__(self, *args): class _ModifiedArgv0(object): - def __init__(self, value): self.value = value self._saved_value = self._sentinel = object() @@ -98,9 +98,7 @@ def __exit__(self, *args): # TODO: Replace these helpers with importlib._bootstrap_external functions. -def _run_code(code, run_globals, init_globals=None, - mod_name=None, mod_spec=None, - pkg_name=None, script_name=None): +def _run_code(code, run_globals, init_globals=None, mod_name=None, mod_spec=None, pkg_name=None, script_name=None): """Helper to run code in nominated namespace""" if init_globals is not None: run_globals.update(init_globals) @@ -114,26 +112,19 @@ def _run_code(code, run_globals, init_globals=None, cached = mod_spec.cached if pkg_name is None: pkg_name = mod_spec.parent - run_globals.update(__name__=mod_name, - __file__=fname, - __cached__=cached, - __doc__=None, - __loader__=loader, - __package__=pkg_name, - __spec__=mod_spec) + run_globals.update( + __name__=mod_name, __file__=fname, __cached__=cached, __doc__=None, __loader__=loader, __package__=pkg_name, __spec__=mod_spec + ) exec(code, run_globals) return run_globals -def _run_module_code(code, init_globals=None, - mod_name=None, mod_spec=None, - pkg_name=None, script_name=None): +def _run_module_code(code, init_globals=None, mod_name=None, mod_spec=None, pkg_name=None, script_name=None): """Helper to run code in new namespace with sys modified""" fname = script_name if mod_spec is None else mod_spec.origin with _TempModule(mod_name) as temp_module, _ModifiedArgv0(fname): mod_globals = temp_module.module.__dict__ - _run_code(code, mod_globals, init_globals, - mod_name, mod_spec, pkg_name, script_name) + _run_code(code, mod_globals, init_globals, mod_name, mod_spec, pkg_name, script_name) # Copy the globals of the temporary module, as they # may be cleared when the temporary module goes away return mod_globals.copy() @@ -152,17 +143,19 @@ def _get_module_details(mod_name, error=ImportError): # If the parent or higher ancestor package is missing, let the # error be raised by find_spec() below and then be caught. But do # not allow other errors to be caught. - if e.name is None or (e.name != pkg_name and - not pkg_name.startswith(e.name + ".")): + if e.name is None or (e.name != pkg_name and not pkg_name.startswith(e.name + ".")): raise # Warn if the module has already been imported under its normal name existing = sys.modules.get(mod_name) if existing is not None and not hasattr(existing, "__path__"): from warnings import warn - msg = "{mod_name!r} found in sys.modules after import of " \ - "package {pkg_name!r}, but prior to execution of " \ - "{mod_name!r}; this may result in unpredictable " \ + + msg = ( + "{mod_name!r} found in sys.modules after import of " + "package {pkg_name!r}, but prior to execution of " + "{mod_name!r}; this may result in unpredictable " "behaviour".format(mod_name=mod_name, pkg_name=pkg_name) + ) warn(RuntimeWarning(msg)) try: @@ -173,8 +166,7 @@ def _get_module_details(mod_name, error=ImportError): # pkgutil previously raised ImportError msg = "Error while finding module specification for {!r} ({}: {})" if mod_name.endswith(".py"): - msg += (f". Try using '{mod_name[:-3]}' instead of " - f"'{mod_name}' as the module name.") + msg += f". Try using '{mod_name[:-3]}' instead of " f"'{mod_name}' as the module name." raise error(msg.format(mod_name, type(ex).__name__, ex)) from ex if spec is None: raise error("No module named %s" % mod_name) @@ -187,12 +179,10 @@ def _get_module_details(mod_name, error=ImportError): except error as e: if mod_name not in sys.modules: raise # No module loaded; being a package is irrelevant - raise error(("%s; %r is a package and cannot " + - "be directly executed") % (e, mod_name)) + raise error(("%s; %r is a package and cannot " + "be directly executed") % (e, mod_name)) loader = spec.loader if loader is None: - raise error("%r is a namespace package and cannot be executed" - % mod_name) + raise error("%r is a namespace package and cannot be executed" % mod_name) try: code = loader.get_code(mod_name) except ImportError as e: @@ -213,16 +203,16 @@ class _Error(Exception): def _run_module_as_main(mod_name, alter_argv=True): """Runs the designated module in the __main__ namespace - Note that the executed module will have full access to the - __main__ namespace. If this is not desirable, the run_module() - function should be used to run the module code in a fresh namespace. + Note that the executed module will have full access to the + __main__ namespace. If this is not desirable, the run_module() + function should be used to run the module code in a fresh namespace. - At the very least, these variables in __main__ will be overwritten: - __name__ - __file__ - __cached__ - __loader__ - __package__ + At the very least, these variables in __main__ will be overwritten: + __name__ + __file__ + __cached__ + __loader__ + __package__ """ try: if alter_argv or mod_name != "__main__": # i.e. -m switch @@ -235,15 +225,13 @@ def _run_module_as_main(mod_name, alter_argv=True): main_globals = sys.modules["__main__"].__dict__ if alter_argv: sys.argv[0] = mod_spec.origin - return _run_code(code, main_globals, None, - "__main__", mod_spec) + return _run_code(code, main_globals, None, "__main__", mod_spec) -def run_module(mod_name, init_globals=None, - run_name=None, alter_sys=False): +def run_module(mod_name, init_globals=None, run_name=None, alter_sys=False): """Execute a module's code without importing it - Returns the resulting top level namespace dictionary + Returns the resulting top level namespace dictionary """ mod_name, mod_spec, code = _get_module_details(mod_name) if run_name is None: @@ -267,8 +255,7 @@ def _get_main_module_details(error=ImportError): return _get_module_details(main_name) except ImportError as exc: if main_name in str(exc): - raise error("can't find %r module in %r" % - (main_name, sys.path[0])) from exc + raise error("can't find %r module in %r" % (main_name, sys.path[0])) from exc raise finally: sys.modules[main_name] = saved_main @@ -279,31 +266,33 @@ def _get_main_module_details(error=ImportError): except AttributeError: # Compatibility with Python 3.6/3.7 import tokenize + io_open_code = tokenize.open def _get_code_from_file(run_name, fname): # Check for a compiled file first from pkgutil import read_code + decoded_path = os.path.abspath(os.fsdecode(fname)) with io_open_code(decoded_path) as f: code = read_code(f) if code is None: # That didn't work, so try it as normal source code with io_open_code(decoded_path) as f: - code = compile(f.read(), fname, 'exec') + code = compile(f.read(), fname, "exec") return code, fname def run_path(path_name, init_globals=None, run_name=None): """Execute code located at the specified filesystem location - Returns the resulting top level namespace dictionary + Returns the resulting top level namespace dictionary - The file path may refer directly to a Python script (i.e. - one that could be directly executed with execfile) or else - it may refer to a zipfile or directory containing a top - level __main__.py script. + The file path may refer directly to a Python script (i.e. + one that could be directly executed with execfile) or else + it may refer to a zipfile or directory containing a top + level __main__.py script. """ if run_name is None: run_name = "" @@ -311,15 +300,14 @@ def run_path(path_name, init_globals=None, run_name=None): importer = pkgutil_get_importer(path_name) # Trying to avoid importing imp so as to not consume the deprecation warning. is_NullImporter = False - if type(importer).__module__ == 'imp': - if type(importer).__name__ == 'NullImporter': + if type(importer).__module__ == "imp": + if type(importer).__name__ == "NullImporter": is_NullImporter = True if isinstance(importer, type(None)) or is_NullImporter: # Not a valid sys.path entry, so run the code directly # execfile() doesn't help as we want to allow compiled files code, fname = _get_code_from_file(run_name, path_name) - return _run_module_code(code, init_globals, run_name, - pkg_name=pkg_name, script_name=fname) + return _run_module_code(code, init_globals, run_name, pkg_name=pkg_name, script_name=fname) else: # Finder is defined for path, so add it to # the start of sys.path @@ -332,11 +320,9 @@ def run_path(path_name, init_globals=None, run_name=None): # code. If we don't do this, a __loader__ attribute in the # existing __main__ module may prevent location of the new module. mod_name, mod_spec, code = _get_main_module_details() - with _TempModule(run_name) as temp_module, \ - _ModifiedArgv0(path_name): + with _TempModule(run_name) as temp_module, _ModifiedArgv0(path_name): mod_globals = temp_module.module.__dict__ - return _run_code(code, mod_globals, init_globals, - run_name, mod_spec, pkg_name).copy() + return _run_code(code, mod_globals, init_globals, run_name, mod_spec, pkg_name).copy() finally: try: sys.path.remove(path_name) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py index db14fc355..df5e8f4a0 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py @@ -19,15 +19,14 @@ class SafeRepr(object): # String types are truncated to maxstring_outer when at the outer- # most level, and truncated to maxstring_inner characters inside # collections. - maxstring_outer = 2 ** 16 + maxstring_outer = 2**16 maxstring_inner = 128 string_types = (str, bytes) bytes = bytes - set_info = (set, '{', '}', False) - frozenset_info = (frozenset, 'frozenset({', '})', False) + set_info = (set, "{", "}", False) + frozenset_info = (frozenset, "frozenset({", "})", False) int_types = (int,) - long_iter_types = (list, tuple, bytearray, range, - dict, set, frozenset) + long_iter_types = (list, tuple, bytearray, range, dict, set, frozenset) # Collection types are recursively iterated for each limit in # maxcollection. @@ -37,52 +36,54 @@ class SafeRepr(object): # comma if there is only one element. (Using a sequence rather than a # mapping because we use isinstance() to determine the matching type.) collection_types = [ - (tuple, '(', ')', True), - (list, '[', ']', False), + (tuple, "(", ")", True), + (list, "[", "]", False), frozenset_info, set_info, ] try: from collections import deque - collection_types.append((deque, 'deque([', '])', False)) + + collection_types.append((deque, "deque([", "])", False)) except Exception: pass # type, prefix string, suffix string, item prefix string, # item key/value separator, item suffix string - dict_types = [(dict, '{', '}', '', ': ', '')] + dict_types = [(dict, "{", "}", "", ": ", "")] try: from collections import OrderedDict - dict_types.append((OrderedDict, 'OrderedDict([', '])', '(', ', ', ')')) + + dict_types.append((OrderedDict, "OrderedDict([", "])", "(", ", ", ")")) except Exception: pass # All other types are treated identically to strings, but using # different limits. - maxother_outer = 2 ** 16 + maxother_outer = 2**16 maxother_inner = 128 convert_to_hex = False raw_value = False def __call__(self, obj): - ''' + """ :param object obj: The object for which we want a representation. :return str: Returns bytes encoded as utf-8 on py2 and str on py3. - ''' + """ try: - return ''.join(self._repr(obj, 0)) + return "".join(self._repr(obj, 0)) except Exception: try: - return 'An exception was raised: %r' % sys.exc_info()[1] + return "An exception was raised: %r" % sys.exc_info()[1] except Exception: - return 'An exception was raised' + return "An exception was raised" def _repr(self, obj, level): - '''Returns an iterable of the parts in the final repr string.''' + """Returns an iterable of the parts in the final repr string.""" try: obj_repr = type(obj).__repr__ @@ -102,8 +103,7 @@ def has_obj_repr(t): for t, prefix, suffix, item_prefix, item_sep, item_suffix in self.dict_types: # noqa if isinstance(obj, t) and has_obj_repr(t): - return self._repr_dict(obj, level, prefix, suffix, - item_prefix, item_sep, item_suffix) + return self._repr_dict(obj, level, prefix, suffix, item_prefix, item_sep, item_suffix) for t in self.string_types: if isinstance(obj, t) and has_obj_repr(t): @@ -125,7 +125,7 @@ def _is_long_iter(self, obj, level=0): return len(obj) > self.maxstring_inner # If it's not an iterable (and not a string), it's fine. - if not hasattr(obj, '__iter__'): + if not hasattr(obj, "__iter__"): return False # If it's not an instance of these collection types then it @@ -148,8 +148,8 @@ def _is_long_iter(self, obj, level=0): # numpy and scipy collections (ndarray etc) have # self-truncating repr, so they're always safe. try: - module = type(obj).__module__.partition('.')[0] - if module in ('numpy', 'scipy'): + module = type(obj).__module__.partition(".")[0] + if module in ("numpy", "scipy"): return False except Exception: pass @@ -160,7 +160,7 @@ def _is_long_iter(self, obj, level=0): # It is too long if the length exceeds the limit, or any # of its elements are long iterables. - if hasattr(obj, '__len__'): + if hasattr(obj, "__len__"): try: size = len(obj) except Exception: @@ -174,23 +174,22 @@ def _is_long_iter(self, obj, level=0): # If anything breaks, assume the worst case. return True - def _repr_iter(self, obj, level, prefix, suffix, - comma_after_single_element=False): + def _repr_iter(self, obj, level, prefix, suffix, comma_after_single_element=False): yield prefix if level >= len(self.maxcollection): - yield '...' + yield "..." else: count = self.maxcollection[level] yield_comma = False for item in obj: if yield_comma: - yield ', ' + yield ", " yield_comma = True count -= 1 if count <= 0: - yield '...' + yield "..." break for p in self._repr(item, 100 if item is obj else level + 1): @@ -198,27 +197,26 @@ def _repr_iter(self, obj, level, prefix, suffix, else: if comma_after_single_element: if count == self.maxcollection[level] - 1: - yield ',' + yield "," yield suffix def _repr_long_iter(self, obj): try: length = hex(len(obj)) if self.convert_to_hex else len(obj) - obj_repr = '<%s, len() = %s>' % (type(obj).__name__, length) + obj_repr = "<%s, len() = %s>" % (type(obj).__name__, length) except Exception: try: - obj_repr = '<' + type(obj).__name__ + '>' + obj_repr = "<" + type(obj).__name__ + ">" except Exception: - obj_repr = '' + obj_repr = "" yield obj_repr - def _repr_dict(self, obj, level, prefix, suffix, - item_prefix, item_sep, item_suffix): + def _repr_dict(self, obj, level, prefix, suffix, item_prefix, item_sep, item_suffix): if not obj: yield prefix + suffix return if level >= len(self.maxcollection): - yield prefix + '...' + suffix + yield prefix + "..." + suffix return yield prefix @@ -238,12 +236,12 @@ def _repr_dict(self, obj, level, prefix, suffix, for key in sorted_keys: if yield_comma: - yield ', ' + yield ", " yield_comma = True count -= 1 if count <= 0: - yield '...' + yield "..." break yield item_prefix @@ -255,7 +253,7 @@ def _repr_dict(self, obj, level, prefix, suffix, try: item = obj[key] except Exception: - yield '' + yield "" else: for p in self._repr(item, 100 if item is obj else level + 1): yield p @@ -268,7 +266,7 @@ def _repr_str(self, obj, level): if self.raw_value: # For raw value retrieval, ignore all limits. if isinstance(obj, bytes): - yield obj.decode('latin-1') + yield obj.decode("latin-1") else: yield obj return @@ -304,32 +302,30 @@ def _repr_str(self, obj, level): part1 = obj[:left_count] part1 = repr(part1) - part1 = part1[:part1.rindex("'")] # Remove the last ' + part1 = part1[: part1.rindex("'")] # Remove the last ' part2 = obj[-right_count:] part2 = repr(part2) - part2 = part2[part2.index("'") + 1:] # Remove the first ' (and possibly u or b). + part2 = part2[part2.index("'") + 1 :] # Remove the first ' (and possibly u or b). yield part1 - yield '...' + yield "..." yield part2 except: # This shouldn't really happen, but let's play it safe. - pydev_log.exception('Error getting string representation to show.') - for part in self._repr_obj(obj, level, - self.maxother_inner, self.maxother_outer): + pydev_log.exception("Error getting string representation to show.") + for part in self._repr_obj(obj, level, self.maxother_inner, self.maxother_outer): yield part def _repr_other(self, obj, level): - return self._repr_obj(obj, level, - self.maxother_inner, self.maxother_outer) + return self._repr_obj(obj, level, self.maxother_inner, self.maxother_outer) def _repr_obj(self, obj, level, limit_inner, limit_outer): try: if self.raw_value: # For raw value retrieval, ignore all limits. if isinstance(obj, bytes): - yield obj.decode('latin-1') + yield obj.decode("latin-1") return try: @@ -339,7 +335,7 @@ def _repr_obj(self, obj, level, limit_inner, limit_outer): return else: # Map bytes to Unicode codepoints with same values. - yield mv.tobytes().decode('latin-1') + yield mv.tobytes().decode("latin-1") return elif self.convert_to_hex and isinstance(obj, self.int_types): obj_repr = hex(obj) @@ -350,9 +346,9 @@ def _repr_obj(self, obj, level, limit_inner, limit_outer): obj_repr = object.__repr__(obj) except Exception: try: - obj_repr = '' # noqa + obj_repr = "" # noqa except Exception: - obj_repr = '' + obj_repr = "" limit = limit_inner if level > 0 else limit_outer @@ -366,7 +362,7 @@ def _repr_obj(self, obj, level, limit_inner, limit_outer): left_count, right_count = max(1, int(2 * limit / 3)), max(1, int(limit / 3)) # noqa yield obj_repr[:left_count] - yield '...' + yield "..." yield obj_repr[-right_count:] def _convert_to_unicode_or_bytes_repr(self, obj_repr): @@ -377,7 +373,7 @@ def _bytes_as_unicode_if_possible(self, obj_repr): # locale.getpreferredencoding() and 'utf-8). If no encoding can decode # the input, we return the original bytes. try_encodings = [] - encoding = self.sys_stdout_encoding or getattr(sys.stdout, 'encoding', '') + encoding = self.sys_stdout_encoding or getattr(sys.stdout, "encoding", "") if encoding: try_encodings.append(encoding.lower()) @@ -387,8 +383,8 @@ def _bytes_as_unicode_if_possible(self, obj_repr): if preferred_encoding not in try_encodings: try_encodings.append(preferred_encoding) - if 'utf-8' not in try_encodings: - try_encodings.append('utf-8') + if "utf-8" not in try_encodings: + try_encodings.append("utf-8") for encoding in try_encodings: try: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py index c6bc37542..023370b69 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_save_locals.py @@ -40,13 +40,14 @@ def make_save_locals_impl(): lock being taken in different order in different threads. """ try: - if '__pypy__' in sys.builtin_module_names: + if "__pypy__" in sys.builtin_module_names: import __pypy__ # @UnresolvedImport + save_locals = __pypy__.locals_to_fast except: pass else: - if '__pypy__' in sys.builtin_module_names: + if "__pypy__" in sys.builtin_module_names: def save_locals_pypy_impl(frame): save_locals(frame) @@ -55,6 +56,7 @@ def save_locals_pypy_impl(frame): try: import ctypes + locals_to_fast = ctypes.pythonapi.PyFrame_LocalsToFast except: pass diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py index 3877e6222..9664364f0 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_signature.py @@ -14,7 +14,6 @@ class Signature(object): - def __init__(self, file, name): self.file = file self.name = name @@ -42,37 +41,36 @@ def __str__(self): return "%s %s(%s)" % (self.file, self.name, ", ".join(self.args_str)) -def get_type_of_value(value, ignore_module_name=('__main__', '__builtin__', 'builtins'), recursive=False): +def get_type_of_value(value, ignore_module_name=("__main__", "__builtin__", "builtins"), recursive=False): tp = type(value) class_name = tp.__name__ - if class_name == 'instance': # old-style classes + if class_name == "instance": # old-style classes tp = value.__class__ class_name = tp.__name__ - if hasattr(tp, '__module__') and tp.__module__ and tp.__module__ not in ignore_module_name: + if hasattr(tp, "__module__") and tp.__module__ and tp.__module__ not in ignore_module_name: class_name = "%s.%s" % (tp.__module__, class_name) - if class_name == 'list': - class_name = 'List' + if class_name == "list": + class_name = "List" if len(value) > 0 and recursive: - class_name += '[%s]' % get_type_of_value(value[0], recursive=recursive) + class_name += "[%s]" % get_type_of_value(value[0], recursive=recursive) return class_name - if class_name == 'dict': - class_name = 'Dict' + if class_name == "dict": + class_name = "Dict" if len(value) > 0 and recursive: - for (k, v) in value.items(): - class_name += '[%s, %s]' % (get_type_of_value(k, recursive=recursive), - get_type_of_value(v, recursive=recursive)) + for k, v in value.items(): + class_name += "[%s, %s]" % (get_type_of_value(k, recursive=recursive), get_type_of_value(v, recursive=recursive)) break return class_name - if class_name == 'tuple': - class_name = 'Tuple' + if class_name == "tuple": + class_name = "Tuple" if len(value) > 0 and recursive: - class_name += '[' - class_name += ', '.join(get_type_of_value(v, recursive=recursive) for v in value) - class_name += ']' + class_name += "[" + class_name += ", ".join(get_type_of_value(v, recursive=recursive) for v in value) + class_name += "]" return class_name @@ -85,7 +83,6 @@ def _modname(path): class SignatureFactory(object): - def __init__(self): self._caller_cache = {} self.cache = CallSignatureCache() @@ -130,7 +127,7 @@ def file_module_function_of(self, frame): # this code is take from trace module def get_signature_info(signature): - return signature.file, signature.name, ' '.join([arg[1] for arg in signature.args]) + return signature.file, signature.name, " ".join([arg[1] for arg in signature.args]) def get_frame_info(frame): @@ -139,7 +136,6 @@ def get_frame_info(frame): class CallSignatureCache(object): - def __init__(self): self.cache = {} @@ -159,16 +155,21 @@ def is_in_cache(self, signature): def create_signature_message(signature): cmdTextList = [""] - cmdTextList.append('' % (pydevd_xml.make_valid_xml_value(signature.file), pydevd_xml.make_valid_xml_value(signature.name))) + cmdTextList.append( + '' + % (pydevd_xml.make_valid_xml_value(signature.file), pydevd_xml.make_valid_xml_value(signature.name)) + ) for arg in signature.args: - cmdTextList.append('' % (pydevd_xml.make_valid_xml_value(arg[0]), pydevd_xml.make_valid_xml_value(arg[1]))) + cmdTextList.append( + '' % (pydevd_xml.make_valid_xml_value(arg[0]), pydevd_xml.make_valid_xml_value(arg[1])) + ) if signature.return_type is not None: cmdTextList.append('' % (pydevd_xml.make_valid_xml_value(signature.return_type))) cmdTextList.append("") - cmdText = ''.join(cmdTextList) + cmdText = "".join(cmdTextList) return NetCommand(CMD_SIGNATURE_CALL_TRACE, 0, cmdText) @@ -198,4 +199,3 @@ def send_signature_return_trace(dbg, frame, filename, return_value): return True return False - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py index 545530718..7e75c8271 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_source_mapping.py @@ -4,8 +4,7 @@ class SourceMappingEntry(object): - - __slots__ = ['source_filename', 'line', 'end_line', 'runtime_line', 'runtime_source'] + __slots__ = ["source_filename", "line", "end_line", "runtime_line", "runtime_source"] def __init__(self, line, end_line, runtime_line, runtime_source): assert isinstance(runtime_source, str) @@ -28,14 +27,12 @@ def contains_runtime_line(self, i): return self.runtime_line <= i <= runtime_end_line def __str__(self): - return 'SourceMappingEntry(%s)' % ( - ', '.join('%s=%r' % (attr, getattr(self, attr)) for attr in self.__slots__)) + return "SourceMappingEntry(%s)" % (", ".join("%s=%r" % (attr, getattr(self, attr)) for attr in self.__slots__)) __repr__ = __str__ class SourceMapping(object): - def __init__(self, on_source_mapping_changed=NULL): self._mappings_to_server = {} # dict(normalized(file.py) to [SourceMappingEntry]) self._mappings_to_client = {} # dict( to File.py) @@ -43,7 +40,7 @@ def __init__(self, on_source_mapping_changed=NULL): self._on_source_mapping_changed = on_source_mapping_changed def set_source_mapping(self, absolute_filename, mapping): - ''' + """ :param str absolute_filename: The filename for the source mapping (bytes on py2 and str on py3). @@ -53,7 +50,7 @@ def set_source_mapping(self, absolute_filename, mapping): :return str: An error message if it was not possible to set the mapping or an empty string if everything is ok. - ''' + """ # Let's first validate if it's ok to apply that mapping. # File mappings must be 1:N, not M:N (i.e.: if there's a mapping from file1.py to , # there can be no other mapping from any other file to ). @@ -63,8 +60,12 @@ def set_source_mapping(self, absolute_filename, mapping): for map_entry in mapping: existing_source_filename = self._mappings_to_client.get(map_entry.runtime_source) if existing_source_filename and existing_source_filename != absolute_filename: - return 'Cannot apply mapping from %s to %s (it conflicts with mapping: %s to %s)' % ( - absolute_filename, map_entry.runtime_source, existing_source_filename, map_entry.runtime_source) + return "Cannot apply mapping from %s to %s (it conflicts with mapping: %s to %s)" % ( + absolute_filename, + map_entry.runtime_source, + existing_source_filename, + map_entry.runtime_source, + ) try: absolute_normalized_filename = pydevd_file_utils.normcase(absolute_filename) @@ -72,17 +73,17 @@ def set_source_mapping(self, absolute_filename, mapping): for map_entry in current_mapping: del self._mappings_to_client[map_entry.runtime_source] - self._mappings_to_server[absolute_normalized_filename] = sorted(mapping, key=lambda entry:entry.line) + self._mappings_to_server[absolute_normalized_filename] = sorted(mapping, key=lambda entry: entry.line) for map_entry in mapping: self._mappings_to_client[map_entry.runtime_source] = absolute_filename finally: self._cache.clear() self._on_source_mapping_changed() - return '' + return "" def map_to_client(self, runtime_source_filename, lineno): - key = (lineno, 'client', runtime_source_filename) + key = (lineno, "client", runtime_source_filename) try: return self._cache[key] except KeyError: @@ -97,13 +98,13 @@ def map_to_client(self, runtime_source_filename, lineno): return self._cache[key] def has_mapping_entry(self, runtime_source_filename): - ''' + """ :param runtime_source_filename: Something as - ''' + """ # Note that we're not interested in the line here, just on knowing if a given filename # (from the server) has a mapping for it. - key = ('has_entry', runtime_source_filename) + key = ("has_entry", runtime_source_filename) try: return self._cache[key] except KeyError: @@ -117,18 +118,17 @@ def has_mapping_entry(self, runtime_source_filename): return self._cache[key] def map_to_server(self, absolute_filename, lineno): - ''' + """ Convert something as 'file1.py' at line 10 to '' at line 2. Note that the name should be already normalized at this point. - ''' + """ absolute_normalized_filename = pydevd_file_utils.normcase(absolute_filename) changed = False mappings = self._mappings_to_server.get(absolute_normalized_filename) if mappings: - - i = bisect.bisect(KeyifyList(mappings, lambda entry:entry.line), lineno) + i = bisect.bisect(KeyifyList(mappings, lambda entry: entry.line), lineno) if i >= len(mappings): i -= 1 @@ -150,4 +150,3 @@ def map_to_server(self, absolute_filename, lineno): changed = True return absolute_filename, lineno, changed - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py index 44bb768ac..ba574e944 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_stackless.py @@ -14,11 +14,11 @@ # Used so that we don't loose the id (because we'll remove when it's not alive and would generate a new id for the # same tasklet). class TaskletToLastId: - ''' + """ So, why not a WeakKeyDictionary? The problem is that removals from the WeakKeyDictionary will create a new tasklet (as it adds a callback to remove the key when it's garbage-collected), so, we can get into a recursion. - ''' + """ def __init__(self): self.tasklet_ref_to_last_id = {} @@ -39,11 +39,10 @@ def __setitem__(self, tasklet, last_id): _tasklet_to_last_id = TaskletToLastId() -#======================================================================================================================= +# ======================================================================================================================= # _TaskletInfo -#======================================================================================================================= +# ======================================================================================================================= class _TaskletInfo: - _last_id = 0 def __init__(self, tasklet_weakref, tasklet): @@ -64,21 +63,21 @@ def update_name(self): tasklet = self.tasklet_weakref() if tasklet: if tasklet.blocked: - state = 'blocked' + state = "blocked" elif tasklet.paused: - state = 'paused' + state = "paused" elif tasklet.scheduled: - state = 'scheduled' + state = "scheduled" else: - state = '' + state = "" try: name = tasklet.name except AttributeError: if tasklet.is_main: - name = 'MainTasklet' + name = "MainTasklet" else: - name = 'Tasklet-%s' % (self._tasklet_id,) + name = "Tasklet-%s" % (self._tasklet_id,) thread_id = tasklet.thread_id if thread_id != -1: @@ -100,14 +99,13 @@ def update_name(self): tid = id(tasklet) tasklet = None else: - state = 'dead' - name = 'Tasklet-%s' % (self._tasklet_id,) + state = "dead" + name = "Tasklet-%s" % (self._tasklet_id,) thread_name = "" - tid = '-' - self.tasklet_name = '%s %s %s (%s)' % (state, name, thread_name, tid) + tid = "-" + self.tasklet_name = "%s %s %s (%s)" % (state, name, thread_name, tid) if not hasattr(stackless.tasklet, "trace_function"): - # bug https://bitbucket.org/stackless-dev/stackless/issue/42 # is not fixed. Stackless releases before 2014 def update_name(self): @@ -117,9 +115,9 @@ def update_name(self): name = tasklet.name except AttributeError: if tasklet.is_main: - name = 'MainTasklet' + name = "MainTasklet" else: - name = 'Tasklet-%s' % (self._tasklet_id,) + name = "Tasklet-%s" % (self._tasklet_id,) thread_id = tasklet.thread_id for thread in threading.enumerate(): @@ -137,25 +135,25 @@ def update_name(self): tid = id(tasklet) tasklet = None else: - name = 'Tasklet-%s' % (self._tasklet_id,) + name = "Tasklet-%s" % (self._tasklet_id,) thread_name = "" - tid = '-' - self.tasklet_name = '%s %s (%s)' % (name, thread_name, tid) + tid = "-" + self.tasklet_name = "%s %s (%s)" % (name, thread_name, tid) _weak_tasklet_registered_to_info = {} -#======================================================================================================================= +# ======================================================================================================================= # get_tasklet_info -#======================================================================================================================= +# ======================================================================================================================= def get_tasklet_info(tasklet): return register_tasklet_info(tasklet) -#======================================================================================================================= +# ======================================================================================================================= # register_tasklet_info -#======================================================================================================================= +# ======================================================================================================================= def register_tasklet_info(tasklet): r = weakref.ref(tasklet) info = _weak_tasklet_registered_to_info.get(r) @@ -168,13 +166,13 @@ def register_tasklet_info(tasklet): _application_set_schedule_callback = None -#======================================================================================================================= +# ======================================================================================================================= # _schedule_callback -#======================================================================================================================= +# ======================================================================================================================= def _schedule_callback(prev, next): - ''' + """ Called when a context is stopped or a new context is made runnable. - ''' + """ try: if not prev and not next: return @@ -191,7 +189,7 @@ def _schedule_callback(prev, next): frame = next.frame if frame is current_frame: frame = frame.f_back - if hasattr(frame, 'f_trace'): # Note: can be None (but hasattr should cover for that too). + if hasattr(frame, "f_trace"): # Note: can be None (but hasattr should cover for that too). frame.f_trace = debugger.get_thread_local_trace_func() debugger = None @@ -249,14 +247,13 @@ def _schedule_callback(prev, next): if not hasattr(stackless.tasklet, "trace_function"): - # Older versions of Stackless, released before 2014 # This code does not work reliable! It is affected by several # stackless bugs: Stackless issues #44, #42, #40 def _schedule_callback(prev, next): - ''' + """ Called when a context is stopped or a new context is made runnable. - ''' + """ try: if not prev and not next: return @@ -267,7 +264,7 @@ def _schedule_callback(prev, next): # Ok, making next runnable: set the tracing facility in it. debugger = get_global_debugger() if debugger is not None and next.frame: - if hasattr(next.frame, 'f_trace'): + if hasattr(next.frame, "f_trace"): next.frame.f_trace = debugger.get_thread_local_trace_func() debugger = None @@ -316,18 +313,17 @@ def _schedule_callback(prev, next): _original_setup = stackless.tasklet.setup - #======================================================================================================================= + # ======================================================================================================================= # setup - #======================================================================================================================= + # ======================================================================================================================= def setup(self, *args, **kwargs): - ''' + """ Called to run a new tasklet: rebind the creation so that we can trace it. - ''' + """ f = self.tempval def new_f(old_f, args, kwargs): - debugger = get_global_debugger() if debugger is not None: debugger.enable_tracing() @@ -350,21 +346,21 @@ def new_f(old_f, args, kwargs): return _original_setup(self, f, args, kwargs) - #======================================================================================================================= + # ======================================================================================================================= # __call__ - #======================================================================================================================= + # ======================================================================================================================= def __call__(self, *args, **kwargs): - ''' + """ Called to run a new tasklet: rebind the creation so that we can trace it. - ''' + """ return setup(self, *args, **kwargs) _original_run = stackless.run - #======================================================================================================================= + # ======================================================================================================================= # run - #======================================================================================================================= + # ======================================================================================================================= def run(*args, **kwargs): debugger = get_global_debugger() if debugger is not None: @@ -374,14 +370,14 @@ def run(*args, **kwargs): return _original_run(*args, **kwargs) -#======================================================================================================================= +# ======================================================================================================================= # patch_stackless -#======================================================================================================================= +# ======================================================================================================================= def patch_stackless(): - ''' + """ This function should be called to patch the stackless module so that new tasklets are properly tracked in the debugger. - ''' + """ global _application_set_schedule_callback _application_set_schedule_callback = stackless.set_schedule_callback(_schedule_callback) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py index 34c404d0e..b82823229 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_suspended_frames.py @@ -1,8 +1,7 @@ from contextlib import contextmanager import sys -from _pydevd_bundle.pydevd_constants import get_frame, RETURN_VALUES_DICT, \ - ForkSafeLock, GENERATED_LEN_ATTR_NAME, silence_warnings_decorator +from _pydevd_bundle.pydevd_constants import get_frame, RETURN_VALUES_DICT, ForkSafeLock, GENERATED_LEN_ATTR_NAME, silence_warnings_decorator from _pydevd_bundle.pydevd_xml import get_variable_details, get_type from _pydev_bundle.pydev_override import overrides from _pydevd_bundle.pydevd_resolver import sorted_attributes_key, TOO_LARGE_ATTR, get_var_scope @@ -16,7 +15,6 @@ class _AbstractVariable(object): - # Default attributes in class, set in instance. name = None @@ -36,8 +34,8 @@ def get_value(self): def get_variable_reference(self): return id(self.value) - def get_var_data(self, fmt: Optional[dict]=None, context: Optional[str]=None, **safe_repr_custom_attrs): - ''' + def get_var_data(self, fmt: Optional[dict] = None, context: Optional[str] = None, **safe_repr_custom_attrs): + """ :param dict fmt: Format expected by the DAP (keys: 'hex': bool, 'rawString': bool) @@ -47,58 +45,59 @@ def get_var_data(self, fmt: Optional[dict]=None, context: Optional[str]=None, ** "repl", "hover", "clipboard" - ''' + """ timer = Timer() safe_repr = SafeRepr() if fmt is not None: - safe_repr.convert_to_hex = fmt.get('hex', False) - safe_repr.raw_value = fmt.get('rawString', False) + safe_repr.convert_to_hex = fmt.get("hex", False) + safe_repr.raw_value = fmt.get("rawString", False) for key, val in safe_repr_custom_attrs.items(): setattr(safe_repr, key, val) type_name, _type_qualifier, _is_exception_on_eval, resolver, value = get_variable_details( - self.value, to_string=safe_repr, context=context) + self.value, to_string=safe_repr, context=context + ) - is_raw_string = type_name in ('str', 'bytes', 'bytearray') + is_raw_string = type_name in ("str", "bytes", "bytearray") attributes = [] if is_raw_string: - attributes.append('rawString') + attributes.append("rawString") name = self.name if self._is_return_value: - attributes.append('readOnly') - name = '(return) %s' % (name,) + attributes.append("readOnly") + name = "(return) %s" % (name,) elif name in (TOO_LARGE_ATTR, GENERATED_LEN_ATTR_NAME): - attributes.append('readOnly') + attributes.append("readOnly") try: if self.value.__class__ == DAPGrouper: - type_name = '' + type_name = "" except: pass # Ignore errors accessing __class__. var_data = { - 'name': name, - 'value': value, - 'type': type_name, + "name": name, + "value": value, + "type": type_name, } if self.evaluate_name is not None: - var_data['evaluateName'] = self.evaluate_name + var_data["evaluateName"] = self.evaluate_name if resolver is not None: # I.e.: it's a container - var_data['variablesReference'] = self.get_variable_reference() + var_data["variablesReference"] = self.get_variable_reference() else: - var_data['variablesReference'] = 0 # It's mandatory (although if == 0 it doesn't have children). + var_data["variablesReference"] = 0 # It's mandatory (although if == 0 it doesn't have children). if len(attributes) > 0: - var_data['presentationHint'] = {'attributes': attributes} + var_data["presentationHint"] = {"attributes": attributes} - timer.report_if_compute_repr_attr_slow('', name, type_name) + timer.report_if_compute_repr_attr_slow("", name, type_name) return var_data def get_children_variables(self, fmt=None, scope=None): @@ -126,10 +125,10 @@ def _group_entries(self, lst, handle_return_values): entry = (attr_name, attr_value, evaluate_name) if scope: presentation = get_presentation(scope) - if presentation == 'hide': + if presentation == "hide": continue - elif presentation == 'inline': + elif presentation == "inline": new_lst.append(entry) else: # group @@ -153,7 +152,6 @@ def _group_entries(self, lst, handle_return_values): class _ObjectVariable(_AbstractVariable): - def __init__(self, py_db, name, value, register_variable, is_return_value=False, evaluate_name=None, frame=None): _AbstractVariable.__init__(self, py_db) self.frame = frame @@ -171,7 +169,7 @@ def get_children_variables(self, fmt=None, scope=None): children_variables = [] if resolver is not None: # i.e.: it's a container. - if hasattr(resolver, 'get_contents_debug_adapter_protocol'): + if hasattr(resolver, "get_contents_debug_adapter_protocol"): # The get_contents_debug_adapter_protocol needs to return sorted. lst = resolver.get_contents_debug_adapter_protocol(self.value, fmt=fmt) else: @@ -192,8 +190,7 @@ def get_children_variables(self, fmt=None, scope=None): evaluate_name = evaluate_name(parent_evaluate_name) else: evaluate_name = parent_evaluate_name + evaluate_name - variable = _ObjectVariable( - self.py_db, key, val, self._register_variable, evaluate_name=evaluate_name, frame=self.frame) + variable = _ObjectVariable(self.py_db, key, val, self._register_variable, evaluate_name=evaluate_name, frame=self.frame) children_variables.append(variable) else: for key, val, evaluate_name in lst: @@ -204,13 +201,12 @@ def get_children_variables(self, fmt=None, scope=None): return children_variables def change_variable(self, name, value, py_db, fmt=None): - children_variable = self.get_child_variable_named(name) if children_variable is None: return None var_data = children_variable.get_var_data() - evaluate_name = var_data.get('evaluateName') + evaluate_name = var_data.get("evaluateName") if not evaluate_name: # Note: right now we only pass control to the resolver in the cases where @@ -218,15 +214,14 @@ def change_variable(self, name, value, py_db, fmt=None): # we can use that evaluation to set the value too -- if in the future # a case where this isn't true is found this logic may need to be changed). _type, _type_name, container_resolver = get_type(self.value) - if hasattr(container_resolver, 'change_var_from_name'): + if hasattr(container_resolver, "change_var_from_name"): try: new_value = eval(value) except: return None new_key = container_resolver.change_var_from_name(self.value, name, new_value) if new_key is not None: - return _ObjectVariable( - self.py_db, new_key, new_value, self._register_variable, evaluate_name=None, frame=self.frame) + return _ObjectVariable(self.py_db, new_key, new_value, self._register_variable, evaluate_name=None, frame=self.frame) return None else: @@ -238,7 +233,7 @@ def change_variable(self, name, value, py_db, fmt=None): try: # This handles the simple cases (such as dict, list, object) - Exec('%s=%s' % (evaluate_name, value), frame.f_globals, frame.f_locals) + Exec("%s=%s" % (evaluate_name, value), frame.f_globals, frame.f_locals) except: return None @@ -250,7 +245,6 @@ def sorted_variables_key(obj): class _FrameVariable(_AbstractVariable): - def __init__(self, py_db, frame, register_variable): _AbstractVariable.__init__(self, py_db) self.frame = frame @@ -276,19 +270,21 @@ def get_children_variables(self, fmt=None, scope=None): assert isinstance(scope, ScopeRequest) scope = scope.scope - if scope in ('locals', None): + if scope in ("locals", None): dct = self.frame.f_locals - elif scope == 'globals': + elif scope == "globals": dct = self.frame.f_globals else: - raise AssertionError('Unexpected scope: %s' % (scope,)) + raise AssertionError("Unexpected scope: %s" % (scope,)) - lst, group_entries = self._group_entries([(x[0], x[1], None) for x in list(dct.items()) if x[0] != '_pydev_stop_at_break'], handle_return_values=True) + lst, group_entries = self._group_entries( + [(x[0], x[1], None) for x in list(dct.items()) if x[0] != "_pydev_stop_at_break"], handle_return_values=True + ) group_variables = [] for key, val, _ in group_entries: # Make sure that the contents in the group are also sorted. - val.contents_debug_adapter_protocol.sort(key=lambda v:sorted_attributes_key(v[0])) + val.contents_debug_adapter_protocol.sort(key=lambda v: sorted_attributes_key(v[0])) variable = _ObjectVariable(self.py_db, key, val, self._register_variable, False, key, frame=self.frame) group_variables.append(variable) @@ -297,7 +293,14 @@ def get_children_variables(self, fmt=None, scope=None): if is_return_value: for return_key, return_value in val.items(): variable = _ObjectVariable( - self.py_db, return_key, return_value, self._register_variable, is_return_value, '%s[%r]' % (key, return_key), frame=self.frame) + self.py_db, + return_key, + return_value, + self._register_variable, + is_return_value, + "%s[%r]" % (key, return_key), + frame=self.frame, + ) children_variables.append(variable) else: variable = _ObjectVariable(self.py_db, key, val, self._register_variable, is_return_value, key, frame=self.frame) @@ -313,9 +316,9 @@ def get_children_variables(self, fmt=None, scope=None): class _FramesTracker(object): - ''' + """ This is a helper class to be used to track frames when a thread becomes suspended. - ''' + """ def __init__(self, suspended_frames_manager, py_db): self._suspended_frames_manager = suspended_frames_manager @@ -342,7 +345,7 @@ def __init__(self, suspended_frames_manager, py_db): self._untracked = False # We need to be thread-safe! - self._lock = ForkSafeLock() + self._lock = ForkSafeLock(rlock=True) self._variable_reference_to_variable = {} @@ -361,7 +364,8 @@ def obtain_as_variable(self, name, value, evaluate_name=None, frame=None): # Still not created, let's do it now. return _ObjectVariable( - self.py_db, name, value, self._register_variable, is_return_value=False, evaluate_name=evaluate_name, frame=frame) + self.py_db, name, value, self._register_variable, is_return_value=False, evaluate_name=evaluate_name, frame=frame + ) def get_main_thread_id(self): return self._main_thread_id @@ -370,7 +374,7 @@ def get_variable(self, variable_reference): return self._variable_reference_to_variable[variable_reference] def track(self, thread_id, frames_list, frame_custom_thread_id=None): - ''' + """ :param thread_id: The thread id to be used for this frame. @@ -379,19 +383,18 @@ def track(self, thread_id, frames_list, frame_custom_thread_id=None): :param frame_custom_thread_id: If None this this is the id of the thread id for the custom frame (i.e.: coroutine). - ''' + """ assert frames_list.__class__ == FramesList with self._lock: coroutine_or_main_thread_id = frame_custom_thread_id or thread_id if coroutine_or_main_thread_id in self._suspended_frames_manager._thread_id_to_tracker: - sys.stderr.write('pydevd: Something is wrong. Tracker being added twice to the same thread id.\n') + sys.stderr.write("pydevd: Something is wrong. Tracker being added twice to the same thread id.\n") self._suspended_frames_manager._thread_id_to_tracker[coroutine_or_main_thread_id] = self self._main_thread_id = thread_id - frame_ids_from_thread = self._thread_id_to_frame_ids.setdefault( - coroutine_or_main_thread_id, []) + frame_ids_from_thread = self._thread_id_to_frame_ids.setdefault(coroutine_or_main_thread_id, []) self._thread_id_to_frames_list[coroutine_or_main_thread_id] = frames_list for frame in frames_list: @@ -433,20 +436,20 @@ def find_frame(self, thread_id, frame_id): with self._lock: return self._frame_id_to_frame.get(frame_id) - def create_thread_suspend_command(self, thread_id, stop_reason, message, suspend_type): + def create_thread_suspend_command(self, thread_id, stop_reason, message, trace_suspend_type, thread, additional_info): with self._lock: # First one is topmost frame suspended. frames_list = self._thread_id_to_frames_list[thread_id] cmd = self.py_db.cmd_factory.make_thread_suspend_message( - self.py_db, thread_id, frames_list, stop_reason, message, suspend_type) + self.py_db, thread_id, frames_list, stop_reason, message, trace_suspend_type, thread, additional_info + ) frames_list = None return cmd class SuspendedFramesManager(object): - def __init__(self): self._thread_id_to_fake_frames = {} self._thread_id_to_tracker = {} @@ -470,7 +473,7 @@ def _get_tracker_for_variable_reference(self, variable_reference): return None def get_thread_id_for_variable_reference(self, variable_reference): - ''' + """ We can't evaluate variable references values on any thread, only in the suspended thread (the main reason for this is that in UI frameworks inspecting a UI object from a different thread can potentially crash the application). @@ -482,7 +485,7 @@ def get_thread_id_for_variable_reference(self, variable_reference): :return str: The thread id for the thread to be used to inspect the given variable reference or None if the thread was already resumed. - ''' + """ frames_tracker = self._get_tracker_for_variable_reference(variable_reference) if frames_tracker is not None: return frames_tracker.get_main_thread_id() @@ -492,9 +495,9 @@ def get_frame_tracker(self, thread_id): return self._thread_id_to_tracker.get(thread_id) def get_variable(self, variable_reference): - ''' + """ :raises KeyError - ''' + """ frames_tracker = self._get_tracker_for_variable_reference(variable_reference) if frames_tracker is None: raise KeyError() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py index 069b6b6a9..2d205c176 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_thread_lifecycle.py @@ -1,9 +1,11 @@ from _pydevd_bundle import pydevd_utils from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info from _pydevd_bundle.pydevd_comm_constants import CMD_STEP_INTO, CMD_THREAD_SUSPEND -from _pydevd_bundle.pydevd_constants import PYTHON_SUSPEND, STATE_SUSPEND, get_thread_id, STATE_RUN +from _pydevd_bundle.pydevd_constants import PYTHON_SUSPEND, STATE_SUSPEND, get_thread_id, STATE_RUN, PYDEVD_USE_SYS_MONITORING from _pydev_bundle._pydev_saved_modules import threading from _pydev_bundle import pydev_log +import sys +from _pydevd_sys_monitoring import pydevd_sys_monitoring def pydevd_find_thread_by_id(thread_id): @@ -11,7 +13,7 @@ def pydevd_find_thread_by_id(thread_id): threads = threading.enumerate() for i in threads: tid = get_thread_id(i) - if thread_id == tid or thread_id.endswith('|' + tid): + if thread_id == tid or thread_id.endswith("|" + tid): return i # This can happen when a request comes for a thread which was previously removed. @@ -23,7 +25,7 @@ def pydevd_find_thread_by_id(thread_id): return None -def mark_thread_suspended(thread, stop_reason, original_step_cmd=-1): +def mark_thread_suspended(thread, stop_reason: int, original_step_cmd: int = -1): info = set_additional_thread_info(thread) info.suspend_type = PYTHON_SUSPEND if original_step_cmd != -1: @@ -40,7 +42,7 @@ def mark_thread_suspended(thread, stop_reason, original_step_cmd=-1): # Mark as suspended as the last thing. info.pydev_state = STATE_SUSPEND - + info.update_stepping_info() return info @@ -50,15 +52,16 @@ def internal_run_thread(thread, set_additional_thread_info): info.pydev_step_cmd = -1 info.pydev_step_stop = None info.pydev_state = STATE_RUN + info.update_stepping_info() def resume_threads(thread_id, except_thread=None): - pydev_log.info('Resuming threads: %s (except thread: %s)', thread_id, except_thread) + pydev_log.info("Resuming threads: %s (except thread: %s)", thread_id, except_thread) threads = [] - if thread_id == '*': + if thread_id == "*": threads = pydevd_utils.get_non_pydevd_threads() - elif thread_id.startswith('__frame__:'): + elif thread_id.startswith("__frame__:"): pydev_log.critical("Can't make tasklet run: %s", thread_id) else: @@ -66,21 +69,24 @@ def resume_threads(thread_id, except_thread=None): for t in threads: if t is None or t is except_thread: - pydev_log.info('Skipped resuming thread: %s', t) + pydev_log.info("Skipped resuming thread: %s", t) continue internal_run_thread(t, set_additional_thread_info=set_additional_thread_info) def suspend_all_threads(py_db, except_thread): - ''' + """ Suspend all except the one passed as a parameter. :param except_thread: - ''' - pydev_log.info('Suspending all threads except: %s', except_thread) + """ + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.update_monitor_events(suspend_requested=True) + + pydev_log.info("Suspending all threads except: %s", except_thread) all_threads = pydevd_utils.get_non_pydevd_threads() for t in all_threads: - if getattr(t, 'pydev_do_not_trace', None): + if getattr(t, "pydev_do_not_trace", None): pass # skip some other threads, i.e. ipython history saving thread from debug console else: if t is except_thread: @@ -91,6 +97,10 @@ def suspend_all_threads(py_db, except_thread): # Reset the tracing as in this case as it could've set scopes to be untraced. if frame is not None: try: - py_db.set_trace_for_frame_and_parents(frame) + py_db.set_trace_for_frame_and_parents(t.ident, frame) finally: frame = None + + if PYDEVD_USE_SYS_MONITORING: + # After suspending the frames we need the monitoring to be reset. + pydevd_sys_monitoring.restart_events() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py index 4a18cafc2..e9c30bcc8 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_timeout.py @@ -1,4 +1,4 @@ -from _pydev_bundle._pydev_saved_modules import threading +from _pydev_bundle._pydev_saved_modules import ThreadingEvent, ThreadingLock, threading_current_thread from _pydevd_bundle.pydevd_daemon_thread import PyDBDaemonThread from _pydevd_bundle.pydevd_constants import thread_get_ident, IS_CPYTHON, NULL import ctypes @@ -12,7 +12,7 @@ class _TimeoutThread(PyDBDaemonThread): - ''' + """ The idea in this class is that it should be usually stopped waiting for the next event to be called (paused in a threading.Event.wait). @@ -20,26 +20,26 @@ class _TimeoutThread(PyDBDaemonThread): then keeps on waiting as needed again. This is done so that it's a bit more optimized than creating many Timer threads. - ''' + """ def __init__(self, py_db): PyDBDaemonThread.__init__(self, py_db) - self._event = threading.Event() + self._event = ThreadingEvent() self._handles = [] # We could probably do things valid without this lock so that it's possible to add # handles while processing, but the implementation would also be harder to follow, # so, for now, we're either processing or adding handles, not both at the same time. - self._lock = threading.Lock() + self._lock = ThreadingLock() def _on_run(self): wait_time = None while not self._kill_received: if _DEBUG: if wait_time is None: - pydev_log.critical('pydevd_timeout: Wait until a new handle is added.') + pydev_log.critical("pydevd_timeout: Wait until a new handle is added.") else: - pydev_log.critical('pydevd_timeout: Next wait time: %s.', wait_time) + pydev_log.critical("pydevd_timeout: Next wait time: %s.", wait_time) self._event.wait(wait_time) if self._kill_received: @@ -49,13 +49,13 @@ def _on_run(self): wait_time = self.process_handles() def process_handles(self): - ''' + """ :return int: Returns the time we should be waiting for to process the next event properly. - ''' + """ with self._lock: if _DEBUG: - pydev_log.critical('pydevd_timeout: Processing handles') + pydev_log.critical("pydevd_timeout: Processing handles") self._event.clear() handles = self._handles new_handles = self._handles = [] @@ -71,7 +71,7 @@ def process_handles(self): if curtime < handle.abs_timeout and not handle.disposed: # It still didn't time out. if _DEBUG: - pydev_log.critical('pydevd_timeout: Handle NOT processed: %s', handle) + pydev_log.critical("pydevd_timeout: Handle NOT processed: %s", handle) new_handles.append(handle) if min_handle_timeout is None: min_handle_timeout = handle.abs_timeout @@ -81,7 +81,7 @@ def process_handles(self): else: if _DEBUG: - pydev_log.critical('pydevd_timeout: Handle processed: %s', handle) + pydev_log.critical("pydevd_timeout: Handle processed: %s", handle) # Timed out (or disposed), so, let's execute it (should be no-op if disposed). handle.exec_on_timeout() @@ -90,7 +90,7 @@ def process_handles(self): else: timeout = min_handle_timeout - curtime if timeout <= 0: - pydev_log.critical('pydevd_timeout: Expected timeout to be > 0. Found: %s', timeout) + pydev_log.critical("pydevd_timeout: Expected timeout to be > 0. Found: %s", timeout) return timeout @@ -106,9 +106,8 @@ def add_on_timeout_handle(self, handle): class _OnTimeoutHandle(object): - def __init__(self, tracker, abs_timeout, on_timeout, kwargs): - self._str = '_OnTimeoutHandle(%s)' % (on_timeout,) + self._str = "_OnTimeoutHandle(%s)" % (on_timeout,) self._tracker = weakref.ref(tracker) self.abs_timeout = abs_timeout @@ -130,11 +129,11 @@ def exec_on_timeout(self): try: if _DEBUG: - pydev_log.critical('pydevd_timeout: Calling on timeout: %s with kwargs: %s', on_timeout, kwargs) + pydev_log.critical("pydevd_timeout: Calling on timeout: %s with kwargs: %s", on_timeout, kwargs) on_timeout(**kwargs) except Exception: - pydev_log.exception('pydevd_timeout: Exception on callback timeout.') + pydev_log.exception("pydevd_timeout: Exception on callback timeout.") def __enter__(self): pass @@ -159,17 +158,17 @@ def __str__(self): class TimeoutTracker(object): - ''' + """ This is a helper class to track the timeout of something. - ''' + """ def __init__(self, py_db): self._thread = None - self._lock = threading.Lock() + self._lock = ThreadingLock() self._py_db = weakref.ref(py_db) def call_on_timeout(self, timeout, on_timeout, kwargs=None): - ''' + """ This can be called regularly to always execute the given function after a given timeout: call_on_timeout(py_db, 10, on_timeout) @@ -182,11 +181,11 @@ def call_on_timeout(self, timeout, on_timeout, kwargs=None): ... Note: the callback will be called from a PyDBDaemonThread. - ''' + """ with self._lock: if self._thread is None: if _DEBUG: - pydev_log.critical('pydevd_timeout: Created _TimeoutThread.') + pydev_log.critical("pydevd_timeout: Created _TimeoutThread.") self._thread = _TimeoutThread(self._py_db()) self._thread.start() @@ -194,13 +193,13 @@ def call_on_timeout(self, timeout, on_timeout, kwargs=None): curtime = time.time() handle = _OnTimeoutHandle(self, curtime + timeout, on_timeout, kwargs) if _DEBUG: - pydev_log.critical('pydevd_timeout: Added handle: %s.', handle) + pydev_log.critical("pydevd_timeout: Added handle: %s.", handle) self._thread.add_on_timeout_handle(handle) return handle def create_interrupt_this_thread_callback(): - ''' + """ The idea here is returning a callback that when called will generate a KeyboardInterrupt in the thread that called this function. @@ -214,26 +213,25 @@ def create_interrupt_this_thread_callback(): :return callable: Returns a callback that will interrupt the current thread (this may be called from an auxiliary thread). - ''' + """ tid = thread_get_ident() if is_current_thread_main_thread(): - main_thread = threading.current_thread() + main_thread = threading_current_thread() def raise_on_this_thread(): - pydev_log.debug('Callback to interrupt main thread.') + pydev_log.debug("Callback to interrupt main thread.") pydevd_utils.interrupt_main_thread(main_thread) else: - # Note: this works in the sense that it can stop some cpu-intensive slow operation, # but we can't really interrupt the thread out of some sleep or I/O operation # (this will only be raised when Python is about to execute the next instruction). def raise_on_this_thread(): if IS_CPYTHON: - pydev_log.debug('Interrupt thread: %s', tid) + pydev_log.debug("Interrupt thread: %s", tid) ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(tid), ctypes.py_object(KeyboardInterrupt)) else: - pydev_log.debug('It is only possible to interrupt non-main threads in CPython.') + pydev_log.debug("It is only possible to interrupt non-main threads in CPython.") return raise_on_this_thread diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py deleted file mode 100644 index 77e8b3fad..000000000 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_api.py +++ /dev/null @@ -1,62 +0,0 @@ -def add_line_breakpoint(plugin, pydb, type, canonical_normalized_filename, breakpoint_id, line, condition, expression, func_name, hit_condition=None, is_logpoint=False, add_breakpoint_result=None, on_changed_breakpoint_state=None): - return None - - -def after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): - return None - - -def add_exception_breakpoint(plugin, pydb, type, exception): - return False - - -def remove_exception_breakpoint(plugin, pydb, type, exception): - return False - - -def remove_all_exception_breakpoints(plugin, pydb): - return False - - -def get_breakpoints(plugin, pydb): - return None - - -def can_skip(plugin, pydb, frame): - return True - - -def has_exception_breaks(plugin): - return False - - -def has_line_breaks(plugin): - return False - - -def cmd_step_into(plugin, pydb, frame, event, args, stop_info, stop): - return False - - -def cmd_step_over(plugin, pydb, frame, event, args, stop_info, stop): - return False - - -def stop(plugin, pydb, frame, event, args, stop_info, arg, step_cmd): - return False - - -def get_breakpoint(plugin, pydb, pydb_frame, frame, event, args): - return None - - -def suspend(plugin, pydb, thread, frame): - return None - - -def exception_break(plugin, pydb, pydb_frame, frame, args, arg): - return None - - -def change_variable(plugin, frame, attr, expression): - return False diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py index 40a683770..19b83e328 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch.py @@ -2,8 +2,7 @@ # Should give warning only here if cython is not available but supported. import os -from _pydevd_bundle.pydevd_constants import USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES, \ - ENV_FALSE_LOWER_VALUES +from _pydevd_bundle.pydevd_constants import USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES, ENV_FALSE_LOWER_VALUES from _pydev_bundle import pydev_log dirname = os.path.dirname(os.path.dirname(__file__)) @@ -12,11 +11,13 @@ def delete_old_compiled_extensions(): import _pydevd_bundle + cython_extensions_dir = os.path.dirname(os.path.dirname(_pydevd_bundle.__file__)) _pydevd_bundle_ext_dir = os.path.dirname(_pydevd_bundle.__file__) - _pydevd_frame_eval_ext_dir = os.path.join(cython_extensions_dir, '_pydevd_frame_eval_ext') + _pydevd_frame_eval_ext_dir = os.path.join(cython_extensions_dir, "_pydevd_frame_eval_ext") try: import shutil + for file in os.listdir(_pydevd_bundle_ext_dir): if file.startswith("pydevd") and file.endswith(".so"): os.remove(os.path.join(_pydevd_bundle_ext_dir, file)) @@ -27,36 +28,65 @@ def delete_old_compiled_extensions(): if os.path.exists(build_dir): shutil.rmtree(os.path.join(cython_extensions_dir, "build")) except OSError: - pydev_log.error_once("warning: failed to delete old cython speedups. Please delete all *.so files from the directories " - "\"%s\" and \"%s\"" % (_pydevd_bundle_ext_dir, _pydevd_frame_eval_ext_dir)) + pydev_log.error_once( + "warning: failed to delete old cython speedups. Please delete all *.so files from the directories " + '"%s" and "%s"' % (_pydevd_bundle_ext_dir, _pydevd_frame_eval_ext_dir) + ) if USE_CYTHON_FLAG in ENV_TRUE_LOWER_VALUES: # We must import the cython version if forcing cython - from _pydevd_bundle.pydevd_cython_wrapper import trace_dispatch, global_cache_skips, global_cache_frame_skips, fix_top_level_trace_and_get_trace_func + from _pydevd_bundle.pydevd_cython_wrapper import ( + trace_dispatch, + global_cache_skips, + global_cache_frame_skips, + fix_top_level_trace_and_get_trace_func, + ) + from _pydevd_bundle.pydevd_cython_wrapper import should_stop_on_exception, handle_exception, is_unhandled_exception + USING_CYTHON = True elif USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES: # Use the regular version if not forcing cython - from _pydevd_bundle.pydevd_trace_dispatch_regular import trace_dispatch, global_cache_skips, global_cache_frame_skips, fix_top_level_trace_and_get_trace_func # @UnusedImport + from _pydevd_bundle.pydevd_trace_dispatch_regular import ( + trace_dispatch, + global_cache_skips, + global_cache_frame_skips, + fix_top_level_trace_and_get_trace_func, + ) # @UnusedImport + from .pydevd_frame import should_stop_on_exception, handle_exception, is_unhandled_exception else: # Regular: use fallback if not found and give message to user try: - from _pydevd_bundle.pydevd_cython_wrapper import trace_dispatch, global_cache_skips, global_cache_frame_skips, fix_top_level_trace_and_get_trace_func + from _pydevd_bundle.pydevd_cython_wrapper import ( + trace_dispatch, + global_cache_skips, + global_cache_frame_skips, + fix_top_level_trace_and_get_trace_func, + ) + from _pydevd_bundle.pydevd_cython_wrapper import should_stop_on_exception, handle_exception, is_unhandled_exception # This version number is always available from _pydevd_bundle.pydevd_additional_thread_info_regular import version as regular_version + # This version number from the already compiled cython extension from _pydevd_bundle.pydevd_cython_wrapper import version as cython_version + if cython_version != regular_version: # delete_old_compiled_extensions() -- would be ok in dev mode but we don't want to erase # files from other python versions on release, so, just raise import error here. - raise ImportError('Cython version of speedups does not match.') + raise ImportError("Cython version of speedups does not match.") else: USING_CYTHON = True except ImportError: - from _pydevd_bundle.pydevd_trace_dispatch_regular import trace_dispatch, global_cache_skips, global_cache_frame_skips, fix_top_level_trace_and_get_trace_func # @UnusedImport - pydev_log.show_compile_cython_command_line() + from _pydevd_bundle.pydevd_trace_dispatch_regular import ( + trace_dispatch, + global_cache_skips, + global_cache_frame_skips, + fix_top_level_trace_and_get_trace_func, + ) # @UnusedImport + from .pydevd_frame import should_stop_on_exception, handle_exception, is_unhandled_exception + pydev_log.show_compile_cython_command_line() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py index 88a3f0832..2382867a4 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_trace_dispatch_regular.py @@ -1,17 +1,25 @@ from _pydev_bundle.pydev_is_thread_alive import is_thread_alive from _pydev_bundle.pydev_log import exception as pydev_log_exception from _pydev_bundle._pydev_saved_modules import threading -from _pydevd_bundle.pydevd_constants import (get_current_thread_id, NO_FTRACE, - USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, ForkSafeLock) +from _pydevd_bundle.pydevd_constants import ( + get_current_thread_id, + NO_FTRACE, + USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, + ForkSafeLock, + PYDEVD_USE_SYS_MONITORING, +) from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER +# fmt: off # IFDEF CYTHON # from cpython.object cimport PyObject # from cpython.ref cimport Py_INCREF, Py_XDECREF # ELSE from _pydevd_bundle.pydevd_frame import PyDBFrame, is_unhandled_exception # ENDIF +# fmt: on +# fmt: off # IFDEF CYTHON # cdef dict _global_notify_skipped_step_in # cython_inline_constant: CMD_STEP_INTO = 107 @@ -25,6 +33,7 @@ CMD_STEP_RETURN = 109 CMD_STEP_RETURN_MY_CODE = 160 # ENDIF +# fmt: on # Cache where we should keep that we completely skipped entering some context. # It needs to be invalidated when: @@ -48,6 +57,8 @@ def notify_skipped_step_in_because_of_filters(py_db, frame): _global_notify_skipped_step_in = True py_db.notify_skipped_step_in_because_of_filters(frame) + +# fmt: off # IFDEF CYTHON # cdef class SafeCallWrapper: # cdef method_object @@ -65,14 +76,17 @@ def notify_skipped_step_in_because_of_filters(py_db, frame): # return self.method_object # ELSE # ENDIF +# fmt: on def fix_top_level_trace_and_get_trace_func(py_db, frame): + # fmt: off # IFDEF CYTHON # cdef str filename; # cdef str name; # cdef tuple args; # ENDIF + # fmt: on # Note: this is always the first entry-point in the tracing for any thread. # After entering here we'll set a new tracing function for this thread @@ -90,45 +104,45 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): name = f_unhandled.f_code.co_filename # basename - i = name.rfind('/') - j = name.rfind('\\') + i = name.rfind("/") + j = name.rfind("\\") if j > i: i = j if i >= 0: - name = name[i + 1:] + name = name[i + 1 :] # remove ext - i = name.rfind('.') + i = name.rfind(".") if i >= 0: name = name[:i] - if name == 'threading': - if f_unhandled.f_code.co_name in ('__bootstrap', '_bootstrap'): + if name == "threading": + if f_unhandled.f_code.co_name in ("__bootstrap", "_bootstrap"): # We need __bootstrap_inner, not __bootstrap. return None, False - elif f_unhandled.f_code.co_name in ('__bootstrap_inner', '_bootstrap_inner'): + elif f_unhandled.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner"): # Note: be careful not to use threading.currentThread to avoid creating a dummy thread. - t = f_unhandled.f_locals.get('self') + t = f_unhandled.f_locals.get("self") force_only_unhandled_tracer = True if t is not None and isinstance(t, threading.Thread): thread = t break - elif name == 'pydev_monkey': - if f_unhandled.f_code.co_name == '__call__': + elif name == "pydev_monkey": + if f_unhandled.f_code.co_name == "__call__": force_only_unhandled_tracer = True break - elif name == 'pydevd': - if f_unhandled.f_code.co_name in ('run', 'main'): + elif name == "pydevd": + if f_unhandled.f_code.co_name in ("run", "main"): # We need to get to _exec return None, False - if f_unhandled.f_code.co_name == '_exec': + if f_unhandled.f_code.co_name == "_exec": force_only_unhandled_tracer = True break - elif name == 'pydevd_tracing': + elif name == "pydevd_tracing": return None, False elif f_unhandled.f_back is None: @@ -147,7 +161,7 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): # Jython does not have threading.get_ident(). thread = py_db.threading_current_thread() - if getattr(thread, 'pydev_do_not_trace', None): + if getattr(thread, "pydev_do_not_trace", None): py_db.disable_tracing() return None, False @@ -165,19 +179,25 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): if f_unhandled.f_back is None and not force_only_unhandled_tracer: # Happens when we attach to a running program (cannot reuse instance because it's mutable). top_level_thread_tracer = TopLevelThreadTracerNoBackFrame(ThreadTracer(args), args) - additional_info.top_level_thread_tracer_no_back_frames.append(top_level_thread_tracer) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + additional_info.top_level_thread_tracer_no_back_frames.append( + top_level_thread_tracer + ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). else: top_level_thread_tracer = additional_info.top_level_thread_tracer_unhandled if top_level_thread_tracer is None: # Stop in some internal place to report about unhandled exceptions top_level_thread_tracer = TopLevelThreadTracerOnlyUnhandledExceptions(args) - additional_info.top_level_thread_tracer_unhandled = top_level_thread_tracer # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). + additional_info.top_level_thread_tracer_unhandled = ( + top_level_thread_tracer + ) # Hack for cython to keep it alive while the thread is alive (just the method in the SetTrace is not enough). # print(' --> found to trace unhandled', f_unhandled.f_code.co_name, f_unhandled.f_code.co_filename, f_unhandled.f_code.co_firstlineno) f_trace = top_level_thread_tracer.get_trace_dispatch_func() + # fmt: off # IFDEF CYTHON # f_trace = SafeCallWrapper(f_trace) # ENDIF + # fmt: on f_unhandled.f_trace = f_trace if frame is f_unhandled: @@ -188,22 +208,25 @@ def fix_top_level_trace_and_get_trace_func(py_db, frame): thread_tracer = ThreadTracer(args) additional_info.thread_tracer = thread_tracer -# IFDEF CYTHON -# return SafeCallWrapper(thread_tracer), True -# ELSE + # fmt: off + # IFDEF CYTHON + # return SafeCallWrapper(thread_tracer), True + # ELSE return thread_tracer, True -# ENDIF + # ENDIF + # fmt: on def trace_dispatch(py_db, frame, event, arg): thread_trace_func, apply_to_settrace = py_db.fix_top_level_trace_and_get_trace_func(py_db, frame) if thread_trace_func is None: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE if apply_to_settrace: py_db.enable_tracing(thread_trace_func) return thread_trace_func(frame, event, arg) +# fmt: off # IFDEF CYTHON # cdef class TopLevelThreadTracerOnlyUnhandledExceptions: # cdef public tuple _args; @@ -211,15 +234,16 @@ def trace_dispatch(py_db, frame, event, arg): # self._args = args # ELSE class TopLevelThreadTracerOnlyUnhandledExceptions(object): - def __init__(self, args): self._args = args + # ENDIF +# fmt: on def trace_unhandled_exceptions(self, frame, event, arg): # Note that we ignore the frame as this tracing method should only be put in topmost frames already. # print('trace_unhandled_exceptions', event, frame.f_code.co_name, frame.f_code.co_filename, frame.f_code.co_firstlineno) - if event == 'exception' and arg is not None: + if event == "exception" and arg is not None: py_db, t, additional_info = self._args[0:3] if arg is not None: if not additional_info.suspended_at_unhandled: @@ -233,7 +257,7 @@ def trace_unhandled_exceptions(self, frame, event, arg): def get_trace_dispatch_func(self): return self.trace_unhandled_exceptions - +# fmt: off # IFDEF CYTHON # cdef class TopLevelThreadTracerNoBackFrame: # @@ -253,7 +277,7 @@ def get_trace_dispatch_func(self): # self._last_raise_line = -1 # ELSE class TopLevelThreadTracerNoBackFrame(object): - ''' + """ This tracer is pretty special in that it's dealing with a frame without f_back (i.e.: top frame on remote attach or QThread). @@ -263,7 +287,7 @@ class TopLevelThreadTracerNoBackFrame(object): work with in the tracing -- see: https://bugs.python.org/issue34099, so, we inspect bytecode to determine if some exception will be traced or not... note that if this is not available -- such as on Jython -- we consider any top-level exception to be unnhandled). - ''' + """ def __init__(self, frame_trace_dispatch, args): self._frame_trace_dispatch = frame_trace_dispatch @@ -272,7 +296,9 @@ def __init__(self, frame_trace_dispatch, args): self._last_exc_arg = None self._raise_lines = set() self._last_raise_line = -1 + # ENDIF +# fmt: on def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): # DEBUG = 'code_to_debug' in frame.f_code.co_filename @@ -281,12 +307,12 @@ def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): if frame_trace_dispatch is not None: self._frame_trace_dispatch = frame_trace_dispatch(frame, event, arg) - if event == 'exception': + if event == "exception": self._last_exc_arg = arg self._raise_lines.add(frame.f_lineno) self._last_raise_line = frame.f_lineno - elif event == 'return' and self._last_exc_arg is not None: + elif event == "return" and self._last_exc_arg is not None: # For unhandled exceptions we actually track the return when at the topmost level. try: py_db, t, additional_info = self._args[0:3] @@ -300,17 +326,20 @@ def trace_dispatch_and_unhandled_exceptions(self, frame, event, arg): ret = self.trace_dispatch_and_unhandled_exceptions # Need to reset (the call to _frame_trace_dispatch may have changed it). + # fmt: off # IFDEF CYTHON # frame.f_trace = SafeCallWrapper(ret) # ELSE frame.f_trace = ret # ENDIF + # fmt: on return ret def get_trace_dispatch_func(self): return self.trace_dispatch_and_unhandled_exceptions +# fmt: off # IFDEF CYTHON # cdef class ThreadTracer: # cdef public tuple _args; @@ -318,13 +347,14 @@ def get_trace_dispatch_func(self): # self._args = args # ELSE class ThreadTracer(object): - def __init__(self, args): self._args = args + # ENDIF +# fmt: on def __call__(self, frame, event, arg): - ''' This is the callback used when we enter some context in the debugger. + """This is the callback used when we enter some context in the debugger. We also decorate the thread we are in with info about the debugging. The attributes added are: @@ -335,7 +365,8 @@ def __call__(self, frame, event, arg): :param PyDB py_db: This is the global debugger (this method should actually be added as a method to it). - ''' + """ + # fmt: off # IFDEF CYTHON # cdef str filename; # cdef str base; @@ -346,24 +377,25 @@ def __call__(self, frame, event, arg): # cdef tuple abs_path_canonical_path_and_base; # cdef PyDBAdditionalThreadInfo additional_info; # ENDIF + # fmt: on # DEBUG = 'code_to_debug' in frame.f_code.co_filename # if DEBUG: print('ENTER: trace_dispatch: %s %s %s %s' % (frame.f_code.co_filename, frame.f_lineno, event, frame.f_code.co_name)) py_db, t, additional_info, cache_skips, frame_skips_cache = self._args if additional_info.is_tracing: - return None if event == 'call' else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch + return None if event == "call" else NO_FTRACE # we don't wan't to trace code invoked from pydevd_frame.trace_dispatch additional_info.is_tracing += 1 try: pydev_step_cmd = additional_info.pydev_step_cmd is_stepping = pydev_step_cmd != -1 if py_db.pydb_disposed: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # if thread is not alive, cancel trace_dispatch processing if not is_thread_alive(t): py_db.notify_thread_not_alive(get_current_thread_id(t)) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # Note: it's important that the context name is also given because we may hit something once # in the global context and another in the local context. @@ -371,23 +403,30 @@ def __call__(self, frame, event, arg): if frame_cache_key in cache_skips: if not is_stepping: # if DEBUG: print('skipped: trace_dispatch (cache hit)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # When stepping we can't take into account caching based on the breakpoints (only global filtering). if cache_skips.get(frame_cache_key) == 1: - - if additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) and not _global_notify_skipped_step_in: + if ( + additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + and not _global_notify_skipped_step_in + ): notify_skipped_step_in_because_of_filters(py_db, frame) back_frame = frame.f_back - if back_frame is not None and pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE): + if back_frame is not None and pydev_step_cmd in ( + CMD_STEP_INTO, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_RETURN, + CMD_STEP_RETURN_MY_CODE, + ): back_frame_cache_key = back_frame.f_code if cache_skips.get(back_frame_cache_key) == 1: # if DEBUG: print('skipped: trace_dispatch (cache hit: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch (cache hit: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE try: # Make fast path faster! @@ -395,39 +434,50 @@ def __call__(self, frame, event, arg): except: abs_path_canonical_path_and_base = get_abs_path_real_path_and_base_from_frame(frame) - file_type = py_db.get_file_type(frame, abs_path_canonical_path_and_base) # we don't want to debug threading or anything related to pydevd + file_type = py_db.get_file_type( + frame, abs_path_canonical_path_and_base + ) # we don't want to debug threading or anything related to pydevd if file_type is not None: if file_type == 1: # inlining LIB_FILE = 1 if not py_db.in_project_scope(frame, abs_path_canonical_path_and_base[0]): # if DEBUG: print('skipped: trace_dispatch (not in scope)', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) cache_skips[frame_cache_key] = 1 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch', abs_path_canonical_path_and_base[2], frame.f_lineno, event, frame.f_code.co_name, file_type) cache_skips[frame_cache_key] = 1 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE if py_db.is_files_filter_enabled: if py_db.apply_files_filter(frame, abs_path_canonical_path_and_base[0], False): cache_skips[frame_cache_key] = 1 - if is_stepping and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) and not _global_notify_skipped_step_in: + if ( + is_stepping + and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + and not _global_notify_skipped_step_in + ): notify_skipped_step_in_because_of_filters(py_db, frame) # A little gotcha, sometimes when we're stepping in we have to stop in a # return event showing the back frame as the current frame, so, we need # to check not only the current frame but the back frame too. back_frame = frame.f_back - if back_frame is not None and pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE): + if back_frame is not None and pydev_step_cmd in ( + CMD_STEP_INTO, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_RETURN, + CMD_STEP_RETURN_MY_CODE, + ): if py_db.apply_files_filter(back_frame, back_frame.f_code.co_filename, False): back_frame_cache_key = back_frame.f_code cache_skips[back_frame_cache_key] = 1 # if DEBUG: print('skipped: trace_dispatch (filtered out: 1)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE else: # if DEBUG: print('skipped: trace_dispatch (filtered out: 2)', frame_cache_key, frame.f_lineno, event, frame.f_code.co_name) - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE # if DEBUG: print('trace_dispatch', filename, frame.f_lineno, event, frame.f_code.co_name, file_type) @@ -435,28 +485,35 @@ def __call__(self, frame, event, arg): # reference to the frame). ret = PyDBFrame( ( - py_db, abs_path_canonical_path_and_base, additional_info, t, frame_skips_cache, frame_cache_key, + py_db, + abs_path_canonical_path_and_base, + additional_info, + t, + frame_skips_cache, + frame_cache_key, ) ).trace_dispatch(frame, event, arg) if ret is None: # 1 means skipped because of filters. # 2 means skipped because no breakpoints were hit. cache_skips[frame_cache_key] = 2 - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE + # fmt: off # IFDEF CYTHON # frame.f_trace = SafeCallWrapper(ret) # Make sure we keep the returned tracer. # ELSE frame.f_trace = ret # Make sure we keep the returned tracer. # ENDIF + # fmt: on return ret except SystemExit: - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE except Exception: if py_db.pydb_disposed: - return None if event == 'call' else NO_FTRACE # Don't log errors when we're shutting down. + return None if event == "call" else NO_FTRACE # Don't log errors when we're shutting down. # Log it try: if pydev_log_exception is not None: @@ -466,7 +523,7 @@ def __call__(self, frame, event, arg): # Error logging? We're really in the interpreter shutdown... # (https://github.com/fabioz/PyDev.Debugger/issues/8) pass - return None if event == 'call' else NO_FTRACE + return None if event == "call" else NO_FTRACE finally: additional_info.is_tracing -= 1 @@ -488,3 +545,8 @@ def __call__(self, frame, event, arg): return _original_call(self, frame, event, arg) ThreadTracer.__call__ = __call__ + +if PYDEVD_USE_SYS_MONITORING: + + def fix_top_level_trace_and_get_trace_func(*args, **kwargs): + raise RuntimeError("Not used in sys.monitoring mode.") diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py index 2f38e4be8..c07e9534a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_traceproperty.py @@ -1,27 +1,28 @@ -'''For debug purpose we are replacing actual builtin property by the debug property -''' +"""For debug purpose we are replacing actual builtin property by the debug property +""" from _pydevd_bundle.pydevd_comm import get_global_debugger from _pydev_bundle import pydev_log -#======================================================================================================================= +# ======================================================================================================================= # replace_builtin_property -#======================================================================================================================= +# ======================================================================================================================= def replace_builtin_property(new_property=None): if new_property is None: new_property = DebugProperty original = property try: import builtins - builtins.__dict__['property'] = new_property + + builtins.__dict__["property"] = new_property except: pydev_log.exception() # @Reimport return original -#======================================================================================================================= +# ======================================================================================================================= # DebugProperty -#======================================================================================================================= +# ======================================================================================================================= class DebugProperty(object): """A custom property which allows python property to get controlled by the debugger and selectively disable/re-enable @@ -73,20 +74,16 @@ def __delete__(self, obj): global_debugger.enable_tracing() def getter(self, fget): - """Overriding getter decorator for the property - """ + """Overriding getter decorator for the property""" self.fget = fget return self def setter(self, fset): - """Overriding setter decorator for the property - """ + """Overriding setter decorator for the property""" self.fset = fset return self def deleter(self, fdel): - """Overriding deleter decorator for the property - """ + """Overriding deleter decorator for the property""" self.fdel = fdel return self - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py index b83e9b1aa..4ac447d37 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_utils.py @@ -13,9 +13,15 @@ import time import inspect import sys -from _pydevd_bundle.pydevd_constants import USE_CUSTOM_SYS_CURRENT_FRAMES, IS_PYPY, SUPPORT_GEVENT, \ - GEVENT_SUPPORT_NOT_SET_MSG, GENERATED_LEN_ATTR_NAME, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT, \ - get_global_debugger +from _pydevd_bundle.pydevd_constants import ( + USE_CUSTOM_SYS_CURRENT_FRAMES, + IS_PYPY, + SUPPORT_GEVENT, + GEVENT_SUPPORT_NOT_SET_MSG, + GENERATED_LEN_ATTR_NAME, + PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT, + get_global_debugger, +) def save_main_module(file, module_name): @@ -24,24 +30,24 @@ def save_main_module(file, module_name): # This will prevent the pydevd script from contaminating the namespace for the script to be debugged # pretend pydevd is not the main module, and # convince the file to be debugged that it was loaded as main - m = sys.modules[module_name] = sys.modules['__main__'] + m = sys.modules[module_name] = sys.modules["__main__"] m.__name__ = module_name - loader = m.__loader__ if hasattr(m, '__loader__') else None - spec = spec_from_file_location('__main__', file, loader=loader) + loader = m.__loader__ if hasattr(m, "__loader__") else None + spec = spec_from_file_location("__main__", file, loader=loader) m = module_from_spec(spec) - sys.modules['__main__'] = m + sys.modules["__main__"] = m return m def is_current_thread_main_thread(): - if hasattr(threading, 'main_thread'): + if hasattr(threading, "main_thread"): return threading.current_thread() is threading.main_thread() else: return isinstance(threading.current_thread(), threading._MainThread) def get_main_thread(): - if hasattr(threading, 'main_thread'): + if hasattr(threading, "main_thread"): return threading.main_thread() else: for t in threading.enumerate(): @@ -58,9 +64,9 @@ def to_number(x): except ValueError: pass - l = x.find('(') + l = x.find("(") if l != -1: - y = x[0:l - 1] + y = x[0 : l - 1] # print y try: n = float(y) @@ -97,7 +103,7 @@ def print_exc(): traceback.print_exc() -def quote_smart(s, safe='/'): +def quote_smart(s, safe="/"): return quote(s, safe) @@ -120,9 +126,9 @@ def get_clsname_for_code(code, frame): if hasattr(first_arg_class, func_name): method = getattr(first_arg_class, func_name) func_code = None - if hasattr(method, 'func_code'): # Python2 + if hasattr(method, "func_code"): # Python2 func_code = method.func_code - elif hasattr(method, '__code__'): # Python3 + elif hasattr(method, "__code__"): # Python3 func_code = method.__code__ if func_code and func_code == code: clsname = first_arg_class.__name__ @@ -132,7 +138,7 @@ def get_clsname_for_code(code, frame): def get_non_pydevd_threads(): threads = threading.enumerate() - return [t for t in threads if t and not getattr(t, 'is_pydev_daemon_thread', False)] + return [t for t in threads if t and not getattr(t, "is_pydev_daemon_thread", False)] if USE_CUSTOM_SYS_CURRENT_FRAMES and IS_PYPY: @@ -144,9 +150,9 @@ def get_non_pydevd_threads(): def dump_threads(stream=None, show_pydevd_threads=True): - ''' + """ Helper to dump thread info. - ''' + """ if stream is None: stream = sys.stderr thread_id_to_name_and_is_pydevd_thread = {} @@ -156,17 +162,17 @@ def dump_threads(stream=None, show_pydevd_threads=True): threading_enumerate = threading.enumerate for t in threading_enumerate(): - is_pydevd_thread = getattr(t, 'is_pydev_daemon_thread', False) + is_pydevd_thread = getattr(t, "is_pydev_daemon_thread", False) thread_id_to_name_and_is_pydevd_thread[t.ident] = ( - '%s (daemon: %s, pydevd thread: %s)' % (t.name, t.daemon, is_pydevd_thread), - is_pydevd_thread + "%s (daemon: %s, pydevd thread: %s)" % (t.name, t.daemon, is_pydevd_thread), + is_pydevd_thread, ) except: pass - stream.write('===============================================================================\n') - stream.write('Threads running\n') - stream.write('================================= Thread Dump =================================\n') + stream.write("===============================================================================\n") + stream.write("Threads running\n") + stream.write("================================= Thread Dump =================================\n") stream.flush() for thread_id, frame in _tid_to_frame_for_dump_threads().items(): @@ -174,26 +180,25 @@ def dump_threads(stream=None, show_pydevd_threads=True): if not show_pydevd_threads and is_pydevd_thread: continue - stream.write('\n-------------------------------------------------------------------------------\n') + stream.write("\n-------------------------------------------------------------------------------\n") stream.write(" Thread %s" % (name,)) - stream.write('\n\n') + stream.write("\n\n") for i, (filename, lineno, name, line) in enumerate(traceback.extract_stack(frame)): - stream.write(' File "%s", line %d, in %s\n' % (filename, lineno, name)) if line: stream.write(" %s\n" % (line.strip())) - if i == 0 and 'self' in frame.f_locals: - stream.write(' self: ') + if i == 0 and "self" in frame.f_locals: + stream.write(" self: ") try: - stream.write(str(frame.f_locals['self'])) + stream.write(str(frame.f_locals["self"])) except: - stream.write('Unable to get str of: %s' % (type(frame.f_locals['self']),)) - stream.write('\n') + stream.write("Unable to get str of: %s" % (type(frame.f_locals["self"]),)) + stream.write("\n") stream.flush() - stream.write('\n=============================== END Thread Dump ===============================') + stream.write("\n=============================== END Thread Dump ===============================") stream.flush() @@ -201,14 +206,14 @@ def _extract_variable_nested_braces(char_iter): expression = [] level = 0 for c in char_iter: - if c == '{': + if c == "{": level += 1 - if c == '}': + if c == "}": level -= 1 if level == -1: - return ''.join(expression).strip() + return "".join(expression).strip() expression.append(c) - raise SyntaxError('Unbalanced braces in expression.') + raise SyntaxError("Unbalanced braces in expression.") def _extract_expression_list(log_message): @@ -217,15 +222,15 @@ def _extract_expression_list(log_message): expression_vars = [] char_iter = iter(log_message) for c in char_iter: - if c == '{': + if c == "{": expression_var = _extract_variable_nested_braces(char_iter) if expression_var: - expression.append('%s') + expression.append("%s") expression_vars.append(expression_var) else: expression.append(c) - expression = ''.join(expression) + expression = "".join(expression) return expression, expression_vars @@ -233,34 +238,34 @@ def convert_dap_log_message_to_expression(log_message): try: expression, expression_vars = _extract_expression_list(log_message) except SyntaxError: - return repr('Unbalanced braces in: %s' % (log_message)) + return repr("Unbalanced braces in: %s" % (log_message)) if not expression_vars: return repr(expression) # Note: use '%' to be compatible with Python 2.6. - return repr(expression) + ' % (' + ', '.join(str(x) for x in expression_vars) + ',)' + return repr(expression) + " % (" + ", ".join(str(x) for x in expression_vars) + ",)" def notify_about_gevent_if_needed(stream=None): - ''' + """ When debugging with gevent check that the gevent flag is used if the user uses the gevent monkey-patching. :return bool: Returns True if a message had to be shown to the user and False otherwise. - ''' + """ stream = stream if stream is not None else sys.stderr if not SUPPORT_GEVENT: - gevent_monkey = sys.modules.get('gevent.monkey') + gevent_monkey = sys.modules.get("gevent.monkey") if gevent_monkey is not None: try: saved = gevent_monkey.saved except AttributeError: - pydev_log.exception_once('Error checking for gevent monkey-patching.') + pydev_log.exception_once("Error checking for gevent monkey-patching.") return False if saved: # Note: print to stderr as it may deadlock the debugger. - sys.stderr.write('%s\n' % (GEVENT_SUPPORT_NOT_SET_MSG,)) + sys.stderr.write("%s\n" % (GEVENT_SUPPORT_NOT_SET_MSG,)) return True return False @@ -299,11 +304,10 @@ def isinstance_checked(obj, cls): class ScopeRequest(object): - - __slots__ = ['variable_reference', 'scope'] + __slots__ = ["variable_reference", "scope"] def __init__(self, variable_reference, scope): - assert scope in ('globals', 'locals') + assert scope in ("globals", "locals") self.variable_reference = variable_reference self.scope = scope @@ -321,15 +325,15 @@ def __hash__(self): class DAPGrouper(object): - ''' + """ Note: this is a helper class to group variables on the debug adapter protocol (DAP). For the xml protocol the type is just added to each variable and the UI can group/hide it as needed. - ''' + """ - SCOPE_SPECIAL_VARS = 'special variables' - SCOPE_PROTECTED_VARS = 'protected variables' - SCOPE_FUNCTION_VARS = 'function variables' - SCOPE_CLASS_VARS = 'class variables' + SCOPE_SPECIAL_VARS = "special variables" + SCOPE_PROTECTED_VARS = "protected variables" + SCOPE_FUNCTION_VARS = "function variables" + SCOPE_CLASS_VARS = "class variables" SCOPES_SORTED = [ SCOPE_SPECIAL_VARS, @@ -338,7 +342,7 @@ class DAPGrouper(object): SCOPE_CLASS_VARS, ] - __slots__ = ['variable_reference', 'scope', 'contents_debug_adapter_protocol'] + __slots__ = ["variable_reference", "scope", "contents_debug_adapter_protocol"] def __init__(self, scope): self.variable_reference = id(self) @@ -361,14 +365,14 @@ def __hash__(self): return hash((self.variable_reference, self.scope)) def __repr__(self): - return '' + return "" def __str__(self): - return '' + return "" def interrupt_main_thread(main_thread=None): - ''' + """ Generates a KeyboardInterrupt in the main thread by sending a Ctrl+C or by calling thread.interrupt_main(). @@ -378,21 +382,21 @@ def interrupt_main_thread(main_thread=None): Note: if unable to send a Ctrl+C, the KeyboardInterrupt will only be raised when the next Python instruction is about to be executed (so, it won't interrupt a sleep(1000)). - ''' + """ if main_thread is None: main_thread = threading.main_thread() - pydev_log.debug('Interrupt main thread.') + pydev_log.debug("Interrupt main thread.") called = False try: - if os.name == 'posix': + if os.name == "posix": # On Linux we can't interrupt 0 as in Windows because it's # actually owned by a process -- on the good side, signals # work much better on Linux! os.kill(os.getpid(), signal.SIGINT) called = True - elif os.name == 'nt': + elif os.name == "nt": # This generates a Ctrl+C only for the current process and not # to the process group! # Note: there doesn't seem to be any public documentation for this @@ -417,33 +421,32 @@ def interrupt_main_thread(main_thread=None): except: # If something went wrong, fallback to interrupting when the next # Python instruction is being called. - pydev_log.exception('Error interrupting main thread (using fallback).') + pydev_log.exception("Error interrupting main thread (using fallback).") if not called: try: # In this case, we don't really interrupt a sleep() nor IO operations # (this makes the KeyboardInterrupt be sent only when the next Python # instruction is about to be executed). - if hasattr(thread, 'interrupt_main'): + if hasattr(thread, "interrupt_main"): thread.interrupt_main() else: main_thread._thread.interrupt() # Jython except: - pydev_log.exception('Error on interrupt main thread fallback.') + pydev_log.exception("Error on interrupt main thread fallback.") class Timer(object): - def __init__(self, min_diff=PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT): self.min_diff = min_diff self._curr_time = time.time() - def print_time(self, msg='Elapsed:'): + def print_time(self, msg="Elapsed:"): old = self._curr_time new = self._curr_time = time.time() diff = new - old if diff >= self.min_diff: - print('%s: %.2fs' % (msg, diff)) + print("%s: %.2fs" % (msg, diff)) def _report_slow(self, compute_msg, *args): old = self._curr_time @@ -465,16 +468,14 @@ def _compute_repr_slow(self, diff, attrs_tab_separated, attr_name, attr_type): pass if attrs_tab_separated: return ( - 'pydevd warning: Computing repr of %s.%s (%s) was slow (took %.2fs).\n' - 'Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n' - ) % ( - attrs_tab_separated.replace('\t', '.'), attr_name, attr_type, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) + "pydevd warning: Computing repr of %s.%s (%s) was slow (took %.2fs).\n" + "Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n" + ) % (attrs_tab_separated.replace("\t", "."), attr_name, attr_type, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) else: return ( - 'pydevd warning: Computing repr of %s (%s) was slow (took %.2fs)\n' - 'Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n' - ) % ( - attr_name, attr_type, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) + "pydevd warning: Computing repr of %s (%s) was slow (took %.2fs)\n" + "Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n" + ) % (attr_name, attr_type, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) def report_if_getting_attr_slow(self, cls, attr_name): self._report_slow(self._compute_get_attr_slow, cls, attr_name) @@ -485,32 +486,32 @@ def _compute_get_attr_slow(self, diff, cls, attr_name): except: pass return ( - 'pydevd warning: Getting attribute %s.%s was slow (took %.2fs)\n' - 'Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n' - ) % (cls, attr_name, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) + "pydevd warning: Getting attribute %s.%s was slow (took %.2fs)\n" + "Customize report timeout by setting the `PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT` environment variable to a higher timeout (default is: %ss)\n" + ) % (cls, attr_name, diff, PYDEVD_WARN_SLOW_RESOLVE_TIMEOUT) def import_attr_from_module(import_with_attr_access): - if '.' not in import_with_attr_access: + if "." not in import_with_attr_access: # We need at least one '.' (we don't support just the module import, we need the attribute access too). - raise ImportError('Unable to import module with attr access: %s' % (import_with_attr_access,)) + raise ImportError("Unable to import module with attr access: %s" % (import_with_attr_access,)) - module_name, attr_name = import_with_attr_access.rsplit('.', 1) + module_name, attr_name = import_with_attr_access.rsplit(".", 1) while True: try: mod = import_module(module_name) except ImportError: - if '.' not in module_name: - raise ImportError('Unable to import module with attr access: %s' % (import_with_attr_access,)) + if "." not in module_name: + raise ImportError("Unable to import module with attr access: %s" % (import_with_attr_access,)) - module_name, new_attr_part = module_name.rsplit('.', 1) - attr_name = new_attr_part + '.' + attr_name + module_name, new_attr_part = module_name.rsplit(".", 1) + attr_name = new_attr_part + "." + attr_name else: # Ok, we got the base module, now, get the attribute we need. try: - for attr in attr_name.split('.'): + for attr in attr_name.split("."): mod = getattr(mod, attr) return mod except: - raise ImportError('Unable to import module with attr access: %s' % (import_with_attr_access,)) + raise ImportError("Unable to import module with attr access: %s" % (import_with_attr_access,)) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py index cdbe3085f..8ec4dec4a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vars.py @@ -2,8 +2,7 @@ resolution/conversion to XML. """ import pickle -from _pydevd_bundle.pydevd_constants import get_frame, get_current_thread_id, \ - iter_chars, silence_warnings_decorator, get_global_debugger +from _pydevd_bundle.pydevd_constants import get_frame, get_current_thread_id, iter_chars, silence_warnings_decorator, get_global_debugger from _pydevd_bundle.pydevd_xml import ExceptionOnEvaluate, get_type, var_to_xml from _pydev_bundle import pydev_log @@ -37,13 +36,13 @@ def iter_frames(frame): def dump_frames(thread_id): - sys.stdout.write('dumping frames\n') + sys.stdout.write("dumping frames\n") if thread_id != get_current_thread_id(threading.current_thread()): raise VariableError("find_frame: must execute on same thread") frame = get_frame() for frame in iter_frames(frame): - sys.stdout.write('%s\n' % pickle.dumps(frame)) + sys.stdout.write("%s\n" % pickle.dumps(frame)) @silence_warnings_decorator @@ -61,12 +60,13 @@ def getVariable(dbg, thread_id, frame_id, scope, locator): :note: when BY_ID is used, the frame_id is considered the id of the object to find and not the frame (as we don't care about the frame in this case). """ - if scope == 'BY_ID': + if scope == "BY_ID": if thread_id != get_current_thread_id(threading.current_thread()): raise VariableError("getVariable: must execute on same thread") try: import gc + objects = gc.get_objects() except: pass # Not all python variants have it. @@ -75,7 +75,7 @@ def getVariable(dbg, thread_id, frame_id, scope, locator): for var in objects: if id(var) == frame_id: if locator is not None: - locator_parts = locator.split('\t') + locator_parts = locator.split("\t") for k in locator_parts: _type, _type_name, resolver = get_type(var) var = resolver.resolve(var, k) @@ -83,7 +83,7 @@ def getVariable(dbg, thread_id, frame_id, scope, locator): return var # If it didn't return previously, we coudn't find it by id (i.e.: already garbage collected). - sys.stderr.write('Unable to find object with id: %s\n' % (frame_id,)) + sys.stderr.write("Unable to find object with id: %s\n" % (frame_id,)) return None frame = dbg.find_frame(thread_id, frame_id) @@ -91,14 +91,14 @@ def getVariable(dbg, thread_id, frame_id, scope, locator): return {} if locator is not None: - locator_parts = locator.split('\t') + locator_parts = locator.split("\t") else: locator_parts = [] for attr in locator_parts: - attr.replace("@_@TAB_CHAR@_@", '\t') + attr.replace("@_@TAB_CHAR@_@", "\t") - if scope == 'EXPRESSION': + if scope == "EXPRESSION": for count in range(len(locator_parts)): if count == 0: # An Expression can be in any scope (globals/locals), therefore it needs to evaluated as an expression @@ -141,8 +141,7 @@ def resolve_compound_variable_fields(dbg, thread_id, frame_id, scope, attrs): _type, type_name, resolver = get_type(var) return type_name, resolver.get_dictionary(var) except: - pydev_log.exception('Error evaluating: thread_id: %s\nframe_id: %s\nscope: %s\nattrs: %s.', - thread_id, frame_id, scope, attrs) + pydev_log.exception("Error evaluating: thread_id: %s\nframe_id: %s\nscope: %s\nattrs: %s.", thread_id, frame_id, scope, attrs) def resolve_var_object(var, attrs): @@ -154,7 +153,7 @@ def resolve_var_object(var, attrs): :return: a value of resolved variable's attribute """ if attrs is not None: - attr_list = attrs.split('\t') + attr_list = attrs.split("\t") else: attr_list = [] for k in attr_list: @@ -171,7 +170,7 @@ def resolve_compound_var_object_fields(var, attrs): :param attrs: a sequence of variable's attributes separated by \t (i.e.: obj\tattr1\tattr2) :return: a dictionary of variables's fields """ - attr_list = attrs.split('\t') + attr_list = attrs.split("\t") for k in attr_list: type, _type_name, resolver = get_type(var) @@ -194,12 +193,12 @@ def custom_operation(dbg, thread_id, frame_id, scope, attrs, style, code_or_file expressionValue = getVariable(dbg, thread_id, frame_id, scope, attrs) try: - namespace = {'__name__': ''} + namespace = {"__name__": ""} if style == "EXECFILE": - namespace['__file__'] = code_or_file + namespace["__file__"] = code_or_file execfile(code_or_file, namespace, namespace) else: # style == EXEC - namespace['__file__'] = '' + namespace["__file__"] = "" Exec(code_or_file, namespace, namespace) return str(namespace[operation_fn_name](expressionValue)) @@ -238,9 +237,9 @@ def _expression_to_evaluate(expression): if proceed: if isinstance(expression, bytes): - expression = b''.join(new_lines) + expression = b"".join(new_lines) else: - expression = u''.join(new_lines) + expression = "".join(new_lines) return expression @@ -255,7 +254,7 @@ def eval_in_context(expression, global_vars, local_vars, py_db=None): if py_db is None: py_db = get_global_debugger() if py_db is None: - raise RuntimeError('Cannot evaluate async without py_db.') + raise RuntimeError("Cannot evaluate async without py_db.") t = _EvalAwaitInNewEventLoop(py_db, compiled, global_vars, local_vars) t.start() t.join() @@ -272,17 +271,17 @@ def eval_in_context(expression, global_vars, local_vars, py_db=None): # Ok, we have the initial error message, but let's see if we're dealing with a name mangling error... try: - if '.__' in expression: + if ".__" in expression: # Try to handle '__' name mangling (for simple cases such as self.__variable.__another_var). - split = expression.split('.') + split = expression.split(".") entry = split[0] if local_vars is None: local_vars = global_vars curr = local_vars[entry] # Note: we want the KeyError if it's not there. for entry in split[1:]: - if entry.startswith('__') and not hasattr(curr, entry): - entry = '_%s%s' % (curr.__class__.__name__, entry) + if entry.startswith("__") and not hasattr(curr, entry): + entry = "_%s%s" % (curr.__class__.__name__, entry) curr = getattr(curr, entry) result = curr @@ -299,7 +298,7 @@ def _run_with_interrupt_thread(original_func, py_db, curr_thread, frame, express if interrupt_thread_timeout > 0: on_interrupt_threads = pydevd_timeout.create_interrupt_this_thread_callback() - pydev_log.info('Doing evaluate with interrupt threads timeout: %s.', interrupt_thread_timeout) + pydev_log.info("Doing evaluate with interrupt threads timeout: %s.", interrupt_thread_timeout) if on_interrupt_threads is None: return original_func(py_db, frame, expression, is_exec) @@ -318,13 +317,13 @@ def _run_with_unblock_threads(original_func, py_db, curr_thread, frame, expressi unblock_threads_timeout = -1 # Don't use this if threads are managed individually. if unblock_threads_timeout >= 0: - pydev_log.info('Doing evaluate with unblock threads timeout: %s.', unblock_threads_timeout) + pydev_log.info("Doing evaluate with unblock threads timeout: %s.", unblock_threads_timeout) tid = get_current_thread_id(curr_thread) def on_timeout_unblock_threads(): on_timeout_unblock_threads.called = True - pydev_log.info('Resuming threads after evaluate timeout.') - resume_threads('*', except_thread=curr_thread) + pydev_log.info("Resuming threads after evaluate timeout.") + resume_threads("*", except_thread=curr_thread) py_db.threads_suspended_single_notification.on_thread_resume(tid, curr_thread) on_timeout_unblock_threads.called = False @@ -345,25 +344,24 @@ def on_timeout_unblock_threads(): def _evaluate_with_timeouts(original_func): - ''' + """ Provides a decorator that wraps the original evaluate to deal with slow evaluates. If some evaluation is too slow, we may show a message, resume threads or interrupt them as needed (based on the related configurations). - ''' + """ @functools.wraps(original_func) def new_func(py_db, frame, expression, is_exec): if py_db is None: # Only for testing... - pydev_log.critical('_evaluate_with_timeouts called without py_db!') + pydev_log.critical("_evaluate_with_timeouts called without py_db!") return original_func(py_db, frame, expression, is_exec) warn_evaluation_timeout = pydevd_constants.PYDEVD_WARN_EVALUATION_TIMEOUT curr_thread = threading.current_thread() def on_warn_evaluation_timeout(): - py_db.writer.add_command(py_db.cmd_factory.make_evaluation_timeout_msg( - py_db, expression, curr_thread)) + py_db.writer.add_command(py_db.cmd_factory.make_evaluation_timeout_msg(py_db, expression, curr_thread)) timeout_tracker = py_db.timeout_tracker # : :type timeout_tracker: TimeoutTracker with timeout_tracker.call_on_timeout(warn_evaluation_timeout, on_warn_evaluation_timeout): @@ -375,13 +373,14 @@ def on_warn_evaluation_timeout(): _ASYNC_COMPILE_FLAGS = None try: from ast import PyCF_ALLOW_TOP_LEVEL_AWAIT + _ASYNC_COMPILE_FLAGS = PyCF_ALLOW_TOP_LEVEL_AWAIT except: pass def compile_as_eval(expression): - ''' + """ :param expression: The expression to be _compiled. @@ -389,16 +388,16 @@ def compile_as_eval(expression): :return: code object :raises Exception if the expression cannot be evaluated. - ''' + """ expression_to_evaluate = _expression_to_evaluate(expression) if _ASYNC_COMPILE_FLAGS is not None: - return compile(expression_to_evaluate, '', 'eval', _ASYNC_COMPILE_FLAGS) + return compile(expression_to_evaluate, "", "eval", _ASYNC_COMPILE_FLAGS) else: - return compile(expression_to_evaluate, '', 'eval') + return compile(expression_to_evaluate, "", "eval") def _compile_as_exec(expression): - ''' + """ :param expression: The expression to be _compiled. @@ -406,16 +405,15 @@ def _compile_as_exec(expression): :return: code object :raises Exception if the expression cannot be evaluated. - ''' + """ expression_to_evaluate = _expression_to_evaluate(expression) if _ASYNC_COMPILE_FLAGS is not None: - return compile(expression_to_evaluate, '', 'exec', _ASYNC_COMPILE_FLAGS) + return compile(expression_to_evaluate, "", "exec", _ASYNC_COMPILE_FLAGS) else: - return compile(expression_to_evaluate, '', 'exec') + return compile(expression_to_evaluate, "", "exec") class _EvalAwaitInNewEventLoop(PyDBDaemonThread): - def __init__(self, py_db, compiled, updated_globals, updated_locals): PyDBDaemonThread.__init__(self, py_db) self._compiled = compiled @@ -432,6 +430,7 @@ async def _async_func(self): def _on_run(self): try: import asyncio + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) self.evaluated_value = asyncio.run(self._async_func()) @@ -441,7 +440,7 @@ def _on_run(self): @_evaluate_with_timeouts def evaluate_expression(py_db, frame, expression, is_exec): - ''' + """ :param str expression: The expression to be evaluated. @@ -483,7 +482,7 @@ def method(): :param py_db: The debugger. Only needed if some top-level await is detected (for creating a PyDBDaemonThread). - ''' + """ if frame is None: return @@ -523,17 +522,17 @@ def method(): updated_globals = {} updated_globals.update(frame.f_globals) updated_globals.update(frame.f_locals) - if 'globals' not in updated_globals: + if "globals" not in updated_globals: # If the user explicitly uses 'globals()' then we provide the # frame globals (unless he has shadowed it already). - updated_globals['globals'] = lambda: frame.f_globals + updated_globals["globals"] = lambda: frame.f_globals initial_globals = updated_globals.copy() updated_locals = None try: - expression = expression.replace('@LINE@', '\n') + expression = expression.replace("@LINE@", "\n") if is_exec: try: @@ -573,7 +572,7 @@ def method(): else: result = eval(compiled, updated_globals, updated_locals) if result is not None: # Only print if it's not None (as python does) - sys.stdout.write('%s\n' % (result,)) + sys.stdout.write("%s\n" % (result,)) return else: @@ -597,17 +596,16 @@ def method(): def change_attr_expression(frame, attr, expression, dbg, value=SENTINEL_VALUE): - '''Changes some attribute in a given frame. - ''' + """Changes some attribute in a given frame.""" if frame is None: return try: - expression = expression.replace('@LINE@', '\n') + expression = expression.replace("@LINE@", "\n") if dbg.plugin and value is SENTINEL_VALUE: result = dbg.plugin.change_variable(frame, attr, expression) - if result: + if result is not dbg.plugin.EMPTY_SENTINEL: return result if attr[:7] == "Globals": @@ -618,7 +616,7 @@ def change_attr_expression(frame, attr, expression, dbg, value=SENTINEL_VALUE): frame.f_globals[attr] = value return frame.f_globals[attr] else: - if '.' not in attr: # i.e.: if we have a '.', we're changing some attribute of a local var. + if "." not in attr: # i.e.: if we have a '.', we're changing some attribute of a local var. if pydevd_save_locals.is_save_locals_available(): if value is SENTINEL_VALUE: value = eval(expression, frame.f_globals, frame.f_locals) @@ -630,7 +628,7 @@ def change_attr_expression(frame, attr, expression, dbg, value=SENTINEL_VALUE): if value is SENTINEL_VALUE: value = eval(expression, frame.f_globals, frame.f_locals) result = value - Exec('%s=%s' % (attr, expression), frame.f_globals, frame.f_locals) + Exec("%s=%s" % (attr, expression), frame.f_globals, frame.f_locals) return result except Exception: @@ -643,15 +641,15 @@ def change_attr_expression(frame, attr, expression, dbg, value=SENTINEL_VALUE): def table_like_struct_to_xml(array, name, roffset, coffset, rows, cols, format): _, type_name, _ = get_type(array) - if type_name == 'ndarray': + if type_name == "ndarray": array, metaxml, r, c, f = array_to_meta_xml(array, name, format) xml = metaxml - format = '%' + f + format = "%" + f if rows == -1 and cols == -1: rows = r cols = c xml += array_to_xml(array, roffset, coffset, rows, cols, format) - elif type_name == 'DataFrame': + elif type_name == "DataFrame": xml = dataframe_to_xml(array, name, roffset, coffset, rows, cols, format) else: raise VariableError("Do not know how to convert type %s to table" % (type_name)) @@ -681,9 +679,9 @@ def array_to_xml(array, roffset, coffset, rows, cols, format): array = array[roffset:] rows = min(rows, len(array)) - xml += "" % (rows, cols) + xml += '' % (rows, cols) for row in range(rows): - xml += "" % to_string(row) + xml += '' % to_string(row) for col in range(cols): value = array if rows == 1 or cols == 1: @@ -700,7 +698,7 @@ def array_to_xml(array, roffset, coffset, rows, cols, format): else: value = array[row][col] value = format % value - xml += var_to_xml(value, '') + xml += var_to_xml(value, "") return xml @@ -710,19 +708,19 @@ def array_to_meta_xml(array, name, format): l = len(array.shape) # initial load, compute slice - if format == '%': + if format == "%": if l > 2: - slice += '[0]' * (l - 2) + slice += "[0]" * (l - 2) for r in range(l - 2): array = array[0] - if type == 'f': - format = '.5f' - elif type == 'i' or type == 'u': - format = 'd' + if type == "f": + format = ".5f" + elif type == "i" or type == "u": + format = "d" else: - format = 's' + format = "s" else: - format = format.replace('%', '') + format = format.replace("%", "") l = len(array.shape) reslice = "" @@ -733,25 +731,25 @@ def array_to_meta_xml(array, name, format): # http://stackoverflow.com/questions/16837946/numpy-a-2-rows-1-column-file-loadtxt-returns-1row-2-columns # explanation: http://stackoverflow.com/questions/15165170/how-do-i-maintain-row-column-orientation-of-vectors-in-numpy?rq=1 # we use kind of a hack - get information about memory from C_CONTIGUOUS - is_row = array.flags['C_CONTIGUOUS'] + is_row = array.flags["C_CONTIGUOUS"] if is_row: rows = 1 cols = min(len(array), MAX_SLICE_SIZE) if cols < len(array): - reslice = '[0:%s]' % (cols) + reslice = "[0:%s]" % (cols) array = array[0:cols] else: cols = 1 rows = min(len(array), MAX_SLICE_SIZE) if rows < len(array): - reslice = '[0:%s]' % (rows) + reslice = "[0:%s]" % (rows) array = array[0:rows] elif l == 2: rows = min(array.shape[-2], MAX_SLICE_SIZE) cols = min(array.shape[-1], MAX_SLICE_SIZE) if cols < array.shape[-1] or rows < array.shape[-2]: - reslice = '[0:%s, 0:%s]' % (rows, cols) + reslice = "[0:%s, 0:%s]" % (rows, cols) array = array[0:rows, 0:cols] # avoid slice duplication @@ -761,8 +759,15 @@ def array_to_meta_xml(array, name, format): bounds = (0, 0) if type in "biufc": bounds = (array.min(), array.max()) - xml = '' % \ - (slice, rows, cols, format, type, bounds[1], bounds[0]) + xml = '' % ( + slice, + rows, + cols, + format, + type, + bounds[1], + bounds[0], + ) return array, xml, rows, cols, format @@ -781,13 +786,12 @@ def dataframe_to_xml(df, name, roffset, coffset, rows, cols, format): num_rows = min(df.shape[0], MAX_SLICE_SIZE) num_cols = min(df.shape[1], MAX_SLICE_SIZE) if (num_rows, num_cols) != df.shape: - df = df.iloc[0:num_rows, 0: num_cols] - slice = '.iloc[0:%s, 0:%s]' % (num_rows, num_cols) + df = df.iloc[0:num_rows, 0:num_cols] + slice = ".iloc[0:%s, 0:%s]" % (num_rows, num_cols) else: - slice = '' + slice = "" slice = name + slice - xml = '\n' % \ - (slice, num_rows, num_cols) + xml = '\n' % (slice, num_rows, num_cols) if (rows, cols) == (-1, -1): rows, cols = num_rows, num_cols @@ -805,39 +809,44 @@ def dataframe_to_xml(df, name, roffset, coffset, rows, cols, format): bounds = (0, 0) col_bounds[col] = bounds - df = df.iloc[roffset: roffset + rows, coffset: coffset + cols] + df = df.iloc[roffset : roffset + rows, coffset : coffset + cols] rows, cols = df.shape - xml += "\n" % (rows, cols) - format = format.replace('%', '') + xml += '\n' % (rows, cols) + format = format.replace("%", "") col_formats = [] - get_label = lambda label: str(label) if not isinstance(label, tuple) else '/'.join(map(str, label)) + get_label = lambda label: str(label) if not isinstance(label, tuple) else "/".join(map(str, label)) for col in range(cols): dtype = df.dtypes.iloc[col].kind - if dtype == 'f' and format: + if dtype == "f" and format: fmt = format - elif dtype == 'f': - fmt = '.5f' - elif dtype == 'i' or dtype == 'u': - fmt = 'd' + elif dtype == "f": + fmt = ".5f" + elif dtype == "i" or dtype == "u": + fmt = "d" else: - fmt = 's' - col_formats.append('%' + fmt) + fmt = "s" + col_formats.append("%" + fmt) bounds = col_bounds[col] - xml += '\n' % \ - (str(col), get_label(df.axes[1].values[col]), dtype, fmt, bounds[1], bounds[0]) + xml += '\n' % ( + str(col), + get_label(df.axes[1].values[col]), + dtype, + fmt, + bounds[1], + bounds[0], + ) for row, label in enumerate(iter(df.axes[0])): - xml += "\n" % \ - (str(row), get_label(label)) + xml += '\n' % (str(row), get_label(label)) xml += "\n" - xml += "\n" % (rows, cols) + xml += '\n' % (rows, cols) for row in range(rows): - xml += "\n" % str(row) + xml += '\n' % str(row) for col in range(cols): value = df.iat[row, col] value = col_formats[col] % value - xml += var_to_xml(value, '') + xml += var_to_xml(value, "") return xml diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py index d2cf5b67b..aaca38e41 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_vm_type.py @@ -1,41 +1,40 @@ import sys -#======================================================================================================================= + +# ======================================================================================================================= # PydevdVmType -#======================================================================================================================= +# ======================================================================================================================= class PydevdVmType: - - PYTHON = 'python' - JYTHON = 'jython' + PYTHON = "python" + JYTHON = "jython" vm_type = None - -#======================================================================================================================= + +# ======================================================================================================================= # set_vm_type -#======================================================================================================================= +# ======================================================================================================================= def set_vm_type(vm_type): PydevdVmType.vm_type = vm_type - - -#======================================================================================================================= + + +# ======================================================================================================================= # get_vm_type -#======================================================================================================================= +# ======================================================================================================================= def get_vm_type(): if PydevdVmType.vm_type is None: setup_type() return PydevdVmType.vm_type -#======================================================================================================================= +# ======================================================================================================================= # setup_type -#======================================================================================================================= +# ======================================================================================================================= def setup_type(str=None): if str is not None: PydevdVmType.vm_type = str return - + if sys.platform.startswith("java"): PydevdVmType.vm_type = PydevdVmType.JYTHON else: PydevdVmType.vm_type = PydevdVmType.PYTHON - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py index 5d1ed0fd7..af8ad0faa 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_xml.py @@ -2,8 +2,13 @@ from _pydevd_bundle import pydevd_extension_utils from _pydevd_bundle import pydevd_resolver import sys -from _pydevd_bundle.pydevd_constants import BUILTINS_MODULE_NAME, MAXIMUM_VARIABLE_REPRESENTATION_SIZE, \ - RETURN_VALUES_DICT, LOAD_VALUES_ASYNC, DEFAULT_VALUE +from _pydevd_bundle.pydevd_constants import ( + BUILTINS_MODULE_NAME, + MAXIMUM_VARIABLE_REPRESENTATION_SIZE, + RETURN_VALUES_DICT, + LOAD_VALUES_ASYNC, + DEFAULT_VALUE, +) from _pydev_bundle.pydev_imports import quote from _pydevd_bundle.pydevd_extension_api import TypeResolveProvider, StrPresentationProvider from _pydevd_bundle.pydevd_utils import isinstance_checked, hasattr_checked, DAPGrouper @@ -20,11 +25,10 @@ def make_valid_xml_value(s): # Same thing as xml.sax.saxutils.escape but also escaping double quotes. - return s.replace("&", "&").replace('<', '<').replace('>', '>').replace('"', '"') + return s.replace("&", "&").replace("<", "<").replace(">", ">").replace('"', """) class ExceptionOnEvaluate: - def __init__(self, result, etype, tb): self.result = result self.etype = etype @@ -37,9 +41,11 @@ def __init__(self, result, etype, tb): def _create_default_type_map(): default_type_map = [ # None means that it should not be treated as a compound variable - # isintance does not accept a tuple on some versions of python, so, we must declare it expanded - (type(None), None,), + ( + type(None), + None, + ), (int, None), (float, None), (complex, None), @@ -50,6 +56,7 @@ def _create_default_type_map(): ] try: from collections import OrderedDict + default_type_map.insert(0, (OrderedDict, pydevd_resolver.orderedDictResolver)) # we should put it before dict except: @@ -76,6 +83,7 @@ def _create_default_type_map(): try: from django.utils.datastructures import MultiValueDict + default_type_map.insert(0, (MultiValueDict, pydevd_resolver.multiValueDictResolver)) # we should put it before dict except: @@ -83,6 +91,7 @@ def _create_default_type_map(): try: from django.forms import BaseForm + default_type_map.insert(0, (BaseForm, pydevd_resolver.djangoFormResolver)) # we should put it before instance resolver except: @@ -90,12 +99,14 @@ def _create_default_type_map(): try: from collections import deque + default_type_map.append((deque, pydevd_resolver.dequeResolver)) except: pass try: from ctypes import Array + default_type_map.append((Array, pydevd_resolver.tupleResolver)) except: pass @@ -105,6 +116,7 @@ def _create_default_type_map(): if _IS_JYTHON: from org.python import core # @UnresolvedImport + default_type_map.append((core.PyNone, None)) default_type_map.append((core.PyInteger, None)) default_type_map.append((core.PyLong, None)) @@ -116,7 +128,7 @@ def _create_default_type_map(): default_type_map.append((core.PyDictionary, pydevd_resolver.dictResolver)) default_type_map.append((core.PyStringMap, pydevd_resolver.dictResolver)) - if hasattr(core, 'PyJavaInstance'): + if hasattr(core, "PyJavaInstance"): # Jython 2.5b3 removed it. default_type_map.append((core.PyJavaInstance, pydevd_resolver.instanceResolver)) @@ -159,10 +171,10 @@ def get_type(self, o): # fallback to saying that it wasn't possible to get any info on it. return type_object, str(type_name), pydevd_resolver.defaultResolver - return 'Unable to get Type', 'Unable to get Type', None + return "Unable to get Type", "Unable to get Type", None except: # This happens for org.python.core.InitModule - return 'Unable to get Type', 'Unable to get Type', None + return "Unable to get Type", "Unable to get Type", None def _get_type(self, o, type_object, type_name): # Note: we could have an exception here if the type_object is not hashable... @@ -198,23 +210,23 @@ def _get_type(self, o, type_object, type_name): _base_get_type = _get_type def _get_type(self, o, type_object, type_name): - if type_name == 'org.python.core.PyJavaInstance': + if type_name == "org.python.core.PyJavaInstance": return type_object, type_name, pydevd_resolver.instanceResolver - if type_name == 'org.python.core.PyArray': + if type_name == "org.python.core.PyArray": return type_object, type_name, pydevd_resolver.jyArrayResolver return self._base_get_type(o, type_object, type_name) - def _get_str_from_provider(self, provider, o, context: Optional[str]=None): + def _get_str_from_provider(self, provider, o, context: Optional[str] = None): if context is not None: - get_str_in_context = getattr(provider, 'get_str_in_context', None) + get_str_in_context = getattr(provider, "get_str_in_context", None) if get_str_in_context is not None: return get_str_in_context(o, context) return provider.get_str(o) - def str_from_providers(self, o, type_object, type_name, context: Optional[str]=None): + def str_from_providers(self, o, type_object, type_name, context: Optional[str] = None): provider = self._type_to_str_provider_cache.get(type_object) if provider is self.NO_PROVIDER: @@ -256,7 +268,7 @@ def get_type(o): def is_builtin(x): - return getattr(x, '__module__', None) == BUILTINS_MODULE_NAME + return getattr(x, "__module__", None) == BUILTINS_MODULE_NAME def should_evaluate_full_value(val): @@ -267,11 +279,11 @@ def return_values_from_dict_to_xml(return_dict): res = [] for name, val in return_dict.items(): res.append(var_to_xml(val, name, additional_in_xml=' isRetVal="True"')) - return ''.join(res) + return "".join(res) def frame_vars_to_xml(frame_f_locals, hidden_ns=None): - """ dumps frame variables to XML + """dumps frame variables to XML """ xml = [] @@ -285,7 +297,7 @@ def frame_vars_to_xml(frame_f_locals, hidden_ns=None): v = frame_f_locals[k] eval_full_val = should_evaluate_full_value(v) - if k == '_pydev_stop_at_break': + if k == "_pydev_stop_at_break": continue if k == RETURN_VALUES_DICT: @@ -294,8 +306,7 @@ def frame_vars_to_xml(frame_f_locals, hidden_ns=None): else: if hidden_ns is not None and k in hidden_ns: - xml.append(var_to_xml(v, str(k), additional_in_xml=' isIPythonHidden="True"', - evaluate_full_value=eval_full_val)) + xml.append(var_to_xml(v, str(k), additional_in_xml=' isIPythonHidden="True"', evaluate_full_value=eval_full_val)) else: xml.append(var_to_xml(v, str(k), evaluate_full_value=eval_full_val)) except Exception: @@ -303,18 +314,18 @@ def frame_vars_to_xml(frame_f_locals, hidden_ns=None): # Show return values as the first entry. return_values_xml.extend(xml) - return ''.join(return_values_xml) + return "".join(return_values_xml) -def get_variable_details(val, evaluate_full_value=True, to_string=None, context: Optional[str]=None): - ''' +def get_variable_details(val, evaluate_full_value=True, to_string=None, context: Optional[str] = None): + """ :param context: This is the context in which the variable is being requested. Valid values: "watch", "repl", "hover", "clipboard" - ''' + """ try: # This should be faster than isinstance (but we have to protect against not having a '__class__' attribute). is_exception_on_eval = val.__class__ == ExceptionOnEvaluate @@ -339,57 +350,56 @@ def get_variable_details(val, evaluate_full_value=True, to_string=None, context: elif to_string is not None: value = to_string(v) - elif hasattr_checked(v, '__class__'): + elif hasattr_checked(v, "__class__"): if v.__class__ == frame_type: value = pydevd_resolver.frameResolver.get_frame_name(v) elif v.__class__ in (list, tuple): if len(v) > 300: - value = '%s: %s' % (str(v.__class__), '' % (len(v),)) + value = "%s: %s" % (str(v.__class__), "" % (len(v),)) else: - value = '%s: %s' % (str(v.__class__), v) + value = "%s: %s" % (str(v.__class__), v) else: try: cName = str(v.__class__) - if cName.find('.') != -1: - cName = cName.split('.')[-1] + if cName.find(".") != -1: + cName = cName.split(".")[-1] elif cName.find("'") != -1: # does not have '.' (could be something like ) - cName = cName[cName.index("'") + 1:] + cName = cName[cName.index("'") + 1 :] if cName.endswith("'>"): cName = cName[:-2] except: cName = str(v.__class__) - value = '%s: %s' % (cName, v) + value = "%s: %s" % (cName, v) else: value = str(v) except: try: value = repr(v) except: - value = 'Unable to get repr for %s' % v.__class__ + value = "Unable to get repr for %s" % v.__class__ # fix to work with unicode values try: if value.__class__ == bytes: - value = value.decode('utf-8', 'replace') + value = value.decode("utf-8", "replace") except TypeError: pass return type_name, type_qualifier, is_exception_on_eval, resolver, value -def var_to_xml(val, name, trim_if_too_big=True, additional_in_xml='', evaluate_full_value=True): - """ single variable or dictionary to xml representation """ +def var_to_xml(val, name, trim_if_too_big=True, additional_in_xml="", evaluate_full_value=True): + """single variable or dictionary to xml representation""" - type_name, type_qualifier, is_exception_on_eval, resolver, value = get_variable_details( - val, evaluate_full_value) + type_name, type_qualifier, is_exception_on_eval, resolver, value = get_variable_details(val, evaluate_full_value) - scope = get_var_scope(name, val, '', True) + scope = get_var_scope(name, val, "", True) try: - name = quote(name, '/>_= ') # TODO: Fix PY-5834 without using quote + name = quote(name, "/>_= ") # TODO: Fix PY-5834 without using quote except: pass @@ -398,17 +408,17 @@ def var_to_xml(val, name, trim_if_too_big=True, additional_in_xml='', evaluate_f if type_qualifier: xml_qualifier = 'qualifier="%s"' % make_valid_xml_value(type_qualifier) else: - xml_qualifier = '' + xml_qualifier = "" if value: # cannot be too big... communication may not handle it. if len(value) > MAXIMUM_VARIABLE_REPRESENTATION_SIZE and trim_if_too_big: value = value[0:MAXIMUM_VARIABLE_REPRESENTATION_SIZE] - value += '...' + value += "..." - xml_value = ' value="%s"' % (make_valid_xml_value(quote(value, '/>_= '))) + xml_value = ' value="%s"' % (make_valid_xml_value(quote(value, "/>_= "))) else: - xml_value = '' + xml_value = "" if is_exception_on_eval: xml_container = ' isErrorOnEval="True"' @@ -416,9 +426,9 @@ def var_to_xml(val, name, trim_if_too_big=True, additional_in_xml='', evaluate_f if resolver is not None: xml_container = ' isContainer="True"' else: - xml_container = '' + xml_container = "" if scope: - return ''.join((xml, xml_qualifier, xml_value, xml_container, additional_in_xml, ' scope="', scope, '"', ' />\n')) + return "".join((xml, xml_qualifier, xml_value, xml_container, additional_in_xml, ' scope="', scope, '"', " />\n")) else: - return ''.join((xml, xml_qualifier, xml_value, xml_container, additional_in_xml, ' />\n')) + return "".join((xml, xml_qualifier, xml_value, xml_container, additional_in_xml, " />\n")) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py index 0864a4e38..7b7effcfb 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_cython_wrapper.py @@ -9,13 +9,13 @@ import sys try: - is_64bits = sys.maxsize > 2 ** 32 + is_64bits = sys.maxsize > 2**32 except: # In Jython this call fails, but this is Ok, we don't support Jython for speedups anyways. raise ImportError - plat = '32' + plat = "32" if is_64bits: - plat = '64' + plat = "64" # We also accept things as: # @@ -25,8 +25,8 @@ # to have multiple pre-compiled pyds distributed along the IDE # (generated by build_tools/build_binaries_windows.py). - mod_name = 'pydevd_frame_evaluator_%s_%s%s_%s' % (sys.platform, sys.version_info[0], sys.version_info[1], plat) - check_name = '_pydevd_frame_eval.%s' % (mod_name,) + mod_name = "pydevd_frame_evaluator_%s_%s%s_%s" % (sys.platform, sys.version_info[0], sys.version_info[1], plat) + check_name = "_pydevd_frame_eval.%s" % (mod_name,) mod = __import__(check_name) mod = getattr(mod, mod_name) except ImportError: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py index bfebea28f..1049be0dd 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_eval_main.py @@ -2,9 +2,18 @@ from _pydev_bundle import pydev_log from _pydevd_bundle.pydevd_trace_dispatch import USING_CYTHON -from _pydevd_bundle.pydevd_constants import USE_CYTHON_FLAG, ENV_FALSE_LOWER_VALUES, \ - ENV_TRUE_LOWER_VALUES, IS_PY36_OR_GREATER, IS_PY38_OR_GREATER, SUPPORT_GEVENT, IS_PYTHON_STACKLESS, \ - PYDEVD_USE_FRAME_EVAL, PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING +from _pydevd_bundle.pydevd_constants import ( + USE_CYTHON_FLAG, + ENV_FALSE_LOWER_VALUES, + ENV_TRUE_LOWER_VALUES, + IS_PY36_OR_GREATER, + IS_PY38_OR_GREATER, + SUPPORT_GEVENT, + IS_PYTHON_STACKLESS, + PYDEVD_USE_FRAME_EVAL, + PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING, + IS_PY311_OR_GREATER, +) frame_eval_func = None stop_frame_eval = None @@ -13,16 +22,16 @@ # "NO" means we should not use frame evaluation, 'YES' we should use it (and fail if not there) and unspecified uses if possible. if ( - PYDEVD_USE_FRAME_EVAL in ENV_FALSE_LOWER_VALUES or - USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES or - not USING_CYTHON or - - # Frame eval mode does not work with ipython compatible debugging (this happens because the - # way that frame eval works is run untraced and set tracing only for the frames with - # breakpoints, but ipython compatible debugging creates separate frames for what's logically - # the same frame). - PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING - ): + PYDEVD_USE_FRAME_EVAL in ENV_FALSE_LOWER_VALUES + or USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES + or not USING_CYTHON + or + # Frame eval mode does not work with ipython compatible debugging (this happens because the + # way that frame eval works is run untraced and set tracing only for the frames with + # breakpoints, but ipython compatible debugging creates separate frames for what's logically + # the same frame). + PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING +): USING_FRAME_EVAL = False elif SUPPORT_GEVENT or (IS_PYTHON_STACKLESS and not IS_PY38_OR_GREATER): @@ -32,17 +41,31 @@ # Same problem with Stackless. # https://github.com/stackless-dev/stackless/issues/240 -elif PYDEVD_USE_FRAME_EVAL in ENV_TRUE_LOWER_VALUES: +elif PYDEVD_USE_FRAME_EVAL in ENV_TRUE_LOWER_VALUES and not IS_PY311_OR_GREATER: + # Python 3.11 onwards doesn't have frame eval mode implemented # Fail if unable to use - from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import frame_eval_func, stop_frame_eval, dummy_trace_dispatch, clear_thread_local_info + from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import ( + frame_eval_func, + stop_frame_eval, + dummy_trace_dispatch, + clear_thread_local_info, + ) + USING_FRAME_EVAL = True else: USING_FRAME_EVAL = False # Try to use if possible - if IS_PY36_OR_GREATER: + if IS_PY36_OR_GREATER and not IS_PY311_OR_GREATER: + # Python 3.11 onwards doesn't have frame eval mode implemented try: - from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import frame_eval_func, stop_frame_eval, dummy_trace_dispatch, clear_thread_local_info + from _pydevd_frame_eval.pydevd_frame_eval_cython_wrapper import ( + frame_eval_func, + stop_frame_eval, + dummy_trace_dispatch, + clear_thread_local_info, + ) + USING_FRAME_EVAL = True except ImportError: pydev_log.show_compile_cython_command_line() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c index 245e02719..862b37a90 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_evaluator.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.29.32 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -21,6 +21,16 @@ END: Cython Metadata */ #ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN #endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + #include "Python.h" #if PY_VERSION_HEX >= 0x03090000 #include "internal/pycore_gc.h" @@ -29,17 +39,24 @@ END: Cython Metadata */ #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" #else -#define CYTHON_ABI "0_29_32" -#define CYTHON_HEX_VERSION 0x001D20F0 -#define CYTHON_FUTURE_DIVISION 0 +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000AF0 +#define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) #ifndef __stdcall #define __stdcall #endif @@ -58,9 +75,7 @@ END: Cython Metadata */ #endif #define __PYX_COMMA , #ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif + #define HAVE_LONG_LONG #endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG @@ -68,13 +83,19 @@ END: Cython Metadata */ #ifndef Py_HUGE_VAL #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 #define CYTHON_COMPILING_IN_NOGIL 0 #undef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #if PY_VERSION_HEX < 0x03050000 @@ -99,10 +120,19 @@ END: Cython Metadata */ #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #undef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 0 #undef CYTHON_USE_DICT_VERSIONS @@ -110,46 +140,127 @@ END: Cython Metadata */ #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC - #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900) + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #undef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 0 #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 #undef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #undef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif #undef CYTHON_USE_DICT_VERSIONS #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK @@ -157,19 +268,28 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif -#elif defined(PY_NOGIL) + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 1 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -177,8 +297,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -190,11 +308,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -202,18 +331,25 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 #define CYTHON_COMPILING_IN_NOGIL 0 #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 1 #endif #if PY_MAJOR_VERSION < 3 @@ -222,10 +358,7 @@ END: Cython Metadata */ #elif !defined(CYTHON_USE_ASYNC_SLOTS) #define CYTHON_USE_ASYNC_SLOTS 1 #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #ifndef CYTHON_USE_PYLONG_INTERNALS #define CYTHON_USE_PYLONG_INTERNALS 1 #endif #ifndef CYTHON_USE_PYLIST_INTERNALS @@ -249,37 +382,62 @@ END: Cython Metadata */ #ifndef CYTHON_UNPACK_METHODS #define CYTHON_UNPACK_METHODS 1 #endif - #if PY_VERSION_HEX >= 0x030B00A4 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #elif !defined(CYTHON_FAST_THREAD_STATE) + #ifndef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 1 #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000) + #define CYTHON_FAST_PYCALL 1 #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 #endif - #if PY_VERSION_HEX >= 0x030B00A4 + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 #elif !defined(CYTHON_USE_EXC_INFO_STACK) - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #define CYTHON_USE_EXC_INFO_STACK 1 #endif #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) #endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) #if CYTHON_USE_PYLONG_INTERNALS #if PY_MAJOR_VERSION < 3 #include "longintrepr.h" @@ -308,6 +466,17 @@ END: Cython Metadata */ #define CYTHON_RESTRICT #endif #endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif #ifndef CYTHON_UNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) @@ -321,13 +490,16 @@ END: Cython Metadata */ # define CYTHON_UNUSED # endif #endif -#ifndef CYTHON_MAYBE_UNUSED_VAR +#ifndef CYTHON_UNUSED_VAR # if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } + template void CYTHON_UNUSED_VAR( const T& ) { } # else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# define CYTHON_UNUSED_VAR(x) (void)(x) # endif #endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif #ifndef CYTHON_NCP_UNUSED # if CYTHON_COMPILING_IN_CPYTHON # define CYTHON_NCP_UNUSED @@ -335,28 +507,59 @@ END: Cython Metadata */ # define CYTHON_NCP_UNUSED CYTHON_UNUSED # endif #endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) #ifdef _MSC_VER #ifndef _MSC_STDINT_H_ #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; #endif #endif #else - #include + #include + typedef uintptr_t __pyx_uintptr_t; #endif #ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif #endif #endif #ifndef CYTHON_FALLTHROUGH @@ -366,13 +569,26 @@ END: Cython Metadata */ #define CYTHON_FALLTHROUGH #endif #endif - #if defined(__clang__ ) && defined(__apple_build_version__) + #if defined(__clang__) && defined(__apple_build_version__) #if __apple_build_version__ < 7000000 #undef CYTHON_FALLTHROUGH #define CYTHON_FALLTHROUGH #endif #endif #endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) #ifndef CYTHON_INLINE #if defined(__clang__) @@ -388,85 +604,145 @@ END: Cython Metadata */ #endif #endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif #define __PYX_BUILD_PY_SSIZE_T "n" #define CYTHON_FORMAT_SSIZE_T "z" #if PY_MAJOR_VERSION < 3 #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" #define __Pyx_DefaultClassType PyType_Type -#if PY_VERSION_HEX >= 0x030B00A1 - static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f, +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, PyObject *code, PyObject *c, PyObject* n, PyObject *v, PyObject *fv, PyObject *cell, PyObject* fn, PyObject *name, int fline, PyObject *lnos) { - PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL; - PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL; - const char *fn_cstr=NULL; - const char *name_cstr=NULL; - PyCodeObject* co=NULL; + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; PyObject *type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); - if (!(kwds=PyDict_New())) goto end; - if (!(argcount=PyLong_FromLong(a))) goto end; - if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end; - if (!(posonlyargcount=PyLong_FromLong(0))) goto end; - if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end; - if (!(kwonlyargcount=PyLong_FromLong(k))) goto end; - if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end; - if (!(nlocals=PyLong_FromLong(l))) goto end; - if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end; - if (!(stacksize=PyLong_FromLong(s))) goto end; - if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end; - if (!(flags=PyLong_FromLong(f))) goto end; - if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end; - if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end; - if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end; - if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end; - if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end; - if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too; - if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here - if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too; - Py_XDECREF((PyObject*)co); - co = (PyCodeObject*)call_result; - call_result = NULL; - if (0) { - cleanup_code_too: - Py_XDECREF((PyObject*)co); - co = NULL; + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); } - end: - Py_XDECREF(kwds); - Py_XDECREF(argcount); - Py_XDECREF(posonlyargcount); - Py_XDECREF(kwonlyargcount); - Py_XDECREF(nlocals); - Py_XDECREF(stacksize); - Py_XDECREF(replace); - Py_XDECREF(call_result); - Py_XDECREF(empty); + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); if (type) { PyErr_Restore(type, value, traceback); } - return co; + return result; } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif - #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 #endif #ifndef Py_TPFLAGS_CHECKTYPES #define Py_TPFLAGS_CHECKTYPES 0 @@ -480,6 +756,12 @@ END: Cython Metadata */ #ifndef Py_TPFLAGS_HAVE_FINALIZE #define Py_TPFLAGS_HAVE_FINALIZE 0 #endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif #ifndef METH_STACKLESS #define METH_STACKLESS 0 #endif @@ -491,34 +773,89 @@ END: Cython Metadata */ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames); #else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; #endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); #else -#define __Pyx_PyFastCFunction_Check(func) 0 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 #endif #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) #define PyObject_Malloc(s) PyMem_Malloc(s) #define PyObject_Free(p) PyMem_Free(p) #define PyObject_Realloc(p) PyMem_Realloc(p) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) #else #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) #endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() #elif PY_VERSION_HEX >= 0x03060000 #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() #elif PY_VERSION_HEX >= 0x03000000 @@ -526,6 +863,22 @@ END: Cython Metadata */ #else #define __Pyx_PyThreadState_Current _PyThreadState_Current #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) #include "pythread.h" #define Py_tss_NEEDS_INIT 0 @@ -556,7 +909,29 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { return PyThread_get_key_value(*key); } #endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) #define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) #else #define __Pyx_PyDict_NewPresized(n) PyDict_New() @@ -568,34 +943,91 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) #endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} #else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) #endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) +#if CYTHON_COMPILING_IN_LIMITED_API #define CYTHON_PEP393_ENABLED 1 - #if defined(PyUnicode_IS_READY) - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #else #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) #endif #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #endif + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif #endif #else #define CYTHON_PEP393_ENABLED 0 @@ -605,11 +1037,11 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_READY(op) (0) #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) #endif #if CYTHON_COMPILING_IN_PYPY @@ -620,14 +1052,20 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) #endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif #endif #define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) #define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) @@ -656,8 +1094,14 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) #endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif #ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) #endif #if PY_VERSION_HEX >= 0x030900A4 #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) @@ -667,15 +1111,42 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) #endif #if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) #else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } #endif #if PY_MAJOR_VERSION >= 3 #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) #define PyInt_FromString PyLong_FromString #define PyInt_FromUnicode PyLong_FromUnicode #define PyInt_FromLong PyLong_FromLong @@ -687,6 +1158,9 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) #endif #if PY_MAJOR_VERSION >= 3 #define PyBoolObject PyLongObject @@ -704,11 +1178,6 @@ static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t #endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif #if CYTHON_USE_ASYNC_SLOTS #if PY_VERSION_HEX >= 0x030500B1 #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods @@ -749,11 +1218,20 @@ static CYTHON_INLINE float __PYX_NAN() { #endif #define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } #define __PYX_ERR(f_index, lineno, Ln_error) \ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } -#ifndef __PYX_EXTERN_C +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else @@ -836,9 +1314,10 @@ static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { #else #define __Pyx_sst_abs(value) ((value<0) ? -value : value) #endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) #define __Pyx_PyBytes_FromString PyBytes_FromString #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize @@ -856,9 +1335,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) #define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) #define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) @@ -866,13 +1345,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); #define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) #define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) #define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) @@ -896,11 +1369,57 @@ static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); #else #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) #endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; PyObject* default_encoding = NULL; PyObject* ascii_chars_u = NULL; PyObject* ascii_chars_b = NULL; @@ -918,7 +1437,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { char ascii_chars[128]; int c; for (c = 0; c < 128; c++) { - ascii_chars[c] = c; + ascii_chars[c] = (char) c; } __Pyx_sys_getdefaultencoding_not_ascii = 1; ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); @@ -948,6 +1467,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #else #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include static char* __PYX_DEFAULT_STRING_ENCODING; static int __Pyx_init_sys_getdefaultencoding_params(void) { PyObject* sys; @@ -983,24 +1503,30 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) { #endif /* __GNUC__ */ static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } +#if !CYTHON_USE_MODULE_STATE static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; +#endif static int __pyx_lineno; static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; +static const char * __pyx_cfilenm = __FILE__; static const char *__pyx_filename; +/* #### Code section: filename_table ### */ static const char *__pyx_f[] = { - "_pydevd_frame_eval/pydevd_frame_evaluator.pyx", - "stringsource", - "_pydevd_bundle/pydevd_cython.pxd", + "_pydevd_frame_eval\\\\pydevd_frame_evaluator.pyx", + "", + "_pydevd_bundle\\\\pydevd_cython.pxd", }; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; @@ -1016,6 +1542,7 @@ struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; */ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { PyObject_HEAD + struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtab; int pydev_state; PyObject *pydev_step_stop; int pydev_original_step_cmd; @@ -1042,6 +1569,8 @@ struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { PyObject *pydev_smart_step_into_variants; PyObject *target_id_to_smart_step_into_variant; int pydev_use_scoped_step_frame; + PyObject *weak_thread; + int is_in_wait_loop; }; @@ -1117,6 +1646,21 @@ struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue { +/* "_pydevd_bundle/pydevd_cython.pxd":1 + * cdef class PyDBAdditionalThreadInfo: # <<<<<<<<<<<<<< + * cdef public int pydev_state + * cdef public object pydev_step_stop # Actually, it's a frame or None + */ + +struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { + PyObject *(*get_topmost_frame)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *, int __pyx_skip_dispatch); + PyObject *(*update_stepping_info)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + PyObject *(*_get_related_thread)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + int (*_is_stepping)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); +}; +static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + + /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":24 * * @@ -1144,6 +1688,7 @@ struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValu PyObject *(*compute_force_stay_in_untraced_mode)(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *, PyObject *, int __pyx_skip_dispatch); }; static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; +/* #### Code section: utility_code_proto ### */ /* --- Runtime support code (head) --- */ /* Refnanny.proto */ @@ -1152,11 +1697,11 @@ static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca #endif #if CYTHON_REFNANNY typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); void (*FinishContext)(void**); } __Pyx_RefNannyAPIStruct; static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; @@ -1166,28 +1711,40 @@ static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca #define __Pyx_RefNannySetupContext(name, acquire_gil)\ if (acquire_gil) {\ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ PyGILState_Release(__pyx_gilstate_save);\ } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ } #else #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() #endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } #define __Pyx_RefNannyFinishContext()\ __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) #else #define __Pyx_RefNannyDeclarations #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() #define __Pyx_RefNannyFinishContext() #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_DECREF(r) Py_DECREF(r) @@ -1198,6 +1755,10 @@ static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca #define __Pyx_XGOTREF(r) #define __Pyx_XGIVEREF(r) #endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) #define __Pyx_XDECREF_SET(r, v) do {\ PyObject *tmp = (PyObject *) r;\ r = v; __Pyx_XDECREF(tmp);\ @@ -1209,6 +1770,57 @@ static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca #define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) #define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + /* PyObjectGetAttrStr.proto */ #if CYTHON_USE_TYPE_SLOTS static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); @@ -1216,9 +1828,76 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) #endif +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + /* PyDictVersioning.proto */ #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS #define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) @@ -1247,18 +1926,18 @@ static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UIN /* GetModuleGlobalName.proto */ #if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ +#define __Pyx_GetModuleGlobalName(var, name) do {\ static PY_UINT64_T __pyx_dict_version = 0;\ static PyObject *__pyx_dict_cached_value = NULL;\ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ PY_UINT64_T __pyx_dict_version;\ PyObject *__pyx_dict_cached_value;\ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} +} while(0) static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); #else #define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) @@ -1268,33 +1947,37 @@ static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); /* PyFunctionFastCall.proto */ #if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL #define __Pyx_PyFunction_FastCall(func, args, nargs)\ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) #endif #define __Pyx_BUILD_ASSERT_EXPR(cond)\ (sizeof(char [1 - 2*!(cond)]) - 1) #ifndef Py_MEMBER_SIZE #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) #endif -#if CYTHON_FAST_PYCALL - static size_t __pyx_pyframe_localsplus_offset = 0; +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 #include "frameobject.h" -#if PY_VERSION_HEX >= 0x030b00a6 +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API #ifndef Py_BUILD_CORE #define Py_BUILD_CORE 1 #endif #include "internal/pycore_frame.h" #endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" #define __Pxy_PyFrame_Initialize_Offsets()\ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) #define __Pyx_PyFrame_GetLocalsplus(frame)\ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif // CYTHON_FAST_PYCALL +#endif +#endif #endif /* PyObjectCall.proto */ @@ -1309,25 +1992,43 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); #endif -/* PyObjectCallNoArg.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); -#else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) -#endif +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +/* AssertionsEnabled.proto */ +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (1) +#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000) + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + static int __Pyx_init_assertions_enabled(void) { + PyObject *builtins, *debug, *debug_str; + int flag; + builtins = PyEval_GetBuiltins(); + if (!builtins) goto bad; + debug_str = PyUnicode_FromStringAndSize("__debug__", 9); + if (!debug_str) goto bad; + debug = PyObject_GetItem(builtins, debug_str); + Py_DECREF(debug_str); + if (!debug) goto bad; + flag = PyObject_IsTrue(debug); + Py_DECREF(debug); + if (flag == -1) goto bad; + __pyx_assertions_enabled_flag = flag; + return 0; + bad: + __pyx_assertions_enabled_flag = 1; + return -1; + } #else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) #endif -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY @@ -1343,15 +2044,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( PyObject** py_start, PyObject** py_stop, PyObject** py_slice, int has_cstart, int has_cstop, int wraparound); -/* IncludeStringH.proto */ -#include - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - /* StrEquals.proto */ #if PY_MAJOR_VERSION >= 3 #define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals @@ -1359,61 +2051,14 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals #endif -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - /* GetAttr3.proto */ static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); /* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); #endif @@ -1438,27 +2083,11 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /* PyObjectLookupSpecial.proto */ #if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return __Pyx_PyObject_GetAttrStr(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); #else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) #define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) #endif @@ -1471,7 +2100,7 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) #endif -/* None.proto */ +/* RaiseUnboundLocalError.proto */ static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); /* ExtTypeTest.proto */ @@ -1490,19 +2119,23 @@ static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /* KeywordStringCheck.proto */ -static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); +static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed); /* RaiseDoubleKeywords.proto */ static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + /* ArgTypeTest.proto */ #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ __Pyx__ArgTypeTest(obj, type, name, exact)) static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); @@ -1551,6 +2184,9 @@ static CYTHON_INLINE int __Pyx_IterFinish(void); /* UnpackItemEndCheck.proto */ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + /* PySequenceContains.proto */ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { int result = PySequence_Contains(seq, item); @@ -1593,19 +2229,37 @@ static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); } -/* WriteUnraisableException.proto */ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback, int nogil); - /* Import.proto */ static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /* ImportFrom.proto */ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + /* HasAttr.proto */ +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 +#define __Pyx_HasAttr(o, n) PyObject_HasAttrWithError(o, n) +#else static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); +#endif + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); /* PyObject_GenericGetAttrNoDict.proto */ #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 @@ -1622,54 +2276,217 @@ static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_nam #endif /* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); +static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable); -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyTypeObject *type); + +/* MergeVTables.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type); +#endif /* SetupReduce.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __Pyx_setup_reduce(PyObject* type_obj); +#endif /* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_10 +#define __PYX_HAVE_RT_ImportType_proto_3_0_10 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include #endif - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_10(s) alignof(s) #else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_10(s) sizeof(void*) #endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; +enum __Pyx_ImportType_CheckSize_3_0_10 { + __Pyx_ImportType_CheckSize_Error_3_0_10 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_10 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_10 = 2 }; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); +static PyTypeObject *__Pyx_ImportType_3_0_10(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_10 check_size); +#endif -/* GCCDiagnostics.proto */ -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) -#define __Pyx_HAS_GCC_DIAGNOSTIC +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC #endif /* CIntToPy.proto */ @@ -1684,39 +2501,53 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + /* FastTypeChecks.proto */ #if CYTHON_COMPILING_IN_CPYTHON #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); #else #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) #endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) /* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); /* InitStrings.proto */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); +/* #### Code section: module_declarations ### */ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_initialize(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyFrameObject *__pyx_v_frame_obj); /* proto*/ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_initialize_if_possible(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self); /* proto*/ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_compute_force_stay_in_untraced_mode(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self, PyObject *__pyx_v_breakpoints, int __pyx_skip_dispatch); /* proto*/ -/* Module declarations from 'cpython.mem' */ +/* Module declarations from "cpython.mem" */ -/* Module declarations from '_pydevd_bundle.pydevd_cython' */ -static PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = 0; +/* Module declarations from "_pydevd_bundle.pydevd_cython" */ -/* Module declarations from '_pydevd_frame_eval.pydevd_frame_evaluator' */ -static PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo = 0; -static PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo = 0; -static PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo = 0; -static PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = 0; +/* Module declarations from "_pydevd_frame_eval.pydevd_frame_evaluator" */ static int __pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator__code_extra_index; static int __pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator_IS_PY_39_OWNARDS; static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(PyFrameObject *); /*proto*/ @@ -1728,18 +2559,26 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_FuncCodeInfo__set_state(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *, PyObject *); /*proto*/ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CodeLineInfo__set_state(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *, PyObject *); /*proto*/ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CacheValue__set_state(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *, PyObject *); /*proto*/ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ #define __Pyx_MODULE_NAME "_pydevd_frame_eval.pydevd_frame_evaluator" extern int __pyx_module_is_main__pydevd_frame_eval__pydevd_frame_evaluator; int __pyx_module_is_main__pydevd_frame_eval__pydevd_frame_evaluator = 0; -/* Implementation of '_pydevd_frame_eval.pydevd_frame_evaluator' */ +/* Implementation of "_pydevd_frame_eval.pydevd_frame_evaluator" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_AssertionError; static PyObject *__pyx_builtin_AttributeError; static PyObject *__pyx_builtin_min; static PyObject *__pyx_builtin_max; +/* #### Code section: string_decls ### */ static const char __pyx_k_[] = "/"; static const char __pyx_k__2[] = "\\"; static const char __pyx_k__3[] = "."; static const char __pyx_k__5[] = ""; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k__10[] = "*"; +static const char __pyx_k__47[] = "?"; static const char __pyx_k_arg[] = "arg"; static const char __pyx_k_dis[] = "dis"; static const char __pyx_k_get[] = "get"; @@ -1756,6 +2595,8 @@ static const char __pyx_k_exit[] = "__exit__"; static const char __pyx_k_line[] = "line"; static const char __pyx_k_main[] = "main"; static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_self[] = "self"; +static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_test[] = "__test__"; static const char __pyx_k_cache[] = "_cache"; static const char __pyx_k_enter[] = "__enter__"; @@ -1767,6 +2608,8 @@ static const char __pyx_k_rfind[] = "rfind"; static const char __pyx_k_state[] = "state"; static const char __pyx_k_active[] = "_active"; static const char __pyx_k_call_2[] = "call"; +static const char __pyx_k_dict_2[] = "_dict"; +static const char __pyx_k_enable[] = "enable"; static const char __pyx_k_f_back[] = "f_back"; static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_main_2[] = "__main__"; @@ -1775,8 +2618,10 @@ static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_plugin[] = "plugin"; static const char __pyx_k_pydevd[] = "pydevd"; static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_return[] = "return"; static const char __pyx_k_thread[] = "thread"; static const char __pyx_k_update[] = "update"; +static const char __pyx_k_disable[] = "disable"; static const char __pyx_k_f_trace[] = "f_trace"; static const char __pyx_k_SetTrace[] = "SetTrace"; static const char __pyx_k_can_skip[] = "can_skip"; @@ -1787,6 +2632,7 @@ static const char __pyx_k_setstate[] = "__setstate__"; static const char __pyx_k_bootstrap[] = "__bootstrap"; static const char __pyx_k_decref_py[] = "decref_py"; static const char __pyx_k_get_ident[] = "_get_ident"; +static const char __pyx_k_isenabled[] = "isenabled"; static const char __pyx_k_last_line[] = "last_line"; static const char __pyx_k_pyx_state[] = "__pyx_state"; static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; @@ -1807,14 +2653,18 @@ static const char __pyx_k_get_ident_2[] = "get_ident"; static const char __pyx_k_thread_info[] = "thread_info"; static const char __pyx_k_CodeLineInfo[] = "_CodeLineInfo"; static const char __pyx_k_FuncCodeInfo[] = "FuncCodeInfo"; +static const char __pyx_k_initializing[] = "_initializing"; static const char __pyx_k_intersection[] = "intersection"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; static const char __pyx_k_pydev_monkey[] = "pydev_monkey"; static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_stringsource[] = ""; +static const char __pyx_k_use_setstate[] = "use_setstate"; static const char __pyx_k_version_info[] = "version_info"; static const char __pyx_k_get_file_type[] = "get_file_type"; static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; static const char __pyx_k_thread_active[] = "_thread_active"; +static const char __pyx_k_AssertionError[] = "AssertionError"; static const char __pyx_k_AttributeError[] = "AttributeError"; static const char __pyx_k_code_line_info[] = "code_line_info"; static const char __pyx_k_current_thread[] = "current_thread"; @@ -1833,6 +2683,7 @@ static const char __pyx_k_bootstrap_inner_2[] = "_bootstrap_inner"; static const char __pyx_k_pydevd_file_utils[] = "pydevd_file_utils"; static const char __pyx_k_signature_factory[] = "signature_factory"; static const char __pyx_k_thread_local_info[] = "_thread_local_info"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; static const char __pyx_k_get_code_line_info[] = "_get_code_line_info"; static const char __pyx_k_get_thread_info_py[] = "get_thread_info_py"; @@ -1851,13 +2702,22 @@ static const char __pyx_k_pyx_unpickle_ThreadInfo[] = "__pyx_unpickle_ThreadInfo static const char __pyx_k_breakpoints_hit_at_lines[] = "breakpoints_hit_at_lines"; static const char __pyx_k_pyx_unpickle__CacheValue[] = "__pyx_unpickle__CacheValue"; static const char __pyx_k_pyx_unpickle_FuncCodeInfo[] = "__pyx_unpickle_FuncCodeInfo"; +static const char __pyx_k_CacheValue___reduce_cython[] = "_CacheValue.__reduce_cython__"; +static const char __pyx_k_ThreadInfo___reduce_cython[] = "ThreadInfo.__reduce_cython__"; static const char __pyx_k_break_on_caught_exceptions[] = "break_on_caught_exceptions"; static const char __pyx_k_pyx_unpickle__CodeLineInfo[] = "__pyx_unpickle__CodeLineInfo"; static const char __pyx_k_get_cached_code_obj_info_py[] = "get_cached_code_obj_info_py"; static const char __pyx_k_has_plugin_exception_breaks[] = "has_plugin_exception_breaks"; +static const char __pyx_k_CacheValue___setstate_cython[] = "_CacheValue.__setstate_cython__"; +static const char __pyx_k_CodeLineInfo___reduce_cython[] = "_CodeLineInfo.__reduce_cython__"; +static const char __pyx_k_FuncCodeInfo___reduce_cython[] = "FuncCodeInfo.__reduce_cython__"; +static const char __pyx_k_ThreadInfo___setstate_cython[] = "ThreadInfo.__setstate_cython__"; static const char __pyx_k_NORM_PATHS_AND_BASE_CONTAINER[] = "NORM_PATHS_AND_BASE_CONTAINER"; +static const char __pyx_k_CodeLineInfo___setstate_cython[] = "_CodeLineInfo.__setstate_cython__"; +static const char __pyx_k_FuncCodeInfo___setstate_cython[] = "FuncCodeInfo.__setstate_cython__"; static const char __pyx_k_pydevd_bundle_pydevd_constants[] = "_pydevd_bundle.pydevd_constants"; static const char __pyx_k_pydevd_frame_eval_pydevd_frame[] = "_pydevd_frame_eval.pydevd_frame_tracing"; +static const char __pyx_k_CacheValue_compute_force_stay_i[] = "_CacheValue.compute_force_stay_in_untraced_mode"; static const char __pyx_k_If_a_code_object_is_cached_that[] = "If a code object is cached, that same code object must be reused."; static const char __pyx_k_get_abs_path_real_path_and_base[] = "get_abs_path_real_path_and_base_from_frame"; static const char __pyx_k_pydev_bundle__pydev_saved_modul[] = "_pydev_bundle._pydev_saved_modules"; @@ -1865,7 +2725,7 @@ static const char __pyx_k_pydevd_bundle_pydevd_additional[] = "_pydevd_bundle.py static const char __pyx_k_pydevd_bundle_pydevd_trace_disp[] = "_pydevd_bundle.pydevd_trace_dispatch"; static const char __pyx_k_pydevd_frame_eval_pydevd_modify[] = "_pydevd_frame_eval.pydevd_modify_bytecode"; static const char __pyx_k_set_additional_thread_info_lock[] = "_set_additional_thread_info_lock"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))"; static const char __pyx_k_break_on_user_uncaught_exception[] = "break_on_user_uncaught_exceptions"; static const char __pyx_k_compute_force_stay_in_untraced_m[] = "compute_force_stay_in_untraced_mode"; static const char __pyx_k_fix_top_level_trace_and_get_trac[] = "fix_top_level_trace_and_get_trace_func"; @@ -1873,149 +2733,10 @@ static const char __pyx_k_function_breakpoint_name_to_brea[] = "function_breakpo static const char __pyx_k_generate_code_with_breakpoints_p[] = "generate_code_with_breakpoints_py"; static const char __pyx_k_pydevd_frame_eval_pydevd_frame_2[] = "_pydevd_frame_eval/pydevd_frame_evaluator.pyx"; static const char __pyx_k_pydevd_frame_eval_pydevd_frame_3[] = "_pydevd_frame_eval.pydevd_frame_evaluator"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))"; -static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_4[] = "Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))"; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_n_s_AttributeError; -static PyObject *__pyx_n_s_CacheValue; -static PyObject *__pyx_n_s_CodeLineInfo; -static PyObject *__pyx_n_s_DebugHelper; -static PyObject *__pyx_n_s_FuncCodeInfo; -static PyObject *__pyx_n_s_GlobalDebuggerHolder; -static PyObject *__pyx_kp_s_If_a_code_object_is_cached_that; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3; -static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4; -static PyObject *__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER; -static PyObject *__pyx_n_s_PickleError; -static PyObject *__pyx_n_s_SetTrace; -static PyObject *__pyx_n_s_ThreadInfo; -static PyObject *__pyx_kp_s__2; -static PyObject *__pyx_kp_s__3; -static PyObject *__pyx_kp_s__5; -static PyObject *__pyx_n_s_active; -static PyObject *__pyx_n_s_additional_info; -static PyObject *__pyx_n_s_arg; -static PyObject *__pyx_n_s_bootstrap; -static PyObject *__pyx_n_s_bootstrap_2; -static PyObject *__pyx_n_s_bootstrap_inner; -static PyObject *__pyx_n_s_bootstrap_inner_2; -static PyObject *__pyx_n_s_break_on_caught_exceptions; -static PyObject *__pyx_n_s_break_on_user_uncaught_exception; -static PyObject *__pyx_n_s_breakpoints; -static PyObject *__pyx_n_s_breakpoints_hit_at_lines; -static PyObject *__pyx_n_s_cache; -static PyObject *__pyx_n_s_call; -static PyObject *__pyx_n_s_call_2; -static PyObject *__pyx_n_s_can_skip; -static PyObject *__pyx_n_s_clear_thread_local_info; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_code_line_info; -static PyObject *__pyx_n_s_code_obj; -static PyObject *__pyx_n_s_code_obj_py; -static PyObject *__pyx_n_s_compute_force_stay_in_untraced_m; -static PyObject *__pyx_n_s_current_thread; -static PyObject *__pyx_n_s_decref_py; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_dis; -static PyObject *__pyx_n_s_dummy_trace_dispatch; -static PyObject *__pyx_n_s_dummy_tracing_holder; -static PyObject *__pyx_n_s_enter; -static PyObject *__pyx_n_s_event; -static PyObject *__pyx_n_s_exec; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_f_back; -static PyObject *__pyx_n_s_f_trace; -static PyObject *__pyx_n_s_findlinestarts; -static PyObject *__pyx_n_s_first_line; -static PyObject *__pyx_n_s_fix_top_level_trace_and_get_trac; -static PyObject *__pyx_n_s_frame; -static PyObject *__pyx_n_s_frame_eval_func; -static PyObject *__pyx_n_s_function_breakpoint_name_to_brea; -static PyObject *__pyx_n_s_generate_code_with_breakpoints_p; -static PyObject *__pyx_n_s_get; -static PyObject *__pyx_n_s_get_abs_path_real_path_and_base; -static PyObject *__pyx_n_s_get_cache_file_type; -static PyObject *__pyx_n_s_get_cached_code_obj_info_py; -static PyObject *__pyx_n_s_get_code_line_info; -static PyObject *__pyx_n_s_get_file_type; -static PyObject *__pyx_n_s_get_func_code_info_py; -static PyObject *__pyx_n_s_get_ident; -static PyObject *__pyx_n_s_get_ident_2; -static PyObject *__pyx_n_s_get_thread_info_py; -static PyObject *__pyx_n_s_getstate; -static PyObject *__pyx_n_s_global_dbg; -static PyObject *__pyx_n_s_has_plugin_exception_breaks; -static PyObject *__pyx_n_s_has_plugin_line_breaks; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_insert_pydevd_breaks; -static PyObject *__pyx_n_s_intersection; -static PyObject *__pyx_n_s_is_pydev_daemon_thread; -static PyObject *__pyx_n_s_issuperset; -static PyObject *__pyx_n_s_last_line; -static PyObject *__pyx_n_s_line; -static PyObject *__pyx_n_s_line_to_offset; -static PyObject *__pyx_n_s_local; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_main_2; -static PyObject *__pyx_n_s_max; -static PyObject *__pyx_n_s_min; -static PyObject *__pyx_n_s_mtime; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_obj; -static PyObject *__pyx_n_s_offset; -static PyObject *__pyx_n_s_pickle; -static PyObject *__pyx_n_s_plugin; -static PyObject *__pyx_n_s_pydev_bundle__pydev_saved_modul; -static PyObject *__pyx_n_s_pydev_monkey; -static PyObject *__pyx_n_s_pydevd; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_additional; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_constants; -static PyObject *__pyx_n_s_pydevd_bundle_pydevd_trace_disp; -static PyObject *__pyx_n_s_pydevd_file_utils; -static PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_frame; -static PyObject *__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2; -static PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_frame_3; -static PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_modify; -static PyObject *__pyx_n_s_pydevd_tracing; -static PyObject *__pyx_n_s_pyx_PickleError; -static PyObject *__pyx_n_s_pyx_checksum; -static PyObject *__pyx_n_s_pyx_result; -static PyObject *__pyx_n_s_pyx_state; -static PyObject *__pyx_n_s_pyx_type; -static PyObject *__pyx_n_s_pyx_unpickle_FuncCodeInfo; -static PyObject *__pyx_n_s_pyx_unpickle_ThreadInfo; -static PyObject *__pyx_n_s_pyx_unpickle__CacheValue; -static PyObject *__pyx_n_s_pyx_unpickle__CodeLineInfo; -static PyObject *__pyx_n_s_pyx_vtable; -static PyObject *__pyx_n_s_reduce; -static PyObject *__pyx_n_s_reduce_cython; -static PyObject *__pyx_n_s_reduce_ex; -static PyObject *__pyx_n_s_rfind; -static PyObject *__pyx_n_s_run; -static PyObject *__pyx_n_s_set_additional_thread_info_lock; -static PyObject *__pyx_n_s_set_trace_func; -static PyObject *__pyx_n_s_setstate; -static PyObject *__pyx_n_s_setstate_cython; -static PyObject *__pyx_n_s_show_return_values; -static PyObject *__pyx_n_s_signature_factory; -static PyObject *__pyx_n_s_state; -static PyObject *__pyx_n_s_stop_frame_eval; -static PyObject *__pyx_kp_s_stringsource; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_thread; -static PyObject *__pyx_n_s_thread_active; -static PyObject *__pyx_n_s_thread_info; -static PyObject *__pyx_n_s_thread_local_info; -static PyObject *__pyx_n_s_threading; -static PyObject *__pyx_n_s_trace_dispatch; -static PyObject *__pyx_n_s_update; -static PyObject *__pyx_n_s_update_globals_dict; -static PyObject *__pyx_n_s_version_info; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_4[] = "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))"; +/* #### Code section: decls ### */ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_clear_thread_local_info(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self); /* proto */ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ @@ -2095,57 +2816,1064 @@ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_Thre static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_3; -static PyObject *__pyx_int_9; -static PyObject *__pyx_int_2520179; -static PyObject *__pyx_int_11485321; -static PyObject *__pyx_int_64258489; -static PyObject *__pyx_int_66829570; -static PyObject *__pyx_int_72405718; -static PyObject *__pyx_int_95010005; -static PyObject *__pyx_int_156687530; -static PyObject *__pyx_int_180628038; -static PyObject *__pyx_int_188670045; -static PyObject *__pyx_int_193022138; -static PyObject *__pyx_int_240343912; -static PyObject *__pyx_int_249558979; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_slice__24; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__28; -static PyObject *__pyx_tuple__30; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__34; -static PyObject *__pyx_tuple__36; -static PyObject *__pyx_codeobj__10; -static PyObject *__pyx_codeobj__12; -static PyObject *__pyx_codeobj__13; -static PyObject *__pyx_codeobj__15; -static PyObject *__pyx_codeobj__17; -static PyObject *__pyx_codeobj__19; -static PyObject *__pyx_codeobj__21; -static PyObject *__pyx_codeobj__23; -static PyObject *__pyx_codeobj__27; -static PyObject *__pyx_codeobj__29; -static PyObject *__pyx_codeobj__31; -static PyObject *__pyx_codeobj__33; -static PyObject *__pyx_codeobj__35; -static PyObject *__pyx_codeobj__37; -/* Late includes */ +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo; + PyObject *__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo; + PyObject *__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo; + PyObject *__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; + #endif + PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo; + PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo; + PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo; + PyTypeObject *__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; + PyObject *__pyx_kp_s_; + PyObject *__pyx_n_s_AssertionError; + PyObject *__pyx_n_s_AttributeError; + PyObject *__pyx_n_s_CacheValue; + PyObject *__pyx_n_s_CacheValue___reduce_cython; + PyObject *__pyx_n_s_CacheValue___setstate_cython; + PyObject *__pyx_n_s_CacheValue_compute_force_stay_i; + PyObject *__pyx_n_s_CodeLineInfo; + PyObject *__pyx_n_s_CodeLineInfo___reduce_cython; + PyObject *__pyx_n_s_CodeLineInfo___setstate_cython; + PyObject *__pyx_n_s_DebugHelper; + PyObject *__pyx_n_s_FuncCodeInfo; + PyObject *__pyx_n_s_FuncCodeInfo___reduce_cython; + PyObject *__pyx_n_s_FuncCodeInfo___setstate_cython; + PyObject *__pyx_n_s_GlobalDebuggerHolder; + PyObject *__pyx_kp_s_If_a_code_object_is_cached_that; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4; + PyObject *__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER; + PyObject *__pyx_n_s_PickleError; + PyObject *__pyx_n_s_SetTrace; + PyObject *__pyx_n_s_ThreadInfo; + PyObject *__pyx_n_s_ThreadInfo___reduce_cython; + PyObject *__pyx_n_s_ThreadInfo___setstate_cython; + PyObject *__pyx_n_s__10; + PyObject *__pyx_kp_s__2; + PyObject *__pyx_kp_s__3; + PyObject *__pyx_kp_u__3; + PyObject *__pyx_n_s__47; + PyObject *__pyx_kp_s__5; + PyObject *__pyx_n_s_active; + PyObject *__pyx_n_s_additional_info; + PyObject *__pyx_n_s_arg; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_bootstrap; + PyObject *__pyx_n_s_bootstrap_2; + PyObject *__pyx_n_s_bootstrap_inner; + PyObject *__pyx_n_s_bootstrap_inner_2; + PyObject *__pyx_n_s_break_on_caught_exceptions; + PyObject *__pyx_n_s_break_on_user_uncaught_exception; + PyObject *__pyx_n_s_breakpoints; + PyObject *__pyx_n_s_breakpoints_hit_at_lines; + PyObject *__pyx_n_s_cache; + PyObject *__pyx_n_s_call; + PyObject *__pyx_n_s_call_2; + PyObject *__pyx_n_s_can_skip; + PyObject *__pyx_n_s_clear_thread_local_info; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_code_line_info; + PyObject *__pyx_n_s_code_obj; + PyObject *__pyx_n_s_code_obj_py; + PyObject *__pyx_n_s_compute_force_stay_in_untraced_m; + PyObject *__pyx_n_s_current_thread; + PyObject *__pyx_n_s_decref_py; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_n_s_dict_2; + PyObject *__pyx_n_s_dis; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_dummy_trace_dispatch; + PyObject *__pyx_n_s_dummy_tracing_holder; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_enter; + PyObject *__pyx_n_s_event; + PyObject *__pyx_n_s_exec; + PyObject *__pyx_n_s_exit; + PyObject *__pyx_n_s_f_back; + PyObject *__pyx_n_s_f_trace; + PyObject *__pyx_n_s_findlinestarts; + PyObject *__pyx_n_s_first_line; + PyObject *__pyx_n_s_fix_top_level_trace_and_get_trac; + PyObject *__pyx_n_s_frame; + PyObject *__pyx_n_s_frame_eval_func; + PyObject *__pyx_n_s_function_breakpoint_name_to_brea; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_generate_code_with_breakpoints_p; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_abs_path_real_path_and_base; + PyObject *__pyx_n_s_get_cache_file_type; + PyObject *__pyx_n_s_get_cached_code_obj_info_py; + PyObject *__pyx_n_s_get_code_line_info; + PyObject *__pyx_n_s_get_file_type; + PyObject *__pyx_n_s_get_func_code_info_py; + PyObject *__pyx_n_s_get_ident; + PyObject *__pyx_n_s_get_ident_2; + PyObject *__pyx_n_s_get_thread_info_py; + PyObject *__pyx_n_s_getstate; + PyObject *__pyx_n_s_global_dbg; + PyObject *__pyx_n_s_has_plugin_exception_breaks; + PyObject *__pyx_n_s_has_plugin_line_breaks; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_insert_pydevd_breaks; + PyObject *__pyx_n_s_intersection; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_is_pydev_daemon_thread; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_issuperset; + PyObject *__pyx_n_s_last_line; + PyObject *__pyx_n_s_line; + PyObject *__pyx_n_s_line_to_offset; + PyObject *__pyx_n_s_local; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_main_2; + PyObject *__pyx_n_s_max; + PyObject *__pyx_n_s_min; + PyObject *__pyx_n_s_mtime; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_new; + PyObject *__pyx_n_s_obj; + PyObject *__pyx_n_s_offset; + PyObject *__pyx_n_s_pickle; + PyObject *__pyx_n_s_plugin; + PyObject *__pyx_n_s_pydev_bundle__pydev_saved_modul; + PyObject *__pyx_n_s_pydev_monkey; + PyObject *__pyx_n_s_pydevd; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_additional; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_constants; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_trace_disp; + PyObject *__pyx_n_s_pydevd_file_utils; + PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_frame; + PyObject *__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2; + PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_frame_3; + PyObject *__pyx_n_s_pydevd_frame_eval_pydevd_modify; + PyObject *__pyx_n_s_pydevd_tracing; + PyObject *__pyx_n_s_pyx_PickleError; + PyObject *__pyx_n_s_pyx_checksum; + PyObject *__pyx_n_s_pyx_result; + PyObject *__pyx_n_s_pyx_state; + PyObject *__pyx_n_s_pyx_type; + PyObject *__pyx_n_s_pyx_unpickle_FuncCodeInfo; + PyObject *__pyx_n_s_pyx_unpickle_ThreadInfo; + PyObject *__pyx_n_s_pyx_unpickle__CacheValue; + PyObject *__pyx_n_s_pyx_unpickle__CodeLineInfo; + PyObject *__pyx_n_s_pyx_vtable; + PyObject *__pyx_n_s_reduce; + PyObject *__pyx_n_s_reduce_cython; + PyObject *__pyx_n_s_reduce_ex; + PyObject *__pyx_n_s_return; + PyObject *__pyx_n_s_rfind; + PyObject *__pyx_n_s_run; + PyObject *__pyx_n_s_self; + PyObject *__pyx_n_s_set_additional_thread_info_lock; + PyObject *__pyx_n_s_set_trace_func; + PyObject *__pyx_n_s_setstate; + PyObject *__pyx_n_s_setstate_cython; + PyObject *__pyx_n_s_show_return_values; + PyObject *__pyx_n_s_signature_factory; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_stop_frame_eval; + PyObject *__pyx_kp_s_stringsource; + PyObject *__pyx_n_s_sys; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_thread; + PyObject *__pyx_n_s_thread_active; + PyObject *__pyx_n_s_thread_info; + PyObject *__pyx_n_s_thread_local_info; + PyObject *__pyx_n_s_threading; + PyObject *__pyx_n_s_trace_dispatch; + PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_update_globals_dict; + PyObject *__pyx_n_s_use_setstate; + PyObject *__pyx_n_s_version_info; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_3; + PyObject *__pyx_int_9; + PyObject *__pyx_int_2520179; + PyObject *__pyx_int_11485321; + PyObject *__pyx_int_64258489; + PyObject *__pyx_int_66829570; + PyObject *__pyx_int_72405718; + PyObject *__pyx_int_95010005; + PyObject *__pyx_int_156687530; + PyObject *__pyx_int_180628038; + PyObject *__pyx_int_188670045; + PyObject *__pyx_int_193022138; + PyObject *__pyx_int_240343912; + PyObject *__pyx_int_249558979; + PyObject *__pyx_tuple__4; + PyObject *__pyx_tuple__6; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__8; + PyObject *__pyx_tuple__9; + PyObject *__pyx_slice__37; + PyObject *__pyx_tuple__12; + PyObject *__pyx_tuple__14; + PyObject *__pyx_tuple__18; + PyObject *__pyx_tuple__21; + PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__27; + PyObject *__pyx_tuple__29; + PyObject *__pyx_tuple__31; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__38; + PyObject *__pyx_tuple__39; + PyObject *__pyx_tuple__42; + PyObject *__pyx_codeobj__11; + PyObject *__pyx_codeobj__13; + PyObject *__pyx_codeobj__15; + PyObject *__pyx_codeobj__16; + PyObject *__pyx_codeobj__17; + PyObject *__pyx_codeobj__19; + PyObject *__pyx_codeobj__20; + PyObject *__pyx_codeobj__22; + PyObject *__pyx_codeobj__24; + PyObject *__pyx_codeobj__25; + PyObject *__pyx_codeobj__26; + PyObject *__pyx_codeobj__28; + PyObject *__pyx_codeobj__30; + PyObject *__pyx_codeobj__32; + PyObject *__pyx_codeobj__33; + PyObject *__pyx_codeobj__34; + PyObject *__pyx_codeobj__36; + PyObject *__pyx_codeobj__40; + PyObject *__pyx_codeobj__41; + PyObject *__pyx_codeobj__43; + PyObject *__pyx_codeobj__44; + PyObject *__pyx_codeobj__45; + PyObject *__pyx_codeobj__46; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + Py_CLEAR(clear_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + Py_CLEAR(clear_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + Py_CLEAR(clear_module_state->__pyx_kp_s_); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_n_s_AttributeError); + Py_CLEAR(clear_module_state->__pyx_n_s_CacheValue); + Py_CLEAR(clear_module_state->__pyx_n_s_CacheValue___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_CacheValue___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_CacheValue_compute_force_stay_i); + Py_CLEAR(clear_module_state->__pyx_n_s_CodeLineInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_CodeLineInfo___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_CodeLineInfo___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_DebugHelper); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_GlobalDebuggerHolder); + Py_CLEAR(clear_module_state->__pyx_kp_s_If_a_code_object_is_cached_that); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4); + Py_CLEAR(clear_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_SetTrace); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s__10); + Py_CLEAR(clear_module_state->__pyx_kp_s__2); + Py_CLEAR(clear_module_state->__pyx_kp_s__3); + Py_CLEAR(clear_module_state->__pyx_kp_u__3); + Py_CLEAR(clear_module_state->__pyx_n_s__47); + Py_CLEAR(clear_module_state->__pyx_kp_s__5); + Py_CLEAR(clear_module_state->__pyx_n_s_active); + Py_CLEAR(clear_module_state->__pyx_n_s_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_arg); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_2); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner_2); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_breakpoints); + Py_CLEAR(clear_module_state->__pyx_n_s_breakpoints_hit_at_lines); + Py_CLEAR(clear_module_state->__pyx_n_s_cache); + Py_CLEAR(clear_module_state->__pyx_n_s_call); + Py_CLEAR(clear_module_state->__pyx_n_s_call_2); + Py_CLEAR(clear_module_state->__pyx_n_s_can_skip); + Py_CLEAR(clear_module_state->__pyx_n_s_clear_thread_local_info); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_code_line_info); + Py_CLEAR(clear_module_state->__pyx_n_s_code_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_code_obj_py); + Py_CLEAR(clear_module_state->__pyx_n_s_compute_force_stay_in_untraced_m); + Py_CLEAR(clear_module_state->__pyx_n_s_current_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_decref_py); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_dict_2); + Py_CLEAR(clear_module_state->__pyx_n_s_dis); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_dummy_trace_dispatch); + Py_CLEAR(clear_module_state->__pyx_n_s_dummy_tracing_holder); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_enter); + Py_CLEAR(clear_module_state->__pyx_n_s_event); + Py_CLEAR(clear_module_state->__pyx_n_s_exec); + Py_CLEAR(clear_module_state->__pyx_n_s_exit); + Py_CLEAR(clear_module_state->__pyx_n_s_f_back); + Py_CLEAR(clear_module_state->__pyx_n_s_f_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_findlinestarts); + Py_CLEAR(clear_module_state->__pyx_n_s_first_line); + Py_CLEAR(clear_module_state->__pyx_n_s_fix_top_level_trace_and_get_trac); + Py_CLEAR(clear_module_state->__pyx_n_s_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_eval_func); + Py_CLEAR(clear_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_generate_code_with_breakpoints_p); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_CLEAR(clear_module_state->__pyx_n_s_get_cache_file_type); + Py_CLEAR(clear_module_state->__pyx_n_s_get_cached_code_obj_info_py); + Py_CLEAR(clear_module_state->__pyx_n_s_get_code_line_info); + Py_CLEAR(clear_module_state->__pyx_n_s_get_file_type); + Py_CLEAR(clear_module_state->__pyx_n_s_get_func_code_info_py); + Py_CLEAR(clear_module_state->__pyx_n_s_get_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_get_ident_2); + Py_CLEAR(clear_module_state->__pyx_n_s_get_thread_info_py); + Py_CLEAR(clear_module_state->__pyx_n_s_getstate); + Py_CLEAR(clear_module_state->__pyx_n_s_global_dbg); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_insert_pydevd_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_intersection); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_pydev_daemon_thread); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_issuperset); + Py_CLEAR(clear_module_state->__pyx_n_s_last_line); + Py_CLEAR(clear_module_state->__pyx_n_s_line); + Py_CLEAR(clear_module_state->__pyx_n_s_line_to_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_local); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_main_2); + Py_CLEAR(clear_module_state->__pyx_n_s_max); + Py_CLEAR(clear_module_state->__pyx_n_s_min); + Py_CLEAR(clear_module_state->__pyx_n_s_mtime); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_n_s_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_pickle); + Py_CLEAR(clear_module_state->__pyx_n_s_plugin); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_monkey); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_additional); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_trace_disp); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_file_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_frame); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_frame_3); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_modify); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle__CacheValue); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle__CodeLineInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); + Py_CLEAR(clear_module_state->__pyx_n_s_return); + Py_CLEAR(clear_module_state->__pyx_n_s_rfind); + Py_CLEAR(clear_module_state->__pyx_n_s_run); + Py_CLEAR(clear_module_state->__pyx_n_s_self); + Py_CLEAR(clear_module_state->__pyx_n_s_set_additional_thread_info_lock); + Py_CLEAR(clear_module_state->__pyx_n_s_set_trace_func); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_show_return_values); + Py_CLEAR(clear_module_state->__pyx_n_s_signature_factory); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_stop_frame_eval); + Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource); + Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_active); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_info); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_local_info); + Py_CLEAR(clear_module_state->__pyx_n_s_threading); + Py_CLEAR(clear_module_state->__pyx_n_s_trace_dispatch); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_update_globals_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_use_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_version_info); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_3); + Py_CLEAR(clear_module_state->__pyx_int_9); + Py_CLEAR(clear_module_state->__pyx_int_2520179); + Py_CLEAR(clear_module_state->__pyx_int_11485321); + Py_CLEAR(clear_module_state->__pyx_int_64258489); + Py_CLEAR(clear_module_state->__pyx_int_66829570); + Py_CLEAR(clear_module_state->__pyx_int_72405718); + Py_CLEAR(clear_module_state->__pyx_int_95010005); + Py_CLEAR(clear_module_state->__pyx_int_156687530); + Py_CLEAR(clear_module_state->__pyx_int_180628038); + Py_CLEAR(clear_module_state->__pyx_int_188670045); + Py_CLEAR(clear_module_state->__pyx_int_193022138); + Py_CLEAR(clear_module_state->__pyx_int_240343912); + Py_CLEAR(clear_module_state->__pyx_int_249558979); + Py_CLEAR(clear_module_state->__pyx_tuple__4); + Py_CLEAR(clear_module_state->__pyx_tuple__6); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__8); + Py_CLEAR(clear_module_state->__pyx_tuple__9); + Py_CLEAR(clear_module_state->__pyx_slice__37); + Py_CLEAR(clear_module_state->__pyx_tuple__12); + Py_CLEAR(clear_module_state->__pyx_tuple__14); + Py_CLEAR(clear_module_state->__pyx_tuple__18); + Py_CLEAR(clear_module_state->__pyx_tuple__21); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__29); + Py_CLEAR(clear_module_state->__pyx_tuple__31); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__39); + Py_CLEAR(clear_module_state->__pyx_tuple__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__11); + Py_CLEAR(clear_module_state->__pyx_codeobj__13); + Py_CLEAR(clear_module_state->__pyx_codeobj__15); + Py_CLEAR(clear_module_state->__pyx_codeobj__16); + Py_CLEAR(clear_module_state->__pyx_codeobj__17); + Py_CLEAR(clear_module_state->__pyx_codeobj__19); + Py_CLEAR(clear_module_state->__pyx_codeobj__20); + Py_CLEAR(clear_module_state->__pyx_codeobj__22); + Py_CLEAR(clear_module_state->__pyx_codeobj__24); + Py_CLEAR(clear_module_state->__pyx_codeobj__25); + Py_CLEAR(clear_module_state->__pyx_codeobj__26); + Py_CLEAR(clear_module_state->__pyx_codeobj__28); + Py_CLEAR(clear_module_state->__pyx_codeobj__30); + Py_CLEAR(clear_module_state->__pyx_codeobj__32); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__40); + Py_CLEAR(clear_module_state->__pyx_codeobj__41); + Py_CLEAR(clear_module_state->__pyx_codeobj__43); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__45); + Py_CLEAR(clear_module_state->__pyx_codeobj__46); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + Py_VISIT(traverse_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + Py_VISIT(traverse_module_state->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + Py_VISIT(traverse_module_state->__pyx_kp_s_); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_n_s_AttributeError); + Py_VISIT(traverse_module_state->__pyx_n_s_CacheValue); + Py_VISIT(traverse_module_state->__pyx_n_s_CacheValue___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_CacheValue___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_CacheValue_compute_force_stay_i); + Py_VISIT(traverse_module_state->__pyx_n_s_CodeLineInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_CodeLineInfo___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_CodeLineInfo___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_DebugHelper); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_GlobalDebuggerHolder); + Py_VISIT(traverse_module_state->__pyx_kp_s_If_a_code_object_is_cached_that); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4); + Py_VISIT(traverse_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_SetTrace); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s__10); + Py_VISIT(traverse_module_state->__pyx_kp_s__2); + Py_VISIT(traverse_module_state->__pyx_kp_s__3); + Py_VISIT(traverse_module_state->__pyx_kp_u__3); + Py_VISIT(traverse_module_state->__pyx_n_s__47); + Py_VISIT(traverse_module_state->__pyx_kp_s__5); + Py_VISIT(traverse_module_state->__pyx_n_s_active); + Py_VISIT(traverse_module_state->__pyx_n_s_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_arg); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_2); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner_2); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_breakpoints); + Py_VISIT(traverse_module_state->__pyx_n_s_breakpoints_hit_at_lines); + Py_VISIT(traverse_module_state->__pyx_n_s_cache); + Py_VISIT(traverse_module_state->__pyx_n_s_call); + Py_VISIT(traverse_module_state->__pyx_n_s_call_2); + Py_VISIT(traverse_module_state->__pyx_n_s_can_skip); + Py_VISIT(traverse_module_state->__pyx_n_s_clear_thread_local_info); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_code_line_info); + Py_VISIT(traverse_module_state->__pyx_n_s_code_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_code_obj_py); + Py_VISIT(traverse_module_state->__pyx_n_s_compute_force_stay_in_untraced_m); + Py_VISIT(traverse_module_state->__pyx_n_s_current_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_decref_py); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_dict_2); + Py_VISIT(traverse_module_state->__pyx_n_s_dis); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_dummy_trace_dispatch); + Py_VISIT(traverse_module_state->__pyx_n_s_dummy_tracing_holder); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_enter); + Py_VISIT(traverse_module_state->__pyx_n_s_event); + Py_VISIT(traverse_module_state->__pyx_n_s_exec); + Py_VISIT(traverse_module_state->__pyx_n_s_exit); + Py_VISIT(traverse_module_state->__pyx_n_s_f_back); + Py_VISIT(traverse_module_state->__pyx_n_s_f_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_findlinestarts); + Py_VISIT(traverse_module_state->__pyx_n_s_first_line); + Py_VISIT(traverse_module_state->__pyx_n_s_fix_top_level_trace_and_get_trac); + Py_VISIT(traverse_module_state->__pyx_n_s_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_eval_func); + Py_VISIT(traverse_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_generate_code_with_breakpoints_p); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_VISIT(traverse_module_state->__pyx_n_s_get_cache_file_type); + Py_VISIT(traverse_module_state->__pyx_n_s_get_cached_code_obj_info_py); + Py_VISIT(traverse_module_state->__pyx_n_s_get_code_line_info); + Py_VISIT(traverse_module_state->__pyx_n_s_get_file_type); + Py_VISIT(traverse_module_state->__pyx_n_s_get_func_code_info_py); + Py_VISIT(traverse_module_state->__pyx_n_s_get_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_get_ident_2); + Py_VISIT(traverse_module_state->__pyx_n_s_get_thread_info_py); + Py_VISIT(traverse_module_state->__pyx_n_s_getstate); + Py_VISIT(traverse_module_state->__pyx_n_s_global_dbg); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_insert_pydevd_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_intersection); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_pydev_daemon_thread); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_issuperset); + Py_VISIT(traverse_module_state->__pyx_n_s_last_line); + Py_VISIT(traverse_module_state->__pyx_n_s_line); + Py_VISIT(traverse_module_state->__pyx_n_s_line_to_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_local); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_main_2); + Py_VISIT(traverse_module_state->__pyx_n_s_max); + Py_VISIT(traverse_module_state->__pyx_n_s_min); + Py_VISIT(traverse_module_state->__pyx_n_s_mtime); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_n_s_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_pickle); + Py_VISIT(traverse_module_state->__pyx_n_s_plugin); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_monkey); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_additional); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_trace_disp); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_file_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_frame); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_frame_3); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_frame_eval_pydevd_modify); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle__CacheValue); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle__CodeLineInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); + Py_VISIT(traverse_module_state->__pyx_n_s_return); + Py_VISIT(traverse_module_state->__pyx_n_s_rfind); + Py_VISIT(traverse_module_state->__pyx_n_s_run); + Py_VISIT(traverse_module_state->__pyx_n_s_self); + Py_VISIT(traverse_module_state->__pyx_n_s_set_additional_thread_info_lock); + Py_VISIT(traverse_module_state->__pyx_n_s_set_trace_func); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_show_return_values); + Py_VISIT(traverse_module_state->__pyx_n_s_signature_factory); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_stop_frame_eval); + Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource); + Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_active); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_info); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_local_info); + Py_VISIT(traverse_module_state->__pyx_n_s_threading); + Py_VISIT(traverse_module_state->__pyx_n_s_trace_dispatch); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_update_globals_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_use_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_version_info); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_3); + Py_VISIT(traverse_module_state->__pyx_int_9); + Py_VISIT(traverse_module_state->__pyx_int_2520179); + Py_VISIT(traverse_module_state->__pyx_int_11485321); + Py_VISIT(traverse_module_state->__pyx_int_64258489); + Py_VISIT(traverse_module_state->__pyx_int_66829570); + Py_VISIT(traverse_module_state->__pyx_int_72405718); + Py_VISIT(traverse_module_state->__pyx_int_95010005); + Py_VISIT(traverse_module_state->__pyx_int_156687530); + Py_VISIT(traverse_module_state->__pyx_int_180628038); + Py_VISIT(traverse_module_state->__pyx_int_188670045); + Py_VISIT(traverse_module_state->__pyx_int_193022138); + Py_VISIT(traverse_module_state->__pyx_int_240343912); + Py_VISIT(traverse_module_state->__pyx_int_249558979); + Py_VISIT(traverse_module_state->__pyx_tuple__4); + Py_VISIT(traverse_module_state->__pyx_tuple__6); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__8); + Py_VISIT(traverse_module_state->__pyx_tuple__9); + Py_VISIT(traverse_module_state->__pyx_slice__37); + Py_VISIT(traverse_module_state->__pyx_tuple__12); + Py_VISIT(traverse_module_state->__pyx_tuple__14); + Py_VISIT(traverse_module_state->__pyx_tuple__18); + Py_VISIT(traverse_module_state->__pyx_tuple__21); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__29); + Py_VISIT(traverse_module_state->__pyx_tuple__31); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__39); + Py_VISIT(traverse_module_state->__pyx_tuple__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__11); + Py_VISIT(traverse_module_state->__pyx_codeobj__13); + Py_VISIT(traverse_module_state->__pyx_codeobj__15); + Py_VISIT(traverse_module_state->__pyx_codeobj__16); + Py_VISIT(traverse_module_state->__pyx_codeobj__17); + Py_VISIT(traverse_module_state->__pyx_codeobj__19); + Py_VISIT(traverse_module_state->__pyx_codeobj__20); + Py_VISIT(traverse_module_state->__pyx_codeobj__22); + Py_VISIT(traverse_module_state->__pyx_codeobj__24); + Py_VISIT(traverse_module_state->__pyx_codeobj__25); + Py_VISIT(traverse_module_state->__pyx_codeobj__26); + Py_VISIT(traverse_module_state->__pyx_codeobj__28); + Py_VISIT(traverse_module_state->__pyx_codeobj__30); + Py_VISIT(traverse_module_state->__pyx_codeobj__32); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__40); + Py_VISIT(traverse_module_state->__pyx_codeobj__41); + Py_VISIT(traverse_module_state->__pyx_codeobj__43); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__45); + Py_VISIT(traverse_module_state->__pyx_codeobj__46); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo __pyx_mstate_global->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo +#define __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo __pyx_mstate_global->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo +#define __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo __pyx_mstate_global->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo +#define __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue __pyx_mstate_global->__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue +#endif +#define __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo __pyx_mstate_global->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo +#define __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo __pyx_mstate_global->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo +#define __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo __pyx_mstate_global->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo +#define __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue __pyx_mstate_global->__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue +#define __pyx_kp_s_ __pyx_mstate_global->__pyx_kp_s_ +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_n_s_AttributeError __pyx_mstate_global->__pyx_n_s_AttributeError +#define __pyx_n_s_CacheValue __pyx_mstate_global->__pyx_n_s_CacheValue +#define __pyx_n_s_CacheValue___reduce_cython __pyx_mstate_global->__pyx_n_s_CacheValue___reduce_cython +#define __pyx_n_s_CacheValue___setstate_cython __pyx_mstate_global->__pyx_n_s_CacheValue___setstate_cython +#define __pyx_n_s_CacheValue_compute_force_stay_i __pyx_mstate_global->__pyx_n_s_CacheValue_compute_force_stay_i +#define __pyx_n_s_CodeLineInfo __pyx_mstate_global->__pyx_n_s_CodeLineInfo +#define __pyx_n_s_CodeLineInfo___reduce_cython __pyx_mstate_global->__pyx_n_s_CodeLineInfo___reduce_cython +#define __pyx_n_s_CodeLineInfo___setstate_cython __pyx_mstate_global->__pyx_n_s_CodeLineInfo___setstate_cython +#define __pyx_n_s_DebugHelper __pyx_mstate_global->__pyx_n_s_DebugHelper +#define __pyx_n_s_FuncCodeInfo __pyx_mstate_global->__pyx_n_s_FuncCodeInfo +#define __pyx_n_s_FuncCodeInfo___reduce_cython __pyx_mstate_global->__pyx_n_s_FuncCodeInfo___reduce_cython +#define __pyx_n_s_FuncCodeInfo___setstate_cython __pyx_mstate_global->__pyx_n_s_FuncCodeInfo___setstate_cython +#define __pyx_n_s_GlobalDebuggerHolder __pyx_mstate_global->__pyx_n_s_GlobalDebuggerHolder +#define __pyx_kp_s_If_a_code_object_is_cached_that __pyx_mstate_global->__pyx_kp_s_If_a_code_object_is_cached_that +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4 +#define __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER __pyx_mstate_global->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER +#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError +#define __pyx_n_s_SetTrace __pyx_mstate_global->__pyx_n_s_SetTrace +#define __pyx_n_s_ThreadInfo __pyx_mstate_global->__pyx_n_s_ThreadInfo +#define __pyx_n_s_ThreadInfo___reduce_cython __pyx_mstate_global->__pyx_n_s_ThreadInfo___reduce_cython +#define __pyx_n_s_ThreadInfo___setstate_cython __pyx_mstate_global->__pyx_n_s_ThreadInfo___setstate_cython +#define __pyx_n_s__10 __pyx_mstate_global->__pyx_n_s__10 +#define __pyx_kp_s__2 __pyx_mstate_global->__pyx_kp_s__2 +#define __pyx_kp_s__3 __pyx_mstate_global->__pyx_kp_s__3 +#define __pyx_kp_u__3 __pyx_mstate_global->__pyx_kp_u__3 +#define __pyx_n_s__47 __pyx_mstate_global->__pyx_n_s__47 +#define __pyx_kp_s__5 __pyx_mstate_global->__pyx_kp_s__5 +#define __pyx_n_s_active __pyx_mstate_global->__pyx_n_s_active +#define __pyx_n_s_additional_info __pyx_mstate_global->__pyx_n_s_additional_info +#define __pyx_n_s_arg __pyx_mstate_global->__pyx_n_s_arg +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_bootstrap __pyx_mstate_global->__pyx_n_s_bootstrap +#define __pyx_n_s_bootstrap_2 __pyx_mstate_global->__pyx_n_s_bootstrap_2 +#define __pyx_n_s_bootstrap_inner __pyx_mstate_global->__pyx_n_s_bootstrap_inner +#define __pyx_n_s_bootstrap_inner_2 __pyx_mstate_global->__pyx_n_s_bootstrap_inner_2 +#define __pyx_n_s_break_on_caught_exceptions __pyx_mstate_global->__pyx_n_s_break_on_caught_exceptions +#define __pyx_n_s_break_on_user_uncaught_exception __pyx_mstate_global->__pyx_n_s_break_on_user_uncaught_exception +#define __pyx_n_s_breakpoints __pyx_mstate_global->__pyx_n_s_breakpoints +#define __pyx_n_s_breakpoints_hit_at_lines __pyx_mstate_global->__pyx_n_s_breakpoints_hit_at_lines +#define __pyx_n_s_cache __pyx_mstate_global->__pyx_n_s_cache +#define __pyx_n_s_call __pyx_mstate_global->__pyx_n_s_call +#define __pyx_n_s_call_2 __pyx_mstate_global->__pyx_n_s_call_2 +#define __pyx_n_s_can_skip __pyx_mstate_global->__pyx_n_s_can_skip +#define __pyx_n_s_clear_thread_local_info __pyx_mstate_global->__pyx_n_s_clear_thread_local_info +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_code_line_info __pyx_mstate_global->__pyx_n_s_code_line_info +#define __pyx_n_s_code_obj __pyx_mstate_global->__pyx_n_s_code_obj +#define __pyx_n_s_code_obj_py __pyx_mstate_global->__pyx_n_s_code_obj_py +#define __pyx_n_s_compute_force_stay_in_untraced_m __pyx_mstate_global->__pyx_n_s_compute_force_stay_in_untraced_m +#define __pyx_n_s_current_thread __pyx_mstate_global->__pyx_n_s_current_thread +#define __pyx_n_s_decref_py __pyx_mstate_global->__pyx_n_s_decref_py +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2 +#define __pyx_n_s_dis __pyx_mstate_global->__pyx_n_s_dis +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_dummy_trace_dispatch __pyx_mstate_global->__pyx_n_s_dummy_trace_dispatch +#define __pyx_n_s_dummy_tracing_holder __pyx_mstate_global->__pyx_n_s_dummy_tracing_holder +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter +#define __pyx_n_s_event __pyx_mstate_global->__pyx_n_s_event +#define __pyx_n_s_exec __pyx_mstate_global->__pyx_n_s_exec +#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit +#define __pyx_n_s_f_back __pyx_mstate_global->__pyx_n_s_f_back +#define __pyx_n_s_f_trace __pyx_mstate_global->__pyx_n_s_f_trace +#define __pyx_n_s_findlinestarts __pyx_mstate_global->__pyx_n_s_findlinestarts +#define __pyx_n_s_first_line __pyx_mstate_global->__pyx_n_s_first_line +#define __pyx_n_s_fix_top_level_trace_and_get_trac __pyx_mstate_global->__pyx_n_s_fix_top_level_trace_and_get_trac +#define __pyx_n_s_frame __pyx_mstate_global->__pyx_n_s_frame +#define __pyx_n_s_frame_eval_func __pyx_mstate_global->__pyx_n_s_frame_eval_func +#define __pyx_n_s_function_breakpoint_name_to_brea __pyx_mstate_global->__pyx_n_s_function_breakpoint_name_to_brea +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_generate_code_with_breakpoints_p __pyx_mstate_global->__pyx_n_s_generate_code_with_breakpoints_p +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_abs_path_real_path_and_base __pyx_mstate_global->__pyx_n_s_get_abs_path_real_path_and_base +#define __pyx_n_s_get_cache_file_type __pyx_mstate_global->__pyx_n_s_get_cache_file_type +#define __pyx_n_s_get_cached_code_obj_info_py __pyx_mstate_global->__pyx_n_s_get_cached_code_obj_info_py +#define __pyx_n_s_get_code_line_info __pyx_mstate_global->__pyx_n_s_get_code_line_info +#define __pyx_n_s_get_file_type __pyx_mstate_global->__pyx_n_s_get_file_type +#define __pyx_n_s_get_func_code_info_py __pyx_mstate_global->__pyx_n_s_get_func_code_info_py +#define __pyx_n_s_get_ident __pyx_mstate_global->__pyx_n_s_get_ident +#define __pyx_n_s_get_ident_2 __pyx_mstate_global->__pyx_n_s_get_ident_2 +#define __pyx_n_s_get_thread_info_py __pyx_mstate_global->__pyx_n_s_get_thread_info_py +#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate +#define __pyx_n_s_global_dbg __pyx_mstate_global->__pyx_n_s_global_dbg +#define __pyx_n_s_has_plugin_exception_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_exception_breaks +#define __pyx_n_s_has_plugin_line_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_line_breaks +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_insert_pydevd_breaks __pyx_mstate_global->__pyx_n_s_insert_pydevd_breaks +#define __pyx_n_s_intersection __pyx_mstate_global->__pyx_n_s_intersection +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_pydev_daemon_thread __pyx_mstate_global->__pyx_n_s_is_pydev_daemon_thread +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_issuperset __pyx_mstate_global->__pyx_n_s_issuperset +#define __pyx_n_s_last_line __pyx_mstate_global->__pyx_n_s_last_line +#define __pyx_n_s_line __pyx_mstate_global->__pyx_n_s_line +#define __pyx_n_s_line_to_offset __pyx_mstate_global->__pyx_n_s_line_to_offset +#define __pyx_n_s_local __pyx_mstate_global->__pyx_n_s_local +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_main_2 __pyx_mstate_global->__pyx_n_s_main_2 +#define __pyx_n_s_max __pyx_mstate_global->__pyx_n_s_max +#define __pyx_n_s_min __pyx_mstate_global->__pyx_n_s_min +#define __pyx_n_s_mtime __pyx_mstate_global->__pyx_n_s_mtime +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj +#define __pyx_n_s_offset __pyx_mstate_global->__pyx_n_s_offset +#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle +#define __pyx_n_s_plugin __pyx_mstate_global->__pyx_n_s_plugin +#define __pyx_n_s_pydev_bundle__pydev_saved_modul __pyx_mstate_global->__pyx_n_s_pydev_bundle__pydev_saved_modul +#define __pyx_n_s_pydev_monkey __pyx_mstate_global->__pyx_n_s_pydev_monkey +#define __pyx_n_s_pydevd __pyx_mstate_global->__pyx_n_s_pydevd +#define __pyx_n_s_pydevd_bundle_pydevd_additional __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_additional +#define __pyx_n_s_pydevd_bundle_pydevd_constants __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_constants +#define __pyx_n_s_pydevd_bundle_pydevd_trace_disp __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_trace_disp +#define __pyx_n_s_pydevd_file_utils __pyx_mstate_global->__pyx_n_s_pydevd_file_utils +#define __pyx_n_s_pydevd_frame_eval_pydevd_frame __pyx_mstate_global->__pyx_n_s_pydevd_frame_eval_pydevd_frame +#define __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2 __pyx_mstate_global->__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2 +#define __pyx_n_s_pydevd_frame_eval_pydevd_frame_3 __pyx_mstate_global->__pyx_n_s_pydevd_frame_eval_pydevd_frame_3 +#define __pyx_n_s_pydevd_frame_eval_pydevd_modify __pyx_mstate_global->__pyx_n_s_pydevd_frame_eval_pydevd_modify +#define __pyx_n_s_pydevd_tracing __pyx_mstate_global->__pyx_n_s_pydevd_tracing +#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError +#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum +#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result +#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state +#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type +#define __pyx_n_s_pyx_unpickle_FuncCodeInfo __pyx_mstate_global->__pyx_n_s_pyx_unpickle_FuncCodeInfo +#define __pyx_n_s_pyx_unpickle_ThreadInfo __pyx_mstate_global->__pyx_n_s_pyx_unpickle_ThreadInfo +#define __pyx_n_s_pyx_unpickle__CacheValue __pyx_mstate_global->__pyx_n_s_pyx_unpickle__CacheValue +#define __pyx_n_s_pyx_unpickle__CodeLineInfo __pyx_mstate_global->__pyx_n_s_pyx_unpickle__CodeLineInfo +#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce +#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython +#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex +#define __pyx_n_s_return __pyx_mstate_global->__pyx_n_s_return +#define __pyx_n_s_rfind __pyx_mstate_global->__pyx_n_s_rfind +#define __pyx_n_s_run __pyx_mstate_global->__pyx_n_s_run +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self +#define __pyx_n_s_set_additional_thread_info_lock __pyx_mstate_global->__pyx_n_s_set_additional_thread_info_lock +#define __pyx_n_s_set_trace_func __pyx_mstate_global->__pyx_n_s_set_trace_func +#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate +#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython +#define __pyx_n_s_show_return_values __pyx_mstate_global->__pyx_n_s_show_return_values +#define __pyx_n_s_signature_factory __pyx_mstate_global->__pyx_n_s_signature_factory +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_stop_frame_eval __pyx_mstate_global->__pyx_n_s_stop_frame_eval +#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource +#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_thread __pyx_mstate_global->__pyx_n_s_thread +#define __pyx_n_s_thread_active __pyx_mstate_global->__pyx_n_s_thread_active +#define __pyx_n_s_thread_info __pyx_mstate_global->__pyx_n_s_thread_info +#define __pyx_n_s_thread_local_info __pyx_mstate_global->__pyx_n_s_thread_local_info +#define __pyx_n_s_threading __pyx_mstate_global->__pyx_n_s_threading +#define __pyx_n_s_trace_dispatch __pyx_mstate_global->__pyx_n_s_trace_dispatch +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_update_globals_dict __pyx_mstate_global->__pyx_n_s_update_globals_dict +#define __pyx_n_s_use_setstate __pyx_mstate_global->__pyx_n_s_use_setstate +#define __pyx_n_s_version_info __pyx_mstate_global->__pyx_n_s_version_info +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_3 __pyx_mstate_global->__pyx_int_3 +#define __pyx_int_9 __pyx_mstate_global->__pyx_int_9 +#define __pyx_int_2520179 __pyx_mstate_global->__pyx_int_2520179 +#define __pyx_int_11485321 __pyx_mstate_global->__pyx_int_11485321 +#define __pyx_int_64258489 __pyx_mstate_global->__pyx_int_64258489 +#define __pyx_int_66829570 __pyx_mstate_global->__pyx_int_66829570 +#define __pyx_int_72405718 __pyx_mstate_global->__pyx_int_72405718 +#define __pyx_int_95010005 __pyx_mstate_global->__pyx_int_95010005 +#define __pyx_int_156687530 __pyx_mstate_global->__pyx_int_156687530 +#define __pyx_int_180628038 __pyx_mstate_global->__pyx_int_180628038 +#define __pyx_int_188670045 __pyx_mstate_global->__pyx_int_188670045 +#define __pyx_int_193022138 __pyx_mstate_global->__pyx_int_193022138 +#define __pyx_int_240343912 __pyx_mstate_global->__pyx_int_240343912 +#define __pyx_int_249558979 __pyx_mstate_global->__pyx_int_249558979 +#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 +#define __pyx_tuple__6 __pyx_mstate_global->__pyx_tuple__6 +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 +#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 +#define __pyx_slice__37 __pyx_mstate_global->__pyx_slice__37 +#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12 +#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14 +#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18 +#define __pyx_tuple__21 __pyx_mstate_global->__pyx_tuple__21 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29 +#define __pyx_tuple__31 __pyx_mstate_global->__pyx_tuple__31 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39 +#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42 +#define __pyx_codeobj__11 __pyx_mstate_global->__pyx_codeobj__11 +#define __pyx_codeobj__13 __pyx_mstate_global->__pyx_codeobj__13 +#define __pyx_codeobj__15 __pyx_mstate_global->__pyx_codeobj__15 +#define __pyx_codeobj__16 __pyx_mstate_global->__pyx_codeobj__16 +#define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17 +#define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19 +#define __pyx_codeobj__20 __pyx_mstate_global->__pyx_codeobj__20 +#define __pyx_codeobj__22 __pyx_mstate_global->__pyx_codeobj__22 +#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 +#define __pyx_codeobj__25 __pyx_mstate_global->__pyx_codeobj__25 +#define __pyx_codeobj__26 __pyx_mstate_global->__pyx_codeobj__26 +#define __pyx_codeobj__28 __pyx_mstate_global->__pyx_codeobj__28 +#define __pyx_codeobj__30 __pyx_mstate_global->__pyx_codeobj__30 +#define __pyx_codeobj__32 __pyx_mstate_global->__pyx_codeobj__32 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__40 __pyx_mstate_global->__pyx_codeobj__40 +#define __pyx_codeobj__41 __pyx_mstate_global->__pyx_codeobj__41 +#define __pyx_codeobj__43 __pyx_mstate_global->__pyx_codeobj__43 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45 +#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46 +/* #### Code section: module_code ### */ /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":19 * _thread_active = threading._active @@ -2159,9 +3887,11 @@ static PyObject *__pyx_codeobj__37; static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info = {"clear_thread_local_info", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info, METH_NOARGS, 0}; static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("clear_thread_local_info (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_clear_thread_local_info(__pyx_self); /* function exit code */ @@ -2175,10 +3905,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_clear_th PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("clear_thread_local_info", 0); + __Pyx_RefNannySetupContext("clear_thread_local_info", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":21 * def clear_thread_local_info(): @@ -2193,20 +3924,27 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_clear_th __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_local_info, __pyx_t_1) < 0) __PYX_ERR(0, 21, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -2255,10 +3993,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI PyObject *__pyx_t_5 = NULL; int __pyx_t_6; int __pyx_t_7; + int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("initialize", 0); + __Pyx_RefNannySetupContext("initialize", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":42 * # Places that create a ThreadInfo should verify that @@ -2268,12 +4007,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * self.additional_info = None */ #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(!Py_OptimizeFlag)) { - if (unlikely(!((__pyx_v_frame_obj != NULL) != 0))) { - PyErr_SetNone(PyExc_AssertionError); + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = (__pyx_v_frame_obj != NULL); + if (unlikely(!__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); __PYX_ERR(0, 42, __pyx_L1_error) } } + #else + if ((1)); else __PYX_ERR(0, 42, __pyx_L1_error) #endif /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":44 @@ -2285,8 +4027,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI */ __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->additional_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->additional_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->additional_info); __pyx_v_self->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)Py_None); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":45 @@ -2337,7 +4079,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * */ while (1) { - __pyx_t_1 = ((__pyx_v_frame_obj->f_back != NULL) != 0); + __pyx_t_1 = (__pyx_v_frame_obj->f_back != NULL); if (!__pyx_t_1) break; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":55 @@ -2373,20 +4115,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_basename, __pyx_n_s_rfind); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; } } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_s_); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_s_}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __pyx_v_i = __pyx_t_3; __pyx_t_3 = 0; @@ -2400,20 +4149,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_basename, __pyx_n_s_rfind); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; } } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_s__2); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_s__2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __pyx_v_j = __pyx_t_3; __pyx_t_3 = 0; @@ -2425,7 +4181,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * if i >= 0: */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_j, __pyx_v_i, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 60, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 60, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { @@ -2456,7 +4212,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * # remove ext */ __pyx_t_3 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 62, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 62, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { @@ -2494,20 +4250,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_basename, __pyx_n_s_rfind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_kp_s__3) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s__3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_s__3}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4); __pyx_t_4 = 0; @@ -2519,7 +4282,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * */ __pyx_t_4 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 66, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_1) { @@ -2563,38 +4326,38 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * self._can_create_dummy_thread = False * elif basename == 'pydev_monkey' and co_name == '__call__': */ - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_threading, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) - if (__pyx_t_6) { + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_threading, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + if (__pyx_t_7) { } else { - __pyx_t_1 = __pyx_t_6; + __pyx_t_1 = __pyx_t_7; goto __pyx_L9_bool_binop_done; } __Pyx_INCREF(__pyx_v_co_name); __pyx_t_4 = __pyx_v_co_name; - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) - if (!__pyx_t_7) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + if (!__pyx_t_8) { } else { - __pyx_t_6 = __pyx_t_7; + __pyx_t_7 = __pyx_t_8; goto __pyx_L11_bool_binop_done; } - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) - if (!__pyx_t_7) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + if (!__pyx_t_8) { } else { - __pyx_t_6 = __pyx_t_7; + __pyx_t_7 = __pyx_t_8; goto __pyx_L11_bool_binop_done; } - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) - if (!__pyx_t_7) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + if (!__pyx_t_8) { } else { - __pyx_t_6 = __pyx_t_7; + __pyx_t_7 = __pyx_t_8; goto __pyx_L11_bool_binop_done; } - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 73, __pyx_L1_error) - __pyx_t_6 = __pyx_t_7; + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 73, __pyx_L1_error) + __pyx_t_7 = __pyx_t_8; __pyx_L11_bool_binop_done:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = (__pyx_t_6 != 0); - __pyx_t_1 = __pyx_t_7; + __pyx_t_8 = __pyx_t_7; + __pyx_t_1 = __pyx_t_8; __pyx_L9_bool_binop_done:; if (__pyx_t_1) { @@ -2624,14 +4387,14 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * self._can_create_dummy_thread = False * elif basename == 'pydevd' and co_name in ('run', 'main', '_exec'): */ - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 75, __pyx_L1_error) - if (__pyx_t_7) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 75, __pyx_L1_error) + if (__pyx_t_8) { } else { - __pyx_t_1 = __pyx_t_7; + __pyx_t_1 = __pyx_t_8; goto __pyx_L15_bool_binop_done; } - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_co_name, __pyx_n_s_call, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 75, __pyx_L1_error) - __pyx_t_1 = __pyx_t_7; + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_co_name, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 75, __pyx_L1_error) + __pyx_t_1 = __pyx_t_8; __pyx_L15_bool_binop_done:; if (__pyx_t_1) { @@ -2661,32 +4424,32 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * self._can_create_dummy_thread = False * elif basename == 'pydevd_tracing': */ - __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydevd, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) - if (__pyx_t_7) { + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydevd, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (__pyx_t_8) { } else { - __pyx_t_1 = __pyx_t_7; + __pyx_t_1 = __pyx_t_8; goto __pyx_L17_bool_binop_done; } __Pyx_INCREF(__pyx_v_co_name); __pyx_t_4 = __pyx_v_co_name; - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_run, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) - if (!__pyx_t_6) { + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_run, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (!__pyx_t_7) { } else { - __pyx_t_7 = __pyx_t_6; + __pyx_t_8 = __pyx_t_7; goto __pyx_L19_bool_binop_done; } - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) - if (!__pyx_t_6) { + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_main, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 77, __pyx_L1_error) + if (!__pyx_t_7) { } else { - __pyx_t_7 = __pyx_t_6; + __pyx_t_8 = __pyx_t_7; goto __pyx_L19_bool_binop_done; } - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_exec, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 77, __pyx_L1_error) - __pyx_t_7 = __pyx_t_6; + __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_exec, Py_EQ)); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 77, __pyx_L1_error) + __pyx_t_8 = __pyx_t_7; __pyx_L19_bool_binop_done:; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_7 != 0); - __pyx_t_1 = __pyx_t_6; + __pyx_t_7 = __pyx_t_8; + __pyx_t_1 = __pyx_t_7; __pyx_L17_bool_binop_done:; if (__pyx_t_1) { @@ -2716,7 +4479,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * self._can_create_dummy_thread = False * else: */ - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydevd_tracing, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 79, __pyx_L1_error) + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_basename, __pyx_n_s_pydevd_tracing, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 79, __pyx_L1_error) if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":80 @@ -2814,7 +4577,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("initialize_if_possible", 0); + __Pyx_RefNannySetupContext("initialize_if_possible", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":89 * # Don't call threading.currentThread because if we're too early in the process @@ -2844,20 +4607,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } __pyx_v_thread_ident = __pyx_t_1; __pyx_t_1 = 0; @@ -2874,20 +4644,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_thread_ident) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_thread_ident); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_thread_ident}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __pyx_v_t = __pyx_t_1; __pyx_t_1 = 0; @@ -2898,8 +4675,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * if self._can_create_dummy_thread: * # Initialize the dummy thread and set the tracing (both are needed to */ - __pyx_t_4 = (__pyx_v_t == Py_None); - __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_5 = (__pyx_v_t == Py_None); if (__pyx_t_5) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":95 @@ -2909,8 +4685,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * # Initialize the dummy thread and set the tracing (both are needed to * # actually stop on breakpoints). */ - __pyx_t_5 = (__pyx_v_self->_can_create_dummy_thread != 0); - if (__pyx_t_5) { + if (__pyx_v_self->_can_create_dummy_thread) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":98 * # Initialize the dummy thread and set the tracing (both are needed to @@ -2925,20 +4700,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_1); __pyx_t_1 = 0; @@ -2954,21 +4736,28 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dummy_trace_dispatch); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L4_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":95 @@ -3013,7 +4802,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI */ __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_t, __pyx_n_s_is_pydev_daemon_thread, Py_False); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 103, __pyx_L4_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 103, __pyx_L4_error) + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 103, __pyx_L4_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_5) { @@ -3082,8 +4871,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * except: */ __pyx_t_5 = (__pyx_v_additional_info == Py_None); - __pyx_t_4 = (__pyx_t_5 != 0); - if (unlikely(__pyx_t_4)) { + if (unlikely(__pyx_t_5)) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":110 * additional_info = t.additional_info @@ -3135,9 +4923,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.initialize_if_possible", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 111, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":112 * raise AttributeError() @@ -3154,20 +4942,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_6, __pyx_n_s_enter); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 112, __pyx_L18_error) __Pyx_GOTREF(__pyx_t_12); __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_12))) { __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); if (likely(__pyx_t_13)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); __Pyx_INCREF(__pyx_t_13); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_4 = 1; } } - __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 112, __pyx_L18_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, NULL}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 112, __pyx_L18_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /*try:*/ { @@ -3202,8 +4997,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * additional_info = PyDBAdditionalThreadInfo() * t.additional_info = additional_info */ - __pyx_t_4 = (__pyx_v_additional_info == Py_None); - __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_5 = (__pyx_v_additional_info == Py_None); if (__pyx_t_5) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":117 @@ -3256,9 +5050,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.initialize_if_possible", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_6, &__pyx_t_12) < 0) __PYX_ERR(0, 112, __pyx_L26_except_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_12); __pyx_t_13 = PyTuple_Pack(3, __pyx_t_11, __pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 112, __pyx_L26_except_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, NULL); @@ -3269,8 +5063,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; if (__pyx_t_5 < 0) __PYX_ERR(0, 112, __pyx_L26_except_error) - __pyx_t_4 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_4) { + __pyx_t_18 = (!__pyx_t_5); + if (unlikely(__pyx_t_18)) { __Pyx_GIVEREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_12); @@ -3321,7 +5115,6 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L10_exception_handled; } - __pyx_L11_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":107 * self.fully_initialized = True @@ -3330,6 +5123,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI * additional_info = t.additional_info * if additional_info is None: */ + __pyx_L11_except_error:; __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_9); @@ -3355,8 +5149,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __pyx_t_3 = __pyx_v_additional_info; __Pyx_INCREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->additional_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->additional_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->additional_info); __pyx_v_self->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_3); __pyx_t_3 = 0; @@ -3404,7 +5198,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_XGOTREF(__pyx_t_10); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_15); - __pyx_t_18 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename; + __pyx_t_4 = __pyx_lineno; __pyx_t_19 = __pyx_clineno; __pyx_t_20 = __pyx_filename; { __pyx_v_self->inside_frame_eval = (__pyx_v_self->inside_frame_eval - 1); } @@ -3419,7 +5213,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI __Pyx_XGIVEREF(__pyx_t_7); __Pyx_ErrRestore(__pyx_t_9, __pyx_t_8, __pyx_t_7); __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_10 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; - __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20; + __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_19; __pyx_filename = __pyx_t_20; goto __pyx_L1_error; } __pyx_L3_return: { @@ -3474,9 +5268,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3487,9 +5283,9 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self->additional_info)); + __Pyx_INCREF((PyObject *)__pyx_v_self->additional_info); __pyx_r = ((PyObject *)__pyx_v_self->additional_info); goto __pyx_L0; @@ -3503,9 +5299,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3520,13 +5318,13 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 26, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->additional_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->additional_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->additional_info); __pyx_v_self->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); __pyx_t_1 = 0; @@ -3545,9 +5343,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3558,11 +5358,11 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_15additional_info_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->additional_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->additional_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->additional_info); __pyx_v_self->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)Py_None); /* function exit code */ @@ -3582,9 +5382,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3599,7 +5401,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_pydevd_thread); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3621,9 +5423,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3633,12 +5437,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_16is_pydevd_thread_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) __pyx_v_self->is_pydevd_thread = __pyx_t_1; @@ -3649,7 +5451,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.is_pydevd_thread.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -3664,9 +5465,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3681,7 +5484,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->inside_frame_eval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3703,9 +5506,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3715,12 +5520,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17inside_frame_eval_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L1_error) __pyx_v_self->inside_frame_eval = __pyx_t_1; @@ -3731,7 +5534,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.inside_frame_eval.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -3746,9 +5548,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3763,7 +5567,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->fully_initialized); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3785,9 +5589,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3797,12 +5603,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17fully_initialized_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 29, __pyx_L1_error) __pyx_v_self->fully_initialized = __pyx_t_1; @@ -3813,7 +5617,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.fully_initialized.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -3828,9 +5631,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3841,7 +5646,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->thread_trace_func); __pyx_r = __pyx_v_self->thread_trace_func; @@ -3857,9 +5662,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3870,7 +5677,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->thread_trace_func); @@ -3886,9 +5693,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3899,7 +5708,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_17thread_trace_func_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->thread_trace_func); @@ -3923,9 +5732,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1 /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -3940,7 +5751,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->force_stay_in_untraced_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -3962,9 +5773,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -3974,12 +5787,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2 static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_27force_stay_in_untraced_mode_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L1_error) __pyx_v_self->force_stay_in_untraced_mode = __pyx_t_1; @@ -3990,7 +5801,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2 __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.force_stay_in_untraced_mode.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4001,11 +5811,39 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2 */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo___reduce_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self)); /* function exit code */ @@ -4027,11 +5865,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread PyObject *__pyx_t_6 = NULL; int __pyx_t_7; int __pyx_t_8; - int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -4053,21 +5890,21 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread __pyx_t_6 = PyTuple_New(7); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); - __Pyx_INCREF(((PyObject *)__pyx_v_self->additional_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self->additional_info)); - PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_self->additional_info)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_self->additional_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_self->additional_info))) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_6, 5, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 5, __pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->thread_trace_func); __Pyx_GIVEREF(__pyx_v_self->thread_trace_func); - PyTuple_SET_ITEM(__pyx_t_6, 6, __pyx_v_self->thread_trace_func); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 6, __pyx_v_self->thread_trace_func)) __PYX_ERR(1, 5, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; @@ -4096,8 +5933,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread * use_setstate = True */ __pyx_t_7 = (__pyx_v__dict != Py_None); - __pyx_t_8 = (__pyx_t_7 != 0); - if (__pyx_t_8) { + if (__pyx_t_7) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -4110,7 +5946,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; @@ -4141,21 +5977,19 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread * else: * use_setstate = self.additional_info is not None or self.thread_trace_func is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, None), state + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, None), state */ /*else*/ { - __pyx_t_7 = (((PyObject *)__pyx_v_self->additional_info) != Py_None); - __pyx_t_9 = (__pyx_t_7 != 0); - if (!__pyx_t_9) { + __pyx_t_8 = (((PyObject *)__pyx_v_self->additional_info) != Py_None); + if (!__pyx_t_8) { } else { - __pyx_t_8 = __pyx_t_9; + __pyx_t_7 = __pyx_t_8; goto __pyx_L4_bool_binop_done; } - __pyx_t_9 = (__pyx_v_self->thread_trace_func != Py_None); - __pyx_t_7 = (__pyx_t_9 != 0); - __pyx_t_8 = __pyx_t_7; + __pyx_t_8 = (__pyx_v_self->thread_trace_func != Py_None); + __pyx_t_7 = __pyx_t_8; __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_8; + __pyx_v_use_setstate = __pyx_t_7; } __pyx_L3:; @@ -4163,18 +5997,17 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread * else: * use_setstate = self.additional_info is not None or self.thread_trace_func is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, None), state + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, None), state * else: */ - __pyx_t_8 = (__pyx_v_use_setstate != 0); - if (__pyx_t_8) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self.additional_info is not None or self.thread_trace_func is not None * if use_setstate: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, state) + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_ThreadInfo); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) @@ -4183,22 +6016,22 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_11485321); - __Pyx_GIVEREF(__pyx_int_11485321); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_11485321); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_240343912); + __Pyx_GIVEREF(__pyx_int_240343912); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_240343912)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_6, 2, Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_r = __pyx_t_4; @@ -4209,15 +6042,15 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread * else: * use_setstate = self.additional_info is not None or self.thread_trace_func is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, None), state + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, None), state + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, None), state * else: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) */ @@ -4229,19 +6062,19 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_11485321); - __Pyx_GIVEREF(__pyx_int_11485321); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_11485321); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_240343912); + __Pyx_GIVEREF(__pyx_int_240343912); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_240343912)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_r = __pyx_t_5; @@ -4275,46 +6108,129 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* "(tree fragment)":16 * else: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, state) + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2__setstate_cython__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_2__setstate_cython__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, state) + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_ThreadInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_ThreadInfo, (type(self), 0x0af4089, state) + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) */ @@ -4343,12 +6259,20 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10Thread /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo___init__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4359,7 +6283,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo___init__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":140 * @@ -4452,9 +6376,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4465,7 +6391,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->co_filename); __pyx_r = __pyx_v_self->co_filename; @@ -4481,9 +6407,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4498,8 +6426,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 127, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(0, 127, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4523,9 +6451,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4536,7 +6466,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_11co_filename_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->co_filename); @@ -4560,9 +6490,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4573,7 +6505,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->co_name); __pyx_r = __pyx_v_self->co_name; @@ -4589,9 +6521,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4606,8 +6540,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 128, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(0, 128, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4631,9 +6565,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4644,7 +6580,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_7co_name_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->co_name); @@ -4668,9 +6604,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4681,7 +6619,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->canonical_normalized_filename); __pyx_r = __pyx_v_self->canonical_normalized_filename; @@ -4697,9 +6635,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4714,8 +6654,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 129, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_value))) __PYX_ERR(0, 129, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -4739,9 +6679,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4752,7 +6694,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_29canonical_normalized_filename_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->canonical_normalized_filename); @@ -4776,9 +6718,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4793,7 +6737,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->breakpoint_found); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4815,9 +6759,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4827,12 +6773,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_16breakpoint_found_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 131, __pyx_L1_error) __pyx_v_self->breakpoint_found = __pyx_t_1; @@ -4843,7 +6787,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.FuncCodeInfo.breakpoint_found.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -4858,9 +6801,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4871,7 +6816,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->new_code); __pyx_r = __pyx_v_self->new_code; @@ -4887,9 +6832,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -4900,7 +6847,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->new_code); @@ -4916,9 +6863,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4929,7 +6878,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_8new_code_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->new_code); @@ -4953,9 +6902,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -4970,7 +6921,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->breakpoints_mtime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -4992,9 +6943,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -5004,12 +6957,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_17breakpoints_mtime_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 137, __pyx_L1_error) __pyx_v_self->breakpoints_mtime = __pyx_t_1; @@ -5020,7 +6971,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.FuncCodeInfo.breakpoints_mtime.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -5031,11 +6981,39 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_2__reduce_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self)); /* function exit code */ @@ -5055,11 +7033,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo PyObject *__pyx_t_4 = NULL; int __pyx_t_5; int __pyx_t_6; - int __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -5077,23 +7054,23 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo __pyx_t_4 = PyTuple_New(7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->canonical_normalized_filename); __Pyx_GIVEREF(__pyx_v_self->canonical_normalized_filename); - PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_self->canonical_normalized_filename); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_self->canonical_normalized_filename)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->co_filename); __Pyx_GIVEREF(__pyx_v_self->co_filename); - PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_v_self->co_filename); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_v_self->co_filename)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->co_name); __Pyx_GIVEREF(__pyx_v_self->co_name); - PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_v_self->co_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_v_self->co_name)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->new_code); __Pyx_GIVEREF(__pyx_v_self->new_code); - PyTuple_SET_ITEM(__pyx_t_4, 6, __pyx_v_self->new_code); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 6, __pyx_v_self->new_code)) __PYX_ERR(1, 5, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; @@ -5120,8 +7097,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo * use_setstate = True */ __pyx_t_5 = (__pyx_v__dict != Py_None); - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { + if (__pyx_t_5) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -5134,7 +7110,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -5165,35 +7141,31 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo * else: * use_setstate = self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.new_code is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, None), state + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, None), state */ /*else*/ { - __pyx_t_5 = (__pyx_v_self->canonical_normalized_filename != ((PyObject*)Py_None)); - __pyx_t_7 = (__pyx_t_5 != 0); - if (!__pyx_t_7) { + __pyx_t_6 = (__pyx_v_self->canonical_normalized_filename != ((PyObject*)Py_None)); + if (!__pyx_t_6) { } else { - __pyx_t_6 = __pyx_t_7; + __pyx_t_5 = __pyx_t_6; goto __pyx_L4_bool_binop_done; } - __pyx_t_7 = (__pyx_v_self->co_filename != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_7 != 0); - if (!__pyx_t_5) { + __pyx_t_6 = (__pyx_v_self->co_filename != ((PyObject*)Py_None)); + if (!__pyx_t_6) { } else { - __pyx_t_6 = __pyx_t_5; + __pyx_t_5 = __pyx_t_6; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = (__pyx_v_self->co_name != ((PyObject*)Py_None)); - __pyx_t_7 = (__pyx_t_5 != 0); - if (!__pyx_t_7) { + __pyx_t_6 = (__pyx_v_self->co_name != ((PyObject*)Py_None)); + if (!__pyx_t_6) { } else { - __pyx_t_6 = __pyx_t_7; + __pyx_t_5 = __pyx_t_6; goto __pyx_L4_bool_binop_done; } - __pyx_t_7 = (__pyx_v_self->new_code != Py_None); - __pyx_t_5 = (__pyx_t_7 != 0); - __pyx_t_6 = __pyx_t_5; + __pyx_t_6 = (__pyx_v_self->new_code != Py_None); + __pyx_t_5 = __pyx_t_6; __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_6; + __pyx_v_use_setstate = __pyx_t_5; } __pyx_L3:; @@ -5201,18 +7173,17 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo * else: * use_setstate = self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.new_code is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, None), state + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, None), state * else: */ - __pyx_t_6 = (__pyx_v_use_setstate != 0); - if (__pyx_t_6) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.new_code is not None * if use_setstate: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, state) + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_FuncCodeInfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) @@ -5221,22 +7192,22 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_188670045); - __Pyx_GIVEREF(__pyx_int_188670045); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_188670045); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_72405718); + __Pyx_GIVEREF(__pyx_int_72405718); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_72405718)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_r = __pyx_t_2; @@ -5247,15 +7218,15 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo * else: * use_setstate = self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.new_code is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, None), state + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, None), state + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, None), state * else: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) */ @@ -5267,19 +7238,19 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_188670045); - __Pyx_GIVEREF(__pyx_int_188670045); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_188670045); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_72405718); + __Pyx_GIVEREF(__pyx_int_72405718); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_72405718)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_r = __pyx_t_3; @@ -5311,20 +7282,103 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo /* "(tree fragment)":16 * else: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, state) + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_4__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.FuncCodeInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_4__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -5336,21 +7390,21 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, state) + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_FuncCodeInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle_FuncCodeInfo, (type(self), 0xb3ee05d, state) + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) */ @@ -5377,70 +7431,114 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCo */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch = {"dummy_trace_dispatch", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch = {"dummy_trace_dispatch", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_event = 0; PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("dummy_trace_dispatch (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_event)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("dummy_trace_dispatch", 1, 3, 3, 1); __PYX_ERR(0, 152, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("dummy_trace_dispatch", 1, 3, 3, 2); __PYX_ERR(0, 152, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dummy_trace_dispatch") < 0)) __PYX_ERR(0, 152, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "dummy_trace_dispatch") < 0)) __PYX_ERR(0, 152, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v_frame = values[0]; __pyx_v_event = ((PyObject*)values[1]); __pyx_v_arg = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("dummy_trace_dispatch", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 152, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("dummy_trace_dispatch", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 152, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.dummy_trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -5453,6 +7551,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_t __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -5461,16 +7565,14 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations int __pyx_t_1; - int __pyx_t_2; + PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("dummy_trace_dispatch", 0); + __Pyx_RefNannySetupContext("dummy_trace_dispatch", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":153 * @@ -5479,9 +7581,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t * if frame.f_trace is not None: * return frame.f_trace(frame, event, arg) */ - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call_2, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_event, __pyx_n_s_call_2, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":154 * def dummy_trace_dispatch(frame, str event, arg): @@ -5490,11 +7591,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t * return frame.f_trace(frame, event, arg) * return None */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = (__pyx_t_3 != Py_None); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_1 = (__pyx_t_2 != 0); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = (__pyx_t_2 != Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":155 @@ -5505,58 +7605,32 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_6 = 1; + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else #endif { - __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (__pyx_t_5) { - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL; - } - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_frame); - __Pyx_INCREF(__pyx_v_event); - __Pyx_GIVEREF(__pyx_v_event); - PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_event); - __Pyx_INCREF(__pyx_v_arg); - __Pyx_GIVEREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_v_arg); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":154 @@ -5598,10 +7672,9 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t /* function exit code */ __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.dummy_trace_dispatch", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -5622,9 +7695,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_2dummy_t static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py = {"get_thread_info_py", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py, METH_NOARGS, 0}; static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_thread_info_py (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_4get_thread_info_py(__pyx_self); /* function exit code */ @@ -5639,7 +7714,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_thread_info_py", 0); + __Pyx_RefNannySetupContext("get_thread_info_py", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":160 * @@ -5648,7 +7723,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * * */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_XDECREF((PyObject *)__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(PyEval_GetFrame())); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_1); @@ -5706,7 +7781,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_thread_info", 0); + __Pyx_RefNannySetupContext("get_thread_info", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":170 * ''' @@ -5766,9 +7841,9 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 174, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":175 * thread_info = _thread_local_info.thread_info @@ -5777,7 +7852,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * return None * thread_info = ThreadInfo() */ - __pyx_t_7 = ((__pyx_v_frame_obj == NULL) != 0); + __pyx_t_7 = (__pyx_v_frame_obj == NULL); if (__pyx_t_7) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":176 @@ -5787,7 +7862,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * thread_info = ThreadInfo() * thread_info.initialize(frame_obj) */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_XDECREF((PyObject *)__pyx_r); __pyx_r = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)Py_None); __Pyx_INCREF(Py_None); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -5863,7 +7938,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * _code_extra_index = _PyEval_RequestCodeExtraIndex(release_co_extra) * */ - __pyx_t_7 = ((__pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator__code_extra_index == -1L) != 0); + __pyx_t_7 = (__pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator__code_extra_index == -1L); if (__pyx_t_7) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":187 @@ -5947,7 +8022,6 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; goto __pyx_L4_exception_handled; } - __pyx_L5_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":170 * ''' @@ -5956,6 +8030,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * # Note: changing to a `dict[thread.ident] = thread_info` had almost no * # effect in the performance. */ + __pyx_L5_except_error:; __Pyx_XGIVEREF(__pyx_t_1); __Pyx_XGIVEREF(__pyx_t_2); __Pyx_XGIVEREF(__pyx_t_3); @@ -5982,8 +8057,8 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo * * */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_thread_info)); + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_thread_info); __pyx_r = __pyx_v_thread_info; goto __pyx_L0; @@ -6019,16 +8094,98 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py(PyObject *__pyx_self, PyObject *__pyx_v_obj); /*proto*/ -static char __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py[] = "\n Helper to be called from Python.\n "; -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py = {"decref_py", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py, METH_O, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py(PyObject *__pyx_self, PyObject *__pyx_v_obj) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py, "\n Helper to be called from Python.\n "); +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py = {"decref_py", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_obj = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("decref_py (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py(__pyx_self, ((PyObject *)__pyx_v_obj)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 196, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "decref_py") < 0)) __PYX_ERR(0, 196, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_obj = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("decref_py", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 196, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.decref_py", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py(__pyx_self, __pyx_v_obj); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -6036,7 +8193,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_py(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_obj) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("decref_py", 0); + __Pyx_RefNannySetupContext("decref_py", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":200 * Helper to be called from Python. @@ -6071,71 +8228,115 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_6decref_ */ /* Python wrapper */ -static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_8get_func_code_info_py[] = "\n Helper to be called from Python.\n "; -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py = {"get_func_code_info_py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_8get_func_code_info_py}; -static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_8get_func_code_info_py, "\n Helper to be called from Python.\n "); +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py = {"get_func_code_info_py", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_8get_func_code_info_py}; +static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_thread_info = 0; PyObject *__pyx_v_frame = 0; PyObject *__pyx_v_code_obj = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_func_code_info_py (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread_info,&__pyx_n_s_frame,&__pyx_n_s_code_obj,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread_info,&__pyx_n_s_frame,&__pyx_n_s_code_obj,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_thread_info)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 203, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_frame)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 203, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("get_func_code_info_py", 1, 3, 3, 1); __PYX_ERR(0, 203, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code_obj)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 203, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("get_func_code_info_py", 1, 3, 3, 2); __PYX_ERR(0, 203, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_func_code_info_py") < 0)) __PYX_ERR(0, 203, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_func_code_info_py") < 0)) __PYX_ERR(0, 203, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v_thread_info = values[0]; __pyx_v_frame = values[1]; __pyx_v_code_obj = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_func_code_info_py", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 203, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("get_func_code_info_py", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 203, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_func_code_info_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -6143,6 +8344,12 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_8get_func_code_info_py(__pyx_self, __pyx_v_thread_info, __pyx_v_frame, __pyx_v_code_obj); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -6154,7 +8361,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_func_code_info_py", 0); + __Pyx_RefNannySetupContext("get_func_code_info_py", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":207 * Helper to be called from Python. @@ -6163,7 +8370,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * * */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); + __Pyx_XDECREF((PyObject *)__pyx_r); __pyx_t_1 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_func_code_info(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_thread_info), ((PyFrameObject *)__pyx_v_frame), ((PyCodeObject *)__pyx_v_code_obj))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_t_1); @@ -6227,13 +8434,11 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn PyObject *__pyx_t_9 = NULL; PyObject *__pyx_t_10 = NULL; PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - PyObject *(*__pyx_t_14)(PyObject *); + PyObject *(*__pyx_t_12)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_func_code_info", 0); + __Pyx_RefNannySetupContext("get_func_code_info", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":228 * # print('get_func_code_info', f_code.co_name, f_code.co_filename) @@ -6275,7 +8480,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * extra_obj = extra * if extra_obj is not NULL: */ - __pyx_t_3 = ((__pyx_v_extra != NULL) != 0); + __pyx_t_3 = (__pyx_v_extra != NULL); if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":234 @@ -6294,7 +8499,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * func_code_info_obj = extra_obj * if func_code_info_obj.breakpoints_mtime == main_debugger.mtime: */ - __pyx_t_3 = ((__pyx_v_extra_obj != NULL) != 0); + __pyx_t_3 = (__pyx_v_extra_obj != NULL); if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":236 @@ -6323,7 +8528,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 237, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 237, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 237, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { @@ -6334,8 +8539,8 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * * cdef str co_filename = code_obj.co_filename */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_func_code_info_obj)); + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info_obj); __pyx_r = __pyx_v_func_code_info_obj; goto __pyx_L0; @@ -6448,7 +8653,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * try: * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] */ - __pyx_t_3 = ((!(__pyx_v_func_code_info->always_skip_code != 0)) != 0); + __pyx_t_3 = (!__pyx_v_func_code_info->always_skip_code); if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":255 @@ -6509,9 +8714,9 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 257, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":258 * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] @@ -6523,20 +8728,27 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 258, __pyx_L9_except_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_10))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_10, function); + __pyx_t_5 = 1; } } - __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, ((PyObject *)__pyx_v_frame_obj)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_frame_obj)); - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 258, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_11, ((PyObject *)__pyx_v_frame_obj)}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 258, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + } __Pyx_XDECREF_SET(__pyx_v_abs_path_real_path_and_base, __pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -6544,7 +8756,6 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L8_exception_handled; } - __pyx_L9_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":255 * @@ -6553,6 +8764,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] * except: */ + __pyx_L9_except_error:; __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_8); @@ -6575,7 +8787,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn */ __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_abs_path_real_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 260, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 260, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 260, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_func_code_info->canonical_normalized_filename); __Pyx_DECREF(__pyx_v_func_code_info->canonical_normalized_filename); @@ -6592,21 +8804,28 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_get_cache_file_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 262, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_1)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 262, __pyx_L1_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 262, __pyx_L1_error) __pyx_v_cache_file_type = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; @@ -6624,12 +8843,12 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error); __Pyx_INCREF(((PyObject *)__pyx_v_frame_obj->f_code)); __Pyx_GIVEREF(((PyObject *)__pyx_v_frame_obj->f_code)); - PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_frame_obj->f_code)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_frame_obj->f_code))) __PYX_ERR(0, 265, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_v_cache_file_type_key = ((PyObject*)__pyx_t_1); @@ -6697,9 +8916,9 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 268, __pyx_L17_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":269 * file_type = cache_file_type[cache_file_type_key] # Make it faster @@ -6712,7 +8931,8 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = NULL; __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) { + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_10))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10); @@ -6722,39 +8942,15 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_11, ((PyObject *)__pyx_v_frame_obj), __pyx_v_abs_path_real_path_and_base}; - __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 269, __pyx_L17_except_error) - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_GOTREF(__pyx_t_9); - } else #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) { - PyObject *__pyx_temp[3] = {__pyx_t_11, ((PyObject *)__pyx_v_frame_obj), __pyx_v_abs_path_real_path_and_base}; - __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 269, __pyx_L17_except_error) + { + PyObject *__pyx_callargs[3] = {__pyx_t_11, ((PyObject *)__pyx_v_frame_obj), __pyx_v_abs_path_real_path_and_base}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 269, __pyx_L17_except_error) __Pyx_GOTREF(__pyx_t_9); - } else - #endif - { - __pyx_t_12 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 269, __pyx_L17_except_error) - __Pyx_GOTREF(__pyx_t_12); - if (__pyx_t_11) { - __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11); __pyx_t_11 = NULL; - } - __Pyx_INCREF(((PyObject *)__pyx_v_frame_obj)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_frame_obj)); - PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_5, ((PyObject *)__pyx_v_frame_obj)); - __Pyx_INCREF(__pyx_v_abs_path_real_path_and_base); - __Pyx_GIVEREF(__pyx_v_abs_path_real_path_and_base); - PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_5, __pyx_v_abs_path_real_path_and_base); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 269, __pyx_L17_except_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF_SET(__pyx_v_file_type, __pyx_t_9); __pyx_t_9 = 0; __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -6762,7 +8958,6 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L16_exception_handled; } - __pyx_L17_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":266 * # on the cache. @@ -6771,6 +8966,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * file_type = cache_file_type[cache_file_type_key] # Make it faster * except: */ + __pyx_L17_except_error:; __Pyx_XGIVEREF(__pyx_t_8); __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_6); @@ -6792,8 +8988,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * */ __pyx_t_3 = (__pyx_v_file_type != Py_None); - __pyx_t_13 = (__pyx_t_3 != 0); - if (__pyx_t_13) { + if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":272 * @@ -6829,8 +9024,8 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * if main_debugger is not None: * */ - __pyx_t_13 = ((!(__pyx_v_func_code_info->always_skip_code != 0)) != 0); - if (__pyx_t_13) { + __pyx_t_3 = (!__pyx_v_func_code_info->always_skip_code); + if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":275 * @@ -6839,8 +9034,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * * breakpoints: dict = main_debugger.breakpoints.get(func_code_info.canonical_normalized_filename) */ - __pyx_t_13 = (__pyx_v_main_debugger != Py_None); - __pyx_t_3 = (__pyx_t_13 != 0); + __pyx_t_3 = (__pyx_v_main_debugger != Py_None); if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":277 @@ -6856,21 +9050,28 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_func_code_info->canonical_normalized_filename) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_func_code_info->canonical_normalized_filename); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 277, __pyx_L1_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_func_code_info->canonical_normalized_filename}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 277, __pyx_L1_error) __pyx_v_breakpoints = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; @@ -6887,20 +9088,27 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); if (likely(__pyx_t_1)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_func_code_info->co_name) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_func_code_info->co_name); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_func_code_info->co_name}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } __pyx_v_function_breakpoint = __pyx_t_2; __pyx_t_2 = 0; @@ -6929,20 +9137,27 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_code_obj_py) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_code_obj_py); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 284, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_code_obj_py}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } __pyx_v_cached_code_obj_info = __pyx_t_2; __pyx_t_2 = 0; @@ -6953,7 +9168,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * # The cache is for new code objects, so, in this case it's already * # using the new code and we can't change it as this is a generator! */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cached_code_obj_info); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 285, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_cached_code_obj_info); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 285, __pyx_L1_error) if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":291 @@ -6979,20 +9194,27 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_cached_code_obj_info, __pyx_n_s_compute_force_stay_in_untraced_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_breakpoints) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_breakpoints); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 293, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_breakpoints}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 293, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); @@ -7023,18 +9245,18 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 292, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; - index = 0; __pyx_t_1 = __pyx_t_14(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L27_unpacking_failed; + __pyx_t_12 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_1 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); - index = 1; __pyx_t_4 = __pyx_t_14(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L27_unpacking_failed; + index = 1; __pyx_t_4 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L27_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_9), 2) < 0) __PYX_ERR(0, 292, __pyx_L1_error) - __pyx_t_14 = NULL; + if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_9), 2) < 0) __PYX_ERR(0, 292, __pyx_L1_error) + __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L28_unpacking_done; __pyx_L27_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_14 = NULL; + __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 292, __pyx_L1_error) __pyx_L28_unpacking_done:; @@ -7080,7 +9302,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * # Go directly into tracing mode * func_code_info.breakpoint_found = True */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 296, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 296, __pyx_L1_error) if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":298 @@ -7122,7 +9344,7 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * # if DEBUG: * # print('found breakpoints', code_obj_py.co_name, breakpoints) */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoints); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 301, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoints); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 301, __pyx_L1_error) if (__pyx_t_3) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":307 @@ -7164,18 +9386,18 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_14 = Py_TYPE(__pyx_t_9)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_14(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L29_unpacking_failed; + __pyx_t_12 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_4 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L29_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_1 = __pyx_t_14(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L29_unpacking_failed; + index = 1; __pyx_t_1 = __pyx_t_12(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L29_unpacking_failed; __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_9), 2) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - __pyx_t_14 = NULL; + if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_9), 2) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_12 = NULL; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L30_unpacking_done; __pyx_L29_unpacking_failed:; __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_14 = NULL; + __pyx_t_12 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 307, __pyx_L1_error) __pyx_L30_unpacking_done:; @@ -7251,8 +9473,8 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn * * */ - __Pyx_XDECREF(((PyObject *)__pyx_r)); - __Pyx_INCREF(((PyObject *)__pyx_v_func_code_info)); + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); __pyx_r = __pyx_v_func_code_info; goto __pyx_L0; @@ -7272,7 +9494,6 @@ static struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeIn __Pyx_XDECREF(__pyx_t_9); __Pyx_XDECREF(__pyx_t_10); __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -7309,64 +9530,92 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf PyObject *__pyx_v_line_to_offset = 0; int __pyx_v_first_line; int __pyx_v_last_line; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_line_to_offset,&__pyx_n_s_first_line,&__pyx_n_s_last_line,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_line_to_offset,&__pyx_n_s_first_line,&__pyx_n_s_last_line,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_line_to_offset)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_line_to_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_first_line)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_line)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 322, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_last_line)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_last_line)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 322, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 322, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 322, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); } __pyx_v_line_to_offset = ((PyObject*)values[0]); __pyx_v_first_line = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_first_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) __pyx_v_last_line = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_last_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 322, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; @@ -7379,6 +9628,12 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -7386,7 +9641,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo___init__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_self, PyObject *__pyx_v_line_to_offset, int __pyx_v_first_line, int __pyx_v_last_line) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":323 * @@ -7444,9 +9699,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self)); /* function exit code */ @@ -7457,7 +9714,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->line_to_offset); __pyx_r = __pyx_v_self->line_to_offset; @@ -7473,9 +9730,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -7490,8 +9749,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_v_value))) __PYX_ERR(0, 318, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -7515,9 +9774,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self)); /* function exit code */ @@ -7528,7 +9789,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_14line_to_offset_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->line_to_offset); @@ -7552,9 +9813,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self)); /* function exit code */ @@ -7569,7 +9832,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->first_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -7591,9 +9854,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -7603,12 +9868,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_10first_line_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 319, __pyx_L1_error) __pyx_v_self->first_line = __pyx_t_1; @@ -7619,7 +9882,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo.first_line.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -7634,9 +9896,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self)); /* function exit code */ @@ -7651,7 +9915,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->last_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -7673,9 +9937,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -7685,12 +9951,10 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_9last_line_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - __Pyx_RefNannyDeclarations int __pyx_t_1; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 320, __pyx_L1_error) __pyx_v_self->last_line = __pyx_t_1; @@ -7701,7 +9965,6 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo.last_line.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -7712,11 +9975,39 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInf */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_2__reduce_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self)); /* function exit code */ @@ -7734,11 +10025,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; int __pyx_t_4; - int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -7754,12 +10044,12 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->line_to_offset); __Pyx_GIVEREF(__pyx_v_self->line_to_offset); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->line_to_offset); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->line_to_offset)) __PYX_ERR(1, 5, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_v_state = ((PyObject*)__pyx_t_3); @@ -7785,8 +10075,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL * use_setstate = True */ __pyx_t_4 = (__pyx_v__dict != Py_None); - __pyx_t_5 = (__pyx_t_4 != 0); - if (__pyx_t_5) { + if (__pyx_t_4) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -7799,7 +10088,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -7830,11 +10119,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL * else: * use_setstate = self.line_to_offset is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, None), state + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, None), state */ /*else*/ { - __pyx_t_5 = (__pyx_v_self->line_to_offset != ((PyObject*)Py_None)); - __pyx_v_use_setstate = __pyx_t_5; + __pyx_t_4 = (__pyx_v_self->line_to_offset != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_4; } __pyx_L3:; @@ -7842,18 +10131,17 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL * else: * use_setstate = self.line_to_offset is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, None), state + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, None), state * else: */ - __pyx_t_5 = (__pyx_v_use_setstate != 0); - if (__pyx_t_5) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self.line_to_offset is not None * if use_setstate: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, state) + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) */ __Pyx_XDECREF(__pyx_r); __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle__CodeLineInfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) @@ -7862,22 +10150,22 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_66829570); - __Pyx_GIVEREF(__pyx_int_66829570); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_66829570); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_95010005); + __Pyx_GIVEREF(__pyx_int_95010005); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_95010005)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_r = __pyx_t_1; @@ -7888,15 +10176,15 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL * else: * use_setstate = self.line_to_offset is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, None), state + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, None), state + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, None), state * else: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) */ @@ -7908,19 +10196,19 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_66829570); - __Pyx_GIVEREF(__pyx_int_66829570); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_66829570); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_95010005); + __Pyx_GIVEREF(__pyx_int_95010005); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_95010005)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_r = __pyx_t_2; @@ -7951,20 +10239,103 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL /* "(tree fragment)":16 * else: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, state) + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_4__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_4__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -7976,21 +10347,21 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, state) + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CodeLineInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle__CodeLineInfo, (type(self), 0x3fbbd02, state) + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) */ @@ -8017,15 +10388,97 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeL */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info(PyObject *__pyx_self, PyObject *__pyx_v_code_obj); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info = {"_get_code_line_info", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info, METH_O, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info(PyObject *__pyx_self, PyObject *__pyx_v_code_obj) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info = {"_get_code_line_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code_obj = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("_get_code_line_info (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_code_line_info(__pyx_self, ((PyObject *)__pyx_v_code_obj)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 329, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_get_code_line_info") < 0)) __PYX_ERR(0, 329, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_code_obj = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_get_code_line_info", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 329, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._get_code_line_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_code_line_info(__pyx_self, __pyx_v_code_obj); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -8041,18 +10494,18 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - PyObject *__pyx_t_6 = NULL; + int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - int __pyx_t_9; + PyObject *__pyx_t_8 = NULL; + PyObject *(*__pyx_t_9)(PyObject *); int __pyx_t_10; int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_get_code_line_info", 0); + __Pyx_RefNannySetupContext("_get_code_line_info", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":330 * # Note: this method has a version in pure-python too. @@ -8074,7 +10527,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c * */ __Pyx_INCREF(Py_None); - __pyx_v_first_line = Py_None; + __pyx_v_first_line = ((PyObject*)Py_None); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":332 * line_to_offset: dict = {} @@ -8084,7 +10537,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c * cdef int offset */ __Pyx_INCREF(Py_None); - __pyx_v_last_line = Py_None; + __pyx_v_last_line = ((PyObject*)Py_None); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":337 * cdef int line @@ -8099,50 +10552,70 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_code_obj) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_code_obj); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_code_obj}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; + __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 337, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { - if (likely(!__pyx_t_5)) { + if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_3))) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 337, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 337, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 337, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 337, __pyx_L1_error) #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } } else { - __pyx_t_1 = __pyx_t_5(__pyx_t_3); + __pyx_t_1 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { @@ -8164,46 +10637,46 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_6 = PyList_GET_ITEM(sequence, 1); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); #else __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); + index = 0; __pyx_t_2 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_2); - index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 337, __pyx_L1_error) - __pyx_t_8 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_9 = NULL; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 337, __pyx_L1_error) __pyx_L6_unpacking_done:; } - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 337, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 337, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 337, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_offset = __pyx_t_9; + __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_offset = __pyx_t_4; __pyx_v_line = __pyx_t_10; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":338 @@ -8215,10 +10688,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c */ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (unlikely(PyDict_SetItem(__pyx_v_line_to_offset, __pyx_t_6, __pyx_t_1) < 0)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (unlikely((PyDict_SetItem(__pyx_v_line_to_offset, __pyx_t_7, __pyx_t_1) < 0))) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":337 @@ -8238,7 +10711,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c * first_line = min(line_to_offset) * last_line = max(line_to_offset) */ - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_line_to_offset); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 340, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_line_to_offset); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 340, __pyx_L1_error) if (__pyx_t_11) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":341 @@ -8250,7 +10723,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c */ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_v_line_to_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_first_line, __pyx_t_3); + if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_3))) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_first_line, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":342 @@ -8262,7 +10736,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c */ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_v_line_to_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_last_line, __pyx_t_3); + if (!(likely(__Pyx_Py3Int_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_3))) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_DECREF_SET(__pyx_v_last_line, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":340 @@ -8286,13 +10761,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_v_line_to_offset); __Pyx_GIVEREF(__pyx_v_line_to_offset); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_line_to_offset); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_line_to_offset)) __PYX_ERR(0, 343, __pyx_L1_error); __Pyx_INCREF(__pyx_v_first_line); __Pyx_GIVEREF(__pyx_v_first_line); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_first_line); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_first_line)) __PYX_ERR(0, 343, __pyx_L1_error); __Pyx_INCREF(__pyx_v_last_line); __Pyx_GIVEREF(__pyx_v_last_line); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_last_line); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_last_line)) __PYX_ERR(0, 343, __pyx_L1_error); __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -8313,8 +10788,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._get_code_line_info", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -8335,16 +10810,98 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_10_get_c */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py(PyObject *__pyx_self, PyObject *__pyx_v_code_obj_py); /*proto*/ -static char __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py[] = "\n :return _CacheValue:\n :note: on cython use _cache.get(code_obj_py) directly.\n "; -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py = {"get_cached_code_obj_info_py", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py, METH_O, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py(PyObject *__pyx_self, PyObject *__pyx_v_code_obj_py) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py, "\n :return _CacheValue:\n :note: on cython use _cache.get(code_obj_py) directly.\n "); +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py = {"get_cached_code_obj_info_py", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code_obj_py = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_cached_code_obj_info_py (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py(__pyx_self, ((PyObject *)__pyx_v_code_obj_py)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj_py,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj_py)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 353, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_cached_code_obj_info_py") < 0)) __PYX_ERR(0, 353, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_code_obj_py = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_cached_code_obj_info_py", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 353, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_cached_code_obj_info_py", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_cached_code_obj_info_py(__pyx_self, __pyx_v_code_obj_py); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -8355,10 +10912,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_ca PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_cached_code_obj_info_py", 0); + __Pyx_RefNannySetupContext("get_cached_code_obj_info_py", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":358 * :note: on cython use _cache.get(code_obj_py) directly. @@ -8374,20 +10932,27 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_ca __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; } } - __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_code_obj_py) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_code_obj_py); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_code_obj_py}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; @@ -8423,7 +10988,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_12get_ca /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__[] = "\n :param code_obj_py:\n :param _CodeLineInfo code_line_info:\n :param set[int] breakpoints_hit_at_lines:\n "; +PyDoc_STRVAR(__pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__, "\n :param code_obj_py:\n :param _CodeLineInfo code_line_info:\n :param set[int] breakpoints_hit_at_lines:\n "); #if CYTHON_UPDATE_DESCRIPTOR_DOC struct wrapperbase __pyx_wrapperbase_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__; #endif @@ -8431,64 +10996,92 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ PyObject *__pyx_v_code_obj_py = 0; struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *__pyx_v_code_line_info = 0; PyObject *__pyx_v_breakpoints_hit_at_lines = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj_py,&__pyx_n_s_code_line_info,&__pyx_n_s_breakpoints_hit_at_lines,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj_py,&__pyx_n_s_code_line_info,&__pyx_n_s_breakpoints_hit_at_lines,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code_obj_py)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj_py)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code_line_info)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_line_info)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 368, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_breakpoints_hit_at_lines)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_breakpoints_hit_at_lines)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 368, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 368, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 368, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); } __pyx_v_code_obj_py = values[0]; __pyx_v_code_line_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)values[1]); __pyx_v_breakpoints_hit_at_lines = ((PyObject*)values[2]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 368, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 368, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return -1; @@ -8502,6 +11095,12 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -8513,7 +11112,7 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); + __Pyx_RefNannySetupContext("__init__", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":374 * :param set[int] breakpoints_hit_at_lines: @@ -8535,10 +11134,10 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ * self.breakpoints_hit_at_lines = breakpoints_hit_at_lines * self.code_lines_as_set = set(code_line_info.line_to_offset) */ - __Pyx_INCREF(((PyObject *)__pyx_v_code_line_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_code_line_info)); - __Pyx_GOTREF(__pyx_v_self->code_line_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->code_line_info)); + __Pyx_INCREF((PyObject *)__pyx_v_code_line_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_code_line_info); + __Pyx_GOTREF((PyObject *)__pyx_v_self->code_line_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->code_line_info); __pyx_v_self->code_line_info = __pyx_v_code_line_info; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":376 @@ -8597,7 +11196,13 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ * :param breakpoints: */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, PyObject *__pyx_v_breakpoints); /*proto*/ +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_compute_force_stay_in_untraced_mode(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self, PyObject *__pyx_v_breakpoints, int __pyx_skip_dispatch) { int __pyx_v_force_stay_in_untraced_mode; int __pyx_v_breakpoint_found; @@ -8609,39 +11214,47 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; + int __pyx_t_6; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("compute_force_stay_in_untraced_mode", 0); + __Pyx_RefNannySetupContext("compute_force_stay_in_untraced_mode", 1); /* Check if called by wrapper */ if (unlikely(__pyx_skip_dispatch)) ; /* Check if overridden in Python */ - else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || (Py_TYPE(((PyObject *)__pyx_v_self))->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { + else if (unlikely((Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) { #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) { - PY_UINT64_T __pyx_type_dict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); + PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); #endif __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_compute_force_stay_in_untraced_m); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)(void*)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode)) { + if (!__Pyx_IsSameCFunction(__pyx_t_1, (void*) __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode)) { __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = __pyx_t_1; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_breakpoints) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_breakpoints); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_breakpoints}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __pyx_r = __pyx_t_2; __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; @@ -8650,7 +11263,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self)); __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self)); - if (unlikely(__pyx_type_dict_guard != __pyx_tp_dict_version)) { + if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) { __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT; } #endif @@ -8679,21 +11292,28 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->code_lines_as_set, __pyx_n_s_intersection); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_breakpoints) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_breakpoints); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 391, __pyx_L1_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_breakpoints}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(0, 391, __pyx_L1_error) __pyx_v_target_breakpoints = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -8704,8 +11324,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV * * if not breakpoint_found: */ - __pyx_t_5 = (__pyx_v_target_breakpoints != Py_None)&&(PySet_GET_SIZE(__pyx_v_target_breakpoints) != 0); - __pyx_v_breakpoint_found = (!(!__pyx_t_5)); + __pyx_t_6 = (__pyx_v_target_breakpoints != Py_None)&&(PySet_GET_SIZE(__pyx_v_target_breakpoints) != 0); + __pyx_v_breakpoint_found = (!(!__pyx_t_6)); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":394 * breakpoint_found = bool(target_breakpoints) @@ -8714,8 +11334,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV * force_stay_in_untraced_mode = True * else: */ - __pyx_t_5 = ((!(__pyx_v_breakpoint_found != 0)) != 0); - if (__pyx_t_5) { + __pyx_t_6 = (!__pyx_v_breakpoint_found); + if (__pyx_t_6) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":395 * @@ -8749,24 +11369,31 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV __pyx_t_3 = PySet_New(__pyx_v_breakpoints); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 397, __pyx_L1_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 397, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_force_stay_in_untraced_mode = __pyx_t_5; + __pyx_v_force_stay_in_untraced_mode = __pyx_t_6; } __pyx_L3:; @@ -8785,9 +11412,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error); __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_r = __pyx_t_3; @@ -8818,15 +11445,98 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV } /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, PyObject *__pyx_v_breakpoints); /*proto*/ -static char __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode[] = "\n :param breakpoints:\n set(breakpoint_lines) or dict(breakpoint_line->breakpoint info)\n :return tuple(breakpoint_found, force_stay_in_untraced_mode)\n "; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, PyObject *__pyx_v_breakpoints) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode, "\n :param breakpoints:\n set(breakpoint_lines) or dict(breakpoint_line->breakpoint info)\n :return tuple(breakpoint_found, force_stay_in_untraced_mode)\n "); +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode = {"compute_force_stay_in_untraced_mode", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_breakpoints = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("compute_force_stay_in_untraced_mode (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v_breakpoints)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_breakpoints,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_breakpoints)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 379, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "compute_force_stay_in_untraced_mode") < 0)) __PYX_ERR(0, 379, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_breakpoints = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("compute_force_stay_in_untraced_mode", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 379, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue.compute_force_stay_in_untraced_mode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), __pyx_v_breakpoints); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -8838,7 +11548,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("compute_force_stay_in_untraced_mode", 0); + __Pyx_RefNannySetupContext("compute_force_stay_in_untraced_mode", 1); __Pyx_XDECREF(__pyx_r); __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_compute_force_stay_in_untraced_mode(__pyx_v_self, __pyx_v_breakpoints, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); @@ -8868,9 +11578,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -8881,7 +11593,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->code_obj_py); __pyx_r = __pyx_v_self->code_obj_py; @@ -8897,9 +11609,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -8910,7 +11624,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_2__set__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); __Pyx_INCREF(__pyx_v_value); __Pyx_GIVEREF(__pyx_v_value); __Pyx_GOTREF(__pyx_v_self->code_obj_py); @@ -8926,9 +11640,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -8939,7 +11655,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_11code_obj_py_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->code_obj_py); @@ -8963,9 +11679,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -8976,9 +11694,9 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self->code_line_info)); + __Pyx_INCREF((PyObject *)__pyx_v_self->code_line_info); __pyx_r = ((PyObject *)__pyx_v_self->code_line_info); goto __pyx_L0; @@ -8992,9 +11710,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -9009,13 +11729,13 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); + __Pyx_RefNannySetupContext("__set__", 1); if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo))))) __PYX_ERR(0, 364, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->code_line_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->code_line_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->code_line_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->code_line_info); __pyx_v_self->code_line_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_t_1); __pyx_t_1 = 0; @@ -9034,9 +11754,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9047,11 +11769,11 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_14code_line_info_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->code_line_info); - __Pyx_DECREF(((PyObject *)__pyx_v_self->code_line_info)); + __Pyx_GOTREF((PyObject *)__pyx_v_self->code_line_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->code_line_info); __pyx_v_self->code_line_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)Py_None); /* function exit code */ @@ -9071,9 +11793,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9084,7 +11808,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->breakpoints_hit_at_lines); __pyx_r = __pyx_v_self->breakpoints_hit_at_lines; @@ -9100,9 +11824,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -9117,8 +11843,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 365, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_v_value))) __PYX_ERR(0, 365, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -9142,9 +11868,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9155,7 +11883,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_24breakpoints_hit_at_lines_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->breakpoints_hit_at_lines); @@ -9179,9 +11907,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_1__get__(PyObject *__pyx_v_self); /*proto*/ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_1__get__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set___get__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9192,7 +11922,7 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set___get__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); + __Pyx_RefNannySetupContext("__get__", 1); __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_self->code_lines_as_set); __pyx_r = __pyx_v_self->code_lines_as_set; @@ -9208,9 +11938,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_2__set__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v_value)); /* function exit code */ @@ -9225,8 +11957,8 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 366, __pyx_L1_error) + __Pyx_RefNannySetupContext("__set__", 1); + if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_v_value))) __PYX_ERR(0, 366, __pyx_L1_error) __pyx_t_1 = __pyx_v_value; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); @@ -9250,9 +11982,11 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ /* Python wrapper */ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_5__del__(PyObject *__pyx_v_self); /*proto*/ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_5__del__(PyObject *__pyx_v_self) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_4__del__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9263,7 +11997,7 @@ static int __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_17code_lines_as_set_4__del__(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__del__", 0); + __Pyx_RefNannySetupContext("__del__", 1); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); __Pyx_GOTREF(__pyx_v_self->code_lines_as_set); @@ -9283,11 +12017,39 @@ static int __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_ */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_4__reduce_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self)); /* function exit code */ @@ -9303,14 +12065,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); + __Pyx_RefNannySetupContext("__reduce_cython__", 1); /* "(tree fragment)":5 * cdef object _dict @@ -9323,16 +12084,16 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->breakpoints_hit_at_lines); __Pyx_GIVEREF(__pyx_v_self->breakpoints_hit_at_lines); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->breakpoints_hit_at_lines); - __Pyx_INCREF(((PyObject *)__pyx_v_self->code_line_info)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self->code_line_info)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->code_line_info)); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->breakpoints_hit_at_lines)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF((PyObject *)__pyx_v_self->code_line_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_self->code_line_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->code_line_info))) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->code_lines_as_set); __Pyx_GIVEREF(__pyx_v_self->code_lines_as_set); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->code_lines_as_set); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->code_lines_as_set)) __PYX_ERR(1, 5, __pyx_L1_error); __Pyx_INCREF(__pyx_v_self->code_obj_py); __Pyx_GIVEREF(__pyx_v_self->code_obj_py); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_self->code_obj_py); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_self->code_obj_py)) __PYX_ERR(1, 5, __pyx_L1_error); __pyx_v_state = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -9356,8 +12117,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache * use_setstate = True */ __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":8 * _dict = getattr(self, '__dict__', None) @@ -9370,12 +12130,12 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v__dict); __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; /* "(tree fragment)":9 * if _dict is not None: @@ -9401,35 +12161,31 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache * else: * use_setstate = self.breakpoints_hit_at_lines is not None or self.code_line_info is not None or self.code_lines_as_set is not None or self.code_obj_py is not None # <<<<<<<<<<<<<< * if use_setstate: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, None), state + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, None), state */ /*else*/ { - __pyx_t_2 = (__pyx_v_self->breakpoints_hit_at_lines != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { + __pyx_t_4 = (__pyx_v_self->breakpoints_hit_at_lines != ((PyObject*)Py_None)); + if (!__pyx_t_4) { } else { - __pyx_t_3 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = (((PyObject *)__pyx_v_self->code_line_info) != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - if (!__pyx_t_2) { + __pyx_t_4 = (((PyObject *)__pyx_v_self->code_line_info) != Py_None); + if (!__pyx_t_4) { } else { - __pyx_t_3 = __pyx_t_2; + __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_2 = (__pyx_v_self->code_lines_as_set != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { + __pyx_t_4 = (__pyx_v_self->code_lines_as_set != ((PyObject*)Py_None)); + if (!__pyx_t_4) { } else { - __pyx_t_3 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } - __pyx_t_5 = (__pyx_v_self->code_obj_py != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_2; + __pyx_t_4 = (__pyx_v_self->code_obj_py != Py_None); + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_3; + __pyx_v_use_setstate = __pyx_t_2; } __pyx_L3:; @@ -9437,89 +12193,88 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache * else: * use_setstate = self.breakpoints_hit_at_lines is not None or self.code_line_info is not None or self.code_lines_as_set is not None or self.code_obj_py is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, None), state + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, None), state * else: */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { + if (__pyx_v_use_setstate) { /* "(tree fragment)":13 * use_setstate = self.breakpoints_hit_at_lines is not None or self.code_line_info is not None or self.code_lines_as_set is not None or self.code_obj_py is not None * if use_setstate: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, None), state # <<<<<<<<<<<<<< + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, None), state # <<<<<<<<<<<<<< * else: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, state) + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle__CacheValue); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle__CacheValue); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64258489); - __Pyx_GIVEREF(__pyx_int_64258489); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64258489); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_180628038); + __Pyx_GIVEREF(__pyx_int_180628038); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_180628038)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(Py_None); __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_4 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_3 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; goto __pyx_L0; /* "(tree fragment)":12 * else: * use_setstate = self.breakpoints_hit_at_lines is not None or self.code_line_info is not None or self.code_lines_as_set is not None or self.code_obj_py is not None * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, None), state + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, None), state * else: */ } /* "(tree fragment)":15 - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, None), state + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, None), state * else: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, state) # <<<<<<<<<<<<<< + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) # <<<<<<<<<<<<<< * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle__CacheValue); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle__CacheValue); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_64258489); - __Pyx_GIVEREF(__pyx_int_64258489); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_64258489); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_180628038); + __Pyx_GIVEREF(__pyx_int_180628038); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_180628038)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_INCREF(__pyx_v_state); __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_6 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_5 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; } @@ -9532,8 +12287,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -9546,20 +12301,103 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache /* "(tree fragment)":16 * else: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, state) + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_6__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_6__setstate_cython__(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v_self), __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -9571,21 +12409,21 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); + __Pyx_RefNannySetupContext("__setstate_cython__", 1); /* "(tree fragment)":17 - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, state) + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) * def __setstate_cython__(self, __pyx_state): * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) # <<<<<<<<<<<<<< */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CacheValue__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":16 * else: - * return __pyx_unpickle__CacheValue, (type(self), 0x3d481b9, state) + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) */ @@ -9612,59 +12450,99 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_Cache */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py = {"generate_code_with_breakpoints_py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py = {"generate_code_with_breakpoints_py", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v_code_obj_py = 0; PyObject *__pyx_v_breakpoints = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("generate_code_with_breakpoints_py (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj_py,&__pyx_n_s_breakpoints,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj_py,&__pyx_n_s_breakpoints,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code_obj_py)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj_py)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 401, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_breakpoints)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_breakpoints)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 401, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("generate_code_with_breakpoints_py", 1, 2, 2, 1); __PYX_ERR(0, 401, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generate_code_with_breakpoints_py") < 0)) __PYX_ERR(0, 401, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "generate_code_with_breakpoints_py") < 0)) __PYX_ERR(0, 401, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + } else if (unlikely(__pyx_nargs != 2)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); } __pyx_v_code_obj_py = values[0]; __pyx_v_breakpoints = ((PyObject*)values[1]); } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("generate_code_with_breakpoints_py", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 401, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("generate_code_with_breakpoints_py", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 401, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.generate_code_with_breakpoints_py", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -9677,6 +12555,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_15genera __pyx_L1_error:; __pyx_r = NULL; __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -9688,7 +12572,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_14genera int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("generate_code_with_breakpoints_py", 0); + __Pyx_RefNannySetupContext("generate_code_with_breakpoints_py", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":402 * @@ -9746,14 +12630,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ int __pyx_t_2; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; + int __pyx_t_5; Py_ssize_t __pyx_t_6; - int __pyx_t_7; + Py_ssize_t __pyx_t_7; int __pyx_t_8; int __pyx_t_9; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *(*__pyx_t_12)(PyObject *); + PyObject *__pyx_t_10 = NULL; + PyObject *(*__pyx_t_11)(PyObject *); int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -9768,16 +12651,18 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * # if DEBUG: */ #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(!Py_OptimizeFlag)) { + if (unlikely(__pyx_assertions_enabled())) { __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_code_obj_py, __pyx_t_1, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 424, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_code_obj_py, __pyx_t_1, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 424, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!(__pyx_t_2 != 0))) { - PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_If_a_code_object_is_cached_that); + if (unlikely(!__pyx_t_2)) { + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_kp_s_If_a_code_object_is_cached_that, 0, 0); __PYX_ERR(0, 424, __pyx_L1_error) } } + #else + if ((1)); else __PYX_ERR(0, 424, __pyx_L1_error) #endif /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":429 @@ -9790,20 +12675,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_code_line_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_code_obj_py) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_code_obj_py); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_code_obj_py}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } __pyx_v_code_line_info = __pyx_t_1; __pyx_t_1 = 0; @@ -9837,7 +12729,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ */ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code_line_info, __pyx_n_s_line_to_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 434, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 434, __pyx_L1_error) __pyx_v_line_to_offset = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; @@ -9848,18 +12740,18 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * if breakpoint_line in line_to_offset: * breakpoints_hit_at_lines.add(breakpoint_line) */ - __pyx_t_5 = 0; + __pyx_t_6 = 0; if (unlikely(__pyx_v_breakpoints == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 436, __pyx_L1_error) } - __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_breakpoints, 1, ((PyObject *)NULL), (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error) + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_breakpoints, 1, ((PyObject *)NULL), (&__pyx_t_7), (&__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = __pyx_t_3; __pyx_t_3 = 0; while (1) { - __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, NULL, NULL, __pyx_t_7); + __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_7, &__pyx_t_6, &__pyx_t_3, NULL, NULL, __pyx_t_5); if (unlikely(__pyx_t_8 == 0)) break; if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); @@ -9880,10 +12772,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); __PYX_ERR(0, 437, __pyx_L1_error) } - __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_t_3, __pyx_v_line_to_offset, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 437, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_t_3, __pyx_v_line_to_offset, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 437, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = (__pyx_t_2 != 0); - if (__pyx_t_9) { + if (__pyx_t_2) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":438 * for breakpoint_line in breakpoints: @@ -9894,7 +12785,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ */ __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_breakpoint_line); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_10 = PySet_Add(__pyx_v_breakpoints_hit_at_lines, __pyx_t_3); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 438, __pyx_L1_error) + __pyx_t_9 = PySet_Add(__pyx_v_breakpoints_hit_at_lines, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 438, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":437 @@ -9915,8 +12806,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * success, new_code = insert_pydevd_breaks( * code_obj_py, */ - __pyx_t_9 = (PySet_GET_SIZE(__pyx_v_breakpoints_hit_at_lines) != 0); - if (__pyx_t_9) { + __pyx_t_2 = (PySet_GET_SIZE(__pyx_v_breakpoints_hit_at_lines) != 0); + if (__pyx_t_2) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":441 * @@ -9936,53 +12827,27 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * */ __pyx_t_4 = NULL; - __pyx_t_7 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_7 = 1; + __pyx_t_5 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_code_obj_py, __pyx_v_breakpoints_hit_at_lines, __pyx_v_code_line_info}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_code_obj_py, __pyx_v_breakpoints_hit_at_lines, __pyx_v_code_line_info}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else #endif { - __pyx_t_11 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_code_obj_py); - __Pyx_GIVEREF(__pyx_v_code_obj_py); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_7, __pyx_v_code_obj_py); - __Pyx_INCREF(__pyx_v_breakpoints_hit_at_lines); - __Pyx_GIVEREF(__pyx_v_breakpoints_hit_at_lines); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_7, __pyx_v_breakpoints_hit_at_lines); - __Pyx_INCREF(__pyx_v_code_line_info); - __Pyx_GIVEREF(__pyx_v_code_line_info); - PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_7, __pyx_v_code_line_info); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_code_obj_py, __pyx_v_breakpoints_hit_at_lines, __pyx_v_code_line_info}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { PyObject* sequence = __pyx_t_1; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); @@ -9994,37 +12859,37 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); - __pyx_t_11 = PyList_GET_ITEM(sequence, 1); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_11); + __Pyx_INCREF(__pyx_t_4); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; - __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 441, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 441, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_12 = Py_TYPE(__pyx_t_4)->tp_iternext; - index = 0; __pyx_t_3 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed; + __pyx_t_11 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_10); + index = 0; __pyx_t_3 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); - index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_4); if (unlikely(!__pyx_t_11)) goto __pyx_L7_unpacking_failed; - __Pyx_GOTREF(__pyx_t_11); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_4), 2) < 0) __PYX_ERR(0, 441, __pyx_L1_error) - __pyx_t_12 = NULL; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + index = 1; __pyx_t_4 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_11 = NULL; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; goto __pyx_L8_unpacking_done; __pyx_L7_unpacking_failed:; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_12 = NULL; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 441, __pyx_L1_error) __pyx_L8_unpacking_done:; @@ -10037,11 +12902,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * code_obj_py, * breakpoints_hit_at_lines, */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 441, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 441, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_success = __pyx_t_9; - __pyx_v_new_code = __pyx_t_11; - __pyx_t_11 = 0; + __pyx_v_success = __pyx_t_2; + __pyx_v_new_code = __pyx_t_4; + __pyx_t_4 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":447 * ) @@ -10050,8 +12915,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * code_obj_py = None * else: */ - __pyx_t_9 = ((!(__pyx_v_success != 0)) != 0); - if (__pyx_t_9) { + __pyx_t_2 = (!__pyx_v_success); + if (__pyx_t_2) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":448 * @@ -10102,8 +12967,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * if breakpoint_found and success: * # if DEBUG: */ - __pyx_t_9 = (PySet_GET_SIZE(__pyx_v_breakpoints_hit_at_lines) != 0); - __pyx_v_breakpoint_found = (!(!__pyx_t_9)); + __pyx_t_2 = (PySet_GET_SIZE(__pyx_v_breakpoints_hit_at_lines) != 0); + __pyx_v_breakpoint_found = (!(!__pyx_t_2)); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":453 * @@ -10112,16 +12977,14 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * # if DEBUG: * # op_number = debug_helper.write_dis( */ - __pyx_t_2 = (__pyx_v_breakpoint_found != 0); - if (__pyx_t_2) { + if (__pyx_v_breakpoint_found) { } else { - __pyx_t_9 = __pyx_t_2; + __pyx_t_2 = __pyx_v_breakpoint_found; goto __pyx_L11_bool_binop_done; } - __pyx_t_2 = (__pyx_v_success != 0); - __pyx_t_9 = __pyx_t_2; + __pyx_t_2 = __pyx_v_success; __pyx_L11_bool_binop_done:; - if (__pyx_t_9) { + if (__pyx_t_2) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":466 * # ) @@ -10134,18 +12997,18 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_code_obj_py); __Pyx_GIVEREF(__pyx_v_code_obj_py); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_code_obj_py); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_code_obj_py)) __PYX_ERR(0, 466, __pyx_L1_error); __Pyx_INCREF(__pyx_v_code_line_info); __Pyx_GIVEREF(__pyx_v_code_line_info); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_code_line_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_code_line_info)) __PYX_ERR(0, 466, __pyx_L1_error); __Pyx_INCREF(__pyx_v_breakpoints_hit_at_lines); __Pyx_GIVEREF(__pyx_v_breakpoints_hit_at_lines); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_breakpoints_hit_at_lines); - __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), __pyx_t_1, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 466, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_breakpoints_hit_at_lines)) __PYX_ERR(0, 466, __pyx_L1_error); + __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 466, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_cache_value = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_t_11); - __pyx_t_11 = 0; + __pyx_v_cache_value = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_t_4); + __pyx_t_4 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":467 * @@ -10154,10 +13017,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * * return breakpoint_found, code_obj_py */ - __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_cache); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (unlikely(PyObject_SetItem(__pyx_t_11, __pyx_v_code_obj_py, ((PyObject *)__pyx_v_cache_value)) < 0)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_cache); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 467, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (unlikely((PyObject_SetItem(__pyx_t_4, __pyx_v_code_obj_py, ((PyObject *)__pyx_v_cache_value)) < 0))) __PYX_ERR(0, 467, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":453 * @@ -10176,16 +13039,16 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ * import sys */ __Pyx_XDECREF(__pyx_r); - __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_v_breakpoint_found); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 469, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_breakpoint_found); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 469, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4)) __PYX_ERR(0, 469, __pyx_L1_error); __Pyx_INCREF(__pyx_v_code_obj_py); __Pyx_GIVEREF(__pyx_v_code_obj_py); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_code_obj_py); - __pyx_t_11 = 0; + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_code_obj_py)) __PYX_ERR(0, 469, __pyx_L1_error); + __pyx_t_4 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; @@ -10203,7 +13066,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_10); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.generate_code_with_breakpoints", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -10230,9 +13093,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_generate_ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func = {"frame_eval_func", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func, METH_NOARGS, 0}; static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("frame_eval_func (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_eval_func(__pyx_self); /* function exit code */ @@ -10244,15 +13109,15 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_ PyThreadState *__pyx_v_state; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - int __pyx_t_1; + PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("frame_eval_func", 0); + __Pyx_RefNannySetupContext("frame_eval_func", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":476 * @@ -10270,8 +13135,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_ * state.interp.eval_frame = <_PyFrameEvalFunction *> get_bytecode_while_frame_eval_39 * else: */ - __pyx_t_1 = (__pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator_IS_PY_39_OWNARDS != 0); - if (__pyx_t_1) { + if (__pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator_IS_PY_39_OWNARDS) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":478 * cdef PyThreadState *state = PyThreadState_Get() @@ -10311,30 +13175,37 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_ * * */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dummy_tracing_holder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 481, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_trace_func); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 481, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dummy_trace_dispatch); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 481, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dummy_tracing_holder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set_trace_func); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_dummy_trace_dispatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_2}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 481, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":475 * cdef bint IS_PY_39_OWNARDS = sys.version_info[:2] >= (3, 9) @@ -10348,10 +13219,10 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.frame_eval_func", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -10372,9 +13243,11 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_16frame_ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval = {"stop_frame_eval", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval, METH_NOARGS, 0}; static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("stop_frame_eval (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_18stop_frame_eval(__pyx_self); /* function exit code */ @@ -10386,7 +13259,7 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_18stop_f PyThreadState *__pyx_v_state; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stop_frame_eval", 0); + __Pyx_RefNannySetupContext("stop_frame_eval", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":485 * @@ -10451,15 +13324,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; - int __pyx_t_4; + PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - PyObject *(*__pyx_t_12)(PyObject *); + int __pyx_t_10; + PyObject *(*__pyx_t_11)(PyObject *); + int __pyx_t_12; int __pyx_t_13; char const *__pyx_t_14; PyObject *__pyx_t_15 = NULL; @@ -10469,7 +13342,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_bytecode_while_frame_eval_38", 0); + __Pyx_RefNannySetupContext("get_bytecode_while_frame_eval_38", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":499 * where programmatic breakpoints are added. @@ -10482,17 +13355,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = (__pyx_t_3 != 0); - if (!__pyx_t_4) { + if (!__pyx_t_3) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = (__pyx_t_2 == Py_None); + __pyx_t_3 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = (__pyx_t_4 != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; @@ -10604,10 +13475,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":517 @@ -10619,12 +13490,12 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 517, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 517, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo))))) __PYX_ERR(0, 517, __pyx_L7_error) - __pyx_v_thread_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_8); - __pyx_t_8 = 0; + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo))))) __PYX_ERR(0, 517, __pyx_L7_error) + __pyx_v_thread_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_7); + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":516 * cdef int CMD_SMART_STEP_INTO = 128 @@ -10634,13 +13505,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * except: */ } + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L12_try_end; __pyx_L7_error:; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":518 * try: @@ -10651,10 +13522,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_38", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 518, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_9); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 518, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_8); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":519 * thread_info = _thread_local_info.thread_info @@ -10663,10 +13534,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info is None: * return CALL_EvalFrameDefault_38(frame_obj, exc) */ - __pyx_t_10 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(__pyx_v_frame_obj)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 519, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_10)); - __pyx_t_10 = 0; + __pyx_t_9 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(__pyx_v_frame_obj)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 519, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_9)); + __pyx_t_9 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":520 * except: @@ -10676,8 +13547,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * */ __pyx_t_1 = (((PyObject *)__pyx_v_thread_info) == Py_None); - __pyx_t_3 = (__pyx_t_1 != 0); - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":521 * thread_info = get_thread_info(frame_obj) @@ -10688,8 +13558,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_r = CALL_EvalFrameDefault_38(__pyx_v_frame_obj, __pyx_v_exc); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L10_except_return; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":520 @@ -10700,12 +13570,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * */ } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L8_exception_handled; } - __pyx_L9_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":516 * cdef int CMD_SMART_STEP_INTO = 128 @@ -10714,22 +13583,23 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info = _thread_local_info.thread_info * except: */ + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); goto __pyx_L1_error; __pyx_L10_except_return:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); goto __pyx_L0; __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); __pyx_L12_try_end:; } @@ -10740,8 +13610,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_38(frame_obj, exc) * */ - __pyx_t_3 = (__pyx_v_thread_info->inside_frame_eval != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->inside_frame_eval != 0); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":524 * @@ -10769,8 +13639,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info.initialize_if_possible() * if not thread_info.fully_initialized: */ - __pyx_t_3 = ((!(__pyx_v_thread_info->fully_initialized != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->fully_initialized); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":527 * @@ -10779,9 +13649,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if not thread_info.fully_initialized: * return CALL_EvalFrameDefault_38(frame_obj, exc) */ - __pyx_t_9 = ((struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_thread_info->__pyx_vtab)->initialize_if_possible(__pyx_v_thread_info); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 527, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_8 = ((struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_thread_info->__pyx_vtab)->initialize_if_possible(__pyx_v_thread_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":528 * if not thread_info.fully_initialized: @@ -10790,8 +13660,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_38(frame_obj, exc) * */ - __pyx_t_3 = ((!(__pyx_v_thread_info->fully_initialized != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->fully_initialized); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":529 * thread_info.initialize_if_possible() @@ -10828,10 +13698,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info.is_pydevd_thread or additional_info.is_tracing: * # Make sure that we don't trace pydevd threads or inside our own calls. */ - __pyx_t_9 = ((PyObject *)__pyx_v_thread_info->additional_info); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_9); - __pyx_t_9 = 0; + __pyx_t_8 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_8); + __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_8); + __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":533 * # Can only get additional_info when fully initialized. @@ -10840,16 +13710,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # Make sure that we don't trace pydevd threads or inside our own calls. * return CALL_EvalFrameDefault_38(frame_obj, exc) */ - __pyx_t_1 = (__pyx_v_thread_info->is_pydevd_thread != 0); - if (!__pyx_t_1) { + if (!__pyx_v_thread_info->is_pydevd_thread) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_v_thread_info->is_pydevd_thread; goto __pyx_L20_bool_binop_done; } - __pyx_t_1 = (__pyx_v_additional_info->is_tracing != 0); - __pyx_t_3 = __pyx_t_1; + __pyx_t_3 = (__pyx_v_additional_info->is_tracing != 0); + __pyx_t_1 = __pyx_t_3; __pyx_L20_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":535 * if thread_info.is_pydevd_thread or additional_info.is_tracing: @@ -10904,11 +13773,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if main_debugger is None: * return CALL_EvalFrameDefault_38(frame_obj, exc) */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 545, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L23_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 545, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_main_debugger = __pyx_t_2; __pyx_t_2 = 0; @@ -10919,8 +13788,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_38(frame_obj, exc) * frame = frame_obj */ - __pyx_t_3 = (__pyx_v_main_debugger == Py_None); - __pyx_t_1 = (__pyx_t_3 != 0); + __pyx_t_1 = (__pyx_v_main_debugger == Py_None); if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":547 @@ -10962,8 +13830,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if apply_to_global: */ __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func == Py_None); - __pyx_t_3 = (__pyx_t_1 != 0); - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":551 * @@ -10972,53 +13839,30 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if apply_to_global: * thread_info.thread_trace_func = trace_func */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 551, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else #endif { - __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_11, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_11, __pyx_v_frame); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L23_error) + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_main_debugger, __pyx_v_frame}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 551, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); @@ -11029,46 +13873,46 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { - __pyx_t_9 = PyList_GET_ITEM(sequence, 0); - __pyx_t_10 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); #else - __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 551, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 551, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; - __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 551, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext; - index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_9)) goto __pyx_L27_unpacking_failed; + __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 551, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_9); - index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_10)) goto __pyx_L27_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_8), 2) < 0) __PYX_ERR(0, 551, __pyx_L23_error) - __pyx_t_12 = NULL; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_11 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_8 = __pyx_t_11(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_7 = __pyx_t_11(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_9), 2) < 0) __PYX_ERR(0, 551, __pyx_L23_error) + __pyx_t_11 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L28_unpacking_done; __pyx_L27_unpacking_failed:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_12 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 551, __pyx_L23_error) __pyx_L28_unpacking_done:; } - __pyx_v_trace_func = __pyx_t_9; - __pyx_t_9 = 0; - __pyx_v_apply_to_global = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_v_trace_func = __pyx_t_8; + __pyx_t_8 = 0; + __pyx_v_apply_to_global = __pyx_t_7; + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":552 * if thread_info.thread_trace_func is None: @@ -11077,8 +13921,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info.thread_trace_func = trace_func * */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_global); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 552, __pyx_L23_error) - if (__pyx_t_3) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_global); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 552, __pyx_L23_error) + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":553 * trace_func, apply_to_global = fix_top_level_trace_and_get_trace_func(main_debugger, frame) @@ -11118,32 +13962,32 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * main_debugger.break_on_caught_exceptions or \ * main_debugger.break_on_user_uncaught_exceptions or \ */ - __pyx_t_11 = __pyx_v_additional_info->pydev_step_cmd; - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO) != 0); - if (!__pyx_t_4) { + __pyx_t_10 = __pyx_v_additional_info->pydev_step_cmd; + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO_MY_CODE) != 0); - if (!__pyx_t_4) { + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO_MY_CODE); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO_COROUTINE) != 0); - if (!__pyx_t_4) { + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO_COROUTINE); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_SMART_STEP_INTO) != 0); - __pyx_t_1 = __pyx_t_4; + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_SMART_STEP_INTO); + __pyx_t_3 = __pyx_t_12; __pyx_L33_bool_binop_done:; - __pyx_t_4 = (__pyx_t_1 != 0); - if (!__pyx_t_4) { + __pyx_t_12 = __pyx_t_3; + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -11156,11 +14000,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 556, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 556, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -11173,11 +14017,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 557, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 557, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -11190,11 +14034,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 558, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 558, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 558, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -11207,11 +14051,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_signature_factory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 559, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 559, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 559, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -11222,37 +14066,36 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * * # if DEBUG: */ - __pyx_t_11 = __pyx_v_additional_info->pydev_step_cmd; - __pyx_t_1 = ((__pyx_t_11 == __pyx_v_CMD_STEP_OVER) != 0); - if (!__pyx_t_1) { + __pyx_t_10 = __pyx_v_additional_info->pydev_step_cmd; + __pyx_t_3 = (__pyx_t_10 == __pyx_v_CMD_STEP_OVER); + if (!__pyx_t_3) { } else { - __pyx_t_4 = __pyx_t_1; + __pyx_t_12 = __pyx_t_3; goto __pyx_L42_bool_binop_done; } - __pyx_t_1 = ((__pyx_t_11 == __pyx_v_CMD_STEP_OVER_MY_CODE) != 0); - __pyx_t_4 = __pyx_t_1; + __pyx_t_3 = (__pyx_t_10 == __pyx_v_CMD_STEP_OVER_MY_CODE); + __pyx_t_12 = __pyx_t_3; __pyx_L42_bool_binop_done:; - __pyx_t_1 = (__pyx_t_4 != 0); - if (__pyx_t_1) { + __pyx_t_3 = __pyx_t_12; + if (__pyx_t_3) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_t_3; goto __pyx_L31_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 560, __pyx_L23_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 560, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_1) { + if (__pyx_t_3) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_t_3; goto __pyx_L31_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = (__pyx_t_2 == __pyx_v_additional_info->pydev_step_stop); + __pyx_t_3 = (__pyx_t_2 == __pyx_v_additional_info->pydev_step_stop); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = (__pyx_t_1 != 0); - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_3; __pyx_L31_bool_binop_done:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":555 @@ -11262,7 +14105,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * main_debugger.break_on_caught_exceptions or \ * main_debugger.break_on_user_uncaught_exceptions or \ */ - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":564 * # if DEBUG: @@ -11271,9 +14114,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_3 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":565 * # print('get_bytecode_while_frame_eval enabled trace') @@ -11307,11 +14149,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /*else*/ { __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __pyx_t_2; - __Pyx_INCREF(__pyx_t_10); + __pyx_t_7 = __pyx_t_2; + __Pyx_INCREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 567, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 567, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L45:; @@ -11333,10 +14175,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # print('get_bytecode_while_frame_eval always skip', func_code_info.always_skip_code) */ /*else*/ { - __pyx_t_10 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_func_code_info(__pyx_v_thread_info, __pyx_v_frame_obj, __pyx_v_frame_obj->f_code)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 569, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_v_func_code_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_t_10); - __pyx_t_10 = 0; + __pyx_t_7 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_func_code_info(__pyx_v_thread_info, __pyx_v_frame_obj, __pyx_v_frame_obj->f_code)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 569, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_func_code_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_t_7); + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":572 * # if DEBUG: @@ -11345,8 +14187,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * * if main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks: */ - __pyx_t_4 = ((!(__pyx_v_func_code_info->always_skip_code != 0)) != 0); - if (__pyx_t_4) { + __pyx_t_1 = (!__pyx_v_func_code_info->always_skip_code); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":574 * if not func_code_info.always_skip_code: @@ -11355,22 +14197,22 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * can_skip = main_debugger.plugin.can_skip(main_debugger, frame_obj) * */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 574, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 574, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 574, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 574, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (!__pyx_t_3) { } else { - __pyx_t_4 = __pyx_t_3; + __pyx_t_1 = __pyx_t_3; goto __pyx_L48_bool_binop_done; } - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 574, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 574, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_4 = __pyx_t_3; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 574, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 574, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_1 = __pyx_t_3; __pyx_L48_bool_binop_done:; - if (__pyx_t_4) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":575 * @@ -11381,57 +14223,34 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 575, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; - __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_10); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; - __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_10); - } else #endif { - __pyx_t_8 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_11, __pyx_v_main_debugger); - __Pyx_INCREF(((PyObject *)__pyx_v_frame_obj)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_frame_obj)); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_11, ((PyObject *)__pyx_v_frame_obj)); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 575, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 575, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_can_skip = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 575, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_can_skip = __pyx_t_1; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":577 * can_skip = main_debugger.plugin.can_skip(main_debugger, frame_obj) @@ -11440,8 +14259,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # if DEBUG: * # print('get_bytecode_while_frame_eval not can_skip') */ - __pyx_t_4 = ((!(__pyx_v_can_skip != 0)) != 0); - if (__pyx_t_4) { + __pyx_t_1 = (!__pyx_v_can_skip); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":580 * # if DEBUG: @@ -11450,9 +14269,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_4 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_3 = (__pyx_t_4 != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":581 * # print('get_bytecode_while_frame_eval not can_skip') @@ -11461,10 +14279,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * else: * frame.f_trace = main_debugger.trace_dispatch */ - __pyx_t_10 = __pyx_v_thread_info->thread_trace_func; - __Pyx_INCREF(__pyx_t_10); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 581, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __pyx_v_thread_info->thread_trace_func; + __Pyx_INCREF(__pyx_t_7); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 581, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":580 * # if DEBUG: @@ -11484,13 +14302,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if can_skip and func_code_info.breakpoint_found: */ /*else*/ { - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 583, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __pyx_t_10; - __Pyx_INCREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_9) < 0) __PYX_ERR(0, 583, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 583, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_t_7; + __Pyx_INCREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_8) < 0) __PYX_ERR(0, 583, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __pyx_L51:; @@ -11519,16 +14337,14 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # if DEBUG: * # print('get_bytecode_while_frame_eval new_code', func_code_info.new_code) */ - __pyx_t_4 = (__pyx_v_can_skip != 0); - if (__pyx_t_4) { + if (__pyx_v_can_skip) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_v_can_skip; goto __pyx_L53_bool_binop_done; } - __pyx_t_4 = (__pyx_v_func_code_info->breakpoint_found != 0); - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_v_func_code_info->breakpoint_found; __pyx_L53_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":588 * # if DEBUG: @@ -11537,8 +14353,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # If breakpoints are found but new_code is None, * # this means we weren't able to actually add the code */ - __pyx_t_3 = ((!(__pyx_v_thread_info->force_stay_in_untraced_mode != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->force_stay_in_untraced_mode); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":592 * # this means we weren't able to actually add the code @@ -11547,9 +14363,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info.thread_trace_func is not None: * frame.f_trace = thread_info.thread_trace_func */ - __pyx_t_3 = (__pyx_v_func_code_info->new_code == Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_v_func_code_info->new_code == Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":593 * # where needed, so, fallback to tracing. @@ -11558,9 +14373,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_4 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_3 = (__pyx_t_4 != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":594 * if func_code_info.new_code is None: @@ -11569,10 +14383,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * else: * frame.f_trace = main_debugger.trace_dispatch */ - __pyx_t_9 = __pyx_v_thread_info->thread_trace_func; - __Pyx_INCREF(__pyx_t_9); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_9) < 0) __PYX_ERR(0, 594, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_8 = __pyx_v_thread_info->thread_trace_func; + __Pyx_INCREF(__pyx_t_8); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_8) < 0) __PYX_ERR(0, 594, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":593 * # where needed, so, fallback to tracing. @@ -11592,13 +14406,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # print('Using frame eval break for', frame_obj.f_code.co_name) */ /*else*/ { - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 596, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __pyx_t_9; - __Pyx_INCREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 596, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 596, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __pyx_t_8; + __Pyx_INCREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 596, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L57:; @@ -11620,24 +14434,31 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * old = frame_obj.f_code */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 599, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 599, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - __pyx_t_10 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, ((PyObject *)__pyx_v_frame_obj->f_globals)) : __Pyx_PyObject_CallOneArg(__pyx_t_9, ((PyObject *)__pyx_v_frame_obj->f_globals)); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 599, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_frame_obj->f_globals)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 599, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":600 * # print('Using frame eval break for', frame_obj.f_code.co_name) @@ -11646,10 +14467,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * old = frame_obj.f_code * frame_obj.f_code = func_code_info.new_code */ - __pyx_t_10 = __pyx_v_func_code_info->new_code; - __Pyx_INCREF(__pyx_t_10); - Py_INCREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __pyx_v_func_code_info->new_code; + __Pyx_INCREF(__pyx_t_7); + Py_INCREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":601 * update_globals_dict( frame_obj.f_globals) @@ -11658,10 +14479,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame_obj.f_code = func_code_info.new_code * Py_DECREF(old) */ - __pyx_t_10 = ((PyObject *)__pyx_v_frame_obj->f_code); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_old = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_7 = ((PyObject *)__pyx_v_frame_obj->f_code); + __Pyx_INCREF(__pyx_t_7); + __pyx_v_old = __pyx_t_7; + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":602 * Py_INCREF(func_code_info.new_code) @@ -11701,24 +14522,31 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * finally: */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 608, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 608, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - __pyx_t_10 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, ((PyObject *)__pyx_v_frame_obj->f_globals)) : __Pyx_PyObject_CallOneArg(__pyx_t_9, ((PyObject *)__pyx_v_frame_obj->f_globals)); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 608, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_frame_obj->f_globals)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 608, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L55:; @@ -11768,20 +14596,20 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_7); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); - __pyx_t_11 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + __pyx_t_10 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":611 @@ -11808,12 +14636,12 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); } - __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_7, __pyx_t_6, __pyx_t_5); - __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestore(__pyx_t_6, __pyx_t_5, __pyx_t_4); + __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; goto __pyx_L1_error; } __pyx_L22_return: { @@ -11863,11 +14691,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_WriteUnraisable("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_38", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_38", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); __Pyx_XDECREF((PyObject *)__pyx_v_additional_info); @@ -11911,15 +14739,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec int __pyx_t_1; PyObject *__pyx_t_2 = NULL; int __pyx_t_3; - int __pyx_t_4; + PyObject *__pyx_t_4 = NULL; PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - PyObject *(*__pyx_t_12)(PyObject *); + int __pyx_t_10; + PyObject *(*__pyx_t_11)(PyObject *); + int __pyx_t_12; int __pyx_t_13; char const *__pyx_t_14; PyObject *__pyx_t_15 = NULL; @@ -11929,7 +14757,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_bytecode_while_frame_eval_39", 0); + __Pyx_RefNannySetupContext("get_bytecode_while_frame_eval_39", 1); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":628 * where programmatic breakpoints are added. @@ -11942,17 +14770,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = (__pyx_t_3 != 0); - if (!__pyx_t_4) { + if (!__pyx_t_3) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 628, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = (__pyx_t_2 == Py_None); + __pyx_t_3 = (__pyx_t_2 == Py_None); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = (__pyx_t_4 != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; @@ -12064,10 +14890,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec { __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_5); __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); /*try:*/ { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":646 @@ -12079,12 +14905,12 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 646, __pyx_L7_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 646, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 646, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo))))) __PYX_ERR(0, 646, __pyx_L7_error) - __pyx_v_thread_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_8); - __pyx_t_8 = 0; + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo))))) __PYX_ERR(0, 646, __pyx_L7_error) + __pyx_v_thread_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_7); + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":645 * cdef int CMD_SMART_STEP_INTO = 128 @@ -12094,13 +14920,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * except: */ } + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L12_try_end; __pyx_L7_error:; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":647 * try: @@ -12111,10 +14937,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ /*except:*/ { __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_39", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_2, &__pyx_t_9) < 0) __PYX_ERR(0, 647, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_9); + if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 647, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_8); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":648 * thread_info = _thread_local_info.thread_info @@ -12123,10 +14949,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info is None: * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) */ - __pyx_t_10 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(__pyx_v_frame_obj)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 648, __pyx_L9_except_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_10)); - __pyx_t_10 = 0; + __pyx_t_9 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_thread_info(__pyx_v_frame_obj)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 648, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_t_9)); + __pyx_t_9 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":649 * except: @@ -12136,8 +14962,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * */ __pyx_t_1 = (((PyObject *)__pyx_v_thread_info) == Py_None); - __pyx_t_3 = (__pyx_t_1 != 0); - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":650 * thread_info = get_thread_info(frame_obj) @@ -12148,8 +14973,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_r = CALL_EvalFrameDefault_39(__pyx_v_tstate, __pyx_v_frame_obj, __pyx_v_exc); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L10_except_return; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":649 @@ -12160,12 +14985,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * */ } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L8_exception_handled; } - __pyx_L9_except_error:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":645 * cdef int CMD_SMART_STEP_INTO = 128 @@ -12174,22 +14998,23 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info = _thread_local_info.thread_info * except: */ + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); goto __pyx_L1_error; __pyx_L10_except_return:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); goto __pyx_L0; __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_4); __Pyx_XGIVEREF(__pyx_t_5); __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); __pyx_L12_try_end:; } @@ -12200,8 +15025,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) * */ - __pyx_t_3 = (__pyx_v_thread_info->inside_frame_eval != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->inside_frame_eval != 0); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":653 * @@ -12229,8 +15054,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info.initialize_if_possible() * if not thread_info.fully_initialized: */ - __pyx_t_3 = ((!(__pyx_v_thread_info->fully_initialized != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->fully_initialized); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":656 * @@ -12239,9 +15064,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if not thread_info.fully_initialized: * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) */ - __pyx_t_9 = ((struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_thread_info->__pyx_vtab)->initialize_if_possible(__pyx_v_thread_info); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 656, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_8 = ((struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v_thread_info->__pyx_vtab)->initialize_if_possible(__pyx_v_thread_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 656, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":657 * if not thread_info.fully_initialized: @@ -12250,8 +15075,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) * */ - __pyx_t_3 = ((!(__pyx_v_thread_info->fully_initialized != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->fully_initialized); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":658 * thread_info.initialize_if_possible() @@ -12288,10 +15113,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info.is_pydevd_thread or additional_info.is_tracing: * # Make sure that we don't trace pydevd threads or inside our own calls. */ - __pyx_t_9 = ((PyObject *)__pyx_v_thread_info->additional_info); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_9); - __pyx_t_9 = 0; + __pyx_t_8 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_8); + __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_8); + __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":662 * # Can only get additional_info when fully initialized. @@ -12300,16 +15125,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # Make sure that we don't trace pydevd threads or inside our own calls. * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) */ - __pyx_t_1 = (__pyx_v_thread_info->is_pydevd_thread != 0); - if (!__pyx_t_1) { + if (!__pyx_v_thread_info->is_pydevd_thread) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_v_thread_info->is_pydevd_thread; goto __pyx_L20_bool_binop_done; } - __pyx_t_1 = (__pyx_v_additional_info->is_tracing != 0); - __pyx_t_3 = __pyx_t_1; + __pyx_t_3 = (__pyx_v_additional_info->is_tracing != 0); + __pyx_t_1 = __pyx_t_3; __pyx_L20_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":664 * if thread_info.is_pydevd_thread or additional_info.is_tracing: @@ -12364,11 +15188,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if main_debugger is None: * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 674, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 674, __pyx_L23_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 674, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 674, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_v_main_debugger = __pyx_t_2; __pyx_t_2 = 0; @@ -12379,8 +15203,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * return CALL_EvalFrameDefault_39(tstate, frame_obj, exc) * frame = frame_obj */ - __pyx_t_3 = (__pyx_v_main_debugger == Py_None); - __pyx_t_1 = (__pyx_t_3 != 0); + __pyx_t_1 = (__pyx_v_main_debugger == Py_None); if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":676 @@ -12422,8 +15245,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if apply_to_global: */ __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func == Py_None); - __pyx_t_3 = (__pyx_t_1 != 0); - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":680 * @@ -12432,53 +15254,30 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if apply_to_global: * thread_info.thread_trace_func = trace_func */ - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 680, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_main_debugger, __pyx_v_frame}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else #endif { - __pyx_t_10 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - if (__pyx_t_8) { - __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_11, __pyx_v_main_debugger); - __Pyx_INCREF(__pyx_v_frame); - __Pyx_GIVEREF(__pyx_v_frame); - PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_11, __pyx_v_frame); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L23_error) + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_main_debugger, __pyx_v_frame}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); @@ -12489,46 +15288,46 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { - __pyx_t_9 = PyList_GET_ITEM(sequence, 0); - __pyx_t_10 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); #else - __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 680, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 680, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; - __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 680, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext; - index = 0; __pyx_t_9 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_9)) goto __pyx_L27_unpacking_failed; + __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 680, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_9); - index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_10)) goto __pyx_L27_unpacking_failed; - __Pyx_GOTREF(__pyx_t_10); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_8), 2) < 0) __PYX_ERR(0, 680, __pyx_L23_error) - __pyx_t_12 = NULL; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_11 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_8 = __pyx_t_11(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_7 = __pyx_t_11(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L27_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_9), 2) < 0) __PYX_ERR(0, 680, __pyx_L23_error) + __pyx_t_11 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; goto __pyx_L28_unpacking_done; __pyx_L27_unpacking_failed:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_12 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_11 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 680, __pyx_L23_error) __pyx_L28_unpacking_done:; } - __pyx_v_trace_func = __pyx_t_9; - __pyx_t_9 = 0; - __pyx_v_apply_to_global = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_v_trace_func = __pyx_t_8; + __pyx_t_8 = 0; + __pyx_v_apply_to_global = __pyx_t_7; + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":681 * if thread_info.thread_trace_func is None: @@ -12537,8 +15336,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * thread_info.thread_trace_func = trace_func * */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_global); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 681, __pyx_L23_error) - if (__pyx_t_3) { + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_apply_to_global); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 681, __pyx_L23_error) + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":682 * trace_func, apply_to_global = fix_top_level_trace_and_get_trace_func(main_debugger, frame) @@ -12578,32 +15377,32 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * main_debugger.break_on_caught_exceptions or \ * main_debugger.break_on_user_uncaught_exceptions or \ */ - __pyx_t_11 = __pyx_v_additional_info->pydev_step_cmd; - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO) != 0); - if (!__pyx_t_4) { + __pyx_t_10 = __pyx_v_additional_info->pydev_step_cmd; + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO_MY_CODE) != 0); - if (!__pyx_t_4) { + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO_MY_CODE); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_STEP_INTO_COROUTINE) != 0); - if (!__pyx_t_4) { + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_STEP_INTO_COROUTINE); + if (!__pyx_t_12) { } else { - __pyx_t_1 = __pyx_t_4; + __pyx_t_3 = __pyx_t_12; goto __pyx_L33_bool_binop_done; } - __pyx_t_4 = ((__pyx_t_11 == __pyx_v_CMD_SMART_STEP_INTO) != 0); - __pyx_t_1 = __pyx_t_4; + __pyx_t_12 = (__pyx_t_10 == __pyx_v_CMD_SMART_STEP_INTO); + __pyx_t_3 = __pyx_t_12; __pyx_L33_bool_binop_done:; - __pyx_t_4 = (__pyx_t_1 != 0); - if (!__pyx_t_4) { + __pyx_t_12 = __pyx_t_3; + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -12616,11 +15415,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 685, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 685, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 685, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -12633,11 +15432,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 686, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 686, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 686, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -12650,11 +15449,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 687, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 687, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 687, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -12667,11 +15466,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_signature_factory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 688, __pyx_L23_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 688, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!__pyx_t_4) { + if (!__pyx_t_12) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_12; goto __pyx_L31_bool_binop_done; } @@ -12682,37 +15481,36 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * * # if DEBUG: */ - __pyx_t_11 = __pyx_v_additional_info->pydev_step_cmd; - __pyx_t_1 = ((__pyx_t_11 == __pyx_v_CMD_STEP_OVER) != 0); - if (!__pyx_t_1) { + __pyx_t_10 = __pyx_v_additional_info->pydev_step_cmd; + __pyx_t_3 = (__pyx_t_10 == __pyx_v_CMD_STEP_OVER); + if (!__pyx_t_3) { } else { - __pyx_t_4 = __pyx_t_1; + __pyx_t_12 = __pyx_t_3; goto __pyx_L42_bool_binop_done; } - __pyx_t_1 = ((__pyx_t_11 == __pyx_v_CMD_STEP_OVER_MY_CODE) != 0); - __pyx_t_4 = __pyx_t_1; + __pyx_t_3 = (__pyx_t_10 == __pyx_v_CMD_STEP_OVER_MY_CODE); + __pyx_t_12 = __pyx_t_3; __pyx_L42_bool_binop_done:; - __pyx_t_1 = (__pyx_t_4 != 0); - if (__pyx_t_1) { + __pyx_t_3 = __pyx_t_12; + if (__pyx_t_3) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_t_3; goto __pyx_L31_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 689, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 689, __pyx_L23_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 689, __pyx_L23_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_1) { + if (__pyx_t_3) { } else { - __pyx_t_3 = __pyx_t_1; + __pyx_t_1 = __pyx_t_3; goto __pyx_L31_bool_binop_done; } __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 689, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = (__pyx_t_2 == __pyx_v_additional_info->pydev_step_stop); + __pyx_t_3 = (__pyx_t_2 == __pyx_v_additional_info->pydev_step_stop); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = (__pyx_t_1 != 0); - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_t_3; __pyx_L31_bool_binop_done:; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":684 @@ -12722,7 +15520,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * main_debugger.break_on_caught_exceptions or \ * main_debugger.break_on_user_uncaught_exceptions or \ */ - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":693 * # if DEBUG: @@ -12731,9 +15529,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_3 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":694 * # print('get_bytecode_while_frame_eval enabled trace') @@ -12767,11 +15564,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /*else*/ { __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 696, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_10 = __pyx_t_2; - __Pyx_INCREF(__pyx_t_10); + __pyx_t_7 = __pyx_t_2; + __Pyx_INCREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 696, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 696, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L45:; @@ -12793,10 +15590,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # print('get_bytecode_while_frame_eval always skip', func_code_info.always_skip_code) */ /*else*/ { - __pyx_t_10 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_func_code_info(__pyx_v_thread_info, __pyx_v_frame_obj, __pyx_v_frame_obj->f_code)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 698, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_v_func_code_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_t_10); - __pyx_t_10 = 0; + __pyx_t_7 = ((PyObject *)__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_func_code_info(__pyx_v_thread_info, __pyx_v_frame_obj, __pyx_v_frame_obj->f_code)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 698, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_func_code_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_t_7); + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":701 * # if DEBUG: @@ -12805,8 +15602,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * * if main_debugger.has_plugin_line_breaks or main_debugger.has_plugin_exception_breaks: */ - __pyx_t_4 = ((!(__pyx_v_func_code_info->always_skip_code != 0)) != 0); - if (__pyx_t_4) { + __pyx_t_1 = (!__pyx_v_func_code_info->always_skip_code); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":703 * if not func_code_info.always_skip_code: @@ -12815,22 +15612,22 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * can_skip = main_debugger.plugin.can_skip(main_debugger, frame_obj) * */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 703, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 703, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 703, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 703, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; if (!__pyx_t_3) { } else { - __pyx_t_4 = __pyx_t_3; + __pyx_t_1 = __pyx_t_3; goto __pyx_L48_bool_binop_done; } - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 703, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 703, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_4 = __pyx_t_3; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 703, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 703, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_1 = __pyx_t_3; __pyx_L48_bool_binop_done:; - if (__pyx_t_4) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":704 * @@ -12841,57 +15638,34 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_plugin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 704, __pyx_L23_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_can_skip); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 704, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9); + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); - __pyx_t_11 = 1; + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; - __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_10); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) { - PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; - __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GOTREF(__pyx_t_10); - } else #endif { - __pyx_t_8 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_8); - if (__pyx_t_2) { - __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL; - } - __Pyx_INCREF(__pyx_v_main_debugger); - __Pyx_GIVEREF(__pyx_v_main_debugger); - PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_11, __pyx_v_main_debugger); - __Pyx_INCREF(((PyObject *)__pyx_v_frame_obj)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_frame_obj)); - PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_11, ((PyObject *)__pyx_v_frame_obj)); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_main_debugger, ((PyObject *)__pyx_v_frame_obj)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 2+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 704, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 704, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_can_skip = __pyx_t_4; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 704, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_can_skip = __pyx_t_1; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":706 * can_skip = main_debugger.plugin.can_skip(main_debugger, frame_obj) @@ -12900,8 +15674,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # if DEBUG: * # print('get_bytecode_while_frame_eval not can_skip') */ - __pyx_t_4 = ((!(__pyx_v_can_skip != 0)) != 0); - if (__pyx_t_4) { + __pyx_t_1 = (!__pyx_v_can_skip); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":709 * # if DEBUG: @@ -12910,9 +15684,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_4 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_3 = (__pyx_t_4 != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":710 * # print('get_bytecode_while_frame_eval not can_skip') @@ -12921,10 +15694,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * else: * frame.f_trace = main_debugger.trace_dispatch */ - __pyx_t_10 = __pyx_v_thread_info->thread_trace_func; - __Pyx_INCREF(__pyx_t_10); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 710, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __pyx_v_thread_info->thread_trace_func; + __Pyx_INCREF(__pyx_t_7); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 710, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":709 * # if DEBUG: @@ -12944,13 +15717,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if can_skip and func_code_info.breakpoint_found: */ /*else*/ { - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 712, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __pyx_t_10; - __Pyx_INCREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_9) < 0) __PYX_ERR(0, 712, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 712, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __pyx_t_7; + __Pyx_INCREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_8) < 0) __PYX_ERR(0, 712, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __pyx_L51:; @@ -12979,16 +15752,14 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # if DEBUG: * # print('get_bytecode_while_frame_eval new_code', func_code_info.new_code) */ - __pyx_t_4 = (__pyx_v_can_skip != 0); - if (__pyx_t_4) { + if (__pyx_v_can_skip) { } else { - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_v_can_skip; goto __pyx_L53_bool_binop_done; } - __pyx_t_4 = (__pyx_v_func_code_info->breakpoint_found != 0); - __pyx_t_3 = __pyx_t_4; + __pyx_t_1 = __pyx_v_func_code_info->breakpoint_found; __pyx_L53_bool_binop_done:; - if (__pyx_t_3) { + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":717 * # if DEBUG: @@ -12997,8 +15768,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # If breakpoints are found but new_code is None, * # this means we weren't able to actually add the code */ - __pyx_t_3 = ((!(__pyx_v_thread_info->force_stay_in_untraced_mode != 0)) != 0); - if (__pyx_t_3) { + __pyx_t_1 = (!__pyx_v_thread_info->force_stay_in_untraced_mode); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":721 * # this means we weren't able to actually add the code @@ -13007,9 +15778,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * if thread_info.thread_trace_func is not None: * frame.f_trace = thread_info.thread_trace_func */ - __pyx_t_3 = (__pyx_v_func_code_info->new_code == Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { + __pyx_t_1 = (__pyx_v_func_code_info->new_code == Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":722 * # where needed, so, fallback to tracing. @@ -13018,9 +15788,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame.f_trace = thread_info.thread_trace_func * else: */ - __pyx_t_4 = (__pyx_v_thread_info->thread_trace_func != Py_None); - __pyx_t_3 = (__pyx_t_4 != 0); - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_thread_info->thread_trace_func != Py_None); + if (__pyx_t_1) { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":723 * if func_code_info.new_code is None: @@ -13029,10 +15798,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * else: * frame.f_trace = main_debugger.trace_dispatch */ - __pyx_t_9 = __pyx_v_thread_info->thread_trace_func; - __Pyx_INCREF(__pyx_t_9); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_9) < 0) __PYX_ERR(0, 723, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_8 = __pyx_v_thread_info->thread_trace_func; + __Pyx_INCREF(__pyx_t_8); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_8) < 0) __PYX_ERR(0, 723, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":722 * # where needed, so, fallback to tracing. @@ -13052,13 +15821,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * # print('Using frame eval break for', frame_obj.f_code.co_name) */ /*else*/ { - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 725, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __pyx_t_9; - __Pyx_INCREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_10) < 0) __PYX_ERR(0, 725, __pyx_L23_error) - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_main_debugger, __pyx_n_s_trace_dispatch); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 725, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __pyx_t_8; + __Pyx_INCREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_n_s_f_trace, __pyx_t_7) < 0) __PYX_ERR(0, 725, __pyx_L23_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L57:; @@ -13080,24 +15849,31 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * old = frame_obj.f_code */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 728, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 728, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - __pyx_t_10 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, ((PyObject *)__pyx_v_frame_obj->f_globals)) : __Pyx_PyObject_CallOneArg(__pyx_t_9, ((PyObject *)__pyx_v_frame_obj->f_globals)); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 728, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_frame_obj->f_globals)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 728, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":729 * # print('Using frame eval break for', frame_obj.f_code.co_name) @@ -13106,10 +15882,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * old = frame_obj.f_code * frame_obj.f_code = func_code_info.new_code */ - __pyx_t_10 = __pyx_v_func_code_info->new_code; - __Pyx_INCREF(__pyx_t_10); - Py_INCREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_7 = __pyx_v_func_code_info->new_code; + __Pyx_INCREF(__pyx_t_7); + Py_INCREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":730 * update_globals_dict( frame_obj.f_globals) @@ -13118,10 +15894,10 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * frame_obj.f_code = func_code_info.new_code * Py_DECREF(old) */ - __pyx_t_10 = ((PyObject *)__pyx_v_frame_obj->f_code); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_old = __pyx_t_10; - __pyx_t_10 = 0; + __pyx_t_7 = ((PyObject *)__pyx_v_frame_obj->f_code); + __Pyx_INCREF(__pyx_t_7); + __pyx_v_old = __pyx_t_7; + __pyx_t_7 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":731 * Py_INCREF(func_code_info.new_code) @@ -13161,24 +15937,31 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec * finally: */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 737, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 737, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_2 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_9, function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_10 = 1; } } - __pyx_t_10 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, ((PyObject *)__pyx_v_frame_obj->f_globals)) : __Pyx_PyObject_CallOneArg(__pyx_t_9, ((PyObject *)__pyx_v_frame_obj->f_globals)); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 737, __pyx_L23_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_frame_obj->f_globals)}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 737, __pyx_L23_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __pyx_L55:; @@ -13228,20 +16011,20 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /*exception exit:*/{ __Pyx_PyThreadState_declare __Pyx_PyThreadState_assign - __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_7); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4); __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); __Pyx_XGOTREF(__pyx_t_15); __Pyx_XGOTREF(__pyx_t_16); __Pyx_XGOTREF(__pyx_t_17); - __pyx_t_11 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + __pyx_t_10 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; { /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":740 @@ -13268,12 +16051,12 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec __Pyx_XGIVEREF(__pyx_t_17); __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); } - __Pyx_XGIVEREF(__pyx_t_7); __Pyx_XGIVEREF(__pyx_t_6); __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_7, __pyx_t_6, __pyx_t_5); - __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; - __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestore(__pyx_t_6, __pyx_t_5, __pyx_t_4); + __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; goto __pyx_L1_error; } __pyx_L22_return: { @@ -13323,11 +16106,11 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_WriteUnraisable("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_39", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; + __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.get_bytecode_while_frame_eval_39", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); __Pyx_XDECREF((PyObject *)__pyx_v_additional_info); @@ -13348,70 +16131,114 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_get_bytec */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo = {"__pyx_unpickle_ThreadInfo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo = {"__pyx_unpickle_ThreadInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_ThreadInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_ThreadInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_ThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -13419,6 +16246,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_ __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_20__pyx_unpickle_ThreadInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -13430,129 +16263,116 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_20__pyx_ __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x0af4089, 0xe535b68, 0xb8148ba): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xe535b68, 0xb8148ba, 0x0af4089): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__6, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__6, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x0af4089, 0xe535b68, 0xb8148ba): + * if __pyx_checksum not in (0xe535b68, 0xb8148ba, 0x0af4089): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum * __pyx_result = ThreadInfo.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x0af4089, 0xe535b68, 0xb8148ba): + * if __pyx_checksum not in (0xe535b68, 0xb8148ba, 0x0af4089): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = ThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x0af4089, 0xe535b68, 0xb8148ba): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xe535b68, 0xb8148ba, 0x0af4089): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum * __pyx_result = ThreadInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum * __pyx_result = ThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -13562,13 +16382,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_20__pyx_ * return __pyx_result * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_ThreadInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_ThreadInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum * __pyx_result = ThreadInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) @@ -13597,9 +16417,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_20__pyx_ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_ThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -13626,14 +16445,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -13659,8 +16477,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->additional_info); - __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->additional_info)); + __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->additional_info); __pyx_v___pyx_result->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); __pyx_t_1 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { @@ -13721,16 +16539,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(1, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 7) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 7); if (__pyx_t_5) { } else { __pyx_t_2 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_2 = __pyx_t_6; + __pyx_t_2 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -13739,33 +16556,40 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[7]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_3 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_3 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_3, 1+__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -13789,9 +16613,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_ThreadInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -13807,70 +16631,114 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo = {"__pyx_unpickle_FuncCodeInfo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo = {"__pyx_unpickle_FuncCodeInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_FuncCodeInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_FuncCodeInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_FuncCodeInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -13878,6 +16746,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_ __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_22__pyx_unpickle_FuncCodeInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -13889,129 +16763,116 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_22__pyx_ __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xb3ee05d, 0x450d2d6, 0x956dcaa): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x450d2d6, 0x956dcaa, 0xb3ee05d): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__7, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__7, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0xb3ee05d, 0x450d2d6, 0x956dcaa): + * if __pyx_checksum not in (0x450d2d6, 0x956dcaa, 0xb3ee05d): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum * __pyx_result = FuncCodeInfo.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0xb3ee05d, 0x450d2d6, 0x956dcaa): + * if __pyx_checksum not in (0x450d2d6, 0x956dcaa, 0xb3ee05d): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = FuncCodeInfo.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0xb3ee05d, 0x450d2d6, 0x956dcaa): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x450d2d6, 0x956dcaa, 0xb3ee05d): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum * __pyx_result = FuncCodeInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum * __pyx_result = FuncCodeInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -14021,13 +16882,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_22__pyx_ * return __pyx_result * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_FuncCodeInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle_FuncCodeInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb3ee05d, 0x450d2d6, 0x956dcaa) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x450d2d6, 0x956dcaa, 0xb3ee05d) = (always_skip_code, breakpoint_found, breakpoints_mtime, canonical_normalized_filename, co_filename, co_name, new_code))" % __pyx_checksum * __pyx_result = FuncCodeInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) @@ -14056,9 +16917,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_22__pyx_ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_FuncCodeInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -14085,14 +16945,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -14134,7 +16993,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->canonical_normalized_filename); __Pyx_DECREF(__pyx_v___pyx_result->canonical_normalized_filename); @@ -14146,7 +17005,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->co_filename); __Pyx_DECREF(__pyx_v___pyx_result->co_filename); @@ -14158,7 +17017,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->co_name); __Pyx_DECREF(__pyx_v___pyx_result->co_name); @@ -14186,16 +17045,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(1, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 7) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 7); if (__pyx_t_5) { } else { __pyx_t_2 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_2 = __pyx_t_6; + __pyx_t_2 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -14204,33 +17062,40 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[7]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_3 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_3 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_3, 1+__pyx_t_3); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -14254,9 +17119,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle_FuncCodeInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -14272,70 +17137,114 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo = {"__pyx_unpickle__CodeLineInfo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo = {"__pyx_unpickle__CodeLineInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle__CodeLineInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CodeLineInfo", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CodeLineInfo", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle__CodeLineInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle__CodeLineInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CodeLineInfo", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CodeLineInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CodeLineInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -14343,6 +17252,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_ __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_24__pyx_unpickle__CodeLineInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -14354,129 +17269,116 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_24__pyx_ __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__CodeLineInfo", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__CodeLineInfo", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3fbbd02, 0x5a9bcd5, 0x0267473): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x5a9bcd5, 0x0267473, 0x3fbbd02): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__8, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__8, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x3fbbd02, 0x5a9bcd5, 0x0267473): + * if __pyx_checksum not in (0x5a9bcd5, 0x0267473, 0x3fbbd02): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum * __pyx_result = _CodeLineInfo.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x3fbbd02, 0x5a9bcd5, 0x0267473): + * if __pyx_checksum not in (0x5a9bcd5, 0x0267473, 0x3fbbd02): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = _CodeLineInfo.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3fbbd02, 0x5a9bcd5, 0x0267473): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0x5a9bcd5, 0x0267473, 0x3fbbd02): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum * __pyx_result = _CodeLineInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle__CodeLineInfo__set_state(<_CodeLineInfo> __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum * __pyx_result = _CodeLineInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__CodeLineInfo__set_state(<_CodeLineInfo> __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -14486,13 +17388,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_24__pyx_ * return __pyx_result * cdef __pyx_unpickle__CodeLineInfo__set_state(_CodeLineInfo __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CodeLineInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CodeLineInfo__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3fbbd02, 0x5a9bcd5, 0x0267473) = (first_line, last_line, line_to_offset))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x5a9bcd5, 0x0267473, 0x3fbbd02) = (first_line, last_line, line_to_offset))" % __pyx_checksum * __pyx_result = _CodeLineInfo.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__CodeLineInfo__set_state(<_CodeLineInfo> __pyx_result, __pyx_state) @@ -14521,9 +17423,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_24__pyx_ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CodeLineInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -14550,14 +17451,13 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp int __pyx_t_3; Py_ssize_t __pyx_t_4; int __pyx_t_5; - int __pyx_t_6; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__CodeLineInfo__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__CodeLineInfo__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -14590,7 +17490,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->line_to_offset); __Pyx_DECREF(__pyx_v___pyx_result->line_to_offset); @@ -14607,16 +17507,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(1, 13, __pyx_L1_error) } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 3) != 0); + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 3); if (__pyx_t_5) { } else { __pyx_t_3 = __pyx_t_5; goto __pyx_L4_bool_binop_done; } __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; + __pyx_t_3 = __pyx_t_5; __pyx_L4_bool_binop_done:; if (__pyx_t_3) { @@ -14625,33 +17524,40 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[3]) # <<<<<<<<<<<<<< */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 14, __pyx_L1_error) } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_2 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_2 = 1; } } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_2, 1+__pyx_t_2); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -14675,9 +17581,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CodeLineInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -14693,70 +17599,114 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp */ /* Python wrapper */ -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue = {"__pyx_unpickle__CacheValue", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue = {"__pyx_unpickle__CacheValue", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { PyObject *__pyx_v___pyx_type = 0; long __pyx_v___pyx_checksum; PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__pyx_unpickle__CacheValue (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); CYTHON_FALLTHROUGH; case 0: break; default: goto __pyx_L5_argtuple_error; } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CacheValue", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) else { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CacheValue", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle__CacheValue") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle__CacheValue") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + } else if (unlikely(__pyx_nargs != 3)) { goto __pyx_L5_argtuple_error; } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); } __pyx_v___pyx_type = values[0]; __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) __pyx_v___pyx_state = values[2]; } - goto __pyx_L4_argument_unpacking_done; + goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CacheValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__CacheValue", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CacheValue", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; @@ -14764,6 +17714,12 @@ static PyObject *__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_ __pyx_r = __pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_26__pyx_unpickle__CacheValue(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } __Pyx_RefNannyFinishContext(); return __pyx_r; } @@ -14775,129 +17731,116 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_26__pyx_ __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; + int __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__CacheValue", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__CacheValue", 1); /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d481b9, 0xac42a46, 0xedff7c3): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xac42a46, 0xedff7c3, 0x3d481b9): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum */ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__9, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__9, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { + if (__pyx_t_2) { /* "(tree fragment)":5 * cdef object __pyx_result - * if __pyx_checksum not in (0x3d481b9, 0xac42a46, 0xedff7c3): + * if __pyx_checksum not in (0xac42a46, 0xedff7c3, 0x3d481b9): * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum * __pyx_result = _CacheValue.__new__(__pyx_type) */ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_PickleError); __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, -1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_t_1); __pyx_v___pyx_PickleError = __pyx_t_1; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":6 - * if __pyx_checksum not in (0x3d481b9, 0xac42a46, 0xedff7c3): + * if __pyx_checksum not in (0xac42a46, 0xedff7c3, 0x3d481b9): * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum # <<<<<<<<<<<<<< * __pyx_result = _CacheValue.__new__(__pyx_type) * if __pyx_state is not None: */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __PYX_ERR(1, 6, __pyx_L1_error) /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x3d481b9, 0xac42a46, 0xedff7c3): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xac42a46, 0xedff7c3, 0x3d481b9): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum */ } /* "(tree fragment)":7 * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum * __pyx_result = _CacheValue.__new__(__pyx_type) # <<<<<<<<<<<<<< * if __pyx_state is not None: * __pyx_unpickle__CacheValue__set_state(<_CacheValue> __pyx_result, __pyx_state) */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } - __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result = __pyx_t_4; - __pyx_t_4 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum * __pyx_result = _CacheValue.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__CacheValue__set_state(<_CacheValue> __pyx_result, __pyx_state) * return __pyx_result */ - __pyx_t_3 = (__pyx_v___pyx_state != Py_None); - __pyx_t_2 = (__pyx_t_3 != 0); + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); if (__pyx_t_2) { /* "(tree fragment)":9 @@ -14907,13 +17850,13 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_26__pyx_ * return __pyx_result * cdef __pyx_unpickle__CacheValue__set_state(_CacheValue __pyx_result, tuple __pyx_state): */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_4 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CacheValue__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unpickle__CacheValue__set_state(((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x3d481b9, 0xac42a46, 0xedff7c3) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xac42a46, 0xedff7c3, 0x3d481b9) = (breakpoints_hit_at_lines, code_line_info, code_lines_as_set, code_obj_py))" % __pyx_checksum * __pyx_result = _CacheValue.__new__(__pyx_type) * if __pyx_state is not None: # <<<<<<<<<<<<<< * __pyx_unpickle__CacheValue__set_state(<_CacheValue> __pyx_result, __pyx_state) @@ -14942,9 +17885,8 @@ static PyObject *__pyx_pf_18_pydevd_frame_eval_22pydevd_frame_evaluator_26__pyx_ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CacheValue", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; @@ -14970,14 +17912,14 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp int __pyx_t_2; Py_ssize_t __pyx_t_3; int __pyx_t_4; - int __pyx_t_5; + PyObject *__pyx_t_5 = NULL; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; + int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle__CacheValue__set_state", 0); + __Pyx_RefNannySetupContext("__pyx_unpickle__CacheValue__set_state", 1); /* "(tree fragment)":12 * return __pyx_result @@ -14992,7 +17934,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->breakpoints_hit_at_lines); __Pyx_DECREF(__pyx_v___pyx_result->breakpoints_hit_at_lines); @@ -15006,8 +17948,8 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp __Pyx_GOTREF(__pyx_t_1); if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo))))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->code_line_info); - __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->code_line_info)); + __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->code_line_info); + __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->code_line_info); __pyx_v___pyx_result->code_line_info = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)__pyx_t_1); __pyx_t_1 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { @@ -15016,7 +17958,7 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp } __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v___pyx_result->code_lines_as_set); __Pyx_DECREF(__pyx_v___pyx_result->code_lines_as_set); @@ -15044,16 +17986,15 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); __PYX_ERR(1, 13, __pyx_L1_error) } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 4) != 0); + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 4); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; + __pyx_t_2 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_2) { @@ -15062,33 +18003,40 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): * __pyx_result.__dict__.update(__pyx_state[4]) # <<<<<<<<<<<<<< */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (unlikely(__pyx_v___pyx_state == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(1, 14, __pyx_L1_error) } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; } } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "(tree fragment)":13 @@ -15112,9 +18060,9 @@ static PyObject *__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator___pyx_unp goto __pyx_L0; __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); __Pyx_AddTraceback("_pydevd_frame_eval.pydevd_frame_evaluator.__pyx_unpickle__CacheValue__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; @@ -15127,12 +18075,17 @@ static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator_Thr static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)o); p->__pyx_vtab = __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo; p->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)Py_None); Py_INCREF(Py_None); @@ -15143,14 +18096,23 @@ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_Thre static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo(PyObject *o) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *p = (struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->additional_info); Py_CLEAR(p->thread_trace_func); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo(PyObject *o, visitproc v, void *a) { @@ -15260,8 +18222,8 @@ static int __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadI } static PyMethodDef __pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -15274,10 +18236,28 @@ static struct PyGetSetDef __pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_eval {(char *)"force_stay_in_untraced_mode", __pyx_getprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_force_stay_in_untraced_mode, __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_force_stay_in_untraced_mode, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {Py_tp_methods, (void *)__pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {Py_tp_getset, (void *)__pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {Py_tp_new, (void *)__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo_spec = { + "_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo", + sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo_slots, +}; +#else static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_frame_eval.pydevd_frame_evaluator.ThreadInfo", /*tp_name*/ + "_pydevd_frame_eval.pydevd_frame_evaluator.""ThreadInfo", /*tp_name*/ sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo, /*tp_dealloc*/ @@ -15320,7 +18300,9 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_Thr 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif 0, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo, /*tp_new*/ @@ -15334,28 +18316,41 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_Thr 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)o); p->co_filename = ((PyObject*)Py_None); Py_INCREF(Py_None); p->co_name = ((PyObject*)Py_None); Py_INCREF(Py_None); @@ -15367,8 +18362,10 @@ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_Func static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo(PyObject *o) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *p = (struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -15376,7 +18373,14 @@ static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncC Py_CLEAR(p->co_name); Py_CLEAR(p->canonical_normalized_filename); Py_CLEAR(p->new_code); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo(PyObject *o, visitproc v, void *a) { @@ -15478,8 +18482,8 @@ static int __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCod } static PyMethodDef __pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -15492,10 +18496,29 @@ static struct PyGetSetDef __pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_eval {(char *)"breakpoints_mtime", __pyx_getprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_breakpoints_mtime, __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_breakpoints_mtime, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {Py_tp_methods, (void *)__pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {Py_tp_getset, (void *)__pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {Py_tp_init, (void *)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo_spec = { + "_pydevd_frame_eval.pydevd_frame_evaluator.FuncCodeInfo", + sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo_slots, +}; +#else static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_frame_eval.pydevd_frame_evaluator.FuncCodeInfo", /*tp_name*/ + "_pydevd_frame_eval.pydevd_frame_evaluator.""FuncCodeInfo", /*tp_name*/ sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo, /*tp_dealloc*/ @@ -15538,7 +18561,9 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_Fun 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo, /*tp_new*/ @@ -15552,28 +18577,41 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_Fun 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)o); p->line_to_offset = ((PyObject*)Py_None); Py_INCREF(Py_None); return o; @@ -15582,13 +18620,22 @@ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__Cod static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo(PyObject *o) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *p = (struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->line_to_offset); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo(PyObject *o, visitproc v, void *a) { @@ -15651,8 +18698,8 @@ static int __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLi } static PyMethodDef __pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -15662,10 +18709,29 @@ static struct PyGetSetDef __pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_eval {(char *)"last_line", __pyx_getprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_last_line, __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_last_line, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {Py_tp_methods, (void *)__pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {Py_tp_getset, (void *)__pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {Py_tp_init, (void *)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo_spec = { + "_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo", + sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo_slots, +}; +#else static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_frame_eval.pydevd_frame_evaluator._CodeLineInfo", /*tp_name*/ + "_pydevd_frame_eval.pydevd_frame_evaluator.""_CodeLineInfo", /*tp_name*/ sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo, /*tp_dealloc*/ @@ -15708,7 +18774,9 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__Co 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo, /*tp_new*/ @@ -15722,29 +18790,42 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__Co 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static struct __pyx_vtabstruct_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue __pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *p; PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { o = (*t->tp_alloc)(t, 0); } else { o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); } if (unlikely(!o)) return 0; + #endif p = ((struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)o); p->__pyx_vtab = __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; p->code_obj_py = Py_None; Py_INCREF(Py_None); @@ -15757,8 +18838,10 @@ static PyObject *__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__Cac static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue(PyObject *o) { struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *p = (struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *)o; #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } } #endif PyObject_GC_UnTrack(o); @@ -15766,7 +18849,14 @@ static void __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__Cach Py_CLEAR(p->code_line_info); Py_CLEAR(p->breakpoints_hit_at_lines); Py_CLEAR(p->code_lines_as_set); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif } static int __pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue(PyObject *o, visitproc v, void *a) { @@ -15858,9 +18948,8 @@ static int __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheV } static PyMethodDef __pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue[] = { - {"compute_force_stay_in_untraced_mode", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode, METH_O, __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_2compute_force_stay_in_untraced_mode}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__, METH_O, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, {0, 0, 0, 0} }; @@ -15871,10 +18960,29 @@ static struct PyGetSetDef __pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_eval {(char *)"code_lines_as_set", __pyx_getprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_code_lines_as_set, __pyx_setprop_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_code_lines_as_set, (char *)0, 0}, {0, 0, 0, 0, 0} }; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {Py_tp_clear, (void *)__pyx_tp_clear_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {Py_tp_methods, (void *)__pyx_methods_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {Py_tp_getset, (void *)__pyx_getsets_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {Py_tp_init, (void *)__pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue}, + {0, 0}, +}; +static PyType_Spec __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue_spec = { + "_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue", + sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue_slots, +}; +#else static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = { PyVarObject_HEAD_INIT(0, 0) - "_pydevd_frame_eval.pydevd_frame_evaluator._CacheValue", /*tp_name*/ + "_pydevd_frame_eval.pydevd_frame_evaluator.""_CacheValue", /*tp_name*/ sizeof(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, /*tp_dealloc*/ @@ -15917,7 +19025,9 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca 0, /*tp_dict*/ 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS 0, /*tp_dictoffset*/ + #endif __pyx_pw_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, /*tp_new*/ @@ -15931,54 +19041,30 @@ static PyTypeObject __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__Ca 0, /*tp_del*/ 0, /*tp_version_tag*/ #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif #endif #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) 0, /*tp_vectorcall*/ #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + #if __PYX_NEED_TP_PRINT_SLOT == 1 0, /*tp_print*/ #endif - #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 0, /*tp_pypy_flags*/ #endif }; +#endif static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_pydevd_frame_evaluator(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_pydevd_frame_evaluator}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "pydevd_frame_evaluator", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif #ifndef CYTHON_SMALL_CODE #if defined(__clang__) #define CYTHON_SMALL_CODE @@ -15988,151 +19074,182 @@ static struct PyModuleDef __pyx_moduledef = { #define CYTHON_SMALL_CODE #endif #endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, - {&__pyx_n_s_CacheValue, __pyx_k_CacheValue, sizeof(__pyx_k_CacheValue), 0, 0, 1, 1}, - {&__pyx_n_s_CodeLineInfo, __pyx_k_CodeLineInfo, sizeof(__pyx_k_CodeLineInfo), 0, 0, 1, 1}, - {&__pyx_n_s_DebugHelper, __pyx_k_DebugHelper, sizeof(__pyx_k_DebugHelper), 0, 0, 1, 1}, - {&__pyx_n_s_FuncCodeInfo, __pyx_k_FuncCodeInfo, sizeof(__pyx_k_FuncCodeInfo), 0, 0, 1, 1}, - {&__pyx_n_s_GlobalDebuggerHolder, __pyx_k_GlobalDebuggerHolder, sizeof(__pyx_k_GlobalDebuggerHolder), 0, 0, 1, 1}, - {&__pyx_kp_s_If_a_code_object_is_cached_that, __pyx_k_If_a_code_object_is_cached_that, sizeof(__pyx_k_If_a_code_object_is_cached_that), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_k_Incompatible_checksums_0x_x_vs_0_4, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_4), 0, 0, 1, 0}, - {&__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_k_NORM_PATHS_AND_BASE_CONTAINER, sizeof(__pyx_k_NORM_PATHS_AND_BASE_CONTAINER), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_SetTrace, __pyx_k_SetTrace, sizeof(__pyx_k_SetTrace), 0, 0, 1, 1}, - {&__pyx_n_s_ThreadInfo, __pyx_k_ThreadInfo, sizeof(__pyx_k_ThreadInfo), 0, 0, 1, 1}, - {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, - {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0}, - {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0}, - {&__pyx_n_s_active, __pyx_k_active, sizeof(__pyx_k_active), 0, 0, 1, 1}, - {&__pyx_n_s_additional_info, __pyx_k_additional_info, sizeof(__pyx_k_additional_info), 0, 0, 1, 1}, - {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap, __pyx_k_bootstrap, sizeof(__pyx_k_bootstrap), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_2, __pyx_k_bootstrap_2, sizeof(__pyx_k_bootstrap_2), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_inner, __pyx_k_bootstrap_inner, sizeof(__pyx_k_bootstrap_inner), 0, 0, 1, 1}, - {&__pyx_n_s_bootstrap_inner_2, __pyx_k_bootstrap_inner_2, sizeof(__pyx_k_bootstrap_inner_2), 0, 0, 1, 1}, - {&__pyx_n_s_break_on_caught_exceptions, __pyx_k_break_on_caught_exceptions, sizeof(__pyx_k_break_on_caught_exceptions), 0, 0, 1, 1}, - {&__pyx_n_s_break_on_user_uncaught_exception, __pyx_k_break_on_user_uncaught_exception, sizeof(__pyx_k_break_on_user_uncaught_exception), 0, 0, 1, 1}, - {&__pyx_n_s_breakpoints, __pyx_k_breakpoints, sizeof(__pyx_k_breakpoints), 0, 0, 1, 1}, - {&__pyx_n_s_breakpoints_hit_at_lines, __pyx_k_breakpoints_hit_at_lines, sizeof(__pyx_k_breakpoints_hit_at_lines), 0, 0, 1, 1}, - {&__pyx_n_s_cache, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1}, - {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, - {&__pyx_n_s_call_2, __pyx_k_call_2, sizeof(__pyx_k_call_2), 0, 0, 1, 1}, - {&__pyx_n_s_can_skip, __pyx_k_can_skip, sizeof(__pyx_k_can_skip), 0, 0, 1, 1}, - {&__pyx_n_s_clear_thread_local_info, __pyx_k_clear_thread_local_info, sizeof(__pyx_k_clear_thread_local_info), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_code_line_info, __pyx_k_code_line_info, sizeof(__pyx_k_code_line_info), 0, 0, 1, 1}, - {&__pyx_n_s_code_obj, __pyx_k_code_obj, sizeof(__pyx_k_code_obj), 0, 0, 1, 1}, - {&__pyx_n_s_code_obj_py, __pyx_k_code_obj_py, sizeof(__pyx_k_code_obj_py), 0, 0, 1, 1}, - {&__pyx_n_s_compute_force_stay_in_untraced_m, __pyx_k_compute_force_stay_in_untraced_m, sizeof(__pyx_k_compute_force_stay_in_untraced_m), 0, 0, 1, 1}, - {&__pyx_n_s_current_thread, __pyx_k_current_thread, sizeof(__pyx_k_current_thread), 0, 0, 1, 1}, - {&__pyx_n_s_decref_py, __pyx_k_decref_py, sizeof(__pyx_k_decref_py), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_dis, __pyx_k_dis, sizeof(__pyx_k_dis), 0, 0, 1, 1}, - {&__pyx_n_s_dummy_trace_dispatch, __pyx_k_dummy_trace_dispatch, sizeof(__pyx_k_dummy_trace_dispatch), 0, 0, 1, 1}, - {&__pyx_n_s_dummy_tracing_holder, __pyx_k_dummy_tracing_holder, sizeof(__pyx_k_dummy_tracing_holder), 0, 0, 1, 1}, - {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, - {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, - {&__pyx_n_s_exec, __pyx_k_exec, sizeof(__pyx_k_exec), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_f_back, __pyx_k_f_back, sizeof(__pyx_k_f_back), 0, 0, 1, 1}, - {&__pyx_n_s_f_trace, __pyx_k_f_trace, sizeof(__pyx_k_f_trace), 0, 0, 1, 1}, - {&__pyx_n_s_findlinestarts, __pyx_k_findlinestarts, sizeof(__pyx_k_findlinestarts), 0, 0, 1, 1}, - {&__pyx_n_s_first_line, __pyx_k_first_line, sizeof(__pyx_k_first_line), 0, 0, 1, 1}, - {&__pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_k_fix_top_level_trace_and_get_trac, sizeof(__pyx_k_fix_top_level_trace_and_get_trac), 0, 0, 1, 1}, - {&__pyx_n_s_frame, __pyx_k_frame, sizeof(__pyx_k_frame), 0, 0, 1, 1}, - {&__pyx_n_s_frame_eval_func, __pyx_k_frame_eval_func, sizeof(__pyx_k_frame_eval_func), 0, 0, 1, 1}, - {&__pyx_n_s_function_breakpoint_name_to_brea, __pyx_k_function_breakpoint_name_to_brea, sizeof(__pyx_k_function_breakpoint_name_to_brea), 0, 0, 1, 1}, - {&__pyx_n_s_generate_code_with_breakpoints_p, __pyx_k_generate_code_with_breakpoints_p, sizeof(__pyx_k_generate_code_with_breakpoints_p), 0, 0, 1, 1}, - {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, - {&__pyx_n_s_get_abs_path_real_path_and_base, __pyx_k_get_abs_path_real_path_and_base, sizeof(__pyx_k_get_abs_path_real_path_and_base), 0, 0, 1, 1}, - {&__pyx_n_s_get_cache_file_type, __pyx_k_get_cache_file_type, sizeof(__pyx_k_get_cache_file_type), 0, 0, 1, 1}, - {&__pyx_n_s_get_cached_code_obj_info_py, __pyx_k_get_cached_code_obj_info_py, sizeof(__pyx_k_get_cached_code_obj_info_py), 0, 0, 1, 1}, - {&__pyx_n_s_get_code_line_info, __pyx_k_get_code_line_info, sizeof(__pyx_k_get_code_line_info), 0, 0, 1, 1}, - {&__pyx_n_s_get_file_type, __pyx_k_get_file_type, sizeof(__pyx_k_get_file_type), 0, 0, 1, 1}, - {&__pyx_n_s_get_func_code_info_py, __pyx_k_get_func_code_info_py, sizeof(__pyx_k_get_func_code_info_py), 0, 0, 1, 1}, - {&__pyx_n_s_get_ident, __pyx_k_get_ident, sizeof(__pyx_k_get_ident), 0, 0, 1, 1}, - {&__pyx_n_s_get_ident_2, __pyx_k_get_ident_2, sizeof(__pyx_k_get_ident_2), 0, 0, 1, 1}, - {&__pyx_n_s_get_thread_info_py, __pyx_k_get_thread_info_py, sizeof(__pyx_k_get_thread_info_py), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_s_global_dbg, __pyx_k_global_dbg, sizeof(__pyx_k_global_dbg), 0, 0, 1, 1}, - {&__pyx_n_s_has_plugin_exception_breaks, __pyx_k_has_plugin_exception_breaks, sizeof(__pyx_k_has_plugin_exception_breaks), 0, 0, 1, 1}, - {&__pyx_n_s_has_plugin_line_breaks, __pyx_k_has_plugin_line_breaks, sizeof(__pyx_k_has_plugin_line_breaks), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_insert_pydevd_breaks, __pyx_k_insert_pydevd_breaks, sizeof(__pyx_k_insert_pydevd_breaks), 0, 0, 1, 1}, - {&__pyx_n_s_intersection, __pyx_k_intersection, sizeof(__pyx_k_intersection), 0, 0, 1, 1}, - {&__pyx_n_s_is_pydev_daemon_thread, __pyx_k_is_pydev_daemon_thread, sizeof(__pyx_k_is_pydev_daemon_thread), 0, 0, 1, 1}, - {&__pyx_n_s_issuperset, __pyx_k_issuperset, sizeof(__pyx_k_issuperset), 0, 0, 1, 1}, - {&__pyx_n_s_last_line, __pyx_k_last_line, sizeof(__pyx_k_last_line), 0, 0, 1, 1}, - {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, - {&__pyx_n_s_line_to_offset, __pyx_k_line_to_offset, sizeof(__pyx_k_line_to_offset), 0, 0, 1, 1}, - {&__pyx_n_s_local, __pyx_k_local, sizeof(__pyx_k_local), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_main_2, __pyx_k_main_2, sizeof(__pyx_k_main_2), 0, 0, 1, 1}, - {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, - {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, - {&__pyx_n_s_mtime, __pyx_k_mtime, sizeof(__pyx_k_mtime), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_plugin, __pyx_k_plugin, sizeof(__pyx_k_plugin), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_k_pydev_bundle__pydev_saved_modul, sizeof(__pyx_k_pydev_bundle__pydev_saved_modul), 0, 0, 1, 1}, - {&__pyx_n_s_pydev_monkey, __pyx_k_pydev_monkey, sizeof(__pyx_k_pydev_monkey), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd, __pyx_k_pydevd, sizeof(__pyx_k_pydevd), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_additional, __pyx_k_pydevd_bundle_pydevd_additional, sizeof(__pyx_k_pydevd_bundle_pydevd_additional), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_k_pydevd_bundle_pydevd_constants, sizeof(__pyx_k_pydevd_bundle_pydevd_constants), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_k_pydevd_bundle_pydevd_trace_disp, sizeof(__pyx_k_pydevd_bundle_pydevd_trace_disp), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_file_utils, __pyx_k_pydevd_file_utils, sizeof(__pyx_k_pydevd_file_utils), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_frame_eval_pydevd_frame, __pyx_k_pydevd_frame_eval_pydevd_frame, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame), 0, 0, 1, 1}, - {&__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_k_pydevd_frame_eval_pydevd_frame_2, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame_2), 0, 0, 1, 0}, - {&__pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_k_pydevd_frame_eval_pydevd_frame_3, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame_3), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_frame_eval_pydevd_modify, __pyx_k_pydevd_frame_eval_pydevd_modify, sizeof(__pyx_k_pydevd_frame_eval_pydevd_modify), 0, 0, 1, 1}, - {&__pyx_n_s_pydevd_tracing, __pyx_k_pydevd_tracing, sizeof(__pyx_k_pydevd_tracing), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_k_pyx_unpickle_FuncCodeInfo, sizeof(__pyx_k_pyx_unpickle_FuncCodeInfo), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_k_pyx_unpickle_ThreadInfo, sizeof(__pyx_k_pyx_unpickle_ThreadInfo), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle__CacheValue, __pyx_k_pyx_unpickle__CacheValue, sizeof(__pyx_k_pyx_unpickle__CacheValue), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle__CodeLineInfo, __pyx_k_pyx_unpickle__CodeLineInfo, sizeof(__pyx_k_pyx_unpickle__CodeLineInfo), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_rfind, __pyx_k_rfind, sizeof(__pyx_k_rfind), 0, 0, 1, 1}, - {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, - {&__pyx_n_s_set_additional_thread_info_lock, __pyx_k_set_additional_thread_info_lock, sizeof(__pyx_k_set_additional_thread_info_lock), 0, 0, 1, 1}, - {&__pyx_n_s_set_trace_func, __pyx_k_set_trace_func, sizeof(__pyx_k_set_trace_func), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_show_return_values, __pyx_k_show_return_values, sizeof(__pyx_k_show_return_values), 0, 0, 1, 1}, - {&__pyx_n_s_signature_factory, __pyx_k_signature_factory, sizeof(__pyx_k_signature_factory), 0, 0, 1, 1}, - {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, - {&__pyx_n_s_stop_frame_eval, __pyx_k_stop_frame_eval, sizeof(__pyx_k_stop_frame_eval), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1}, - {&__pyx_n_s_thread_active, __pyx_k_thread_active, sizeof(__pyx_k_thread_active), 0, 0, 1, 1}, - {&__pyx_n_s_thread_info, __pyx_k_thread_info, sizeof(__pyx_k_thread_info), 0, 0, 1, 1}, - {&__pyx_n_s_thread_local_info, __pyx_k_thread_local_info, sizeof(__pyx_k_thread_local_info), 0, 0, 1, 1}, - {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1}, - {&__pyx_n_s_trace_dispatch, __pyx_k_trace_dispatch, sizeof(__pyx_k_trace_dispatch), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_update_globals_dict, __pyx_k_update_globals_dict, sizeof(__pyx_k_update_globals_dict), 0, 0, 1, 1}, - {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, + {&__pyx_n_s_CacheValue, __pyx_k_CacheValue, sizeof(__pyx_k_CacheValue), 0, 0, 1, 1}, + {&__pyx_n_s_CacheValue___reduce_cython, __pyx_k_CacheValue___reduce_cython, sizeof(__pyx_k_CacheValue___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_CacheValue___setstate_cython, __pyx_k_CacheValue___setstate_cython, sizeof(__pyx_k_CacheValue___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_CacheValue_compute_force_stay_i, __pyx_k_CacheValue_compute_force_stay_i, sizeof(__pyx_k_CacheValue_compute_force_stay_i), 0, 0, 1, 1}, + {&__pyx_n_s_CodeLineInfo, __pyx_k_CodeLineInfo, sizeof(__pyx_k_CodeLineInfo), 0, 0, 1, 1}, + {&__pyx_n_s_CodeLineInfo___reduce_cython, __pyx_k_CodeLineInfo___reduce_cython, sizeof(__pyx_k_CodeLineInfo___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_CodeLineInfo___setstate_cython, __pyx_k_CodeLineInfo___setstate_cython, sizeof(__pyx_k_CodeLineInfo___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_DebugHelper, __pyx_k_DebugHelper, sizeof(__pyx_k_DebugHelper), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo, __pyx_k_FuncCodeInfo, sizeof(__pyx_k_FuncCodeInfo), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo___reduce_cython, __pyx_k_FuncCodeInfo___reduce_cython, sizeof(__pyx_k_FuncCodeInfo___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo___setstate_cython, __pyx_k_FuncCodeInfo___setstate_cython, sizeof(__pyx_k_FuncCodeInfo___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_GlobalDebuggerHolder, __pyx_k_GlobalDebuggerHolder, sizeof(__pyx_k_GlobalDebuggerHolder), 0, 0, 1, 1}, + {&__pyx_kp_s_If_a_code_object_is_cached_that, __pyx_k_If_a_code_object_is_cached_that, sizeof(__pyx_k_If_a_code_object_is_cached_that), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_4, __pyx_k_Incompatible_checksums_0x_x_vs_0_4, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_4), 0, 0, 1, 0}, + {&__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_k_NORM_PATHS_AND_BASE_CONTAINER, sizeof(__pyx_k_NORM_PATHS_AND_BASE_CONTAINER), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_SetTrace, __pyx_k_SetTrace, sizeof(__pyx_k_SetTrace), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo, __pyx_k_ThreadInfo, sizeof(__pyx_k_ThreadInfo), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo___reduce_cython, __pyx_k_ThreadInfo___reduce_cython, sizeof(__pyx_k_ThreadInfo___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo___setstate_cython, __pyx_k_ThreadInfo___setstate_cython, sizeof(__pyx_k_ThreadInfo___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 1}, + {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, + {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0}, + {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, + {&__pyx_n_s__47, __pyx_k__47, sizeof(__pyx_k__47), 0, 0, 1, 1}, + {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0}, + {&__pyx_n_s_active, __pyx_k_active, sizeof(__pyx_k_active), 0, 0, 1, 1}, + {&__pyx_n_s_additional_info, __pyx_k_additional_info, sizeof(__pyx_k_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap, __pyx_k_bootstrap, sizeof(__pyx_k_bootstrap), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_2, __pyx_k_bootstrap_2, sizeof(__pyx_k_bootstrap_2), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner, __pyx_k_bootstrap_inner, sizeof(__pyx_k_bootstrap_inner), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner_2, __pyx_k_bootstrap_inner_2, sizeof(__pyx_k_bootstrap_inner_2), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_caught_exceptions, __pyx_k_break_on_caught_exceptions, sizeof(__pyx_k_break_on_caught_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_user_uncaught_exception, __pyx_k_break_on_user_uncaught_exception, sizeof(__pyx_k_break_on_user_uncaught_exception), 0, 0, 1, 1}, + {&__pyx_n_s_breakpoints, __pyx_k_breakpoints, sizeof(__pyx_k_breakpoints), 0, 0, 1, 1}, + {&__pyx_n_s_breakpoints_hit_at_lines, __pyx_k_breakpoints_hit_at_lines, sizeof(__pyx_k_breakpoints_hit_at_lines), 0, 0, 1, 1}, + {&__pyx_n_s_cache, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1}, + {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, + {&__pyx_n_s_call_2, __pyx_k_call_2, sizeof(__pyx_k_call_2), 0, 0, 1, 1}, + {&__pyx_n_s_can_skip, __pyx_k_can_skip, sizeof(__pyx_k_can_skip), 0, 0, 1, 1}, + {&__pyx_n_s_clear_thread_local_info, __pyx_k_clear_thread_local_info, sizeof(__pyx_k_clear_thread_local_info), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_code_line_info, __pyx_k_code_line_info, sizeof(__pyx_k_code_line_info), 0, 0, 1, 1}, + {&__pyx_n_s_code_obj, __pyx_k_code_obj, sizeof(__pyx_k_code_obj), 0, 0, 1, 1}, + {&__pyx_n_s_code_obj_py, __pyx_k_code_obj_py, sizeof(__pyx_k_code_obj_py), 0, 0, 1, 1}, + {&__pyx_n_s_compute_force_stay_in_untraced_m, __pyx_k_compute_force_stay_in_untraced_m, sizeof(__pyx_k_compute_force_stay_in_untraced_m), 0, 0, 1, 1}, + {&__pyx_n_s_current_thread, __pyx_k_current_thread, sizeof(__pyx_k_current_thread), 0, 0, 1, 1}, + {&__pyx_n_s_decref_py, __pyx_k_decref_py, sizeof(__pyx_k_decref_py), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, + {&__pyx_n_s_dis, __pyx_k_dis, sizeof(__pyx_k_dis), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_dummy_trace_dispatch, __pyx_k_dummy_trace_dispatch, sizeof(__pyx_k_dummy_trace_dispatch), 0, 0, 1, 1}, + {&__pyx_n_s_dummy_tracing_holder, __pyx_k_dummy_tracing_holder, sizeof(__pyx_k_dummy_tracing_holder), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, + {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, + {&__pyx_n_s_exec, __pyx_k_exec, sizeof(__pyx_k_exec), 0, 0, 1, 1}, + {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, + {&__pyx_n_s_f_back, __pyx_k_f_back, sizeof(__pyx_k_f_back), 0, 0, 1, 1}, + {&__pyx_n_s_f_trace, __pyx_k_f_trace, sizeof(__pyx_k_f_trace), 0, 0, 1, 1}, + {&__pyx_n_s_findlinestarts, __pyx_k_findlinestarts, sizeof(__pyx_k_findlinestarts), 0, 0, 1, 1}, + {&__pyx_n_s_first_line, __pyx_k_first_line, sizeof(__pyx_k_first_line), 0, 0, 1, 1}, + {&__pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_k_fix_top_level_trace_and_get_trac, sizeof(__pyx_k_fix_top_level_trace_and_get_trac), 0, 0, 1, 1}, + {&__pyx_n_s_frame, __pyx_k_frame, sizeof(__pyx_k_frame), 0, 0, 1, 1}, + {&__pyx_n_s_frame_eval_func, __pyx_k_frame_eval_func, sizeof(__pyx_k_frame_eval_func), 0, 0, 1, 1}, + {&__pyx_n_s_function_breakpoint_name_to_brea, __pyx_k_function_breakpoint_name_to_brea, sizeof(__pyx_k_function_breakpoint_name_to_brea), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_generate_code_with_breakpoints_p, __pyx_k_generate_code_with_breakpoints_p, sizeof(__pyx_k_generate_code_with_breakpoints_p), 0, 0, 1, 1}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_abs_path_real_path_and_base, __pyx_k_get_abs_path_real_path_and_base, sizeof(__pyx_k_get_abs_path_real_path_and_base), 0, 0, 1, 1}, + {&__pyx_n_s_get_cache_file_type, __pyx_k_get_cache_file_type, sizeof(__pyx_k_get_cache_file_type), 0, 0, 1, 1}, + {&__pyx_n_s_get_cached_code_obj_info_py, __pyx_k_get_cached_code_obj_info_py, sizeof(__pyx_k_get_cached_code_obj_info_py), 0, 0, 1, 1}, + {&__pyx_n_s_get_code_line_info, __pyx_k_get_code_line_info, sizeof(__pyx_k_get_code_line_info), 0, 0, 1, 1}, + {&__pyx_n_s_get_file_type, __pyx_k_get_file_type, sizeof(__pyx_k_get_file_type), 0, 0, 1, 1}, + {&__pyx_n_s_get_func_code_info_py, __pyx_k_get_func_code_info_py, sizeof(__pyx_k_get_func_code_info_py), 0, 0, 1, 1}, + {&__pyx_n_s_get_ident, __pyx_k_get_ident, sizeof(__pyx_k_get_ident), 0, 0, 1, 1}, + {&__pyx_n_s_get_ident_2, __pyx_k_get_ident_2, sizeof(__pyx_k_get_ident_2), 0, 0, 1, 1}, + {&__pyx_n_s_get_thread_info_py, __pyx_k_get_thread_info_py, sizeof(__pyx_k_get_thread_info_py), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_global_dbg, __pyx_k_global_dbg, sizeof(__pyx_k_global_dbg), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_exception_breaks, __pyx_k_has_plugin_exception_breaks, sizeof(__pyx_k_has_plugin_exception_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_line_breaks, __pyx_k_has_plugin_line_breaks, sizeof(__pyx_k_has_plugin_line_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_insert_pydevd_breaks, __pyx_k_insert_pydevd_breaks, sizeof(__pyx_k_insert_pydevd_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_intersection, __pyx_k_intersection, sizeof(__pyx_k_intersection), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_pydev_daemon_thread, __pyx_k_is_pydev_daemon_thread, sizeof(__pyx_k_is_pydev_daemon_thread), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_issuperset, __pyx_k_issuperset, sizeof(__pyx_k_issuperset), 0, 0, 1, 1}, + {&__pyx_n_s_last_line, __pyx_k_last_line, sizeof(__pyx_k_last_line), 0, 0, 1, 1}, + {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, + {&__pyx_n_s_line_to_offset, __pyx_k_line_to_offset, sizeof(__pyx_k_line_to_offset), 0, 0, 1, 1}, + {&__pyx_n_s_local, __pyx_k_local, sizeof(__pyx_k_local), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_main_2, __pyx_k_main_2, sizeof(__pyx_k_main_2), 0, 0, 1, 1}, + {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, + {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, + {&__pyx_n_s_mtime, __pyx_k_mtime, sizeof(__pyx_k_mtime), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_plugin, __pyx_k_plugin, sizeof(__pyx_k_plugin), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_k_pydev_bundle__pydev_saved_modul, sizeof(__pyx_k_pydev_bundle__pydev_saved_modul), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_monkey, __pyx_k_pydev_monkey, sizeof(__pyx_k_pydev_monkey), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd, __pyx_k_pydevd, sizeof(__pyx_k_pydevd), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_additional, __pyx_k_pydevd_bundle_pydevd_additional, sizeof(__pyx_k_pydevd_bundle_pydevd_additional), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_k_pydevd_bundle_pydevd_constants, sizeof(__pyx_k_pydevd_bundle_pydevd_constants), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_k_pydevd_bundle_pydevd_trace_disp, sizeof(__pyx_k_pydevd_bundle_pydevd_trace_disp), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_file_utils, __pyx_k_pydevd_file_utils, sizeof(__pyx_k_pydevd_file_utils), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_frame_eval_pydevd_frame, __pyx_k_pydevd_frame_eval_pydevd_frame, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_k_pydevd_frame_eval_pydevd_frame_2, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame_2), 0, 0, 1, 0}, + {&__pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_k_pydevd_frame_eval_pydevd_frame_3, sizeof(__pyx_k_pydevd_frame_eval_pydevd_frame_3), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_frame_eval_pydevd_modify, __pyx_k_pydevd_frame_eval_pydevd_modify, sizeof(__pyx_k_pydevd_frame_eval_pydevd_modify), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_tracing, __pyx_k_pydevd_tracing, sizeof(__pyx_k_pydevd_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_k_pyx_unpickle_FuncCodeInfo, sizeof(__pyx_k_pyx_unpickle_FuncCodeInfo), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_k_pyx_unpickle_ThreadInfo, sizeof(__pyx_k_pyx_unpickle_ThreadInfo), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle__CacheValue, __pyx_k_pyx_unpickle__CacheValue, sizeof(__pyx_k_pyx_unpickle__CacheValue), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle__CodeLineInfo, __pyx_k_pyx_unpickle__CodeLineInfo, sizeof(__pyx_k_pyx_unpickle__CodeLineInfo), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1}, + {&__pyx_n_s_rfind, __pyx_k_rfind, sizeof(__pyx_k_rfind), 0, 0, 1, 1}, + {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_set_additional_thread_info_lock, __pyx_k_set_additional_thread_info_lock, sizeof(__pyx_k_set_additional_thread_info_lock), 0, 0, 1, 1}, + {&__pyx_n_s_set_trace_func, __pyx_k_set_trace_func, sizeof(__pyx_k_set_trace_func), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_show_return_values, __pyx_k_show_return_values, sizeof(__pyx_k_show_return_values), 0, 0, 1, 1}, + {&__pyx_n_s_signature_factory, __pyx_k_signature_factory, sizeof(__pyx_k_signature_factory), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_stop_frame_eval, __pyx_k_stop_frame_eval, sizeof(__pyx_k_stop_frame_eval), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1}, + {&__pyx_n_s_thread_active, __pyx_k_thread_active, sizeof(__pyx_k_thread_active), 0, 0, 1, 1}, + {&__pyx_n_s_thread_info, __pyx_k_thread_info, sizeof(__pyx_k_thread_info), 0, 0, 1, 1}, + {&__pyx_n_s_thread_local_info, __pyx_k_thread_local_info, sizeof(__pyx_k_thread_local_info), 0, 0, 1, 1}, + {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1}, + {&__pyx_n_s_trace_dispatch, __pyx_k_trace_dispatch, sizeof(__pyx_k_trace_dispatch), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_update_globals_dict, __pyx_k_update_globals_dict, sizeof(__pyx_k_update_globals_dict), 0, 0, 1, 1}, + {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(0, 42, __pyx_L1_error) __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 110, __pyx_L1_error) __pyx_builtin_min = __Pyx_GetBuiltinName(__pyx_n_s_min); if (!__pyx_builtin_min) __PYX_ERR(0, 341, __pyx_L1_error) __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 342, __pyx_L1_error) @@ -16140,6 +19257,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { __pyx_L1_error:; return -1; } +/* #### Code section: cached_constants ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations @@ -16159,20 +19277,20 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "(tree fragment)":4 * cdef object __pyx_PickleError * cdef object __pyx_result - * if __pyx_checksum not in (0x0af4089, 0xe535b68, 0xb8148ba): # <<<<<<<<<<<<<< + * if __pyx_checksum not in (0xe535b68, 0xb8148ba, 0x0af4089): # <<<<<<<<<<<<<< * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0x0af4089, 0xe535b68, 0xb8148ba) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum) + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xe535b68, 0xb8148ba, 0x0af4089) = (_can_create_dummy_thread, additional_info, force_stay_in_untraced_mode, fully_initialized, inside_frame_eval, is_pydevd_thread, thread_trace_func))" % __pyx_checksum */ - __pyx_tuple__6 = PyTuple_Pack(3, __pyx_int_11485321, __pyx_int_240343912, __pyx_int_193022138); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_tuple__6 = PyTuple_Pack(3, __pyx_int_240343912, __pyx_int_193022138, __pyx_int_11485321); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6); - __pyx_tuple__7 = PyTuple_Pack(3, __pyx_int_188670045, __pyx_int_72405718, __pyx_int_156687530); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_tuple__7 = PyTuple_Pack(3, __pyx_int_72405718, __pyx_int_156687530, __pyx_int_188670045); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__7); __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_tuple__8 = PyTuple_Pack(3, __pyx_int_66829570, __pyx_int_95010005, __pyx_int_2520179); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_tuple__8 = PyTuple_Pack(3, __pyx_int_95010005, __pyx_int_2520179, __pyx_int_66829570); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__8); __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_tuple__9 = PyTuple_Pack(3, __pyx_int_64258489, __pyx_int_180628038, __pyx_int_249558979); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_tuple__9 = PyTuple_Pack(3, __pyx_int_180628038, __pyx_int_249558979, __pyx_int_64258489); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 4, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9); @@ -16183,7 +19301,43 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * global _thread_local_info * _thread_local_info = threading.local() */ - __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_clear_thread_local_info, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 19, __pyx_L1_error) + __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_clear_thread_local_info, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) __PYX_ERR(0, 19, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(1, 16, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(1, 16, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":152 * @@ -16192,10 +19346,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * if event == 'call': * if frame.f_trace is not None: */ - __pyx_tuple__11 = PyTuple_Pack(3, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_dummy_trace_dispatch, 152, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 152, __pyx_L1_error) + __pyx_tuple__18 = PyTuple_Pack(3, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_dummy_trace_dispatch, 152, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 152, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":159 * @@ -16204,7 +19358,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * return get_thread_info(PyEval_GetFrame()) * */ - __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_thread_info_py, 159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 159, __pyx_L1_error) + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_thread_info_py, 159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 159, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":196 * @@ -16213,10 +19367,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * ''' * Helper to be called from Python. */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 196, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_decref_py, 196, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_tuple__21 = PyTuple_Pack(1, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_decref_py, 196, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 196, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":203 * @@ -16225,10 +19379,25 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * ''' * Helper to be called from Python. */ - __pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_s_thread_info, __pyx_n_s_frame, __pyx_n_s_code_obj); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_func_code_info_py, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 203, __pyx_L1_error) + __pyx_tuple__23 = PyTuple_Pack(3, __pyx_n_s_thread_info, __pyx_n_s_frame, __pyx_n_s_code_obj); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_func_code_info_py, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 203, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) + */ + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(1, 16, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":329 * @@ -16237,10 +19406,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * line_to_offset: dict = {} * first_line: int = None */ - __pyx_tuple__18 = PyTuple_Pack(6, __pyx_n_s_code_obj, __pyx_n_s_line_to_offset, __pyx_n_s_first_line, __pyx_n_s_last_line, __pyx_n_s_offset, __pyx_n_s_line); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_code_line_info, 329, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 329, __pyx_L1_error) + __pyx_tuple__27 = PyTuple_Pack(6, __pyx_n_s_code_obj, __pyx_n_s_line_to_offset, __pyx_n_s_first_line, __pyx_n_s_last_line, __pyx_n_s_offset, __pyx_n_s_line); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_code_line_info, 329, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 329, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":353 * _cache: dict = {} @@ -16249,10 +19418,37 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * ''' * :return _CacheValue: */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_n_s_code_obj_py); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 353, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_cached_code_obj_info_py, 353, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 353, __pyx_L1_error) + __pyx_tuple__29 = PyTuple_Pack(1, __pyx_n_s_code_obj_py); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 353, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_get_cached_code_obj_info_py, 353, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 353, __pyx_L1_error) + + /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":379 + * self.code_lines_as_set = set(code_line_info.line_to_offset) + * + * cpdef compute_force_stay_in_untraced_mode(self, breakpoints): # <<<<<<<<<<<<<< + * ''' + * :param breakpoints: + */ + __pyx_tuple__31 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_breakpoints); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_compute_force_stay_in_untraced_m, 379, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 379, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) + */ + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(1, 16, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":401 * return breakpoint_found, force_stay_in_untraced_mode @@ -16261,10 +19457,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * return generate_code_with_breakpoints(code_obj_py, breakpoints) * */ - __pyx_tuple__22 = PyTuple_Pack(2, __pyx_n_s_code_obj_py, __pyx_n_s_breakpoints); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 401, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_generate_code_with_breakpoints_p, 401, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 401, __pyx_L1_error) + __pyx_tuple__35 = PyTuple_Pack(2, __pyx_n_s_code_obj_py, __pyx_n_s_breakpoints); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_generate_code_with_breakpoints_p, 401, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 401, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":473 * import sys @@ -16273,12 +19469,12 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * * def frame_eval_func(): */ - __pyx_slice__24 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__24)) __PYX_ERR(0, 473, __pyx_L1_error) - __Pyx_GOTREF(__pyx_slice__24); - __Pyx_GIVEREF(__pyx_slice__24); - __pyx_tuple__25 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_9); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 473, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_slice__37 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__37)) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__37); + __Pyx_GIVEREF(__pyx_slice__37); + __pyx_tuple__38 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_9); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":475 * cdef bint IS_PY_39_OWNARDS = sys.version_info[:2] >= (3, 9) @@ -16287,10 +19483,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * cdef PyThreadState *state = PyThreadState_Get() * if IS_PY_39_OWNARDS: */ - __pyx_tuple__26 = PyTuple_Pack(1, __pyx_n_s_state); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_frame_eval_func, 475, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 475, __pyx_L1_error) + __pyx_tuple__39 = PyTuple_Pack(1, __pyx_n_s_state); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_frame_eval_func, 475, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 475, __pyx_L1_error) /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":484 * @@ -16299,41 +19495,30 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * cdef PyThreadState *state = PyThreadState_Get() * state.interp.eval_frame = _PyEval_EvalFrameDefault */ - __pyx_tuple__28 = PyTuple_Pack(1, __pyx_n_s_state); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 484, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_GIVEREF(__pyx_tuple__28); - __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_stop_frame_eval, 484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 484, __pyx_L1_error) + __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_frame_eval_pydevd_frame_2, __pyx_n_s_stop_frame_eval, 484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(0, 484, __pyx_L1_error) /* "(tree fragment)":1 * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_tuple__30 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__30); - __Pyx_GIVEREF(__pyx_tuple__30); - __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_ThreadInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__32 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_FuncCodeInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__34 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); - __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__CodeLineInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__CacheValue, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__42 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_ThreadInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_FuncCodeInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__CodeLineInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__CacheValue, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; __Pyx_RefNannyFinishContext(); return -1; } +/* #### Code section: init_constants ### */ -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) @@ -16355,6 +19540,19 @@ static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { __pyx_L1_error:; return -1; } +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + if (likely(__Pyx_init_assertions_enabled() == 0)); else + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ @@ -16398,60 +19596,118 @@ static int __Pyx_modinit_type_init_code(void) { __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo = &__pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo; __pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.initialize = (PyObject *(*)(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *, PyFrameObject *))__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_initialize; __pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.initialize_if_possible = (PyObject *(*)(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo *))__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_initialize_if_possible; - if (PyType_Ready(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.tp_dictoffset && __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo.tp_dict, __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ThreadInfo, (PyObject *)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo_spec, NULL); if (unlikely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo)) __PYX_ERR(0, 24, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo_spec, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #else __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo = &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo; - if (PyType_Ready(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo.tp_dictoffset && __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo->tp_dictoffset && __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FuncCodeInfo, (PyObject *)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + #endif + if (__Pyx_SetVtable(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo, __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ThreadInfo, (PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo) < 0) __PYX_ERR(0, 24, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo_spec, NULL); if (unlikely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo)) __PYX_ERR(0, 125, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo_spec, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + #else __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo = &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo; - if (PyType_Ready(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo.tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo.tp_dictoffset && __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo->tp_dictoffset && __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CodeLineInfo, (PyObject *)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FuncCodeInfo, (PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo) < 0) __PYX_ERR(0, 125, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo_spec, NULL); if (unlikely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo)) __PYX_ERR(0, 316, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo_spec, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + #else __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo = &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo->tp_dictoffset && __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CodeLineInfo, (PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + #endif __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = &__pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; __pyx_vtable_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.compute_force_stay_in_untraced_mode = (PyObject *(*)(struct __pyx_obj_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue *, PyObject *, int __pyx_skip_dispatch))__pyx_f_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_compute_force_stay_in_untraced_mode; - if (PyType_Ready(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.tp_print = 0; + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue_spec, NULL); if (unlikely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue)) __PYX_ERR(0, 361, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue_spec, __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #else + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue->tp_print = 0; #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.tp_dictoffset && __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.tp_getattro = __Pyx_PyObject_GenericGetAttr; + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue->tp_dictoffset && __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue->tp_getattro = __Pyx_PyObject_GenericGetAttr; } + #endif #if CYTHON_UPDATE_DESCRIPTOR_DOC { - PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 361, __pyx_L1_error) - if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) { + PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 361, __pyx_L1_error) + if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) { __pyx_wrapperbase_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__ = *((PyWrapperDescrObject *)wrapper)->d_base; __pyx_wrapperbase_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__.doc = __pyx_doc_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__; ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue___init__; } } #endif - if (__Pyx_SetVtable(__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue.tp_dict, __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CacheValue, (PyObject *)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) - __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue = &__pyx_type_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue; + if (__Pyx_SetVtable(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, __pyx_vtabptr_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CacheValue, (PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + #endif __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -16469,8 +19725,8 @@ static int __Pyx_modinit_type_import_code(void) { /*--- Type import code ---*/ __pyx_t_1 = PyImport_ImportModule("_pydevd_bundle.pydevd_cython"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = __Pyx_ImportType(__pyx_t_1, "_pydevd_bundle.pydevd_cython", "PyDBAdditionalThreadInfo", sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = __Pyx_ImportType_3_0_10(__pyx_t_1, "_pydevd_bundle.pydevd_cython", "PyDBAdditionalThreadInfo", sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), __PYX_GET_STRUCT_ALIGNMENT_3_0_10(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo),__Pyx_ImportType_CheckSize_Warn_3_0_10); if (!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = (struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo*)__Pyx_GetVtable(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); if (unlikely(!__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)) __PYX_ERR(2, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_RefNannyFinishContext(); return 0; @@ -16497,6 +19753,55 @@ static int __Pyx_modinit_function_import_code(void) { } +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_pydevd_frame_evaluator(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_pydevd_frame_evaluator}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "pydevd_frame_evaluator", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + #ifndef CYTHON_NO_PYINIT_EXPORT #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC #elif PY_MAJOR_VERSION < 3 @@ -16547,12 +19852,21 @@ static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { } return 0; } -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ PyObject *value = PyObject_GetAttrString(spec, from_name); int result = 0; if (likely(value)) { if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else result = PyDict_SetItemString(moddict, to_name, value); +#endif } Py_DECREF(value); } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { @@ -16562,8 +19876,9 @@ static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject } return result; } -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); if (__Pyx_check_single_interpreter()) return NULL; if (__pyx_m) @@ -16573,8 +19888,12 @@ static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNU module = PyModule_NewObject(modname); Py_DECREF(modname); if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else moddict = PyModule_GetDict(module); if (unlikely(!moddict)) goto bad; +#endif if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; @@ -16590,9 +19909,14 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_pydevd_frame_evaluator(PyObject *_ #endif #endif { + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; @@ -16606,6 +19930,33 @@ static CYTHON_SMALL_CODE int __pyx_pymod_exec_pydevd_frame_evaluator(PyObject *_ #elif PY_MAJOR_VERSION >= 3 if (__pyx_m) return __Pyx_NewRef(__pyx_m); #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("pydevd_frame_evaluator", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "pydevd_frame_evaluator" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if CYTHON_REFNANNY __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); if (!__Pyx_RefNanny) { @@ -16616,7 +19967,7 @@ if (!__Pyx_RefNanny) { } #endif __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_pydevd_frame_evaluator(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pxy_PyFrame_Initialize_Offsets __Pxy_PyFrame_Initialize_Offsets(); #endif @@ -16624,48 +19975,31 @@ if (!__Pyx_RefNanny) { __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) #endif /*--- Library function declarations ---*/ /*--- Threads initialization code ---*/ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS PyEval_InitThreads(); #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("pydevd_frame_evaluator", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) @@ -16677,7 +20011,7 @@ if (!__Pyx_RefNanny) { { PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) if (!PyDict_GetItemString(modules, "_pydevd_frame_eval.pydevd_frame_evaluator")) { - if (unlikely(PyDict_SetItemString(modules, "_pydevd_frame_eval.pydevd_frame_evaluator", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((PyDict_SetItemString(modules, "_pydevd_frame_eval.pydevd_frame_evaluator", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) } } #endif @@ -16689,8 +20023,8 @@ if (!__Pyx_RefNanny) { (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) (void)__Pyx_modinit_variable_import_code(); (void)__Pyx_modinit_function_import_code(); /*--- Execution code ---*/ @@ -16704,26 +20038,26 @@ if (!__Pyx_RefNanny) { * from _pydevd_bundle.pydevd_constants import GlobalDebuggerHolder * import dis */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_threading); __Pyx_GIVEREF(__pyx_n_s_threading); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_threading); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_threading)) __PYX_ERR(0, 2, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_thread); __Pyx_GIVEREF(__pyx_n_s_thread); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_thread); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_thread)) __PYX_ERR(0, 2, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_thread); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread, __pyx_t_1) < 0) __PYX_ERR(0, 2, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_thread); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread, __pyx_t_2) < 0) __PYX_ERR(0, 2, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":3 * from __future__ import print_function @@ -16732,19 +20066,19 @@ if (!__Pyx_RefNanny) { * import dis * import sys */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_GlobalDebuggerHolder); __Pyx_GIVEREF(__pyx_n_s_GlobalDebuggerHolder); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_GlobalDebuggerHolder); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_GlobalDebuggerHolder)) __PYX_ERR(0, 3, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_GlobalDebuggerHolder, __pyx_t_2) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_GlobalDebuggerHolder, __pyx_t_3) < 0) __PYX_ERR(0, 3, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":4 * from _pydev_bundle._pydev_saved_modules import threading, thread @@ -16753,10 +20087,10 @@ if (!__Pyx_RefNanny) { * import sys * from _pydevd_frame_eval.pydevd_frame_tracing import update_globals_dict, dummy_tracing_holder */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_dis, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dis, __pyx_t_1) < 0) __PYX_ERR(0, 4, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_dis, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dis, __pyx_t_2) < 0) __PYX_ERR(0, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":5 * from _pydevd_bundle.pydevd_constants import GlobalDebuggerHolder @@ -16765,10 +20099,10 @@ if (!__Pyx_RefNanny) { * from _pydevd_frame_eval.pydevd_frame_tracing import update_globals_dict, dummy_tracing_holder * from _pydevd_frame_eval.pydevd_modify_bytecode import DebugHelper, insert_pydevd_breaks */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":6 * import dis @@ -16777,26 +20111,26 @@ if (!__Pyx_RefNanny) { * from _pydevd_frame_eval.pydevd_modify_bytecode import DebugHelper, insert_pydevd_breaks * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_update_globals_dict); __Pyx_GIVEREF(__pyx_n_s_update_globals_dict); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_update_globals_dict); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_update_globals_dict)) __PYX_ERR(0, 6, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_dummy_tracing_holder); __Pyx_GIVEREF(__pyx_n_s_dummy_tracing_holder); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_dummy_tracing_holder); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_frame_eval_pydevd_frame, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_dummy_tracing_holder)) __PYX_ERR(0, 6, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_frame_eval_pydevd_frame, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_update_globals_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_globals_dict, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_dummy_tracing_holder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dummy_tracing_holder, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_globals_dict, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_dummy_tracing_holder); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dummy_tracing_holder, __pyx_t_2) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":7 * import sys @@ -16805,26 +20139,26 @@ if (!__Pyx_RefNanny) { * from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER * from _pydevd_bundle.pydevd_trace_dispatch import fix_top_level_trace_and_get_trace_func */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_DebugHelper); __Pyx_GIVEREF(__pyx_n_s_DebugHelper); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_DebugHelper); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_DebugHelper)) __PYX_ERR(0, 7, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_insert_pydevd_breaks); __Pyx_GIVEREF(__pyx_n_s_insert_pydevd_breaks); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_insert_pydevd_breaks); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_frame_eval_pydevd_modify, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_DebugHelper); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_insert_pydevd_breaks)) __PYX_ERR(0, 7, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_frame_eval_pydevd_modify, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DebugHelper, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_DebugHelper); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DebugHelper, __pyx_t_3) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_insert_pydevd_breaks); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_insert_pydevd_breaks, __pyx_t_3) < 0) __PYX_ERR(0, 7, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_insert_pydevd_breaks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_insert_pydevd_breaks, __pyx_t_2) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":8 * from _pydevd_frame_eval.pydevd_frame_tracing import update_globals_dict, dummy_tracing_holder @@ -16833,26 +20167,26 @@ if (!__Pyx_RefNanny) { * from _pydevd_bundle.pydevd_trace_dispatch import fix_top_level_trace_and_get_trace_func * */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_get_abs_path_real_path_and_base); __Pyx_GIVEREF(__pyx_n_s_get_abs_path_real_path_and_base); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_abs_path_real_path_and_base); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_abs_path_real_path_and_base)) __PYX_ERR(0, 8, __pyx_L1_error); __Pyx_INCREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); __Pyx_GIVEREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER)) __PYX_ERR(0, 8, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_t_2) < 0) __PYX_ERR(0, 8, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":9 * from _pydevd_frame_eval.pydevd_modify_bytecode import DebugHelper, insert_pydevd_breaks @@ -16861,19 +20195,19 @@ if (!__Pyx_RefNanny) { * * from _pydevd_bundle.pydevd_additional_thread_info import _set_additional_thread_info_lock */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_fix_top_level_trace_and_get_trac); __Pyx_GIVEREF(__pyx_n_s_fix_top_level_trace_and_get_trac); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_fix_top_level_trace_and_get_trac); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_fix_top_level_trace_and_get_trac)) __PYX_ERR(0, 9, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_t_2) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_fix_top_level_trace_and_get_trac); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fix_top_level_trace_and_get_trac, __pyx_t_3) < 0) __PYX_ERR(0, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":11 * from _pydevd_bundle.pydevd_trace_dispatch import fix_top_level_trace_and_get_trace_func @@ -16882,19 +20216,19 @@ if (!__Pyx_RefNanny) { * from _pydevd_bundle.pydevd_cython cimport PyDBAdditionalThreadInfo * from pydevd_tracing import SetTrace */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_set_additional_thread_info_lock); __Pyx_GIVEREF(__pyx_n_s_set_additional_thread_info_lock); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_set_additional_thread_info_lock); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_additional, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_set_additional_thread_info_lock)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_additional, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_set_additional_thread_info_lock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_set_additional_thread_info_lock); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info_lock, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_additional_thread_info_lock, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":13 * from _pydevd_bundle.pydevd_additional_thread_info import _set_additional_thread_info_lock @@ -16903,19 +20237,19 @@ if (!__Pyx_RefNanny) { * * _get_ident = threading.get_ident # Note this is py3 only, if py2 needed to be supported, _get_ident would be needed. */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_n_s_SetTrace); __Pyx_GIVEREF(__pyx_n_s_SetTrace); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_SetTrace); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_pydevd_tracing, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_SetTrace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_SetTrace)) __PYX_ERR(0, 13, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_tracing, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_SetTrace, __pyx_t_2) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_SetTrace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SetTrace, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":15 * from pydevd_tracing import SetTrace @@ -16924,13 +20258,13 @@ if (!__Pyx_RefNanny) { * _thread_local_info = threading.local() * _thread_active = threading._active */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get_ident_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ident, __pyx_t_2) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_ident_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ident, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":16 * @@ -16939,16 +20273,16 @@ if (!__Pyx_RefNanny) { * _thread_active = threading._active * */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_local); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_local); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_local_info, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_local_info, __pyx_t_3) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":17 * _get_ident = threading.get_ident # Note this is py3 only, if py2 needed to be supported, _get_ident would be needed. @@ -16957,13 +20291,13 @@ if (!__Pyx_RefNanny) { * * def clear_thread_local_info(): */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_active); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_active); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_active, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_active, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":19 * _thread_active = threading._active @@ -16972,10 +20306,56 @@ if (!__Pyx_RefNanny) { * global _thread_local_info * _thread_local_info = threading.local() */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_clear_thread_local_info, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_1clear_thread_local_info, 0, __pyx_n_s_clear_thread_local_info, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_clear_thread_local_info, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadInfo___reduce_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xe535b68, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_10ThreadInfo_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadInfo___setstate_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_ThreadInfo); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FuncCodeInfo___reduce_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x450d2d6, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_12FuncCodeInfo_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FuncCodeInfo___setstate_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator_FuncCodeInfo); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":152 * @@ -16984,10 +20364,10 @@ if (!__Pyx_RefNanny) { * if event == 'call': * if frame.f_trace is not None: */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dummy_trace_dispatch, __pyx_t_1) < 0) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_3dummy_trace_dispatch, 0, __pyx_n_s_dummy_trace_dispatch, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dummy_trace_dispatch, __pyx_t_2) < 0) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":159 * @@ -16996,10 +20376,15 @@ if (!__Pyx_RefNanny) { * return get_thread_info(PyEval_GetFrame()) * */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_thread_info_py, __pyx_t_1) < 0) __PYX_ERR(0, 159, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_ThreadInfo) < 0) __PYX_ERR(0, 159, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_5get_thread_info_py, 0, __pyx_n_s_get_thread_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_thread_info_py, __pyx_t_3) < 0) __PYX_ERR(0, 159, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":196 * @@ -17008,10 +20393,10 @@ if (!__Pyx_RefNanny) { * ''' * Helper to be called from Python. */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_decref_py, __pyx_t_1) < 0) __PYX_ERR(0, 196, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_7decref_py, 0, __pyx_n_s_decref_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_decref_py, __pyx_t_3) < 0) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":203 * @@ -17020,10 +20405,15 @@ if (!__Pyx_RefNanny) { * ''' * Helper to be called from Python. */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_func_code_info_py, __pyx_t_1) < 0) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_FuncCodeInfo) < 0) __PYX_ERR(0, 203, __pyx_L1_error) + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_9get_func_code_info_py, 0, __pyx_n_s_get_func_code_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_func_code_info_py, __pyx_t_2) < 0) __PYX_ERR(0, 203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":210 * @@ -17034,6 +20424,29 @@ if (!__Pyx_RefNanny) { */ __pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator__code_extra_index = -1; + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CodeLineInfo___reduce_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__CodeLineInfo, (type(self), 0x5a9bcd5, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__CodeLineInfo__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13_CodeLineInfo_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CodeLineInfo___setstate_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CodeLineInfo); + /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":329 * * # Note: this method has a version in pure-python too. @@ -17041,10 +20454,10 @@ if (!__Pyx_RefNanny) { * line_to_offset: dict = {} * first_line: int = None */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_code_line_info, __pyx_t_1) < 0) __PYX_ERR(0, 329, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_get_code_line_info, 0, __pyx_n_s_get_code_line_info, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_code_line_info, __pyx_t_2) < 0) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":351 * # handled by the cython side in `FuncCodeInfo get_func_code_info` by providing the @@ -17053,10 +20466,10 @@ if (!__Pyx_RefNanny) { * * def get_cached_code_obj_info_py(code_obj_py): */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_cache, __pyx_t_1) < 0) __PYX_ERR(0, 351, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_cache, __pyx_t_2) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":353 * _cache: dict = {} @@ -17065,10 +20478,46 @@ if (!__Pyx_RefNanny) { * ''' * :return _CacheValue: */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 353, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cached_code_obj_info_py, __pyx_t_1) < 0) __PYX_ERR(0, 353, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_13get_cached_code_obj_info_py, 0, __pyx_n_s_get_cached_code_obj_info_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 353, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_cached_code_obj_info_py, __pyx_t_2) < 0) __PYX_ERR(0, 353, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":379 + * self.code_lines_as_set = set(code_line_info.line_to_offset) + * + * cpdef compute_force_stay_in_untraced_mode(self, breakpoints): # <<<<<<<<<<<<<< + * ''' + * :param breakpoints: + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_3compute_force_stay_in_untraced_mode, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CacheValue_compute_force_stay_i, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, __pyx_n_s_compute_force_stay_in_untraced_m, __pyx_t_2) < 0) __PYX_ERR(0, 379, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CacheValue___reduce_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__CacheValue, (type(self), 0xac42a46, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__CacheValue__set_state(self, __pyx_state) + */ + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_11_CacheValue_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_CacheValue___setstate_cython, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + PyType_Modified(__pyx_ptype_18_pydevd_frame_eval_22pydevd_frame_evaluator__CacheValue); /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":401 * return breakpoint_found, force_stay_in_untraced_mode @@ -17077,10 +20526,10 @@ if (!__Pyx_RefNanny) { * return generate_code_with_breakpoints(code_obj_py, breakpoints) * */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_generate_code_with_breakpoints_p, __pyx_t_1) < 0) __PYX_ERR(0, 401, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_15generate_code_with_breakpoints_py, 0, __pyx_n_s_generate_code_with_breakpoints_p, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_generate_code_with_breakpoints_p, __pyx_t_2) < 0) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":471 * return breakpoint_found, code_obj_py @@ -17089,10 +20538,10 @@ if (!__Pyx_RefNanny) { * * cdef bint IS_PY_39_OWNARDS = sys.version_info[:2] >= (3, 9) */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 471, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 471, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 471, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) __PYX_ERR(0, 471, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":473 * import sys @@ -17101,19 +20550,19 @@ if (!__Pyx_RefNanny) { * * def frame_eval_func(): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_version_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetSlice(__pyx_t_2, 0, 2, NULL, NULL, &__pyx_slice__24, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 473, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_version_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_tuple__25, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 473, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_slice__37, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_tuple__38, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 473, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator_IS_PY_39_OWNARDS = __pyx_t_3; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 473, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_18_pydevd_frame_eval_22pydevd_frame_evaluator_IS_PY_39_OWNARDS = __pyx_t_4; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":475 * cdef bint IS_PY_39_OWNARDS = sys.version_info[:2] >= (3, 9) @@ -17122,10 +20571,10 @@ if (!__Pyx_RefNanny) { * cdef PyThreadState *state = PyThreadState_Get() * if IS_PY_39_OWNARDS: */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_frame_eval_func, __pyx_t_2) < 0) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_17frame_eval_func, 0, __pyx_n_s_frame_eval_func, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_frame_eval_func, __pyx_t_3) < 0) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":484 * @@ -17134,20 +20583,20 @@ if (!__Pyx_RefNanny) { * cdef PyThreadState *state = PyThreadState_Get() * state.interp.eval_frame = _PyEval_EvalFrameDefault */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop_frame_eval, __pyx_t_2) < 0) __PYX_ERR(0, 484, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_19stop_frame_eval, 0, __pyx_n_s_stop_frame_eval, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop_frame_eval, __pyx_t_3) < 0) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":1 * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_21__pyx_unpickle_ThreadInfo, 0, __pyx_n_s_pyx_unpickle_ThreadInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":11 * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) @@ -17156,20 +20605,20 @@ if (!__Pyx_RefNanny) { * __pyx_result._can_create_dummy_thread = __pyx_state[0]; __pyx_result.additional_info = __pyx_state[1]; __pyx_result.force_stay_in_untraced_mode = __pyx_state[2]; __pyx_result.fully_initialized = __pyx_state[3]; __pyx_result.inside_frame_eval = __pyx_state[4]; __pyx_result.is_pydevd_thread = __pyx_state[5]; __pyx_result.thread_trace_func = __pyx_state[6] * if len(__pyx_state) > 7 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_23__pyx_unpickle_FuncCodeInfo, 0, __pyx_n_s_pyx_unpickle_FuncCodeInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":1 * def __pyx_unpickle__CodeLineInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__CodeLineInfo, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_25__pyx_unpickle__CodeLineInfo, 0, __pyx_n_s_pyx_unpickle__CodeLineInfo, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__CodeLineInfo, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "(tree fragment)":11 * __pyx_unpickle__CodeLineInfo__set_state(<_CodeLineInfo> __pyx_result, __pyx_state) @@ -17178,32 +20627,42 @@ if (!__Pyx_RefNanny) { * __pyx_result.first_line = __pyx_state[0]; __pyx_result.last_line = __pyx_state[1]; __pyx_result.line_to_offset = __pyx_state[2] * if len(__pyx_state) > 3 and hasattr(__pyx_result, '__dict__'): */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__CacheValue, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_18_pydevd_frame_eval_22pydevd_frame_evaluator_27__pyx_unpickle__CacheValue, 0, __pyx_n_s_pyx_unpickle__CacheValue, NULL, __pyx_n_s_pydevd_frame_eval_pydevd_frame_3, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__CacheValue, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* "_pydevd_frame_eval/pydevd_frame_evaluator.pyx":1 * from __future__ import print_function # <<<<<<<<<<<<<< * from _pydev_bundle._pydev_saved_modules import threading, thread * from _pydevd_bundle.pydevd_constants import GlobalDebuggerHolder */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /*--- Wrapped vars code ---*/ goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); if (__pyx_m) { - if (__pyx_d) { + if (__pyx_d && stringtab_initialized) { __Pyx_AddTraceback("init _pydevd_frame_eval.pydevd_frame_evaluator", __pyx_clineno, __pyx_lineno, __pyx_filename); } + #if !CYTHON_USE_MODULE_STATE Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif } else if (!PyErr_Occurred()) { PyErr_SetString(PyExc_ImportError, "init _pydevd_frame_eval.pydevd_frame_evaluator"); } @@ -17217,6 +20676,22 @@ if (!__Pyx_RefNanny) { return; #endif } +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ /* --- Runtime support code --- */ /* Refnanny */ @@ -17236,463 +20711,970 @@ static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { } #endif -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); #if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); + for (i=0; itp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) { + int result; + PyObject *exc_type; +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; #else - dictptr = _PyObject_GetDictPtr(obj); + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; #endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; } #endif -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); #else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); #endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif } #else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; #endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); +} #endif - return __Pyx_GetBuiltinName(name); + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); } +#endif -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); } -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; #endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && #endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); + return result; #endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, #if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); + "name '%U' is not defined", name); #else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); + "name '%.200s' is not defined", PyString_AS_STRING(name)); #endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); + } return result; } -#endif -#endif -/* PyObjectCall */ +/* TupleAndListFromArray */ #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = Py_TYPE(func)->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); } - return result; +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; } #endif -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; } - return result; -} #endif +} -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); } #endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) -#else - if (likely(PyCFunction_Check(func))) + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } #endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; } -} +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); #endif +} -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; } -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; itp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; } +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); #else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); } #endif -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* PyIntBinop */ -#if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) { - (void)inplace; - (void)zerodivision_check; - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long x; - long a = PyInt_AS_LONG(op1); - x = (long)((unsigned long)a + b); - if (likely((x^a) >= 0 || (x^b) >= 0)) - return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_add(op1, op2); + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - const long b = intval; - long a, x; -#ifdef HAVE_LONG_LONG - const PY_LONG_LONG llb = intval; - PY_LONG_LONG lla, llx; #endif - const digit* digits = ((PyLongObject*)op1)->ob_digit; - const Py_ssize_t size = Py_SIZE(op1); - if (likely(__Pyx_sst_abs(size) <= 1)) { - a = likely(size) ? digits[0] : 0; - if (size == -1) a = -a; - } else { - switch (size) { - case -2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; #ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 2: if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 3: if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case -4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; case 4: if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); break; -#ifdef HAVE_LONG_LONG + #ifdef HAVE_LONG_LONG } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); goto long_long; -#endif + #endif } CYTHON_FALLTHROUGH; default: return PyLong_Type.tp_as_number->nb_add(op1, op2); @@ -17711,8 +21693,13 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED #endif if (PyFloat_CheckExact(op1)) { const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else double a = PyFloat_AS_DOUBLE(op1); +#endif double result; + PyFPE_START_PROTECT("add", return NULL) result = ((double)a) + (double)b; PyFPE_END_PROTECT(result) @@ -17726,7 +21713,8 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; #if CYTHON_USE_TYPE_SLOTS PyMappingMethods* mp; #if PY_MAJOR_VERSION < 3 @@ -17765,9 +21753,13 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, } return ms->sq_slice(obj, cstart, cstop); } +#else + CYTHON_UNUSED_VAR(wraparound); #endif mp = Py_TYPE(obj)->tp_as_mapping; if (likely(mp && mp->mp_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); #endif { PyObject* result; @@ -17806,1670 +21798,3147 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, #if CYTHON_USE_TYPE_SLOTS result = mp->mp_subscript(obj, py_slice); #else - result = PyObject_GetItem(obj, py_slice); + result = PyObject_GetItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); + } + return result; + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); +bad: + return NULL; +} + +/* GetAttr3 */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +#endif +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + int res = PyObject_GetOptionalAttr(o, n, &r); + return (res != 0) ? r : __Pyx_NewRef(d); +#else + #if CYTHON_USE_TYPE_SLOTS + if (likely(PyString_Check(n))) { + r = __Pyx_PyObject_GetAttrStrNoError(o, n); + if (unlikely(!r) && likely(!PyErr_Occurred())) { + r = __Pyx_NewRef(d); + } + return r; + } + #endif + r = PyObject_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +#endif +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* PyObjectLookupSpecial */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} #endif - if (!_py_slice) { - Py_DECREF(py_slice); - } - return result; + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; } PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); -bad: - return NULL; + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); } -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kw, + const char* function_name, + int kw_allowed) +{ + PyObject* key = 0; + Py_ssize_t pos = 0; #if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); + if (!kw_allowed && PyDict_Next(kw, &pos, &key, 0)) + goto invalid_keyword; + return 1; #else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } + if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) { + Py_ssize_t kwsize; +#if CYTHON_ASSUME_SAFE_MACROS + kwsize = PyTuple_GET_SIZE(kw); +#else + kwsize = PyTuple_Size(kw); + if (kwsize < 0) return 0; #endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); + if (unlikely(kwsize == 0)) + return 1; + if (!kw_allowed) { +#if CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kw, 0); +#else + key = PyTuple_GetItem(kw, pos); + if (!key) return 0; +#endif + goto invalid_keyword; } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; +#if PY_VERSION_HEX < 0x03090000 + for (pos = 0; pos < kwsize; pos++) { +#if CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kw, pos); +#else + key = PyTuple_GetItem(kw, pos); + if (!key) return 0; +#endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } +#endif + return 1; + } + while (PyDict_Next(kw, &pos, &key, 0)) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_Check(key))) + #endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; } + if (!kw_allowed && unlikely(key)) + goto invalid_keyword; + return 1; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + return 0; #endif +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif + return 0; } -/* UnicodeEquals */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); #else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; + size = PyTuple_Size(kwds); + if (size < 0) goto bad; #endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; #endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; + value = kwvalues[pos]; + pos++; } -#if CYTHON_USE_UNICODE_INTERNALS + else { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } } - } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; #endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); + goto invalid_keyword; } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); #endif - return (equals == Py_NE); -#endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; } -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; } #endif -/* GetAttr */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); #else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); + return PySequence_GetItem(o, i); #endif - return PyObject_GetAttr(o, n); -} - -/* GetAttr3 */ -static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; } -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif } - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; } } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; } -#endif - PyErr_NormalizeException(&type, &value, &tb); } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; } else { - type = instance_class; + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); } } + return sm->sq_item(o, i); } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); #else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); } -bad: - Py_XDECREF(owned_instance); - return; -} #endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} -/* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; } - return exc_info; + return 0; } -#endif -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); } -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); } -#endif -/* GetException */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif #else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif #endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); #else - PyErr_Fetch(&local_type, &local_value, &local_tb); + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); #endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) + __Pyx_DECREF_TypeName(type_name); + return 0; #else - if (unlikely(PyErr_Occurred())) + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; #endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); #endif + *method = attr; return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; } -/* PyObjectSetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); +/* PyObjectCallMethod0 */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; } -#endif -/* None */ -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); } -/* ExtTypeTest */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; +/* UnpackTupleError */ +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); } - if (likely(__Pyx_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; } -/* SwapException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = *type; - exc_info->exc_value = *value; - exc_info->exc_traceback = *tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - #endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} +/* UnpackTuple2 */ +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; #else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; } + +/* dict_iter */ +#if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } #endif - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; } - if (exact) { - more_or_less = "exactly"; + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); + return PyObject_GetIter(iterable); } - -/* KeywordStringCheck */ -static int __Pyx_CheckKeywordStrings( - PyObject *kwdict, - const char* function_name, - int kw_allowed) -{ - PyObject* key = 0; - Py_ssize_t pos = 0; -#if CYTHON_COMPILING_IN_PYPY - if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) - goto invalid_keyword; - return 1; -#else - while (PyDict_Next(kwdict, &pos, &key, 0)) { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_Check(key))) - #endif - if (unlikely(!PyUnicode_Check(key))) - goto invalid_keyword_type; +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; } - if ((!kw_allowed) && unlikely(key)) - goto invalid_keyword; return 1; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - return 0; -#endif -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif - return 0; } -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); } } - } else + level = 0; + } #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif } } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); + Py_XDECREF(py_import); #endif -bad: - return -1; + return module; } -/* ArgTypeTest */ -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__3); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); #endif } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; + return value; +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* HasAttr */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); - return 0; } +#endif -/* DictGetItem */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { - PyObject *value; - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (!PyErr_Occurred()) { - if (unlikely(PyTuple_Check(key))) { - PyObject* args = PyTuple_Pack(1, key); - if (likely(args)) { - PyErr_SetObject(PyExc_KeyError, args); - Py_DECREF(args); +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; } - } else { - PyErr_SetObject(PyExc_KeyError, key); + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif } + memb++; } - return NULL; + if (changed) + PyType_Modified(type); } - Py_INCREF(value); - return value; +#endif + return 0; } #endif -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +/* ValidateBasesTuple */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); #else - return PySequence_GetItem(o, i); + n = PyTuple_Size(bases); + if (n < 0) return -1; #endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); #else - return PySequence_GetItem(o, i); + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; #endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ +static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; } - return m->sq_item(o, i); + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; } } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } + return descr; +} #endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); } +#endif -/* RaiseTooManyValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +/* SetVTable */ +static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { + PyObject *ob = PyCapsule_New(vtable, 0, 0); + if (unlikely(!ob)) + goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) +#else + if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) +#endif + goto bad; + Py_DECREF(ob); + return 0; +bad: + Py_XDECREF(ob); + return -1; } -/* RaiseNeedMoreValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); +/* GetVTable */ +static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); +#endif + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; } -/* IterFinish */ -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; +/* MergeVTables */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type) { + int i; + void** base_vtables; + __Pyx_TypeName tp_base_name; + __Pyx_TypeName base_name; + void* unknown = (void*)-1; + PyObject* bases = type->tp_bases; + int base_depth = 0; + { + PyTypeObject* base = type->tp_base; + while (base) { + base_depth += 1; + base = base->tp_base; } } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; + base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); + base_vtables[0] = unknown; + for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { + void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); + if (base_vtable != NULL) { + int j; + PyTypeObject* base = type->tp_base; + for (j = 0; j < base_depth; j++) { + if (base_vtables[j] == unknown) { + base_vtables[j] = __Pyx_GetVtable(base); + base_vtables[j + 1] = unknown; + } + if (base_vtables[j] == base_vtable) { + break; + } else if (base_vtables[j] == NULL) { + goto bad; + } + base = base->tp_base; + } } } + PyErr_Clear(); + free(base_vtables); return 0; -#endif +bad: + tp_base_name = __Pyx_PyType_GetName(type->tp_base); + base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); + PyErr_Format(PyExc_TypeError, + "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); + __Pyx_DECREF_TypeName(tp_base_name); + __Pyx_DECREF_TypeName(base_name); + free(base_vtables); + return -1; } +#endif -/* UnpackItemEndCheck */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else { - return __Pyx_IterFinish(); - } - return 0; +/* SetupReduce */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; } - -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_getstate = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; + PyObject *getstate = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +#else + getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); + if (!getstate && PyErr_Occurred()) { + goto __PYX_BAD; } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; +#endif + if (getstate) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); +#else + object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); + if (!object_getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (object_getstate != getstate) { + goto __PYX_GOOD; + } } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; #else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; #endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } } + PyType_Modified((PyTypeObject*)type_obj); } } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); + } + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); + Py_XDECREF(object_getstate); + Py_XDECREF(getstate); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType_3_0_10 +#define __PYX_HAVE_RT_ImportType_3_0_10 +static PyTypeObject *__Pyx_ImportType_3_0_10(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_10 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; } - Py_DECREF(dict); + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; } - if (meth_found) { - *method = descr; - return 1; + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_10 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_10 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; } - if (descr != NULL) { - *method = descr; - return 0; + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* ImportDottedModule */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); } - PyErr_Format(PyExc_AttributeError, + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif #if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); + imported_module = PyImport_GetModule(name); #endif - return 0; + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); #else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; + part = PySequence_ITEM(parts_tuple, i); #endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__10; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); #endif - *method = attr; - return 0; } - -/* PyObjectCallMethod0 */ -static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { - PyObject *method = NULL, *result = NULL; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_CallOneArg(method, obj); - Py_DECREF(method); - return result; +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); } - if (unlikely(!method)) goto bad; - result = __Pyx_PyObject_CallNoArg(method); - Py_DECREF(method); -bad: - return result; +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); } -/* RaiseNoneIterError */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); } -/* UnpackTupleError */ -static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { - if (t == Py_None) { - __Pyx_RaiseNoneNotIterableError(); - } else if (PyTuple_GET_SIZE(t) < index) { - __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); - } else { - __Pyx_RaiseTooManyValuesError(index); +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; } - -/* UnpackTuple2 */ -static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( - PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { - PyObject *value1 = NULL, *value2 = NULL; -#if CYTHON_COMPILING_IN_PYPY - value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; - value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; #else - value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); - value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; #endif - if (decref_tuple) { - Py_DECREF(tuple); + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; } - *pvalue1 = value1; - *pvalue2 = value2; - return 0; -#if CYTHON_COMPILING_IN_PYPY + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; bad: - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} #endif + +/* PyVectorcallFastCallDict */ +#if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; } -static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, - int has_known_size, int decref_tuple) { - Py_ssize_t index; - PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; - iternextfunc iternext; - iter = PyObject_GetIter(tuple); - if (unlikely(!iter)) goto bad; - if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } - iternext = Py_TYPE(iter)->tp_iternext; - value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } - value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } - if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; - Py_DECREF(iter); - *pvalue1 = value1; - *pvalue2 = value2; - return 0; -unpacking_failed: - if (!has_known_size && __Pyx_IterFinish() == 0) - __Pyx_RaiseNeedMoreValuesError(index); -bad: - Py_XDECREF(iter); - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); } - -/* dict_iter */ -static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, - Py_ssize_t* p_orig_length, int* p_source_is_dict) { - is_dict = is_dict || likely(PyDict_CheckExact(iterable)); - *p_source_is_dict = is_dict; - if (is_dict) { -#if !CYTHON_COMPILING_IN_PYPY - *p_orig_length = PyDict_Size(iterable); - Py_INCREF(iterable); - return iterable; -#elif PY_MAJOR_VERSION >= 3 - static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; - PyObject **pp = NULL; - if (method_name) { - const char *name = PyUnicode_AsUTF8(method_name); - if (strcmp(name, "iteritems") == 0) pp = &py_items; - else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; - else if (strcmp(name, "itervalues") == 0) pp = &py_values; - if (pp) { - if (!*pp) { - *pp = PyUnicode_FromString(name + 4); - if (!*pp) - return NULL; - } - method_name = *pp; - } - } #endif + +/* CythonFunctionShared */ +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; } - *p_orig_length = 0; - if (method_name) { - PyObject* iter; - iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); - if (!iterable) - return NULL; -#if !CYTHON_COMPILING_IN_PYPY - if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) - return iterable; + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); #endif - iter = PyObject_GetIter(iterable); - Py_DECREF(iterable); - return iter; - } - return PyObject_GetIter(iterable); } -static CYTHON_INLINE int __Pyx_dict_iter_next( - PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, - PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { - PyObject* next_item; -#if !CYTHON_COMPILING_IN_PYPY - if (source_is_dict) { - PyObject *key, *value; - if (unlikely(orig_length != PyDict_Size(iter_obj))) { - PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); - return -1; - } - if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { - return 0; - } - if (pitem) { - PyObject* tuple = PyTuple_New(2); - if (unlikely(!tuple)) { - return -1; - } - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(tuple, 0, key); - PyTuple_SET_ITEM(tuple, 1, value); - *pitem = tuple; +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; } else { - if (pkey) { - Py_INCREF(key); - *pkey = key; - } - if (pvalue) { - Py_INCREF(value); - *pvalue = value; - } + Py_INCREF(Py_None); + return Py_None; } - return 1; - } else if (PyTuple_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyTuple_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else if (PyList_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyList_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else #endif - { - next_item = PyIter_Next(iter_obj); - if (unlikely(!next_item)) { - return __Pyx_IterFinish(); - } } - if (pitem) { - *pitem = next_item; - } else if (pkey && pvalue) { - if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) - return -1; - } else if (pkey) { - *pkey = next_item; - } else { - *pvalue = next_item; + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; } - return 1; + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; } - -/* WriteUnraisableException */ -static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback, CYTHON_UNUSED int nogil) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_PyThreadState_declare -#ifdef WITH_THREAD - PyGILState_STATE state; - if (nogil) - state = PyGILState_Ensure(); -#ifdef _MSC_VER - else state = (PyGILState_STATE)-1; -#endif +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #endif - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); + if (unlikely(op->func_name == NULL)) + return NULL; } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; } -#ifdef WITH_THREAD - if (nogil) - PyGILState_Release(state); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) #endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; } - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; } } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; + Py_INCREF(result); + return result; } - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; } - return value; + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; } - -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); + "__annotations__ must be set to a dict object"); return -1; } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; } + Py_INCREF(result); + return result; } - -/* PyObject_GenericGetAttrNoDict */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); #else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } #endif - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { - PyObject *descr; - PyTypeObject *tp = Py_TYPE(obj); - if (unlikely(!PyString_Check(attr_name))) { - return PyObject_GenericGetAttr(obj, attr_name); - } - assert(!tp->tp_dictoffset); - descr = _PyType_Lookup(tp, attr_name); - if (unlikely(!descr)) { - return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); - } - Py_INCREF(descr); - #if PY_MAJOR_VERSION < 3 - if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) - #endif - { - descrgetfunc f = Py_TYPE(descr)->tp_descr_get; - if (unlikely(f)) { - PyObject *res = f(descr, obj, (PyObject *)tp); - Py_DECREF(descr); - return res; + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); } +ignore: + PyErr_Clear(); } - return descr; +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif } +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; #endif - -/* PyObject_GenericGetAttr */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +#endif + return (PyObject *) op; } +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); #endif - -/* SetVTable */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 - PyObject *ob = PyCapsule_New(vtable, 0, 0); + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); #else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } #endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) - goto bad; - Py_DECREF(ob); +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } return 0; -bad: - Py_XDECREF(ob); - return -1; } - -/* PyObjectGetAttrStrNoError */ -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); } -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); #endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); } - return result; + return 0; } - -/* SetupReduce */ -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif } -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_getstate = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; - PyObject *getstate = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; #else - getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); - if (!getstate && PyErr_Occurred()) { - goto __PYX_BAD; - } + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; #endif - if (getstate) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); #else - object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); - if (!object_getstate && PyErr_Occurred()) { - goto __PYX_BAD; + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; #endif - if (object_getstate != getstate) { - goto __PYX_GOOD; + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; } -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); #else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); #endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; #else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); #endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); - } } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); - Py_XDECREF(object_getstate); - Py_XDECREF(getstate); #endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } return ret; } - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); #endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), #else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; + offsetof(PyCFunctionObject, m_weakreflist), #endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; + return op; } -#endif /* CLineInTraceback */ #ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { PyObject *use_cline; PyObject *ptype, *pvalue, *ptraceback; #if CYTHON_COMPILING_IN_CPYTHON PyObject **cython_runtime_dict; #endif + CYTHON_MAYBE_UNUSED_VAR(tstate); if (unlikely(!__pyx_cython_runtime)) { return c_line; } @@ -19483,7 +24952,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int } else #endif { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); if (use_cline_obj) { use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; Py_DECREF(use_cline_obj); @@ -19505,6 +24974,7 @@ static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int #endif /* CodeObjectCache */ +#if !CYTHON_COMPILING_IN_LIMITED_API static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { int start = 0, mid = 0, end = count - 1; if (end >= 0 && code_line > entries[end].code_line) { @@ -19583,17 +25053,101 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { __pyx_code_cache.count++; Py_INCREF(code_object); } +#endif /* AddTraceback */ #include "compile.h" #include "frameobject.h" #include "traceback.h" -#if PY_VERSION_HEX >= 0x030b00a6 +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API #ifndef Py_BUILD_CORE #define Py_BUILD_CORE 1 #endif #include "internal/pycore_frame.h" #endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( const char *funcname, int c_line, int py_line, const char *filename) { @@ -19628,6 +25182,7 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( 0, 0, 0, + 0, __pyx_empty_bytes, /*PyObject *code,*/ __pyx_empty_tuple, /*PyObject *consts,*/ __pyx_empty_tuple, /*PyObject *names,*/ @@ -19643,7 +25198,7 @@ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( #else py_code = PyCode_NewEmpty(filename, funcname, py_line); #endif - Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline + Py_XDECREF(py_funcname); return py_code; bad: Py_XDECREF(py_funcname); @@ -19690,6 +25245,7 @@ static void __Pyx_AddTraceback(const char *funcname, int c_line, Py_XDECREF(py_code); Py_XDECREF(py_frame); } +#endif /* CIntFromPyVerify */ #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ @@ -19746,8 +25302,34 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 return _PyLong_FromByteArray(bytes, sizeof(int), little, !is_unsigned); +#else + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif } } @@ -19764,7 +25346,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { + if ((sizeof(int) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -19778,40 +25360,45 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -19824,109 +25411,181 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { goto raise_neg_overflow; } #endif - if (sizeof(int) <= sizeof(unsigned long)) { + if ((sizeof(int) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(int) <= sizeof(long)) { + if ((sizeof(int) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else int val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (int) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (int) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (int) -1; } } else { @@ -19960,7 +25619,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { + if ((sizeof(long) < sizeof(long))) { __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); @@ -19974,40 +25633,45 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { if (likely(PyLong_Check(x))) { if (is_unsigned) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } } - } - break; + break; + } } #endif -#if CYTHON_COMPILING_IN_CPYTHON +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 if (unlikely(Py_SIZE(x) < 0)) { goto raise_neg_overflow; } @@ -20020,109 +25684,181 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { goto raise_neg_overflow; } #endif - if (sizeof(long) <= sizeof(unsigned long)) { + if ((sizeof(long) <= sizeof(unsigned long))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } } - } - break; + break; + } } #endif - if (sizeof(long) <= sizeof(long)) { + if ((sizeof(long) <= sizeof(long))) { __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else long val; PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 +#if PY_MAJOR_VERSION < 3 if (likely(v) && !PyLong_Check(v)) { PyObject *tmp = v; v = PyNumber_Long(tmp); Py_DECREF(tmp); } - #endif +#endif if (likely(v)) { + int ret = -1; +#if PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) int one = 1; int is_little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); + ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + long idigit; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (unlikely(!PyLong_CheckExact(v))) { + PyObject *tmp = v; + v = PyNumber_Long(v); + assert(PyLong_CheckExact(v)); + Py_DECREF(tmp); + if (unlikely(!v)) return (long) -1; + } +#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(x) == 0) + return (long) 0; + is_negative = Py_SIZE(x) < 0; +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + is_negative = result == 1; + } +#endif + if (is_unsigned && unlikely(is_negative)) { + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = __Pyx_NewRef(v); + } + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + if (Py_SIZE(stepval) == 0) + goto unpacking_done; + #endif + } + idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + #if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030B0000 + unpacking_done: + #endif + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif Py_DECREF(v); if (likely(!ret)) return val; } -#endif return (long) -1; } } else { @@ -20176,16 +25912,58 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { { int one = 1; int little = (int)*(unsigned char *)&one; unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 return _PyLong_FromByteArray(bytes, sizeof(long), little, !is_unsigned); +#else + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ +#if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_n_s__47); } + return name; } +#endif /* FastTypeChecks */ #if CYTHON_COMPILING_IN_CPYTHON static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { while (a) { - a = a->tp_base; + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); if (a == b) return 1; } @@ -20206,6 +25984,22 @@ static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { } return __Pyx_InBases(a, b); } +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} #if PY_MAJOR_VERSION == 2 static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { PyObject *exception, *value, *tb; @@ -20230,11 +26024,11 @@ static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc } #else static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); } - return res; } #endif static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { @@ -20282,47 +26076,78 @@ static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObj #endif /* CheckBinaryVersion */ -static int __Pyx_check_binary_version(void) { - char ctversion[5]; - int same=1, i, found_dot; - const char* rt_from_call = Py_GetVersion(); - PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - found_dot = 0; - for (i = 0; i < 4; i++) { - if (!ctversion[i]) { - same = (rt_from_call[i] < '0' || rt_from_call[i] > '9'); - break; +static unsigned long __Pyx_get_runtime_version(void) { +#if __PYX_LIMITED_VERSION_HEX >= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; } - if (rt_from_call[i] != ctversion[i]) { - same = 0; + version += factor * digit; + if (rt_version[i] != '.') break; - } + digit = 0; + factor >>= 8; + ++i; } - if (!same) { - char rtversion[5] = {'\0'}; + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { char message[200]; - for (i=0; i<4; ++i) { - if (rt_from_call[i] == '.') { - if (found_dot) break; - found_dot = 1; - } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') { - break; - } - rtversion[i] = rt_from_call[i]; - } PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); return PyErr_WarnEx(NULL, message, 1); } - return 0; } /* InitStrings */ +#if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - #if PY_MAJOR_VERSION < 3 + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else if (t->is_unicode) { *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); } else if (t->intern) { @@ -20330,30 +26155,34 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { } else { *t->p = PyString_FromStringAndSize(t->s, t->n - 1); } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif if (!*t->p) return -1; if (PyObject_Hash(*t->p) == -1) return -1; + #endif ++t; } return 0; } +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); } static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { Py_ssize_t ignore; @@ -20408,7 +26237,7 @@ static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ return __Pyx_PyUnicode_AsStringAndSize(o, length); } else #endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) if (PyByteArray_Check(o)) { *length = PyByteArray_GET_SIZE(o); return PyByteArray_AS_STRING(o); @@ -20437,22 +26266,26 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { return retval; } static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); #if PY_MAJOR_VERSION >= 3 if (PyLong_Check(result)) { if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } + __Pyx_DECREF_TypeName(result_type_name); return result; } #endif PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); Py_DECREF(result); return NULL; } @@ -20518,13 +26351,11 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { #endif if (likely(PyLong_CheckExact(b))) { #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); switch (size) { case 2: if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { @@ -20592,4 +26423,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { } +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ #endif /* Py_PYTHON_H */ diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py index 7b34cd50c..a14f999bd 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_frame_tracing.py @@ -18,7 +18,7 @@ def set_trace_func(self, trace_func): def update_globals_dict(globals_dict): - new_globals = {'_pydev_stop_at_break': _pydev_stop_at_break} + new_globals = {"_pydev_stop_at_break": _pydev_stop_at_break} globals_dict.update(new_globals) @@ -50,9 +50,9 @@ def _pydev_stop_at_break(line): return pydev_log.debug("Setting f_trace due to frame eval mode in file: %s on line %s", frame.f_code.co_filename, line) - additional_info.trace_suspend_type = 'frame_eval' + additional_info.trace_suspend_type = "frame_eval" - pydevd_frame_eval_cython_wrapper = sys.modules['_pydevd_frame_eval.pydevd_frame_eval_cython_wrapper'] + pydevd_frame_eval_cython_wrapper = sys.modules["_pydevd_frame_eval.pydevd_frame_eval_cython_wrapper"] thread_info = pydevd_frame_eval_cython_wrapper.get_thread_info_py() if thread_info.thread_trace_func is not None: frame.f_trace = thread_info.thread_trace_func @@ -63,7 +63,7 @@ def _pydev_stop_at_break(line): def _pydev_needs_stop_at_break(line): - ''' + """ We separate the functionality into 2 functions so that we can generate a bytecode which generates a spurious line change so that we can do: @@ -72,7 +72,7 @@ def _pydev_needs_stop_at_break(line): _pydev_stop_at_break() # then, proceed to go to the current line # (which will then trigger a line event). - ''' + """ t = threading.current_thread() try: additional_info = t.additional_info @@ -119,4 +119,3 @@ def _pydev_needs_stop_at_break(line): additional_info.is_tracing -= 1 return False - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py index 7e7635850..8c9dabb03 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/pydevd_modify_bytecode.py @@ -14,43 +14,42 @@ class DebugHelper(object): - def __init__(self): - self._debug_dir = os.path.join(os.path.dirname(__file__), 'debug_info') + self._debug_dir = os.path.join(os.path.dirname(__file__), "debug_info") try: os.makedirs(self._debug_dir) except: pass self._next = partial(next, itertools.count(0)) - def _get_filename(self, op_number=None, prefix=''): + def _get_filename(self, op_number=None, prefix=""): if op_number is None: op_number = self._next() - name = '%03d_before.txt' % op_number + name = "%03d_before.txt" % op_number else: - name = '%03d_change.txt' % op_number + name = "%03d_change.txt" % op_number filename = os.path.join(self._debug_dir, prefix + name) return filename, op_number - def write_bytecode(self, b, op_number=None, prefix=''): + def write_bytecode(self, b, op_number=None, prefix=""): filename, op_number = self._get_filename(op_number, prefix) - with open(filename, 'w') as stream: + with open(filename, "w") as stream: bytecode.dump_bytecode(b, stream=stream, lineno=True) return op_number - def write_dis(self, code_to_modify, op_number=None, prefix=''): + def write_dis(self, code_to_modify, op_number=None, prefix=""): filename, op_number = self._get_filename(op_number, prefix) - with open(filename, 'w') as stream: - stream.write('-------- ') - stream.write('-------- ') - stream.write('id(code_to_modify): %s' % id(code_to_modify)) - stream.write('\n\n') + with open(filename, "w") as stream: + stream.write("-------- ") + stream.write("-------- ") + stream.write("id(code_to_modify): %s" % id(code_to_modify)) + stream.write("\n\n") dis.dis(code_to_modify, file=stream) return op_number -_CodeLineInfo = namedtuple('_CodeLineInfo', 'line_to_offset, first_line, last_line') +_CodeLineInfo = namedtuple("_CodeLineInfo", "line_to_offset, first_line, last_line") # Note: this method has a version in cython too (that one is usually used, this is just for tests). @@ -72,19 +71,15 @@ def _get_code_line_info(code_obj): debug_helper = DebugHelper() -def get_instructions_to_add( - stop_at_line, - _pydev_stop_at_break=_pydev_stop_at_break, - _pydev_needs_stop_at_break=_pydev_needs_stop_at_break - ): - ''' +def get_instructions_to_add(stop_at_line, _pydev_stop_at_break=_pydev_stop_at_break, _pydev_needs_stop_at_break=_pydev_needs_stop_at_break): + """ This is the bytecode for something as: if _pydev_needs_stop_at_break(): _pydev_stop_at_break() but with some special handling for lines. - ''' + """ # Good reference to how things work regarding line numbers and jumps: # https://github.com/python/cpython/blob/3.6/Objects/lnotab_notes.txt @@ -100,7 +95,6 @@ def get_instructions_to_add( Instr("LOAD_CONST", stop_at_line, lineno=stop_at_line), Instr("CALL_FUNCTION", 1, lineno=stop_at_line), Instr("POP_JUMP_IF_FALSE", label, lineno=stop_at_line), - # -- _pydev_stop_at_break() # # Note that this has line numbers -1 so that when the NOP just below @@ -109,7 +103,6 @@ def get_instructions_to_add( Instr("LOAD_CONST", stop_at_line, lineno=spurious_line), Instr("CALL_FUNCTION", 1, lineno=spurious_line), Instr("POP_TOP", lineno=spurious_line), - # Reason for the NOP: Python will give us a 'line' trace event whenever we forward jump to # the first instruction of a line, so, in the case where we haven't added a programmatic # breakpoint (either because we didn't hit a breakpoint anymore or because it was already @@ -122,7 +115,6 @@ def get_instructions_to_add( class _Node(object): - def __init__(self, data): self.prev = None self.next = None @@ -158,11 +150,11 @@ def prepend(self, data): class _HelperBytecodeList(object): - ''' + """ A helper double-linked list to make the manipulation a bit easier (so that we don't need to keep track of indices that change) and performant (because adding multiple items to the middle of a regular list isn't ideal). - ''' + """ def __init__(self, lst=None): self._head = None @@ -206,16 +198,24 @@ def __iter__(self): _PREDICT_TABLE = { - 'LIST_APPEND': ('JUMP_ABSOLUTE',), - 'SET_ADD': ('JUMP_ABSOLUTE',), - 'GET_ANEXT': ('LOAD_CONST',), - 'GET_AWAITABLE': ('LOAD_CONST',), - 'DICT_MERGE': ('CALL_FUNCTION_EX',), - 'MAP_ADD': ('JUMP_ABSOLUTE',), - 'COMPARE_OP': ('POP_JUMP_IF_FALSE', 'POP_JUMP_IF_TRUE',), - 'IS_OP': ('POP_JUMP_IF_FALSE', 'POP_JUMP_IF_TRUE',), - 'CONTAINS_OP': ('POP_JUMP_IF_FALSE', 'POP_JUMP_IF_TRUE',), - + "LIST_APPEND": ("JUMP_ABSOLUTE",), + "SET_ADD": ("JUMP_ABSOLUTE",), + "GET_ANEXT": ("LOAD_CONST",), + "GET_AWAITABLE": ("LOAD_CONST",), + "DICT_MERGE": ("CALL_FUNCTION_EX",), + "MAP_ADD": ("JUMP_ABSOLUTE",), + "COMPARE_OP": ( + "POP_JUMP_IF_FALSE", + "POP_JUMP_IF_TRUE", + ), + "IS_OP": ( + "POP_JUMP_IF_FALSE", + "POP_JUMP_IF_TRUE", + ), + "CONTAINS_OP": ( + "POP_JUMP_IF_FALSE", + "POP_JUMP_IF_TRUE", + ), # Note: there are some others with PREDICT on ceval, but they have more logic # and it needs more experimentation to know how it behaves in the static generated # code (and it's only an issue for us if there's actually a line change between @@ -236,12 +236,12 @@ def __iter__(self): def insert_pydevd_breaks( - code_to_modify, - breakpoint_lines, - code_line_info=None, - _pydev_stop_at_break=_pydev_stop_at_break, - _pydev_needs_stop_at_break=_pydev_needs_stop_at_break, - ): + code_to_modify, + breakpoint_lines, + code_line_info=None, + _pydev_stop_at_break=_pydev_stop_at_break, + _pydev_needs_stop_at_break=_pydev_needs_stop_at_break, +): """ Inserts pydevd programmatic breaks into the code (at the given lines). @@ -268,14 +268,14 @@ def insert_pydevd_breaks( for line in breakpoint_lines: if line <= 0: # The first line is line 1, so, a break at line 0 is not valid. - pydev_log.info('Trying to add breakpoint in invalid line: %s', line) + pydev_log.info("Trying to add breakpoint in invalid line: %s", line) return False, code_to_modify try: b = bytecode.Bytecode.from_code(code_to_modify) if DEBUG: - op_number_bytecode = debug_helper.write_bytecode(b, prefix='bytecode.') + op_number_bytecode = debug_helper.write_bytecode(b, prefix="bytecode.") helper_list = _HelperBytecodeList(b) @@ -286,8 +286,8 @@ def insert_pydevd_breaks( last_lineno = None while curr_node is not None: instruction = curr_node.data - instruction_lineno = getattr(instruction, 'lineno', None) - curr_name = getattr(instruction, 'name', None) + instruction_lineno = getattr(instruction, "lineno", None) + curr_name = getattr(instruction, "name", None) if FIX_PREDICT: predict_targets = _PREDICT_TABLE.get(curr_name) @@ -297,9 +297,9 @@ def insert_pydevd_breaks( # that it does things the way that ceval actually interprets it. # See: https://mail.python.org/archives/list/python-dev@python.org/thread/CP2PTFCMTK57KM3M3DLJNWGO66R5RVPB/ next_instruction = curr_node.next.data - next_name = getattr(next_instruction, 'name', None) + next_name = getattr(next_instruction, "name", None) if next_name in predict_targets: - next_instruction_lineno = getattr(next_instruction, 'lineno', None) + next_instruction_lineno = getattr(next_instruction, "lineno", None) if next_instruction_lineno: next_instruction.lineno = None @@ -323,9 +323,7 @@ def insert_pydevd_breaks( if instruction_lineno in modified_breakpoint_lines: added_breaks_in_lines.add(instruction_lineno) - if curr_node.prev is not None and curr_node.prev.data.__class__ == Label \ - and curr_name == 'POP_TOP': - + if curr_node.prev is not None and curr_node.prev.data.__class__ == Label and curr_name == "POP_TOP": # If we have a SETUP_FINALLY where the target is a POP_TOP, we can't change # the target to be the breakpoint instruction (this can crash the interpreter). @@ -333,7 +331,7 @@ def insert_pydevd_breaks( instruction_lineno, _pydev_stop_at_break=_pydev_stop_at_break, _pydev_needs_stop_at_break=_pydev_needs_stop_at_break, - ): + ): curr_node = curr_node.append(new_instruction) else: @@ -341,7 +339,7 @@ def insert_pydevd_breaks( instruction_lineno, _pydev_stop_at_break=_pydev_stop_at_break, _pydev_needs_stop_at_break=_pydev_needs_stop_at_break, - ): + ): curr_node.prepend(new_instruction) curr_node = curr_node.next @@ -349,12 +347,12 @@ def insert_pydevd_breaks( b[:] = helper_list if DEBUG: - debug_helper.write_bytecode(b, op_number_bytecode, prefix='bytecode.') + debug_helper.write_bytecode(b, op_number_bytecode, prefix="bytecode.") new_code = b.to_code() except: - pydev_log.exception('Error inserting pydevd breaks.') + pydev_log.exception("Error inserting pydevd breaks.") return False, code_to_modify if DEBUG: @@ -362,4 +360,3 @@ def insert_pydevd_breaks( debug_helper.write_dis(new_code, op_number) return True, new_code - diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py index f970fbc00..a68ddcc63 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/__init__.py @@ -37,6 +37,7 @@ from _pydevd_frame_eval.vendored.bytecode.cfg import BasicBlock, ControlFlowGraph # noqa import sys + def dump_bytecode(bytecode, *, lineno=False, stream=sys.stdout): def format_line(index, line): nonlocal cur_lineno, prev_lineno diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py index ca4d0ace5..868065942 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/bytecode.py @@ -176,9 +176,7 @@ def __iter__(self): def _check_instr(self, instr): if not isinstance(instr, (Label, SetLineno, Instr)): raise ValueError( - "Bytecode must only contain Label, " - "SetLineno, and Instr objects, " - "but %s was found" % type(instr).__name__ + "Bytecode must only contain Label, " "SetLineno, and Instr objects, " "but %s was found" % type(instr).__name__ ) def _copy_attr_from(self, bytecode): @@ -188,6 +186,8 @@ def _copy_attr_from(self, bytecode): @staticmethod def from_code(code): + if sys.version_info[:2] >= (3, 11): + raise RuntimeError("This is not updated for Python 3.11 onwards, use only up to Python 3.10!!") concrete = _bytecode.ConcreteBytecode.from_code(code) return concrete.to_bytecode() @@ -195,9 +195,7 @@ def compute_stacksize(self, *, check_pre_and_post=True): cfg = _bytecode.ControlFlowGraph.from_bytecode(self) return cfg.compute_stacksize(check_pre_and_post=check_pre_and_post) - def to_code( - self, compute_jumps_passes=None, stacksize=None, *, check_pre_and_post=True - ): + def to_code(self, compute_jumps_passes=None, stacksize=None, *, check_pre_and_post=True): # Prevent reconverting the concrete bytecode to bytecode and cfg to do the # calculation if we need to do it. if stacksize is None: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py index 5e2f32290..6024c4f1c 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/cfg.py @@ -21,16 +21,11 @@ def __iter__(self): index += 1 if not isinstance(instr, (SetLineno, Instr)): - raise ValueError( - "BasicBlock must only contain SetLineno and Instr objects, " - "but %s was found" % instr.__class__.__name__ - ) + raise ValueError("BasicBlock must only contain SetLineno and Instr objects, " "but %s was found" % instr.__class__.__name__) if isinstance(instr, Instr) and instr.has_jump(): if index < len(self): - raise ValueError( - "Only the last instruction of a basic " "block can be a jump" - ) + raise ValueError("Only the last instruction of a basic " "block can be a jump") if not isinstance(instr.arg, BasicBlock): raise ValueError( @@ -135,7 +130,6 @@ def update_size(pre_delta, post_delta, size, maxsize): block.startsize = size for instr in block: - # Ignore SetLineno if isinstance(instr, SetLineno): continue @@ -143,11 +137,7 @@ def update_size(pre_delta, post_delta, size, maxsize): # For instructions with a jump first compute the stacksize required when the # jump is taken. if instr.has_jump(): - effect = ( - instr.pre_and_post_stack_effect(jump=True) - if check_pre_and_post - else (instr.stack_effect(jump=True), 0) - ) + effect = instr.pre_and_post_stack_effect(jump=True) if check_pre_and_post else (instr.stack_effect(jump=True), 0) taken_size, maxsize = update_size(*effect, size, maxsize) # Yield the parameters required to compute the stacksize required # by the block to which the jumnp points to and resume when we now @@ -161,11 +151,7 @@ def update_size(pre_delta, post_delta, size, maxsize): yield maxsize # jump=False: non-taken path of jumps, or any non-jump - effect = ( - instr.pre_and_post_stack_effect(jump=False) - if check_pre_and_post - else (instr.stack_effect(jump=False), 0) - ) + effect = instr.pre_and_post_stack_effect(jump=False) if check_pre_and_post else (instr.stack_effect(jump=False), 0) size, maxsize = update_size(*effect, size, maxsize) if block.next_block: @@ -225,17 +211,11 @@ def compute_stacksize(self, *, check_pre_and_post=True): # Starting with Python 3.10, generator and coroutines start with one object # on the stack (None, anything is an error). initial_stack_size = 0 - if sys.version_info >= (3, 10) and self.flags & ( - CompilerFlags.GENERATOR - | CompilerFlags.COROUTINE - | CompilerFlags.ASYNC_GENERATOR - ): + if sys.version_info >= (3, 10) and self.flags & (CompilerFlags.GENERATOR | CompilerFlags.COROUTINE | CompilerFlags.ASYNC_GENERATOR): initial_stack_size = 1 # Create a generator/coroutine responsible of dealing with the first block - coro = _compute_stack_size( - self[0], initial_stack_size, 0, check_pre_and_post=check_pre_and_post - ) + coro = _compute_stack_size(self[0], initial_stack_size, 0, check_pre_and_post=check_pre_and_post) # Create a list of generator that have not yet been exhausted coroutines = [] diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py index bd756cba7..f62ac503d 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/concrete.py @@ -138,9 +138,7 @@ def __iter__(self): def _check_instr(self, instr): if not isinstance(instr, (ConcreteInstr, SetLineno)): raise ValueError( - "ConcreteBytecode must only contain " - "ConcreteInstr and SetLineno objects, " - "but %s was found" % type(instr).__name__ + "ConcreteBytecode must only contain " "ConcreteInstr and SetLineno objects, " "but %s was found" % type(instr).__name__ ) def _copy_attr_from(self, bytecode): @@ -236,9 +234,7 @@ def _assemble_code(self): for lineno, instr in self._normalize_lineno(self, self.first_lineno): code_str.append(instr.assemble()) i_size = instr.size - linenos.append( - ((offset * 2) if OFFSET_AS_INSTRUCTION else offset, i_size, lineno) - ) + linenos.append(((offset * 2) if OFFSET_AS_INSTRUCTION else offset, i_size, lineno)) offset += (i_size // 2) if OFFSET_AS_INSTRUCTION else i_size code_str = b"".join(code_str) return (code_str, linenos) @@ -254,9 +250,7 @@ def _assemble_lnotab(first_lineno, linenos): continue # FIXME: be kind, force monotonic line numbers? add an option? if dlineno < 0 and sys.version_info < (3, 6): - raise ValueError( - "negative line number delta is not supported " "on Python < 3.6" - ) + raise ValueError("negative line number delta is not supported " "on Python < 3.6") old_lineno = lineno doff = offset - old_offset @@ -285,7 +279,6 @@ def _assemble_lnotab(first_lineno, linenos): @staticmethod def _pack_linetable(doff, dlineno, linetable): - while dlineno < -127: linetable.append(struct.pack("Bb", 0, -127)) dlineno -= -127 @@ -309,16 +302,15 @@ def _pack_linetable(doff, dlineno, linetable): assert 0 <= doff <= 254 assert -127 <= dlineno <= 127 - def _assemble_linestable(self, first_lineno, linenos): if not linenos: return b"" linetable = [] old_offset = 0 - + iter_in = iter(linenos) - + offset, i_size, old_lineno = next(iter_in) old_dlineno = old_lineno - first_lineno for offset, i_size, lineno in iter_in: @@ -442,7 +434,6 @@ def to_code(self, stacksize=None, *, check_pre_and_post=True): ) def to_bytecode(self): - # Copy instruction and remove extended args if any (in-place) c_instructions = self[:] self._remove_extended_args(c_instructions) @@ -527,7 +518,6 @@ def to_bytecode(self): class _ConvertBytecodeToConcrete: - # Default number of passes of compute_jumps() before giving up. Refer to # assemble_jump_offsets() in compile.c for background. _compute_jumps_passes = 10 @@ -631,9 +621,7 @@ def compute_jumps(self): if instr.opcode in _opcode.hasjrel: instr_offset = offsets[index] - target_offset -= instr_offset + ( - instr.size // 2 if OFFSET_AS_INSTRUCTION else instr.size - ) + target_offset -= instr_offset + (instr.size // 2 if OFFSET_AS_INSTRUCTION else instr.size) old_size = instr.size # FIXME: better error report if target_offset is negative @@ -659,9 +647,7 @@ def to_concrete_bytecode(self, compute_jumps_passes=None): if not modified: break else: - raise RuntimeError( - "compute_jumps() failed to converge after" " %d passes" % (pas + 1) - ) + raise RuntimeError("compute_jumps() failed to converge after" " %d passes" % (pas + 1)) concrete = ConcreteBytecode( self.instructions, diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py index b0c5239cd..ea72f9e74 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/flags.py @@ -62,22 +62,11 @@ def infer_flags(bytecode, is_async=None): bytecode, (_bytecode.Bytecode, _bytecode.ConcreteBytecode, _bytecode.ControlFlowGraph), ): - msg = ( - "Expected a Bytecode, ConcreteBytecode or ControlFlowGraph " - "instance not %s" - ) + msg = "Expected a Bytecode, ConcreteBytecode or ControlFlowGraph " "instance not %s" raise ValueError(msg % bytecode) - instructions = ( - bytecode.get_instructions() - if isinstance(bytecode, _bytecode.ControlFlowGraph) - else bytecode - ) - instr_names = { - i.name - for i in instructions - if not isinstance(i, (_bytecode.SetLineno, _bytecode.Label)) - } + instructions = bytecode.get_instructions() if isinstance(bytecode, _bytecode.ControlFlowGraph) else bytecode + instr_names = {i.name for i in instructions if not isinstance(i, (_bytecode.SetLineno, _bytecode.Label))} # Identify optimized code if not (instr_names & {"STORE_NAME", "LOAD_NAME", "DELETE_NAME"}): @@ -97,12 +86,7 @@ def infer_flags(bytecode, is_async=None): flags |= CompilerFlags.NOFREE # Copy flags for which we cannot infer the right value - flags |= bytecode.flags & ( - CompilerFlags.NEWLOCALS - | CompilerFlags.VARARGS - | CompilerFlags.VARKEYWORDS - | CompilerFlags.NESTED - ) + flags |= bytecode.flags & (CompilerFlags.NEWLOCALS | CompilerFlags.VARARGS | CompilerFlags.VARKEYWORDS | CompilerFlags.NESTED) sure_generator = instr_names & {"YIELD_VALUE"} maybe_generator = instr_names & {"YIELD_VALUE", "YIELD_FROM"} @@ -119,7 +103,6 @@ def infer_flags(bytecode, is_async=None): # If performing inference or forcing an async behavior, first inspect # the flags since this is the only way to identify iterable coroutines if is_async in (None, True): - if bytecode.flags & CompilerFlags.COROUTINE: if sure_generator: flags |= CompilerFlags.ASYNC_GENERATOR @@ -168,9 +151,7 @@ def infer_flags(bytecode, is_async=None): else: if sure_async: raise ValueError( - "The is_async argument is False but bytecodes " - "that can only be used in async functions have " - "been detected." + "The is_async argument is False but bytecodes " "that can only be used in async functions have " "been detected." ) if maybe_generator: diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py index 9247a5495..a25bea82a 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/instr.py @@ -123,15 +123,10 @@ class FreeVar(_Variable): def _check_arg_int(name, arg): if not isinstance(arg, int): - raise TypeError( - "operation %s argument must be an int, " - "got %s" % (name, type(arg).__name__) - ) + raise TypeError("operation %s argument must be an int, " "got %s" % (name, type(arg).__name__)) if not (0 <= arg <= 2147483647): - raise ValueError( - "operation %s argument must be in " "the range 0..2,147,483,647" % name - ) + raise ValueError("operation %s argument must be in " "the range 0..2,147,483,647" % name) if sys.version_info < (3, 8): @@ -174,8 +169,7 @@ def __init__(self, name, arg=UNSET, *, lineno=None, offset=None): def _check_arg(self, name, opcode, arg): if name == "EXTENDED_ARG": raise ValueError( - "only concrete instruction can contain EXTENDED_ARG, " - "highlevel instruction can represent arbitrary argument without it" + "only concrete instruction can contain EXTENDED_ARG, " "highlevel instruction can represent arbitrary argument without it" ) if opcode >= _opcode.HAVE_ARGUMENT: @@ -187,41 +181,25 @@ def _check_arg(self, name, opcode, arg): if self._has_jump(opcode): if not isinstance(arg, (Label, _bytecode.BasicBlock)): - raise TypeError( - "operation %s argument type must be " - "Label or BasicBlock, got %s" % (name, type(arg).__name__) - ) + raise TypeError("operation %s argument type must be " "Label or BasicBlock, got %s" % (name, type(arg).__name__)) elif opcode in _opcode.hasfree: if not isinstance(arg, (CellVar, FreeVar)): - raise TypeError( - "operation %s argument must be CellVar " - "or FreeVar, got %s" % (name, type(arg).__name__) - ) + raise TypeError("operation %s argument must be CellVar " "or FreeVar, got %s" % (name, type(arg).__name__)) elif opcode in _opcode.haslocal or opcode in _opcode.hasname: if not isinstance(arg, str): - raise TypeError( - "operation %s argument must be a str, " - "got %s" % (name, type(arg).__name__) - ) + raise TypeError("operation %s argument must be a str, " "got %s" % (name, type(arg).__name__)) elif opcode in _opcode.hasconst: if isinstance(arg, Label): - raise ValueError( - "label argument cannot be used " "in %s operation" % name - ) + raise ValueError("label argument cannot be used " "in %s operation" % name) if isinstance(arg, _bytecode.BasicBlock): - raise ValueError( - "block argument cannot be used " "in %s operation" % name - ) + raise ValueError("block argument cannot be used " "in %s operation" % name) elif opcode in _opcode.hascompare: if not isinstance(arg, Compare): - raise TypeError( - "operation %s argument type must be " - "Compare, got %s" % (name, type(arg).__name__) - ) + raise TypeError("operation %s argument type must be " "Compare, got %s" % (name, type(arg).__name__)) elif opcode >= _opcode.HAVE_ARGUMENT: _check_arg_int(name, arg) @@ -340,9 +318,7 @@ def pre_and_post_stack_effect(self, jump=None): return -1, 2 if _opname == "ROT_N": return (-self._arg, self._arg) - return {"ROT_TWO": (-2, 2), "ROT_THREE": (-3, 3), "ROT_FOUR": (-4, 4)}.get( - _opname, (_effect, 0) - ) + return {"ROT_TWO": (-2, 2), "ROT_THREE": (-3, 3), "ROT_FOUR": (-4, 4)}.get(_opname, (_effect, 0)) def copy(self): return self.__class__(self._name, self._arg, lineno=self._lineno, offset=self.offset) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py index 9ece96bf0..4ed147f45 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/peephole_opt.py @@ -483,9 +483,6 @@ class CodeTransformer: def code_transformer(self, code, context): if sys.flags.verbose: - print( - "Optimize %s:%s: %s" - % (code.co_filename, code.co_firstlineno, code.co_name) - ) + print("Optimize %s:%s: %s" % (code.co_filename, code.co_firstlineno, code.co_name)) optimizer = PeepholeOptimizer() return optimizer.optimize(code) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py index ee0f7d1b5..cc33b30a4 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/__init__.py @@ -129,9 +129,7 @@ def get_code(source, *, filename="", function=False): source = textwrap.dedent(source).strip() code = compile(source, filename, "exec") if function: - sub_code = [ - const for const in code.co_consts if isinstance(const, types.CodeType) - ] + sub_code = [const for const in code.co_consts if isinstance(const, types.CodeType)] if len(sub_code) != 1: raise ValueError("unable to find function code") code = sub_code[0] @@ -149,6 +147,4 @@ def assertBlocksEqual(self, code, *expected_blocks): for block1, block2 in zip(code, expected_blocks): block_index = code.get_block_index(block1) - self.assertListEqual( - list(block1), block2, "Block #%s is different" % block_index - ) + self.assertListEqual(list(block1), block2, "Block #%s is different" % block_index) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py index c629f75e9..e219643f1 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_bytecode.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import sys import textwrap @@ -90,9 +90,7 @@ def test_slice(self): "freevars", "argnames", ): - self.assertEqual( - getattr(code, name, None), getattr(sliced_code, name, None) - ) + self.assertEqual(getattr(code, name, None), getattr(sliced_code, name, None)) def test_copy(self): code = Bytecode() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py index 9b5b07b1c..6cc731a0e 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_cfg.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import io import sys @@ -21,24 +21,16 @@ from _pydevd_frame_eval.vendored.bytecode.tests import disassemble as _disassemble, TestCase -def disassemble( - source, *, filename="", function=False, remove_last_return_none=False -): +def disassemble(source, *, filename="", function=False, remove_last_return_none=False): code = _disassemble(source, filename=filename, function=function) blocks = ControlFlowGraph.from_bytecode(code) if remove_last_return_none: # drop LOAD_CONST+RETURN_VALUE to only keep 2 instructions, # to make unit tests shorter block = blocks[-1] - test = ( - block[-2].name == "LOAD_CONST" - and block[-2].arg is None - and block[-1].name == "RETURN_VALUE" - ) + test = block[-2].name == "LOAD_CONST" and block[-2].arg is None and block[-1].name == "RETURN_VALUE" if not test: - raise ValueError( - "unable to find implicit RETURN_VALUE : %s" % block[-2:] - ) + raise ValueError("unable to find implicit RETURN_VALUE : %s" % block[-2:]) del block[-2:] return blocks @@ -458,9 +450,7 @@ def test_delitem(self): def sample_code(self): code = disassemble("x = 1", remove_last_return_none=True) - self.assertBlocksEqual( - code, [Instr("LOAD_CONST", 1, lineno=1), Instr("STORE_NAME", "x", lineno=1)] - ) + self.assertBlocksEqual(code, [Instr("LOAD_CONST", 1, lineno=1), Instr("STORE_NAME", "x", lineno=1)]) return code def test_split_block(self): @@ -522,9 +512,7 @@ def test_split_block_dont_split(self): # FIXME: is it really useful to support that? block = code.split_block(code[0], 0) self.assertIs(block, code[0]) - self.assertBlocksEqual( - code, [Instr("LOAD_CONST", 1, lineno=1), Instr("STORE_NAME", "x", lineno=1)] - ) + self.assertBlocksEqual(code, [Instr("LOAD_CONST", 1, lineno=1), Instr("STORE_NAME", "x", lineno=1)]) def test_split_block_error(self): code = self.sample_code() @@ -555,9 +543,7 @@ def test_to_code(self): Instr("POP_JUMP_IF_FALSE", block2, lineno=4), ] ) - block1.extend( - [Instr("LOAD_FAST", "arg", lineno=5), Instr("STORE_FAST", "x", lineno=5)] - ) + block1.extend([Instr("LOAD_FAST", "arg", lineno=5), Instr("STORE_FAST", "x", lineno=5)]) block2.extend( [ Instr("LOAD_CONST", 3, lineno=6), @@ -569,13 +555,9 @@ def test_to_code(self): if OFFSET_AS_INSTRUCTION: # The argument of the jump is divided by 2 - expected = ( - b"|\x05" b"r\x04" b"|\x00" b"}\x05" b"d\x01" b"}\x05" b"|\x05" b"S\x00" - ) + expected = b"|\x05" b"r\x04" b"|\x00" b"}\x05" b"d\x01" b"}\x05" b"|\x05" b"S\x00" else: - expected = ( - b"|\x05" b"r\x08" b"|\x00" b"}\x05" b"d\x01" b"}\x05" b"|\x05" b"S\x00" - ) + expected = b"|\x05" b"r\x08" b"|\x00" b"}\x05" b"d\x01" b"}\x05" b"|\x05" b"S\x00" code = bytecode.to_code() self.assertEqual(code.co_consts, (None, 3)) @@ -589,9 +571,7 @@ def test_to_code(self): self.assertEqual(code.co_flags, 0x43) self.assertEqual(code.co_code, expected) self.assertEqual(code.co_names, ()) - self.assertEqual( - code.co_varnames, ("arg", "arg2", "arg3", "kwonly", "kwonly2", "x") - ) + self.assertEqual(code.co_varnames, ("arg", "arg2", "arg3", "kwonly", "kwonly2", "x")) self.assertEqual(code.co_filename, "hello.py") self.assertEqual(code.co_name, "func") self.assertEqual(code.co_firstlineno, 3) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py index 6938bd1bf..4820e875d 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_code.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") import unittest from _pydevd_frame_eval.vendored.bytecode import ConcreteBytecode, Bytecode, ControlFlowGraph diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py index 510f6cd55..f1fe5e6b7 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_concrete.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import opcode import sys @@ -167,9 +167,7 @@ def test_get_jump_target(self): self.assertEqual(jump_abs.get_jump_target(100), 3) jump_forward = ConcreteInstr("JUMP_FORWARD", 5) - self.assertEqual( - jump_forward.get_jump_target(10), 16 if OFFSET_AS_INSTRUCTION else 17 - ) + self.assertEqual(jump_forward.get_jump_target(10), 16 if OFFSET_AS_INSTRUCTION else 17) class ConcreteBytecodeTests(TestCase): @@ -241,7 +239,6 @@ def test_invalid_types(self): ConcreteBytecode([Label()]) def test_to_code_lnotab(self): - # We use an actual function for the simple case to # ensure we get lnotab right def f(): @@ -454,9 +451,7 @@ def test_load_classderef(self): concrete = ConcreteBytecode() concrete.cellvars = ["__class__"] concrete.freevars = ["__class__"] - concrete.extend( - [ConcreteInstr("LOAD_CLASSDEREF", 1), ConcreteInstr("STORE_DEREF", 1)] - ) + concrete.extend([ConcreteInstr("LOAD_CLASSDEREF", 1), ConcreteInstr("STORE_DEREF", 1)]) bytecode = concrete.to_bytecode() self.assertEqual(bytecode.freevars, ["__class__"]) @@ -582,11 +577,7 @@ def test_extended_arg(self): # Create a code object from arbitrary bytecode co_code = b"\x90\x12\x904\x90\xabd\xcd" code = get_code("x=1") - args = ( - (code.co_argcount,) - if sys.version_info < (3, 8) - else (code.co_argcount, code.co_posonlyargcount) - ) + args = (code.co_argcount,) if sys.version_info < (3, 8) else (code.co_argcount, code.co_posonlyargcount) args += ( code.co_kwonlyargcount, code.co_nlocals, @@ -608,9 +599,7 @@ def test_extended_arg(self): # without EXTENDED_ARG opcode bytecode = ConcreteBytecode.from_code(code) - self.assertListEqual( - list(bytecode), [ConcreteInstr("LOAD_CONST", 0x1234ABCD, lineno=1)] - ) + self.assertListEqual(list(bytecode), [ConcreteInstr("LOAD_CONST", 0x1234ABCD, lineno=1)]) # with EXTENDED_ARG opcode bytecode = ConcreteBytecode.from_code(code, extended_arg=True) @@ -655,10 +644,7 @@ def foo(x: int, y: int): ConcreteInstr("LOAD_NAME", 0, lineno=1), ConcreteInstr("BUILD_TUPLE", 4, lineno=1), ] - elif ( - sys.version_info >= (3, 7) - and concrete.flags & CompilerFlags.FUTURE_ANNOTATIONS - ): + elif sys.version_info >= (3, 7) and concrete.flags & CompilerFlags.FUTURE_ANNOTATIONS: func_code = concrete.consts[2] names = ["foo"] consts = ["int", ("x", "y"), func_code, "foo", None] @@ -726,9 +712,7 @@ def test(): return q, r, s, t cpython_stacksize = test.__code__.co_stacksize - test.__code__ = ConcreteBytecode.from_code( - test.__code__, extended_arg=True - ).to_code() + test.__code__ = ConcreteBytecode.from_code(test.__code__, extended_arg=True).to_code() self.assertEqual(test.__code__.co_stacksize, cpython_stacksize) self.assertEqual(test(), (1, 2, [3, 4, 5], 6)) @@ -997,9 +981,7 @@ def test(): return var - test.__code__ = ConcreteBytecode.from_code( - test.__code__, extended_arg=True - ).to_code() + test.__code__ = ConcreteBytecode.from_code(test.__code__, extended_arg=True).to_code() self.assertEqual(test.__code__.co_stacksize, 1) self.assertEqual(test(), 259) @@ -1130,9 +1112,7 @@ def test_label2(self): concrete = bytecode.to_concrete_bytecode() expected = [ ConcreteInstr("LOAD_NAME", 0, lineno=1), - ConcreteInstr( - "POP_JUMP_IF_FALSE", 7 if OFFSET_AS_INSTRUCTION else 14, lineno=1 - ), + ConcreteInstr("POP_JUMP_IF_FALSE", 7 if OFFSET_AS_INSTRUCTION else 14, lineno=1), ConcreteInstr("LOAD_CONST", 0, lineno=2), ConcreteInstr("STORE_NAME", 1, lineno=2), ConcreteInstr("JUMP_FORWARD", 2 if OFFSET_AS_INSTRUCTION else 4, lineno=2), @@ -1205,9 +1185,7 @@ def func(x): self.assertEqual(func(18), -1) # Ensure that we properly round trip in such cases - self.assertEqual( - ConcreteBytecode.from_code(code).to_code().co_code, code.co_code - ) + self.assertEqual(ConcreteBytecode.from_code(code).to_code().co_code, code.co_code) def test_setlineno(self): # x = 7 @@ -1259,7 +1237,7 @@ def assemble(self): # (invalid) code using jumps > 0xffff to test extended arg label = Label() - nb_nop = 2 ** 16 + nb_nop = 2**16 code = Bytecode( [ Instr("JUMP_ABSOLUTE", label), @@ -1304,9 +1282,7 @@ def test_jumps(self): code = code.to_concrete_bytecode() expected = [ ConcreteInstr("LOAD_NAME", 0, lineno=1), - ConcreteInstr( - "POP_JUMP_IF_FALSE", 5 if OFFSET_AS_INSTRUCTION else 10, lineno=1 - ), + ConcreteInstr("POP_JUMP_IF_FALSE", 5 if OFFSET_AS_INSTRUCTION else 10, lineno=1), ConcreteInstr("LOAD_CONST", 0, lineno=2), ConcreteInstr("STORE_NAME", 1, lineno=2), ConcreteInstr("JUMP_FORWARD", 2 if OFFSET_AS_INSTRUCTION else 4, lineno=2), @@ -1448,10 +1424,7 @@ def test_extreme_compute_jumps_convergence(self): labels = [Label() for x in range(0, 3 * N)] code = Bytecode() - code.extend( - Instr("JUMP_FORWARD", labels[len(labels) - x - 1]) - for x in range(0, len(labels)) - ) + code.extend(Instr("JUMP_FORWARD", labels[len(labels) - x - 1]) for x in range(0, len(labels))) end_of_jumps = len(code) code.extend(Instr(nop) for x in range(0, N)) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py index b7744fbd0..08c7cb264 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_flags.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import unittest from _pydevd_frame_eval.vendored.bytecode import ( @@ -21,7 +21,6 @@ def test_type_validation_on_inference(self): infer_flags(1) def test_flag_inference(self): - # Check no loss of non-infered flags code = ControlFlowGraph() code.flags |= ( @@ -122,7 +121,6 @@ def test_async_gen_flags(self): # Test inference in the presence of pre-existing flags for is_async in (None, True): - # Infer generator code = ConcreteBytecode() code.append(ConcreteInstr("YIELD_VALUE")) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py index ca4a66a73..bc5db5257 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_instr.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import opcode import unittest @@ -78,7 +78,6 @@ def test_constructor(self): Instr("xxx") def test_repr(self): - # No arg r = repr(Instr("NOP", lineno=10)) self.assertIn("NOP", r) @@ -253,9 +252,7 @@ def test_const_key_equal(self): self.assertNotEqual(Instr("LOAD_CONST", 0), Instr("LOAD_CONST", 0.0)) # float: -0.0 == +0.0 - self.assertNotEqual( - Instr("LOAD_CONST", neg_zero), Instr("LOAD_CONST", pos_zero) - ) + self.assertNotEqual(Instr("LOAD_CONST", neg_zero), Instr("LOAD_CONST", pos_zero)) # complex self.assertNotEqual( @@ -273,14 +270,10 @@ def test_const_key_equal(self): nested_tuple1 = (nested_tuple1,) nested_tuple2 = (0.0,) nested_tuple2 = (nested_tuple2,) - self.assertNotEqual( - Instr("LOAD_CONST", nested_tuple1), Instr("LOAD_CONST", nested_tuple2) - ) + self.assertNotEqual(Instr("LOAD_CONST", nested_tuple1), Instr("LOAD_CONST", nested_tuple2)) # frozenset - self.assertNotEqual( - Instr("LOAD_CONST", frozenset({0})), Instr("LOAD_CONST", frozenset({0.0})) - ) + self.assertNotEqual(Instr("LOAD_CONST", frozenset({0})), Instr("LOAD_CONST", frozenset({0.0}))) def test_stack_effects(self): # Verify all opcodes are handled and that "jump=None" really returns @@ -322,7 +315,7 @@ def check(instr): # (As a result we can calculate stack_effect for # any LOAD_CONST instructions, even for large integers) - for arg in 2 ** 31, 2 ** 32, 2 ** 63, 2 ** 64, -1: + for arg in 2**31, 2**32, 2**63, 2**64, -1: self.assertEqual(Instr("LOAD_CONST", arg).stack_effect(), 1) def test_code_object_containing_mutable_data(self): @@ -340,11 +333,7 @@ def g(): mutable_datum = [4, 2] for each in f_code: - if ( - isinstance(each, Instr) - and each.name == "LOAD_CONST" - and isinstance(each.arg, CodeType) - ): + if isinstance(each, Instr) and each.name == "LOAD_CONST" and isinstance(each.arg, CodeType): instr_load_code = each break diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py index 5f4c0636a..6a700e931 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_misc.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") #!/usr/bin/env python3 import contextlib import io @@ -62,11 +62,7 @@ def func(test): LOAD_CONST 3 RETURN_VALUE - """[ - 1: - ].rstrip( - " " - ) + """[1:].rstrip(" ") self.check_dump_bytecode(code, expected) # with line numbers @@ -90,11 +86,7 @@ def func(test): L. 6 14: LOAD_CONST 3 15: RETURN_VALUE - """[ - 1: - ].rstrip( - " " - ) + """[1:].rstrip(" ") self.check_dump_bytecode(code, expected, lineno=True) def test_bytecode_broken_label(self): @@ -225,9 +217,7 @@ def func(test): 22 RETURN_VALUE 24 LOAD_CONST 3 26 RETURN_VALUE -""".lstrip( - "\n" - ) +""".lstrip("\n") self.check_dump_bytecode(code, expected) # with line numbers @@ -246,9 +236,7 @@ def func(test): 22: RETURN_VALUE L. 6 24: LOAD_CONST 3 26: RETURN_VALUE -""".lstrip( - "\n" - ) +""".lstrip("\n") self.check_dump_bytecode(code, expected, lineno=True) def test_type_validation(self): diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py index 387a7829f..4689b28fd 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/test_peephole_opt.py @@ -1,8 +1,8 @@ - import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') + +pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6") import sys import unittest from _pydevd_frame_eval.vendored.bytecode import Label, Instr, Compare, Bytecode, ControlFlowGraph @@ -12,7 +12,6 @@ class Tests(TestCase): - maxDiff = 80 * 100 def optimize_blocks(self, code): @@ -51,9 +50,7 @@ def check_dont_optimize(self, code): def test_unary_op(self): def check_unary_op(op, value, result): - code = Bytecode( - [Instr("LOAD_CONST", value), Instr(op), Instr("STORE_NAME", "x")] - ) + code = Bytecode([Instr("LOAD_CONST", value), Instr(op), Instr("STORE_NAME", "x")]) self.check(code, Instr("LOAD_CONST", result), Instr("STORE_NAME", "x")) check_unary_op("UNARY_POSITIVE", 2, 2) @@ -520,9 +517,7 @@ def test_return_value(self): ] ) code = ControlFlowGraph.from_bytecode(code) - self.check( - code, Instr("LOAD_CONST", 4, lineno=2), Instr("RETURN_VALUE", lineno=2) - ) + self.check(code, Instr("LOAD_CONST", 4, lineno=2), Instr("RETURN_VALUE", lineno=2)) # return+return + return+return: remove second and fourth return # @@ -544,9 +539,7 @@ def test_return_value(self): ] ) code = ControlFlowGraph.from_bytecode(code) - self.check( - code, Instr("LOAD_CONST", 4, lineno=2), Instr("RETURN_VALUE", lineno=2) - ) + self.check(code, Instr("LOAD_CONST", 4, lineno=2), Instr("RETURN_VALUE", lineno=2)) # return + JUMP_ABSOLUTE: remove JUMP_ABSOLUTE # while 1: @@ -594,9 +587,7 @@ def test_return_value(self): ) code = ControlFlowGraph.from_bytecode(code) - self.check( - code, Instr("LOAD_CONST", 7, lineno=3), Instr("RETURN_VALUE", lineno=3) - ) + self.check(code, Instr("LOAD_CONST", 7, lineno=3), Instr("RETURN_VALUE", lineno=3)) def test_not_jump_if_false(self): # Replace UNARY_NOT+POP_JUMP_IF_FALSE with POP_JUMP_IF_TRUE @@ -905,9 +896,7 @@ def test_jump_if_false_to_jump_if_false(self): ) def test_nop(self): - code = Bytecode( - [Instr("LOAD_NAME", "x"), Instr("NOP"), Instr("STORE_NAME", "test")] - ) + code = Bytecode([Instr("LOAD_NAME", "x"), Instr("NOP"), Instr("STORE_NAME", "test")]) self.check(code, Instr("LOAD_NAME", "x"), Instr("STORE_NAME", "test")) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py index b64754346..4d6be6c59 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/bytecode/tests/util_annotation.py @@ -8,9 +8,7 @@ def get_code(source, *, filename="", function=False): source = textwrap.dedent(source).strip() code = compile(source, filename, "exec") if function: - sub_code = [ - const for const in code.co_consts if isinstance(const, types.CodeType) - ] + sub_code = [const for const in code.co_consts if isinstance(const, types.CodeType)] if len(sub_code) != 1: raise ValueError("unable to find function code") code = sub_code[0] diff --git a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py index 6b3d87ff8..73a7c79bf 100644 --- a/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py +++ b/src/debugpy/_vendored/pydevd/_pydevd_frame_eval/vendored/pydevd_fix_code.py @@ -1,27 +1,21 @@ def _fix_contents(filename, contents): import re - contents = re.sub( - r"from bytecode", r'from _pydevd_frame_eval.vendored.bytecode', contents, flags=re.MULTILINE - ) + contents = re.sub(r"from bytecode", r"from _pydevd_frame_eval.vendored.bytecode", contents, flags=re.MULTILINE) - contents = re.sub( - r"import bytecode", r'from _pydevd_frame_eval.vendored import bytecode', contents, flags=re.MULTILINE - ) + contents = re.sub(r"import bytecode", r"from _pydevd_frame_eval.vendored import bytecode", contents, flags=re.MULTILINE) # This test will import the wrong setup (we're not interested in it). - contents = re.sub( - r"def test_version\(self\):", r'def skip_test_version(self):', contents, flags=re.MULTILINE - ) + contents = re.sub(r"def test_version\(self\):", r"def skip_test_version(self):", contents, flags=re.MULTILINE) - if filename.startswith('test_'): - if 'pytestmark' not in contents: - pytest_mark = ''' + if filename.startswith("test_"): + if "pytestmark" not in contents: + pytest_mark = """ import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON from tests_python.debug_constants import TEST_CYTHON pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason='Requires CPython >= 3.6') -''' +""" contents = pytest_mark + contents return contents @@ -33,18 +27,19 @@ def main(): for root, dirs, files in os.walk(os.path.dirname(__file__)): path = root.split(os.sep) for filename in files: - if filename.endswith('.py') and filename != 'pydevd_fix_code.py': - with open(os.path.join(root, filename), 'r') as stream: + if filename.endswith(".py") and filename != "pydevd_fix_code.py": + with open(os.path.join(root, filename), "r") as stream: contents = stream.read() new_contents = _fix_contents(filename, contents) if contents != new_contents: - print('fixed ', os.path.join(root, filename)) - with open(os.path.join(root, filename), 'w') as stream: + print("fixed ", os.path.join(root, filename)) + with open(os.path.join(root, filename), "w") as stream: stream.write(new_contents) + # print(len(path) * '---', filename) -if __name__ == '__main__': - main() \ No newline at end of file +if __name__ == "__main__": + main() diff --git a/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py new file mode 100644 index 000000000..ec7adff8d --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring.py @@ -0,0 +1,1927 @@ +# Copyright: Brainwy Software +# +# License: EPL + +from collections import namedtuple +import dis +import os +import re +import sys +from _pydev_bundle._pydev_saved_modules import threading +from types import CodeType, FrameType +from typing import Dict, Optional, Tuple, Any +from os.path import basename, splitext + +from _pydev_bundle import pydev_log +from _pydevd_bundle import pydevd_dont_trace +from _pydevd_bundle.pydevd_constants import ( + GlobalDebuggerHolder, + ForkSafeLock, + PYDEVD_IPYTHON_CONTEXT, + EXCEPTION_TYPE_USER_UNHANDLED, + RETURN_VALUES_DICT, + PYTHON_SUSPEND, +) +from _pydevd_bundle.pydevd_frame_utils import short_tb, flag_as_unwinding, short_frame +from pydevd_file_utils import ( + NORM_PATHS_AND_BASE_CONTAINER, + get_abs_path_real_path_and_base_from_file, + get_abs_path_real_path_and_base_from_frame, +) +from _pydevd_bundle.pydevd_trace_dispatch import should_stop_on_exception, handle_exception +from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED +from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception +from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception +from _pydevd_bundle.pydevd_utils import get_clsname_for_code + +# fmt: off +# IFDEF CYTHON +# import cython +# from _pydevd_bundle.pydevd_cython cimport set_additional_thread_info, any_thread_stepping, PyDBAdditionalThreadInfo +# ELSE +from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info, any_thread_stepping, PyDBAdditionalThreadInfo +# ENDIF +# fmt: on + +try: + from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset +except ImportError: + + def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): + return None + + +if hasattr(sys, "monitoring"): + DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + monitor = sys.monitoring + +_thread_local_info = threading.local() +_get_ident = threading.get_ident +_thread_active = threading._active # noqa + +STATE_SUSPEND: int = 2 +CMD_STEP_INTO: int = 107 +CMD_STEP_OVER: int = 108 +CMD_STEP_OVER_MY_CODE: int = 159 +CMD_STEP_INTO_MY_CODE: int = 144 +CMD_STEP_INTO_COROUTINE: int = 206 +CMD_SMART_STEP_INTO: int = 128 +can_skip: bool = True +CMD_STEP_RETURN: int = 109 +CMD_STEP_OVER_MY_CODE: int = 159 +CMD_STEP_RETURN_MY_CODE: int = 160 +CMD_SET_BREAK: int = 111 +CMD_SET_FUNCTION_BREAK: int = 208 +STATE_RUN: int = 1 +STATE_SUSPEND: int = 2 + +IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") +DEBUG_START = ("pydevd.py", "run") +DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") +TRACE_PROPERTY = "pydevd_traceproperty.py" + +_global_notify_skipped_step_in = False +_global_notify_skipped_step_in_lock = ForkSafeLock() + + +# fmt: off +# IFDEF CYTHON +# cdef _notify_skipped_step_in_because_of_filters(py_db, frame): +# ELSE +def _notify_skipped_step_in_because_of_filters(py_db, frame): +# ENDIF +# fmt: on + global _global_notify_skipped_step_in + + with _global_notify_skipped_step_in_lock: + if _global_notify_skipped_step_in: + # Check with lock in place (callers should actually have checked + # before without the lock in place due to performance). + return + _global_notify_skipped_step_in = True + py_db.notify_skipped_step_in_because_of_filters(frame) + + +# Easy for cython: always get the one at level 0 as that's the caller frame +# (on Python we have to control the depth to get the first user frame). +# fmt: off +# IFDEF CYTHON +# @cython.cfunc +# def _getframe(depth=0): +# return sys._getframe() +# ELSE +_getframe = sys._getframe +# ENDIF +# fmt: on + + +# fmt: off +# IFDEF CYTHON +# cdef _get_bootstrap_frame(depth): +# ELSE +def _get_bootstrap_frame(depth: int) -> Tuple[Optional[FrameType], bool]: +# ENDIF +# fmt: on + try: + return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + except: + frame = _getframe(depth) + f_bootstrap = frame + # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + is_bootstrap_frame_internal = False + while f_bootstrap is not None: + filename = f_bootstrap.f_code.co_filename + name = splitext(basename(filename))[0] + + if name == "threading": + if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + # We need __bootstrap_inner, not __bootstrap. + return None, False + + elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + is_bootstrap_frame_internal = True + break + + elif name == "pydev_monkey": + if f_bootstrap.f_code.co_name == "__call__": + is_bootstrap_frame_internal = True + break + + elif name == "pydevd": + if f_bootstrap.f_code.co_name in ("run", "main"): + # We need to get to _exec + return None, False + + if f_bootstrap.f_code.co_name == "_exec": + is_bootstrap_frame_internal = True + break + + elif f_bootstrap.f_back is None: + break + + f_bootstrap = f_bootstrap.f_back + + if f_bootstrap is not None: + _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + _thread_local_info.f_bootstrap = f_bootstrap + return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + + return f_bootstrap, is_bootstrap_frame_internal + +# fmt: off +# IFDEF CYTHON +# cdef _is_user_frame(frame: FrameType): +# ELSE +def _is_user_frame(frame: FrameType) -> bool: +# ENDIF +# fmt: on + if frame is None: + return False + + filename = frame.f_code.co_filename + name = splitext(basename(filename))[0] + + # When the frame is the bootstrap it is not a user frame. + if name == "threading": + if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): + return False + + elif name == "pydev_monkey": + if frame.f_code.co_name == "__call__": + return False + + elif name == "pydevd": + if frame.f_code.co_name in ("_exec", "run", "main"): + return False + + elif name == "pydevd_runpy": + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + elif filename == "": + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + elif name == 'runpy': + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + return True + +# fmt: off +# IFDEF CYTHON +# cdef _is_last_user_frame(frame: FrameType): +# ELSE +def _is_last_user_frame(frame: FrameType) -> bool: +# ENDIF +# fmt: on + # If this frame is not a user frame, then it can't be the last one + if not _is_user_frame(frame): + return False + + # If this frame is the last frame, then it is the last one + if frame.f_back is None: + return True + + # If the next frame is not a user frame, then this frame is the last one + if not _is_user_frame(frame.f_back): + return True + + # Otherwise if the next frame is a user frame, then this frame is not the last one + return False + +# fmt: off +# IFDEF CYTHON +# cdef class ThreadInfo: +# cdef unsigned long thread_ident +# cdef PyDBAdditionalThreadInfo additional_info +# thread: threading.Thread +# trace: bool +# ELSE +class ThreadInfo: + additional_info: PyDBAdditionalThreadInfo + thread_ident: int + thread: threading.Thread + trace: bool +# ENDIF +# fmt: on + + # fmt: off + # IFDEF CYTHON + # def __init__(self, thread, unsigned long thread_ident, bint trace, PyDBAdditionalThreadInfo additional_info): + # ELSE + def __init__(self, thread: threading.Thread, thread_ident: int, trace: bool, additional_info: PyDBAdditionalThreadInfo): + # ENDIF + # fmt: on + self.thread = thread + self.thread_ident = thread_ident + self.additional_info = additional_info + self.trace = trace + + +class _DeleteDummyThreadOnDel: + """ + Helper class to remove a dummy thread from threading._active on __del__. + """ + + def __init__(self, dummy_thread): + self._dummy_thread = dummy_thread + self._tident = dummy_thread.ident + # Put the thread on a thread local variable so that when + # the related thread finishes this instance is collected. + # + # Note: no other references to this instance may be created. + # If any client code creates a reference to this instance, + # the related _DummyThread will be kept forever! + _thread_local_info._track_dummy_thread_ref = self + + def __del__(self): + with threading._active_limbo_lock: + if _thread_active.get(self._tident) is self._dummy_thread: + _thread_active.pop(self._tident, None) + + +# fmt: off +# IFDEF CYTHON +# cdef _create_thread_info(depth): +# cdef unsigned long thread_ident +# ELSE +def _create_thread_info(depth): +# ENDIF +# fmt: on + # Don't call threading.currentThread because if we're too early in the process + # we may create a dummy thread. + thread_ident = _get_ident() + + f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + if f_bootstrap_frame is None: + return None # Case for threading when it's still in bootstrap or early in pydevd. + + if is_bootstrap_frame_internal: + t = None + if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + t = f_bootstrap_frame.f_locals.get("self") + if not isinstance(t, threading.Thread): + t = None + + elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + t = f_bootstrap_frame.f_locals.get("t") + if not isinstance(t, threading.Thread): + t = None + + else: + # This means that the first frame is not in threading nor in pydevd. + # In practice this means it's some unmanaged thread, so, creating + # a dummy thread is ok in this use-case. + t = threading.current_thread() + + if t is None: + t = _thread_active.get(thread_ident) + + if isinstance(t, threading._DummyThread): + _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + + if t is None: + return None + + if getattr(t, "is_pydev_daemon_thread", False): + return ThreadInfo(t, thread_ident, False, None) + else: + try: + additional_info = t.additional_info + if additional_info is None: + raise AttributeError() + except: + additional_info = set_additional_thread_info(t) + return ThreadInfo(t, thread_ident, True, additional_info) + + +# fmt: off +# IFDEF CYTHON +# cdef class FuncCodeInfo: +# cdef str co_filename +# cdef str canonical_normalized_filename +# cdef str abs_path_filename +# cdef bint always_skip_code +# cdef bint breakpoint_found +# cdef bint function_breakpoint_found +# cdef bint plugin_line_breakpoint_found +# cdef bint plugin_call_breakpoint_found +# cdef bint plugin_line_stepping +# cdef bint plugin_call_stepping +# cdef bint plugin_return_stepping +# cdef int pydb_mtime +# cdef dict bp_line_to_breakpoint +# cdef object function_breakpoint +# cdef bint always_filtered_out +# cdef bint filtered_out_force_checked +# cdef object try_except_container_obj +# cdef object code_obj +# cdef str co_name +# ELSE +class FuncCodeInfo: +# ENDIF +# fmt: on + def __init__(self): + self.co_filename: str = "" + self.canonical_normalized_filename: str = "" + self.abs_path_filename: str = "" + + # These is never seen and we never stop, even if it's a callback coming + # from user code (these are completely invisible to the debugging tracing). + self.always_skip_code: bool = False + + self.breakpoint_found: bool = False + self.function_breakpoint_found: bool = False + + # A plugin can choose whether to stop on function calls or line events. + self.plugin_line_breakpoint_found: bool = False + self.plugin_call_breakpoint_found: bool = False + + self.plugin_line_stepping: bool = False + self.plugin_call_stepping: bool = False + self.plugin_return_stepping: bool = False + + # When pydb_mtime != PyDb.mtime the validity of breakpoints have + # to be re-evaluated (if invalid a new FuncCodeInfo must be created and + # tracing can't be disabled for the related frames). + self.pydb_mtime: int = -1 + + self.bp_line_to_breakpoint: Dict[int, Any] = {} + self.function_breakpoint = None + + # This means some file is globally filtered out during debugging. Note + # that we may still need to pause in it (in a step return to user code, + # we may need to track this one). + self.always_filtered_out: bool = False + + # This should be used to filter code in a CMD_STEP_INTO_MY_CODE + # (and other XXX_MY_CODE variants). + self.filtered_out_force_checked: bool = False + + self.try_except_container_obj: Optional[_TryExceptContainerObj] = None + self.code_obj: CodeType = None + self.co_name: str = "" + + def get_line_of_offset(self, offset): + for start, end, line in self.code_obj.co_lines(): + if offset >= start and offset <= end: + return line + return -1 + + +# fmt: off +# IFDEF CYTHON +# cdef _get_thread_info(bint create, int depth): +# ELSE +def _get_thread_info(create: bool, depth: int) -> Optional[ThreadInfo]: +# ENDIF +# fmt: on + """ + Provides thread-related info. + + May return None if the thread is still not active. + """ + try: + # Note: changing to a `dict[thread.ident] = thread_info` had almost no + # effect in the performance. + return _thread_local_info.thread_info + except: + if not create: + return None + thread_info = _create_thread_info(depth + 1) + if thread_info is None: + return None + + _thread_local_info.thread_info = thread_info + return _thread_local_info.thread_info + + +_CodeLineInfo = namedtuple("_CodeLineInfo", "line_to_offset, first_line, last_line") + + +# Note: this method has a version in cython too +# fmt: off +# IFDEF CYTHON +# cdef _get_code_line_info(code_obj, _cache={}): +# ELSE +def _get_code_line_info(code_obj, _cache={}): +# ENDIF +# fmt: on + try: + return _cache[code_obj] + except: + line_to_offset = {} + first_line = None + last_line = None + + for offset, line in dis.findlinestarts(code_obj): + line_to_offset[line] = offset + + if line_to_offset: + first_line = min(line_to_offset) + last_line = max(line_to_offset) + ret = _CodeLineInfo(line_to_offset, first_line, last_line) + _cache[code_obj] = ret + return ret + + +_code_to_func_code_info_cache: Dict[CodeType, "FuncCodeInfo"] = {} + + +# fmt: off +# IFDEF CYTHON +# cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): +# cdef FuncCodeInfo func_code_info +# ELSE +def _get_func_code_info(code_obj, frame_or_depth) -> FuncCodeInfo: +# ENDIF +# fmt: on + """ + Provides code-object related info. + + Note that it contains informations on the breakpoints for a given function. + If breakpoints change a new FuncCodeInfo instance will be created. + + Note that this can be called by any thread. + """ + py_db = GlobalDebuggerHolder.global_dbg + if py_db is None: + return None + + func_code_info = _code_to_func_code_info_cache.get(code_obj) + if func_code_info is not None: + if func_code_info.pydb_mtime == py_db.mtime: + # if DEBUG: + # print('_get_func_code_info: matched mtime', key, code_obj) + return func_code_info + + # fmt: off + # IFDEF CYTHON + # cdef dict cache_file_type + # cdef tuple cache_file_type_key + # cdef PyCodeObject * code + # cdef str co_filename + # cdef str co_name + # code = code_obj + # co_filename = code.co_filename + # co_name = code.co_name + # ELSE + cache_file_type: dict + cache_file_type_key: tuple + code = code_obj + co_filename: str = code.co_filename + co_name: str = code.co_name + # ENDIF + # fmt: on + + # print('_get_func_code_info: new (mtime did not match)', key, code_obj) + + func_code_info = FuncCodeInfo() + func_code_info.code_obj = code_obj + code_line_info = _get_code_line_info(code_obj) + line_to_offset = code_line_info.line_to_offset + func_code_info.pydb_mtime = py_db.mtime + + func_code_info.co_filename = co_filename + func_code_info.co_name = co_name + + # Compute whether to always skip this. + try: + abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + except: + abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) + + func_code_info.abs_path_filename = abs_path_real_path_and_base[0] + func_code_info.canonical_normalized_filename = abs_path_real_path_and_base[1] + + frame = None + cache_file_type = py_db.get_cache_file_type() + # Note: this cache key must be the same from PyDB.get_file_type() -- see it for comments + # on the cache. + cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + try: + file_type = cache_file_type[cache_file_type_key] # Make it faster + except: + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj, "%s != %s" % (frame.f_code, code_obj) + + file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd + + if file_type is not None: + func_code_info.always_skip_code = True + func_code_info.always_filtered_out = True + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + # still not set, check for dont trace comments. + if pydevd_dont_trace.should_trace_hook is not None: + # I.e.: cache the result skip (no need to evaluate the same frame multiple times). + # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + # Which will be handled by this frame is read-only, so, we can cache it safely. + if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj + + func_code_info.always_filtered_out = True + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj + + func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) + + if py_db.is_files_filter_enabled: + func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + if func_code_info.always_filtered_out: + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + else: + func_code_info.always_filtered_out = False + + # Handle regular breakpoints + breakpoints: dict = py_db.breakpoints.get(func_code_info.canonical_normalized_filename) + function_breakpoint: object = py_db.function_breakpoint_name_to_breakpoint.get(func_code_info.co_name) + # print('\n---') + # print(py_db.breakpoints) + # print(func_code_info.canonical_normalized_filename) + # print(py_db.breakpoints.get(func_code_info.canonical_normalized_filename)) + if function_breakpoint: + # Go directly into tracing mode + func_code_info.function_breakpoint_found = True + func_code_info.function_breakpoint = function_breakpoint + + if breakpoints: + # if DEBUG: + # print('found breakpoints', code_obj_py.co_name, breakpoints) + + bp_line_to_breakpoint = {} + + for breakpoint_line, bp in breakpoints.items(): + if breakpoint_line in line_to_offset: + bp_line_to_breakpoint[breakpoint_line] = bp + + func_code_info.breakpoint_found = bool(bp_line_to_breakpoint) + func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint + + if py_db.plugin: + plugin_manager = py_db.plugin + is_tracked_frame = plugin_manager.is_tracked_frame(frame) + + if is_tracked_frame: + if py_db.has_plugin_line_breaks: + required_events_breakpoint = plugin_manager.required_events_breakpoint() + func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint + + required_events_stepping = plugin_manager.required_events_stepping() + func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping + func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping + func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping + + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + +# fmt: off +# IFDEF CYTHON +# cdef _enable_line_tracing(code): +# ELSE +def _enable_line_tracing(code): +# ENDIF +# fmt: on + # print('enable line tracing', code) + _ensure_monitoring() + events = monitor.get_local_events(DEBUGGER_ID, code) + monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.LINE | monitor.events.JUMP) + + +# fmt: off +# IFDEF CYTHON +# cdef _enable_return_tracing(code): +# ELSE +def _enable_return_tracing(code): +# ENDIF +# fmt: on + # print('enable return tracing', code) + _ensure_monitoring() + events = monitor.get_local_events(DEBUGGER_ID, code) + monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.PY_RETURN) + + +# fmt: off +# IFDEF CYTHON +# cpdef disable_code_tracing(code): +# ELSE +def disable_code_tracing(code): +# ENDIF +# fmt: on + _ensure_monitoring() + monitor.set_local_events(DEBUGGER_ID, code, 0) + + +# fmt: off +# IFDEF CYTHON +# cpdef enable_code_tracing(unsigned long thread_ident, code, frame): +# ELSE +def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: +# ENDIF +# fmt: on + """ + Note: this must enable code tracing for the given code/frame. + + The frame can be from any thread! + + :return: Whether code tracing was added in this function to the given code. + """ + # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + # if DEBUG: + # print('==== enable code tracing', code.co_filename[-30:], code.co_name) + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return False + + func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) + if func_code_info.always_skip_code: + # if DEBUG: + # print('disable (always skip)') + return False + + try: + thread = threading._active.get(thread_ident) + if thread is None: + return False + additional_info = set_additional_thread_info(thread) + except: + # Cannot set based on stepping + return False + + return _enable_code_tracing(py_db, additional_info, func_code_info, code, frame, False) + + +# fmt: off +# IFDEF CYTHON +# cdef bint _enable_code_tracing(py_db, PyDBAdditionalThreadInfo additional_info, FuncCodeInfo func_code_info, code, frame, bint warn_on_filtered_out): +# cdef int step_cmd +# cdef bint is_stepping +# cdef bint code_tracing_added +# ELSE +def _enable_code_tracing(py_db, additional_info, func_code_info: FuncCodeInfo, code, frame, warn_on_filtered_out) -> bool: +# ENDIF +# fmt: on + """ + :return: Whether code tracing was added in this function to the given code. + """ + # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + step_cmd = additional_info.pydev_step_cmd + is_stepping = step_cmd != -1 + code_tracing_added = False + + if func_code_info.always_filtered_out: + # if DEBUG: + # print('disable (always filtered out)') + if ( + warn_on_filtered_out + and is_stepping + and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + and not _global_notify_skipped_step_in + ): + _notify_skipped_step_in_because_of_filters(py_db, frame) + + if is_stepping: + # Tracing may be needed for return value + _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + code_tracing_added = True + return code_tracing_added + + if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: + _enable_line_tracing(code) + code_tracing_added = True + + if is_stepping: + _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + code_tracing_added = True + + return code_tracing_added + + +# fmt: off +# IFDEF CYTHON +# cdef _enable_step_tracing(py_db, code, step_cmd, PyDBAdditionalThreadInfo info, frame): +# ELSE +def _enable_step_tracing(py_db, code, step_cmd, info, frame): +# ENDIF +# fmt: on + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO): + # Stepping (must have line/return tracing enabled). + _enable_line_tracing(code) + _enable_return_tracing(code) + + elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): + _enable_return_tracing(code) + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + if _is_same_frame(info, info.pydev_step_stop, frame): + _enable_line_tracing(code) + + # Wee need to enable return tracing because if we have a return during a step over + # we need to stop too. + _enable_return_tracing(code) + elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): + # Show return values on step over. + _enable_return_tracing(code) + + +# fmt: off +# IFDEF CYTHON +# cdef class _TryExceptContainerObj: +# cdef list try_except_infos +# ELSE +class _TryExceptContainerObj: +# ENDIF +# fmt: on + """ + A dumb container object just to contain the try..except info when needed. Meant to be + persistent among multiple PyDBFrames to the same code object. + """ + + # fmt: off + # IFDEF CYTHON + # def __init__(self, list try_except_infos): + # self.try_except_infos = try_except_infos + # ELSE + def __init__(self, try_except_infos): + self.try_except_infos = try_except_infos + + # ENDIF + # fmt: on + + +# fmt: off +# IFDEF CYTHON +# cdef _unwind_event(code, instruction, exc): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# ELSE +def _unwind_event(code, instruction, exc): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + frame = _getframe(1) + arg = (type(exc), exc, exc.__traceback__) + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return + + # print('_unwind_event', code, exc) + + has_caught_exception_breakpoint_in_pydb = ( + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) + + + if has_caught_exception_breakpoint_in_pydb: + _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( + py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + ) + if user_uncaught_exc_info: + # TODO: Check: this may no longer be needed as in the unwind we know it's + # an exception bubbling up (wait for all tests to pass to check it). + if func_code_info.try_except_container_obj is None: + container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) + func_code_info.try_except_container_obj = container_obj + + is_unhandled = is_unhandled_exception( + func_code_info.try_except_container_obj, py_db, frame, user_uncaught_exc_info[1], user_uncaught_exc_info[2] + ) + + if is_unhandled: + # print('stop in user uncaught') + handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + return + + break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + if break_on_uncaught_exceptions and _is_last_user_frame(frame): + stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) + + +# fmt: off +# IFDEF CYTHON +# cdef _raise_event(code, instruction, exc): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# ELSE +def _raise_event(code, instruction, exc): +# ENDIF +# fmt: on + """ + The way this should work is the following: when the user is using + pydevd to do the launch and we're on a managed stack, we should consider + unhandled only if it gets into a pydevd. If it's a thread, if it stops + inside the threading and if it's an unmanaged thread (i.e.: QThread) + then stop if it doesn't have a back frame. + + Note: unlike other events, this one is global and not per-code (so, + it cannot be individually enabled/disabled for a given code object). + """ + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + frame = _getframe(1) + arg = (type(exc), exc, exc.__traceback__) + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return + + # print('_raise_event --- ', code, exc) + + # Compute the previous exception info (if any). We use it to check if the exception + # should be stopped + prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None + should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( + py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info + ) + + # Save the current exception info for the next raise event. + _thread_local_info._user_uncaught_exc_info = _user_uncaught_exc_info + + # print('!!!! should_stop (in raise)', should_stop) + if should_stop: + handle_exception(py_db, thread_info.thread, frame, arg, EXCEPTION_TYPE_HANDLED) + + # Once we leave the raise event, we are no longer in the state of 'just_raised', so + # indicate that this traceback is for an exception in the unwinding state + flag_as_unwinding(exc.__traceback__) + + +# fmt: off +# IFDEF CYTHON +# cdef str get_func_name(frame): +# cdef str func_name +# ELSE +def get_func_name(frame): +# ENDIF +# fmt: on + code_obj = frame.f_code + func_name = code_obj.co_name + try: + cls_name = get_clsname_for_code(code_obj, frame) + if cls_name is not None: + return "%s.%s" % (cls_name, func_name) + else: + return func_name + except: + pydev_log.exception() + return func_name + + +# fmt: off +# IFDEF CYTHON +# cdef _show_return_values(frame, arg): +# ELSE +def _show_return_values(frame, arg): +# ENDIF +# fmt: on + try: + try: + f_locals_back = getattr(frame.f_back, "f_locals", None) + if f_locals_back is not None: + return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + if return_values_dict is None: + return_values_dict = {} + f_locals_back[RETURN_VALUES_DICT] = return_values_dict + name = get_func_name(frame) + return_values_dict[name] = arg + except: + pydev_log.exception() + finally: + f_locals_back = None + + +# fmt: off +# IFDEF CYTHON +# cdef _remove_return_values(py_db, frame): +# ELSE +def _remove_return_values(py_db, frame): +# ENDIF +# fmt: on + try: + try: + # Showing return values was turned off, we should remove them from locals dict. + # The values can be in the current frame or in the back one + frame.f_locals.pop(RETURN_VALUES_DICT, None) + + f_locals_back = getattr(frame.f_back, "f_locals", None) + if f_locals_back is not None: + f_locals_back.pop(RETURN_VALUES_DICT, None) + except: + pydev_log.exception() + finally: + f_locals_back = None + + +# fmt: off +# IFDEF CYTHON +# cdef _return_event(code, instruction, retval): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# cdef PyDBAdditionalThreadInfo info +# cdef int step_cmd +# ELSE +def _return_event(code, instruction, retval): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return monitor.DISABLE + + info = thread_info.additional_info + + # We know the frame depth. + frame = _getframe(1) + + step_cmd = info.pydev_step_cmd + if step_cmd == -1: + return + + if info.suspend_type != PYTHON_SUSPEND: + # Plugin stepping + if func_code_info.plugin_return_stepping: + _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) + return + + # Python line stepping + stop_frame = info.pydev_step_stop + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + if ( + # Not filtered out. + not back_func_code_info.always_skip_code + and not back_func_code_info.always_filtered_out + and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + # Prevent stopping in a return to the same location we were initially + # (i.e.: double-stop at the same place due to some filtering). + and info.step_in_initial_location != (frame.f_back, frame.f_back.f_lineno) + ): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + elif ( + step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + and not info.pydev_use_scoped_step_frame + and _is_same_frame(info, stop_frame, frame) + ): + # This isn't in the sys.settrace version: on a step over, if we return and the return is valid, show + # as a step return instead of going back to step into mode (but if the back frame is not valid, then + # go to step into mode). + f_back = frame.f_back + if f_back is not None: + back_func_code_info = _get_func_code_info(f_back.f_code, 2) + force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + + if ( + back_func_code_info is not None + and not back_func_code_info.always_skip_code + and not back_func_code_info.always_filtered_out + and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + ): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + elif step_cmd == CMD_SMART_STEP_INTO: + if _is_same_frame(info, stop_frame, frame): + # We're exiting the smart step into initial frame (so, we probably didn't find our target). + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + if py_db.show_return_values: + if ( + ( + info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + and (_is_same_frame(info, stop_frame, frame.f_back)) + ) + or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (info, _is_same_frame(info, stop_frame, frame))) + or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) + or ( + info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + and frame.f_back is not None + and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ) + ): + _show_return_values(frame, retval) + + if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO): + # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break + # eventually. Force the step mode to step into and the step stop frame to None. + # I.e.: F6 in the end of a function should stop in the next possible position (instead of forcing the user + # to make a step in or step over at that location). + # Note: this is especially troublesome when we're skipping code with the + # @DontTrace comment. + stop_frame = info.pydev_step_stop + if stop_frame is frame and not info.pydev_use_scoped_step_frame: + if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + info.pydev_step_cmd = CMD_STEP_INTO + else: + info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + info.pydev_step_stop = None + _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + if py_db.show_return_values: + _show_return_values(frame, retval) + + +# fmt: off +# IFDEF CYTHON +# cdef _enable_code_tracing_for_frame_and_parents(ThreadInfo thread_info, frame): +# cdef FuncCodeInfo func_code_info +# ELSE +def _enable_code_tracing_for_frame_and_parents(thread_info, frame): +# ENDIF +# fmt: on + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + while frame is not None: + func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + if func_code_info.always_skip_code: + frame = frame.f_back + continue + + _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, frame.f_code, frame, False) + frame = frame.f_back + + +# fmt: off +# IFDEF CYTHON +# cdef _stop_on_return(py_db, ThreadInfo thread_info, PyDBAdditionalThreadInfo info, int step_cmd, frame, retval): +# ELSE +def _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval): +# ENDIF +# fmt: on + back = frame.f_back + if back is not None: + # When we get to the pydevd run function, the debugging has actually finished for the main thread + # (note that it can still go on for other threads, but for this one, we just make it finish) + # So, just setting it to None should be OK + back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + back = None + + elif base == TRACE_PROPERTY: + # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + # if we're in a return, we want it to appear to the user in the previous frame! + return + + elif pydevd_dont_trace.should_trace_hook is not None: + if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + # In this case, we'll have to skip the previous one because it shouldn't be traced. + # Also, we have to reset the tracing, because if the parent's parent (or some + # other parent) has to be traced and it's not currently, we wouldn't stop where + # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). + # Related test: _debugger_case17a.py + py_db.set_trace_for_frame_and_parents(thread_info.thread_ident, back) + return + + if back is not None: + # if we're in a return, we want it to appear to the user in the previous frame! + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, back, "return", retval) + else: + # in jython we may not have a back frame + info.pydev_step_stop = None + info.pydev_original_step_cmd = -1 + info.pydev_step_cmd = -1 + info.pydev_state = STATE_RUN + info.update_stepping_info() + + +# fmt: off +# IFDEF CYTHON +# cdef _stop_on_breakpoint(py_db, ThreadInfo thread_info, int stop_reason, bp, frame, new_frame, bint stop, bint stop_on_plugin_breakpoint, str bp_type): +# cdef PyDBAdditionalThreadInfo additional_info +# ELSE +def _stop_on_breakpoint( + py_db, thread_info: ThreadInfo, stop_reason: int, bp, frame, new_frame, stop: bool, stop_on_plugin_breakpoint: bool, bp_type: str +): +# ENDIF +# fmt: on + """ + :param bp: the breakpoint hit (additional conditions will be checked now). + :param frame: the actual frame + :param new_frame: either the actual frame or the frame provided by the plugins. + :param stop: whether we should do a regular line breakpoint. + :param stop_on_plugin_breakpoint: whether we should stop in a plugin breakpoint. + + :return: + True if the breakpoint was suspended inside this function and False otherwise. + Note that even if False is returned, it's still possible + """ + additional_info = thread_info.additional_info + # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + # lets do the conditional stuff here + if bp.expression is not None: + # If it has an expression, it's always handled even if we don't stop. + py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + + if stop or stop_on_plugin_breakpoint: + if bp.has_condition: + eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + if not eval_result: + stop = False + stop_on_plugin_breakpoint = False + + # Handle logpoint (on a logpoint we should never stop). + if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: + stop = False + stop_on_plugin_breakpoint = False + + if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: + cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") + py_db.writer.add_command(cmd) + + if stop: + py_db.set_suspend( + thread_info.thread, + stop_reason, + suspend_other_threads=bp and bp.suspend_policy == "ALL", + ) + # print('suspend on breakpoint...') + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return True + + elif stop_on_plugin_breakpoint: + stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + return + + return False + + +# fmt: off +# IFDEF CYTHON +# cdef _plugin_stepping(py_db, int step_cmd, event, frame, ThreadInfo thread_info): +# cdef bint stop +# cdef dict stop_info +# ELSE +def _plugin_stepping(py_db, step_cmd, event, frame, thread_info): +# ENDIF +# fmt: on + plugin_manager = py_db.plugin + # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( + CMD_STEP_RETURN, + CMD_STEP_RETURN_MY_CODE, + ): + stop_info = {} + stop = False + result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + if result: + stop, plugin_stop = result + if plugin_stop: + plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + return + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + if plugin_manager is not None: + stop_info = {} + stop = False + result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + if result: + stop, plugin_stop = result + if plugin_stop: + plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + return + + +# fmt: off +# IFDEF CYTHON +# cdef _jump_event(code, int from_offset, int to_offset): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# cdef int from_line +# cdef int to_line +# ELSE +def _jump_event(code, from_offset, to_offset): +# ENDIF +# fmt: on + # A bunch of things have to be repeated especially because in the sys.monitoring + # everything is global, yet, when we start tracing something for stepping that + # needs to be per-thread. + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code or func_code_info.always_filtered_out: + return monitor.DISABLE + + # Same logic as "sys_trace_jump_func" in https://github.com/python/cpython/blob/main/Python/legacy_tracing.c + + # Ignore forward jump. + # print('jump event', code.co_name, 'from offset', from_offset, 'to offset', to_offset) + if to_offset > from_offset: + return monitor.DISABLE + + from_line = func_code_info.get_line_of_offset(from_offset) + to_line = func_code_info.get_line_of_offset(to_offset) + # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + + if from_line != to_line: + # I.e.: use case: "yield from [j for j in a if j % 2 == 0]" + return monitor.DISABLE + + # We know the frame depth. + frame = _getframe(1) + + # Disable the next line event as we're jumping to a line. The line event will be redundant. + _thread_local_info.f_disable_next_line_if_match = frame.f_lineno + + return _internal_line_event(func_code_info, frame, frame.f_lineno) + + +# fmt: off +# IFDEF CYTHON +# cdef _line_event(code, int line): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# ELSE +def _line_event(code, line): +# ENDIF +# fmt: on + + # A bunch of things have to be repeated especially because in the sys.monitoring + # everything is global, yet, when we start tracing something for stepping that + # needs to be per-thread. + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + if hasattr(_thread_local_info, "f_disable_next_line_if_match"): + if _thread_local_info.f_disable_next_line_if_match is line: + # If we're in a jump, we should skip this line event. The jump would have + # been considered a line event for this same line and we don't want to + # stop twice. + del _thread_local_info.f_disable_next_line_if_match + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code or func_code_info.always_filtered_out: + return monitor.DISABLE + + # print('line event', code.co_name, line) + + # We know the frame depth. + frame = _getframe(1) + return _internal_line_event(func_code_info, frame, line) + + +# fmt: off +# IFDEF CYTHON +# cdef _internal_line_event(FuncCodeInfo func_code_info, frame, int line): +# cdef ThreadInfo thread_info +# cdef PyDBAdditionalThreadInfo info +# cdef int step_cmd +# cdef bint stop +# cdef bint stop_on_plugin_breakpoint +# cdef int stop_reason +# cdef bint force_check_project_scope +# ELSE +def _internal_line_event(func_code_info, frame, line): +# ENDIF +# fmt: on + py_db: object = GlobalDebuggerHolder.global_dbg + thread_info = _thread_local_info.thread_info + info = thread_info.additional_info + + step_cmd = info.pydev_step_cmd + + # print('line event', info, id(info), thread_info.thread.name) + # print('line event', info.pydev_state, line, threading.current_thread(), code) + # If we reached here, it was not filtered out. + + if func_code_info.breakpoint_found: + bp = None + stop = False + stop_on_plugin_breakpoint = False + + stop_info = {} + stop_reason = CMD_SET_BREAK + bp_type = None + + bp = func_code_info.bp_line_to_breakpoint.get(line) + if bp is not None: + new_frame = frame + stop = True + + if bp: + if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): + return + + if func_code_info.plugin_line_breakpoint_found: + result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + if result: + stop_reason = CMD_SET_BREAK + stop = False + stop_on_plugin_breakpoint = True + bp, new_frame, bp_type = result + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + return + + if info.pydev_state == STATE_SUSPEND: + # Note: it's possible that it was suspended with a pause (and we'd stop here too). + # print('suspend (pause)...') + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + stop_frame = info.pydev_step_stop + if step_cmd == -1: + if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + return None + + return monitor.DISABLE + + if info.suspend_type != PYTHON_SUSPEND: + # Plugin stepping + if func_code_info.plugin_line_stepping: + _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) + return + + # Python stepping now + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + if not info.pydev_use_scoped_step_frame: + if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + return + + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + else: + # Make sure we check the filtering inside ipython calls too... + if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + return + + stop = False + # We can only stop inside the ipython call. + filename = frame.f_code.co_filename + if filename.endswith(".pyc"): + filename = filename[:-1] + + if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + f = frame.f_back + while f is not None: + if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + f2 = f.f_back + if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + pydev_log.debug("Stop inside ipython call") + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + thread_info.additional_info.trace_suspend_type = "sys_monitor" + _do_wait_suspend(py_db, thread_info, frame, "line", None) + break + f = f.f_back + + del f + + # In scoped mode if step in didn't work in this context it won't work + # afterwards anyways. + return + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + # Note: when dealing with a step over my code it's the same as a step over (the + # difference is that when we return from a frame in one we go to regular step + # into and in the other we go to a step into my code). + if _is_same_frame(info, stop_frame, frame): + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + elif step_cmd == CMD_SMART_STEP_INTO: + stop = False + back = frame.f_back + if _is_same_frame(info, stop_frame, back): + if info.pydev_smart_child_offset != -1: + # i.e.: in this case, we're not interested in the pause in the parent, rather + # we're interested in the pause in the child (when the parent is at the proper place). + stop = False + + else: + pydev_smart_parent_offset = info.pydev_smart_parent_offset + + pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + # Preferred mode (when the smart step into variants are available + # and the offset is set). + stop = get_smart_step_into_variant_from_frame_offset( + back.f_lasti, pydev_smart_step_into_variants + ) is get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + + else: + # Only the name/line is available, so, check that. + curr_func_name = frame.f_code.co_name + + # global context is set with an empty name + if curr_func_name in ("?", "") or curr_func_name is None: + curr_func_name = "" + if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + stop = True + + if not stop: + # In smart step into, if we didn't hit it in this frame once, that'll + # not be the case next time either, so, disable tracing for this frame. + return + + elif back is not None and _is_same_frame(info, stop_frame, back.f_back): + # Ok, we have to track 2 stops at this point, the parent and the child offset. + # This happens when handling a step into which targets a function inside a list comprehension + # or generator (in which case an intermediary frame is created due to an internal function call). + pydev_smart_parent_offset = info.pydev_smart_parent_offset + pydev_smart_child_offset = info.pydev_smart_child_offset + # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + # print('parent f_lasti', back.f_back.f_lasti) + # print('child f_lasti', back.f_lasti) + stop = False + if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + + if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + # Note that we don't really check the parent offset, only the offset of + # the child (because this is a generator, the parent may have moved forward + # already -- and that's ok, so, we just check that the parent frame + # matches in this case). + smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) + # print('matched parent offset', pydev_smart_parent_offset) + # Ok, now, check the child variant + children_variants = smart_step_into_variant.children_variants + stop = children_variants and ( + get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + ) + # print('stop at child', stop) + + if not stop: + # In smart step into, if we didn't hit it in this frame once, that'll + # not be the case next time either, so, disable tracing for this frame. + return + + if stop: + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + +# fmt: off +# IFDEF CYTHON +# cdef _start_method_event(code, instruction_offset): +# cdef ThreadInfo thread_info +# cdef FuncCodeInfo func_code_info +# cdef bint stop +# cdef int stop_reason +# cdef bint stop_on_plugin_breakpoint +# cdef PyDBAdditionalThreadInfo info +# cdef int step_cmd +# cdef bint code_tracing_added +# ELSE +def _start_method_event(code, instruction_offset): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + + frame = _getframe(1) + func_code_info = _get_func_code_info(code, frame) + if func_code_info.always_skip_code: + # if DEBUG: + # print('disable (always skip)') + return monitor.DISABLE + + keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) + + if func_code_info.function_breakpoint_found: + bp = func_code_info.function_breakpoint + stop = True + new_frame = frame + stop_reason = CMD_SET_FUNCTION_BREAK + stop_on_plugin_breakpoint = False + + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-function") + return + + if py_db.plugin: + plugin_manager = py_db.plugin + + # Check breaking on breakpoints in a 'call' + info = thread_info.additional_info + if func_code_info.plugin_call_breakpoint_found: + result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + if result: + stop_reason = CMD_SET_BREAK + stop = False + stop_on_plugin_breakpoint = True + bp, new_frame, bp_type = result + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + return + + keep_enabled = True + + # Check breaking on line stepping in a 'call' + step_cmd = info.pydev_step_cmd + if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: + _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + return + + if keep_enabled or any_thread_stepping(): + return None + + return monitor.DISABLE + +# fmt: off +# IFDEF CYTHON +# cpdef _ensure_monitoring(): +# ELSE +def _ensure_monitoring(): +# ENDIF +# fmt: on + DEBUGGER_ID = monitor.DEBUGGER_ID + if not monitor.get_tool(DEBUGGER_ID): + monitor.use_tool_id(DEBUGGER_ID, "pydevd") + update_monitor_events() + restart_events() + + +# fmt: off +# IFDEF CYTHON +# cpdef start_monitoring(bint all_threads=False): +# cdef ThreadInfo thread_info +# ELSE +def start_monitoring(all_threads=False): +# ENDIF +# fmt: on + if all_threads: + # print('start monitoring, all_threads=', all_threads) + DEBUGGER_ID = monitor.DEBUGGER_ID + if not monitor.get_tool(DEBUGGER_ID): + monitor.use_tool_id(DEBUGGER_ID, "pydevd") + update_monitor_events() + restart_events() + else: + try: + thread_info = _thread_local_info.thread_info + except: + # code=None means we can already get the threading.current_thread. + thread_info = _get_thread_info(True, 1) + if thread_info is None: + # print('start monitoring, thread=', None) + return + # print('start monitoring, thread=', thread_info.thread) + thread_info.trace = True + + +# fmt: off +# IFDEF CYTHON +# cpdef stop_monitoring(all_threads=False): +# cdef ThreadInfo thread_info +# ELSE +def stop_monitoring(all_threads=False): +# ENDIF +# fmt: on + if all_threads: + # print('stop monitoring, all_threads=', all_threads) + if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + monitor.set_events(monitor.DEBUGGER_ID, 0) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + monitor.free_tool_id(monitor.DEBUGGER_ID) + else: + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(False, 1) + if thread_info is None: + return + # print('stop monitoring, thread=', thread_info.thread) + thread_info.trace = False + + +def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: + """ + This should be called when breakpoints change. + + :param suspend: means the user requested threads to be suspended + """ + if monitor.get_tool(monitor.DEBUGGER_ID) != "pydevd": + # It is still not initialized. + return + + # When breakpoints change we need to update what we want to track based + # on the breakpoints. + py_db = GlobalDebuggerHolder.global_dbg + if py_db is None: + return + + if suspend_requested is None: + suspend_requested = False + + for t in threading.enumerate(): + if getattr(t, "pydev_do_not_trace", False): + continue + try: + additional_info = t.additional_info + if additional_info is None: + # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + continue + except AttributeError: + continue + if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + suspend_requested = True + break + + required_events = 0 + + has_caught_exception_breakpoint_in_pydb = ( + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) + + break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + + if has_caught_exception_breakpoint_in_pydb: + required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND + # print('track RAISE') + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _raise_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + else: + if break_on_uncaught_exceptions: + required_events |= monitor.events.PY_UNWIND + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + else: + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) + + has_breaks = py_db.has_plugin_line_breaks + if not has_breaks: + if py_db.function_breakpoint_name_to_breakpoint: + has_breaks = True + else: + file_to_line_to_breakpoints = py_db.breakpoints + for line_to_breakpoints in file_to_line_to_breakpoints.values(): + if line_to_breakpoints: + has_breaks = True + break + + if has_breaks or suspend_requested: + # print('track PY_START|PY_RESUME, suspend_requested=', suspend_requested) + required_events |= monitor.events.PY_START | monitor.events.PY_RESUME + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method_event) + # monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _resume_method_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _jump_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _return_event) + + else: + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + + monitor.set_events(DEBUGGER_ID, required_events) + + +def restart_events() -> None: + # Note: if breakpoints change, update_monitor_events usually needs to be + # called first, then the line event tracing must be set for existing frames + # and then this function must be called at the end. + monitor.restart_events() + + +# fmt: off +# IFDEF CYTHON +# cdef _is_same_frame(PyDBAdditionalThreadInfo info, target_frame, current_frame): +# ELSE +def _is_same_frame(info, target_frame, current_frame): +# ENDIF +# fmt: on + if target_frame is current_frame: + return True + + if info.pydev_use_scoped_step_frame: + # If using scoped step we don't check the target, we just need to check + # if the current matches the same heuristic where the target was defined. + if target_frame is not None and current_frame is not None: + if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + # The co_name may be different (it may include the line number), but + # the filename must still be the same. + f = current_frame.f_back + if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + f = f.f_back + if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + return True + + return False + + +# fmt: off +# IFDEF CYTHON +# def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): +# ELSE +def _do_wait_suspend(py_db, thread_info, frame, event, arg): +# ENDIF +# fmt: on + thread_info.additional_info.trace_suspend_type = "sys_monitor" + py_db.do_wait_suspend(thread_info.thread, frame, event, arg) + + +# This can be used to diagnose exceptions inside of the debugger itself. +# +# import types +# import functools +# +# +# def safe_func(method): +# +# @functools.wraps(method) +# def new_method(*args, **kwargs): +# try: +# return method(*args, **kwargs) +# except: +# import traceback;traceback.print_exc() +# raise +# +# return new_method +# +# +# for name, obj in list(globals().items()): +# if name.endswith('_event'): +# if isinstance(obj, types.FunctionType): +# globals()[name] = safe_func(obj) +# +# +# def _getframe(depth): +# return sys._getframe(depth + 1) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c new file mode 100644 index 000000000..52382a23e --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c @@ -0,0 +1,43058 @@ +/* Generated by Cython 3.0.11 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [], + "name": "_pydevd_sys_monitoring_cython", + "sources": [ + "_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx" + ] + }, + "module_name": "_pydevd_sys_monitoring_cython" +} +END: Cython Metadata */ + +#ifndef PY_SSIZE_T_CLEAN +#define PY_SSIZE_T_CLEAN +#endif /* PY_SSIZE_T_CLEAN */ +#if defined(CYTHON_LIMITED_API) && 0 + #ifndef Py_LIMITED_API + #if CYTHON_LIMITED_API+0 > 0x03030000 + #define Py_LIMITED_API CYTHON_LIMITED_API + #else + #define Py_LIMITED_API 0x03030000 + #endif + #endif +#endif + +#include "Python.h" +#if PY_VERSION_HEX >= 0x03090000 +#include "internal/pycore_gc.h" +#include "internal/pycore_interp.h" +#endif + +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.7+ or Python 3.3+. +#else +#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API +#define __PYX_EXTRA_ABI_MODULE_NAME "limited" +#else +#define __PYX_EXTRA_ABI_MODULE_NAME "" +#endif +#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME +#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI +#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." +#define CYTHON_HEX_VERSION 0x03000BF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #define HAVE_LONG_LONG +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX +#if defined(GRAALVM_PYTHON) + /* For very preliminary testing purposes. Most variables are set the same as PyPy. + The existence of this section does not imply that anything works or is even tested */ + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 1 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(PYPY_VERSION) + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) + #endif + #if PY_VERSION_HEX < 0x03090000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(CYTHON_LIMITED_API) + #ifdef Py_LIMITED_API + #undef __PYX_LIMITED_VERSION_HEX + #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API + #endif + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 1 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #undef CYTHON_CLINE_IN_TRACEBACK + #define CYTHON_CLINE_IN_TRACEBACK 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 1 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #endif + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #undef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 1 + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 + #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 +#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #ifndef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #define CYTHON_COMPILING_IN_LIMITED_API 0 + #define CYTHON_COMPILING_IN_GRAAL 0 + #define CYTHON_COMPILING_IN_NOGIL 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif + #ifndef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) + #endif + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) + #define CYTHON_PEP489_MULTI_PHASE_INIT 1 + #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif + #if PY_VERSION_HEX < 0x030400a1 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #elif !defined(CYTHON_USE_TP_FINALIZE) + #define CYTHON_USE_TP_FINALIZE 1 + #endif + #if PY_VERSION_HEX < 0x030600B1 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #elif !defined(CYTHON_USE_DICT_VERSIONS) + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) + #endif + #if PY_VERSION_HEX < 0x030700A3 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK 1 + #endif + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if !defined(CYTHON_VECTORCALL) +#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) +#endif +#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(maybe_unused) + #define CYTHON_UNUSED [[maybe_unused]] + #endif + #endif + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR + #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_USE_CPP_STD_MOVE + #if defined(__cplusplus) && (\ + __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) + #define CYTHON_USE_CPP_STD_MOVE 1 + #else + #define CYTHON_USE_CPP_STD_MOVE 0 + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + #endif + #endif + #if _MSC_VER < 1300 + #ifdef _WIN64 + typedef unsigned long long __pyx_uintptr_t; + #else + typedef unsigned int __pyx_uintptr_t; + #endif + #else + #ifdef _WIN64 + typedef unsigned __int64 __pyx_uintptr_t; + #else + typedef unsigned __int32 __pyx_uintptr_t; + #endif + #endif +#else + #include + typedef uintptr_t __pyx_uintptr_t; +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) + /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 + * but leads to warnings with -pedantic, since it is a C++17 feature */ + #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif +#ifdef __cplusplus + template + struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; + #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) +#else + #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) +#endif +#if CYTHON_COMPILING_IN_PYPY == 1 + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) +#else + #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) +#endif +#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_DefaultClassType PyClass_Type + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if CYTHON_COMPILING_IN_LIMITED_API + static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *exception_table = NULL; + PyObject *types_module=NULL, *code_type=NULL, *result=NULL; + #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 + PyObject *version_info; + PyObject *py_minor_version = NULL; + #endif + long minor_version = 0; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 + minor_version = 11; + #else + if (!(version_info = PySys_GetObject("version_info"))) goto end; + if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; + minor_version = PyLong_AsLong(py_minor_version); + Py_DECREF(py_minor_version); + if (minor_version == -1 && PyErr_Occurred()) goto end; + #endif + if (!(types_module = PyImport_ImportModule("types"))) goto end; + if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; + if (minor_version <= 7) { + (void)p; + result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else if (minor_version <= 10) { + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, fline, lnos, fv, cell); + } else { + if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; + result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, + c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); + } + end: + Py_XDECREF(code_type); + Py_XDECREF(exception_table); + Py_XDECREF(types_module); + if (type) { + PyErr_Restore(type, value, traceback); + } + return result; + } + #ifndef CO_OPTIMIZED + #define CO_OPTIMIZED 0x0001 + #endif + #ifndef CO_NEWLOCALS + #define CO_NEWLOCALS 0x0002 + #endif + #ifndef CO_VARARGS + #define CO_VARARGS 0x0004 + #endif + #ifndef CO_VARKEYWORDS + #define CO_VARKEYWORDS 0x0008 + #endif + #ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x0200 + #endif + #ifndef CO_GENERATOR + #define CO_GENERATOR 0x0020 + #endif + #ifndef CO_COROUTINE + #define CO_COROUTINE 0x0080 + #endif +#elif PY_VERSION_HEX >= 0x030B0000 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyCodeObject *result; + PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); + if (!empty_bytes) return NULL; + result = + #if PY_VERSION_HEX >= 0x030C0000 + PyUnstable_Code_NewWithPosOnlyArgs + #else + PyCode_NewWithPosOnlyArgs + #endif + (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); + Py_DECREF(empty_bytes); + return result; + } +#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif +#endif +#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) + #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) +#else + #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) + #define __Pyx_Py_Is(x, y) Py_Is(x, y) +#else + #define __Pyx_Py_Is(x, y) ((x) == (y)) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) + #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) +#else + #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) + #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) +#else + #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) +#endif +#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) + #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) +#else + #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) +#endif +#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) +#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) +#else + #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) +#endif +#ifndef CO_COROUTINE + #define CO_COROUTINE 0x80 +#endif +#ifndef CO_ASYNC_GENERATOR + #define CO_ASYNC_GENERATOR 0x200 +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef Py_TPFLAGS_SEQUENCE + #define Py_TPFLAGS_SEQUENCE 0 +#endif +#ifndef Py_TPFLAGS_MAPPING + #define Py_TPFLAGS_MAPPING 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #if PY_VERSION_HEX >= 0x030d00A4 + # define __Pyx_PyCFunctionFast PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords + #else + # define __Pyx_PyCFunctionFast _PyCFunctionFast + # define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords + #endif +#endif +#if CYTHON_METH_FASTCALL + #define __Pyx_METH_FASTCALL METH_FASTCALL + #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast + #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords +#else + #define __Pyx_METH_FASTCALL METH_VARARGS + #define __Pyx_PyCFunction_FastCall PyCFunction + #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords +#endif +#if CYTHON_VECTORCALL + #define __pyx_vectorcallfunc vectorcallfunc + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET + #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) +#elif CYTHON_BACKPORT_VECTORCALL + typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) +#else + #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 + #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) +#endif +#if PY_MAJOR_VERSION >= 0x030900B1 +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) +#else +#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) +#endif +#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) +#elif !CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) +#endif +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) +static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { + return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; +} +#endif +static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { +#if CYTHON_COMPILING_IN_LIMITED_API + return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; +#else + return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +#endif +} +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) +#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) + typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); +#else + #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) + #define __Pyx_PyCMethod PyCMethod +#endif +#ifndef METH_METHOD + #define METH_METHOD 0x200 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyThreadState_Current PyThreadState_Get() +#elif !CYTHON_FAST_THREAD_STATE + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) +{ + void *result; + result = PyModule_GetState(op); + if (!result) + Py_FatalError("Couldn't find the module state"); + return result; +} +#endif +#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) +#else + #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if PY_MAJOR_VERSION < 3 + #if CYTHON_COMPILING_IN_PYPY + #if PYPY_VERSION_NUM < 0x07030600 + #if defined(__cplusplus) && __cplusplus >= 201402L + [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] + #elif defined(__GNUC__) || defined(__clang__) + __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) + #elif defined(_MSC_VER) + __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) + #endif + static CYTHON_INLINE int PyGILState_Check(void) { + return 0; + } + #else // PYPY_VERSION_NUM < 0x07030600 + #endif // PYPY_VERSION_NUM < 0x07030600 + #else + static CYTHON_INLINE int PyGILState_Check(void) { + PyThreadState * tstate = _PyThreadState_Current; + return tstate && (tstate == PyGILState_GetThisThreadState()); + } + #endif +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { + PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); + if (res == NULL) PyErr_Clear(); + return res; +} +#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) +#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#else +static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { +#if CYTHON_COMPILING_IN_PYPY + return PyDict_GetItem(dict, name); +#else + PyDictEntry *ep; + PyDictObject *mp = (PyDictObject*) dict; + long hash = ((PyStringObject *) name)->ob_shash; + assert(hash != -1); + ep = (mp->ma_lookup)(mp, name, hash); + if (ep == NULL) { + return NULL; + } + return ep->me_value; +#endif +} +#define __Pyx_PyDict_GetItemStr PyDict_GetItem +#endif +#if CYTHON_USE_TYPE_SLOTS + #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) + #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) + #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) +#else + #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) + #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) + #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) +#else + #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) +#endif +#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 +#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ + PyTypeObject *type = Py_TYPE((PyObject*)obj);\ + assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ + PyObject_GC_Del(obj);\ + Py_DECREF(type);\ +} +#else +#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) +#endif +#if CYTHON_COMPILING_IN_LIMITED_API + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) + #define __Pyx_PyUnicode_DATA(u) ((void*)u) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) +#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_READY(op) (0) + #else + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) + #if PY_VERSION_HEX >= 0x030C0000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #else + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) + #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #if !defined(PyUnicode_DecodeUnicodeEscape) + #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) + #endif + #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) + #undef PyUnicode_Contains + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) + #endif + #if !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) + #endif + #if !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) + #endif +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#if CYTHON_COMPILING_IN_CPYTHON + #define __Pyx_PySequence_ListKeepNew(obj)\ + (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) +#else + #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) +#else + #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) + #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) + #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) + #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) + #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) + #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) + #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) + #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) +#endif +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name) +#else + static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) { + PyObject *module = PyImport_AddModule(name); + Py_XINCREF(module); + return module; + } +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define __Pyx_Py3Int_Check(op) PyLong_Check(op) + #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#else + #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) + #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) + #if !defined(_USE_MATH_DEFINES) + #define _USE_MATH_DEFINES + #endif +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifdef CYTHON_EXTERN_C + #undef __PYX_EXTERN_C + #define __PYX_EXTERN_C CYTHON_EXTERN_C +#elif defined(__PYX_EXTERN_C) + #ifdef _MSC_VER + #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") + #else + #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. + #endif +#else + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE___pydevd_sys_monitoring_cython +#define __PYX_HAVE_API___pydevd_sys_monitoring_cython +/* Early includes */ +#include "frameobject.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_VERSION_HEX >= 0x030C00A7 + #ifndef _PyLong_SIGN_MASK + #define _PyLong_SIGN_MASK 3 + #endif + #ifndef _PyLong_NON_SIZE_BITS + #define _PyLong_NON_SIZE_BITS 3 + #endif + #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) + #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) + #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) + #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) + #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_SignedDigitCount(x)\ + ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) + #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) + #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) + #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) + #else + #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) + #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) + #endif + typedef Py_ssize_t __Pyx_compact_pylong; + typedef size_t __Pyx_compact_upylong; + #else + #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) + #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) + #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) + #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) + #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) + #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) + #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) + #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) + #define __Pyx_PyLong_CompactValue(x)\ + ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) + typedef sdigit __Pyx_compact_pylong; + typedef digit __Pyx_compact_upylong; + #endif + #if PY_VERSION_HEX >= 0x030C00A5 + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) + #else + #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) + #endif +#endif +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +#include +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = (char) c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#include +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +#if !CYTHON_USE_MODULE_STATE +static PyObject *__pyx_m = NULL; +#endif +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm = __FILE__; +static const char *__pyx_filename; + +/* #### Code section: filename_table ### */ + +static const char *__pyx_f[] = { + "_pydevd_sys_monitoring\\\\_pydevd_sys_monitoring_cython.pyx", + "", + ".\\\\_pydevd_bundle\\\\pydevd_cython.pxd", +}; +/* #### Code section: utility_code_proto_before_types ### */ +/* ForceInitThreads.proto */ +#ifndef __PYX_FORCE_INIT_THREADS + #define __PYX_FORCE_INIT_THREADS 0 +#endif + +/* #### Code section: numeric_typedefs ### */ +/* #### Code section: complex_type_declarations ### */ +/* #### Code section: type_declarations ### */ + +/*--- Type declarations ---*/ +struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; +struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo; +struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo; +struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj; +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc; +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset; +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line; +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset; +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval; +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe; +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__get_code_line_info; +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_start_monitoring; +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_stop_monitoring; + +/* "_pydevd_sys_monitoring_cython.pyx":116 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * @cython.cfunc # <<<<<<<<<<<<<< + * def _getframe(depth=0): + * return sys._getframe() + */ +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe { + int __pyx_n; + PyObject *depth; +}; + +/* "_pydevd_sys_monitoring_cython.pyx":456 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_code_line_info(code_obj, _cache={}): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_code_line_info(code_obj, _cache={}): + */ +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__get_code_line_info { + int __pyx_n; + PyObject *_cache; +}; + +/* "_pydevd_sys_monitoring_cython.pyx":1723 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef start_monitoring(bint all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_start_monitoring { + int __pyx_n; + int all_threads; +}; + +/* "_pydevd_sys_monitoring_cython.pyx":1751 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef stop_monitoring(all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ +struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_stop_monitoring { + int __pyx_n; + PyObject *all_threads; +}; + +/* "_pydevd_bundle/pydevd_cython.pxd":1 + * cdef class PyDBAdditionalThreadInfo: # <<<<<<<<<<<<<< + * cdef public int pydev_state + * cdef public object pydev_step_stop # Actually, it's a frame or None + */ +struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { + PyObject_HEAD + struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtab; + int pydev_state; + PyObject *pydev_step_stop; + int pydev_original_step_cmd; + int pydev_step_cmd; + int pydev_notify_kill; + PyObject *pydev_smart_step_stop; + int pydev_django_resolve_frame; + PyObject *pydev_call_from_jinja2; + PyObject *pydev_call_inside_jinja2; + int is_tracing; + PyObject *conditional_breakpoint_exception; + PyObject *pydev_message; + int suspend_type; + int pydev_next_line; + PyObject *pydev_func_name; + int suspended_at_unhandled; + PyObject *trace_suspend_type; + PyObject *top_level_thread_tracer_no_back_frames; + PyObject *top_level_thread_tracer_unhandled; + PyObject *thread_tracer; + PyObject *step_in_initial_location; + int pydev_smart_parent_offset; + int pydev_smart_child_offset; + PyObject *pydev_smart_step_into_variants; + PyObject *target_id_to_smart_step_into_variant; + int pydev_use_scoped_step_frame; + PyObject *weak_thread; + int is_in_wait_loop; +}; + + +/* "_pydevd_sys_monitoring_cython.pyx":243 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef class ThreadInfo: # <<<<<<<<<<<<<< + * cdef unsigned long thread_ident + * cdef PyDBAdditionalThreadInfo additional_info + */ +struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo { + PyObject_HEAD + unsigned long thread_ident; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *additional_info; + PyObject *thread; + PyObject *trace; +}; + + +/* "_pydevd_sys_monitoring_cython.pyx":351 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef class FuncCodeInfo: # <<<<<<<<<<<<<< + * cdef str co_filename + * cdef str canonical_normalized_filename + */ +struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo { + PyObject_HEAD + PyObject *co_filename; + PyObject *canonical_normalized_filename; + PyObject *abs_path_filename; + int always_skip_code; + int breakpoint_found; + int function_breakpoint_found; + int plugin_line_breakpoint_found; + int plugin_call_breakpoint_found; + int plugin_line_stepping; + int plugin_call_stepping; + int plugin_return_stepping; + int pydb_mtime; + PyObject *bp_line_to_breakpoint; + PyObject *function_breakpoint; + int always_filtered_out; + int filtered_out_force_checked; + PyObject *try_except_container_obj; + PyObject *code_obj; + PyObject *co_name; +}; + + +/* "_pydevd_sys_monitoring_cython.pyx":801 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef class _TryExceptContainerObj: # <<<<<<<<<<<<<< + * cdef list try_except_infos + * # ELSE + */ +struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj { + PyObject_HEAD + PyObject *try_except_infos; +}; + + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction, object exc): + * """wrap(code, instruction, exc)""" + */ +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc { + PyObject_HEAD + PyObject *(*__pyx_v_f)(PyObject *, PyObject *, PyObject *); +}; + +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset { + PyObject_HEAD + PyObject *(*__pyx_v_f)(PyObject *, PyObject *); +}; + +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line { + PyObject_HEAD + PyObject *(*__pyx_v_f)(PyObject *, int); +}; + +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset { + PyObject_HEAD + PyObject *(*__pyx_v_f)(PyObject *, int, int); +}; + +struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval { + PyObject_HEAD + PyObject *(*__pyx_v_f)(PyObject *, PyObject *, PyObject *); +}; + + + +/* "_pydevd_bundle/pydevd_cython.pxd":1 + * cdef class PyDBAdditionalThreadInfo: # <<<<<<<<<<<<<< + * cdef public int pydev_state + * cdef public object pydev_step_stop # Actually, it's a frame or None + */ + +struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo { + PyObject *(*get_topmost_frame)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *, int __pyx_skip_dispatch); + PyObject *(*update_stepping_info)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + PyObject *(*_get_related_thread)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); + int (*_is_stepping)(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int __pyx_skip_dispatch); +}; +static struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; +/* #### Code section: utility_code_proto ### */ + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, Py_ssize_t); + void (*DECREF)(void*, PyObject*, Py_ssize_t); + void (*GOTREF)(void*, PyObject*, Py_ssize_t); + void (*GIVEREF)(void*, PyObject*, Py_ssize_t); + void* (*SetupContext)(const char*, Py_ssize_t, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ + } + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) + #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() +#endif + #define __Pyx_RefNannyFinishContextNogil() {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __Pyx_RefNannyFinishContext();\ + PyGILState_Release(__pyx_gilstate_save);\ + } + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) + #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContextNogil() + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_Py_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; Py_XDECREF(tmp);\ + } while (0) +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#if PY_VERSION_HEX >= 0x030C00A6 +#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) +#else +#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) +#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) +#endif +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) +#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* TupleAndListFromArray.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); +#endif + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* fastcall.proto */ +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) +#elif CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) +#else + #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) +#endif +#if CYTHON_AVOID_BORROWED_REFS + #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) + #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) +#else + #define __Pyx_Arg_NewRef_VARARGS(arg) arg + #define __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) +#define __Pyx_KwValues_VARARGS(args, nargs) NULL +#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) +#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) +#if CYTHON_METH_FASTCALL + #define __Pyx_Arg_FASTCALL(args, i) args[i] + #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) + #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) + static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); + #else + #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) + #endif + #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs + to have the same reference counting */ + #define __Pyx_Arg_XDECREF_FASTCALL(arg) +#else + #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS + #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS + #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS + #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS + #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS + #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) + #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) +#else +#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) +#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) +#endif + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, + const char* function_name); + +/* IncludeStructmemberH.proto */ +#include + +/* FixUpExtensionType.proto */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); +#endif + +/* FetchSharedCythonModule.proto */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void); + +/* FetchCommonType.proto */ +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); +#else +static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); +#endif + +/* PyMethodNew.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + typesModule = PyImport_ImportModule("types"); + if (!typesModule) return NULL; + methodType = PyObject_GetAttrString(typesModule, "MethodType"); + Py_DECREF(typesModule); + if (!methodType) return NULL; + result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); + Py_DECREF(methodType); + return result; +} +#elif PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { + CYTHON_UNUSED_VAR(typ); + if (!self) + return __Pyx_NewRef(func); + return PyMethod_New(func, self); +} +#else + #define __Pyx_PyMethod_New PyMethod_New +#endif + +/* PyVectorcallFastCallDict.proto */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); +#endif + +/* CythonFunctionShared.proto */ +#define __Pyx_CyFunction_USED +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CYFUNCTION_COROUTINE 0x08 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + #define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#else + #define __Pyx_CyFunction_GetClassObj(f)\ + ((PyObject*) ((PyCMethodObject *) (f))->mm_class) +#endif +#define __Pyx_CyFunction_SetClassObj(f, classobj)\ + __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject_HEAD + PyObject *func; +#elif PY_VERSION_HEX < 0x030900B1 + PyCFunctionObject func; +#else + PyCMethodObject func; +#endif +#if CYTHON_BACKPORT_VECTORCALL + __pyx_vectorcallfunc func_vectorcall; +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + PyObject *func_classobj; +#endif + void *defaults; + int defaults_pyobjects; + size_t defaults_size; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; + PyObject *func_is_coroutine; +} __pyx_CyFunctionObject; +#undef __Pyx_CyOrPyCFunction_Check +#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) +#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) +#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); +#undef __Pyx_IsSameCFunction +#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(PyObject *module); +#if CYTHON_METH_FASTCALL +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); +#if CYTHON_BACKPORT_VECTORCALL +#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) +#else +#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) +#endif +#endif + +/* CythonFunction.proto */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *closure, + PyObject *module, PyObject *globals, + PyObject* code); + +/* KeywordStringCheck.proto */ +static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) do {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} while(0) +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyObjectLookupSpecial.proto */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) +#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); +#else +#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) +#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#if !CYTHON_VECTORCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if !CYTHON_VECTORCALL +#if PY_VERSION_HEX >= 0x03080000 + #include "frameobject.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif + #define __Pxy_PyFrame_Initialize_Offsets() + #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) +#else + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif +#endif +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectFastCall.proto */ +#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL) +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs); + +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* GetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* RaiseUnexpectedTypeError.proto */ +static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj); + +/* PyIntBinop.proto */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); +#else +#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\ + (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2)) +#endif + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* PyObjectCallNoArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* ObjectGetItem.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key); +#else +#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) +#endif + +/* ExtTypeTest.proto */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* AssertionsEnabled.proto */ +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (1) +#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000) + static int __pyx_assertions_enabled_flag; + #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag) + static int __Pyx_init_assertions_enabled(void) { + PyObject *builtins, *debug, *debug_str; + int flag; + builtins = PyEval_GetBuiltins(); + if (!builtins) goto bad; + debug_str = PyUnicode_FromStringAndSize("__debug__", 9); + if (!debug_str) goto bad; + debug = PyObject_GetItem(builtins, debug_str); + Py_DECREF(debug_str); + if (!debug) goto bad; + flag = PyObject_IsTrue(debug); + Py_DECREF(debug); + if (flag == -1) goto bad; + __pyx_assertions_enabled_flag = flag; + return 0; + bad: + __pyx_assertions_enabled_flag = 1; + return -1; + } +#else + #define __Pyx_init_assertions_enabled() (0) + #define __pyx_assertions_enabled() (!Py_OptimizeFlag) +#endif + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod0.proto */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); + +/* RaiseNoneIterError.proto */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +/* UnpackTupleError.proto */ +static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); + +/* UnpackTuple2.proto */ +#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ + (likely(is_tuple || PyTuple_Check(tuple)) ?\ + (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ + __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ + (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ + __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); +static int __Pyx_unpack_tuple2_generic( + PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); + +/* dict_iter.proto */ +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_is_dict); +static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* SwapException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); +#endif + +/* dict_getitem_default.proto */ +static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value); + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod1.proto */ +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#else +#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) +#endif + +/* CallUnboundCMethod2.proto */ +static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 +static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2); +#else +#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2) +#endif + +/* RaiseUnboundLocalError.proto */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); + +/* SliceObject.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( + PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** py_start, PyObject** py_stop, PyObject** py_slice, + int has_cstart, int has_cstop, int wraparound); + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolNeObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* PyIntCompare.proto */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* ValidateBasesTuple.proto */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases); +#endif + +/* PyType_Ready.proto */ +CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* SetupReduce.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce(PyObject* type_obj); +#endif + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_11 +#define __PYX_HAVE_RT_ImportType_proto_3_0_11 +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +#include +#endif +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) alignof(s) +#else +#define __PYX_GET_STRUCT_ALIGNMENT_3_0_11(s) sizeof(void*) +#endif +enum __Pyx_ImportType_CheckSize_3_0_11 { + __Pyx_ImportType_CheckSize_Error_3_0_11 = 0, + __Pyx_ImportType_CheckSize_Warn_3_0_11 = 1, + __Pyx_ImportType_CheckSize_Ignore_3_0_11 = 2 +}; +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size); +#endif + +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyTypeObject *type); + +/* ImportDottedModule.proto */ +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); +#endif + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* PyObjectCall2Args.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +#if !CYTHON_COMPILING_IN_LIMITED_API +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); +#endif + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* GCCDiagnostics.proto */ +#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FormatTypeName.proto */ +#if CYTHON_COMPILING_IN_LIMITED_API +typedef PyObject *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%U" +static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); +#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) +#else +typedef const char *__Pyx_TypeName; +#define __Pyx_FMT_TYPENAME "%.200s" +#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) +#define __Pyx_DECREF_TypeName(obj) +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static unsigned long __Pyx_get_runtime_version(void); +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); + +/* FunctionImport.proto */ +static int __Pyx_ImportFunction_3_0_11(PyObject *module, const char *funcname, void (**f)(void), const char *sig); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + +/* #### Code section: module_declarations ### */ + +/* Module declarations from "cpython.mem" */ + +/* Module declarations from "cython" */ + +/* Module declarations from "_pydevd_bundle.pydevd_cython" */ +static PyObject *(*__pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info)(PyObject *, int __pyx_skip_dispatch); /*proto*/ +static int (*__pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping)(int __pyx_skip_dispatch); /*proto*/ + +/* Module declarations from "_pydevd_sys_monitoring_cython" */ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__notify_skipped_step_in_because_of_filters(PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__getframe(struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe *__pyx_optional_args); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_bootstrap_frame(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_user_frame(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_last_user_frame(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__create_thread_info(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(int, int); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_code_line_info(PyObject *, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__get_code_line_info *__pyx_optional_args); /*proto*/ +static struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_line_tracing(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_disable_code_tracing(PyObject *, int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_enable_code_tracing(unsigned long, PyObject *, PyObject *, int __pyx_skip_dispatch); /*proto*/ +static int __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing(PyObject *, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *, PyObject *, PyObject *, int); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_step_tracing(PyObject *, PyObject *, PyObject *, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__unwind_event(PyObject *, PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__raise_event(PyObject *, PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_get_func_name(PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__return_event(PyObject *, PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing_for_frame_and_parents(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(PyObject *, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, int, PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(PyObject *, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *, int, PyObject *, PyObject *, PyObject *, int, int, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__plugin_stepping(PyObject *, int, PyObject *, PyObject *, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__jump_event(PyObject *, int, int); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__line_event(PyObject *, int); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__internal_line_event(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *, PyObject *, int); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__start_method_event(PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(int __pyx_skip_dispatch); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_start_monitoring(int __pyx_skip_dispatch, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_start_monitoring *__pyx_optional_args); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_stop_monitoring(int __pyx_skip_dispatch, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_stop_monitoring *__pyx_optional_args); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *, PyObject *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_ThreadInfo__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_FuncCodeInfo__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *, PyObject *); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle__TryExceptContainerObj__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *, PyObject *); /*proto*/ +static PyObject *__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(PyObject *(*)(PyObject *, PyObject *, PyObject *)); /*proto*/ +static PyObject *__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(PyObject *(*)(PyObject *, PyObject *)); /*proto*/ +static PyObject *__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(PyObject *(*)(PyObject *, int)); /*proto*/ +static PyObject *__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(PyObject *(*)(PyObject *, int, int)); /*proto*/ +static PyObject *__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(PyObject *(*)(PyObject *, PyObject *, PyObject *)); /*proto*/ +/* #### Code section: typeinfo ### */ +/* #### Code section: before_global_var ### */ +#define __Pyx_MODULE_NAME "_pydevd_sys_monitoring_cython" +extern int __pyx_module_is_main__pydevd_sys_monitoring_cython; +int __pyx_module_is_main__pydevd_sys_monitoring_cython = 0; + +/* Implementation of "_pydevd_sys_monitoring_cython" */ +/* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_ImportError; +static PyObject *__pyx_builtin_AttributeError; +static PyObject *__pyx_builtin_min; +static PyObject *__pyx_builtin_max; +static PyObject *__pyx_builtin_AssertionError; +/* #### Code section: string_decls ### */ +static const char __pyx_k_1[] = "1"; +static const char __pyx_k_t[] = "t"; +static const char __pyx_k_gc[] = "gc"; +static const char __pyx_k_os[] = "os"; +static const char __pyx_k_re[] = "re"; +static const char __pyx_k_ALL[] = "ALL"; +static const char __pyx_k_Any[] = "Any"; +static const char __pyx_k__14[] = ""; +static const char __pyx_k__17[] = "?"; +static const char __pyx_k__19[] = "."; +static const char __pyx_k__22[] = "*"; +static const char __pyx_k_arg[] = "arg"; +static const char __pyx_k_del[] = "__del__"; +static const char __pyx_k_dis[] = "dis"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_end[] = "end"; +static const char __pyx_k_exc[] = "exc"; +static const char __pyx_k_get[] = "get"; +static const char __pyx_k_max[] = "max"; +static const char __pyx_k_min[] = "min"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_pop[] = "pop"; +static const char __pyx_k_pyc[] = ".pyc"; +static const char __pyx_k_ref[] = "_ref"; +static const char __pyx_k_run[] = "run"; +static const char __pyx_k_s_s[] = "%s != %s"; +static const char __pyx_k_sys[] = "sys"; +static const char __pyx_k_Dict[] = "Dict"; +static const char __pyx_k_JUMP[] = "JUMP"; +static const char __pyx_k_LINE[] = "LINE"; +static const char __pyx_k_None[] = "None"; +static const char __pyx_k_args[] = "args"; +static const char __pyx_k_call[] = "__call__"; +static const char __pyx_k_code[] = "code"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_exec[] = "_exec"; +static const char __pyx_k_exit[] = "__exit__"; +static const char __pyx_k_init[] = "__init__"; +static const char __pyx_k_line[] = "line"; +static const char __pyx_k_main[] = "main"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_self[] = "self"; +static const char __pyx_k_spec[] = "__spec__"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_wrap[] = "wrap"; +static const char __pyx_k_RAISE[] = "RAISE"; +static const char __pyx_k_Tuple[] = "Tuple"; +static const char __pyx_k_class[] = "__class__"; +static const char __pyx_k_debug[] = "debug"; +static const char __pyx_k_enter[] = "__enter__"; +static const char __pyx_k_event[] = "event"; +static const char __pyx_k_frame[] = "frame"; +static const char __pyx_k_ident[] = "ident"; +static const char __pyx_k_items[] = "items"; +static const char __pyx_k_local[] = "local"; +static const char __pyx_k_mtime[] = "mtime"; +static const char __pyx_k_py_db[] = "py_db"; +static const char __pyx_k_run_2[] = "_run"; +static const char __pyx_k_runpy[] = "runpy"; +static const char __pyx_k_s_s_2[] = "%s.%s"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_state[] = "state"; +static const char __pyx_k_super[] = "super"; +static const char __pyx_k_trace[] = "trace"; +static const char __pyx_k_types[] = "types"; +static const char __pyx_k_Thread[] = "Thread"; +static const char __pyx_k_active[] = "_active"; +static const char __pyx_k_call_2[] = "call"; +static const char __pyx_k_dict_2[] = "_dict"; +static const char __pyx_k_enable[] = "enable"; +static const char __pyx_k_events[] = "events"; +static const char __pyx_k_f_back[] = "f_back"; +static const char __pyx_k_f_code[] = "f_code"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_kwargs[] = "kwargs"; +static const char __pyx_k_main_2[] = "__main__"; +static const char __pyx_k_module[] = ""; +static const char __pyx_k_offset[] = "offset"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_plugin[] = "plugin"; +static const char __pyx_k_pydevd[] = "pydevd"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_return[] = "return"; +static const char __pyx_k_retval[] = "retval"; +static const char __pyx_k_thread[] = "thread"; +static const char __pyx_k_tident[] = "_tident"; +static const char __pyx_k_typing[] = "typing"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_values[] = "values"; +static const char __pyx_k_writer[] = "writer"; +static const char __pyx_k_DISABLE[] = "DISABLE"; +static const char __pyx_k_co_name[] = "co_name"; +static const char __pyx_k_compile[] = "compile"; +static const char __pyx_k_disable[] = "disable"; +static const char __pyx_k_f_lasti[] = "f_lasti"; +static const char __pyx_k_linesep[] = "linesep"; +static const char __pyx_k_monitor[] = "monitor"; +static const char __pyx_k_os_path[] = "os.path"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_suspend[] = "suspend"; +static const char __pyx_k_CodeType[] = "CodeType"; +static const char __pyx_k_Optional[] = "Optional"; +static const char __pyx_k_PY_START[] = "PY_START"; +static const char __pyx_k_basename[] = "basename"; +static const char __pyx_k_can_skip[] = "can_skip"; +static const char __pyx_k_co_lines[] = "co_lines"; +static const char __pyx_k_code_obj[] = "code_obj"; +static const char __pyx_k_endswith[] = "endswith"; +static const char __pyx_k_execfile[] = "execfile"; +static const char __pyx_k_f_lineno[] = "f_lineno"; +static const char __pyx_k_f_locals[] = "f_locals"; +static const char __pyx_k_get_tool[] = "get_tool"; +static const char __pyx_k_getframe[] = "_getframe"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_is_alive[] = "is_alive"; +static const char __pyx_k_module_2[] = "__module__"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_name[] = "__set_name__"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_short_tb[] = "short_tb"; +static const char __pyx_k_splitext[] = "splitext"; +static const char __pyx_k_FrameType[] = "FrameType"; +static const char __pyx_k_PY_RESUME[] = "PY_RESUME"; +static const char __pyx_k_PY_RETURN[] = "PY_RETURN"; +static const char __pyx_k_PY_UNWIND[] = "PY_UNWIND"; +static const char __pyx_k_STATE_RUN[] = "STATE_RUN"; +static const char __pyx_k_bootstrap[] = "__bootstrap"; +static const char __pyx_k_enumerate[] = "enumerate"; +static const char __pyx_k_exception[] = "exception"; +static const char __pyx_k_get_ident[] = "_get_ident"; +static const char __pyx_k_isenabled[] = "isenabled"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_pydev_log[] = "pydev_log"; +static const char __pyx_k_pydevd_py[] = "pydevd.py"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_threading[] = "threading"; +static const char __pyx_k_to_offset[] = "to_offset"; +static const char __pyx_k_traceback[] = "__traceback__"; +static const char __pyx_k_ThreadInfo[] = "ThreadInfo"; +static const char __pyx_k_expression[] = "expression"; +static const char __pyx_k_global_dbg[] = "global_dbg"; +static const char __pyx_k_has_breaks[] = "has_breaks"; +static const char __pyx_k_is_stopped[] = "_is_stopped"; +static const char __pyx_k_monitoring[] = "monitoring"; +static const char __pyx_k_namedtuple[] = "namedtuple"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_set_events[] = "set_events"; +static const char __pyx_k_startswith[] = "startswith"; +static const char __pyx_k_DEBUGGER_ID[] = "DEBUGGER_ID"; +static const char __pyx_k_DEBUG_START[] = "DEBUG_START"; +static const char __pyx_k_DummyThread[] = "_DummyThread"; +static const char __pyx_k_ImportError[] = "ImportError"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_add_command[] = "add_command"; +static const char __pyx_k_all_threads[] = "all_threads"; +static const char __pyx_k_bootstrap_2[] = "_bootstrap"; +static const char __pyx_k_breakpoints[] = "breakpoints"; +static const char __pyx_k_cfunc_to_py[] = "cfunc.to_py"; +static const char __pyx_k_cmd_factory[] = "cmd_factory"; +static const char __pyx_k_co_filename[] = "co_filename"; +static const char __pyx_k_collections[] = "collections"; +static const char __pyx_k_f_bootstrap[] = "f_bootstrap"; +static const char __pyx_k_from_offset[] = "from_offset"; +static const char __pyx_k_get_ident_2[] = "get_ident"; +static const char __pyx_k_instruction[] = "instruction"; +static const char __pyx_k_is_logpoint[] = "is_logpoint"; +static const char __pyx_k_pydev_state[] = "pydev_state"; +static const char __pyx_k_python_line[] = "python-line"; +static const char __pyx_k_set_suspend[] = "set_suspend"; +static const char __pyx_k_short_frame[] = "short_frame"; +static const char __pyx_k_sys_monitor[] = "sys_monitor"; +static const char __pyx_k_thread_info[] = "thread_info"; +static const char __pyx_k_use_tool_id[] = "use_tool_id"; +static const char __pyx_k_CodeLineInfo[] = "_CodeLineInfo"; +static const char __pyx_k_ForkSafeLock[] = "ForkSafeLock"; +static const char __pyx_k_FuncCodeInfo[] = "FuncCodeInfo"; +static const char __pyx_k_dummy_thread[] = "dummy_thread"; +static const char __pyx_k_free_tool_id[] = "free_tool_id"; +static const char __pyx_k_frozen_runpy[] = ""; +static const char __pyx_k_initializing[] = "_initializing"; +static const char __pyx_k_is_coroutine[] = "_is_coroutine"; +static const char __pyx_k_pydev_bundle[] = "_pydev_bundle"; +static const char __pyx_k_pydev_monkey[] = "pydev_monkey"; +static const char __pyx_k_pydevd_runpy[] = "pydevd_runpy"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = ""; +static const char __pyx_k_thread_ident[] = "thread_ident"; +static const char __pyx_k_use_setstate[] = "use_setstate"; +static const char __pyx_k_CMD_SET_BREAK[] = "CMD_SET_BREAK"; +static const char __pyx_k_CMD_STEP_INTO[] = "CMD_STEP_INTO"; +static const char __pyx_k_CMD_STEP_OVER[] = "CMD_STEP_OVER"; +static const char __pyx_k_Optional_bool[] = "Optional[bool]"; +static const char __pyx_k_STATE_SUSPEND[] = "STATE_SUSPEND"; +static const char __pyx_k_class_getitem[] = "__class_getitem__"; +static const char __pyx_k_cmd_step_into[] = "cmd_step_into"; +static const char __pyx_k_cmd_step_over[] = "cmd_step_over"; +static const char __pyx_k_get_file_type[] = "get_file_type"; +static const char __pyx_k_has_condition[] = "has_condition"; +static const char __pyx_k_init_subclass[] = "__init_subclass__"; +static const char __pyx_k_pydb_disposed[] = "pydb_disposed"; +static const char __pyx_k_pydevd_bundle[] = "_pydevd_bundle"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_thread_active[] = "_thread_active"; +static const char __pyx_k_AssertionError[] = "AssertionError"; +static const char __pyx_k_AttributeError[] = "AttributeError"; +static const char __pyx_k_PYTHON_SUSPEND[] = "PYTHON_SUSPEND"; +static const char __pyx_k_TRACE_PROPERTY[] = "TRACE_PROPERTY"; +static const char __pyx_k_current_thread[] = "current_thread"; +static const char __pyx_k_dummy_thread_2[] = "_dummy_thread"; +static const char __pyx_k_findlinestarts[] = "findlinestarts"; +static const char __pyx_k_frame_or_depth[] = "frame_or_depth"; +static const char __pyx_k_get_breakpoint[] = "get_breakpoint"; +static const char __pyx_k_line_to_offset[] = "line_to_offset"; +static const char __pyx_k_pydev_step_cmd[] = "pydev_step_cmd"; +static const char __pyx_k_restart_events[] = "restart_events"; +static const char __pyx_k_suspend_policy[] = "suspend_policy"; +static const char __pyx_k_CMD_STEP_RETURN[] = "CMD_STEP_RETURN"; +static const char __pyx_k_IgnoreException[] = "[^#]*#.*@IgnoreException"; +static const char __pyx_k_additional_info[] = "additional_info"; +static const char __pyx_k_bootstrap_inner[] = "__bootstrap_inner"; +static const char __pyx_k_do_wait_suspend[] = "_do_wait_suspend"; +static const char __pyx_k_make_io_message[] = "make_io_message"; +static const char __pyx_k_python_function[] = "python-function"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_required_events[] = "required_events"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_stop_monitoring[] = "stop_monitoring"; +static const char __pyx_k_DEBUG_START_PY3K[] = "DEBUG_START_PY3K"; +static const char __pyx_k_get_local_events[] = "get_local_events"; +static const char __pyx_k_handle_exception[] = "handle_exception"; +static const char __pyx_k_is_tracked_frame[] = "is_tracked_frame"; +static const char __pyx_k_set_local_events[] = "set_local_events"; +static const char __pyx_k_start_monitoring[] = "start_monitoring"; +static const char __pyx_k_try_except_infos[] = "try_except_infos"; +static const char __pyx_k_active_limbo_lock[] = "_active_limbo_lock"; +static const char __pyx_k_bootstrap_inner_2[] = "_bootstrap_inner"; +static const char __pyx_k_children_variants[] = "children_variants"; +static const char __pyx_k_do_wait_suspend_2[] = "do_wait_suspend"; +static const char __pyx_k_ensure_monitoring[] = "_ensure_monitoring"; +static const char __pyx_k_flag_as_unwinding[] = "flag_as_unwinding"; +static const char __pyx_k_original_step_cmd[] = "original_step_cmd"; +static const char __pyx_k_pydev_execfile_py[] = "_pydev_execfile.py"; +static const char __pyx_k_pydevd_dont_trace[] = "pydevd_dont_trace"; +static const char __pyx_k_pydevd_file_utils[] = "pydevd_file_utils"; +static const char __pyx_k_register_callback[] = "register_callback"; +static const char __pyx_k_should_trace_hook[] = "should_trace_hook"; +static const char __pyx_k_suspend_requested[] = "suspend_requested"; +static const char __pyx_k_thread_local_info[] = "_thread_local_info"; +static const char __pyx_k_RETURN_VALUES_DICT[] = "RETURN_VALUES_DICT"; +static const char __pyx_k_apply_files_filter[] = "apply_files_filter"; +static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_get_func_code_info[] = "_get_func_code_info"; +static const char __pyx_k_get_line_of_offset[] = "get_line_of_offset"; +static const char __pyx_k_instruction_offset[] = "instruction_offset"; +static const char __pyx_k_pydev_do_not_trace[] = "pydev_do_not_trace"; +static const char __pyx_k_show_return_values[] = "show_return_values"; +static const char __pyx_k_CMD_SMART_STEP_INTO[] = "CMD_SMART_STEP_INTO"; +static const char __pyx_k_enable_code_tracing[] = "enable_code_tracing"; +static const char __pyx_k_get_cache_file_type[] = "get_cache_file_type"; +static const char __pyx_k_line_to_breakpoints[] = "line_to_breakpoints"; +static const char __pyx_k_GlobalDebuggerHolder[] = "GlobalDebuggerHolder"; +static const char __pyx_k_IGNORE_EXCEPTION_TAG[] = "IGNORE_EXCEPTION_TAG"; +static const char __pyx_k_disable_code_tracing[] = "disable_code_tracing"; +static const char __pyx_k_get_clsname_for_code[] = "get_clsname_for_code"; +static const char __pyx_k_CMD_STEP_INTO_MY_CODE[] = "CMD_STEP_INTO_MY_CODE"; +static const char __pyx_k_CMD_STEP_OVER_MY_CODE[] = "CMD_STEP_OVER_MY_CODE"; +static const char __pyx_k_TryExceptContainerObj[] = "_TryExceptContainerObj"; +static const char __pyx_k_suspend_other_threads[] = "suspend_other_threads"; +static const char __pyx_k_update_monitor_events[] = "update_monitor_events"; +static const char __pyx_k_CMD_SET_FUNCTION_BREAK[] = "CMD_SET_FUNCTION_BREAK"; +static const char __pyx_k_DeleteDummyThreadOnDel[] = "_DeleteDummyThreadOnDel"; +static const char __pyx_k_EXCEPTION_TYPE_HANDLED[] = "EXCEPTION_TYPE_HANDLED"; +static const char __pyx_k_PYDEVD_IPYTHON_CONTEXT[] = "PYDEVD_IPYTHON_CONTEXT"; +static const char __pyx_k_has_plugin_line_breaks[] = "has_plugin_line_breaks"; +static const char __pyx_k_is_pydev_daemon_thread[] = "is_pydev_daemon_thread"; +static const char __pyx_k_is_unhandled_exception[] = "is_unhandled_exception"; +static const char __pyx_k_track_dummy_thread_ref[] = "_track_dummy_thread_ref"; +static const char __pyx_k_user_uncaught_exc_info[] = "_user_uncaught_exc_info"; +static const char __pyx_k_CMD_STEP_INTO_COROUTINE[] = "CMD_STEP_INTO_COROUTINE"; +static const char __pyx_k_CMD_STEP_RETURN_MY_CODE[] = "CMD_STEP_RETURN_MY_CODE"; +static const char __pyx_k_collect_try_except_info[] = "collect_try_except_info"; +static const char __pyx_k_is_files_filter_enabled[] = "is_files_filter_enabled"; +static const char __pyx_k_pydevd_traceproperty_py[] = "pydevd_traceproperty.py"; +static const char __pyx_k_pyx_unpickle_ThreadInfo[] = "__pyx_unpickle_ThreadInfo"; +static const char __pyx_k_Stop_inside_ipython_call[] = "Stop inside ipython call"; +static const char __pyx_k_required_events_stepping[] = "required_events_stepping"; +static const char __pyx_k_should_stop_on_exception[] = "should_stop_on_exception"; +static const char __pyx_k_pyx_unpickle_FuncCodeInfo[] = "__pyx_unpickle_FuncCodeInfo"; +static const char __pyx_k_ThreadInfo___reduce_cython[] = "ThreadInfo.__reduce_cython__"; +static const char __pyx_k_break_on_caught_exceptions[] = "break_on_caught_exceptions"; +static const char __pyx_k_pydevd_bundle_pydevd_utils[] = "_pydevd_bundle.pydevd_utils"; +static const char __pyx_k_required_events_breakpoint[] = "required_events_breakpoint"; +static const char __pyx_k_file_to_line_to_breakpoints[] = "file_to_line_to_breakpoints"; +static const char __pyx_k_handle_breakpoint_condition[] = "handle_breakpoint_condition"; +static const char __pyx_k_has_plugin_exception_breaks[] = "has_plugin_exception_breaks"; +static const char __pyx_k_is_bootstrap_frame_internal[] = "is_bootstrap_frame_internal"; +static const char __pyx_k_stop_on_unhandled_exception[] = "stop_on_unhandled_exception"; +static const char __pyx_k_DeleteDummyThreadOnDel___del[] = "_DeleteDummyThreadOnDel.__del__"; +static const char __pyx_k_FuncCodeInfo___reduce_cython[] = "FuncCodeInfo.__reduce_cython__"; +static const char __pyx_k_ThreadInfo___setstate_cython[] = "ThreadInfo.__setstate_cython__"; +static const char __pyx_k_break_on_uncaught_exceptions[] = "break_on_uncaught_exceptions"; +static const char __pyx_k_code_to_func_code_info_cache[] = "_code_to_func_code_info_cache"; +static const char __pyx_k_f_disable_next_line_if_match[] = "f_disable_next_line_if_match"; +static const char __pyx_k_handle_breakpoint_expression[] = "handle_breakpoint_expression"; +static const char __pyx_k_pydevd_sys_monitoring_cython[] = "_pydevd_sys_monitoring_cython"; +static const char __pyx_k_DeleteDummyThreadOnDel___init[] = "_DeleteDummyThreadOnDel.__init__"; +static const char __pyx_k_EXCEPTION_TYPE_USER_UNHANDLED[] = "EXCEPTION_TYPE_USER_UNHANDLED"; +static const char __pyx_k_NORM_PATHS_AND_BASE_CONTAINER[] = "NORM_PATHS_AND_BASE_CONTAINER"; +static const char __pyx_k_global_notify_skipped_step_in[] = "_global_notify_skipped_step_in"; +static const char __pyx_k_FuncCodeInfo___setstate_cython[] = "FuncCodeInfo.__setstate_cython__"; +static const char __pyx_k_Helper_class_to_remove_a_dummy[] = "\n Helper class to remove a dummy thread from threading._active on __del__.\n "; +static const char __pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy[] = "__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc..wrap"; +static const char __pyx_k_Pyx_CFunc_7f6725__29_pydevd_sy[] = "__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset..wrap"; +static const char __pyx_k_Pyx_CFunc_893235__29_pydevd_sy[] = "__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset..wrap"; +static const char __pyx_k_Pyx_CFunc_b0409f__29_pydevd_sy[] = "__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line..wrap"; +static const char __pyx_k_TryExceptContainerObj___reduce[] = "_TryExceptContainerObj.__reduce_cython__"; +static const char __pyx_k_pydevd_bundle_pydevd_constants[] = "_pydevd_bundle.pydevd_constants"; +static const char __pyx_k_pyx_unpickle__TryExceptContain[] = "__pyx_unpickle__TryExceptContainerObj"; +static const char __pyx_k_FuncCodeInfo_get_line_of_offset[] = "FuncCodeInfo.get_line_of_offset"; +static const char __pyx_k_TryExceptContainerObj___setstat[] = "_TryExceptContainerObj.__setstate_cython__"; +static const char __pyx_k_get_abs_path_real_path_and_base[] = "get_abs_path_real_path_and_base_from_file"; +static const char __pyx_k_global_notify_skipped_step_in_l[] = "_global_notify_skipped_step_in_lock"; +static const char __pyx_k_has_caught_exception_breakpoint[] = "has_caught_exception_breakpoint_in_pydb"; +static const char __pyx_k_pydev_bundle__pydev_saved_modul[] = "_pydev_bundle._pydev_saved_modules"; +static const char __pyx_k_pydevd_bundle_pydevd_breakpoint[] = "_pydevd_bundle.pydevd_breakpoints"; +static const char __pyx_k_pydevd_bundle_pydevd_bytecode_u[] = "_pydevd_bundle.pydevd_bytecode_utils"; +static const char __pyx_k_pydevd_bundle_pydevd_frame_util[] = "_pydevd_bundle.pydevd_frame_utils"; +static const char __pyx_k_pydevd_bundle_pydevd_trace_disp[] = "_pydevd_bundle.pydevd_trace_dispatch"; +static const char __pyx_k_pydevd_sys_monitoring__pydevd_s[] = "_pydevd_sys_monitoring\\_pydevd_sys_monitoring_cython.pyx"; +static const char __pyx_k_set_trace_for_frame_and_parents[] = "set_trace_for_frame_and_parents"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))"; +static const char __pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy_2[] = "__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval..wrap"; +static const char __pyx_k_break_on_user_uncaught_exception[] = "break_on_user_uncaught_exceptions"; +static const char __pyx_k_function_breakpoint_name_to_brea[] = "function_breakpoint_name_to_breakpoint"; +static const char __pyx_k_get_smart_step_into_variant_from[] = "get_smart_step_into_variant_from_frame_offset"; +static const char __pyx_k_line_to_offset_first_line_last_l[] = "line_to_offset, first_line, last_line"; +static const char __pyx_k_notify_skipped_step_in_because_o[] = "notify_skipped_step_in_because_of_filters"; +static const char __pyx_k_get_abs_path_real_path_and_base_2[] = "get_abs_path_real_path_and_base_from_frame"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))"; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_3[] = "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))"; +/* #### Code section: decls ### */ +static PyObject *__pyx_pf_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction, PyObject *__pyx_v_exc); /* proto */ +static PyObject *__pyx_pf_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction_offset); /* proto */ +static PyObject *__pyx_pf_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, int __pyx_v_line); /* proto */ +static PyObject *__pyx_pf_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, int __pyx_v_from_offset, int __pyx_v_to_offset); /* proto */ +static PyObject *__pyx_pf_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction, PyObject *__pyx_v_retval); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ +static int __pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread, unsigned long __pyx_v_thread_ident, int __pyx_v_trace, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_additional_info); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_2__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_4__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dummy_thread); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_2__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static int __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_2get_line_of_offset(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v_offset); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_4__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_6__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_2_get_func_code_info(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_code_obj, PyObject *__pyx_v_frame_or_depth); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_4disable_code_tracing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_code); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_6enable_code_tracing(CYTHON_UNUSED PyObject *__pyx_self, unsigned long __pyx_v_thread_ident, PyObject *__pyx_v_code, PyObject *__pyx_v_frame); /* proto */ +static int __pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v_try_except_infos); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_2__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_4__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_8_ensure_monitoring(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10start_monitoring(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_all_threads); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12stop_monitoring(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_all_threads); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_14update_monitor_events(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_suspend_requested); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_16restart_events(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_18_do_wait_suspend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_20__pyx_unpickle_ThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22__pyx_unpickle_FuncCodeInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_24__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython_ThreadInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython_FuncCodeInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython__TryExceptContainerObj(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, 0, 0, 0, 0}; +/* #### Code section: late_includes ### */ +/* #### Code section: module_state ### */ +typedef struct { + PyObject *__pyx_d; + PyObject *__pyx_b; + PyObject *__pyx_cython_runtime; + PyObject *__pyx_empty_tuple; + PyObject *__pyx_empty_bytes; + PyObject *__pyx_empty_unicode; + #ifdef __Pyx_CyFunction_USED + PyTypeObject *__pyx_CyFunctionType; + #endif + #ifdef __Pyx_FusedFunction_USED + PyTypeObject *__pyx_FusedFunctionType; + #endif + #ifdef __Pyx_Generator_USED + PyTypeObject *__pyx_GeneratorType; + #endif + #ifdef __Pyx_IterableCoroutine_USED + PyTypeObject *__pyx_IterableCoroutineType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineAwaitType; + #endif + #ifdef __Pyx_Coroutine_USED + PyTypeObject *__pyx_CoroutineType; + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + #if CYTHON_USE_MODULE_STATE + #endif + PyTypeObject *__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo; + #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo; + PyObject *__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo; + PyObject *__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj; + PyObject *__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc; + PyObject *__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset; + PyObject *__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line; + PyObject *__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset; + PyObject *__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval; + #endif + PyTypeObject *__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo; + PyTypeObject *__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo; + PyTypeObject *__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj; + PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc; + PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset; + PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line; + PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset; + PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval; + PyObject *__pyx_kp_s_1; + PyObject *__pyx_n_s_ALL; + PyObject *__pyx_n_s_Any; + PyObject *__pyx_n_s_AssertionError; + PyObject *__pyx_n_s_AttributeError; + PyObject *__pyx_n_s_CMD_SET_BREAK; + PyObject *__pyx_n_s_CMD_SET_FUNCTION_BREAK; + PyObject *__pyx_n_s_CMD_SMART_STEP_INTO; + PyObject *__pyx_n_s_CMD_STEP_INTO; + PyObject *__pyx_n_s_CMD_STEP_INTO_COROUTINE; + PyObject *__pyx_n_s_CMD_STEP_INTO_MY_CODE; + PyObject *__pyx_n_s_CMD_STEP_OVER; + PyObject *__pyx_n_s_CMD_STEP_OVER_MY_CODE; + PyObject *__pyx_n_s_CMD_STEP_RETURN; + PyObject *__pyx_n_s_CMD_STEP_RETURN_MY_CODE; + PyObject *__pyx_n_s_CodeLineInfo; + PyObject *__pyx_n_s_CodeType; + PyObject *__pyx_n_s_DEBUGGER_ID; + PyObject *__pyx_n_s_DEBUG_START; + PyObject *__pyx_n_s_DEBUG_START_PY3K; + PyObject *__pyx_n_s_DISABLE; + PyObject *__pyx_n_s_DeleteDummyThreadOnDel; + PyObject *__pyx_n_s_DeleteDummyThreadOnDel___del; + PyObject *__pyx_n_s_DeleteDummyThreadOnDel___init; + PyObject *__pyx_n_s_Dict; + PyObject *__pyx_n_s_DummyThread; + PyObject *__pyx_n_s_EXCEPTION_TYPE_HANDLED; + PyObject *__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED; + PyObject *__pyx_n_s_ForkSafeLock; + PyObject *__pyx_n_s_FrameType; + PyObject *__pyx_n_s_FuncCodeInfo; + PyObject *__pyx_n_s_FuncCodeInfo___reduce_cython; + PyObject *__pyx_n_s_FuncCodeInfo___setstate_cython; + PyObject *__pyx_n_s_FuncCodeInfo_get_line_of_offset; + PyObject *__pyx_n_s_GlobalDebuggerHolder; + PyObject *__pyx_kp_s_Helper_class_to_remove_a_dummy; + PyObject *__pyx_n_s_IGNORE_EXCEPTION_TAG; + PyObject *__pyx_kp_s_IgnoreException; + PyObject *__pyx_n_s_ImportError; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3; + PyObject *__pyx_n_s_JUMP; + PyObject *__pyx_n_s_LINE; + PyObject *__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER; + PyObject *__pyx_n_s_None; + PyObject *__pyx_n_s_Optional; + PyObject *__pyx_kp_s_Optional_bool; + PyObject *__pyx_n_s_PYDEVD_IPYTHON_CONTEXT; + PyObject *__pyx_n_s_PYTHON_SUSPEND; + PyObject *__pyx_n_s_PY_RESUME; + PyObject *__pyx_n_s_PY_RETURN; + PyObject *__pyx_n_s_PY_START; + PyObject *__pyx_n_s_PY_UNWIND; + PyObject *__pyx_n_s_PickleError; + PyObject *__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy; + PyObject *__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2; + PyObject *__pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy; + PyObject *__pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy; + PyObject *__pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy; + PyObject *__pyx_n_s_RAISE; + PyObject *__pyx_n_s_RETURN_VALUES_DICT; + PyObject *__pyx_n_s_STATE_RUN; + PyObject *__pyx_n_s_STATE_SUSPEND; + PyObject *__pyx_kp_s_Stop_inside_ipython_call; + PyObject *__pyx_n_s_TRACE_PROPERTY; + PyObject *__pyx_n_s_Thread; + PyObject *__pyx_n_s_ThreadInfo; + PyObject *__pyx_n_s_ThreadInfo___reduce_cython; + PyObject *__pyx_n_s_ThreadInfo___setstate_cython; + PyObject *__pyx_n_s_TryExceptContainerObj; + PyObject *__pyx_n_s_TryExceptContainerObj___reduce; + PyObject *__pyx_n_s_TryExceptContainerObj___setstat; + PyObject *__pyx_n_s_Tuple; + PyObject *__pyx_kp_s__14; + PyObject *__pyx_kp_s__17; + PyObject *__pyx_kp_u__19; + PyObject *__pyx_n_s__22; + PyObject *__pyx_n_s_active; + PyObject *__pyx_n_s_active_limbo_lock; + PyObject *__pyx_n_s_add_command; + PyObject *__pyx_n_s_additional_info; + PyObject *__pyx_n_s_all_threads; + PyObject *__pyx_n_s_apply_files_filter; + PyObject *__pyx_n_s_arg; + PyObject *__pyx_n_s_args; + PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_basename; + PyObject *__pyx_n_s_bootstrap; + PyObject *__pyx_n_s_bootstrap_2; + PyObject *__pyx_n_s_bootstrap_inner; + PyObject *__pyx_n_s_bootstrap_inner_2; + PyObject *__pyx_n_s_break_on_caught_exceptions; + PyObject *__pyx_n_s_break_on_uncaught_exceptions; + PyObject *__pyx_n_s_break_on_user_uncaught_exception; + PyObject *__pyx_n_s_breakpoints; + PyObject *__pyx_n_s_call; + PyObject *__pyx_n_s_call_2; + PyObject *__pyx_n_s_can_skip; + PyObject *__pyx_n_s_cfunc_to_py; + PyObject *__pyx_n_s_children_variants; + PyObject *__pyx_n_s_class; + PyObject *__pyx_n_s_class_getitem; + PyObject *__pyx_n_s_cline_in_traceback; + PyObject *__pyx_n_s_cmd_factory; + PyObject *__pyx_n_s_cmd_step_into; + PyObject *__pyx_n_s_cmd_step_over; + PyObject *__pyx_n_s_co_filename; + PyObject *__pyx_n_s_co_lines; + PyObject *__pyx_n_s_co_name; + PyObject *__pyx_n_s_code; + PyObject *__pyx_n_s_code_obj; + PyObject *__pyx_n_s_code_to_func_code_info_cache; + PyObject *__pyx_n_s_collect_try_except_info; + PyObject *__pyx_n_s_collections; + PyObject *__pyx_n_s_compile; + PyObject *__pyx_n_s_current_thread; + PyObject *__pyx_n_s_debug; + PyObject *__pyx_n_s_del; + PyObject *__pyx_n_s_dict; + PyObject *__pyx_n_s_dict_2; + PyObject *__pyx_n_s_dis; + PyObject *__pyx_kp_u_disable; + PyObject *__pyx_n_s_disable_code_tracing; + PyObject *__pyx_n_s_do_wait_suspend; + PyObject *__pyx_n_s_do_wait_suspend_2; + PyObject *__pyx_n_s_doc; + PyObject *__pyx_n_s_dummy_thread; + PyObject *__pyx_n_s_dummy_thread_2; + PyObject *__pyx_kp_u_enable; + PyObject *__pyx_n_s_enable_code_tracing; + PyObject *__pyx_n_s_end; + PyObject *__pyx_n_s_endswith; + PyObject *__pyx_n_s_ensure_monitoring; + PyObject *__pyx_n_s_enter; + PyObject *__pyx_n_s_enumerate; + PyObject *__pyx_n_s_event; + PyObject *__pyx_n_s_events; + PyObject *__pyx_n_s_exc; + PyObject *__pyx_n_s_exception; + PyObject *__pyx_n_s_exec; + PyObject *__pyx_n_s_execfile; + PyObject *__pyx_n_s_exit; + PyObject *__pyx_n_s_expression; + PyObject *__pyx_n_s_f_back; + PyObject *__pyx_n_s_f_bootstrap; + PyObject *__pyx_n_s_f_code; + PyObject *__pyx_n_s_f_disable_next_line_if_match; + PyObject *__pyx_n_s_f_lasti; + PyObject *__pyx_n_s_f_lineno; + PyObject *__pyx_n_s_f_locals; + PyObject *__pyx_n_s_file_to_line_to_breakpoints; + PyObject *__pyx_n_s_findlinestarts; + PyObject *__pyx_n_s_flag_as_unwinding; + PyObject *__pyx_n_s_frame; + PyObject *__pyx_n_s_frame_or_depth; + PyObject *__pyx_n_s_free_tool_id; + PyObject *__pyx_n_s_from_offset; + PyObject *__pyx_kp_s_frozen_runpy; + PyObject *__pyx_n_s_function_breakpoint_name_to_brea; + PyObject *__pyx_kp_u_gc; + PyObject *__pyx_n_s_get; + PyObject *__pyx_n_s_get_abs_path_real_path_and_base; + PyObject *__pyx_n_s_get_abs_path_real_path_and_base_2; + PyObject *__pyx_n_s_get_breakpoint; + PyObject *__pyx_n_s_get_cache_file_type; + PyObject *__pyx_n_s_get_clsname_for_code; + PyObject *__pyx_n_s_get_file_type; + PyObject *__pyx_n_s_get_func_code_info; + PyObject *__pyx_n_s_get_ident; + PyObject *__pyx_n_s_get_ident_2; + PyObject *__pyx_n_s_get_line_of_offset; + PyObject *__pyx_n_s_get_local_events; + PyObject *__pyx_n_s_get_smart_step_into_variant_from; + PyObject *__pyx_n_s_get_tool; + PyObject *__pyx_n_s_getframe; + PyObject *__pyx_n_s_getstate; + PyObject *__pyx_n_s_global_dbg; + PyObject *__pyx_n_s_global_notify_skipped_step_in; + PyObject *__pyx_n_s_global_notify_skipped_step_in_l; + PyObject *__pyx_n_s_handle_breakpoint_condition; + PyObject *__pyx_n_s_handle_breakpoint_expression; + PyObject *__pyx_n_s_handle_exception; + PyObject *__pyx_n_s_has_breaks; + PyObject *__pyx_n_s_has_caught_exception_breakpoint; + PyObject *__pyx_n_s_has_condition; + PyObject *__pyx_n_s_has_plugin_exception_breaks; + PyObject *__pyx_n_s_has_plugin_line_breaks; + PyObject *__pyx_n_s_ident; + PyObject *__pyx_n_s_import; + PyObject *__pyx_n_s_init; + PyObject *__pyx_n_s_init_subclass; + PyObject *__pyx_n_s_initializing; + PyObject *__pyx_n_s_instruction; + PyObject *__pyx_n_s_instruction_offset; + PyObject *__pyx_n_s_is_alive; + PyObject *__pyx_n_s_is_bootstrap_frame_internal; + PyObject *__pyx_n_s_is_coroutine; + PyObject *__pyx_n_s_is_files_filter_enabled; + PyObject *__pyx_n_s_is_logpoint; + PyObject *__pyx_n_s_is_pydev_daemon_thread; + PyObject *__pyx_n_s_is_stopped; + PyObject *__pyx_n_s_is_tracked_frame; + PyObject *__pyx_n_s_is_unhandled_exception; + PyObject *__pyx_kp_u_isenabled; + PyObject *__pyx_n_s_items; + PyObject *__pyx_n_s_kwargs; + PyObject *__pyx_n_s_line; + PyObject *__pyx_n_s_line_to_breakpoints; + PyObject *__pyx_n_s_line_to_offset; + PyObject *__pyx_kp_s_line_to_offset_first_line_last_l; + PyObject *__pyx_n_s_linesep; + PyObject *__pyx_n_s_local; + PyObject *__pyx_n_s_main; + PyObject *__pyx_n_s_main_2; + PyObject *__pyx_n_s_make_io_message; + PyObject *__pyx_n_s_max; + PyObject *__pyx_n_s_metaclass; + PyObject *__pyx_n_s_min; + PyObject *__pyx_kp_s_module; + PyObject *__pyx_n_s_module_2; + PyObject *__pyx_n_s_monitor; + PyObject *__pyx_n_s_monitoring; + PyObject *__pyx_n_s_mtime; + PyObject *__pyx_n_s_name; + PyObject *__pyx_n_s_namedtuple; + PyObject *__pyx_n_s_new; + PyObject *__pyx_n_s_notify_skipped_step_in_because_o; + PyObject *__pyx_n_s_offset; + PyObject *__pyx_n_s_original_step_cmd; + PyObject *__pyx_n_s_os; + PyObject *__pyx_n_s_os_path; + PyObject *__pyx_n_s_pickle; + PyObject *__pyx_n_s_plugin; + PyObject *__pyx_n_s_pop; + PyObject *__pyx_n_s_prepare; + PyObject *__pyx_n_s_py_db; + PyObject *__pyx_kp_s_pyc; + PyObject *__pyx_n_s_pydb_disposed; + PyObject *__pyx_n_s_pydev_bundle; + PyObject *__pyx_n_s_pydev_bundle__pydev_saved_modul; + PyObject *__pyx_n_s_pydev_do_not_trace; + PyObject *__pyx_kp_s_pydev_execfile_py; + PyObject *__pyx_n_s_pydev_log; + PyObject *__pyx_n_s_pydev_monkey; + PyObject *__pyx_n_s_pydev_state; + PyObject *__pyx_n_s_pydev_step_cmd; + PyObject *__pyx_n_s_pydevd; + PyObject *__pyx_n_s_pydevd_bundle; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_breakpoint; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_bytecode_u; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_constants; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_frame_util; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_trace_disp; + PyObject *__pyx_n_s_pydevd_bundle_pydevd_utils; + PyObject *__pyx_n_s_pydevd_dont_trace; + PyObject *__pyx_n_s_pydevd_file_utils; + PyObject *__pyx_kp_s_pydevd_py; + PyObject *__pyx_n_s_pydevd_runpy; + PyObject *__pyx_kp_s_pydevd_sys_monitoring__pydevd_s; + PyObject *__pyx_n_s_pydevd_sys_monitoring_cython; + PyObject *__pyx_kp_s_pydevd_traceproperty_py; + PyObject *__pyx_kp_s_python_function; + PyObject *__pyx_kp_s_python_line; + PyObject *__pyx_n_s_pyx_PickleError; + PyObject *__pyx_n_s_pyx_checksum; + PyObject *__pyx_n_s_pyx_result; + PyObject *__pyx_n_s_pyx_state; + PyObject *__pyx_n_s_pyx_type; + PyObject *__pyx_n_s_pyx_unpickle_FuncCodeInfo; + PyObject *__pyx_n_s_pyx_unpickle_ThreadInfo; + PyObject *__pyx_n_s_pyx_unpickle__TryExceptContain; + PyObject *__pyx_n_s_pyx_vtable; + PyObject *__pyx_n_s_qualname; + PyObject *__pyx_n_s_re; + PyObject *__pyx_n_s_reduce; + PyObject *__pyx_n_s_reduce_cython; + PyObject *__pyx_n_s_reduce_ex; + PyObject *__pyx_n_s_ref; + PyObject *__pyx_n_s_register_callback; + PyObject *__pyx_n_s_required_events; + PyObject *__pyx_n_s_required_events_breakpoint; + PyObject *__pyx_n_s_required_events_stepping; + PyObject *__pyx_n_s_restart_events; + PyObject *__pyx_n_s_return; + PyObject *__pyx_n_s_retval; + PyObject *__pyx_n_s_run; + PyObject *__pyx_n_s_run_2; + PyObject *__pyx_n_s_runpy; + PyObject *__pyx_kp_s_s_s; + PyObject *__pyx_kp_s_s_s_2; + PyObject *__pyx_n_s_self; + PyObject *__pyx_n_s_set_events; + PyObject *__pyx_n_s_set_local_events; + PyObject *__pyx_n_s_set_name; + PyObject *__pyx_n_s_set_suspend; + PyObject *__pyx_n_s_set_trace_for_frame_and_parents; + PyObject *__pyx_n_s_setstate; + PyObject *__pyx_n_s_setstate_cython; + PyObject *__pyx_n_s_short_frame; + PyObject *__pyx_n_s_short_tb; + PyObject *__pyx_n_s_should_stop_on_exception; + PyObject *__pyx_n_s_should_trace_hook; + PyObject *__pyx_n_s_show_return_values; + PyObject *__pyx_n_s_spec; + PyObject *__pyx_n_s_splitext; + PyObject *__pyx_n_s_start; + PyObject *__pyx_n_s_start_monitoring; + PyObject *__pyx_n_s_startswith; + PyObject *__pyx_n_s_state; + PyObject *__pyx_n_s_stop; + PyObject *__pyx_n_s_stop_monitoring; + PyObject *__pyx_n_s_stop_on_unhandled_exception; + PyObject *__pyx_kp_s_stringsource; + PyObject *__pyx_n_s_super; + PyObject *__pyx_n_s_suspend; + PyObject *__pyx_n_s_suspend_other_threads; + PyObject *__pyx_n_s_suspend_policy; + PyObject *__pyx_n_s_suspend_requested; + PyObject *__pyx_n_s_sys; + PyObject *__pyx_n_s_sys_monitor; + PyObject *__pyx_n_s_t; + PyObject *__pyx_n_s_test; + PyObject *__pyx_n_s_thread; + PyObject *__pyx_n_s_thread_active; + PyObject *__pyx_n_s_thread_ident; + PyObject *__pyx_n_s_thread_info; + PyObject *__pyx_n_s_thread_local_info; + PyObject *__pyx_n_s_threading; + PyObject *__pyx_n_s_tident; + PyObject *__pyx_n_s_to_offset; + PyObject *__pyx_n_s_trace; + PyObject *__pyx_n_s_traceback; + PyObject *__pyx_n_s_track_dummy_thread_ref; + PyObject *__pyx_n_s_try_except_infos; + PyObject *__pyx_n_s_types; + PyObject *__pyx_n_s_typing; + PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_update_monitor_events; + PyObject *__pyx_n_s_use_setstate; + PyObject *__pyx_n_s_use_tool_id; + PyObject *__pyx_n_s_user_uncaught_exc_info; + PyObject *__pyx_n_s_values; + PyObject *__pyx_n_s_wrap; + PyObject *__pyx_n_s_writer; + PyObject *__pyx_int_0; + PyObject *__pyx_int_1; + PyObject *__pyx_int_2; + PyObject *__pyx_int_107; + PyObject *__pyx_int_108; + PyObject *__pyx_int_109; + PyObject *__pyx_int_111; + PyObject *__pyx_int_128; + PyObject *__pyx_int_144; + PyObject *__pyx_int_159; + PyObject *__pyx_int_160; + PyObject *__pyx_int_206; + PyObject *__pyx_int_208; + PyObject *__pyx_int_66323410; + PyObject *__pyx_int_92026781; + PyObject *__pyx_int_99967855; + PyObject *__pyx_int_189049472; + PyObject *__pyx_int_210464433; + PyObject *__pyx_int_224549882; + PyObject *__pyx_int_230645316; + PyObject *__pyx_int_232881363; + PyObject *__pyx_int_266084120; + PyObject *__pyx_int_neg_1; + PyObject *__pyx_k__15; + PyObject *__pyx_tuple_; + PyObject *__pyx_tuple__3; + PyObject *__pyx_tuple__5; + PyObject *__pyx_tuple__7; + PyObject *__pyx_tuple__9; + PyObject *__pyx_slice__16; + PyObject *__pyx_tuple__11; + PyObject *__pyx_tuple__12; + PyObject *__pyx_tuple__13; + PyObject *__pyx_tuple__18; + PyObject *__pyx_tuple__20; + PyObject *__pyx_tuple__21; + PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__25; + PyObject *__pyx_tuple__26; + PyObject *__pyx_tuple__27; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__30; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__34; + PyObject *__pyx_tuple__36; + PyObject *__pyx_tuple__40; + PyObject *__pyx_tuple__41; + PyObject *__pyx_tuple__43; + PyObject *__pyx_tuple__45; + PyObject *__pyx_tuple__50; + PyObject *__pyx_tuple__52; + PyObject *__pyx_tuple__54; + PyObject *__pyx_tuple__55; + PyObject *__pyx_tuple__57; + PyObject *__pyx_tuple__59; + PyObject *__pyx_tuple__61; + PyObject *__pyx_codeobj__2; + PyObject *__pyx_codeobj__4; + PyObject *__pyx_codeobj__6; + PyObject *__pyx_codeobj__8; + PyObject *__pyx_codeobj__10; + PyObject *__pyx_codeobj__24; + PyObject *__pyx_codeobj__29; + PyObject *__pyx_codeobj__31; + PyObject *__pyx_codeobj__33; + PyObject *__pyx_codeobj__35; + PyObject *__pyx_codeobj__37; + PyObject *__pyx_codeobj__38; + PyObject *__pyx_codeobj__39; + PyObject *__pyx_codeobj__42; + PyObject *__pyx_codeobj__44; + PyObject *__pyx_codeobj__46; + PyObject *__pyx_codeobj__47; + PyObject *__pyx_codeobj__48; + PyObject *__pyx_codeobj__49; + PyObject *__pyx_codeobj__51; + PyObject *__pyx_codeobj__53; + PyObject *__pyx_codeobj__56; + PyObject *__pyx_codeobj__58; + PyObject *__pyx_codeobj__60; + PyObject *__pyx_codeobj__62; + PyObject *__pyx_codeobj__63; + PyObject *__pyx_codeobj__64; +} __pyx_mstate; + +#if CYTHON_USE_MODULE_STATE +#ifdef __cplusplus +namespace { + extern struct PyModuleDef __pyx_moduledef; +} /* anonymous namespace */ +#else +static struct PyModuleDef __pyx_moduledef; +#endif + +#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) + +#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) + +#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) +#else +static __pyx_mstate __pyx_mstate_global_static = +#ifdef __cplusplus + {}; +#else + {0}; +#endif +static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; +#endif +/* #### Code section: module_state_clear ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_clear(PyObject *m) { + __pyx_mstate *clear_module_state = __pyx_mstate(m); + if (!clear_module_state) return 0; + Py_CLEAR(clear_module_state->__pyx_d); + Py_CLEAR(clear_module_state->__pyx_b); + Py_CLEAR(clear_module_state->__pyx_cython_runtime); + Py_CLEAR(clear_module_state->__pyx_empty_tuple); + Py_CLEAR(clear_module_state->__pyx_empty_bytes); + Py_CLEAR(clear_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_CLEAR(clear_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); + #endif + Py_CLEAR(clear_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc); + Py_CLEAR(clear_module_state->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc); + Py_CLEAR(clear_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset); + Py_CLEAR(clear_module_state->__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset); + Py_CLEAR(clear_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line); + Py_CLEAR(clear_module_state->__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line); + Py_CLEAR(clear_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset); + Py_CLEAR(clear_module_state->__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset); + Py_CLEAR(clear_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval); + Py_CLEAR(clear_module_state->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval); + Py_CLEAR(clear_module_state->__pyx_kp_s_1); + Py_CLEAR(clear_module_state->__pyx_n_s_ALL); + Py_CLEAR(clear_module_state->__pyx_n_s_Any); + Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_n_s_AttributeError); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_SET_BREAK); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_SET_FUNCTION_BREAK); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_SMART_STEP_INTO); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_INTO); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_INTO_COROUTINE); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_INTO_MY_CODE); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_OVER); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_OVER_MY_CODE); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_RETURN); + Py_CLEAR(clear_module_state->__pyx_n_s_CMD_STEP_RETURN_MY_CODE); + Py_CLEAR(clear_module_state->__pyx_n_s_CodeLineInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_CodeType); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUGGER_ID); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUG_START); + Py_CLEAR(clear_module_state->__pyx_n_s_DEBUG_START_PY3K); + Py_CLEAR(clear_module_state->__pyx_n_s_DISABLE); + Py_CLEAR(clear_module_state->__pyx_n_s_DeleteDummyThreadOnDel); + Py_CLEAR(clear_module_state->__pyx_n_s_DeleteDummyThreadOnDel___del); + Py_CLEAR(clear_module_state->__pyx_n_s_DeleteDummyThreadOnDel___init); + Py_CLEAR(clear_module_state->__pyx_n_s_Dict); + Py_CLEAR(clear_module_state->__pyx_n_s_DummyThread); + Py_CLEAR(clear_module_state->__pyx_n_s_EXCEPTION_TYPE_HANDLED); + Py_CLEAR(clear_module_state->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + Py_CLEAR(clear_module_state->__pyx_n_s_ForkSafeLock); + Py_CLEAR(clear_module_state->__pyx_n_s_FrameType); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_FuncCodeInfo_get_line_of_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_GlobalDebuggerHolder); + Py_CLEAR(clear_module_state->__pyx_kp_s_Helper_class_to_remove_a_dummy); + Py_CLEAR(clear_module_state->__pyx_n_s_IGNORE_EXCEPTION_TAG); + Py_CLEAR(clear_module_state->__pyx_kp_s_IgnoreException); + Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_CLEAR(clear_module_state->__pyx_n_s_JUMP); + Py_CLEAR(clear_module_state->__pyx_n_s_LINE); + Py_CLEAR(clear_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_CLEAR(clear_module_state->__pyx_n_s_None); + Py_CLEAR(clear_module_state->__pyx_n_s_Optional); + Py_CLEAR(clear_module_state->__pyx_kp_s_Optional_bool); + Py_CLEAR(clear_module_state->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + Py_CLEAR(clear_module_state->__pyx_n_s_PYTHON_SUSPEND); + Py_CLEAR(clear_module_state->__pyx_n_s_PY_RESUME); + Py_CLEAR(clear_module_state->__pyx_n_s_PY_RETURN); + Py_CLEAR(clear_module_state->__pyx_n_s_PY_START); + Py_CLEAR(clear_module_state->__pyx_n_s_PY_UNWIND); + Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy); + Py_CLEAR(clear_module_state->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2); + Py_CLEAR(clear_module_state->__pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy); + Py_CLEAR(clear_module_state->__pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy); + Py_CLEAR(clear_module_state->__pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy); + Py_CLEAR(clear_module_state->__pyx_n_s_RAISE); + Py_CLEAR(clear_module_state->__pyx_n_s_RETURN_VALUES_DICT); + Py_CLEAR(clear_module_state->__pyx_n_s_STATE_RUN); + Py_CLEAR(clear_module_state->__pyx_n_s_STATE_SUSPEND); + Py_CLEAR(clear_module_state->__pyx_kp_s_Stop_inside_ipython_call); + Py_CLEAR(clear_module_state->__pyx_n_s_TRACE_PROPERTY); + Py_CLEAR(clear_module_state->__pyx_n_s_Thread); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_ThreadInfo___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj___reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_TryExceptContainerObj___setstat); + Py_CLEAR(clear_module_state->__pyx_n_s_Tuple); + Py_CLEAR(clear_module_state->__pyx_kp_s__14); + Py_CLEAR(clear_module_state->__pyx_kp_s__17); + Py_CLEAR(clear_module_state->__pyx_kp_u__19); + Py_CLEAR(clear_module_state->__pyx_n_s__22); + Py_CLEAR(clear_module_state->__pyx_n_s_active); + Py_CLEAR(clear_module_state->__pyx_n_s_active_limbo_lock); + Py_CLEAR(clear_module_state->__pyx_n_s_add_command); + Py_CLEAR(clear_module_state->__pyx_n_s_additional_info); + Py_CLEAR(clear_module_state->__pyx_n_s_all_threads); + Py_CLEAR(clear_module_state->__pyx_n_s_apply_files_filter); + Py_CLEAR(clear_module_state->__pyx_n_s_arg); + Py_CLEAR(clear_module_state->__pyx_n_s_args); + Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_basename); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_2); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner); + Py_CLEAR(clear_module_state->__pyx_n_s_bootstrap_inner_2); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_uncaught_exceptions); + Py_CLEAR(clear_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_breakpoints); + Py_CLEAR(clear_module_state->__pyx_n_s_call); + Py_CLEAR(clear_module_state->__pyx_n_s_call_2); + Py_CLEAR(clear_module_state->__pyx_n_s_can_skip); + Py_CLEAR(clear_module_state->__pyx_n_s_cfunc_to_py); + Py_CLEAR(clear_module_state->__pyx_n_s_children_variants); + Py_CLEAR(clear_module_state->__pyx_n_s_class); + Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); + Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_factory); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_step_into); + Py_CLEAR(clear_module_state->__pyx_n_s_cmd_step_over); + Py_CLEAR(clear_module_state->__pyx_n_s_co_filename); + Py_CLEAR(clear_module_state->__pyx_n_s_co_lines); + Py_CLEAR(clear_module_state->__pyx_n_s_co_name); + Py_CLEAR(clear_module_state->__pyx_n_s_code); + Py_CLEAR(clear_module_state->__pyx_n_s_code_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_code_to_func_code_info_cache); + Py_CLEAR(clear_module_state->__pyx_n_s_collect_try_except_info); + Py_CLEAR(clear_module_state->__pyx_n_s_collections); + Py_CLEAR(clear_module_state->__pyx_n_s_compile); + Py_CLEAR(clear_module_state->__pyx_n_s_current_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_debug); + Py_CLEAR(clear_module_state->__pyx_n_s_del); + Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_dict_2); + Py_CLEAR(clear_module_state->__pyx_n_s_dis); + Py_CLEAR(clear_module_state->__pyx_kp_u_disable); + Py_CLEAR(clear_module_state->__pyx_n_s_disable_code_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_do_wait_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_do_wait_suspend_2); + Py_CLEAR(clear_module_state->__pyx_n_s_doc); + Py_CLEAR(clear_module_state->__pyx_n_s_dummy_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_dummy_thread_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_enable); + Py_CLEAR(clear_module_state->__pyx_n_s_enable_code_tracing); + Py_CLEAR(clear_module_state->__pyx_n_s_end); + Py_CLEAR(clear_module_state->__pyx_n_s_endswith); + Py_CLEAR(clear_module_state->__pyx_n_s_ensure_monitoring); + Py_CLEAR(clear_module_state->__pyx_n_s_enter); + Py_CLEAR(clear_module_state->__pyx_n_s_enumerate); + Py_CLEAR(clear_module_state->__pyx_n_s_event); + Py_CLEAR(clear_module_state->__pyx_n_s_events); + Py_CLEAR(clear_module_state->__pyx_n_s_exc); + Py_CLEAR(clear_module_state->__pyx_n_s_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_exec); + Py_CLEAR(clear_module_state->__pyx_n_s_execfile); + Py_CLEAR(clear_module_state->__pyx_n_s_exit); + Py_CLEAR(clear_module_state->__pyx_n_s_expression); + Py_CLEAR(clear_module_state->__pyx_n_s_f_back); + Py_CLEAR(clear_module_state->__pyx_n_s_f_bootstrap); + Py_CLEAR(clear_module_state->__pyx_n_s_f_code); + Py_CLEAR(clear_module_state->__pyx_n_s_f_disable_next_line_if_match); + Py_CLEAR(clear_module_state->__pyx_n_s_f_lasti); + Py_CLEAR(clear_module_state->__pyx_n_s_f_lineno); + Py_CLEAR(clear_module_state->__pyx_n_s_f_locals); + Py_CLEAR(clear_module_state->__pyx_n_s_file_to_line_to_breakpoints); + Py_CLEAR(clear_module_state->__pyx_n_s_findlinestarts); + Py_CLEAR(clear_module_state->__pyx_n_s_flag_as_unwinding); + Py_CLEAR(clear_module_state->__pyx_n_s_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_frame_or_depth); + Py_CLEAR(clear_module_state->__pyx_n_s_free_tool_id); + Py_CLEAR(clear_module_state->__pyx_n_s_from_offset); + Py_CLEAR(clear_module_state->__pyx_kp_s_frozen_runpy); + Py_CLEAR(clear_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); + Py_CLEAR(clear_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_CLEAR(clear_module_state->__pyx_n_s_get_abs_path_real_path_and_base_2); + Py_CLEAR(clear_module_state->__pyx_n_s_get_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_get_cache_file_type); + Py_CLEAR(clear_module_state->__pyx_n_s_get_clsname_for_code); + Py_CLEAR(clear_module_state->__pyx_n_s_get_file_type); + Py_CLEAR(clear_module_state->__pyx_n_s_get_func_code_info); + Py_CLEAR(clear_module_state->__pyx_n_s_get_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_get_ident_2); + Py_CLEAR(clear_module_state->__pyx_n_s_get_line_of_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_get_local_events); + Py_CLEAR(clear_module_state->__pyx_n_s_get_smart_step_into_variant_from); + Py_CLEAR(clear_module_state->__pyx_n_s_get_tool); + Py_CLEAR(clear_module_state->__pyx_n_s_getframe); + Py_CLEAR(clear_module_state->__pyx_n_s_getstate); + Py_CLEAR(clear_module_state->__pyx_n_s_global_dbg); + Py_CLEAR(clear_module_state->__pyx_n_s_global_notify_skipped_step_in); + Py_CLEAR(clear_module_state->__pyx_n_s_global_notify_skipped_step_in_l); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_breakpoint_condition); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_breakpoint_expression); + Py_CLEAR(clear_module_state->__pyx_n_s_handle_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_has_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_has_caught_exception_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_has_condition); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_CLEAR(clear_module_state->__pyx_n_s_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_import); + Py_CLEAR(clear_module_state->__pyx_n_s_init); + Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); + Py_CLEAR(clear_module_state->__pyx_n_s_initializing); + Py_CLEAR(clear_module_state->__pyx_n_s_instruction); + Py_CLEAR(clear_module_state->__pyx_n_s_instruction_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_is_alive); + Py_CLEAR(clear_module_state->__pyx_n_s_is_bootstrap_frame_internal); + Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); + Py_CLEAR(clear_module_state->__pyx_n_s_is_files_filter_enabled); + Py_CLEAR(clear_module_state->__pyx_n_s_is_logpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_is_pydev_daemon_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_is_stopped); + Py_CLEAR(clear_module_state->__pyx_n_s_is_tracked_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_is_unhandled_exception); + Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled); + Py_CLEAR(clear_module_state->__pyx_n_s_items); + Py_CLEAR(clear_module_state->__pyx_n_s_kwargs); + Py_CLEAR(clear_module_state->__pyx_n_s_line); + Py_CLEAR(clear_module_state->__pyx_n_s_line_to_breakpoints); + Py_CLEAR(clear_module_state->__pyx_n_s_line_to_offset); + Py_CLEAR(clear_module_state->__pyx_kp_s_line_to_offset_first_line_last_l); + Py_CLEAR(clear_module_state->__pyx_n_s_linesep); + Py_CLEAR(clear_module_state->__pyx_n_s_local); + Py_CLEAR(clear_module_state->__pyx_n_s_main); + Py_CLEAR(clear_module_state->__pyx_n_s_main_2); + Py_CLEAR(clear_module_state->__pyx_n_s_make_io_message); + Py_CLEAR(clear_module_state->__pyx_n_s_max); + Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); + Py_CLEAR(clear_module_state->__pyx_n_s_min); + Py_CLEAR(clear_module_state->__pyx_kp_s_module); + Py_CLEAR(clear_module_state->__pyx_n_s_module_2); + Py_CLEAR(clear_module_state->__pyx_n_s_monitor); + Py_CLEAR(clear_module_state->__pyx_n_s_monitoring); + Py_CLEAR(clear_module_state->__pyx_n_s_mtime); + Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_s_namedtuple); + Py_CLEAR(clear_module_state->__pyx_n_s_new); + Py_CLEAR(clear_module_state->__pyx_n_s_notify_skipped_step_in_because_o); + Py_CLEAR(clear_module_state->__pyx_n_s_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_original_step_cmd); + Py_CLEAR(clear_module_state->__pyx_n_s_os); + Py_CLEAR(clear_module_state->__pyx_n_s_os_path); + Py_CLEAR(clear_module_state->__pyx_n_s_pickle); + Py_CLEAR(clear_module_state->__pyx_n_s_plugin); + Py_CLEAR(clear_module_state->__pyx_n_s_pop); + Py_CLEAR(clear_module_state->__pyx_n_s_prepare); + Py_CLEAR(clear_module_state->__pyx_n_s_py_db); + Py_CLEAR(clear_module_state->__pyx_kp_s_pyc); + Py_CLEAR(clear_module_state->__pyx_n_s_pydb_disposed); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_do_not_trace); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydev_execfile_py); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_log); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_monkey); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pydev_step_cmd); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_frame_util); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_trace_disp); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_bundle_pydevd_utils); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_dont_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_file_utils); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_py); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_runpy); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_sys_monitoring__pydevd_s); + Py_CLEAR(clear_module_state->__pyx_n_s_pydevd_sys_monitoring_cython); + Py_CLEAR(clear_module_state->__pyx_kp_s_pydevd_traceproperty_py); + Py_CLEAR(clear_module_state->__pyx_kp_s_python_function); + Py_CLEAR(clear_module_state->__pyx_kp_s_python_line); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_FuncCodeInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_ThreadInfo); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle__TryExceptContain); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_s_qualname); + Py_CLEAR(clear_module_state->__pyx_n_s_re); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); + Py_CLEAR(clear_module_state->__pyx_n_s_ref); + Py_CLEAR(clear_module_state->__pyx_n_s_register_callback); + Py_CLEAR(clear_module_state->__pyx_n_s_required_events); + Py_CLEAR(clear_module_state->__pyx_n_s_required_events_breakpoint); + Py_CLEAR(clear_module_state->__pyx_n_s_required_events_stepping); + Py_CLEAR(clear_module_state->__pyx_n_s_restart_events); + Py_CLEAR(clear_module_state->__pyx_n_s_return); + Py_CLEAR(clear_module_state->__pyx_n_s_retval); + Py_CLEAR(clear_module_state->__pyx_n_s_run); + Py_CLEAR(clear_module_state->__pyx_n_s_run_2); + Py_CLEAR(clear_module_state->__pyx_n_s_runpy); + Py_CLEAR(clear_module_state->__pyx_kp_s_s_s); + Py_CLEAR(clear_module_state->__pyx_kp_s_s_s_2); + Py_CLEAR(clear_module_state->__pyx_n_s_self); + Py_CLEAR(clear_module_state->__pyx_n_s_set_events); + Py_CLEAR(clear_module_state->__pyx_n_s_set_local_events); + Py_CLEAR(clear_module_state->__pyx_n_s_set_name); + Py_CLEAR(clear_module_state->__pyx_n_s_set_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_set_trace_for_frame_and_parents); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_short_frame); + Py_CLEAR(clear_module_state->__pyx_n_s_short_tb); + Py_CLEAR(clear_module_state->__pyx_n_s_should_stop_on_exception); + Py_CLEAR(clear_module_state->__pyx_n_s_should_trace_hook); + Py_CLEAR(clear_module_state->__pyx_n_s_show_return_values); + Py_CLEAR(clear_module_state->__pyx_n_s_spec); + Py_CLEAR(clear_module_state->__pyx_n_s_splitext); + Py_CLEAR(clear_module_state->__pyx_n_s_start); + Py_CLEAR(clear_module_state->__pyx_n_s_start_monitoring); + Py_CLEAR(clear_module_state->__pyx_n_s_startswith); + Py_CLEAR(clear_module_state->__pyx_n_s_state); + Py_CLEAR(clear_module_state->__pyx_n_s_stop); + Py_CLEAR(clear_module_state->__pyx_n_s_stop_monitoring); + Py_CLEAR(clear_module_state->__pyx_n_s_stop_on_unhandled_exception); + Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource); + Py_CLEAR(clear_module_state->__pyx_n_s_super); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend_other_threads); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend_policy); + Py_CLEAR(clear_module_state->__pyx_n_s_suspend_requested); + Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_sys_monitor); + Py_CLEAR(clear_module_state->__pyx_n_s_t); + Py_CLEAR(clear_module_state->__pyx_n_s_test); + Py_CLEAR(clear_module_state->__pyx_n_s_thread); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_active); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_ident); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_info); + Py_CLEAR(clear_module_state->__pyx_n_s_thread_local_info); + Py_CLEAR(clear_module_state->__pyx_n_s_threading); + Py_CLEAR(clear_module_state->__pyx_n_s_tident); + Py_CLEAR(clear_module_state->__pyx_n_s_to_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_trace); + Py_CLEAR(clear_module_state->__pyx_n_s_traceback); + Py_CLEAR(clear_module_state->__pyx_n_s_track_dummy_thread_ref); + Py_CLEAR(clear_module_state->__pyx_n_s_try_except_infos); + Py_CLEAR(clear_module_state->__pyx_n_s_types); + Py_CLEAR(clear_module_state->__pyx_n_s_typing); + Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_update_monitor_events); + Py_CLEAR(clear_module_state->__pyx_n_s_use_setstate); + Py_CLEAR(clear_module_state->__pyx_n_s_use_tool_id); + Py_CLEAR(clear_module_state->__pyx_n_s_user_uncaught_exc_info); + Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_wrap); + Py_CLEAR(clear_module_state->__pyx_n_s_writer); + Py_CLEAR(clear_module_state->__pyx_int_0); + Py_CLEAR(clear_module_state->__pyx_int_1); + Py_CLEAR(clear_module_state->__pyx_int_2); + Py_CLEAR(clear_module_state->__pyx_int_107); + Py_CLEAR(clear_module_state->__pyx_int_108); + Py_CLEAR(clear_module_state->__pyx_int_109); + Py_CLEAR(clear_module_state->__pyx_int_111); + Py_CLEAR(clear_module_state->__pyx_int_128); + Py_CLEAR(clear_module_state->__pyx_int_144); + Py_CLEAR(clear_module_state->__pyx_int_159); + Py_CLEAR(clear_module_state->__pyx_int_160); + Py_CLEAR(clear_module_state->__pyx_int_206); + Py_CLEAR(clear_module_state->__pyx_int_208); + Py_CLEAR(clear_module_state->__pyx_int_66323410); + Py_CLEAR(clear_module_state->__pyx_int_92026781); + Py_CLEAR(clear_module_state->__pyx_int_99967855); + Py_CLEAR(clear_module_state->__pyx_int_189049472); + Py_CLEAR(clear_module_state->__pyx_int_210464433); + Py_CLEAR(clear_module_state->__pyx_int_224549882); + Py_CLEAR(clear_module_state->__pyx_int_230645316); + Py_CLEAR(clear_module_state->__pyx_int_232881363); + Py_CLEAR(clear_module_state->__pyx_int_266084120); + Py_CLEAR(clear_module_state->__pyx_int_neg_1); + Py_CLEAR(clear_module_state->__pyx_k__15); + Py_CLEAR(clear_module_state->__pyx_tuple_); + Py_CLEAR(clear_module_state->__pyx_tuple__3); + Py_CLEAR(clear_module_state->__pyx_tuple__5); + Py_CLEAR(clear_module_state->__pyx_tuple__7); + Py_CLEAR(clear_module_state->__pyx_tuple__9); + Py_CLEAR(clear_module_state->__pyx_slice__16); + Py_CLEAR(clear_module_state->__pyx_tuple__11); + Py_CLEAR(clear_module_state->__pyx_tuple__12); + Py_CLEAR(clear_module_state->__pyx_tuple__13); + Py_CLEAR(clear_module_state->__pyx_tuple__18); + Py_CLEAR(clear_module_state->__pyx_tuple__20); + Py_CLEAR(clear_module_state->__pyx_tuple__21); + Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__26); + Py_CLEAR(clear_module_state->__pyx_tuple__27); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__34); + Py_CLEAR(clear_module_state->__pyx_tuple__36); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__41); + Py_CLEAR(clear_module_state->__pyx_tuple__43); + Py_CLEAR(clear_module_state->__pyx_tuple__45); + Py_CLEAR(clear_module_state->__pyx_tuple__50); + Py_CLEAR(clear_module_state->__pyx_tuple__52); + Py_CLEAR(clear_module_state->__pyx_tuple__54); + Py_CLEAR(clear_module_state->__pyx_tuple__55); + Py_CLEAR(clear_module_state->__pyx_tuple__57); + Py_CLEAR(clear_module_state->__pyx_tuple__59); + Py_CLEAR(clear_module_state->__pyx_tuple__61); + Py_CLEAR(clear_module_state->__pyx_codeobj__2); + Py_CLEAR(clear_module_state->__pyx_codeobj__4); + Py_CLEAR(clear_module_state->__pyx_codeobj__6); + Py_CLEAR(clear_module_state->__pyx_codeobj__8); + Py_CLEAR(clear_module_state->__pyx_codeobj__10); + Py_CLEAR(clear_module_state->__pyx_codeobj__24); + Py_CLEAR(clear_module_state->__pyx_codeobj__29); + Py_CLEAR(clear_module_state->__pyx_codeobj__31); + Py_CLEAR(clear_module_state->__pyx_codeobj__33); + Py_CLEAR(clear_module_state->__pyx_codeobj__35); + Py_CLEAR(clear_module_state->__pyx_codeobj__37); + Py_CLEAR(clear_module_state->__pyx_codeobj__38); + Py_CLEAR(clear_module_state->__pyx_codeobj__39); + Py_CLEAR(clear_module_state->__pyx_codeobj__42); + Py_CLEAR(clear_module_state->__pyx_codeobj__44); + Py_CLEAR(clear_module_state->__pyx_codeobj__46); + Py_CLEAR(clear_module_state->__pyx_codeobj__47); + Py_CLEAR(clear_module_state->__pyx_codeobj__48); + Py_CLEAR(clear_module_state->__pyx_codeobj__49); + Py_CLEAR(clear_module_state->__pyx_codeobj__51); + Py_CLEAR(clear_module_state->__pyx_codeobj__53); + Py_CLEAR(clear_module_state->__pyx_codeobj__56); + Py_CLEAR(clear_module_state->__pyx_codeobj__58); + Py_CLEAR(clear_module_state->__pyx_codeobj__60); + Py_CLEAR(clear_module_state->__pyx_codeobj__62); + Py_CLEAR(clear_module_state->__pyx_codeobj__63); + Py_CLEAR(clear_module_state->__pyx_codeobj__64); + return 0; +} +#endif +/* #### Code section: module_state_traverse ### */ +#if CYTHON_USE_MODULE_STATE +static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { + __pyx_mstate *traverse_module_state = __pyx_mstate(m); + if (!traverse_module_state) return 0; + Py_VISIT(traverse_module_state->__pyx_d); + Py_VISIT(traverse_module_state->__pyx_b); + Py_VISIT(traverse_module_state->__pyx_cython_runtime); + Py_VISIT(traverse_module_state->__pyx_empty_tuple); + Py_VISIT(traverse_module_state->__pyx_empty_bytes); + Py_VISIT(traverse_module_state->__pyx_empty_unicode); + #ifdef __Pyx_CyFunction_USED + Py_VISIT(traverse_module_state->__pyx_CyFunctionType); + #endif + #ifdef __Pyx_FusedFunction_USED + Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); + #endif + Py_VISIT(traverse_module_state->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc); + Py_VISIT(traverse_module_state->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc); + Py_VISIT(traverse_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset); + Py_VISIT(traverse_module_state->__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset); + Py_VISIT(traverse_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line); + Py_VISIT(traverse_module_state->__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line); + Py_VISIT(traverse_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset); + Py_VISIT(traverse_module_state->__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset); + Py_VISIT(traverse_module_state->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval); + Py_VISIT(traverse_module_state->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval); + Py_VISIT(traverse_module_state->__pyx_kp_s_1); + Py_VISIT(traverse_module_state->__pyx_n_s_ALL); + Py_VISIT(traverse_module_state->__pyx_n_s_Any); + Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_n_s_AttributeError); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_SET_BREAK); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_SET_FUNCTION_BREAK); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_SMART_STEP_INTO); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_INTO); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_INTO_COROUTINE); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_INTO_MY_CODE); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_OVER); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_OVER_MY_CODE); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_RETURN); + Py_VISIT(traverse_module_state->__pyx_n_s_CMD_STEP_RETURN_MY_CODE); + Py_VISIT(traverse_module_state->__pyx_n_s_CodeLineInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_CodeType); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUGGER_ID); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUG_START); + Py_VISIT(traverse_module_state->__pyx_n_s_DEBUG_START_PY3K); + Py_VISIT(traverse_module_state->__pyx_n_s_DISABLE); + Py_VISIT(traverse_module_state->__pyx_n_s_DeleteDummyThreadOnDel); + Py_VISIT(traverse_module_state->__pyx_n_s_DeleteDummyThreadOnDel___del); + Py_VISIT(traverse_module_state->__pyx_n_s_DeleteDummyThreadOnDel___init); + Py_VISIT(traverse_module_state->__pyx_n_s_Dict); + Py_VISIT(traverse_module_state->__pyx_n_s_DummyThread); + Py_VISIT(traverse_module_state->__pyx_n_s_EXCEPTION_TYPE_HANDLED); + Py_VISIT(traverse_module_state->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + Py_VISIT(traverse_module_state->__pyx_n_s_ForkSafeLock); + Py_VISIT(traverse_module_state->__pyx_n_s_FrameType); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_FuncCodeInfo_get_line_of_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_GlobalDebuggerHolder); + Py_VISIT(traverse_module_state->__pyx_kp_s_Helper_class_to_remove_a_dummy); + Py_VISIT(traverse_module_state->__pyx_n_s_IGNORE_EXCEPTION_TAG); + Py_VISIT(traverse_module_state->__pyx_kp_s_IgnoreException); + Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3); + Py_VISIT(traverse_module_state->__pyx_n_s_JUMP); + Py_VISIT(traverse_module_state->__pyx_n_s_LINE); + Py_VISIT(traverse_module_state->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + Py_VISIT(traverse_module_state->__pyx_n_s_None); + Py_VISIT(traverse_module_state->__pyx_n_s_Optional); + Py_VISIT(traverse_module_state->__pyx_kp_s_Optional_bool); + Py_VISIT(traverse_module_state->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + Py_VISIT(traverse_module_state->__pyx_n_s_PYTHON_SUSPEND); + Py_VISIT(traverse_module_state->__pyx_n_s_PY_RESUME); + Py_VISIT(traverse_module_state->__pyx_n_s_PY_RETURN); + Py_VISIT(traverse_module_state->__pyx_n_s_PY_START); + Py_VISIT(traverse_module_state->__pyx_n_s_PY_UNWIND); + Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy); + Py_VISIT(traverse_module_state->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2); + Py_VISIT(traverse_module_state->__pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy); + Py_VISIT(traverse_module_state->__pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy); + Py_VISIT(traverse_module_state->__pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy); + Py_VISIT(traverse_module_state->__pyx_n_s_RAISE); + Py_VISIT(traverse_module_state->__pyx_n_s_RETURN_VALUES_DICT); + Py_VISIT(traverse_module_state->__pyx_n_s_STATE_RUN); + Py_VISIT(traverse_module_state->__pyx_n_s_STATE_SUSPEND); + Py_VISIT(traverse_module_state->__pyx_kp_s_Stop_inside_ipython_call); + Py_VISIT(traverse_module_state->__pyx_n_s_TRACE_PROPERTY); + Py_VISIT(traverse_module_state->__pyx_n_s_Thread); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_ThreadInfo___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj___reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_TryExceptContainerObj___setstat); + Py_VISIT(traverse_module_state->__pyx_n_s_Tuple); + Py_VISIT(traverse_module_state->__pyx_kp_s__14); + Py_VISIT(traverse_module_state->__pyx_kp_s__17); + Py_VISIT(traverse_module_state->__pyx_kp_u__19); + Py_VISIT(traverse_module_state->__pyx_n_s__22); + Py_VISIT(traverse_module_state->__pyx_n_s_active); + Py_VISIT(traverse_module_state->__pyx_n_s_active_limbo_lock); + Py_VISIT(traverse_module_state->__pyx_n_s_add_command); + Py_VISIT(traverse_module_state->__pyx_n_s_additional_info); + Py_VISIT(traverse_module_state->__pyx_n_s_all_threads); + Py_VISIT(traverse_module_state->__pyx_n_s_apply_files_filter); + Py_VISIT(traverse_module_state->__pyx_n_s_arg); + Py_VISIT(traverse_module_state->__pyx_n_s_args); + Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_basename); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_2); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner); + Py_VISIT(traverse_module_state->__pyx_n_s_bootstrap_inner_2); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_caught_exceptions); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_uncaught_exceptions); + Py_VISIT(traverse_module_state->__pyx_n_s_break_on_user_uncaught_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_breakpoints); + Py_VISIT(traverse_module_state->__pyx_n_s_call); + Py_VISIT(traverse_module_state->__pyx_n_s_call_2); + Py_VISIT(traverse_module_state->__pyx_n_s_can_skip); + Py_VISIT(traverse_module_state->__pyx_n_s_cfunc_to_py); + Py_VISIT(traverse_module_state->__pyx_n_s_children_variants); + Py_VISIT(traverse_module_state->__pyx_n_s_class); + Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); + Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_factory); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_step_into); + Py_VISIT(traverse_module_state->__pyx_n_s_cmd_step_over); + Py_VISIT(traverse_module_state->__pyx_n_s_co_filename); + Py_VISIT(traverse_module_state->__pyx_n_s_co_lines); + Py_VISIT(traverse_module_state->__pyx_n_s_co_name); + Py_VISIT(traverse_module_state->__pyx_n_s_code); + Py_VISIT(traverse_module_state->__pyx_n_s_code_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_code_to_func_code_info_cache); + Py_VISIT(traverse_module_state->__pyx_n_s_collect_try_except_info); + Py_VISIT(traverse_module_state->__pyx_n_s_collections); + Py_VISIT(traverse_module_state->__pyx_n_s_compile); + Py_VISIT(traverse_module_state->__pyx_n_s_current_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_debug); + Py_VISIT(traverse_module_state->__pyx_n_s_del); + Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_dict_2); + Py_VISIT(traverse_module_state->__pyx_n_s_dis); + Py_VISIT(traverse_module_state->__pyx_kp_u_disable); + Py_VISIT(traverse_module_state->__pyx_n_s_disable_code_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_do_wait_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_do_wait_suspend_2); + Py_VISIT(traverse_module_state->__pyx_n_s_doc); + Py_VISIT(traverse_module_state->__pyx_n_s_dummy_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_dummy_thread_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_enable); + Py_VISIT(traverse_module_state->__pyx_n_s_enable_code_tracing); + Py_VISIT(traverse_module_state->__pyx_n_s_end); + Py_VISIT(traverse_module_state->__pyx_n_s_endswith); + Py_VISIT(traverse_module_state->__pyx_n_s_ensure_monitoring); + Py_VISIT(traverse_module_state->__pyx_n_s_enter); + Py_VISIT(traverse_module_state->__pyx_n_s_enumerate); + Py_VISIT(traverse_module_state->__pyx_n_s_event); + Py_VISIT(traverse_module_state->__pyx_n_s_events); + Py_VISIT(traverse_module_state->__pyx_n_s_exc); + Py_VISIT(traverse_module_state->__pyx_n_s_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_exec); + Py_VISIT(traverse_module_state->__pyx_n_s_execfile); + Py_VISIT(traverse_module_state->__pyx_n_s_exit); + Py_VISIT(traverse_module_state->__pyx_n_s_expression); + Py_VISIT(traverse_module_state->__pyx_n_s_f_back); + Py_VISIT(traverse_module_state->__pyx_n_s_f_bootstrap); + Py_VISIT(traverse_module_state->__pyx_n_s_f_code); + Py_VISIT(traverse_module_state->__pyx_n_s_f_disable_next_line_if_match); + Py_VISIT(traverse_module_state->__pyx_n_s_f_lasti); + Py_VISIT(traverse_module_state->__pyx_n_s_f_lineno); + Py_VISIT(traverse_module_state->__pyx_n_s_f_locals); + Py_VISIT(traverse_module_state->__pyx_n_s_file_to_line_to_breakpoints); + Py_VISIT(traverse_module_state->__pyx_n_s_findlinestarts); + Py_VISIT(traverse_module_state->__pyx_n_s_flag_as_unwinding); + Py_VISIT(traverse_module_state->__pyx_n_s_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_frame_or_depth); + Py_VISIT(traverse_module_state->__pyx_n_s_free_tool_id); + Py_VISIT(traverse_module_state->__pyx_n_s_from_offset); + Py_VISIT(traverse_module_state->__pyx_kp_s_frozen_runpy); + Py_VISIT(traverse_module_state->__pyx_n_s_function_breakpoint_name_to_brea); + Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); + Py_VISIT(traverse_module_state->__pyx_n_s_get_abs_path_real_path_and_base); + Py_VISIT(traverse_module_state->__pyx_n_s_get_abs_path_real_path_and_base_2); + Py_VISIT(traverse_module_state->__pyx_n_s_get_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_get_cache_file_type); + Py_VISIT(traverse_module_state->__pyx_n_s_get_clsname_for_code); + Py_VISIT(traverse_module_state->__pyx_n_s_get_file_type); + Py_VISIT(traverse_module_state->__pyx_n_s_get_func_code_info); + Py_VISIT(traverse_module_state->__pyx_n_s_get_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_get_ident_2); + Py_VISIT(traverse_module_state->__pyx_n_s_get_line_of_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_get_local_events); + Py_VISIT(traverse_module_state->__pyx_n_s_get_smart_step_into_variant_from); + Py_VISIT(traverse_module_state->__pyx_n_s_get_tool); + Py_VISIT(traverse_module_state->__pyx_n_s_getframe); + Py_VISIT(traverse_module_state->__pyx_n_s_getstate); + Py_VISIT(traverse_module_state->__pyx_n_s_global_dbg); + Py_VISIT(traverse_module_state->__pyx_n_s_global_notify_skipped_step_in); + Py_VISIT(traverse_module_state->__pyx_n_s_global_notify_skipped_step_in_l); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_breakpoint_condition); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_breakpoint_expression); + Py_VISIT(traverse_module_state->__pyx_n_s_handle_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_has_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_has_caught_exception_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_has_condition); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_exception_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_has_plugin_line_breaks); + Py_VISIT(traverse_module_state->__pyx_n_s_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_import); + Py_VISIT(traverse_module_state->__pyx_n_s_init); + Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); + Py_VISIT(traverse_module_state->__pyx_n_s_initializing); + Py_VISIT(traverse_module_state->__pyx_n_s_instruction); + Py_VISIT(traverse_module_state->__pyx_n_s_instruction_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_is_alive); + Py_VISIT(traverse_module_state->__pyx_n_s_is_bootstrap_frame_internal); + Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); + Py_VISIT(traverse_module_state->__pyx_n_s_is_files_filter_enabled); + Py_VISIT(traverse_module_state->__pyx_n_s_is_logpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_is_pydev_daemon_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_is_stopped); + Py_VISIT(traverse_module_state->__pyx_n_s_is_tracked_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_is_unhandled_exception); + Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled); + Py_VISIT(traverse_module_state->__pyx_n_s_items); + Py_VISIT(traverse_module_state->__pyx_n_s_kwargs); + Py_VISIT(traverse_module_state->__pyx_n_s_line); + Py_VISIT(traverse_module_state->__pyx_n_s_line_to_breakpoints); + Py_VISIT(traverse_module_state->__pyx_n_s_line_to_offset); + Py_VISIT(traverse_module_state->__pyx_kp_s_line_to_offset_first_line_last_l); + Py_VISIT(traverse_module_state->__pyx_n_s_linesep); + Py_VISIT(traverse_module_state->__pyx_n_s_local); + Py_VISIT(traverse_module_state->__pyx_n_s_main); + Py_VISIT(traverse_module_state->__pyx_n_s_main_2); + Py_VISIT(traverse_module_state->__pyx_n_s_make_io_message); + Py_VISIT(traverse_module_state->__pyx_n_s_max); + Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); + Py_VISIT(traverse_module_state->__pyx_n_s_min); + Py_VISIT(traverse_module_state->__pyx_kp_s_module); + Py_VISIT(traverse_module_state->__pyx_n_s_module_2); + Py_VISIT(traverse_module_state->__pyx_n_s_monitor); + Py_VISIT(traverse_module_state->__pyx_n_s_monitoring); + Py_VISIT(traverse_module_state->__pyx_n_s_mtime); + Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_s_namedtuple); + Py_VISIT(traverse_module_state->__pyx_n_s_new); + Py_VISIT(traverse_module_state->__pyx_n_s_notify_skipped_step_in_because_o); + Py_VISIT(traverse_module_state->__pyx_n_s_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_original_step_cmd); + Py_VISIT(traverse_module_state->__pyx_n_s_os); + Py_VISIT(traverse_module_state->__pyx_n_s_os_path); + Py_VISIT(traverse_module_state->__pyx_n_s_pickle); + Py_VISIT(traverse_module_state->__pyx_n_s_plugin); + Py_VISIT(traverse_module_state->__pyx_n_s_pop); + Py_VISIT(traverse_module_state->__pyx_n_s_prepare); + Py_VISIT(traverse_module_state->__pyx_n_s_py_db); + Py_VISIT(traverse_module_state->__pyx_kp_s_pyc); + Py_VISIT(traverse_module_state->__pyx_n_s_pydb_disposed); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_bundle__pydev_saved_modul); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_do_not_trace); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydev_execfile_py); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_log); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_monkey); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pydev_step_cmd); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_constants); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_frame_util); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_trace_disp); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_bundle_pydevd_utils); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_dont_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_file_utils); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_py); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_runpy); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_sys_monitoring__pydevd_s); + Py_VISIT(traverse_module_state->__pyx_n_s_pydevd_sys_monitoring_cython); + Py_VISIT(traverse_module_state->__pyx_kp_s_pydevd_traceproperty_py); + Py_VISIT(traverse_module_state->__pyx_kp_s_python_function); + Py_VISIT(traverse_module_state->__pyx_kp_s_python_line); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_FuncCodeInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_ThreadInfo); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle__TryExceptContain); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_s_qualname); + Py_VISIT(traverse_module_state->__pyx_n_s_re); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); + Py_VISIT(traverse_module_state->__pyx_n_s_ref); + Py_VISIT(traverse_module_state->__pyx_n_s_register_callback); + Py_VISIT(traverse_module_state->__pyx_n_s_required_events); + Py_VISIT(traverse_module_state->__pyx_n_s_required_events_breakpoint); + Py_VISIT(traverse_module_state->__pyx_n_s_required_events_stepping); + Py_VISIT(traverse_module_state->__pyx_n_s_restart_events); + Py_VISIT(traverse_module_state->__pyx_n_s_return); + Py_VISIT(traverse_module_state->__pyx_n_s_retval); + Py_VISIT(traverse_module_state->__pyx_n_s_run); + Py_VISIT(traverse_module_state->__pyx_n_s_run_2); + Py_VISIT(traverse_module_state->__pyx_n_s_runpy); + Py_VISIT(traverse_module_state->__pyx_kp_s_s_s); + Py_VISIT(traverse_module_state->__pyx_kp_s_s_s_2); + Py_VISIT(traverse_module_state->__pyx_n_s_self); + Py_VISIT(traverse_module_state->__pyx_n_s_set_events); + Py_VISIT(traverse_module_state->__pyx_n_s_set_local_events); + Py_VISIT(traverse_module_state->__pyx_n_s_set_name); + Py_VISIT(traverse_module_state->__pyx_n_s_set_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_set_trace_for_frame_and_parents); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_short_frame); + Py_VISIT(traverse_module_state->__pyx_n_s_short_tb); + Py_VISIT(traverse_module_state->__pyx_n_s_should_stop_on_exception); + Py_VISIT(traverse_module_state->__pyx_n_s_should_trace_hook); + Py_VISIT(traverse_module_state->__pyx_n_s_show_return_values); + Py_VISIT(traverse_module_state->__pyx_n_s_spec); + Py_VISIT(traverse_module_state->__pyx_n_s_splitext); + Py_VISIT(traverse_module_state->__pyx_n_s_start); + Py_VISIT(traverse_module_state->__pyx_n_s_start_monitoring); + Py_VISIT(traverse_module_state->__pyx_n_s_startswith); + Py_VISIT(traverse_module_state->__pyx_n_s_state); + Py_VISIT(traverse_module_state->__pyx_n_s_stop); + Py_VISIT(traverse_module_state->__pyx_n_s_stop_monitoring); + Py_VISIT(traverse_module_state->__pyx_n_s_stop_on_unhandled_exception); + Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource); + Py_VISIT(traverse_module_state->__pyx_n_s_super); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend_other_threads); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend_policy); + Py_VISIT(traverse_module_state->__pyx_n_s_suspend_requested); + Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_sys_monitor); + Py_VISIT(traverse_module_state->__pyx_n_s_t); + Py_VISIT(traverse_module_state->__pyx_n_s_test); + Py_VISIT(traverse_module_state->__pyx_n_s_thread); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_active); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_ident); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_info); + Py_VISIT(traverse_module_state->__pyx_n_s_thread_local_info); + Py_VISIT(traverse_module_state->__pyx_n_s_threading); + Py_VISIT(traverse_module_state->__pyx_n_s_tident); + Py_VISIT(traverse_module_state->__pyx_n_s_to_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_trace); + Py_VISIT(traverse_module_state->__pyx_n_s_traceback); + Py_VISIT(traverse_module_state->__pyx_n_s_track_dummy_thread_ref); + Py_VISIT(traverse_module_state->__pyx_n_s_try_except_infos); + Py_VISIT(traverse_module_state->__pyx_n_s_types); + Py_VISIT(traverse_module_state->__pyx_n_s_typing); + Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_update_monitor_events); + Py_VISIT(traverse_module_state->__pyx_n_s_use_setstate); + Py_VISIT(traverse_module_state->__pyx_n_s_use_tool_id); + Py_VISIT(traverse_module_state->__pyx_n_s_user_uncaught_exc_info); + Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_wrap); + Py_VISIT(traverse_module_state->__pyx_n_s_writer); + Py_VISIT(traverse_module_state->__pyx_int_0); + Py_VISIT(traverse_module_state->__pyx_int_1); + Py_VISIT(traverse_module_state->__pyx_int_2); + Py_VISIT(traverse_module_state->__pyx_int_107); + Py_VISIT(traverse_module_state->__pyx_int_108); + Py_VISIT(traverse_module_state->__pyx_int_109); + Py_VISIT(traverse_module_state->__pyx_int_111); + Py_VISIT(traverse_module_state->__pyx_int_128); + Py_VISIT(traverse_module_state->__pyx_int_144); + Py_VISIT(traverse_module_state->__pyx_int_159); + Py_VISIT(traverse_module_state->__pyx_int_160); + Py_VISIT(traverse_module_state->__pyx_int_206); + Py_VISIT(traverse_module_state->__pyx_int_208); + Py_VISIT(traverse_module_state->__pyx_int_66323410); + Py_VISIT(traverse_module_state->__pyx_int_92026781); + Py_VISIT(traverse_module_state->__pyx_int_99967855); + Py_VISIT(traverse_module_state->__pyx_int_189049472); + Py_VISIT(traverse_module_state->__pyx_int_210464433); + Py_VISIT(traverse_module_state->__pyx_int_224549882); + Py_VISIT(traverse_module_state->__pyx_int_230645316); + Py_VISIT(traverse_module_state->__pyx_int_232881363); + Py_VISIT(traverse_module_state->__pyx_int_266084120); + Py_VISIT(traverse_module_state->__pyx_int_neg_1); + Py_VISIT(traverse_module_state->__pyx_k__15); + Py_VISIT(traverse_module_state->__pyx_tuple_); + Py_VISIT(traverse_module_state->__pyx_tuple__3); + Py_VISIT(traverse_module_state->__pyx_tuple__5); + Py_VISIT(traverse_module_state->__pyx_tuple__7); + Py_VISIT(traverse_module_state->__pyx_tuple__9); + Py_VISIT(traverse_module_state->__pyx_slice__16); + Py_VISIT(traverse_module_state->__pyx_tuple__11); + Py_VISIT(traverse_module_state->__pyx_tuple__12); + Py_VISIT(traverse_module_state->__pyx_tuple__13); + Py_VISIT(traverse_module_state->__pyx_tuple__18); + Py_VISIT(traverse_module_state->__pyx_tuple__20); + Py_VISIT(traverse_module_state->__pyx_tuple__21); + Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__26); + Py_VISIT(traverse_module_state->__pyx_tuple__27); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__34); + Py_VISIT(traverse_module_state->__pyx_tuple__36); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__41); + Py_VISIT(traverse_module_state->__pyx_tuple__43); + Py_VISIT(traverse_module_state->__pyx_tuple__45); + Py_VISIT(traverse_module_state->__pyx_tuple__50); + Py_VISIT(traverse_module_state->__pyx_tuple__52); + Py_VISIT(traverse_module_state->__pyx_tuple__54); + Py_VISIT(traverse_module_state->__pyx_tuple__55); + Py_VISIT(traverse_module_state->__pyx_tuple__57); + Py_VISIT(traverse_module_state->__pyx_tuple__59); + Py_VISIT(traverse_module_state->__pyx_tuple__61); + Py_VISIT(traverse_module_state->__pyx_codeobj__2); + Py_VISIT(traverse_module_state->__pyx_codeobj__4); + Py_VISIT(traverse_module_state->__pyx_codeobj__6); + Py_VISIT(traverse_module_state->__pyx_codeobj__8); + Py_VISIT(traverse_module_state->__pyx_codeobj__10); + Py_VISIT(traverse_module_state->__pyx_codeobj__24); + Py_VISIT(traverse_module_state->__pyx_codeobj__29); + Py_VISIT(traverse_module_state->__pyx_codeobj__31); + Py_VISIT(traverse_module_state->__pyx_codeobj__33); + Py_VISIT(traverse_module_state->__pyx_codeobj__35); + Py_VISIT(traverse_module_state->__pyx_codeobj__37); + Py_VISIT(traverse_module_state->__pyx_codeobj__38); + Py_VISIT(traverse_module_state->__pyx_codeobj__39); + Py_VISIT(traverse_module_state->__pyx_codeobj__42); + Py_VISIT(traverse_module_state->__pyx_codeobj__44); + Py_VISIT(traverse_module_state->__pyx_codeobj__46); + Py_VISIT(traverse_module_state->__pyx_codeobj__47); + Py_VISIT(traverse_module_state->__pyx_codeobj__48); + Py_VISIT(traverse_module_state->__pyx_codeobj__49); + Py_VISIT(traverse_module_state->__pyx_codeobj__51); + Py_VISIT(traverse_module_state->__pyx_codeobj__53); + Py_VISIT(traverse_module_state->__pyx_codeobj__56); + Py_VISIT(traverse_module_state->__pyx_codeobj__58); + Py_VISIT(traverse_module_state->__pyx_codeobj__60); + Py_VISIT(traverse_module_state->__pyx_codeobj__62); + Py_VISIT(traverse_module_state->__pyx_codeobj__63); + Py_VISIT(traverse_module_state->__pyx_codeobj__64); + return 0; +} +#endif +/* #### Code section: module_state_defines ### */ +#define __pyx_d __pyx_mstate_global->__pyx_d +#define __pyx_b __pyx_mstate_global->__pyx_b +#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime +#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple +#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes +#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode +#ifdef __Pyx_CyFunction_USED +#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType +#endif +#ifdef __Pyx_FusedFunction_USED +#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType +#endif +#ifdef __Pyx_Generator_USED +#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType +#endif +#ifdef __Pyx_IterableCoroutine_USED +#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType +#endif +#ifdef __Pyx_Coroutine_USED +#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#define __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo __pyx_mstate_global->__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo +#if CYTHON_USE_MODULE_STATE +#define __pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo __pyx_mstate_global->__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo +#define __pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo __pyx_mstate_global->__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo +#define __pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj __pyx_mstate_global->__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj +#define __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc __pyx_mstate_global->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc +#define __pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset __pyx_mstate_global->__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset +#define __pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line __pyx_mstate_global->__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line +#define __pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset __pyx_mstate_global->__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset +#define __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval __pyx_mstate_global->__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval +#endif +#define __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo __pyx_mstate_global->__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo +#define __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo __pyx_mstate_global->__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo +#define __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj __pyx_mstate_global->__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj +#define __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc __pyx_mstate_global->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc +#define __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset __pyx_mstate_global->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset +#define __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line __pyx_mstate_global->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line +#define __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset __pyx_mstate_global->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset +#define __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval __pyx_mstate_global->__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval +#define __pyx_kp_s_1 __pyx_mstate_global->__pyx_kp_s_1 +#define __pyx_n_s_ALL __pyx_mstate_global->__pyx_n_s_ALL +#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any +#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_n_s_AttributeError __pyx_mstate_global->__pyx_n_s_AttributeError +#define __pyx_n_s_CMD_SET_BREAK __pyx_mstate_global->__pyx_n_s_CMD_SET_BREAK +#define __pyx_n_s_CMD_SET_FUNCTION_BREAK __pyx_mstate_global->__pyx_n_s_CMD_SET_FUNCTION_BREAK +#define __pyx_n_s_CMD_SMART_STEP_INTO __pyx_mstate_global->__pyx_n_s_CMD_SMART_STEP_INTO +#define __pyx_n_s_CMD_STEP_INTO __pyx_mstate_global->__pyx_n_s_CMD_STEP_INTO +#define __pyx_n_s_CMD_STEP_INTO_COROUTINE __pyx_mstate_global->__pyx_n_s_CMD_STEP_INTO_COROUTINE +#define __pyx_n_s_CMD_STEP_INTO_MY_CODE __pyx_mstate_global->__pyx_n_s_CMD_STEP_INTO_MY_CODE +#define __pyx_n_s_CMD_STEP_OVER __pyx_mstate_global->__pyx_n_s_CMD_STEP_OVER +#define __pyx_n_s_CMD_STEP_OVER_MY_CODE __pyx_mstate_global->__pyx_n_s_CMD_STEP_OVER_MY_CODE +#define __pyx_n_s_CMD_STEP_RETURN __pyx_mstate_global->__pyx_n_s_CMD_STEP_RETURN +#define __pyx_n_s_CMD_STEP_RETURN_MY_CODE __pyx_mstate_global->__pyx_n_s_CMD_STEP_RETURN_MY_CODE +#define __pyx_n_s_CodeLineInfo __pyx_mstate_global->__pyx_n_s_CodeLineInfo +#define __pyx_n_s_CodeType __pyx_mstate_global->__pyx_n_s_CodeType +#define __pyx_n_s_DEBUGGER_ID __pyx_mstate_global->__pyx_n_s_DEBUGGER_ID +#define __pyx_n_s_DEBUG_START __pyx_mstate_global->__pyx_n_s_DEBUG_START +#define __pyx_n_s_DEBUG_START_PY3K __pyx_mstate_global->__pyx_n_s_DEBUG_START_PY3K +#define __pyx_n_s_DISABLE __pyx_mstate_global->__pyx_n_s_DISABLE +#define __pyx_n_s_DeleteDummyThreadOnDel __pyx_mstate_global->__pyx_n_s_DeleteDummyThreadOnDel +#define __pyx_n_s_DeleteDummyThreadOnDel___del __pyx_mstate_global->__pyx_n_s_DeleteDummyThreadOnDel___del +#define __pyx_n_s_DeleteDummyThreadOnDel___init __pyx_mstate_global->__pyx_n_s_DeleteDummyThreadOnDel___init +#define __pyx_n_s_Dict __pyx_mstate_global->__pyx_n_s_Dict +#define __pyx_n_s_DummyThread __pyx_mstate_global->__pyx_n_s_DummyThread +#define __pyx_n_s_EXCEPTION_TYPE_HANDLED __pyx_mstate_global->__pyx_n_s_EXCEPTION_TYPE_HANDLED +#define __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED __pyx_mstate_global->__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED +#define __pyx_n_s_ForkSafeLock __pyx_mstate_global->__pyx_n_s_ForkSafeLock +#define __pyx_n_s_FrameType __pyx_mstate_global->__pyx_n_s_FrameType +#define __pyx_n_s_FuncCodeInfo __pyx_mstate_global->__pyx_n_s_FuncCodeInfo +#define __pyx_n_s_FuncCodeInfo___reduce_cython __pyx_mstate_global->__pyx_n_s_FuncCodeInfo___reduce_cython +#define __pyx_n_s_FuncCodeInfo___setstate_cython __pyx_mstate_global->__pyx_n_s_FuncCodeInfo___setstate_cython +#define __pyx_n_s_FuncCodeInfo_get_line_of_offset __pyx_mstate_global->__pyx_n_s_FuncCodeInfo_get_line_of_offset +#define __pyx_n_s_GlobalDebuggerHolder __pyx_mstate_global->__pyx_n_s_GlobalDebuggerHolder +#define __pyx_kp_s_Helper_class_to_remove_a_dummy __pyx_mstate_global->__pyx_kp_s_Helper_class_to_remove_a_dummy +#define __pyx_n_s_IGNORE_EXCEPTION_TAG __pyx_mstate_global->__pyx_n_s_IGNORE_EXCEPTION_TAG +#define __pyx_kp_s_IgnoreException __pyx_mstate_global->__pyx_kp_s_IgnoreException +#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3 +#define __pyx_n_s_JUMP __pyx_mstate_global->__pyx_n_s_JUMP +#define __pyx_n_s_LINE __pyx_mstate_global->__pyx_n_s_LINE +#define __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER __pyx_mstate_global->__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER +#define __pyx_n_s_None __pyx_mstate_global->__pyx_n_s_None +#define __pyx_n_s_Optional __pyx_mstate_global->__pyx_n_s_Optional +#define __pyx_kp_s_Optional_bool __pyx_mstate_global->__pyx_kp_s_Optional_bool +#define __pyx_n_s_PYDEVD_IPYTHON_CONTEXT __pyx_mstate_global->__pyx_n_s_PYDEVD_IPYTHON_CONTEXT +#define __pyx_n_s_PYTHON_SUSPEND __pyx_mstate_global->__pyx_n_s_PYTHON_SUSPEND +#define __pyx_n_s_PY_RESUME __pyx_mstate_global->__pyx_n_s_PY_RESUME +#define __pyx_n_s_PY_RETURN __pyx_mstate_global->__pyx_n_s_PY_RETURN +#define __pyx_n_s_PY_START __pyx_mstate_global->__pyx_n_s_PY_START +#define __pyx_n_s_PY_UNWIND __pyx_mstate_global->__pyx_n_s_PY_UNWIND +#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError +#define __pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy __pyx_mstate_global->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy +#define __pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2 __pyx_mstate_global->__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2 +#define __pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy __pyx_mstate_global->__pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy +#define __pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy __pyx_mstate_global->__pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy +#define __pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy __pyx_mstate_global->__pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy +#define __pyx_n_s_RAISE __pyx_mstate_global->__pyx_n_s_RAISE +#define __pyx_n_s_RETURN_VALUES_DICT __pyx_mstate_global->__pyx_n_s_RETURN_VALUES_DICT +#define __pyx_n_s_STATE_RUN __pyx_mstate_global->__pyx_n_s_STATE_RUN +#define __pyx_n_s_STATE_SUSPEND __pyx_mstate_global->__pyx_n_s_STATE_SUSPEND +#define __pyx_kp_s_Stop_inside_ipython_call __pyx_mstate_global->__pyx_kp_s_Stop_inside_ipython_call +#define __pyx_n_s_TRACE_PROPERTY __pyx_mstate_global->__pyx_n_s_TRACE_PROPERTY +#define __pyx_n_s_Thread __pyx_mstate_global->__pyx_n_s_Thread +#define __pyx_n_s_ThreadInfo __pyx_mstate_global->__pyx_n_s_ThreadInfo +#define __pyx_n_s_ThreadInfo___reduce_cython __pyx_mstate_global->__pyx_n_s_ThreadInfo___reduce_cython +#define __pyx_n_s_ThreadInfo___setstate_cython __pyx_mstate_global->__pyx_n_s_ThreadInfo___setstate_cython +#define __pyx_n_s_TryExceptContainerObj __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj +#define __pyx_n_s_TryExceptContainerObj___reduce __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj___reduce +#define __pyx_n_s_TryExceptContainerObj___setstat __pyx_mstate_global->__pyx_n_s_TryExceptContainerObj___setstat +#define __pyx_n_s_Tuple __pyx_mstate_global->__pyx_n_s_Tuple +#define __pyx_kp_s__14 __pyx_mstate_global->__pyx_kp_s__14 +#define __pyx_kp_s__17 __pyx_mstate_global->__pyx_kp_s__17 +#define __pyx_kp_u__19 __pyx_mstate_global->__pyx_kp_u__19 +#define __pyx_n_s__22 __pyx_mstate_global->__pyx_n_s__22 +#define __pyx_n_s_active __pyx_mstate_global->__pyx_n_s_active +#define __pyx_n_s_active_limbo_lock __pyx_mstate_global->__pyx_n_s_active_limbo_lock +#define __pyx_n_s_add_command __pyx_mstate_global->__pyx_n_s_add_command +#define __pyx_n_s_additional_info __pyx_mstate_global->__pyx_n_s_additional_info +#define __pyx_n_s_all_threads __pyx_mstate_global->__pyx_n_s_all_threads +#define __pyx_n_s_apply_files_filter __pyx_mstate_global->__pyx_n_s_apply_files_filter +#define __pyx_n_s_arg __pyx_mstate_global->__pyx_n_s_arg +#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args +#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_basename __pyx_mstate_global->__pyx_n_s_basename +#define __pyx_n_s_bootstrap __pyx_mstate_global->__pyx_n_s_bootstrap +#define __pyx_n_s_bootstrap_2 __pyx_mstate_global->__pyx_n_s_bootstrap_2 +#define __pyx_n_s_bootstrap_inner __pyx_mstate_global->__pyx_n_s_bootstrap_inner +#define __pyx_n_s_bootstrap_inner_2 __pyx_mstate_global->__pyx_n_s_bootstrap_inner_2 +#define __pyx_n_s_break_on_caught_exceptions __pyx_mstate_global->__pyx_n_s_break_on_caught_exceptions +#define __pyx_n_s_break_on_uncaught_exceptions __pyx_mstate_global->__pyx_n_s_break_on_uncaught_exceptions +#define __pyx_n_s_break_on_user_uncaught_exception __pyx_mstate_global->__pyx_n_s_break_on_user_uncaught_exception +#define __pyx_n_s_breakpoints __pyx_mstate_global->__pyx_n_s_breakpoints +#define __pyx_n_s_call __pyx_mstate_global->__pyx_n_s_call +#define __pyx_n_s_call_2 __pyx_mstate_global->__pyx_n_s_call_2 +#define __pyx_n_s_can_skip __pyx_mstate_global->__pyx_n_s_can_skip +#define __pyx_n_s_cfunc_to_py __pyx_mstate_global->__pyx_n_s_cfunc_to_py +#define __pyx_n_s_children_variants __pyx_mstate_global->__pyx_n_s_children_variants +#define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class +#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem +#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_s_cmd_factory __pyx_mstate_global->__pyx_n_s_cmd_factory +#define __pyx_n_s_cmd_step_into __pyx_mstate_global->__pyx_n_s_cmd_step_into +#define __pyx_n_s_cmd_step_over __pyx_mstate_global->__pyx_n_s_cmd_step_over +#define __pyx_n_s_co_filename __pyx_mstate_global->__pyx_n_s_co_filename +#define __pyx_n_s_co_lines __pyx_mstate_global->__pyx_n_s_co_lines +#define __pyx_n_s_co_name __pyx_mstate_global->__pyx_n_s_co_name +#define __pyx_n_s_code __pyx_mstate_global->__pyx_n_s_code +#define __pyx_n_s_code_obj __pyx_mstate_global->__pyx_n_s_code_obj +#define __pyx_n_s_code_to_func_code_info_cache __pyx_mstate_global->__pyx_n_s_code_to_func_code_info_cache +#define __pyx_n_s_collect_try_except_info __pyx_mstate_global->__pyx_n_s_collect_try_except_info +#define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections +#define __pyx_n_s_compile __pyx_mstate_global->__pyx_n_s_compile +#define __pyx_n_s_current_thread __pyx_mstate_global->__pyx_n_s_current_thread +#define __pyx_n_s_debug __pyx_mstate_global->__pyx_n_s_debug +#define __pyx_n_s_del __pyx_mstate_global->__pyx_n_s_del +#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2 +#define __pyx_n_s_dis __pyx_mstate_global->__pyx_n_s_dis +#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable +#define __pyx_n_s_disable_code_tracing __pyx_mstate_global->__pyx_n_s_disable_code_tracing +#define __pyx_n_s_do_wait_suspend __pyx_mstate_global->__pyx_n_s_do_wait_suspend +#define __pyx_n_s_do_wait_suspend_2 __pyx_mstate_global->__pyx_n_s_do_wait_suspend_2 +#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc +#define __pyx_n_s_dummy_thread __pyx_mstate_global->__pyx_n_s_dummy_thread +#define __pyx_n_s_dummy_thread_2 __pyx_mstate_global->__pyx_n_s_dummy_thread_2 +#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable +#define __pyx_n_s_enable_code_tracing __pyx_mstate_global->__pyx_n_s_enable_code_tracing +#define __pyx_n_s_end __pyx_mstate_global->__pyx_n_s_end +#define __pyx_n_s_endswith __pyx_mstate_global->__pyx_n_s_endswith +#define __pyx_n_s_ensure_monitoring __pyx_mstate_global->__pyx_n_s_ensure_monitoring +#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter +#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate +#define __pyx_n_s_event __pyx_mstate_global->__pyx_n_s_event +#define __pyx_n_s_events __pyx_mstate_global->__pyx_n_s_events +#define __pyx_n_s_exc __pyx_mstate_global->__pyx_n_s_exc +#define __pyx_n_s_exception __pyx_mstate_global->__pyx_n_s_exception +#define __pyx_n_s_exec __pyx_mstate_global->__pyx_n_s_exec +#define __pyx_n_s_execfile __pyx_mstate_global->__pyx_n_s_execfile +#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit +#define __pyx_n_s_expression __pyx_mstate_global->__pyx_n_s_expression +#define __pyx_n_s_f_back __pyx_mstate_global->__pyx_n_s_f_back +#define __pyx_n_s_f_bootstrap __pyx_mstate_global->__pyx_n_s_f_bootstrap +#define __pyx_n_s_f_code __pyx_mstate_global->__pyx_n_s_f_code +#define __pyx_n_s_f_disable_next_line_if_match __pyx_mstate_global->__pyx_n_s_f_disable_next_line_if_match +#define __pyx_n_s_f_lasti __pyx_mstate_global->__pyx_n_s_f_lasti +#define __pyx_n_s_f_lineno __pyx_mstate_global->__pyx_n_s_f_lineno +#define __pyx_n_s_f_locals __pyx_mstate_global->__pyx_n_s_f_locals +#define __pyx_n_s_file_to_line_to_breakpoints __pyx_mstate_global->__pyx_n_s_file_to_line_to_breakpoints +#define __pyx_n_s_findlinestarts __pyx_mstate_global->__pyx_n_s_findlinestarts +#define __pyx_n_s_flag_as_unwinding __pyx_mstate_global->__pyx_n_s_flag_as_unwinding +#define __pyx_n_s_frame __pyx_mstate_global->__pyx_n_s_frame +#define __pyx_n_s_frame_or_depth __pyx_mstate_global->__pyx_n_s_frame_or_depth +#define __pyx_n_s_free_tool_id __pyx_mstate_global->__pyx_n_s_free_tool_id +#define __pyx_n_s_from_offset __pyx_mstate_global->__pyx_n_s_from_offset +#define __pyx_kp_s_frozen_runpy __pyx_mstate_global->__pyx_kp_s_frozen_runpy +#define __pyx_n_s_function_breakpoint_name_to_brea __pyx_mstate_global->__pyx_n_s_function_breakpoint_name_to_brea +#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get +#define __pyx_n_s_get_abs_path_real_path_and_base __pyx_mstate_global->__pyx_n_s_get_abs_path_real_path_and_base +#define __pyx_n_s_get_abs_path_real_path_and_base_2 __pyx_mstate_global->__pyx_n_s_get_abs_path_real_path_and_base_2 +#define __pyx_n_s_get_breakpoint __pyx_mstate_global->__pyx_n_s_get_breakpoint +#define __pyx_n_s_get_cache_file_type __pyx_mstate_global->__pyx_n_s_get_cache_file_type +#define __pyx_n_s_get_clsname_for_code __pyx_mstate_global->__pyx_n_s_get_clsname_for_code +#define __pyx_n_s_get_file_type __pyx_mstate_global->__pyx_n_s_get_file_type +#define __pyx_n_s_get_func_code_info __pyx_mstate_global->__pyx_n_s_get_func_code_info +#define __pyx_n_s_get_ident __pyx_mstate_global->__pyx_n_s_get_ident +#define __pyx_n_s_get_ident_2 __pyx_mstate_global->__pyx_n_s_get_ident_2 +#define __pyx_n_s_get_line_of_offset __pyx_mstate_global->__pyx_n_s_get_line_of_offset +#define __pyx_n_s_get_local_events __pyx_mstate_global->__pyx_n_s_get_local_events +#define __pyx_n_s_get_smart_step_into_variant_from __pyx_mstate_global->__pyx_n_s_get_smart_step_into_variant_from +#define __pyx_n_s_get_tool __pyx_mstate_global->__pyx_n_s_get_tool +#define __pyx_n_s_getframe __pyx_mstate_global->__pyx_n_s_getframe +#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate +#define __pyx_n_s_global_dbg __pyx_mstate_global->__pyx_n_s_global_dbg +#define __pyx_n_s_global_notify_skipped_step_in __pyx_mstate_global->__pyx_n_s_global_notify_skipped_step_in +#define __pyx_n_s_global_notify_skipped_step_in_l __pyx_mstate_global->__pyx_n_s_global_notify_skipped_step_in_l +#define __pyx_n_s_handle_breakpoint_condition __pyx_mstate_global->__pyx_n_s_handle_breakpoint_condition +#define __pyx_n_s_handle_breakpoint_expression __pyx_mstate_global->__pyx_n_s_handle_breakpoint_expression +#define __pyx_n_s_handle_exception __pyx_mstate_global->__pyx_n_s_handle_exception +#define __pyx_n_s_has_breaks __pyx_mstate_global->__pyx_n_s_has_breaks +#define __pyx_n_s_has_caught_exception_breakpoint __pyx_mstate_global->__pyx_n_s_has_caught_exception_breakpoint +#define __pyx_n_s_has_condition __pyx_mstate_global->__pyx_n_s_has_condition +#define __pyx_n_s_has_plugin_exception_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_exception_breaks +#define __pyx_n_s_has_plugin_line_breaks __pyx_mstate_global->__pyx_n_s_has_plugin_line_breaks +#define __pyx_n_s_ident __pyx_mstate_global->__pyx_n_s_ident +#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import +#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init +#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass +#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing +#define __pyx_n_s_instruction __pyx_mstate_global->__pyx_n_s_instruction +#define __pyx_n_s_instruction_offset __pyx_mstate_global->__pyx_n_s_instruction_offset +#define __pyx_n_s_is_alive __pyx_mstate_global->__pyx_n_s_is_alive +#define __pyx_n_s_is_bootstrap_frame_internal __pyx_mstate_global->__pyx_n_s_is_bootstrap_frame_internal +#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine +#define __pyx_n_s_is_files_filter_enabled __pyx_mstate_global->__pyx_n_s_is_files_filter_enabled +#define __pyx_n_s_is_logpoint __pyx_mstate_global->__pyx_n_s_is_logpoint +#define __pyx_n_s_is_pydev_daemon_thread __pyx_mstate_global->__pyx_n_s_is_pydev_daemon_thread +#define __pyx_n_s_is_stopped __pyx_mstate_global->__pyx_n_s_is_stopped +#define __pyx_n_s_is_tracked_frame __pyx_mstate_global->__pyx_n_s_is_tracked_frame +#define __pyx_n_s_is_unhandled_exception __pyx_mstate_global->__pyx_n_s_is_unhandled_exception +#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled +#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items +#define __pyx_n_s_kwargs __pyx_mstate_global->__pyx_n_s_kwargs +#define __pyx_n_s_line __pyx_mstate_global->__pyx_n_s_line +#define __pyx_n_s_line_to_breakpoints __pyx_mstate_global->__pyx_n_s_line_to_breakpoints +#define __pyx_n_s_line_to_offset __pyx_mstate_global->__pyx_n_s_line_to_offset +#define __pyx_kp_s_line_to_offset_first_line_last_l __pyx_mstate_global->__pyx_kp_s_line_to_offset_first_line_last_l +#define __pyx_n_s_linesep __pyx_mstate_global->__pyx_n_s_linesep +#define __pyx_n_s_local __pyx_mstate_global->__pyx_n_s_local +#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main +#define __pyx_n_s_main_2 __pyx_mstate_global->__pyx_n_s_main_2 +#define __pyx_n_s_make_io_message __pyx_mstate_global->__pyx_n_s_make_io_message +#define __pyx_n_s_max __pyx_mstate_global->__pyx_n_s_max +#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass +#define __pyx_n_s_min __pyx_mstate_global->__pyx_n_s_min +#define __pyx_kp_s_module __pyx_mstate_global->__pyx_kp_s_module +#define __pyx_n_s_module_2 __pyx_mstate_global->__pyx_n_s_module_2 +#define __pyx_n_s_monitor __pyx_mstate_global->__pyx_n_s_monitor +#define __pyx_n_s_monitoring __pyx_mstate_global->__pyx_n_s_monitoring +#define __pyx_n_s_mtime __pyx_mstate_global->__pyx_n_s_mtime +#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_s_namedtuple __pyx_mstate_global->__pyx_n_s_namedtuple +#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new +#define __pyx_n_s_notify_skipped_step_in_because_o __pyx_mstate_global->__pyx_n_s_notify_skipped_step_in_because_o +#define __pyx_n_s_offset __pyx_mstate_global->__pyx_n_s_offset +#define __pyx_n_s_original_step_cmd __pyx_mstate_global->__pyx_n_s_original_step_cmd +#define __pyx_n_s_os __pyx_mstate_global->__pyx_n_s_os +#define __pyx_n_s_os_path __pyx_mstate_global->__pyx_n_s_os_path +#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle +#define __pyx_n_s_plugin __pyx_mstate_global->__pyx_n_s_plugin +#define __pyx_n_s_pop __pyx_mstate_global->__pyx_n_s_pop +#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare +#define __pyx_n_s_py_db __pyx_mstate_global->__pyx_n_s_py_db +#define __pyx_kp_s_pyc __pyx_mstate_global->__pyx_kp_s_pyc +#define __pyx_n_s_pydb_disposed __pyx_mstate_global->__pyx_n_s_pydb_disposed +#define __pyx_n_s_pydev_bundle __pyx_mstate_global->__pyx_n_s_pydev_bundle +#define __pyx_n_s_pydev_bundle__pydev_saved_modul __pyx_mstate_global->__pyx_n_s_pydev_bundle__pydev_saved_modul +#define __pyx_n_s_pydev_do_not_trace __pyx_mstate_global->__pyx_n_s_pydev_do_not_trace +#define __pyx_kp_s_pydev_execfile_py __pyx_mstate_global->__pyx_kp_s_pydev_execfile_py +#define __pyx_n_s_pydev_log __pyx_mstate_global->__pyx_n_s_pydev_log +#define __pyx_n_s_pydev_monkey __pyx_mstate_global->__pyx_n_s_pydev_monkey +#define __pyx_n_s_pydev_state __pyx_mstate_global->__pyx_n_s_pydev_state +#define __pyx_n_s_pydev_step_cmd __pyx_mstate_global->__pyx_n_s_pydev_step_cmd +#define __pyx_n_s_pydevd __pyx_mstate_global->__pyx_n_s_pydevd +#define __pyx_n_s_pydevd_bundle __pyx_mstate_global->__pyx_n_s_pydevd_bundle +#define __pyx_n_s_pydevd_bundle_pydevd_breakpoint __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_breakpoint +#define __pyx_n_s_pydevd_bundle_pydevd_bytecode_u __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_bytecode_u +#define __pyx_n_s_pydevd_bundle_pydevd_constants __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_constants +#define __pyx_n_s_pydevd_bundle_pydevd_frame_util __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_frame_util +#define __pyx_n_s_pydevd_bundle_pydevd_trace_disp __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_trace_disp +#define __pyx_n_s_pydevd_bundle_pydevd_utils __pyx_mstate_global->__pyx_n_s_pydevd_bundle_pydevd_utils +#define __pyx_n_s_pydevd_dont_trace __pyx_mstate_global->__pyx_n_s_pydevd_dont_trace +#define __pyx_n_s_pydevd_file_utils __pyx_mstate_global->__pyx_n_s_pydevd_file_utils +#define __pyx_kp_s_pydevd_py __pyx_mstate_global->__pyx_kp_s_pydevd_py +#define __pyx_n_s_pydevd_runpy __pyx_mstate_global->__pyx_n_s_pydevd_runpy +#define __pyx_kp_s_pydevd_sys_monitoring__pydevd_s __pyx_mstate_global->__pyx_kp_s_pydevd_sys_monitoring__pydevd_s +#define __pyx_n_s_pydevd_sys_monitoring_cython __pyx_mstate_global->__pyx_n_s_pydevd_sys_monitoring_cython +#define __pyx_kp_s_pydevd_traceproperty_py __pyx_mstate_global->__pyx_kp_s_pydevd_traceproperty_py +#define __pyx_kp_s_python_function __pyx_mstate_global->__pyx_kp_s_python_function +#define __pyx_kp_s_python_line __pyx_mstate_global->__pyx_kp_s_python_line +#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError +#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum +#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result +#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state +#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type +#define __pyx_n_s_pyx_unpickle_FuncCodeInfo __pyx_mstate_global->__pyx_n_s_pyx_unpickle_FuncCodeInfo +#define __pyx_n_s_pyx_unpickle_ThreadInfo __pyx_mstate_global->__pyx_n_s_pyx_unpickle_ThreadInfo +#define __pyx_n_s_pyx_unpickle__TryExceptContain __pyx_mstate_global->__pyx_n_s_pyx_unpickle__TryExceptContain +#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname +#define __pyx_n_s_re __pyx_mstate_global->__pyx_n_s_re +#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce +#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython +#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex +#define __pyx_n_s_ref __pyx_mstate_global->__pyx_n_s_ref +#define __pyx_n_s_register_callback __pyx_mstate_global->__pyx_n_s_register_callback +#define __pyx_n_s_required_events __pyx_mstate_global->__pyx_n_s_required_events +#define __pyx_n_s_required_events_breakpoint __pyx_mstate_global->__pyx_n_s_required_events_breakpoint +#define __pyx_n_s_required_events_stepping __pyx_mstate_global->__pyx_n_s_required_events_stepping +#define __pyx_n_s_restart_events __pyx_mstate_global->__pyx_n_s_restart_events +#define __pyx_n_s_return __pyx_mstate_global->__pyx_n_s_return +#define __pyx_n_s_retval __pyx_mstate_global->__pyx_n_s_retval +#define __pyx_n_s_run __pyx_mstate_global->__pyx_n_s_run +#define __pyx_n_s_run_2 __pyx_mstate_global->__pyx_n_s_run_2 +#define __pyx_n_s_runpy __pyx_mstate_global->__pyx_n_s_runpy +#define __pyx_kp_s_s_s __pyx_mstate_global->__pyx_kp_s_s_s +#define __pyx_kp_s_s_s_2 __pyx_mstate_global->__pyx_kp_s_s_s_2 +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self +#define __pyx_n_s_set_events __pyx_mstate_global->__pyx_n_s_set_events +#define __pyx_n_s_set_local_events __pyx_mstate_global->__pyx_n_s_set_local_events +#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name +#define __pyx_n_s_set_suspend __pyx_mstate_global->__pyx_n_s_set_suspend +#define __pyx_n_s_set_trace_for_frame_and_parents __pyx_mstate_global->__pyx_n_s_set_trace_for_frame_and_parents +#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate +#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython +#define __pyx_n_s_short_frame __pyx_mstate_global->__pyx_n_s_short_frame +#define __pyx_n_s_short_tb __pyx_mstate_global->__pyx_n_s_short_tb +#define __pyx_n_s_should_stop_on_exception __pyx_mstate_global->__pyx_n_s_should_stop_on_exception +#define __pyx_n_s_should_trace_hook __pyx_mstate_global->__pyx_n_s_should_trace_hook +#define __pyx_n_s_show_return_values __pyx_mstate_global->__pyx_n_s_show_return_values +#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec +#define __pyx_n_s_splitext __pyx_mstate_global->__pyx_n_s_splitext +#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start +#define __pyx_n_s_start_monitoring __pyx_mstate_global->__pyx_n_s_start_monitoring +#define __pyx_n_s_startswith __pyx_mstate_global->__pyx_n_s_startswith +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state +#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop +#define __pyx_n_s_stop_monitoring __pyx_mstate_global->__pyx_n_s_stop_monitoring +#define __pyx_n_s_stop_on_unhandled_exception __pyx_mstate_global->__pyx_n_s_stop_on_unhandled_exception +#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource +#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super +#define __pyx_n_s_suspend __pyx_mstate_global->__pyx_n_s_suspend +#define __pyx_n_s_suspend_other_threads __pyx_mstate_global->__pyx_n_s_suspend_other_threads +#define __pyx_n_s_suspend_policy __pyx_mstate_global->__pyx_n_s_suspend_policy +#define __pyx_n_s_suspend_requested __pyx_mstate_global->__pyx_n_s_suspend_requested +#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_sys_monitor __pyx_mstate_global->__pyx_n_s_sys_monitor +#define __pyx_n_s_t __pyx_mstate_global->__pyx_n_s_t +#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test +#define __pyx_n_s_thread __pyx_mstate_global->__pyx_n_s_thread +#define __pyx_n_s_thread_active __pyx_mstate_global->__pyx_n_s_thread_active +#define __pyx_n_s_thread_ident __pyx_mstate_global->__pyx_n_s_thread_ident +#define __pyx_n_s_thread_info __pyx_mstate_global->__pyx_n_s_thread_info +#define __pyx_n_s_thread_local_info __pyx_mstate_global->__pyx_n_s_thread_local_info +#define __pyx_n_s_threading __pyx_mstate_global->__pyx_n_s_threading +#define __pyx_n_s_tident __pyx_mstate_global->__pyx_n_s_tident +#define __pyx_n_s_to_offset __pyx_mstate_global->__pyx_n_s_to_offset +#define __pyx_n_s_trace __pyx_mstate_global->__pyx_n_s_trace +#define __pyx_n_s_traceback __pyx_mstate_global->__pyx_n_s_traceback +#define __pyx_n_s_track_dummy_thread_ref __pyx_mstate_global->__pyx_n_s_track_dummy_thread_ref +#define __pyx_n_s_try_except_infos __pyx_mstate_global->__pyx_n_s_try_except_infos +#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types +#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing +#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_update_monitor_events __pyx_mstate_global->__pyx_n_s_update_monitor_events +#define __pyx_n_s_use_setstate __pyx_mstate_global->__pyx_n_s_use_setstate +#define __pyx_n_s_use_tool_id __pyx_mstate_global->__pyx_n_s_use_tool_id +#define __pyx_n_s_user_uncaught_exc_info __pyx_mstate_global->__pyx_n_s_user_uncaught_exc_info +#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_wrap __pyx_mstate_global->__pyx_n_s_wrap +#define __pyx_n_s_writer __pyx_mstate_global->__pyx_n_s_writer +#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 +#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 +#define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 +#define __pyx_int_107 __pyx_mstate_global->__pyx_int_107 +#define __pyx_int_108 __pyx_mstate_global->__pyx_int_108 +#define __pyx_int_109 __pyx_mstate_global->__pyx_int_109 +#define __pyx_int_111 __pyx_mstate_global->__pyx_int_111 +#define __pyx_int_128 __pyx_mstate_global->__pyx_int_128 +#define __pyx_int_144 __pyx_mstate_global->__pyx_int_144 +#define __pyx_int_159 __pyx_mstate_global->__pyx_int_159 +#define __pyx_int_160 __pyx_mstate_global->__pyx_int_160 +#define __pyx_int_206 __pyx_mstate_global->__pyx_int_206 +#define __pyx_int_208 __pyx_mstate_global->__pyx_int_208 +#define __pyx_int_66323410 __pyx_mstate_global->__pyx_int_66323410 +#define __pyx_int_92026781 __pyx_mstate_global->__pyx_int_92026781 +#define __pyx_int_99967855 __pyx_mstate_global->__pyx_int_99967855 +#define __pyx_int_189049472 __pyx_mstate_global->__pyx_int_189049472 +#define __pyx_int_210464433 __pyx_mstate_global->__pyx_int_210464433 +#define __pyx_int_224549882 __pyx_mstate_global->__pyx_int_224549882 +#define __pyx_int_230645316 __pyx_mstate_global->__pyx_int_230645316 +#define __pyx_int_232881363 __pyx_mstate_global->__pyx_int_232881363 +#define __pyx_int_266084120 __pyx_mstate_global->__pyx_int_266084120 +#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 +#define __pyx_k__15 __pyx_mstate_global->__pyx_k__15 +#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_ +#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3 +#define __pyx_tuple__5 __pyx_mstate_global->__pyx_tuple__5 +#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7 +#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 +#define __pyx_slice__16 __pyx_mstate_global->__pyx_slice__16 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 +#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12 +#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13 +#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18 +#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20 +#define __pyx_tuple__21 __pyx_mstate_global->__pyx_tuple__21 +#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 +#define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34 +#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41 +#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43 +#define __pyx_tuple__45 __pyx_mstate_global->__pyx_tuple__45 +#define __pyx_tuple__50 __pyx_mstate_global->__pyx_tuple__50 +#define __pyx_tuple__52 __pyx_mstate_global->__pyx_tuple__52 +#define __pyx_tuple__54 __pyx_mstate_global->__pyx_tuple__54 +#define __pyx_tuple__55 __pyx_mstate_global->__pyx_tuple__55 +#define __pyx_tuple__57 __pyx_mstate_global->__pyx_tuple__57 +#define __pyx_tuple__59 __pyx_mstate_global->__pyx_tuple__59 +#define __pyx_tuple__61 __pyx_mstate_global->__pyx_tuple__61 +#define __pyx_codeobj__2 __pyx_mstate_global->__pyx_codeobj__2 +#define __pyx_codeobj__4 __pyx_mstate_global->__pyx_codeobj__4 +#define __pyx_codeobj__6 __pyx_mstate_global->__pyx_codeobj__6 +#define __pyx_codeobj__8 __pyx_mstate_global->__pyx_codeobj__8 +#define __pyx_codeobj__10 __pyx_mstate_global->__pyx_codeobj__10 +#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 +#define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29 +#define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31 +#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33 +#define __pyx_codeobj__35 __pyx_mstate_global->__pyx_codeobj__35 +#define __pyx_codeobj__37 __pyx_mstate_global->__pyx_codeobj__37 +#define __pyx_codeobj__38 __pyx_mstate_global->__pyx_codeobj__38 +#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39 +#define __pyx_codeobj__42 __pyx_mstate_global->__pyx_codeobj__42 +#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44 +#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46 +#define __pyx_codeobj__47 __pyx_mstate_global->__pyx_codeobj__47 +#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48 +#define __pyx_codeobj__49 __pyx_mstate_global->__pyx_codeobj__49 +#define __pyx_codeobj__51 __pyx_mstate_global->__pyx_codeobj__51 +#define __pyx_codeobj__53 __pyx_mstate_global->__pyx_codeobj__53 +#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56 +#define __pyx_codeobj__58 __pyx_mstate_global->__pyx_codeobj__58 +#define __pyx_codeobj__60 __pyx_mstate_global->__pyx_codeobj__60 +#define __pyx_codeobj__62 __pyx_mstate_global->__pyx_codeobj__62 +#define __pyx_codeobj__63 __pyx_mstate_global->__pyx_codeobj__63 +#define __pyx_codeobj__64 __pyx_mstate_global->__pyx_codeobj__64 +/* #### Code section: module_code ### */ + +/* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object exc): # <<<<<<<<<<<<<< + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_wrap, "wrap(code, instruction, exc)"); +static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_1wrap = {"wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_1wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_wrap}; +static PyObject *__pyx_pw_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + PyObject *__pyx_v_instruction = 0; + PyObject *__pyx_v_exc = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("wrap (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,&__pyx_n_s_instruction,&__pyx_n_s_exc,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_instruction)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 1); __PYX_ERR(1, 67, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_exc)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 2); __PYX_ERR(1, 67, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wrap") < 0)) __PYX_ERR(1, 67, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_code = values[0]; + __pyx_v_instruction = values[1]; + __pyx_v_exc = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_wrap(__pyx_self, __pyx_v_code, __pyx_v_instruction, __pyx_v_exc); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction, PyObject *__pyx_v_exc) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *__pyx_cur_scope; + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *__pyx_outer_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("wrap", 1); + __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "cfunc.to_py":69 + * def wrap(object code, object instruction, object exc): + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) # <<<<<<<<<<<<<< + * return wrap + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_code, __pyx_v_instruction, __pyx_v_exc); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object exc): # <<<<<<<<<<<<<< + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction, object exc): + * """wrap(code, instruction, exc)""" + */ + +static PyObject *__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(PyObject *(*__pyx_v_f)(PyObject *, PyObject *, PyObject *)) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *__pyx_cur_scope; + PyObject *__pyx_v_wrap = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc", 0); + __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(1, 66, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_f = __pyx_v_f; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object exc): # <<<<<<<<<<<<<< + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cfunc_dot_to_py_102__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_1wrap, 0, __pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_wrap = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cfunc.to_py":70 + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) + * return wrap # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_wrap); + __pyx_r = __pyx_v_wrap; + goto __pyx_L0; + + /* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction, object exc): + * """wrap(code, instruction, exc)""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_wrap); + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset") + * cdef object __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(object (*f)(object, object) ): + * def wrap(object code, object instruction_offset): # <<<<<<<<<<<<<< + * """wrap(code, instruction_offset)""" + * return f(code, instruction_offset) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_wrap, "wrap(code, instruction_offset)"); +static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_1wrap = {"wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_1wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_wrap}; +static PyObject *__pyx_pw_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + PyObject *__pyx_v_instruction_offset = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("wrap (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,&__pyx_n_s_instruction_offset,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_instruction_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 2, 2, 1); __PYX_ERR(1, 67, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wrap") < 0)) __PYX_ERR(1, 67, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_code = values[0]; + __pyx_v_instruction_offset = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("wrap", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_wrap(__pyx_self, __pyx_v_code, __pyx_v_instruction_offset); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction_offset) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *__pyx_cur_scope; + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *__pyx_outer_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("wrap", 1); + __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "cfunc.to_py":69 + * def wrap(object code, object instruction_offset): + * """wrap(code, instruction_offset)""" + * return f(code, instruction_offset) # <<<<<<<<<<<<<< + * return wrap + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_code, __pyx_v_instruction_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset") + * cdef object __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(object (*f)(object, object) ): + * def wrap(object code, object instruction_offset): # <<<<<<<<<<<<<< + * """wrap(code, instruction_offset)""" + * return f(code, instruction_offset) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset") + * cdef object __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(object (*f)(object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction_offset): + * """wrap(code, instruction_offset)""" + */ + +static PyObject *__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(PyObject *(*__pyx_v_f)(PyObject *, PyObject *)) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *__pyx_cur_scope; + PyObject *__pyx_v_wrap = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset", 0); + __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(1, 66, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_f = __pyx_v_f; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset") + * cdef object __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(object (*f)(object, object) ): + * def wrap(object code, object instruction_offset): # <<<<<<<<<<<<<< + * """wrap(code, instruction_offset)""" + * return f(code, instruction_offset) + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cfunc_dot_to_py_104__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_1wrap, 0, __pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_wrap = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cfunc.to_py":70 + * """wrap(code, instruction_offset)""" + * return f(code, instruction_offset) + * return wrap # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_wrap); + __pyx_r = __pyx_v_wrap; + goto __pyx_L0; + + /* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset") + * cdef object __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(object (*f)(object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction_offset): + * """wrap(code, instruction_offset)""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_wrap); + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line") + * cdef object __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(object (*f)(object, int) ): + * def wrap(object code, int line): # <<<<<<<<<<<<<< + * """wrap(code, line: 'int')""" + * return f(code, line) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_wrap, "wrap(code, line: 'int')"); +static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_1wrap = {"wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_1wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_wrap}; +static PyObject *__pyx_pw_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + int __pyx_v_line; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("wrap (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,&__pyx_n_s_line,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_line)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 2, 2, 1); __PYX_ERR(1, 67, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wrap") < 0)) __PYX_ERR(1, 67, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_code = values[0]; + __pyx_v_line = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_line == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("wrap", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_wrap(__pyx_self, __pyx_v_code, __pyx_v_line); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, int __pyx_v_line) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *__pyx_cur_scope; + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *__pyx_outer_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("wrap", 1); + __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "cfunc.to_py":69 + * def wrap(object code, int line): + * """wrap(code, line: 'int')""" + * return f(code, line) # <<<<<<<<<<<<<< + * return wrap + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_code, __pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line") + * cdef object __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(object (*f)(object, int) ): + * def wrap(object code, int line): # <<<<<<<<<<<<<< + * """wrap(code, line: 'int')""" + * return f(code, line) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line") + * cdef object __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(object (*f)(object, int) ): # <<<<<<<<<<<<<< + * def wrap(object code, int line): + * """wrap(code, line: 'int')""" + */ + +static PyObject *__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(PyObject *(*__pyx_v_f)(PyObject *, int)) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *__pyx_cur_scope; + PyObject *__pyx_v_wrap = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line", 0); + __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(1, 66, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_f = __pyx_v_f; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line") + * cdef object __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(object (*f)(object, int) ): + * def wrap(object code, int line): # <<<<<<<<<<<<<< + * """wrap(code, line: 'int')""" + * return f(code, line) + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cfunc_dot_to_py_89__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_1wrap, 0, __pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_wrap = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cfunc.to_py":70 + * """wrap(code, line: 'int')""" + * return f(code, line) + * return wrap # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_wrap); + __pyx_r = __pyx_v_wrap; + goto __pyx_L0; + + /* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line") + * cdef object __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(object (*f)(object, int) ): # <<<<<<<<<<<<<< + * def wrap(object code, int line): + * """wrap(code, line: 'int')""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_wrap); + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset") + * cdef object __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(object (*f)(object, int, int) ): + * def wrap(object code, int from_offset, int to_offset): # <<<<<<<<<<<<<< + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + * return f(code, from_offset, to_offset) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_wrap, "wrap(code, from_offset: 'int', to_offset: 'int')"); +static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_1wrap = {"wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_1wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_wrap}; +static PyObject *__pyx_pw_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + int __pyx_v_from_offset; + int __pyx_v_to_offset; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("wrap (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,&__pyx_n_s_from_offset,&__pyx_n_s_to_offset,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_from_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 1); __PYX_ERR(1, 67, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_to_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 2); __PYX_ERR(1, 67, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wrap") < 0)) __PYX_ERR(1, 67, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_code = values[0]; + __pyx_v_from_offset = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_from_offset == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_v_to_offset = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_to_offset == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_wrap(__pyx_self, __pyx_v_code, __pyx_v_from_offset, __pyx_v_to_offset); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, int __pyx_v_from_offset, int __pyx_v_to_offset) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *__pyx_cur_scope; + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *__pyx_outer_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("wrap", 1); + __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "cfunc.to_py":69 + * def wrap(object code, int from_offset, int to_offset): + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + * return f(code, from_offset, to_offset) # <<<<<<<<<<<<<< + * return wrap + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_code, __pyx_v_from_offset, __pyx_v_to_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset") + * cdef object __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(object (*f)(object, int, int) ): + * def wrap(object code, int from_offset, int to_offset): # <<<<<<<<<<<<<< + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + * return f(code, from_offset, to_offset) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset") + * cdef object __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(object (*f)(object, int, int) ): # <<<<<<<<<<<<<< + * def wrap(object code, int from_offset, int to_offset): + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + */ + +static PyObject *__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(PyObject *(*__pyx_v_f)(PyObject *, int, int)) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *__pyx_cur_scope; + PyObject *__pyx_v_wrap = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset", 0); + __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(1, 66, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_f = __pyx_v_f; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset") + * cdef object __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(object (*f)(object, int, int) ): + * def wrap(object code, int from_offset, int to_offset): # <<<<<<<<<<<<<< + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + * return f(code, from_offset, to_offset) + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cfunc_dot_to_py_108__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_1wrap, 0, __pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_wrap = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cfunc.to_py":70 + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + * return f(code, from_offset, to_offset) + * return wrap # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_wrap); + __pyx_r = __pyx_v_wrap; + goto __pyx_L0; + + /* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset") + * cdef object __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(object (*f)(object, int, int) ): # <<<<<<<<<<<<<< + * def wrap(object code, int from_offset, int to_offset): + * """wrap(code, from_offset: 'int', to_offset: 'int')""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_wrap); + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object retval): # <<<<<<<<<<<<<< + * """wrap(code, instruction, retval)""" + * return f(code, instruction, retval) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_wrap, "wrap(code, instruction, retval)"); +static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_1wrap = {"wrap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_1wrap, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_wrap}; +static PyObject *__pyx_pw_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_1wrap(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + PyObject *__pyx_v_instruction = 0; + PyObject *__pyx_v_retval = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("wrap (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,&__pyx_n_s_instruction,&__pyx_n_s_retval,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_instruction)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 1); __PYX_ERR(1, 67, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_retval)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 67, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, 2); __PYX_ERR(1, 67, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "wrap") < 0)) __PYX_ERR(1, 67, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_code = values[0]; + __pyx_v_instruction = values[1]; + __pyx_v_retval = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("wrap", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 67, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_wrap(__pyx_self, __pyx_v_code, __pyx_v_instruction, __pyx_v_retval); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_wrap(PyObject *__pyx_self, PyObject *__pyx_v_code, PyObject *__pyx_v_instruction, PyObject *__pyx_v_retval) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *__pyx_cur_scope; + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *__pyx_outer_scope; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("wrap", 1); + __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *) __Pyx_CyFunction_GetClosure(__pyx_self); + __pyx_cur_scope = __pyx_outer_scope; + + /* "cfunc.to_py":69 + * def wrap(object code, object instruction, object retval): + * """wrap(code, instruction, retval)""" + * return f(code, instruction, retval) # <<<<<<<<<<<<<< + * return wrap + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_code, __pyx_v_instruction, __pyx_v_retval); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object retval): # <<<<<<<<<<<<<< + * """wrap(code, instruction, retval)""" + * return f(code, instruction, retval) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(object (*f)(object, object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction, object retval): + * """wrap(code, instruction, retval)""" + */ + +static PyObject *__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(PyObject *(*__pyx_v_f)(PyObject *, PyObject *, PyObject *)) { + struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *__pyx_cur_scope; + PyObject *__pyx_v_wrap = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval", 0); + __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval, __pyx_empty_tuple, NULL); + if (unlikely(!__pyx_cur_scope)) { + __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *)Py_None); + __Pyx_INCREF(Py_None); + __PYX_ERR(1, 66, __pyx_L1_error) + } else { + __Pyx_GOTREF((PyObject *)__pyx_cur_scope); + } + __pyx_cur_scope->__pyx_v_f = __pyx_v_f; + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object retval): # <<<<<<<<<<<<<< + * """wrap(code, instruction, retval)""" + * return f(code, instruction, retval) + */ + __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cfunc_dot_to_py_105__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_1wrap, 0, __pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_wrap = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cfunc.to_py":70 + * """wrap(code, instruction, retval)""" + * return f(code, instruction, retval) + * return wrap # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_wrap); + __pyx_r = __pyx_v_wrap; + goto __pyx_L0; + + /* "cfunc.to_py":66 + * + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(object (*f)(object, object, object) ): # <<<<<<<<<<<<<< + * def wrap(object code, object instruction, object retval): + * """wrap(code, instruction, retval)""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_wrap); + __Pyx_DECREF((PyObject *)__pyx_cur_scope); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":57 + * except ImportError: + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_1get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_1get_smart_step_into_variant_from_frame_offset = {"get_smart_step_into_variant_from_frame_offset", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_1get_smart_step_into_variant_from_frame_offset, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_1get_smart_step_into_variant_from_frame_offset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_args = 0; + CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_smart_step_into_variant_from_frame_offset", 1))) return NULL; + __Pyx_INCREF(__pyx_args); + __pyx_v_args = __pyx_args; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_get_smart_step_into_variant_from_frame_offset(__pyx_self, __pyx_v_args, __pyx_v_kwargs); + + /* function exit code */ + __Pyx_DECREF(__pyx_v_args); + __Pyx_XDECREF(__pyx_v_kwargs); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_get_smart_step_into_variant_from_frame_offset(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_smart_step_into_variant_from_frame_offset", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":58 + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): + * return None # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":57 + * except ImportError: + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":96 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _notify_skipped_step_in_because_of_filters(py_db, frame): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__notify_skipped_step_in_because_of_filters(PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_notify_skipped_step_in_because_of_filters", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":103 + * global _global_notify_skipped_step_in + * + * with _global_notify_skipped_step_in_lock: # <<<<<<<<<<<<<< + * if _global_notify_skipped_step_in: + * # Check with lock in place (callers should actually have checked + */ + /*with:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_global_notify_skipped_step_in_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 103, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":104 + * + * with _global_notify_skipped_step_in_lock: + * if _global_notify_skipped_step_in: # <<<<<<<<<<<<<< + * # Check with lock in place (callers should actually have checked + * # before without the lock in place due to performance). + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_global_notify_skipped_step_in); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 104, __pyx_L7_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":107 + * # Check with lock in place (callers should actually have checked + * # before without the lock in place due to performance). + * return # <<<<<<<<<<<<<< + * _global_notify_skipped_step_in = True + * py_db.notify_skipped_step_in_because_of_filters(frame) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L11_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":104 + * + * with _global_notify_skipped_step_in_lock: + * if _global_notify_skipped_step_in: # <<<<<<<<<<<<<< + * # Check with lock in place (callers should actually have checked + * # before without the lock in place due to performance). + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":108 + * # before without the lock in place due to performance). + * return + * _global_notify_skipped_step_in = True # <<<<<<<<<<<<<< + * py_db.notify_skipped_step_in_because_of_filters(frame) + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_notify_skipped_step_in, Py_True) < 0) __PYX_ERR(0, 108, __pyx_L7_error) + + /* "_pydevd_sys_monitoring_cython.pyx":109 + * return + * _global_notify_skipped_step_in = True + * py_db.notify_skipped_step_in_because_of_filters(frame) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_notify_skipped_step_in_because_o); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 109, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":103 + * global _global_notify_skipped_step_in + * + * with _global_notify_skipped_step_in_lock: # <<<<<<<<<<<<<< + * if _global_notify_skipped_step_in: + * # Check with lock in place (callers should actually have checked + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._notify_skipped_step_in_because_of_filters", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(0, 103, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 103, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 103, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_10 < 0) __PYX_ERR(0, 103, __pyx_L9_except_error) + __pyx_t_12 = (!__pyx_t_10); + if (unlikely(__pyx_t_12)) { + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_4); + __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; + __PYX_ERR(0, 103, __pyx_L9_except_error) + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_exception_handled; + } + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L11_try_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L4_return; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L12_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_2) { + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + goto __pyx_L6; + } + __pyx_L4_return: { + __pyx_t_9 = __pyx_r; + __pyx_r = 0; + if (__pyx_t_2) { + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __pyx_r = __pyx_t_9; + __pyx_t_9 = 0; + goto __pyx_L0; + } + __pyx_L6:; + } + goto __pyx_L17; + __pyx_L3_error:; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L1_error; + __pyx_L17:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":96 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _notify_skipped_step_in_because_of_filters(py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _notify_skipped_step_in_because_of_filters(py_db, frame): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._notify_skipped_step_in_because_of_filters", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":116 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * @cython.cfunc # <<<<<<<<<<<<<< + * def _getframe(depth=0): + * return sys._getframe() + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__getframe(struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe *__pyx_optional_args) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_getframe", 1); + if (__pyx_optional_args) { + } + + /* "_pydevd_sys_monitoring_cython.pyx":118 + * @cython.cfunc + * def _getframe(depth=0): + * return sys._getframe() # <<<<<<<<<<<<<< + * # ELSE + * # _getframe = sys._getframe + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getframe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":116 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * @cython.cfunc # <<<<<<<<<<<<<< + * def _getframe(depth=0): + * return sys._getframe() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._getframe", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":127 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_bootstrap_frame(depth): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_bootstrap_frame(depth: int) -> Tuple[Optional[FrameType], bool]: + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_bootstrap_frame(PyObject *__pyx_v_depth) { + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_v_f_bootstrap = NULL; + int __pyx_v_is_bootstrap_frame_internal; + PyObject *__pyx_v_filename = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + unsigned int __pyx_t_14; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_bootstrap_frame", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":132 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":133 + * # fmt: on + * try: + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal # <<<<<<<<<<<<<< + * except: + * frame = _getframe(depth) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_f_bootstrap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 133, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_is_bootstrap_frame_internal); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 133, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5)) __PYX_ERR(0, 133, __pyx_L3_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6)) __PYX_ERR(0, 133, __pyx_L3_error); + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L7_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":132 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * except: + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":134 + * try: + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * except: # <<<<<<<<<<<<<< + * frame = _getframe(depth) + * f_bootstrap = frame + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_bootstrap_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(0, 134, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_5); + + /* "_pydevd_sys_monitoring_cython.pyx":135 + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * except: + * frame = _getframe(depth) # <<<<<<<<<<<<<< + * f_bootstrap = frame + * # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + */ + __pyx_t_8.__pyx_n = 1; + __pyx_t_8.depth = __pyx_v_depth; + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 135, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_frame = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":136 + * except: + * frame = _getframe(depth) + * f_bootstrap = frame # <<<<<<<<<<<<<< + * # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + * is_bootstrap_frame_internal = False + */ + __Pyx_INCREF(__pyx_v_frame); + __pyx_v_f_bootstrap = __pyx_v_frame; + + /* "_pydevd_sys_monitoring_cython.pyx":138 + * f_bootstrap = frame + * # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + * is_bootstrap_frame_internal = False # <<<<<<<<<<<<<< + * while f_bootstrap is not None: + * filename = f_bootstrap.f_code.co_filename + */ + __pyx_v_is_bootstrap_frame_internal = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":139 + * # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + * is_bootstrap_frame_internal = False + * while f_bootstrap is not None: # <<<<<<<<<<<<<< + * filename = f_bootstrap.f_code.co_filename + * name = splitext(basename(filename))[0] + */ + while (1) { + __pyx_t_9 = (__pyx_v_f_bootstrap != Py_None); + if (!__pyx_t_9) break; + + /* "_pydevd_sys_monitoring_cython.pyx":140 + * is_bootstrap_frame_internal = False + * while f_bootstrap is not None: + * filename = f_bootstrap.f_code.co_filename # <<<<<<<<<<<<<< + * name = splitext(basename(filename))[0] + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 140, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 140, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_filename, __pyx_t_10); + __pyx_t_10 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":141 + * while f_bootstrap is not None: + * filename = f_bootstrap.f_code.co_filename + * name = splitext(basename(filename))[0] # <<<<<<<<<<<<<< + * + * if name == "threading": + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_splitext); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 141, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_basename); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 141, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_t_13 = NULL; + __pyx_t_14 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_12))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_12, function); + __pyx_t_14 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_v_filename}; + __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 141, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + } + __pyx_t_12 = NULL; + __pyx_t_14 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_14 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_11}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 141, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_10, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 141, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":143 + * name = splitext(basename(filename))[0] + * + * if name == "threading": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + * # We need __bootstrap_inner, not __bootstrap. + */ + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_threading, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 143, __pyx_L5_except_error) + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":144 + * + * if name == "threading": + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): # <<<<<<<<<<<<<< + * # We need __bootstrap_inner, not __bootstrap. + * return None, False + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 144, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 144, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = (__Pyx_PyString_Equals(__pyx_t_10, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 144, __pyx_L5_except_error) + if (!__pyx_t_15) { + } else { + __pyx_t_9 = __pyx_t_15; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_15 = (__Pyx_PyString_Equals(__pyx_t_10, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 144, __pyx_L5_except_error) + __pyx_t_9 = __pyx_t_15; + __pyx_L15_bool_binop_done:; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_15 = __pyx_t_9; + if (__pyx_t_15) { + + /* "_pydevd_sys_monitoring_cython.pyx":146 + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + * # We need __bootstrap_inner, not __bootstrap. + * return None, False # <<<<<<<<<<<<<< + * + * elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_tuple__12); + __pyx_r = __pyx_tuple__12; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":144 + * + * if name == "threading": + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): # <<<<<<<<<<<<<< + * # We need __bootstrap_inner, not __bootstrap. + * return None, False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":148 + * return None, False + * + * elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * is_bootstrap_frame_internal = True + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 148, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 148, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 148, __pyx_L5_except_error) + if (!__pyx_t_9) { + } else { + __pyx_t_15 = __pyx_t_9; + goto __pyx_L17_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 148, __pyx_L5_except_error) + if (!__pyx_t_9) { + } else { + __pyx_t_15 = __pyx_t_9; + goto __pyx_L17_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_is_alive, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 148, __pyx_L5_except_error) + __pyx_t_15 = __pyx_t_9; + __pyx_L17_bool_binop_done:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_9 = __pyx_t_15; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":150 + * elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * is_bootstrap_frame_internal = True # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_is_bootstrap_frame_internal = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":151 + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * is_bootstrap_frame_internal = True + * break # <<<<<<<<<<<<<< + * + * elif name == "pydev_monkey": + */ + goto __pyx_L12_break; + + /* "_pydevd_sys_monitoring_cython.pyx":148 + * return None, False + * + * elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * is_bootstrap_frame_internal = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":143 + * name = splitext(basename(filename))[0] + * + * if name == "threading": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + * # We need __bootstrap_inner, not __bootstrap. + */ + goto __pyx_L13; + } + + /* "_pydevd_sys_monitoring_cython.pyx":153 + * break + * + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name == "__call__": + * is_bootstrap_frame_internal = True + */ + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 153, __pyx_L5_except_error) + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":154 + * + * elif name == "pydev_monkey": + * if f_bootstrap.f_code.co_name == "__call__": # <<<<<<<<<<<<<< + * is_bootstrap_frame_internal = True + * break + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 154, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 154, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_10, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 154, __pyx_L5_except_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":155 + * elif name == "pydev_monkey": + * if f_bootstrap.f_code.co_name == "__call__": + * is_bootstrap_frame_internal = True # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_is_bootstrap_frame_internal = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":156 + * if f_bootstrap.f_code.co_name == "__call__": + * is_bootstrap_frame_internal = True + * break # <<<<<<<<<<<<<< + * + * elif name == "pydevd": + */ + goto __pyx_L12_break; + + /* "_pydevd_sys_monitoring_cython.pyx":154 + * + * elif name == "pydev_monkey": + * if f_bootstrap.f_code.co_name == "__call__": # <<<<<<<<<<<<<< + * is_bootstrap_frame_internal = True + * break + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":153 + * break + * + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name == "__call__": + * is_bootstrap_frame_internal = True + */ + goto __pyx_L13; + } + + /* "_pydevd_sys_monitoring_cython.pyx":158 + * break + * + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name in ("run", "main"): + * # We need to get to _exec + */ + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 158, __pyx_L5_except_error) + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":159 + * + * elif name == "pydevd": + * if f_bootstrap.f_code.co_name in ("run", "main"): # <<<<<<<<<<<<<< + * # We need to get to _exec + * return None, False + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 159, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 159, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_15 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_run, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 159, __pyx_L5_except_error) + if (!__pyx_t_15) { + } else { + __pyx_t_9 = __pyx_t_15; + goto __pyx_L22_bool_binop_done; + } + __pyx_t_15 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_n_s_main, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 159, __pyx_L5_except_error) + __pyx_t_9 = __pyx_t_15; + __pyx_L22_bool_binop_done:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = __pyx_t_9; + if (__pyx_t_15) { + + /* "_pydevd_sys_monitoring_cython.pyx":161 + * if f_bootstrap.f_code.co_name in ("run", "main"): + * # We need to get to _exec + * return None, False # <<<<<<<<<<<<<< + * + * if f_bootstrap.f_code.co_name == "_exec": + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_tuple__12); + __pyx_r = __pyx_tuple__12; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":159 + * + * elif name == "pydevd": + * if f_bootstrap.f_code.co_name in ("run", "main"): # <<<<<<<<<<<<<< + * # We need to get to _exec + * return None, False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":163 + * return None, False + * + * if f_bootstrap.f_code.co_name == "_exec": # <<<<<<<<<<<<<< + * is_bootstrap_frame_internal = True + * break + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 163, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 163, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = (__Pyx_PyString_Equals(__pyx_t_10, __pyx_n_s_exec, Py_EQ)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 163, __pyx_L5_except_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (__pyx_t_15) { + + /* "_pydevd_sys_monitoring_cython.pyx":164 + * + * if f_bootstrap.f_code.co_name == "_exec": + * is_bootstrap_frame_internal = True # <<<<<<<<<<<<<< + * break + * + */ + __pyx_v_is_bootstrap_frame_internal = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":165 + * if f_bootstrap.f_code.co_name == "_exec": + * is_bootstrap_frame_internal = True + * break # <<<<<<<<<<<<<< + * + * elif f_bootstrap.f_back is None: + */ + goto __pyx_L12_break; + + /* "_pydevd_sys_monitoring_cython.pyx":163 + * return None, False + * + * if f_bootstrap.f_code.co_name == "_exec": # <<<<<<<<<<<<<< + * is_bootstrap_frame_internal = True + * break + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":158 + * break + * + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if f_bootstrap.f_code.co_name in ("run", "main"): + * # We need to get to _exec + */ + goto __pyx_L13; + } + + /* "_pydevd_sys_monitoring_cython.pyx":167 + * break + * + * elif f_bootstrap.f_back is None: # <<<<<<<<<<<<<< + * break + * + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_back); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 167, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_15 = (__pyx_t_10 == Py_None); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (__pyx_t_15) { + + /* "_pydevd_sys_monitoring_cython.pyx":168 + * + * elif f_bootstrap.f_back is None: + * break # <<<<<<<<<<<<<< + * + * f_bootstrap = f_bootstrap.f_back + */ + goto __pyx_L12_break; + + /* "_pydevd_sys_monitoring_cython.pyx":167 + * break + * + * elif f_bootstrap.f_back is None: # <<<<<<<<<<<<<< + * break + * + */ + } + __pyx_L13:; + + /* "_pydevd_sys_monitoring_cython.pyx":170 + * break + * + * f_bootstrap = f_bootstrap.f_back # <<<<<<<<<<<<<< + * + * if f_bootstrap is not None: + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap, __pyx_n_s_f_back); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 170, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF_SET(__pyx_v_f_bootstrap, __pyx_t_10); + __pyx_t_10 = 0; + } + __pyx_L12_break:; + + /* "_pydevd_sys_monitoring_cython.pyx":172 + * f_bootstrap = f_bootstrap.f_back + * + * if f_bootstrap is not None: # <<<<<<<<<<<<<< + * _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + * _thread_local_info.f_bootstrap = f_bootstrap + */ + __pyx_t_15 = (__pyx_v_f_bootstrap != Py_None); + if (__pyx_t_15) { + + /* "_pydevd_sys_monitoring_cython.pyx":173 + * + * if f_bootstrap is not None: + * _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal # <<<<<<<<<<<<<< + * _thread_local_info.f_bootstrap = f_bootstrap + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + */ + __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_is_bootstrap_frame_internal); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 173, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 173, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_7, __pyx_n_s_is_bootstrap_frame_internal, __pyx_t_10) < 0) __PYX_ERR(0, 173, __pyx_L5_except_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":174 + * if f_bootstrap is not None: + * _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + * _thread_local_info.f_bootstrap = f_bootstrap # <<<<<<<<<<<<<< + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 174, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_7, __pyx_n_s_f_bootstrap, __pyx_v_f_bootstrap) < 0) __PYX_ERR(0, 174, __pyx_L5_except_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":175 + * _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + * _thread_local_info.f_bootstrap = f_bootstrap + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal # <<<<<<<<<<<<<< + * + * return f_bootstrap, is_bootstrap_frame_internal + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 175, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_f_bootstrap); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 175, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 175, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_is_bootstrap_frame_internal); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 175, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 175, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10)) __PYX_ERR(0, 175, __pyx_L5_except_error); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_11)) __PYX_ERR(0, 175, __pyx_L5_except_error); + __pyx_t_10 = 0; + __pyx_t_11 = 0; + __pyx_r = __pyx_t_7; + __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":172 + * f_bootstrap = f_bootstrap.f_back + * + * if f_bootstrap is not None: # <<<<<<<<<<<<<< + * _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + * _thread_local_info.f_bootstrap = f_bootstrap + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":177 + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * + * return f_bootstrap, is_bootstrap_frame_internal # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_is_bootstrap_frame_internal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 177, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 177, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_INCREF(__pyx_v_f_bootstrap); + __Pyx_GIVEREF(__pyx_v_f_bootstrap); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_f_bootstrap)) __PYX_ERR(0, 177, __pyx_L5_except_error); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_7)) __PYX_ERR(0, 177, __pyx_L5_except_error); + __pyx_t_7 = 0; + __pyx_r = __pyx_t_11; + __pyx_t_11 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":132 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":127 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_bootstrap_frame(depth): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_bootstrap_frame(depth: int) -> Tuple[Optional[FrameType], bool]: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_bootstrap_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_f_bootstrap); + __Pyx_XDECREF(__pyx_v_filename); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":181 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_user_frame(frame: FrameType): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_user_frame(frame: FrameType) -> bool: + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_user_frame(PyObject *__pyx_v_frame) { + PyObject *__pyx_v_filename = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_is_user_frame", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":186 + * # ENDIF + * # fmt: on + * if frame is None: # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_1 = (__pyx_v_frame == Py_None); + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":187 + * # fmt: on + * if frame is None: + * return False # <<<<<<<<<<<<<< + * + * filename = frame.f_code.co_filename + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":186 + * # ENDIF + * # fmt: on + * if frame is None: # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":189 + * return False + * + * filename = frame.f_code.co_filename # <<<<<<<<<<<<<< + * name = splitext(basename(filename))[0] + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_filename = __pyx_t_3; + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":190 + * + * filename = frame.f_code.co_filename + * name = splitext(basename(filename))[0] # <<<<<<<<<<<<<< + * + * # When the frame is the bootstrap it is not a user frame. + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_splitext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_basename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_filename}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_t_5 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_name = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":193 + * + * # When the frame is the bootstrap it is not a user frame. + * if name == "threading": # <<<<<<<<<<<<<< + * if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): + * return False + */ + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_threading, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 193, __pyx_L1_error) + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":194 + * # When the frame is the bootstrap it is not a user frame. + * if name == "threading": + * if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + if (!__pyx_t_8) { + } else { + __pyx_t_1 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_2, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + if (!__pyx_t_8) { + } else { + __pyx_t_1 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + if (!__pyx_t_8) { + } else { + __pyx_t_1 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + if (!__pyx_t_8) { + } else { + __pyx_t_1 = __pyx_t_8; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_run, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 194, __pyx_L1_error) + __pyx_t_1 = __pyx_t_8; + __pyx_L6_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_8 = __pyx_t_1; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":195 + * if name == "threading": + * if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): + * return False # <<<<<<<<<<<<<< + * + * elif name == "pydev_monkey": + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":194 + * # When the frame is the bootstrap it is not a user frame. + * if name == "threading": + * if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":193 + * + * # When the frame is the bootstrap it is not a user frame. + * if name == "threading": # <<<<<<<<<<<<<< + * if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): + * return False + */ + goto __pyx_L4; + } + + /* "_pydevd_sys_monitoring_cython.pyx":197 + * return False + * + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if frame.f_code.co_name == "__call__": + * return False + */ + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydev_monkey, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 197, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":198 + * + * elif name == "pydev_monkey": + * if frame.f_code.co_name == "__call__": # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 198, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":199 + * elif name == "pydev_monkey": + * if frame.f_code.co_name == "__call__": + * return False # <<<<<<<<<<<<<< + * + * elif name == "pydevd": + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":198 + * + * elif name == "pydev_monkey": + * if frame.f_code.co_name == "__call__": # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":197 + * return False + * + * elif name == "pydev_monkey": # <<<<<<<<<<<<<< + * if frame.f_code.co_name == "__call__": + * return False + */ + goto __pyx_L4; + } + + /* "_pydevd_sys_monitoring_cython.pyx":201 + * return False + * + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if frame.f_code.co_name in ("_exec", "run", "main"): + * return False + */ + __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd, Py_EQ)); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 201, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":202 + * + * elif name == "pydevd": + * if frame.f_code.co_name in ("_exec", "run", "main"): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_exec, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 202, __pyx_L1_error) + if (!__pyx_t_1) { + } else { + __pyx_t_8 = __pyx_t_1; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_run, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 202, __pyx_L1_error) + if (!__pyx_t_1) { + } else { + __pyx_t_8 = __pyx_t_1; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_main, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 202, __pyx_L1_error) + __pyx_t_8 = __pyx_t_1; + __pyx_L13_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_8; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":203 + * elif name == "pydevd": + * if frame.f_code.co_name in ("_exec", "run", "main"): + * return False # <<<<<<<<<<<<<< + * + * elif name == "pydevd_runpy": + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":202 + * + * elif name == "pydevd": + * if frame.f_code.co_name in ("_exec", "run", "main"): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":201 + * return False + * + * elif name == "pydevd": # <<<<<<<<<<<<<< + * if frame.f_code.co_name in ("_exec", "run", "main"): + * return False + */ + goto __pyx_L4; + } + + /* "_pydevd_sys_monitoring_cython.pyx":205 + * return False + * + * elif name == "pydevd_runpy": # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_pydevd_runpy, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 205, __pyx_L1_error) + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":206 + * + * elif name == "pydevd_runpy": + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_tuple__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":207 + * elif name == "pydevd_runpy": + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False # <<<<<<<<<<<<<< + * + * elif filename == "": + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":206 + * + * elif name == "pydevd_runpy": + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":205 + * return False + * + * elif name == "pydevd_runpy": # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + goto __pyx_L4; + } + + /* "_pydevd_sys_monitoring_cython.pyx":209 + * return False + * + * elif filename == "": # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_filename, __pyx_kp_s_frozen_runpy, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 209, __pyx_L1_error) + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":210 + * + * elif filename == "": + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_tuple__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 210, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":211 + * elif filename == "": + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False # <<<<<<<<<<<<<< + * + * elif name == 'runpy': + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":210 + * + * elif filename == "": + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":209 + * return False + * + * elif filename == "": # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + goto __pyx_L4; + } + + /* "_pydevd_sys_monitoring_cython.pyx":213 + * return False + * + * elif name == 'runpy': # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_runpy, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 213, __pyx_L1_error) + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":214 + * + * elif name == 'runpy': + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_startswith); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_tuple__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 214, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":215 + * elif name == 'runpy': + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False # <<<<<<<<<<<<<< + * + * return True + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":214 + * + * elif name == 'runpy': + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":213 + * return False + * + * elif name == 'runpy': # <<<<<<<<<<<<<< + * if frame.f_code.co_name.startswith(("run", "_run")): + * return False + */ + } + __pyx_L4:; + + /* "_pydevd_sys_monitoring_cython.pyx":217 + * return False + * + * return True # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":181 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_user_frame(frame: FrameType): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_user_frame(frame: FrameType) -> bool: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._is_user_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_filename); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":221 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_last_user_frame(frame: FrameType): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_last_user_frame(frame: FrameType) -> bool: + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_last_user_frame(PyObject *__pyx_v_frame) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_is_last_user_frame", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":227 + * # fmt: on + * # If this frame is not a user frame, then it can't be the last one + * if not _is_user_frame(frame): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__is_user_frame(__pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 227, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":228 + * # If this frame is not a user frame, then it can't be the last one + * if not _is_user_frame(frame): + * return False # <<<<<<<<<<<<<< + * + * # If this frame is the last frame, then it is the last one + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":227 + * # fmt: on + * # If this frame is not a user frame, then it can't be the last one + * if not _is_user_frame(frame): # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":231 + * + * # If this frame is the last frame, then it is the last one + * if frame.f_back is None: # <<<<<<<<<<<<<< + * return True + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = (__pyx_t_1 == Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":232 + * # If this frame is the last frame, then it is the last one + * if frame.f_back is None: + * return True # <<<<<<<<<<<<<< + * + * # If the next frame is not a user frame, then this frame is the last one + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":231 + * + * # If this frame is the last frame, then it is the last one + * if frame.f_back is None: # <<<<<<<<<<<<<< + * return True + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":235 + * + * # If the next frame is not a user frame, then this frame is the last one + * if not _is_user_frame(frame.f_back): # <<<<<<<<<<<<<< + * return True + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__is_user_frame(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = (!__pyx_t_3); + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":236 + * # If the next frame is not a user frame, then this frame is the last one + * if not _is_user_frame(frame.f_back): + * return True # <<<<<<<<<<<<<< + * + * # Otherwise if the next frame is a user frame, then this frame is not the last one + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":235 + * + * # If the next frame is not a user frame, then this frame is the last one + * if not _is_user_frame(frame.f_back): # <<<<<<<<<<<<<< + * return True + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":239 + * + * # Otherwise if the next frame is a user frame, then this frame is not the last one + * return False # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":221 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_last_user_frame(frame: FrameType): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_last_user_frame(frame: FrameType) -> bool: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._is_last_user_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":259 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def __init__(self, thread, unsigned long thread_ident, bint trace, PyDBAdditionalThreadInfo additional_info): # <<<<<<<<<<<<<< + * # ELSE + * # def __init__(self, thread: threading.Thread, thread_ident: int, trace: bool, additional_info: PyDBAdditionalThreadInfo): + */ + +/* Python wrapper */ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_thread = 0; + unsigned long __pyx_v_thread_ident; + int __pyx_v_trace; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_additional_info = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread,&__pyx_n_s_thread_ident,&__pyx_n_s_trace,&__pyx_n_s_additional_info,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread_ident)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 259, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_trace)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 259, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_additional_info)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 259, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 259, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 4)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1); + values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2); + values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3); + } + __pyx_v_thread = values[0]; + __pyx_v_thread_ident = __Pyx_PyInt_As_unsigned_long(values[1]); if (unlikely((__pyx_v_thread_ident == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_v_trace = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_trace == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)values[3]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 259, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.ThreadInfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_additional_info), __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo, 1, "additional_info", 0))) __PYX_ERR(0, 259, __pyx_L1_error) + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo___init__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_v_self), __pyx_v_thread, __pyx_v_thread_ident, __pyx_v_trace, __pyx_v_additional_info); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self, PyObject *__pyx_v_thread, unsigned long __pyx_v_thread_ident, int __pyx_v_trace, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_additional_info) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":264 + * # ENDIF + * # fmt: on + * self.thread = thread # <<<<<<<<<<<<<< + * self.thread_ident = thread_ident + * self.additional_info = additional_info + */ + __Pyx_INCREF(__pyx_v_thread); + __Pyx_GIVEREF(__pyx_v_thread); + __Pyx_GOTREF(__pyx_v_self->thread); + __Pyx_DECREF(__pyx_v_self->thread); + __pyx_v_self->thread = __pyx_v_thread; + + /* "_pydevd_sys_monitoring_cython.pyx":265 + * # fmt: on + * self.thread = thread + * self.thread_ident = thread_ident # <<<<<<<<<<<<<< + * self.additional_info = additional_info + * self.trace = trace + */ + __pyx_v_self->thread_ident = __pyx_v_thread_ident; + + /* "_pydevd_sys_monitoring_cython.pyx":266 + * self.thread = thread + * self.thread_ident = thread_ident + * self.additional_info = additional_info # <<<<<<<<<<<<<< + * self.trace = trace + * + */ + __Pyx_INCREF((PyObject *)__pyx_v_additional_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_additional_info); + __Pyx_GOTREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v_self->additional_info); + __pyx_v_self->additional_info = __pyx_v_additional_info; + + /* "_pydevd_sys_monitoring_cython.pyx":267 + * self.thread_ident = thread_ident + * self.additional_info = additional_info + * self.trace = trace # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_trace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->trace); + __Pyx_DECREF(__pyx_v_self->trace); + __pyx_v_self->trace = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":259 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def __init__(self, thread, unsigned long thread_ident, bint trace, PyDBAdditionalThreadInfo additional_info): # <<<<<<<<<<<<<< + * # ELSE + * # def __init__(self, thread: threading.Thread, thread_ident: int, trace: bool, additional_info: PyDBAdditionalThreadInfo): + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.ThreadInfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_2__reduce_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_2__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.additional_info, self.thread, self.thread_ident, self.trace) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_self->thread_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF((PyObject *)__pyx_v_self->additional_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_self->additional_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->additional_info))) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->thread); + __Pyx_GIVEREF(__pyx_v_self->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self->thread)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->trace); + __Pyx_GIVEREF(__pyx_v_self->trace); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->trace)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.additional_info, self.thread, self.thread_ident, self.trace) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v__dict = __pyx_t_2; + __pyx_t_2 = 0; + + /* "(tree fragment)":7 + * state = (self.additional_info, self.thread, self.thread_ident, self.trace) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_3 = (__pyx_v__dict != Py_None); + if (__pyx_t_3) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.additional_info is not None or self.thread is not None or self.trace is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.additional_info, self.thread, self.thread_ident, self.trace) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.additional_info is not None or self.thread is not None or self.trace is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, None), state + */ + /*else*/ { + __pyx_t_4 = (((PyObject *)__pyx_v_self->additional_info) != Py_None); + if (!__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = (__pyx_v_self->thread != Py_None); + if (!__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = (__pyx_v_self->trace != Py_None); + __pyx_t_3 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_3; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.additional_info is not None or self.thread is not None or self.trace is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, None), state + * else: + */ + if (__pyx_v_use_setstate) { + + /* "(tree fragment)":13 + * use_setstate = self.additional_info is not None or self.thread is not None or self.trace is not None + * if use_setstate: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_ThreadInfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_224549882); + __Pyx_GIVEREF(__pyx_int_224549882); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_224549882)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.additional_info is not None or self.thread is not None or self.trace is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, None), state + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_ThreadInfo); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_224549882); + __Pyx_GIVEREF(__pyx_int_224549882); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_224549882)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_5 = 0; + __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.ThreadInfo.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.ThreadInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_4__setstate_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10ThreadInfo_4__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); + + /* "(tree fragment)":17 + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_ThreadInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.ThreadInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":275 + * """ + * + * def __init__(self, dummy_thread): # <<<<<<<<<<<<<< + * self._dummy_thread = dummy_thread + * self._tident = dummy_thread.ident + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_1__init__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_dummy_thread = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_dummy_thread,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 275, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dummy_thread)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 275, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 275, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 275, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_dummy_thread = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 275, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._DeleteDummyThreadOnDel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel___init__(__pyx_self, __pyx_v_self, __pyx_v_dummy_thread); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dummy_thread) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":276 + * + * def __init__(self, dummy_thread): + * self._dummy_thread = dummy_thread # <<<<<<<<<<<<<< + * self._tident = dummy_thread.ident + * # Put the thread on a thread local variable so that when + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_dummy_thread_2, __pyx_v_dummy_thread) < 0) __PYX_ERR(0, 276, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":277 + * def __init__(self, dummy_thread): + * self._dummy_thread = dummy_thread + * self._tident = dummy_thread.ident # <<<<<<<<<<<<<< + * # Put the thread on a thread local variable so that when + * # the related thread finishes this instance is collected. + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dummy_thread, __pyx_n_s_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tident, __pyx_t_1) < 0) __PYX_ERR(0, 277, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":284 + * # If any client code creates a reference to this instance, + * # the related _DummyThread will be kept forever! + * _thread_local_info._track_dummy_thread_ref = self # <<<<<<<<<<<<<< + * + * def __del__(self): + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_track_dummy_thread_ref, __pyx_v_self) < 0) __PYX_ERR(0, 284, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":275 + * """ + * + * def __init__(self, dummy_thread): # <<<<<<<<<<<<<< + * self._dummy_thread = dummy_thread + * self._tident = dummy_thread.ident + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._DeleteDummyThreadOnDel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":286 + * _thread_local_info._track_dummy_thread_ref = self + * + * def __del__(self): # <<<<<<<<<<<<<< + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_3__del__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_3__del__ = {"__del__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_3__del__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_3__del__(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_self = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__del__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 286, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__del__") < 0)) __PYX_ERR(0, 286, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_self = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__del__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 286, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._DeleteDummyThreadOnDel.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_2__del__(__pyx_self, __pyx_v_self); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_2__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__del__", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":287 + * + * def __del__(self): + * with threading._active_limbo_lock: # <<<<<<<<<<<<<< + * if _thread_active.get(self._tident) is self._dummy_thread: + * _thread_active.pop(self._tident, None) + */ + /*with:*/ { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_active_limbo_lock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 287, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /*try:*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":288 + * def __del__(self): + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: # <<<<<<<<<<<<<< + * _thread_active.pop(self._tident, None) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_thread_active); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_tident); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dummy_thread_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 288, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = (__pyx_t_2 == __pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":289 + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: + * _thread_active.pop(self._tident, None) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_active); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_tident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, Py_None}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 289, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":288 + * def __del__(self): + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: # <<<<<<<<<<<<<< + * _thread_active.pop(self._tident, None) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":287 + * + * def __del__(self): + * with threading._active_limbo_lock: # <<<<<<<<<<<<<< + * if _thread_active.get(self._tident) is self._dummy_thread: + * _thread_active.pop(self._tident, None) + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._DeleteDummyThreadOnDel.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 287, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __pyx_t_5 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 287, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 287, __pyx_L9_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_11); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_10 < 0) __PYX_ERR(0, 287, __pyx_L9_except_error) + __pyx_t_12 = (!__pyx_t_10); + if (unlikely(__pyx_t_12)) { + __Pyx_GIVEREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_2); + __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; + __PYX_ERR(0, 287, __pyx_L9_except_error) + } + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L8_exception_handled; + } + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L8_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L12_try_end:; + } + } + /*finally:*/ { + /*normal exit:*/{ + if (__pyx_t_3) { + __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__11, NULL); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + goto __pyx_L6; + } + __pyx_L6:; + } + goto __pyx_L17; + __pyx_L3_error:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L1_error; + __pyx_L17:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":286 + * _thread_local_info._track_dummy_thread_ref = self + * + * def __del__(self): # <<<<<<<<<<<<<< + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._DeleteDummyThreadOnDel.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":294 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _create_thread_info(depth): # <<<<<<<<<<<<<< + * cdef unsigned long thread_ident + * # ELSE + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__create_thread_info(PyObject *__pyx_v_depth) { + unsigned long __pyx_v_thread_ident; + PyObject *__pyx_v_f_bootstrap_frame = NULL; + PyObject *__pyx_v_is_bootstrap_frame_internal = NULL; + PyObject *__pyx_v_t = NULL; + PyObject *__pyx_v_additional_info = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + unsigned long __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *(*__pyx_t_7)(PyObject *); + int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_create_thread_info", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":302 + * # Don't call threading.currentThread because if we're too early in the process + * # we may create a dummy thread. + * thread_ident = _get_ident() # <<<<<<<<<<<<<< + * + * f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_5 = __Pyx_PyInt_As_unsigned_long(__pyx_t_1); if (unlikely((__pyx_t_5 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_thread_ident = __pyx_t_5; + + /* "_pydevd_sys_monitoring_cython.pyx":304 + * thread_ident = _get_ident() + * + * f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) # <<<<<<<<<<<<<< + * if f_bootstrap_frame is None: + * return None # Case for threading when it's still in bootstrap or early in pydevd. + */ + __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_depth, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __pyx_f_29_pydevd_sys_monitoring_cython__get_bootstrap_frame(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 304, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); + index = 0; __pyx_t_1 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_t_7 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 304, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_v_f_bootstrap_frame = __pyx_t_1; + __pyx_t_1 = 0; + __pyx_v_is_bootstrap_frame_internal = __pyx_t_3; + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":305 + * + * f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + * if f_bootstrap_frame is None: # <<<<<<<<<<<<<< + * return None # Case for threading when it's still in bootstrap or early in pydevd. + * + */ + __pyx_t_8 = (__pyx_v_f_bootstrap_frame == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":306 + * f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + * if f_bootstrap_frame is None: + * return None # Case for threading when it's still in bootstrap or early in pydevd. # <<<<<<<<<<<<<< + * + * if is_bootstrap_frame_internal: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":305 + * + * f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + * if f_bootstrap_frame is None: # <<<<<<<<<<<<<< + * return None # Case for threading when it's still in bootstrap or early in pydevd. + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":308 + * return None # Case for threading when it's still in bootstrap or early in pydevd. + * + * if is_bootstrap_frame_internal: # <<<<<<<<<<<<<< + * t = None + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_is_bootstrap_frame_internal); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 308, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":309 + * + * if is_bootstrap_frame_internal: + * t = None # <<<<<<<<<<<<<< + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + */ + __Pyx_INCREF(Py_None); + __pyx_v_t = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":310 + * if is_bootstrap_frame_internal: + * t = None + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("self") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 310, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_bootstrap_inner_2, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 310, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_is_alive, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 310, __pyx_L1_error) + __pyx_t_8 = __pyx_t_9; + __pyx_L8_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_8; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":312 + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("self") # <<<<<<<<<<<<<< + * if not isinstance(t, threading.Thread): + * t = None + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_s_self}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":313 + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("self") + * if not isinstance(t, threading.Thread): # <<<<<<<<<<<<<< + * t = None + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Thread); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = PyObject_IsInstance(__pyx_v_t, __pyx_t_1); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = (!__pyx_t_9); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":314 + * t = f_bootstrap_frame.f_locals.get("self") + * if not isinstance(t, threading.Thread): + * t = None # <<<<<<<<<<<<<< + * + * elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_t, Py_None); + + /* "_pydevd_sys_monitoring_cython.pyx":313 + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("self") + * if not isinstance(t, threading.Thread): # <<<<<<<<<<<<<< + * t = None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":310 + * if is_bootstrap_frame_internal: + * t = None + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("self") + */ + goto __pyx_L7; + } + + /* "_pydevd_sys_monitoring_cython.pyx":316 + * t = None + * + * elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("t") + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_exec, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 316, __pyx_L1_error) + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L12_bool_binop_done; + } + __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_call, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 316, __pyx_L1_error) + __pyx_t_8 = __pyx_t_9; + __pyx_L12_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_8; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":318 + * elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("t") # <<<<<<<<<<<<<< + * if not isinstance(t, threading.Thread): + * t = None + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_bootstrap_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_n_s_t}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 318, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":319 + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("t") + * if not isinstance(t, threading.Thread): # <<<<<<<<<<<<<< + * t = None + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Thread); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = PyObject_IsInstance(__pyx_v_t, __pyx_t_2); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_8 = (!__pyx_t_9); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":320 + * t = f_bootstrap_frame.f_locals.get("t") + * if not isinstance(t, threading.Thread): + * t = None # <<<<<<<<<<<<<< + * + * else: + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_t, Py_None); + + /* "_pydevd_sys_monitoring_cython.pyx":319 + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("t") + * if not isinstance(t, threading.Thread): # <<<<<<<<<<<<<< + * t = None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":316 + * t = None + * + * elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): # <<<<<<<<<<<<<< + * # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + * t = f_bootstrap_frame.f_locals.get("t") + */ + } + __pyx_L7:; + + /* "_pydevd_sys_monitoring_cython.pyx":308 + * return None # Case for threading when it's still in bootstrap or early in pydevd. + * + * if is_bootstrap_frame_internal: # <<<<<<<<<<<<<< + * t = None + * if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + */ + goto __pyx_L6; + } + + /* "_pydevd_sys_monitoring_cython.pyx":326 + * # In practice this means it's some unmanaged thread, so, creating + * # a dummy thread is ok in this use-case. + * t = threading.current_thread() # <<<<<<<<<<<<<< + * + * if t is None: + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_current_thread); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 326, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 326, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_t = __pyx_t_2; + __pyx_t_2 = 0; + } + __pyx_L6:; + + /* "_pydevd_sys_monitoring_cython.pyx":328 + * t = threading.current_thread() + * + * if t is None: # <<<<<<<<<<<<<< + * t = _thread_active.get(thread_ident) + * + */ + __pyx_t_8 = (__pyx_v_t == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":329 + * + * if t is None: + * t = _thread_active.get(thread_ident) # <<<<<<<<<<<<<< + * + * if isinstance(t, threading._DummyThread): + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_thread_active); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_thread_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF_SET(__pyx_v_t, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":328 + * t = threading.current_thread() + * + * if t is None: # <<<<<<<<<<<<<< + * t = _thread_active.get(thread_ident) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":331 + * t = _thread_active.get(thread_ident) + * + * if isinstance(t, threading._DummyThread): # <<<<<<<<<<<<<< + * _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DummyThread); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_8 = PyObject_IsInstance(__pyx_v_t, __pyx_t_3); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 331, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":332 + * + * if isinstance(t, threading._DummyThread): + * _thread_local_info._ref = _DeleteDummyThreadOnDel(t) # <<<<<<<<<<<<<< + * + * if t is None: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DeleteDummyThreadOnDel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_t}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_ref, __pyx_t_3) < 0) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":331 + * t = _thread_active.get(thread_ident) + * + * if isinstance(t, threading._DummyThread): # <<<<<<<<<<<<<< + * _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":334 + * _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + * + * if t is None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_8 = (__pyx_v_t == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":335 + * + * if t is None: + * return None # <<<<<<<<<<<<<< + * + * if getattr(t, "is_pydev_daemon_thread", False): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":334 + * _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + * + * if t is None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":337 + * return None + * + * if getattr(t, "is_pydev_daemon_thread", False): # <<<<<<<<<<<<<< + * return ThreadInfo(t, thread_ident, False, None) + * else: + */ + __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_t, __pyx_n_s_is_pydev_daemon_thread, Py_False); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 337, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":338 + * + * if getattr(t, "is_pydev_daemon_thread", False): + * return ThreadInfo(t, thread_ident, False, None) # <<<<<<<<<<<<<< + * else: + * try: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_unsigned_long(__pyx_v_thread_ident); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_t); + __Pyx_GIVEREF(__pyx_v_t); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_t)) __PYX_ERR(0, 338, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error); + __Pyx_INCREF(Py_False); + __Pyx_GIVEREF(Py_False); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, Py_False)) __PYX_ERR(0, 338, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, Py_None)) __PYX_ERR(0, 338, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":337 + * return None + * + * if getattr(t, "is_pydev_daemon_thread", False): # <<<<<<<<<<<<<< + * return ThreadInfo(t, thread_ident, False, None) + * else: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":340 + * return ThreadInfo(t, thread_ident, False, None) + * else: + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + /*else*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":341 + * else: + * try: + * additional_info = t.additional_info # <<<<<<<<<<<<<< + * if additional_info is None: + * raise AttributeError() + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_additional_info = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":342 + * try: + * additional_info = t.additional_info + * if additional_info is None: # <<<<<<<<<<<<<< + * raise AttributeError() + * except: + */ + __pyx_t_8 = (__pyx_v_additional_info == Py_None); + if (unlikely(__pyx_t_8)) { + + /* "_pydevd_sys_monitoring_cython.pyx":343 + * additional_info = t.additional_info + * if additional_info is None: + * raise AttributeError() # <<<<<<<<<<<<<< + * except: + * additional_info = set_additional_thread_info(t) + */ + __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_AttributeError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 343, __pyx_L19_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 343, __pyx_L19_error) + + /* "_pydevd_sys_monitoring_cython.pyx":342 + * try: + * additional_info = t.additional_info + * if additional_info is None: # <<<<<<<<<<<<<< + * raise AttributeError() + * except: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":340 + * return ThreadInfo(t, thread_ident, False, None) + * else: + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + } + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + goto __pyx_L24_try_end; + __pyx_L19_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":344 + * if additional_info is None: + * raise AttributeError() + * except: # <<<<<<<<<<<<<< + * additional_info = set_additional_thread_info(t) + * return ThreadInfo(t, thread_ident, True, additional_info) + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._create_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 344, __pyx_L21_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + + /* "_pydevd_sys_monitoring_cython.pyx":345 + * raise AttributeError() + * except: + * additional_info = set_additional_thread_info(t) # <<<<<<<<<<<<<< + * return ThreadInfo(t, thread_ident, True, additional_info) + * + */ + __pyx_t_6 = __pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(__pyx_v_t, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 345, __pyx_L21_except_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_XDECREF_SET(__pyx_v_additional_info, __pyx_t_6); + __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L20_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":340 + * return ThreadInfo(t, thread_ident, False, None) + * else: + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + __pyx_L21_except_error:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + goto __pyx_L1_error; + __pyx_L20_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); + __pyx_L24_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":346 + * except: + * additional_info = set_additional_thread_info(t) + * return ThreadInfo(t, thread_ident, True, additional_info) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_thread_ident); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_t); + __Pyx_GIVEREF(__pyx_v_t); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_t)) __PYX_ERR(0, 346, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error); + __Pyx_INCREF(Py_True); + __Pyx_GIVEREF(Py_True); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, Py_True)) __PYX_ERR(0, 346, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_additional_info); + __Pyx_GIVEREF(__pyx_v_additional_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_additional_info)) __PYX_ERR(0, 346, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":294 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _create_thread_info(depth): # <<<<<<<<<<<<<< + * cdef unsigned long thread_ident + * # ELSE + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._create_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f_bootstrap_frame); + __Pyx_XDECREF(__pyx_v_is_bootstrap_frame_internal); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_XDECREF(__pyx_v_additional_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":375 + * # ENDIF + * # fmt: on + * def __init__(self): # <<<<<<<<<<<<<< + * self.co_filename: str = "" + * self.canonical_normalized_filename: str = "" + */ + +/* Python wrapper */ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo___init__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":376 + * # fmt: on + * def __init__(self): + * self.co_filename: str = "" # <<<<<<<<<<<<<< + * self.canonical_normalized_filename: str = "" + * self.abs_path_filename: str = "" + */ + __Pyx_INCREF(__pyx_kp_s__14); + __Pyx_GIVEREF(__pyx_kp_s__14); + __Pyx_GOTREF(__pyx_v_self->co_filename); + __Pyx_DECREF(__pyx_v_self->co_filename); + __pyx_v_self->co_filename = __pyx_kp_s__14; + + /* "_pydevd_sys_monitoring_cython.pyx":377 + * def __init__(self): + * self.co_filename: str = "" + * self.canonical_normalized_filename: str = "" # <<<<<<<<<<<<<< + * self.abs_path_filename: str = "" + * + */ + __Pyx_INCREF(__pyx_kp_s__14); + __Pyx_GIVEREF(__pyx_kp_s__14); + __Pyx_GOTREF(__pyx_v_self->canonical_normalized_filename); + __Pyx_DECREF(__pyx_v_self->canonical_normalized_filename); + __pyx_v_self->canonical_normalized_filename = __pyx_kp_s__14; + + /* "_pydevd_sys_monitoring_cython.pyx":378 + * self.co_filename: str = "" + * self.canonical_normalized_filename: str = "" + * self.abs_path_filename: str = "" # <<<<<<<<<<<<<< + * + * # These is never seen and we never stop, even if it's a callback coming + */ + __Pyx_INCREF(__pyx_kp_s__14); + __Pyx_GIVEREF(__pyx_kp_s__14); + __Pyx_GOTREF(__pyx_v_self->abs_path_filename); + __Pyx_DECREF(__pyx_v_self->abs_path_filename); + __pyx_v_self->abs_path_filename = __pyx_kp_s__14; + + /* "_pydevd_sys_monitoring_cython.pyx":382 + * # These is never seen and we never stop, even if it's a callback coming + * # from user code (these are completely invisible to the debugging tracing). + * self.always_skip_code: bool = False # <<<<<<<<<<<<<< + * + * self.breakpoint_found: bool = False + */ + __pyx_v_self->always_skip_code = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":384 + * self.always_skip_code: bool = False + * + * self.breakpoint_found: bool = False # <<<<<<<<<<<<<< + * self.function_breakpoint_found: bool = False + * + */ + __pyx_v_self->breakpoint_found = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":385 + * + * self.breakpoint_found: bool = False + * self.function_breakpoint_found: bool = False # <<<<<<<<<<<<<< + * + * # A plugin can choose whether to stop on function calls or line events. + */ + __pyx_v_self->function_breakpoint_found = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":388 + * + * # A plugin can choose whether to stop on function calls or line events. + * self.plugin_line_breakpoint_found: bool = False # <<<<<<<<<<<<<< + * self.plugin_call_breakpoint_found: bool = False + * + */ + __pyx_v_self->plugin_line_breakpoint_found = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":389 + * # A plugin can choose whether to stop on function calls or line events. + * self.plugin_line_breakpoint_found: bool = False + * self.plugin_call_breakpoint_found: bool = False # <<<<<<<<<<<<<< + * + * self.plugin_line_stepping: bool = False + */ + __pyx_v_self->plugin_call_breakpoint_found = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":391 + * self.plugin_call_breakpoint_found: bool = False + * + * self.plugin_line_stepping: bool = False # <<<<<<<<<<<<<< + * self.plugin_call_stepping: bool = False + * self.plugin_return_stepping: bool = False + */ + __pyx_v_self->plugin_line_stepping = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":392 + * + * self.plugin_line_stepping: bool = False + * self.plugin_call_stepping: bool = False # <<<<<<<<<<<<<< + * self.plugin_return_stepping: bool = False + * + */ + __pyx_v_self->plugin_call_stepping = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":393 + * self.plugin_line_stepping: bool = False + * self.plugin_call_stepping: bool = False + * self.plugin_return_stepping: bool = False # <<<<<<<<<<<<<< + * + * # When pydb_mtime != PyDb.mtime the validity of breakpoints have + */ + __pyx_v_self->plugin_return_stepping = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":398 + * # to be re-evaluated (if invalid a new FuncCodeInfo must be created and + * # tracing can't be disabled for the related frames). + * self.pydb_mtime: int = -1 # <<<<<<<<<<<<<< + * + * self.bp_line_to_breakpoint: Dict[int, Any] = {} + */ + __pyx_v_self->pydb_mtime = -1; + + /* "_pydevd_sys_monitoring_cython.pyx":400 + * self.pydb_mtime: int = -1 + * + * self.bp_line_to_breakpoint: Dict[int, Any] = {} # <<<<<<<<<<<<<< + * self.function_breakpoint = None + * + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v_self->bp_line_to_breakpoint); + __Pyx_DECREF(__pyx_v_self->bp_line_to_breakpoint); + __pyx_v_self->bp_line_to_breakpoint = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":401 + * + * self.bp_line_to_breakpoint: Dict[int, Any] = {} + * self.function_breakpoint = None # <<<<<<<<<<<<<< + * + * # This means some file is globally filtered out during debugging. Note + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->function_breakpoint); + __Pyx_DECREF(__pyx_v_self->function_breakpoint); + __pyx_v_self->function_breakpoint = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":406 + * # that we may still need to pause in it (in a step return to user code, + * # we may need to track this one). + * self.always_filtered_out: bool = False # <<<<<<<<<<<<<< + * + * # This should be used to filter code in a CMD_STEP_INTO_MY_CODE + */ + __pyx_v_self->always_filtered_out = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":410 + * # This should be used to filter code in a CMD_STEP_INTO_MY_CODE + * # (and other XXX_MY_CODE variants). + * self.filtered_out_force_checked: bool = False # <<<<<<<<<<<<<< + * + * self.try_except_container_obj: Optional[_TryExceptContainerObj] = None + */ + __pyx_v_self->filtered_out_force_checked = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":412 + * self.filtered_out_force_checked: bool = False + * + * self.try_except_container_obj: Optional[_TryExceptContainerObj] = None # <<<<<<<<<<<<<< + * self.code_obj: CodeType = None + * self.co_name: str = "" + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->try_except_container_obj); + __Pyx_DECREF(__pyx_v_self->try_except_container_obj); + __pyx_v_self->try_except_container_obj = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":413 + * + * self.try_except_container_obj: Optional[_TryExceptContainerObj] = None + * self.code_obj: CodeType = None # <<<<<<<<<<<<<< + * self.co_name: str = "" + * + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_self->code_obj); + __Pyx_DECREF(__pyx_v_self->code_obj); + __pyx_v_self->code_obj = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":414 + * self.try_except_container_obj: Optional[_TryExceptContainerObj] = None + * self.code_obj: CodeType = None + * self.co_name: str = "" # <<<<<<<<<<<<<< + * + * def get_line_of_offset(self, offset): + */ + __Pyx_INCREF(__pyx_kp_s__14); + __Pyx_GIVEREF(__pyx_kp_s__14); + __Pyx_GOTREF(__pyx_v_self->co_name); + __Pyx_DECREF(__pyx_v_self->co_name); + __pyx_v_self->co_name = __pyx_kp_s__14; + + /* "_pydevd_sys_monitoring_cython.pyx":375 + * # ENDIF + * # fmt: on + * def __init__(self): # <<<<<<<<<<<<<< + * self.co_filename: str = "" + * self.canonical_normalized_filename: str = "" + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":416 + * self.co_name: str = "" + * + * def get_line_of_offset(self, offset): # <<<<<<<<<<<<<< + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset = {"get_line_of_offset", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_offset = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_line_of_offset (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 416, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get_line_of_offset") < 0)) __PYX_ERR(0, 416, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_offset = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("get_line_of_offset", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 416, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.get_line_of_offset", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_2get_line_of_offset(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_v_self), __pyx_v_offset); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_2get_line_of_offset(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v_offset) { + PyObject *__pyx_v_start = NULL; + PyObject *__pyx_v_end = NULL; + PyObject *__pyx_v_line = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *(*__pyx_t_10)(PyObject *); + int __pyx_t_11; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_line_of_offset", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":417 + * + * def get_line_of_offset(self, offset): + * for start, end, line in self.code_obj.co_lines(): # <<<<<<<<<<<<<< + * if offset >= start and offset <= end: + * return line + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->code_obj, __pyx_n_s_co_lines); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 417, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 417, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 417, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 417, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 417, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_6(__pyx_t_2); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 417, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 417, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_7 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); + index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(0, 417, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L6_unpacking_done; + __pyx_L5_unpacking_failed:; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 417, __pyx_L1_error) + __pyx_L6_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_7); + __pyx_t_7 = 0; + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_8); + __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":418 + * def get_line_of_offset(self, offset): + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: # <<<<<<<<<<<<<< + * return line + * return -1 + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_v_start, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_11 = __pyx_t_12; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_v_end, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_11 = __pyx_t_12; + __pyx_L8_bool_binop_done:; + if (__pyx_t_11) { + + /* "_pydevd_sys_monitoring_cython.pyx":419 + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: + * return line # <<<<<<<<<<<<<< + * return -1 + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_line); + __pyx_r = __pyx_v_line; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":418 + * def get_line_of_offset(self, offset): + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: # <<<<<<<<<<<<<< + * return line + * return -1 + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":417 + * + * def get_line_of_offset(self, offset): + * for start, end, line in self.code_obj.co_lines(): # <<<<<<<<<<<<<< + * if offset >= start and offset <= end: + * return line + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":420 + * if offset >= start and offset <= end: + * return line + * return -1 # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_int_neg_1); + __pyx_r = __pyx_int_neg_1; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":416 + * self.co_name: str = "" + * + * def get_line_of_offset(self, offset): # <<<<<<<<<<<<<< + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.get_line_of_offset", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_start); + __Pyx_XDECREF(__pyx_v_end); + __Pyx_XDECREF(__pyx_v_line); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_4__reduce_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_4__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + int __pyx_t_13; + int __pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.abs_path_filename, self.always_filtered_out, self.always_skip_code, self.bp_line_to_breakpoint, self.breakpoint_found, self.canonical_normalized_filename, self.co_filename, self.co_name, self.code_obj, self.filtered_out_force_checked, self.function_breakpoint, self.function_breakpoint_found, self.plugin_call_breakpoint_found, self.plugin_call_stepping, self.plugin_line_breakpoint_found, self.plugin_line_stepping, self.plugin_return_stepping, self.pydb_mtime, self.try_except_container_obj) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->always_filtered_out); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->always_skip_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->breakpoint_found); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_self->filtered_out_force_checked); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_self->function_breakpoint_found); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_self->plugin_call_breakpoint_found); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->plugin_call_stepping); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_v_self->plugin_line_breakpoint_found); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_v_self->plugin_line_stepping); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_self->plugin_return_stepping); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_self->pydb_mtime); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = PyTuple_New(19); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v_self->abs_path_filename); + __Pyx_GIVEREF(__pyx_v_self->abs_path_filename); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_self->abs_path_filename)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->bp_line_to_breakpoint); + __Pyx_GIVEREF(__pyx_v_self->bp_line_to_breakpoint); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_v_self->bp_line_to_breakpoint)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->canonical_normalized_filename); + __Pyx_GIVEREF(__pyx_v_self->canonical_normalized_filename); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 5, __pyx_v_self->canonical_normalized_filename)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->co_filename); + __Pyx_GIVEREF(__pyx_v_self->co_filename); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 6, __pyx_v_self->co_filename)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->co_name); + __Pyx_GIVEREF(__pyx_v_self->co_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 7, __pyx_v_self->co_name)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->code_obj); + __Pyx_GIVEREF(__pyx_v_self->code_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 8, __pyx_v_self->code_obj)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 9, __pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->function_breakpoint); + __Pyx_GIVEREF(__pyx_v_self->function_breakpoint); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 10, __pyx_v_self->function_breakpoint)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 11, __pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 12, __pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_7); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 13, __pyx_t_7)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 14, __pyx_t_8)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_9); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 15, __pyx_t_9)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 16, __pyx_t_10)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 17, __pyx_t_11)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->try_except_container_obj); + __Pyx_GIVEREF(__pyx_v_self->try_except_container_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 18, __pyx_v_self->try_except_container_obj)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_8 = 0; + __pyx_t_9 = 0; + __pyx_t_10 = 0; + __pyx_t_11 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_12); + __pyx_t_12 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.abs_path_filename, self.always_filtered_out, self.always_skip_code, self.bp_line_to_breakpoint, self.breakpoint_found, self.canonical_normalized_filename, self.co_filename, self.co_name, self.code_obj, self.filtered_out_force_checked, self.function_breakpoint, self.function_breakpoint_found, self.plugin_call_breakpoint_found, self.plugin_call_stepping, self.plugin_line_breakpoint_found, self.plugin_line_stepping, self.plugin_return_stepping, self.pydb_mtime, self.try_except_container_obj) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_12 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __pyx_v__dict = __pyx_t_12; + __pyx_t_12 = 0; + + /* "(tree fragment)":7 + * state = (self.abs_path_filename, self.always_filtered_out, self.always_skip_code, self.bp_line_to_breakpoint, self.breakpoint_found, self.canonical_normalized_filename, self.co_filename, self.co_name, self.code_obj, self.filtered_out_force_checked, self.function_breakpoint, self.function_breakpoint_found, self.plugin_call_breakpoint_found, self.plugin_call_stepping, self.plugin_line_breakpoint_found, self.plugin_line_stepping, self.plugin_return_stepping, self.pydb_mtime, self.try_except_container_obj) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_13 = (__pyx_v__dict != Py_None); + if (__pyx_t_13) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); + __pyx_t_11 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_11)); + __pyx_t_11 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.abs_path_filename is not None or self.bp_line_to_breakpoint is not None or self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.code_obj is not None or self.function_breakpoint is not None or self.try_except_container_obj is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.abs_path_filename, self.always_filtered_out, self.always_skip_code, self.bp_line_to_breakpoint, self.breakpoint_found, self.canonical_normalized_filename, self.co_filename, self.co_name, self.code_obj, self.filtered_out_force_checked, self.function_breakpoint, self.function_breakpoint_found, self.plugin_call_breakpoint_found, self.plugin_call_stepping, self.plugin_line_breakpoint_found, self.plugin_line_stepping, self.plugin_return_stepping, self.pydb_mtime, self.try_except_container_obj) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.abs_path_filename is not None or self.bp_line_to_breakpoint is not None or self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.code_obj is not None or self.function_breakpoint is not None or self.try_except_container_obj is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, None), state + */ + /*else*/ { + __pyx_t_14 = (__pyx_v_self->abs_path_filename != ((PyObject*)Py_None)); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->bp_line_to_breakpoint != ((PyObject*)Py_None)); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->canonical_normalized_filename != ((PyObject*)Py_None)); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->co_filename != ((PyObject*)Py_None)); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->co_name != ((PyObject*)Py_None)); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->code_obj != Py_None); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->function_breakpoint != Py_None); + if (!__pyx_t_14) { + } else { + __pyx_t_13 = __pyx_t_14; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_self->try_except_container_obj != Py_None); + __pyx_t_13 = __pyx_t_14; + __pyx_L4_bool_binop_done:; + __pyx_v_use_setstate = __pyx_t_13; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.abs_path_filename is not None or self.bp_line_to_breakpoint is not None or self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.code_obj is not None or self.function_breakpoint is not None or self.try_except_container_obj is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, None), state + * else: + */ + if (__pyx_v_use_setstate) { + + /* "(tree fragment)":13 + * use_setstate = self.abs_path_filename is not None or self.bp_line_to_breakpoint is not None or self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.code_obj is not None or self.function_breakpoint is not None or self.try_except_container_obj is not None + * if use_setstate: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_pyx_unpickle_FuncCodeInfo); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_66323410); + __Pyx_GIVEREF(__pyx_int_66323410); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_int_66323410)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_GIVEREF(__pyx_t_11); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_12)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_11 = 0; + __pyx_t_12 = 0; + __pyx_r = __pyx_t_10; + __pyx_t_10 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.abs_path_filename is not None or self.bp_line_to_breakpoint is not None or self.canonical_normalized_filename is not None or self.co_filename is not None or self.co_name is not None or self.code_obj is not None or self.function_breakpoint is not None or self.try_except_container_obj is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, None), state + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pyx_unpickle_FuncCodeInfo); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_12); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_66323410); + __Pyx_GIVEREF(__pyx_int_66323410); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_int_66323410)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_12); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_10 = 0; + __pyx_t_12 = 0; + __pyx_r = __pyx_t_11; + __pyx_t_11 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_6__setstate_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_6__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); + + /* "(tree fragment)":17 + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_FuncCodeInfo__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.FuncCodeInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":425 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_thread_info(bint create, int depth): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_thread_info(create: bool, depth: int) -> Optional[ThreadInfo]: + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(int __pyx_v_create, int __pyx_v_depth) { + PyObject *__pyx_v_thread_info = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_thread_info", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":435 + * May return None if the thread is still not active. + * """ + * try: # <<<<<<<<<<<<<< + * # Note: changing to a `dict[thread.ident] = thread_info` had almost no + * # effect in the performance. + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":438 + * # Note: changing to a `dict[thread.ident] = thread_info` had almost no + * # effect in the performance. + * return _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * if not create: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 438, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 438, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L7_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":435 + * May return None if the thread is still not active. + * """ + * try: # <<<<<<<<<<<<<< + * # Note: changing to a `dict[thread.ident] = thread_info` had almost no + * # effect in the performance. + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":439 + * # effect in the performance. + * return _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * if not create: + * return None + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 439, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":440 + * return _thread_local_info.thread_info + * except: + * if not create: # <<<<<<<<<<<<<< + * return None + * thread_info = _create_thread_info(depth + 1) + */ + __pyx_t_7 = (!__pyx_v_create); + if (__pyx_t_7) { + + /* "_pydevd_sys_monitoring_cython.pyx":441 + * except: + * if not create: + * return None # <<<<<<<<<<<<<< + * thread_info = _create_thread_info(depth + 1) + * if thread_info is None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":440 + * return _thread_local_info.thread_info + * except: + * if not create: # <<<<<<<<<<<<<< + * return None + * thread_info = _create_thread_info(depth + 1) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":442 + * if not create: + * return None + * thread_info = _create_thread_info(depth + 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return None + */ + __pyx_t_8 = __Pyx_PyInt_From_long((__pyx_v_depth + 1)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __pyx_f_29_pydevd_sys_monitoring_cython__create_thread_info(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_thread_info = __pyx_t_9; + __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":443 + * return None + * thread_info = _create_thread_info(depth + 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_7 = (__pyx_v_thread_info == Py_None); + if (__pyx_t_7) { + + /* "_pydevd_sys_monitoring_cython.pyx":444 + * thread_info = _create_thread_info(depth + 1) + * if thread_info is None: + * return None # <<<<<<<<<<<<<< + * + * _thread_local_info.thread_info = thread_info + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":443 + * return None + * thread_info = _create_thread_info(depth + 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":446 + * return None + * + * _thread_local_info.thread_info = thread_info # <<<<<<<<<<<<<< + * return _thread_local_info.thread_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 446, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_9, __pyx_n_s_thread_info, __pyx_v_thread_info) < 0) __PYX_ERR(0, 446, __pyx_L5_except_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":447 + * + * _thread_local_info.thread_info = thread_info + * return _thread_local_info.thread_info # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":435 + * May return None if the thread is still not active. + * """ + * try: # <<<<<<<<<<<<<< + * # Note: changing to a `dict[thread.ident] = thread_info` had almost no + * # effect in the performance. + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":425 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_thread_info(bint create, int depth): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_thread_info(create: bool, depth: int) -> Optional[ThreadInfo]: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_thread_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_thread_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":456 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_code_line_info(code_obj, _cache={}): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_code_line_info(code_obj, _cache={}): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__get_code_line_info(PyObject *__pyx_v_code_obj, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__get_code_line_info *__pyx_optional_args) { + PyObject *__pyx_v__cache = __pyx_k__15; + PyObject *__pyx_v_line_to_offset = NULL; + PyObject *__pyx_v_first_line = NULL; + PyObject *__pyx_v_last_line = NULL; + PyObject *__pyx_v_offset = NULL; + PyObject *__pyx_v_line = NULL; + PyObject *__pyx_v_ret = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_10; + Py_ssize_t __pyx_t_11; + PyObject *(*__pyx_t_12)(PyObject *); + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + PyObject *(*__pyx_t_15)(PyObject *); + int __pyx_t_16; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_code_line_info", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v__cache = __pyx_optional_args->_cache; + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":461 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _cache[code_obj] + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":462 + * # fmt: on + * try: + * return _cache[code_obj] # <<<<<<<<<<<<<< + * except: + * line_to_offset = {} + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v__cache, __pyx_v_code_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 462, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L7_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":461 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _cache[code_obj] + * except: + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":463 + * try: + * return _cache[code_obj] + * except: # <<<<<<<<<<<<<< + * line_to_offset = {} + * first_line = None + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_code_line_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 463, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":464 + * return _cache[code_obj] + * except: + * line_to_offset = {} # <<<<<<<<<<<<<< + * first_line = None + * last_line = None + */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 464, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_line_to_offset = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":465 + * except: + * line_to_offset = {} + * first_line = None # <<<<<<<<<<<<<< + * last_line = None + * + */ + __Pyx_INCREF(Py_None); + __pyx_v_first_line = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":466 + * line_to_offset = {} + * first_line = None + * last_line = None # <<<<<<<<<<<<<< + * + * for offset, line in dis.findlinestarts(code_obj): + */ + __Pyx_INCREF(Py_None); + __pyx_v_last_line = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":468 + * last_line = None + * + * for offset, line in dis.findlinestarts(code_obj): # <<<<<<<<<<<<<< + * line_to_offset[line] = offset + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_dis); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_findlinestarts); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_9))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_9, function); + __pyx_t_10 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_code_obj}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_7)) || PyTuple_CheckExact(__pyx_t_7)) { + __pyx_t_9 = __pyx_t_7; __Pyx_INCREF(__pyx_t_9); + __pyx_t_11 = 0; + __pyx_t_12 = NULL; + } else { + __pyx_t_11 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_12 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 468, __pyx_L5_except_error) + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + for (;;) { + if (likely(!__pyx_t_12)) { + if (likely(PyList_CheckExact(__pyx_t_9))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 468, __pyx_L5_except_error) + #endif + if (__pyx_t_11 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely((0 < 0))) __PYX_ERR(0, 468, __pyx_L5_except_error) + #else + __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_9); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 468, __pyx_L5_except_error) + #endif + if (__pyx_t_11 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_11); __Pyx_INCREF(__pyx_t_7); __pyx_t_11++; if (unlikely((0 < 0))) __PYX_ERR(0, 468, __pyx_L5_except_error) + #else + __pyx_t_7 = __Pyx_PySequence_ITEM(__pyx_t_9, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + } + } else { + __pyx_t_7 = __pyx_t_12(__pyx_t_9); + if (unlikely(!__pyx_t_7)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 468, __pyx_L5_except_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_7); + } + if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) { + PyObject* sequence = __pyx_t_7; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 468, __pyx_L5_except_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_8 = PyList_GET_ITEM(sequence, 0); + __pyx_t_13 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_13); + #else + __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_13); + #endif + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_14 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 468, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_15 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_14); + index = 0; __pyx_t_8 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_8)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_8); + index = 1; __pyx_t_13 = __pyx_t_15(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_13); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_14), 2) < 0) __PYX_ERR(0, 468, __pyx_L5_except_error) + __pyx_t_15 = NULL; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + goto __pyx_L14_unpacking_done; + __pyx_L13_unpacking_failed:; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_15 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 468, __pyx_L5_except_error) + __pyx_L14_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_offset, __pyx_t_8); + __pyx_t_8 = 0; + __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_13); + __pyx_t_13 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":469 + * + * for offset, line in dis.findlinestarts(code_obj): + * line_to_offset[line] = offset # <<<<<<<<<<<<<< + * + * if line_to_offset: + */ + if (unlikely((PyDict_SetItem(__pyx_v_line_to_offset, __pyx_v_line, __pyx_v_offset) < 0))) __PYX_ERR(0, 469, __pyx_L5_except_error) + + /* "_pydevd_sys_monitoring_cython.pyx":468 + * last_line = None + * + * for offset, line in dis.findlinestarts(code_obj): # <<<<<<<<<<<<<< + * line_to_offset[line] = offset + * + */ + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":471 + * line_to_offset[line] = offset + * + * if line_to_offset: # <<<<<<<<<<<<<< + * first_line = min(line_to_offset) + * last_line = max(line_to_offset) + */ + __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_v_line_to_offset); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 471, __pyx_L5_except_error) + if (__pyx_t_16) { + + /* "_pydevd_sys_monitoring_cython.pyx":472 + * + * if line_to_offset: + * first_line = min(line_to_offset) # <<<<<<<<<<<<<< + * last_line = max(line_to_offset) + * ret = _CodeLineInfo(line_to_offset, first_line, last_line) + */ + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_v_line_to_offset); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 472, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF_SET(__pyx_v_first_line, __pyx_t_9); + __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":473 + * if line_to_offset: + * first_line = min(line_to_offset) + * last_line = max(line_to_offset) # <<<<<<<<<<<<<< + * ret = _CodeLineInfo(line_to_offset, first_line, last_line) + * _cache[code_obj] = ret + */ + __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_v_line_to_offset); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 473, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF_SET(__pyx_v_last_line, __pyx_t_9); + __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":471 + * line_to_offset[line] = offset + * + * if line_to_offset: # <<<<<<<<<<<<<< + * first_line = min(line_to_offset) + * last_line = max(line_to_offset) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":474 + * first_line = min(line_to_offset) + * last_line = max(line_to_offset) + * ret = _CodeLineInfo(line_to_offset, first_line, last_line) # <<<<<<<<<<<<<< + * _cache[code_obj] = ret + * return ret + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CodeLineInfo); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 474, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_13 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_10 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_v_line_to_offset, __pyx_v_first_line, __pyx_v_last_line}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_10, 3+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 474, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_v_ret = __pyx_t_9; + __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":475 + * last_line = max(line_to_offset) + * ret = _CodeLineInfo(line_to_offset, first_line, last_line) + * _cache[code_obj] = ret # <<<<<<<<<<<<<< + * return ret + * + */ + if (unlikely((PyObject_SetItem(__pyx_v__cache, __pyx_v_code_obj, __pyx_v_ret) < 0))) __PYX_ERR(0, 475, __pyx_L5_except_error) + + /* "_pydevd_sys_monitoring_cython.pyx":476 + * ret = _CodeLineInfo(line_to_offset, first_line, last_line) + * _cache[code_obj] = ret + * return ret # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_ret); + __pyx_r = __pyx_v_ret; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":461 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * return _cache[code_obj] + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":456 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_code_line_info(code_obj, _cache={}): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_code_line_info(code_obj, _cache={}): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_code_line_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_line_to_offset); + __Pyx_XDECREF(__pyx_v_first_line); + __Pyx_XDECREF(__pyx_v_last_line); + __Pyx_XDECREF(__pyx_v_offset); + __Pyx_XDECREF(__pyx_v_line); + __Pyx_XDECREF(__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":484 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_3_get_func_code_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(PyObject *__pyx_v_code_obj, PyObject *__pyx_v_frame_or_depth, CYTHON_UNUSED int __pyx_skip_dispatch) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_py_db = NULL; + PyObject *__pyx_v_cache_file_type = 0; + PyObject *__pyx_v_cache_file_type_key = 0; + PyCodeObject *__pyx_v_code; + PyObject *__pyx_v_co_filename = 0; + PyObject *__pyx_v_co_name = 0; + PyObject *__pyx_v_code_line_info = NULL; + PyObject *__pyx_v_line_to_offset = NULL; + PyObject *__pyx_v_abs_path_real_path_and_base = NULL; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_v_file_type = NULL; + PyObject *__pyx_v_breakpoints = 0; + PyObject *__pyx_v_function_breakpoint = 0; + PyObject *__pyx_v_bp_line_to_breakpoint = NULL; + PyObject *__pyx_v_breakpoint_line = NULL; + PyObject *__pyx_v_bp = NULL; + PyObject *__pyx_v_plugin_manager = NULL; + PyObject *__pyx_v_is_tracked_frame = NULL; + PyObject *__pyx_v_required_events_breakpoint = NULL; + PyObject *__pyx_v_required_events_stepping = NULL; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_13; + int __pyx_t_14; + Py_ssize_t __pyx_t_15; + Py_ssize_t __pyx_t_16; + int __pyx_t_17; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_func_code_info", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":498 + * Note that this can be called by any thread. + * """ + * py_db = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None: + * return None + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_py_db = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":499 + * """ + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_3 = (__pyx_v_py_db == Py_None); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":500 + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: + * return None # <<<<<<<<<<<<<< + * + * func_code_info = _code_to_func_code_info_cache.get(code_obj) + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __pyx_r = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)Py_None); __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":499 + * """ + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":502 + * return None + * + * func_code_info = _code_to_func_code_info_cache.get(code_obj) # <<<<<<<<<<<<<< + * if func_code_info is not None: + * if func_code_info.pydb_mtime == py_db.mtime: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_code_to_func_code_info_cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 502, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_code_obj}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 502, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo))))) __PYX_ERR(0, 502, __pyx_L1_error) + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":503 + * + * func_code_info = _code_to_func_code_info_cache.get(code_obj) + * if func_code_info is not None: # <<<<<<<<<<<<<< + * if func_code_info.pydb_mtime == py_db.mtime: + * # if DEBUG: + */ + __pyx_t_3 = (((PyObject *)__pyx_v_func_code_info) != Py_None); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":504 + * func_code_info = _code_to_func_code_info_cache.get(code_obj) + * if func_code_info is not None: + * if func_code_info.pydb_mtime == py_db.mtime: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('_get_func_code_info: matched mtime', key, code_obj) + */ + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_func_code_info->pydb_mtime); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_mtime); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":507 + * # if DEBUG: + * # print('_get_func_code_info: matched mtime', key, code_obj) + * return func_code_info # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); + __pyx_r = __pyx_v_func_code_info; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":504 + * func_code_info = _code_to_func_code_info_cache.get(code_obj) + * if func_code_info is not None: + * if func_code_info.pydb_mtime == py_db.mtime: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('_get_func_code_info: matched mtime', key, code_obj) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":503 + * + * func_code_info = _code_to_func_code_info_cache.get(code_obj) + * if func_code_info is not None: # <<<<<<<<<<<<<< + * if func_code_info.pydb_mtime == py_db.mtime: + * # if DEBUG: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":516 + * cdef str co_filename + * cdef str co_name + * code = code_obj # <<<<<<<<<<<<<< + * co_filename = code.co_filename + * co_name = code.co_name + */ + __pyx_v_code = ((PyCodeObject *)__pyx_v_code_obj); + + /* "_pydevd_sys_monitoring_cython.pyx":517 + * cdef str co_name + * code = code_obj + * co_filename = code.co_filename # <<<<<<<<<<<<<< + * co_name = code.co_name + * # ELSE + */ + __pyx_t_1 = ((PyObject *)__pyx_v_code->co_filename); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_co_filename = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":518 + * code = code_obj + * co_filename = code.co_filename + * co_name = code.co_name # <<<<<<<<<<<<<< + * # ELSE + * # cache_file_type: dict + */ + __pyx_t_1 = ((PyObject *)__pyx_v_code->co_name); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_co_name = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":530 + * # print('_get_func_code_info: new (mtime did not match)', key, code_obj) + * + * func_code_info = FuncCodeInfo() # <<<<<<<<<<<<<< + * func_code_info.code_obj = code_obj + * code_line_info = _get_code_line_info(code_obj) + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_func_code_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":531 + * + * func_code_info = FuncCodeInfo() + * func_code_info.code_obj = code_obj # <<<<<<<<<<<<<< + * code_line_info = _get_code_line_info(code_obj) + * line_to_offset = code_line_info.line_to_offset + */ + __Pyx_INCREF(__pyx_v_code_obj); + __Pyx_GIVEREF(__pyx_v_code_obj); + __Pyx_GOTREF(__pyx_v_func_code_info->code_obj); + __Pyx_DECREF(__pyx_v_func_code_info->code_obj); + __pyx_v_func_code_info->code_obj = __pyx_v_code_obj; + + /* "_pydevd_sys_monitoring_cython.pyx":532 + * func_code_info = FuncCodeInfo() + * func_code_info.code_obj = code_obj + * code_line_info = _get_code_line_info(code_obj) # <<<<<<<<<<<<<< + * line_to_offset = code_line_info.line_to_offset + * func_code_info.pydb_mtime = py_db.mtime + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__get_code_line_info(__pyx_v_code_obj, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_code_line_info = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":533 + * func_code_info.code_obj = code_obj + * code_line_info = _get_code_line_info(code_obj) + * line_to_offset = code_line_info.line_to_offset # <<<<<<<<<<<<<< + * func_code_info.pydb_mtime = py_db.mtime + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code_line_info, __pyx_n_s_line_to_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_line_to_offset = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":534 + * code_line_info = _get_code_line_info(code_obj) + * line_to_offset = code_line_info.line_to_offset + * func_code_info.pydb_mtime = py_db.mtime # <<<<<<<<<<<<<< + * + * func_code_info.co_filename = co_filename + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_mtime); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_func_code_info->pydb_mtime = __pyx_t_6; + + /* "_pydevd_sys_monitoring_cython.pyx":536 + * func_code_info.pydb_mtime = py_db.mtime + * + * func_code_info.co_filename = co_filename # <<<<<<<<<<<<<< + * func_code_info.co_name = co_name + * + */ + __Pyx_INCREF(__pyx_v_co_filename); + __Pyx_GIVEREF(__pyx_v_co_filename); + __Pyx_GOTREF(__pyx_v_func_code_info->co_filename); + __Pyx_DECREF(__pyx_v_func_code_info->co_filename); + __pyx_v_func_code_info->co_filename = __pyx_v_co_filename; + + /* "_pydevd_sys_monitoring_cython.pyx":537 + * + * func_code_info.co_filename = co_filename + * func_code_info.co_name = co_name # <<<<<<<<<<<<<< + * + * # Compute whether to always skip this. + */ + __Pyx_INCREF(__pyx_v_co_name); + __Pyx_GIVEREF(__pyx_v_co_name); + __Pyx_GOTREF(__pyx_v_func_code_info->co_name); + __Pyx_DECREF(__pyx_v_func_code_info->co_name); + __pyx_v_func_code_info->co_name = __pyx_v_co_name; + + /* "_pydevd_sys_monitoring_cython.pyx":540 + * + * # Compute whether to always skip this. + * try: # <<<<<<<<<<<<<< + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":541 + * # Compute whether to always skip this. + * try: + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] # <<<<<<<<<<<<<< + * except: + * abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_t_1, __pyx_v_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 541, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_abs_path_real_path_and_base = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":540 + * + * # Compute whether to always skip this. + * try: # <<<<<<<<<<<<<< + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + * except: + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":542 + * try: + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + * except: # <<<<<<<<<<<<<< + * abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) + * + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 542, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + + /* "_pydevd_sys_monitoring_cython.pyx":543 + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + * except: + * abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) # <<<<<<<<<<<<<< + * + * func_code_info.abs_path_filename = abs_path_real_path_and_base[0] + */ + __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 543, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_co_filename}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 543, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_abs_path_real_path_and_base, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L7_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":540 + * + * # Compute whether to always skip this. + * try: # <<<<<<<<<<<<<< + * abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + * except: + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L11_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":545 + * abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) + * + * func_code_info.abs_path_filename = abs_path_real_path_and_base[0] # <<<<<<<<<<<<<< + * func_code_info.canonical_normalized_filename = abs_path_real_path_and_base[1] + * + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_abs_path_real_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 545, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_func_code_info->abs_path_filename); + __Pyx_DECREF(__pyx_v_func_code_info->abs_path_filename); + __pyx_v_func_code_info->abs_path_filename = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":546 + * + * func_code_info.abs_path_filename = abs_path_real_path_and_base[0] + * func_code_info.canonical_normalized_filename = abs_path_real_path_and_base[1] # <<<<<<<<<<<<<< + * + * frame = None + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_abs_path_real_path_and_base, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 546, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_2); + __Pyx_GOTREF(__pyx_v_func_code_info->canonical_normalized_filename); + __Pyx_DECREF(__pyx_v_func_code_info->canonical_normalized_filename); + __pyx_v_func_code_info->canonical_normalized_filename = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":548 + * func_code_info.canonical_normalized_filename = abs_path_real_path_and_base[1] + * + * frame = None # <<<<<<<<<<<<<< + * cache_file_type = py_db.get_cache_file_type() + * # Note: this cache key must be the same from PyDB.get_file_type() -- see it for comments + */ + __Pyx_INCREF(Py_None); + __pyx_v_frame = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":549 + * + * frame = None + * cache_file_type = py_db.get_cache_file_type() # <<<<<<<<<<<<<< + * # Note: this cache key must be the same from PyDB.get_file_type() -- see it for comments + * # on the cache. + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_cache_file_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 549, __pyx_L1_error) + __pyx_v_cache_file_type = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":552 + * # Note: this cache key must be the same from PyDB.get_file_type() -- see it for comments + * # on the cache. + * cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) # <<<<<<<<<<<<<< + * try: + * file_type = cache_file_type[cache_file_type_key] # Make it faster + */ + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_code->co_firstlineno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_abs_path_real_path_and_base, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2)) __PYX_ERR(0, 552, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_code_obj); + __Pyx_GIVEREF(__pyx_v_code_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_code_obj)) __PYX_ERR(0, 552, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_1 = 0; + __pyx_v_cache_file_type_key = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":553 + * # on the cache. + * cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + * try: # <<<<<<<<<<<<<< + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":554 + * cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + * try: + * file_type = cache_file_type[cache_file_type_key] # Make it faster # <<<<<<<<<<<<<< + * except: + * if frame is None: + */ + if (unlikely(__pyx_v_cache_file_type == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 554, __pyx_L14_error) + } + __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_cache_file_type, __pyx_v_cache_file_type_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 554, __pyx_L14_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_file_type = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":553 + * # on the cache. + * cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + * try: # <<<<<<<<<<<<<< + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: + */ + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L19_try_end; + __pyx_L14_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":555 + * try: + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: # <<<<<<<<<<<<<< + * if frame is None: + * if frame_or_depth.__class__ == int: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 555, __pyx_L16_except_error) + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + + /* "_pydevd_sys_monitoring_cython.pyx":556 + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + __pyx_t_3 = (__pyx_v_frame == Py_None); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":557 + * except: + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame_or_depth, __pyx_n_s_class); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 557, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = PyObject_RichCompare(__pyx_t_10, ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 557, __pyx_L16_except_error) + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 557, __pyx_L16_except_error) + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":558 + * if frame is None: + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) # <<<<<<<<<<<<<< + * else: + * frame = frame_or_depth + */ + __pyx_t_11 = __Pyx_PyInt_AddObjC(__pyx_v_frame_or_depth, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 558, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_13.__pyx_n = 1; + __pyx_t_13.depth = __pyx_t_11; + __pyx_t_10 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 558, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_10); + __pyx_t_10 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":557 + * except: + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + goto __pyx_L23; + } + + /* "_pydevd_sys_monitoring_cython.pyx":560 + * frame = _getframe(frame_or_depth + 1) + * else: + * frame = frame_or_depth # <<<<<<<<<<<<<< + * assert frame.f_code is code_obj, "%s != %s" % (frame.f_code, code_obj) + * + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_frame_or_depth); + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_v_frame_or_depth); + } + __pyx_L23:; + + /* "_pydevd_sys_monitoring_cython.pyx":561 + * else: + * frame = frame_or_depth + * assert frame.f_code is code_obj, "%s != %s" % (frame.f_code, code_obj) # <<<<<<<<<<<<<< + * + * file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 561, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_3 = (__pyx_t_10 == __pyx_v_code_obj); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_3)) { + __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 561, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 561, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_GIVEREF(__pyx_t_10); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10)) __PYX_ERR(0, 561, __pyx_L16_except_error); + __Pyx_INCREF(__pyx_v_code_obj); + __Pyx_GIVEREF(__pyx_v_code_obj); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_code_obj)) __PYX_ERR(0, 561, __pyx_L16_except_error); + __pyx_t_10 = 0; + __pyx_t_10 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 561, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_Raise(__pyx_builtin_AssertionError, __pyx_t_10, 0, 0); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __PYX_ERR(0, 561, __pyx_L16_except_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 561, __pyx_L16_except_error) + #endif + + /* "_pydevd_sys_monitoring_cython.pyx":556 + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":563 + * assert frame.f_code is code_obj, "%s != %s" % (frame.f_code, code_obj) + * + * file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd # <<<<<<<<<<<<<< + * + * if file_type is not None: + */ + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_get_file_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 563, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_11); + __pyx_t_12 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_12)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_12); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_v_frame, __pyx_v_abs_path_real_path_and_base}; + __pyx_t_10 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; + if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 563, __pyx_L16_except_error) + __Pyx_GOTREF(__pyx_t_10); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_XDECREF_SET(__pyx_v_file_type, __pyx_t_10); + __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L15_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":553 + * # on the cache. + * cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + * try: # <<<<<<<<<<<<<< + * file_type = cache_file_type[cache_file_type_key] # Make it faster + * except: + */ + __pyx_L16_except_error:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L15_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7); + __pyx_L19_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":565 + * file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd + * + * if file_type is not None: # <<<<<<<<<<<<<< + * func_code_info.always_skip_code = True + * func_code_info.always_filtered_out = True + */ + __pyx_t_3 = (__pyx_v_file_type != Py_None); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":566 + * + * if file_type is not None: + * func_code_info.always_skip_code = True # <<<<<<<<<<<<<< + * func_code_info.always_filtered_out = True + * _code_to_func_code_info_cache[code_obj] = func_code_info + */ + __pyx_v_func_code_info->always_skip_code = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":567 + * if file_type is not None: + * func_code_info.always_skip_code = True + * func_code_info.always_filtered_out = True # <<<<<<<<<<<<<< + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info + */ + __pyx_v_func_code_info->always_filtered_out = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":568 + * func_code_info.always_skip_code = True + * func_code_info.always_filtered_out = True + * _code_to_func_code_info_cache[code_obj] = func_code_info # <<<<<<<<<<<<<< + * return func_code_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_code_to_func_code_info_cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 568, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely((PyObject_SetItem(__pyx_t_2, __pyx_v_code_obj, ((PyObject *)__pyx_v_func_code_info)) < 0))) __PYX_ERR(0, 568, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":569 + * func_code_info.always_filtered_out = True + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info # <<<<<<<<<<<<<< + * + * # still not set, check for dont trace comments. + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); + __pyx_r = __pyx_v_func_code_info; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":565 + * file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd + * + * if file_type is not None: # <<<<<<<<<<<<<< + * func_code_info.always_skip_code = True + * func_code_info.always_filtered_out = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":572 + * + * # still not set, check for dont trace comments. + * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * # I.e.: cache the result skip (no need to evaluate the same frame multiple times). + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":576 + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): # <<<<<<<<<<<<<< + * if frame is None: + * if frame_or_depth.__class__ == int: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 576, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_code_obj, __pyx_v_func_code_info->abs_path_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 576, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_14 = (!__pyx_t_3); + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":577 + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + __pyx_t_14 = (__pyx_v_frame == Py_None); + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":578 + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame_or_depth, __pyx_n_s_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":579 + * if frame is None: + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) # <<<<<<<<<<<<<< + * else: + * frame = frame_or_depth + */ + __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_frame_or_depth, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13.__pyx_n = 1; + __pyx_t_13.depth = __pyx_t_4; + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":578 + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + goto __pyx_L28; + } + + /* "_pydevd_sys_monitoring_cython.pyx":581 + * frame = _getframe(frame_or_depth + 1) + * else: + * frame = frame_or_depth # <<<<<<<<<<<<<< + * assert frame.f_code is code_obj + * + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_frame_or_depth); + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_v_frame_or_depth); + } + __pyx_L28:; + + /* "_pydevd_sys_monitoring_cython.pyx":577 + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":582 + * else: + * frame = frame_or_depth + * assert frame.f_code is code_obj # <<<<<<<<<<<<<< + * + * func_code_info.always_filtered_out = True + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 582, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = (__pyx_t_1 == __pyx_v_code_obj); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_14)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(0, 582, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 582, __pyx_L1_error) + #endif + + /* "_pydevd_sys_monitoring_cython.pyx":584 + * assert frame.f_code is code_obj + * + * func_code_info.always_filtered_out = True # <<<<<<<<<<<<<< + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info + */ + __pyx_v_func_code_info->always_filtered_out = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":585 + * + * func_code_info.always_filtered_out = True + * _code_to_func_code_info_cache[code_obj] = func_code_info # <<<<<<<<<<<<<< + * return func_code_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_code_to_func_code_info_cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_code_obj, ((PyObject *)__pyx_v_func_code_info)) < 0))) __PYX_ERR(0, 585, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":586 + * func_code_info.always_filtered_out = True + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info # <<<<<<<<<<<<<< + * + * if frame is None: + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); + __pyx_r = __pyx_v_func_code_info; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":576 + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + * # Which will be handled by this frame is read-only, so, we can cache it safely. + * if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): # <<<<<<<<<<<<<< + * if frame is None: + * if frame_or_depth.__class__ == int: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":572 + * + * # still not set, check for dont trace comments. + * if pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * # I.e.: cache the result skip (no need to evaluate the same frame multiple times). + * # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":588 + * return func_code_info + * + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + __pyx_t_14 = (__pyx_v_frame == Py_None); + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":589 + * + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame_or_depth, __pyx_n_s_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 589, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 589, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 589, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":590 + * if frame is None: + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) # <<<<<<<<<<<<<< + * else: + * frame = frame_or_depth + */ + __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_v_frame_or_depth, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13.__pyx_n = 1; + __pyx_t_13.depth = __pyx_t_4; + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":589 + * + * if frame is None: + * if frame_or_depth.__class__ == int: # <<<<<<<<<<<<<< + * frame = _getframe(frame_or_depth + 1) + * else: + */ + goto __pyx_L30; + } + + /* "_pydevd_sys_monitoring_cython.pyx":592 + * frame = _getframe(frame_or_depth + 1) + * else: + * frame = frame_or_depth # <<<<<<<<<<<<<< + * assert frame.f_code is code_obj + * + */ + /*else*/ { + __Pyx_INCREF(__pyx_v_frame_or_depth); + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_v_frame_or_depth); + } + __pyx_L30:; + + /* "_pydevd_sys_monitoring_cython.pyx":593 + * else: + * frame = frame_or_depth + * assert frame.f_code is code_obj # <<<<<<<<<<<<<< + * + * func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) + */ + #ifndef CYTHON_WITHOUT_ASSERTIONS + if (unlikely(__pyx_assertions_enabled())) { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = (__pyx_t_1 == __pyx_v_code_obj); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_14)) { + __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0); + __PYX_ERR(0, 593, __pyx_L1_error) + } + } + #else + if ((1)); else __PYX_ERR(0, 593, __pyx_L1_error) + #endif + + /* "_pydevd_sys_monitoring_cython.pyx":588 + * return func_code_info + * + * if frame is None: # <<<<<<<<<<<<<< + * if frame_or_depth.__class__ == int: + * frame = _getframe(frame_or_depth + 1) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":595 + * assert frame.f_code is code_obj + * + * func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) # <<<<<<<<<<<<<< + * + * if py_db.is_files_filter_enabled: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_frame, __pyx_v_func_code_info->abs_path_filename, Py_True}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 595, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_func_code_info->filtered_out_force_checked = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":597 + * func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) + * + * if py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + * if func_code_info.always_filtered_out: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_is_files_filter_enabled); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":598 + * + * if py_db.is_files_filter_enabled: + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked # <<<<<<<<<<<<<< + * if func_code_info.always_filtered_out: + * _code_to_func_code_info_cache[code_obj] = func_code_info + */ + __pyx_t_14 = __pyx_v_func_code_info->filtered_out_force_checked; + __pyx_v_func_code_info->always_filtered_out = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":599 + * if py_db.is_files_filter_enabled: + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + * if func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info + */ + if (__pyx_v_func_code_info->always_filtered_out) { + + /* "_pydevd_sys_monitoring_cython.pyx":600 + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + * if func_code_info.always_filtered_out: + * _code_to_func_code_info_cache[code_obj] = func_code_info # <<<<<<<<<<<<<< + * return func_code_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_code_to_func_code_info_cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 600, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_code_obj, ((PyObject *)__pyx_v_func_code_info)) < 0))) __PYX_ERR(0, 600, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":601 + * if func_code_info.always_filtered_out: + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info # <<<<<<<<<<<<<< + * + * else: + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); + __pyx_r = __pyx_v_func_code_info; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":599 + * if py_db.is_files_filter_enabled: + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + * if func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":597 + * func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) + * + * if py_db.is_files_filter_enabled: # <<<<<<<<<<<<<< + * func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + * if func_code_info.always_filtered_out: + */ + goto __pyx_L31; + } + + /* "_pydevd_sys_monitoring_cython.pyx":604 + * + * else: + * func_code_info.always_filtered_out = False # <<<<<<<<<<<<<< + * + * # Handle regular breakpoints + */ + /*else*/ { + __pyx_v_func_code_info->always_filtered_out = 0; + } + __pyx_L31:; + + /* "_pydevd_sys_monitoring_cython.pyx":607 + * + * # Handle regular breakpoints + * breakpoints: dict = py_db.breakpoints.get(func_code_info.canonical_normalized_filename) # <<<<<<<<<<<<<< + * function_breakpoint: object = py_db.function_breakpoint_name_to_breakpoint.get(func_code_info.co_name) + * # print('\n---') + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_breakpoints); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 607, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 607, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_func_code_info->canonical_normalized_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 607, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(0, 607, __pyx_L1_error) + __pyx_v_breakpoints = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":608 + * # Handle regular breakpoints + * breakpoints: dict = py_db.breakpoints.get(func_code_info.canonical_normalized_filename) + * function_breakpoint: object = py_db.function_breakpoint_name_to_breakpoint.get(func_code_info.co_name) # <<<<<<<<<<<<<< + * # print('\n---') + * # print(py_db.breakpoints) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_function_breakpoint_name_to_brea); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_func_code_info->co_name}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_function_breakpoint = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":613 + * # print(func_code_info.canonical_normalized_filename) + * # print(py_db.breakpoints.get(func_code_info.canonical_normalized_filename)) + * if function_breakpoint: # <<<<<<<<<<<<<< + * # Go directly into tracing mode + * func_code_info.function_breakpoint_found = True + */ + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_function_breakpoint); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 613, __pyx_L1_error) + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":615 + * if function_breakpoint: + * # Go directly into tracing mode + * func_code_info.function_breakpoint_found = True # <<<<<<<<<<<<<< + * func_code_info.function_breakpoint = function_breakpoint + * + */ + __pyx_v_func_code_info->function_breakpoint_found = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":616 + * # Go directly into tracing mode + * func_code_info.function_breakpoint_found = True + * func_code_info.function_breakpoint = function_breakpoint # <<<<<<<<<<<<<< + * + * if breakpoints: + */ + __Pyx_INCREF(__pyx_v_function_breakpoint); + __Pyx_GIVEREF(__pyx_v_function_breakpoint); + __Pyx_GOTREF(__pyx_v_func_code_info->function_breakpoint); + __Pyx_DECREF(__pyx_v_func_code_info->function_breakpoint); + __pyx_v_func_code_info->function_breakpoint = __pyx_v_function_breakpoint; + + /* "_pydevd_sys_monitoring_cython.pyx":613 + * # print(func_code_info.canonical_normalized_filename) + * # print(py_db.breakpoints.get(func_code_info.canonical_normalized_filename)) + * if function_breakpoint: # <<<<<<<<<<<<<< + * # Go directly into tracing mode + * func_code_info.function_breakpoint_found = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":618 + * func_code_info.function_breakpoint = function_breakpoint + * + * if breakpoints: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('found breakpoints', code_obj_py.co_name, breakpoints) + */ + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_breakpoints); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 618, __pyx_L1_error) + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":622 + * # print('found breakpoints', code_obj_py.co_name, breakpoints) + * + * bp_line_to_breakpoint = {} # <<<<<<<<<<<<<< + * + * for breakpoint_line, bp in breakpoints.items(): + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 622, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bp_line_to_breakpoint = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":624 + * bp_line_to_breakpoint = {} + * + * for breakpoint_line, bp in breakpoints.items(): # <<<<<<<<<<<<<< + * if breakpoint_line in line_to_offset: + * bp_line_to_breakpoint[breakpoint_line] = bp + */ + __pyx_t_15 = 0; + if (unlikely(__pyx_v_breakpoints == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); + __PYX_ERR(0, 624, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_dict_iterator(__pyx_v_breakpoints, 1, __pyx_n_s_items, (&__pyx_t_16), (&__pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); + __pyx_t_1 = __pyx_t_4; + __pyx_t_4 = 0; + while (1) { + __pyx_t_17 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_16, &__pyx_t_15, &__pyx_t_4, &__pyx_t_2, NULL, __pyx_t_6); + if (unlikely(__pyx_t_17 == 0)) break; + if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_breakpoint_line, __pyx_t_4); + __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_bp, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":625 + * + * for breakpoint_line, bp in breakpoints.items(): + * if breakpoint_line in line_to_offset: # <<<<<<<<<<<<<< + * bp_line_to_breakpoint[breakpoint_line] = bp + * + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_v_breakpoint_line, __pyx_v_line_to_offset, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 625, __pyx_L1_error) + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":626 + * for breakpoint_line, bp in breakpoints.items(): + * if breakpoint_line in line_to_offset: + * bp_line_to_breakpoint[breakpoint_line] = bp # <<<<<<<<<<<<<< + * + * func_code_info.breakpoint_found = bool(bp_line_to_breakpoint) + */ + if (unlikely((PyDict_SetItem(__pyx_v_bp_line_to_breakpoint, __pyx_v_breakpoint_line, __pyx_v_bp) < 0))) __PYX_ERR(0, 626, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":625 + * + * for breakpoint_line, bp in breakpoints.items(): + * if breakpoint_line in line_to_offset: # <<<<<<<<<<<<<< + * bp_line_to_breakpoint[breakpoint_line] = bp + * + */ + } + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":628 + * bp_line_to_breakpoint[breakpoint_line] = bp + * + * func_code_info.breakpoint_found = bool(bp_line_to_breakpoint) # <<<<<<<<<<<<<< + * func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint + * + */ + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_bp_line_to_breakpoint); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 628, __pyx_L1_error) + __pyx_v_func_code_info->breakpoint_found = (!(!__pyx_t_14)); + + /* "_pydevd_sys_monitoring_cython.pyx":629 + * + * func_code_info.breakpoint_found = bool(bp_line_to_breakpoint) + * func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint # <<<<<<<<<<<<<< + * + * if py_db.plugin: + */ + __Pyx_INCREF(__pyx_v_bp_line_to_breakpoint); + __Pyx_GIVEREF(__pyx_v_bp_line_to_breakpoint); + __Pyx_GOTREF(__pyx_v_func_code_info->bp_line_to_breakpoint); + __Pyx_DECREF(__pyx_v_func_code_info->bp_line_to_breakpoint); + __pyx_v_func_code_info->bp_line_to_breakpoint = __pyx_v_bp_line_to_breakpoint; + + /* "_pydevd_sys_monitoring_cython.pyx":618 + * func_code_info.function_breakpoint = function_breakpoint + * + * if breakpoints: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('found breakpoints', code_obj_py.co_name, breakpoints) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":631 + * func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint + * + * if py_db.plugin: # <<<<<<<<<<<<<< + * plugin_manager = py_db.plugin + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 631, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":632 + * + * if py_db.plugin: + * plugin_manager = py_db.plugin # <<<<<<<<<<<<<< + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_plugin_manager = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":633 + * if py_db.plugin: + * plugin_manager = py_db.plugin + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) # <<<<<<<<<<<<<< + * + * if is_tracked_frame: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_is_tracked_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_is_tracked_frame = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":635 + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) + * + * if is_tracked_frame: # <<<<<<<<<<<<<< + * if py_db.has_plugin_line_breaks: + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + */ + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_v_is_tracked_frame); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 635, __pyx_L1_error) + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":636 + * + * if is_tracked_frame: + * if py_db.has_plugin_line_breaks: # <<<<<<<<<<<<<< + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + * func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 636, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_14) { + + /* "_pydevd_sys_monitoring_cython.pyx":637 + * if is_tracked_frame: + * if py_db.has_plugin_line_breaks: + * required_events_breakpoint = plugin_manager.required_events_breakpoint() # <<<<<<<<<<<<<< + * func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + * func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_required_events_breakpoint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 637, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_required_events_breakpoint = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":638 + * if py_db.has_plugin_line_breaks: + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + * func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint # <<<<<<<<<<<<<< + * func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint + * + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_line, __pyx_v_required_events_breakpoint, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 638, __pyx_L1_error) + __pyx_v_func_code_info->plugin_line_breakpoint_found = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":639 + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + * func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + * func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint # <<<<<<<<<<<<<< + * + * required_events_stepping = plugin_manager.required_events_stepping() + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_call_2, __pyx_v_required_events_breakpoint, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 639, __pyx_L1_error) + __pyx_v_func_code_info->plugin_call_breakpoint_found = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":636 + * + * if is_tracked_frame: + * if py_db.has_plugin_line_breaks: # <<<<<<<<<<<<<< + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + * func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":641 + * func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint + * + * required_events_stepping = plugin_manager.required_events_stepping() # <<<<<<<<<<<<<< + * func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping + * func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_required_events_stepping); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_required_events_stepping = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":642 + * + * required_events_stepping = plugin_manager.required_events_stepping() + * func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping # <<<<<<<<<<<<<< + * func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping + * func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_line, __pyx_v_required_events_stepping, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 642, __pyx_L1_error) + __pyx_v_func_code_info->plugin_line_stepping = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":643 + * required_events_stepping = plugin_manager.required_events_stepping() + * func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping + * func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping # <<<<<<<<<<<<<< + * func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping + * + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_call_2, __pyx_v_required_events_stepping, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 643, __pyx_L1_error) + __pyx_v_func_code_info->plugin_call_stepping = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":644 + * func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping + * func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping + * func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping # <<<<<<<<<<<<<< + * + * _code_to_func_code_info_cache[code_obj] = func_code_info + */ + __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_return, __pyx_v_required_events_stepping, Py_EQ)); if (unlikely((__pyx_t_14 < 0))) __PYX_ERR(0, 644, __pyx_L1_error) + __pyx_v_func_code_info->plugin_return_stepping = __pyx_t_14; + + /* "_pydevd_sys_monitoring_cython.pyx":635 + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) + * + * if is_tracked_frame: # <<<<<<<<<<<<<< + * if py_db.has_plugin_line_breaks: + * required_events_breakpoint = plugin_manager.required_events_breakpoint() + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":631 + * func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint + * + * if py_db.plugin: # <<<<<<<<<<<<<< + * plugin_manager = py_db.plugin + * is_tracked_frame = plugin_manager.is_tracked_frame(frame) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":646 + * func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping + * + * _code_to_func_code_info_cache[code_obj] = func_code_info # <<<<<<<<<<<<<< + * return func_code_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_code_to_func_code_info_cache); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_code_obj, ((PyObject *)__pyx_v_func_code_info)) < 0))) __PYX_ERR(0, 646, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":647 + * + * _code_to_func_code_info_cache[code_obj] = func_code_info + * return func_code_info # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF((PyObject *)__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_func_code_info); + __pyx_r = __pyx_v_func_code_info; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":484 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_XDECREF(__pyx_t_12); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_cache_file_type); + __Pyx_XDECREF(__pyx_v_cache_file_type_key); + __Pyx_XDECREF(__pyx_v_co_filename); + __Pyx_XDECREF(__pyx_v_co_name); + __Pyx_XDECREF(__pyx_v_code_line_info); + __Pyx_XDECREF(__pyx_v_line_to_offset); + __Pyx_XDECREF(__pyx_v_abs_path_real_path_and_base); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_file_type); + __Pyx_XDECREF(__pyx_v_breakpoints); + __Pyx_XDECREF(__pyx_v_function_breakpoint); + __Pyx_XDECREF(__pyx_v_bp_line_to_breakpoint); + __Pyx_XDECREF(__pyx_v_breakpoint_line); + __Pyx_XDECREF(__pyx_v_bp); + __Pyx_XDECREF(__pyx_v_plugin_manager); + __Pyx_XDECREF(__pyx_v_is_tracked_frame); + __Pyx_XDECREF(__pyx_v_required_events_breakpoint); + __Pyx_XDECREF(__pyx_v_required_events_stepping); + __Pyx_XGIVEREF((PyObject *)__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_3_get_func_code_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_3_get_func_code_info = {"_get_func_code_info", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_3_get_func_code_info, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_3_get_func_code_info(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code_obj = 0; + PyObject *__pyx_v_frame_or_depth = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[2] = {0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_get_func_code_info (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code_obj,&__pyx_n_s_frame_or_depth,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code_obj)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame_or_depth)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 484, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_get_func_code_info", 1, 2, 2, 1); __PYX_ERR(0, 484, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_get_func_code_info") < 0)) __PYX_ERR(0, 484, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 2)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + } + __pyx_v_code_obj = values[0]; + __pyx_v_frame_or_depth = values[1]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_get_func_code_info", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 484, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_2_get_func_code_info(__pyx_self, __pyx_v_code_obj, __pyx_v_frame_or_depth); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_2_get_func_code_info(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_code_obj, PyObject *__pyx_v_frame_or_depth) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_get_func_code_info", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code_obj, __pyx_v_frame_or_depth, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._get_func_code_info", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":652 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_line_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_line_tracing(code): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_line_tracing(PyObject *__pyx_v_code) { + PyObject *__pyx_v_events = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_enable_line_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":658 + * # fmt: on + * # print('enable line tracing', code) + * _ensure_monitoring() # <<<<<<<<<<<<<< + * events = monitor.get_local_events(DEBUGGER_ID, code) + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.LINE | monitor.events.JUMP) + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 658, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":659 + * # print('enable line tracing', code) + * _ensure_monitoring() + * events = monitor.get_local_events(DEBUGGER_ID, code) # <<<<<<<<<<<<<< + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.LINE | monitor.events.JUMP) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 659, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_local_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 659, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 659, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_2, __pyx_v_code}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_events = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":660 + * _ensure_monitoring() + * events = monitor.get_local_events(DEBUGGER_ID, code) + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.LINE | monitor.events.JUMP) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_local_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_LINE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyNumber_Or(__pyx_v_events, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_JUMP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = PyNumber_Or(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_3, __pyx_v_code, __pyx_t_7}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":652 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_line_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_line_tracing(code): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._enable_line_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_events); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":665 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_return_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_return_tracing(code): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(PyObject *__pyx_v_code) { + PyObject *__pyx_v_events = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_enable_return_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":671 + * # fmt: on + * # print('enable return tracing', code) + * _ensure_monitoring() # <<<<<<<<<<<<<< + * events = monitor.get_local_events(DEBUGGER_ID, code) + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.PY_RETURN) + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 671, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":672 + * # print('enable return tracing', code) + * _ensure_monitoring() + * events = monitor.get_local_events(DEBUGGER_ID, code) # <<<<<<<<<<<<<< + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.PY_RETURN) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_local_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_2, __pyx_v_code}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_events = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":673 + * _ensure_monitoring() + * events = monitor.get_local_events(DEBUGGER_ID, code) + * monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.PY_RETURN) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_local_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_PY_RETURN); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = PyNumber_Or(__pyx_v_events, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_3, __pyx_v_code, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":665 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_return_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_return_tracing(code): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._enable_return_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_events); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":678 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef disable_code_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def disable_code_tracing(code): + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_5disable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_disable_code_tracing(PyObject *__pyx_v_code, CYTHON_UNUSED int __pyx_skip_dispatch) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("disable_code_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":683 + * # ENDIF + * # fmt: on + * _ensure_monitoring() # <<<<<<<<<<<<<< + * monitor.set_local_events(DEBUGGER_ID, code, 0) + * + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":684 + * # fmt: on + * _ensure_monitoring() + * monitor.set_local_events(DEBUGGER_ID, code, 0) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 684, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set_local_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 684, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 684, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_2, __pyx_v_code, __pyx_int_0}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 684, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":678 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef disable_code_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def disable_code_tracing(code): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.disable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_5disable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_5disable_code_tracing = {"disable_code_tracing", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_5disable_code_tracing, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_5disable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_code = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("disable_code_tracing (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_code,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 678, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "disable_code_tracing") < 0)) __PYX_ERR(0, 678, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v_code = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("disable_code_tracing", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 678, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.disable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_4disable_code_tracing(__pyx_self, __pyx_v_code); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_4disable_code_tracing(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_code) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("disable_code_tracing", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython_disable_code_tracing(__pyx_v_code, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 678, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.disable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":689 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef enable_code_tracing(unsigned long thread_ident, code, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_7enable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_enable_code_tracing(unsigned long __pyx_v_thread_ident, PyObject *__pyx_v_code, PyObject *__pyx_v_frame, CYTHON_UNUSED int __pyx_skip_dispatch) { + PyObject *__pyx_v_py_db = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_thread = NULL; + PyObject *__pyx_v_additional_info = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("enable_code_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":704 + * # if DEBUG: + * # print('==== enable code tracing', code.co_filename[-30:], code.co_name) + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return False + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 704, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 704, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_py_db = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":705 + * # print('==== enable code tracing', code.co_filename[-30:], code.co_name) + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_t_4 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":706 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return False # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":705 + * # print('==== enable code tracing', code.co_filename[-30:], code.co_name) + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":708 + * return False + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * # if DEBUG: + */ + __pyx_t_2 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_v_frame, 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":709 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always skip)') + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":712 + * # if DEBUG: + * # print('disable (always skip)') + * return False # <<<<<<<<<<<<<< + * + * try: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":709 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always skip)') + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":714 + * return False + * + * try: # <<<<<<<<<<<<<< + * thread = threading._active.get(thread_ident) + * if thread is None: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":715 + * + * try: + * thread = threading._active.get(thread_ident) # <<<<<<<<<<<<<< + * if thread is None: + * return False + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_active); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 715, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_unsigned_long(__pyx_v_thread_ident); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 715, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_9 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_10 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_thread = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":716 + * try: + * thread = threading._active.get(thread_ident) + * if thread is None: # <<<<<<<<<<<<<< + * return False + * additional_info = set_additional_thread_info(thread) + */ + __pyx_t_3 = (__pyx_v_thread == Py_None); + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":717 + * thread = threading._active.get(thread_ident) + * if thread is None: + * return False # <<<<<<<<<<<<<< + * additional_info = set_additional_thread_info(thread) + * except: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L11_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":716 + * try: + * thread = threading._active.get(thread_ident) + * if thread is None: # <<<<<<<<<<<<<< + * return False + * additional_info = set_additional_thread_info(thread) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":718 + * if thread is None: + * return False + * additional_info = set_additional_thread_info(thread) # <<<<<<<<<<<<<< + * except: + * # Cannot set based on stepping + */ + __pyx_t_2 = __pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info(__pyx_v_thread, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 718, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_additional_info = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":714 + * return False + * + * try: # <<<<<<<<<<<<<< + * thread = threading._active.get(thread_ident) + * if thread is None: + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L12_try_end; + __pyx_L7_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":719 + * return False + * additional_info = set_additional_thread_info(thread) + * except: # <<<<<<<<<<<<<< + * # Cannot set based on stepping + * return False + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.enable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 719, __pyx_L9_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_8); + + /* "_pydevd_sys_monitoring_cython.pyx":721 + * except: + * # Cannot set based on stepping + * return False # <<<<<<<<<<<<<< + * + * return _enable_code_tracing(py_db, additional_info, func_code_info, code, frame, False) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L10_except_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":714 + * return False + * + * try: # <<<<<<<<<<<<<< + * thread = threading._active.get(thread_ident) + * if thread is None: + */ + __pyx_L9_except_error:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L1_error; + __pyx_L11_try_return:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L0; + __pyx_L10_except_return:; + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); + goto __pyx_L0; + __pyx_L12_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":723 + * return False + * + * return _enable_code_tracing(py_db, additional_info, func_code_info, code, frame, False) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + if (!(likely(((__pyx_v_additional_info) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_additional_info, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(0, 723, __pyx_L1_error) + __pyx_t_3 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing(__pyx_v_py_db, ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_additional_info), __pyx_v_func_code_info, __pyx_v_code, __pyx_v_frame, 0); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 723, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":689 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef enable_code_tracing(unsigned long thread_ident, code, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.enable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_thread); + __Pyx_XDECREF(__pyx_v_additional_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_7enable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_29_pydevd_sys_monitoring_cython_6enable_code_tracing, "\n Note: this must enable code tracing for the given code/frame.\n\n The frame can be from any thread!\n\n :return: Whether code tracing was added in this function to the given code.\n "); +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_7enable_code_tracing = {"enable_code_tracing", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_7enable_code_tracing, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_29_pydevd_sys_monitoring_cython_6enable_code_tracing}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_7enable_code_tracing(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + unsigned long __pyx_v_thread_ident; + PyObject *__pyx_v_code = 0; + PyObject *__pyx_v_frame = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("enable_code_tracing (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_thread_ident,&__pyx_n_s_code,&__pyx_n_s_frame,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread_ident)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_code)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("enable_code_tracing", 1, 3, 3, 1); __PYX_ERR(0, 689, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("enable_code_tracing", 1, 3, 3, 2); __PYX_ERR(0, 689, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "enable_code_tracing") < 0)) __PYX_ERR(0, 689, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v_thread_ident = __Pyx_PyInt_As_unsigned_long(values[0]); if (unlikely((__pyx_v_thread_ident == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 689, __pyx_L3_error) + __pyx_v_code = values[1]; + __pyx_v_frame = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("enable_code_tracing", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 689, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.enable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_6enable_code_tracing(__pyx_self, __pyx_v_thread_ident, __pyx_v_code, __pyx_v_frame); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_6enable_code_tracing(CYTHON_UNUSED PyObject *__pyx_self, unsigned long __pyx_v_thread_ident, PyObject *__pyx_v_code, PyObject *__pyx_v_frame) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("enable_code_tracing", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython_enable_code_tracing(__pyx_v_thread_ident, __pyx_v_code, __pyx_v_frame, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.enable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":728 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef bint _enable_code_tracing(py_db, PyDBAdditionalThreadInfo additional_info, FuncCodeInfo func_code_info, code, frame, bint warn_on_filtered_out): # <<<<<<<<<<<<<< + * cdef int step_cmd + * cdef bint is_stepping + */ + +static int __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing(PyObject *__pyx_v_py_db, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_additional_info, struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info, PyObject *__pyx_v_code, PyObject *__pyx_v_frame, int __pyx_v_warn_on_filtered_out) { + int __pyx_v_step_cmd; + int __pyx_v_is_stepping; + int __pyx_v_code_tracing_added; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_enable_code_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":740 + * """ + * # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + * step_cmd = additional_info.pydev_step_cmd # <<<<<<<<<<<<<< + * is_stepping = step_cmd != -1 + * code_tracing_added = False + */ + __pyx_t_1 = __pyx_v_additional_info->pydev_step_cmd; + __pyx_v_step_cmd = __pyx_t_1; + + /* "_pydevd_sys_monitoring_cython.pyx":741 + * # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + * step_cmd = additional_info.pydev_step_cmd + * is_stepping = step_cmd != -1 # <<<<<<<<<<<<<< + * code_tracing_added = False + * + */ + __pyx_v_is_stepping = (__pyx_v_step_cmd != -1L); + + /* "_pydevd_sys_monitoring_cython.pyx":742 + * step_cmd = additional_info.pydev_step_cmd + * is_stepping = step_cmd != -1 + * code_tracing_added = False # <<<<<<<<<<<<<< + * + * if func_code_info.always_filtered_out: + */ + __pyx_v_code_tracing_added = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":744 + * code_tracing_added = False + * + * if func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always filtered out)') + */ + if (__pyx_v_func_code_info->always_filtered_out) { + + /* "_pydevd_sys_monitoring_cython.pyx":748 + * # print('disable (always filtered out)') + * if ( + * warn_on_filtered_out # <<<<<<<<<<<<<< + * and is_stepping + * and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + */ + if (__pyx_v_warn_on_filtered_out) { + } else { + __pyx_t_2 = __pyx_v_warn_on_filtered_out; + goto __pyx_L5_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":749 + * if ( + * warn_on_filtered_out + * and is_stepping # <<<<<<<<<<<<<< + * and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + * and not _global_notify_skipped_step_in + */ + if (__pyx_v_is_stepping) { + } else { + __pyx_t_2 = __pyx_v_is_stepping; + goto __pyx_L5_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":750 + * warn_on_filtered_out + * and is_stepping + * and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) # <<<<<<<<<<<<<< + * and not _global_notify_skipped_step_in + * ): + */ + __pyx_t_1 = __pyx_v_additional_info->pydev_original_step_cmd; + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_3 = __pyx_t_7; + goto __pyx_L9_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = __pyx_t_7; + __pyx_L9_bool_binop_done:; + __pyx_t_7 = __pyx_t_3; + if (__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L5_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":751 + * and is_stepping + * and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + * and not _global_notify_skipped_step_in # <<<<<<<<<<<<<< + * ): + * _notify_skipped_step_in_because_of_filters(py_db, frame) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_global_notify_skipped_step_in); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 751, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 751, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = (!__pyx_t_7); + __pyx_t_2 = __pyx_t_3; + __pyx_L5_bool_binop_done:; + + /* "_pydevd_sys_monitoring_cython.pyx":747 + * # if DEBUG: + * # print('disable (always filtered out)') + * if ( # <<<<<<<<<<<<<< + * warn_on_filtered_out + * and is_stepping + */ + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":753 + * and not _global_notify_skipped_step_in + * ): + * _notify_skipped_step_in_because_of_filters(py_db, frame) # <<<<<<<<<<<<<< + * + * if is_stepping: + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__notify_skipped_step_in_because_of_filters(__pyx_v_py_db, __pyx_v_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 753, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":747 + * # if DEBUG: + * # print('disable (always filtered out)') + * if ( # <<<<<<<<<<<<<< + * warn_on_filtered_out + * and is_stepping + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":755 + * _notify_skipped_step_in_because_of_filters(py_db, frame) + * + * if is_stepping: # <<<<<<<<<<<<<< + * # Tracing may be needed for return value + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + */ + if (__pyx_v_is_stepping) { + + /* "_pydevd_sys_monitoring_cython.pyx":757 + * if is_stepping: + * # Tracing may be needed for return value + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) # <<<<<<<<<<<<<< + * code_tracing_added = True + * return code_tracing_added + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 757, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_step_tracing(__pyx_v_py_db, __pyx_v_code, __pyx_t_4, __pyx_v_additional_info, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 757, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":758 + * # Tracing may be needed for return value + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + * code_tracing_added = True # <<<<<<<<<<<<<< + * return code_tracing_added + * + */ + __pyx_v_code_tracing_added = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":755 + * _notify_skipped_step_in_because_of_filters(py_db, frame) + * + * if is_stepping: # <<<<<<<<<<<<<< + * # Tracing may be needed for return value + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":759 + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + * code_tracing_added = True + * return code_tracing_added # <<<<<<<<<<<<<< + * + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: + */ + __pyx_r = __pyx_v_code_tracing_added; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":744 + * code_tracing_added = False + * + * if func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always filtered out)') + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":761 + * return code_tracing_added + * + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: # <<<<<<<<<<<<<< + * _enable_line_tracing(code) + * code_tracing_added = True + */ + if (!__pyx_v_func_code_info->breakpoint_found) { + } else { + __pyx_t_2 = __pyx_v_func_code_info->breakpoint_found; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_2 = __pyx_v_func_code_info->plugin_line_breakpoint_found; + __pyx_L13_bool_binop_done:; + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":762 + * + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: + * _enable_line_tracing(code) # <<<<<<<<<<<<<< + * code_tracing_added = True + * + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_line_tracing(__pyx_v_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":763 + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: + * _enable_line_tracing(code) + * code_tracing_added = True # <<<<<<<<<<<<<< + * + * if is_stepping: + */ + __pyx_v_code_tracing_added = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":761 + * return code_tracing_added + * + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: # <<<<<<<<<<<<<< + * _enable_line_tracing(code) + * code_tracing_added = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":765 + * code_tracing_added = True + * + * if is_stepping: # <<<<<<<<<<<<<< + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + * code_tracing_added = True + */ + if (__pyx_v_is_stepping) { + + /* "_pydevd_sys_monitoring_cython.pyx":766 + * + * if is_stepping: + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) # <<<<<<<<<<<<<< + * code_tracing_added = True + * + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_step_tracing(__pyx_v_py_db, __pyx_v_code, __pyx_t_5, __pyx_v_additional_info, __pyx_v_frame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":767 + * if is_stepping: + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + * code_tracing_added = True # <<<<<<<<<<<<<< + * + * return code_tracing_added + */ + __pyx_v_code_tracing_added = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":765 + * code_tracing_added = True + * + * if is_stepping: # <<<<<<<<<<<<<< + * _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + * code_tracing_added = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":769 + * code_tracing_added = True + * + * return code_tracing_added # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_code_tracing_added; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":728 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef bint _enable_code_tracing(py_db, PyDBAdditionalThreadInfo additional_info, FuncCodeInfo func_code_info, code, frame, bint warn_on_filtered_out): # <<<<<<<<<<<<<< + * cdef int step_cmd + * cdef bint is_stepping + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._enable_code_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":774 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_step_tracing(py_db, code, step_cmd, PyDBAdditionalThreadInfo info, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_step_tracing(py_db, code, step_cmd, info, frame): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_step_tracing(PyObject *__pyx_v_py_db, PyObject *__pyx_v_code, PyObject *__pyx_v_step_cmd, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, PyObject *__pyx_v_frame) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_enable_step_tracing", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":779 + * # ENDIF + * # fmt: on + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * # Stepping (must have line/return tracing enabled). + * _enable_line_tracing(code) + */ + __Pyx_INCREF(__pyx_v_step_cmd); + __pyx_t_1 = __pyx_v_step_cmd; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + } else { + __pyx_t_2 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!__pyx_t_5) { + } else { + __pyx_t_2 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CMD_STEP_INTO_COROUTINE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + } else { + __pyx_t_2 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + + /* "_pydevd_sys_monitoring_cython.pyx":781 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO): + * # Stepping (must have line/return tracing enabled). + * _enable_line_tracing(code) # <<<<<<<<<<<<<< + * _enable_return_tracing(code) + * + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_line_tracing(__pyx_v_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":782 + * # Stepping (must have line/return tracing enabled). + * _enable_line_tracing(code) + * _enable_return_tracing(code) # <<<<<<<<<<<<<< + * + * elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(__pyx_v_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":779 + * # ENDIF + * # fmt: on + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * # Stepping (must have line/return tracing enabled). + * _enable_line_tracing(code) + */ + goto __pyx_L3; + } + + /* "_pydevd_sys_monitoring_cython.pyx":784 + * _enable_return_tracing(code) + * + * elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): # <<<<<<<<<<<<<< + * _enable_return_tracing(code) + * + */ + __Pyx_INCREF(__pyx_v_step_cmd); + __pyx_t_1 = __pyx_v_step_cmd; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_6) { + } else { + __pyx_t_2 = __pyx_t_6; + goto __pyx_L10_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_STEP_RETURN_MY_CODE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __pyx_t_6; + __pyx_L10_bool_binop_done:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __pyx_t_2; + if (__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_1 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_t_1, __pyx_v_frame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 784, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __pyx_t_6; + __pyx_L8_bool_binop_done:; + if (__pyx_t_5) { + + /* "_pydevd_sys_monitoring_cython.pyx":785 + * + * elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): + * _enable_return_tracing(code) # <<<<<<<<<<<<<< + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + */ + __pyx_t_3 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(__pyx_v_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":784 + * _enable_return_tracing(code) + * + * elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): # <<<<<<<<<<<<<< + * _enable_return_tracing(code) + * + */ + goto __pyx_L3; + } + + /* "_pydevd_sys_monitoring_cython.pyx":787 + * _enable_return_tracing(code) + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * if _is_same_frame(info, info.pydev_step_stop, frame): + * _enable_line_tracing(code) + */ + __Pyx_INCREF(__pyx_v_step_cmd); + __pyx_t_3 = __pyx_v_step_cmd; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_6) { + } else { + __pyx_t_5 = __pyx_t_6; + goto __pyx_L12_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __pyx_t_6; + __pyx_L12_bool_binop_done:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __pyx_t_5; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":788 + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if _is_same_frame(info, info.pydev_step_stop, frame): # <<<<<<<<<<<<<< + * _enable_line_tracing(code) + * + */ + __pyx_t_3 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_3); + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_t_3, __pyx_v_frame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 788, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":789 + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if _is_same_frame(info, info.pydev_step_stop, frame): + * _enable_line_tracing(code) # <<<<<<<<<<<<<< + * + * # Wee need to enable return tracing because if we have a return during a step over + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_line_tracing(__pyx_v_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":793 + * # Wee need to enable return tracing because if we have a return during a step over + * # we need to stop too. + * _enable_return_tracing(code) # <<<<<<<<<<<<<< + * elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): + * # Show return values on step over. + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(__pyx_v_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 793, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":788 + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if _is_same_frame(info, info.pydev_step_stop, frame): # <<<<<<<<<<<<<< + * _enable_line_tracing(code) + * + */ + goto __pyx_L14; + } + + /* "_pydevd_sys_monitoring_cython.pyx":794 + * # we need to stop too. + * _enable_return_tracing(code) + * elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): # <<<<<<<<<<<<<< + * # Show return values on step over. + * _enable_return_tracing(code) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 794, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 794, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_6 = __pyx_t_5; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_1 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 794, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 794, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 794, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __pyx_t_5; + __pyx_L15_bool_binop_done:; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":796 + * elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): + * # Show return values on step over. + * _enable_return_tracing(code) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_return_tracing(__pyx_v_code); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 796, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":794 + * # we need to stop too. + * _enable_return_tracing(code) + * elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): # <<<<<<<<<<<<<< + * # Show return values on step over. + * _enable_return_tracing(code) + */ + } + __pyx_L14:; + + /* "_pydevd_sys_monitoring_cython.pyx":787 + * _enable_return_tracing(code) + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * if _is_same_frame(info, info.pydev_step_stop, frame): + * _enable_line_tracing(code) + */ + } + __pyx_L3:; + + /* "_pydevd_sys_monitoring_cython.pyx":774 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_step_tracing(py_db, code, step_cmd, PyDBAdditionalThreadInfo info, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _enable_step_tracing(py_db, code, step_cmd, info, frame): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._enable_step_tracing", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":814 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def __init__(self, list try_except_infos): # <<<<<<<<<<<<<< + * self.try_except_infos = try_except_infos + * # ELSE + */ + +/* Python wrapper */ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_try_except_infos = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_try_except_infos,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_try_except_infos)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 814, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 814, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + } + __pyx_v_try_except_infos = ((PyObject*)values[0]); + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 814, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._TryExceptContainerObj.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_try_except_infos), (&PyList_Type), 1, "try_except_infos", 1))) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj___init__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)__pyx_v_self), __pyx_v_try_except_infos); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj___init__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v_try_except_infos) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":815 + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def __init__(self, list try_except_infos): + * self.try_except_infos = try_except_infos # <<<<<<<<<<<<<< + * # ELSE + * # def __init__(self, try_except_infos): + */ + __Pyx_INCREF(__pyx_v_try_except_infos); + __Pyx_GIVEREF(__pyx_v_try_except_infos); + __Pyx_GOTREF(__pyx_v_self->try_except_infos); + __Pyx_DECREF(__pyx_v_self->try_except_infos); + __pyx_v_self->try_except_infos = __pyx_v_try_except_infos; + + /* "_pydevd_sys_monitoring_cython.pyx":814 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def __init__(self, list try_except_infos): # <<<<<<<<<<<<<< + * self.try_except_infos = try_except_infos + * # ELSE + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_2__reduce_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_2__reduce_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.try_except_infos,) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_self->try_except_infos); + __Pyx_GIVEREF(__pyx_v_self->try_except_infos); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->try_except_infos)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_v_state = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v__dict = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":7 + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_2 = (__pyx_v__dict != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); + __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self.try_except_infos is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.try_except_infos,) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self.try_except_infos is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + */ + /*else*/ { + __pyx_t_2 = (__pyx_v_self->try_except_infos != ((PyObject*)Py_None)); + __pyx_v_use_setstate = __pyx_t_2; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.try_except_infos is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: + */ + if (__pyx_v_use_setstate) { + + /* "(tree fragment)":13 + * use_setstate = self.try_except_infos is not None + * if use_setstate: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_230645316); + __Pyx_GIVEREF(__pyx_int_230645316); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_230645316)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self.try_except_infos is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, None), state + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle__TryExceptContain); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_230645316); + __Pyx_GIVEREF(__pyx_int_230645316); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_230645316)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._TryExceptContainerObj.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._TryExceptContainerObj.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_4__setstate_cython__(((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_4__setstate_cython__(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); + + /* "(tree fragment)":17 + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle__TryExceptContainerObj__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._TryExceptContainerObj.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":826 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _unwind_event(code, instruction, exc): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__unwind_event(PyObject *__pyx_v_code, CYTHON_UNUSED PyObject *__pyx_v_instruction, PyObject *__pyx_v_exc) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_v_arg = NULL; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_has_caught_exception_breakpoint_in_pydb = NULL; + CYTHON_UNUSED PyObject *__pyx_v__should_stop = NULL; + PyObject *__pyx_v_user_uncaught_exc_info = NULL; + struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v_container_obj = NULL; + PyObject *__pyx_v_is_unhandled = NULL; + PyObject *__pyx_v_break_on_uncaught_exceptions = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + unsigned int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *(*__pyx_t_14)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_unwind_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":833 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":834 + * # fmt: on + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 834, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 834, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 834, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":833 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":835 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._unwind_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 835, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":836 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 836, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 836, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":837 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":838 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * frame = _getframe(1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":837 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":833 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":840 + * return + * + * frame = _getframe(1) # <<<<<<<<<<<<<< + * arg = (type(exc), exc, exc.__traceback__) + * + */ + __pyx_t_9.__pyx_n = 1; + __pyx_t_9.depth = __pyx_int_1; + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 840, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_frame = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":841 + * + * frame = _getframe(1) + * arg = (type(exc), exc, exc.__traceback__) # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_traceback); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 841, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 841, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_v_exc))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(__pyx_v_exc)))) __PYX_ERR(0, 841, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_exc)) __PYX_ERR(0, 841, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6)) __PYX_ERR(0, 841, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_v_arg = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":843 + * arg = (type(exc), exc, exc.__traceback__) + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 843, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 843, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_py_db = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":844 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_10 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 844, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 844, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":845 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":844 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":847 + * return + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 847, __pyx_L1_error) + __pyx_t_11 = (!__pyx_t_10); + if (!__pyx_t_11) { + } else { + __pyx_t_8 = __pyx_t_11; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 847, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 847, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_11; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":850 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":847 + * return + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":852 + * return + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * return + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_int_1, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":853 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return + * + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":854 + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: + * return # <<<<<<<<<<<<<< + * + * # print('_unwind_event', code, exc) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":853 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":859 + * + * has_caught_exception_breakpoint_in_pydb = ( + * py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 859, __pyx_L1_error) + if (!__pyx_t_8) { + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + __Pyx_INCREF(__pyx_t_4); + __pyx_t_6 = __pyx_t_4; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 859, __pyx_L1_error) + if (!__pyx_t_8) { + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } else { + __Pyx_INCREF(__pyx_t_4); + __pyx_t_6 = __pyx_t_4; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_4); + __pyx_t_6 = __pyx_t_4; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_L19_bool_binop_done:; + __pyx_v_has_caught_exception_breakpoint_in_pydb = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":863 + * + * + * if has_caught_exception_breakpoint_in_pydb: # <<<<<<<<<<<<<< + * _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_has_caught_exception_breakpoint_in_pydb); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 863, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":864 + * + * if has_caught_exception_breakpoint_in_pydb: + * _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "_pydevd_sys_monitoring_cython.pyx":865 + * if has_caught_exception_breakpoint_in_pydb: + * _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None # <<<<<<<<<<<<<< + * ) + * if user_uncaught_exc_info: + */ + __pyx_t_5 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_5, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info->additional_info), __pyx_v_frame, __pyx_v_thread_info->thread, __pyx_v_arg, Py_None}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_12, 6+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 864, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + __pyx_t_7 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_13); + index = 0; __pyx_t_4 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_5 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_5)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 2; __pyx_t_7 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_7)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 3) < 0) __PYX_ERR(0, 864, __pyx_L1_error) + __pyx_t_14 = NULL; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L24_unpacking_done; + __pyx_L23_unpacking_failed:; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_14 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 864, __pyx_L1_error) + __pyx_L24_unpacking_done:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":864 + * + * if has_caught_exception_breakpoint_in_pydb: + * _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + * ) + */ + __pyx_v__should_stop = __pyx_t_4; + __pyx_t_4 = 0; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_v_user_uncaught_exc_info = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":867 + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + * ) + * if user_uncaught_exc_info: # <<<<<<<<<<<<<< + * # TODO: Check: this may no longer be needed as in the unwind we know it's + * # an exception bubbling up (wait for all tests to pass to check it). + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_user_uncaught_exc_info); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 867, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":870 + * # TODO: Check: this may no longer be needed as in the unwind we know it's + * # an exception bubbling up (wait for all tests to pass to check it). + * if func_code_info.try_except_container_obj is None: # <<<<<<<<<<<<<< + * container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) + * func_code_info.try_except_container_obj = container_obj + */ + __pyx_t_8 = (__pyx_v_func_code_info->try_except_container_obj == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":871 + * # an exception bubbling up (wait for all tests to pass to check it). + * if func_code_info.try_except_container_obj is None: + * container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) # <<<<<<<<<<<<<< + * func_code_info.try_except_container_obj = container_obj + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_collect_try_except_info); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 871, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 871, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 871, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj), __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 871, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_container_obj = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)__pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":872 + * if func_code_info.try_except_container_obj is None: + * container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) + * func_code_info.try_except_container_obj = container_obj # <<<<<<<<<<<<<< + * + * is_unhandled = is_unhandled_exception( + */ + __Pyx_INCREF((PyObject *)__pyx_v_container_obj); + __Pyx_GIVEREF((PyObject *)__pyx_v_container_obj); + __Pyx_GOTREF(__pyx_v_func_code_info->try_except_container_obj); + __Pyx_DECREF(__pyx_v_func_code_info->try_except_container_obj); + __pyx_v_func_code_info->try_except_container_obj = ((PyObject *)__pyx_v_container_obj); + + /* "_pydevd_sys_monitoring_cython.pyx":870 + * # TODO: Check: this may no longer be needed as in the unwind we know it's + * # an exception bubbling up (wait for all tests to pass to check it). + * if func_code_info.try_except_container_obj is None: # <<<<<<<<<<<<<< + * container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) + * func_code_info.try_except_container_obj = container_obj + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":874 + * func_code_info.try_except_container_obj = container_obj + * + * is_unhandled = is_unhandled_exception( # <<<<<<<<<<<<<< + * func_code_info.try_except_container_obj, py_db, frame, user_uncaught_exc_info[1], user_uncaught_exc_info[2] + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_is_unhandled_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 874, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":875 + * + * is_unhandled = is_unhandled_exception( + * func_code_info.try_except_container_obj, py_db, frame, user_uncaught_exc_info[1], user_uncaught_exc_info[2] # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_user_uncaught_exc_info, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_user_uncaught_exc_info, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_13, __pyx_v_func_code_info->try_except_container_obj, __pyx_v_py_db, __pyx_v_frame, __pyx_t_5, __pyx_t_4}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 5+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 874, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_is_unhandled = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":878 + * ) + * + * if is_unhandled: # <<<<<<<<<<<<<< + * # print('stop in user uncaught') + * handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_is_unhandled); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 878, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":880 + * if is_unhandled: + * # print('stop in user uncaught') + * handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 880, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_user_uncaught_exc_info, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 880, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 880, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_13 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_13, __pyx_v_py_db, __pyx_v_thread_info->thread, __pyx_v_frame, __pyx_t_4, __pyx_t_5}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 5+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 880, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":881 + * # print('stop in user uncaught') + * handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + * return # <<<<<<<<<<<<<< + * + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":878 + * ) + * + * if is_unhandled: # <<<<<<<<<<<<<< + * # print('stop in user uncaught') + * handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":867 + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + * ) + * if user_uncaught_exc_info: # <<<<<<<<<<<<<< + * # TODO: Check: this may no longer be needed as in the unwind we know it's + * # an exception bubbling up (wait for all tests to pass to check it). + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":863 + * + * + * if has_caught_exception_breakpoint_in_pydb: # <<<<<<<<<<<<<< + * _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":883 + * return + * + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions # <<<<<<<<<<<<<< + * if break_on_uncaught_exceptions and _is_last_user_frame(frame): + * stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_uncaught_exceptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 883, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_break_on_uncaught_exceptions = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":884 + * + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + * if break_on_uncaught_exceptions and _is_last_user_frame(frame): # <<<<<<<<<<<<<< + * stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) + * + */ + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_break_on_uncaught_exceptions); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 884, __pyx_L1_error) + if (__pyx_t_11) { + } else { + __pyx_t_8 = __pyx_t_11; + goto __pyx_L29_bool_binop_done; + } + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__is_last_user_frame(__pyx_v_frame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 884, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 884, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = __pyx_t_11; + __pyx_L29_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":885 + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + * if break_on_uncaught_exceptions and _is_last_user_frame(frame): + * stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_thread_info->thread, ((PyObject *)__pyx_v_thread_info->additional_info), __pyx_v_arg}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_12, 4+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":884 + * + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + * if break_on_uncaught_exceptions and _is_last_user_frame(frame): # <<<<<<<<<<<<<< + * stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":826 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _unwind_event(code, instruction, exc): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._unwind_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_arg); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_has_caught_exception_breakpoint_in_pydb); + __Pyx_XDECREF(__pyx_v__should_stop); + __Pyx_XDECREF(__pyx_v_user_uncaught_exc_info); + __Pyx_XDECREF((PyObject *)__pyx_v_container_obj); + __Pyx_XDECREF(__pyx_v_is_unhandled); + __Pyx_XDECREF(__pyx_v_break_on_uncaught_exceptions); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":890 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _raise_event(code, instruction, exc): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__raise_event(PyObject *__pyx_v_code, CYTHON_UNUSED PyObject *__pyx_v_instruction, PyObject *__pyx_v_exc) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_v_arg = NULL; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_prev_exc_info = NULL; + PyObject *__pyx_v_should_stop = NULL; + PyObject *__pyx_v__user_uncaught_exc_info = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_9; + int __pyx_t_10; + int __pyx_t_11; + unsigned int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + PyObject *(*__pyx_t_14)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_raise_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":907 + * it cannot be individually enabled/disabled for a given code object). + * """ + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":908 + * """ + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 908, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 908, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 908, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":907 + * it cannot be individually enabled/disabled for a given code object). + * """ + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":909 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._raise_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 909, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":910 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 910, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 910, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":911 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":912 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * frame = _getframe(1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":911 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":907 + * it cannot be individually enabled/disabled for a given code object). + * """ + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":914 + * return + * + * frame = _getframe(1) # <<<<<<<<<<<<<< + * arg = (type(exc), exc, exc.__traceback__) + * + */ + __pyx_t_9.__pyx_n = 1; + __pyx_t_9.depth = __pyx_int_1; + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_frame = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":915 + * + * frame = _getframe(1) + * arg = (type(exc), exc, exc.__traceback__) # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_traceback); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 915, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 915, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_exc))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(__pyx_v_exc))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(__pyx_v_exc)))) __PYX_ERR(0, 915, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_exc); + __Pyx_GIVEREF(__pyx_v_exc); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_exc)) __PYX_ERR(0, 915, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6)) __PYX_ERR(0, 915, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_v_arg = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":917 + * arg = (type(exc), exc, exc.__traceback__) + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 917, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_py_db = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":918 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_10 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 918, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 918, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":919 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":918 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":921 + * return + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 921, __pyx_L1_error) + __pyx_t_11 = (!__pyx_t_10); + if (!__pyx_t_11) { + } else { + __pyx_t_8 = __pyx_t_11; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 921, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 921, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_11; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":924 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":921 + * return + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":926 + * return + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * return + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_int_1, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":927 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return + * + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":928 + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: + * return # <<<<<<<<<<<<<< + * + * # print('_raise_event --- ', code, exc) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":927 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":934 + * # Compute the previous exception info (if any). We use it to check if the exception + * # should be stopped + * prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None # <<<<<<<<<<<<<< + * should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 934, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_HasAttr(__pyx_t_4, __pyx_n_s_user_uncaught_exc_info); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 934, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_8) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 934, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_user_uncaught_exc_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 934, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __pyx_t_5; + __pyx_t_5 = 0; + } else { + __Pyx_INCREF(Py_None); + __pyx_t_6 = Py_None; + } + __pyx_v_prev_exc_info = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":935 + * # should be stopped + * prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None + * should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + + /* "_pydevd_sys_monitoring_cython.pyx":936 + * prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None + * should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[7] = {__pyx_t_4, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info->additional_info), __pyx_v_frame, __pyx_v_thread_info->thread, __pyx_v_arg, __pyx_v_prev_exc_info}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 6+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 935, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_5 = PyList_GET_ITEM(sequence, 0); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); + __pyx_t_7 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + #else + __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_13 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_14 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_13); + index = 0; __pyx_t_5 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_5)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 1; __pyx_t_4 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_4)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 2; __pyx_t_7 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_7)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 3) < 0) __PYX_ERR(0, 935, __pyx_L1_error) + __pyx_t_14 = NULL; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + goto __pyx_L20_unpacking_done; + __pyx_L19_unpacking_failed:; + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_14 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 935, __pyx_L1_error) + __pyx_L20_unpacking_done:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":935 + * # should be stopped + * prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None + * should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( # <<<<<<<<<<<<<< + * py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info + * ) + */ + __pyx_v_should_stop = __pyx_t_5; + __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_v__user_uncaught_exc_info = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":940 + * + * # Save the current exception info for the next raise event. + * _thread_local_info._user_uncaught_exc_info = _user_uncaught_exc_info # <<<<<<<<<<<<<< + * + * # print('!!!! should_stop (in raise)', should_stop) + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 940, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_user_uncaught_exc_info, __pyx_v__user_uncaught_exc_info) < 0) __PYX_ERR(0, 940, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":943 + * + * # print('!!!! should_stop (in raise)', should_stop) + * if should_stop: # <<<<<<<<<<<<<< + * handle_exception(py_db, thread_info.thread, frame, arg, EXCEPTION_TYPE_HANDLED) + * + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_should_stop); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 943, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":944 + * # print('!!!! should_stop (in raise)', should_stop) + * if should_stop: + * handle_exception(py_db, thread_info.thread, frame, arg, EXCEPTION_TYPE_HANDLED) # <<<<<<<<<<<<<< + * + * # Once we leave the raise event, we are no longer in the state of 'just_raised', so + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_thread_info->thread, __pyx_v_frame, __pyx_v_arg, __pyx_t_4}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_12, 5+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":943 + * + * # print('!!!! should_stop (in raise)', should_stop) + * if should_stop: # <<<<<<<<<<<<<< + * handle_exception(py_db, thread_info.thread, frame, arg, EXCEPTION_TYPE_HANDLED) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":948 + * # Once we leave the raise event, we are no longer in the state of 'just_raised', so + * # indicate that this traceback is for an exception in the unwinding state + * flag_as_unwinding(exc.__traceback__) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_flag_as_unwinding); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_traceback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":890 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _raise_event(code, instruction, exc): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._raise_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_arg); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_prev_exc_info); + __Pyx_XDECREF(__pyx_v_should_stop); + __Pyx_XDECREF(__pyx_v__user_uncaught_exc_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":953 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef str get_func_name(frame): # <<<<<<<<<<<<<< + * cdef str func_name + * # ELSE + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_get_func_name(PyObject *__pyx_v_frame) { + PyObject *__pyx_v_func_name = 0; + PyObject *__pyx_v_code_obj = NULL; + PyObject *__pyx_v_cls_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_func_name", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":959 + * # ENDIF + * # fmt: on + * code_obj = frame.f_code # <<<<<<<<<<<<<< + * func_name = code_obj.co_name + * try: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_code_obj = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":960 + * # fmt: on + * code_obj = frame.f_code + * func_name = code_obj.co_name # <<<<<<<<<<<<<< + * try: + * cls_name = get_clsname_for_code(code_obj, frame) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_code_obj, __pyx_n_s_co_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(0, 960, __pyx_L1_error) + __pyx_v_func_name = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":961 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_4); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":962 + * func_name = code_obj.co_name + * try: + * cls_name = get_clsname_for_code(code_obj, frame) # <<<<<<<<<<<<<< + * if cls_name is not None: + * return "%s.%s" % (cls_name, func_name) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 962, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_code_obj, __pyx_v_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_cls_name = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":963 + * try: + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: # <<<<<<<<<<<<<< + * return "%s.%s" % (cls_name, func_name) + * else: + */ + __pyx_t_8 = (__pyx_v_cls_name != Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":964 + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: + * return "%s.%s" % (cls_name, func_name) # <<<<<<<<<<<<<< + * else: + * return func_name + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_cls_name); + __Pyx_GIVEREF(__pyx_v_cls_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_cls_name)) __PYX_ERR(0, 964, __pyx_L3_error); + __Pyx_INCREF(__pyx_v_func_name); + __Pyx_GIVEREF(__pyx_v_func_name); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_func_name)) __PYX_ERR(0, 964, __pyx_L3_error); + __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_s_s_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 964, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(PyString_CheckExact(__pyx_t_5)) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(0, 964, __pyx_L3_error) + __pyx_r = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; + goto __pyx_L7_try_return; + + /* "_pydevd_sys_monitoring_cython.pyx":963 + * try: + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: # <<<<<<<<<<<<<< + * return "%s.%s" % (cls_name, func_name) + * else: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":966 + * return "%s.%s" % (cls_name, func_name) + * else: + * return func_name # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_func_name); + __pyx_r = __pyx_v_func_name; + goto __pyx_L7_try_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":961 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: + */ + } + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":967 + * else: + * return func_name + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * return func_name + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_6) < 0) __PYX_ERR(0, 967, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":968 + * return func_name + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * return func_name + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 968, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 968, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_7 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 968, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":969 + * except: + * pydev_log.exception() + * return func_name # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_func_name); + __pyx_r = __pyx_v_func_name; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + } + + /* "_pydevd_sys_monitoring_cython.pyx":961 + * code_obj = frame.f_code + * func_name = code_obj.co_name + * try: # <<<<<<<<<<<<<< + * cls_name = get_clsname_for_code(code_obj, frame) + * if cls_name is not None: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L1_error; + __pyx_L7_try_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); + goto __pyx_L0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":953 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef str get_func_name(frame): # <<<<<<<<<<<<<< + * cdef str func_name + * # ELSE + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.get_func_name", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_func_name); + __Pyx_XDECREF(__pyx_v_code_obj); + __Pyx_XDECREF(__pyx_v_cls_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":974 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _show_return_values(frame, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _show_return_values(frame, arg): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(PyObject *__pyx_v_frame, PyObject *__pyx_v_arg) { + PyObject *__pyx_v_f_locals_back = NULL; + PyObject *__pyx_v_return_values_dict = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; + char const *__pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_show_return_values", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":979 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + */ + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":980 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":981 + * try: + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 981, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 981, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_f_locals_back = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":982 + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: + */ + __pyx_t_6 = (__pyx_v_f_locals_back != Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":983 + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + * if return_values_dict is None: + * return_values_dict = {} + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 983, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 983, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_7, Py_None}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 983, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_return_values_dict = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":984 + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: # <<<<<<<<<<<<<< + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + */ + __pyx_t_6 = (__pyx_v_return_values_dict == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":985 + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: + * return_values_dict = {} # <<<<<<<<<<<<<< + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = get_func_name(frame) + */ + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 985, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_return_values_dict, __pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":986 + * if return_values_dict is None: + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict # <<<<<<<<<<<<<< + * name = get_func_name(frame) + * return_values_dict[name] = arg + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 986, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + if (unlikely((PyObject_SetItem(__pyx_v_f_locals_back, __pyx_t_5, __pyx_v_return_values_dict) < 0))) __PYX_ERR(0, 986, __pyx_L6_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":984 + * if f_locals_back is not None: + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: # <<<<<<<<<<<<<< + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":987 + * return_values_dict = {} + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = get_func_name(frame) # <<<<<<<<<<<<<< + * return_values_dict[name] = arg + * except: + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython_get_func_name(__pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 987, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_v_name = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":988 + * f_locals_back[RETURN_VALUES_DICT] = return_values_dict + * name = get_func_name(frame) + * return_values_dict[name] = arg # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() + */ + if (unlikely((PyObject_SetItem(__pyx_v_return_values_dict, __pyx_v_name, __pyx_v_arg) < 0))) __PYX_ERR(0, 988, __pyx_L6_error) + + /* "_pydevd_sys_monitoring_cython.pyx":982 + * try: + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + * if return_values_dict is None: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":980 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":989 + * name = get_func_name(frame) + * return_values_dict[name] = arg + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * finally: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 989, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_7); + + /* "_pydevd_sys_monitoring_cython.pyx":990 + * return_values_dict[name] = arg + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * finally: + * f_locals_back = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 990, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 990, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 990, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L7_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":980 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L4_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L11_try_end:; + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":992 + * pydev_log.exception() + * finally: + * f_locals_back = None # <<<<<<<<<<<<<< + * + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + goto __pyx_L5; + } + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); + } + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + goto __pyx_L1_error; + } + __pyx_L5:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":974 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _show_return_values(frame, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _show_return_values(frame, arg): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._show_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f_locals_back); + __Pyx_XDECREF(__pyx_v_return_values_dict); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":997 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _remove_return_values(py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _remove_return_values(py_db, frame): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__remove_return_values(CYTHON_UNUSED PyObject *__pyx_v_py_db, PyObject *__pyx_v_frame) { + PyObject *__pyx_v_f_locals_back = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; + char const *__pyx_t_14; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_remove_return_values", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1002 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * try: + * # Showing return values was turned off, we should remove them from locals dict. + */ + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1003 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1006 + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one + * frame.f_locals.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + * + * f_locals_back = getattr(frame.f_back, "f_locals", None) + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_locals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1006, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1006, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1006, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, Py_None}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1006, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1008 + * frame.f_locals.pop(RETURN_VALUES_DICT, None) + * + * f_locals_back = getattr(frame.f_back, "f_locals", None) # <<<<<<<<<<<<<< + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1008, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_GetAttr3(__pyx_t_4, __pyx_n_s_f_locals, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1008, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_f_locals_back = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1009 + * + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: + */ + __pyx_t_9 = (__pyx_v_f_locals_back != Py_None); + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1010 + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) # <<<<<<<<<<<<<< + * except: + * pydev_log.exception() + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_locals_back, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1010, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1010, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_5, Py_None}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1010, __pyx_L6_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1009 + * + * f_locals_back = getattr(frame.f_back, "f_locals", None) + * if f_locals_back is not None: # <<<<<<<<<<<<<< + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1003 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L11_try_end; + __pyx_L6_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1011 + * if f_locals_back is not None: + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: # <<<<<<<<<<<<<< + * pydev_log.exception() + * finally: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(0, 1011, __pyx_L8_except_error) + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + + /* "_pydevd_sys_monitoring_cython.pyx":1012 + * f_locals_back.pop(RETURN_VALUES_DICT, None) + * except: + * pydev_log.exception() # <<<<<<<<<<<<<< + * finally: + * f_locals_back = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1012, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_10); + __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exception); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1012, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_11); + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_t_10 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_11))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_11, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1012, __pyx_L8_except_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L7_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1003 + * # fmt: on + * try: + * try: # <<<<<<<<<<<<<< + * # Showing return values was turned off, we should remove them from locals dict. + * # The values can be in the current frame or in the back one + */ + __pyx_L8_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L4_error; + __pyx_L7_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L11_try_end:; + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":1014 + * pydev_log.exception() + * finally: + * f_locals_back = None # <<<<<<<<<<<<<< + * + * + */ + /*finally:*/ { + /*normal exit:*/{ + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + goto __pyx_L5; + } + __pyx_L4_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_15); + __Pyx_XGOTREF(__pyx_t_16); + __Pyx_XGOTREF(__pyx_t_17); + __pyx_t_12 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename; + { + __Pyx_INCREF(Py_None); + __Pyx_XDECREF_SET(__pyx_v_f_locals_back, Py_None); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_15); + __Pyx_XGIVEREF(__pyx_t_16); + __Pyx_XGIVEREF(__pyx_t_17); + __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17); + } + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_ErrRestore(__pyx_t_3, __pyx_t_2, __pyx_t_1); + __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_1 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; + __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14; + goto __pyx_L1_error; + } + __pyx_L5:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":997 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _remove_return_values(py_db, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _remove_return_values(py_db, frame): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_XDECREF(__pyx_t_11); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._remove_return_values", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f_locals_back); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1019 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _return_event(code, instruction, retval): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__return_event(PyObject *__pyx_v_code, CYTHON_UNUSED PyObject *__pyx_v_instruction, PyObject *__pyx_v_retval) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + int __pyx_v_step_cmd; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_v_stop_frame = NULL; + PyObject *__pyx_v_force_check_project_scope = NULL; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_back_func_code_info = NULL; + PyObject *__pyx_v_f_back = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_11; + int __pyx_t_12; + PyObject *__pyx_t_13 = NULL; + unsigned int __pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_return_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1028 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1029 + * # fmt: on + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1029, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1029, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1029, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1028 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1030 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._return_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 1030, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":1031 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1031, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1031, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1032 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1033 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1032 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1028 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1035 + * return + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1035, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1035, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1036 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + __pyx_t_9 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1036, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1036, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1037 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1037, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1037, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1036 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1039 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1039, __pyx_L1_error) + __pyx_t_10 = (!__pyx_t_9); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1039, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1039, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1042 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1039 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1044 + * return + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * return monitor.DISABLE + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_int_1, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1044, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1045 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":1046 + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * info = thread_info.additional_info + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_monitor); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1045 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1048 + * return monitor.DISABLE + * + * info = thread_info.additional_info # <<<<<<<<<<<<<< + * + * # We know the frame depth. + */ + __pyx_t_4 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_4); + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1051 + * + * # We know the frame depth. + * frame = _getframe(1) # <<<<<<<<<<<<<< + * + * step_cmd = info.pydev_step_cmd + */ + __pyx_t_11.__pyx_n = 1; + __pyx_t_11.depth = __pyx_int_1; + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1051, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_frame = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1053 + * frame = _getframe(1) + * + * step_cmd = info.pydev_step_cmd # <<<<<<<<<<<<<< + * if step_cmd == -1: + * return + */ + __pyx_t_12 = __pyx_v_info->pydev_step_cmd; + __pyx_v_step_cmd = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1054 + * + * step_cmd = info.pydev_step_cmd + * if step_cmd == -1: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (__pyx_v_step_cmd == -1L); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1055 + * step_cmd = info.pydev_step_cmd + * if step_cmd == -1: + * return # <<<<<<<<<<<<<< + * + * if info.suspend_type != PYTHON_SUSPEND: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1054 + * + * step_cmd = info.pydev_step_cmd + * if step_cmd == -1: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1057 + * return + * + * if info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * # Plugin stepping + * if func_code_info.plugin_return_stepping: + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_info->suspend_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1057, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1057, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1057, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1057, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1059 + * if info.suspend_type != PYTHON_SUSPEND: + * # Plugin stepping + * if func_code_info.plugin_return_stepping: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) + * return + */ + if (__pyx_v_func_code_info->plugin_return_stepping) { + + /* "_pydevd_sys_monitoring_cython.pyx":1060 + * # Plugin stepping + * if func_code_info.plugin_return_stepping: + * _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__plugin_stepping(__pyx_v_py_db, __pyx_v_step_cmd, __pyx_n_s_return, __pyx_v_frame, __pyx_v_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1060, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1059 + * if info.suspend_type != PYTHON_SUSPEND: + * # Plugin stepping + * if func_code_info.plugin_return_stepping: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1061 + * if func_code_info.plugin_return_stepping: + * _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) + * return # <<<<<<<<<<<<<< + * + * # Python line stepping + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1057 + * return + * + * if info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * # Plugin stepping + * if func_code_info.plugin_return_stepping: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1064 + * + * # Python line stepping + * stop_frame = info.pydev_step_stop # <<<<<<<<<<<<<< + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + */ + __pyx_t_5 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_5); + __pyx_v_stop_frame = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1065 + * # Python line stepping + * stop_frame = info.pydev_step_stop + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + */ + __pyx_t_12 = __pyx_v_step_cmd; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO_COROUTINE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L23_bool_binop_done:; + __pyx_t_10 = __pyx_t_8; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1066 + * stop_frame = info.pydev_step_stop + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE # <<<<<<<<<<<<<< + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1066, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1066, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1066, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_force_check_project_scope = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1067 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + * if ( + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1067, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = (__pyx_t_5 != Py_None); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L27_bool_binop_done; + } + __pyx_t_8 = (!__pyx_v_info->pydev_use_scoped_step_frame); + __pyx_t_10 = __pyx_t_8; + __pyx_L27_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1068 + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) # <<<<<<<<<<<<<< + * if ( + * # Not filtered out. + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1068, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1068, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1068, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_t_6, __pyx_t_5, 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1068, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_back_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1071 + * if ( + * # Not filtered out. + * not back_func_code_info.always_skip_code # <<<<<<<<<<<<<< + * and not back_func_code_info.always_filtered_out + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + */ + __pyx_t_8 = (!__pyx_v_back_func_code_info->always_skip_code); + if (__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L30_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1072 + * # Not filtered out. + * not back_func_code_info.always_skip_code + * and not back_func_code_info.always_filtered_out # <<<<<<<<<<<<<< + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + * # Prevent stopping in a return to the same location we were initially + */ + __pyx_t_8 = (!__pyx_v_back_func_code_info->always_filtered_out); + if (__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L30_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1073 + * not back_func_code_info.always_skip_code + * and not back_func_code_info.always_filtered_out + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) # <<<<<<<<<<<<<< + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1073, __pyx_L1_error) + if (__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L34_bool_binop_done; + } + __pyx_t_8 = __pyx_v_back_func_code_info->filtered_out_force_checked; + __pyx_L34_bool_binop_done:; + __pyx_t_9 = (!__pyx_t_8); + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L30_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1076 + * # Prevent stopping in a return to the same location we were initially + * # (i.e.: double-stop at the same place due to some filtering). + * and info.step_in_initial_location != (frame.f_back, frame.f_back.f_lineno) # <<<<<<<<<<<<<< + * ): + * if py_db.show_return_values: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4)) __PYX_ERR(0, 1076, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6)) __PYX_ERR(0, 1076, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_6 = 0; + __pyx_t_6 = PyObject_RichCompare(__pyx_v_info->step_in_initial_location, __pyx_t_5, Py_NE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1076, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __pyx_t_9; + __pyx_L30_bool_binop_done:; + + /* "_pydevd_sys_monitoring_cython.pyx":1069 + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + * if ( # <<<<<<<<<<<<<< + * # Not filtered out. + * not back_func_code_info.always_skip_code + */ + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1078 + * and info.step_in_initial_location != (frame.f_back, frame.f_back.f_lineno) + * ): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1078, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1078, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1079 + * ): + * if py_db.show_return_values: + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1079, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1078 + * and info.step_in_initial_location != (frame.f_back, frame.f_back.f_lineno) + * ): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1081 + * _show_return_values(frame, retval) + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_info, __pyx_v_step_cmd, __pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1081, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1082 + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + * return # <<<<<<<<<<<<<< + * + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1069 + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + * if ( # <<<<<<<<<<<<<< + * # Not filtered out. + * not back_func_code_info.always_skip_code + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1067 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + * if ( + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1065 + * # Python line stepping + * stop_frame = info.pydev_step_stop + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1084 + * return + * + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * if py_db.show_return_values: + * _show_return_values(frame, retval) + */ + __pyx_t_12 = __pyx_v_step_cmd; + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_9 = __pyx_t_8; + goto __pyx_L40_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_RETURN_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __pyx_t_8; + __pyx_L40_bool_binop_done:; + __pyx_t_8 = __pyx_t_9; + if (__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L38_bool_binop_done; + } + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1084, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __pyx_t_8; + __pyx_L38_bool_binop_done:; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1085 + * + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1085, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1085, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1086 + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + * if py_db.show_return_values: + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1086, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1085 + * + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1088 + * _show_return_values(frame, retval) + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_info, __pyx_v_step_cmd, __pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1088, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1089 + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + * return # <<<<<<<<<<<<<< + * + * elif ( + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1084 + * return + * + * if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * if py_db.show_return_values: + * _show_return_values(frame, retval) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1092 + * + * elif ( + * step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) # <<<<<<<<<<<<<< + * and not info.pydev_use_scoped_step_frame + * and _is_same_frame(info, stop_frame, frame) + */ + __pyx_t_12 = __pyx_v_step_cmd; + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L45_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L45_bool_binop_done:; + __pyx_t_9 = __pyx_t_8; + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L43_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1093 + * elif ( + * step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + * and not info.pydev_use_scoped_step_frame # <<<<<<<<<<<<<< + * and _is_same_frame(info, stop_frame, frame) + * ): + */ + __pyx_t_9 = (!__pyx_v_info->pydev_use_scoped_step_frame); + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L43_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1094 + * step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + * and not info.pydev_use_scoped_step_frame + * and _is_same_frame(info, stop_frame, frame) # <<<<<<<<<<<<<< + * ): + * # This isn't in the sys.settrace version: on a step over, if we return and the return is valid, show + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1094, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1094, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __pyx_t_9; + __pyx_L43_bool_binop_done:; + + /* "_pydevd_sys_monitoring_cython.pyx":1091 + * return + * + * elif ( # <<<<<<<<<<<<<< + * step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + * and not info.pydev_use_scoped_step_frame + */ + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1099 + * # as a step return instead of going back to step into mode (but if the back frame is not valid, then + * # go to step into mode). + * f_back = frame.f_back # <<<<<<<<<<<<<< + * if f_back is not None: + * back_func_code_info = _get_func_code_info(f_back.f_code, 2) + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1099, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_f_back = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1100 + * # go to step into mode). + * f_back = frame.f_back + * if f_back is not None: # <<<<<<<<<<<<<< + * back_func_code_info = _get_func_code_info(f_back.f_code, 2) + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + */ + __pyx_t_10 = (__pyx_v_f_back != Py_None); + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1101 + * f_back = frame.f_back + * if f_back is not None: + * back_func_code_info = _get_func_code_info(f_back.f_code, 2) # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_t_6, __pyx_int_2, 0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_back_func_code_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_5)); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1102 + * if f_back is not None: + * back_func_code_info = _get_func_code_info(f_back.f_code, 2) + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE # <<<<<<<<<<<<<< + * + * if ( + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF_SET(__pyx_v_force_check_project_scope, __pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1105 + * + * if ( + * back_func_code_info is not None # <<<<<<<<<<<<<< + * and not back_func_code_info.always_skip_code + * and not back_func_code_info.always_filtered_out + */ + __pyx_t_9 = (((PyObject *)__pyx_v_back_func_code_info) != Py_None); + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L50_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1106 + * if ( + * back_func_code_info is not None + * and not back_func_code_info.always_skip_code # <<<<<<<<<<<<<< + * and not back_func_code_info.always_filtered_out + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + */ + __pyx_t_9 = (!__pyx_v_back_func_code_info->always_skip_code); + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L50_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1107 + * back_func_code_info is not None + * and not back_func_code_info.always_skip_code + * and not back_func_code_info.always_filtered_out # <<<<<<<<<<<<<< + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + * ): + */ + __pyx_t_9 = (!__pyx_v_back_func_code_info->always_filtered_out); + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L50_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1108 + * and not back_func_code_info.always_skip_code + * and not back_func_code_info.always_filtered_out + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) # <<<<<<<<<<<<<< + * ): + * if py_db.show_return_values: + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_force_check_project_scope); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1108, __pyx_L1_error) + if (__pyx_t_8) { + } else { + __pyx_t_9 = __pyx_t_8; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_9 = __pyx_v_back_func_code_info->filtered_out_force_checked; + __pyx_L54_bool_binop_done:; + __pyx_t_8 = (!__pyx_t_9); + __pyx_t_10 = __pyx_t_8; + __pyx_L50_bool_binop_done:; + + /* "_pydevd_sys_monitoring_cython.pyx":1104 + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + * + * if ( # <<<<<<<<<<<<<< + * back_func_code_info is not None + * and not back_func_code_info.always_skip_code + */ + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1110 + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + * ): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1110, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1111 + * ): + * if py_db.show_return_values: + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1111, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1110 + * and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + * ): + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1113 + * _show_return_values(frame, retval) + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_info, __pyx_v_step_cmd, __pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1113, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1114 + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + * return # <<<<<<<<<<<<<< + * + * elif step_cmd == CMD_SMART_STEP_INTO: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1104 + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + * + * if ( # <<<<<<<<<<<<<< + * back_func_code_info is not None + * and not back_func_code_info.always_skip_code + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1100 + * # go to step into mode). + * f_back = frame.f_back + * if f_back is not None: # <<<<<<<<<<<<<< + * back_func_code_info = _get_func_code_info(f_back.f_code, 2) + * force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1091 + * return + * + * elif ( # <<<<<<<<<<<<<< + * step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + * and not info.pydev_use_scoped_step_frame + */ + goto __pyx_L37; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1116 + * return + * + * elif step_cmd == CMD_SMART_STEP_INTO: # <<<<<<<<<<<<<< + * if _is_same_frame(info, stop_frame, frame): + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1117 + * + * elif step_cmd == CMD_SMART_STEP_INTO: + * if _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * if py_db.show_return_values: + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1119 + * if _is_same_frame(info, stop_frame, frame): + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1120 + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * if py_db.show_return_values: + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1119 + * if _is_same_frame(info, stop_frame, frame): + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1122 + * _show_return_values(frame, retval) + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_info, __pyx_v_step_cmd, __pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1123 + * + * _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + * return # <<<<<<<<<<<<<< + * + * if py_db.show_return_values: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1117 + * + * elif step_cmd == CMD_SMART_STEP_INTO: + * if _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + * if py_db.show_return_values: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1116 + * return + * + * elif step_cmd == CMD_SMART_STEP_INTO: # <<<<<<<<<<<<<< + * if _is_same_frame(info, stop_frame, frame): + * # We're exiting the smart step into initial frame (so, we probably didn't find our target). + */ + } + __pyx_L37:; + + /* "_pydevd_sys_monitoring_cython.pyx":1125 + * return + * + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * if ( + * ( + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1125, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1125, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1128 + * if ( + * ( + * info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) # <<<<<<<<<<<<<< + * and (_is_same_frame(info, stop_frame, frame.f_back)) + * ) + */ + __pyx_t_12 = __pyx_v_info->pydev_step_cmd; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L64_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L64_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1128, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L64_bool_binop_done:; + __pyx_t_9 = __pyx_t_8; + if (!__pyx_t_9) { + goto __pyx_L62_next_or; + } else { + } + + /* "_pydevd_sys_monitoring_cython.pyx":1129 + * ( + * info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + * and (_is_same_frame(info, stop_frame, frame.f_back)) # <<<<<<<<<<<<<< + * ) + * or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (info, _is_same_frame(info, stop_frame, frame))) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1129, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L61_bool_binop_done; + } + __pyx_L62_next_or:; + + /* "_pydevd_sys_monitoring_cython.pyx":1131 + * and (_is_same_frame(info, stop_frame, frame.f_back)) + * ) + * or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (info, _is_same_frame(info, stop_frame, frame))) # <<<<<<<<<<<<<< + * or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) + * or ( + */ + __pyx_t_12 = __pyx_v_info->pydev_step_cmd; + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_9 = __pyx_t_8; + goto __pyx_L69_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_STEP_RETURN_MY_CODE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __pyx_t_8; + __pyx_L69_bool_binop_done:; + __pyx_t_8 = __pyx_t_9; + if (!__pyx_t_8) { + goto __pyx_L67_next_or; + } else { + } + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1131, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF((PyObject *)__pyx_v_info); + __Pyx_GIVEREF((PyObject *)__pyx_v_info); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_info))) __PYX_ERR(0, 1131, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6)) __PYX_ERR(0, 1131, __pyx_L1_error); + __pyx_t_6 = 0; + __pyx_t_8 = (PyTuple_GET_SIZE(__pyx_t_4) != 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L61_bool_binop_done; + } + __pyx_L67_next_or:; + + /* "_pydevd_sys_monitoring_cython.pyx":1132 + * ) + * or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (info, _is_same_frame(info, stop_frame, frame))) + * or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) # <<<<<<<<<<<<<< + * or ( + * info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + */ + __pyx_t_12 = __pyx_v_info->pydev_step_cmd; + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L72_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO_COROUTINE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1132, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L72_bool_binop_done:; + __pyx_t_9 = __pyx_t_8; + if (!__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L61_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1134 + * or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) + * or ( + * info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE # <<<<<<<<<<<<<< + * and frame.f_back is not None + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1134, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1134, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L61_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1135 + * or ( + * info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + * and frame.f_back is not None # <<<<<<<<<<<<<< + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + * ) + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1135, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = (__pyx_t_5 != Py_None); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_9) { + } else { + __pyx_t_10 = __pyx_t_9; + goto __pyx_L61_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1136 + * info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + * and frame.f_back is not None + * and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) # <<<<<<<<<<<<<< + * ) + * ): + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_apply_files_filter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_f_code); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_13); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; + __pyx_t_13 = NULL; + __pyx_t_14 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_13)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_13); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_14 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_t_4, __pyx_t_7, Py_True}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_14, 3+__pyx_t_14); + __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1136, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_8 = (!__pyx_t_9); + __pyx_t_10 = __pyx_t_8; + __pyx_L61_bool_binop_done:; + + /* "_pydevd_sys_monitoring_cython.pyx":1126 + * + * if py_db.show_return_values: + * if ( # <<<<<<<<<<<<<< + * ( + * info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + */ + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1139 + * ) + * ): + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO): + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1139, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1126 + * + * if py_db.show_return_values: + * if ( # <<<<<<<<<<<<<< + * ( + * info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1125 + * return + * + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * if ( + * ( + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1141 + * _show_return_values(frame, retval) + * + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break + * # eventually. Force the step mode to step into and the step stop frame to None. + */ + __pyx_t_12 = __pyx_v_step_cmd; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L77_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L77_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L77_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_RETURN_MY_CODE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_8) { + } else { + __pyx_t_10 = __pyx_t_8; + goto __pyx_L77_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1141, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_10 = __pyx_t_8; + __pyx_L77_bool_binop_done:; + __pyx_t_8 = __pyx_t_10; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1148 + * # Note: this is especially troublesome when we're skipping code with the + * # @DontTrace comment. + * stop_frame = info.pydev_step_stop # <<<<<<<<<<<<<< + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + */ + __pyx_t_7 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_7); + __Pyx_DECREF_SET(__pyx_v_stop_frame, __pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1149 + * # @DontTrace comment. + * stop_frame = info.pydev_step_stop + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + * info.pydev_step_cmd = CMD_STEP_INTO + */ + __pyx_t_10 = (__pyx_v_stop_frame == __pyx_v_frame); + if (__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L83_bool_binop_done; + } + __pyx_t_10 = (!__pyx_v_info->pydev_use_scoped_step_frame); + __pyx_t_8 = __pyx_t_10; + __pyx_L83_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1150 + * stop_frame = info.pydev_step_stop + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * info.pydev_step_cmd = CMD_STEP_INTO + * else: + */ + __pyx_t_12 = __pyx_v_step_cmd; + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L86_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L86_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L86_bool_binop_done:; + __pyx_t_10 = __pyx_t_8; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1151 + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + * info.pydev_step_cmd = CMD_STEP_INTO # <<<<<<<<<<<<<< + * else: + * info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_info->pydev_step_cmd = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1150 + * stop_frame = info.pydev_step_stop + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * info.pydev_step_cmd = CMD_STEP_INTO + * else: + */ + goto __pyx_L85; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1153 + * info.pydev_step_cmd = CMD_STEP_INTO + * else: + * info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE # <<<<<<<<<<<<<< + * info.pydev_step_stop = None + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_info->pydev_step_cmd = __pyx_t_12; + } + __pyx_L85:; + + /* "_pydevd_sys_monitoring_cython.pyx":1154 + * else: + * info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + * info.pydev_step_stop = None # <<<<<<<<<<<<<< + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + * if py_db.show_return_values: + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":1155 + * info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + * info.pydev_step_stop = None + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) # <<<<<<<<<<<<<< + * if py_db.show_return_values: + * _show_return_values(frame, retval) + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_stop_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing_for_frame_and_parents(__pyx_v_thread_info, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1156 + * info.pydev_step_stop = None + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_show_return_values); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1156, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_10) { + + /* "_pydevd_sys_monitoring_cython.pyx":1157 + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + * if py_db.show_return_values: + * _show_return_values(frame, retval) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__show_return_values(__pyx_v_frame, __pyx_v_retval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1156 + * info.pydev_step_stop = None + * _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + * if py_db.show_return_values: # <<<<<<<<<<<<<< + * _show_return_values(frame, retval) + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1149 + * # @DontTrace comment. + * stop_frame = info.pydev_step_stop + * if stop_frame is frame and not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + * info.pydev_step_cmd = CMD_STEP_INTO + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1141 + * _show_return_values(frame, retval) + * + * if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO): # <<<<<<<<<<<<<< + * # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break + * # eventually. Force the step mode to step into and the step stop frame to None. + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1019 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _return_event(code, instruction, retval): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_13); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._return_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF((PyObject *)__pyx_v_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_stop_frame); + __Pyx_XDECREF(__pyx_v_force_check_project_scope); + __Pyx_XDECREF((PyObject *)__pyx_v_back_func_code_info); + __Pyx_XDECREF(__pyx_v_f_back); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1162 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_code_tracing_for_frame_and_parents(ThreadInfo thread_info, frame): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing_for_frame_and_parents(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info, PyObject *__pyx_v_frame) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_enable_code_tracing_for_frame_and_parents", 0); + __Pyx_INCREF(__pyx_v_frame); + + /* "_pydevd_sys_monitoring_cython.pyx":1168 + * # ENDIF + * # fmt: on + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_py_db = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1169 + * # fmt: on + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_4 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_4) { + } else { + __pyx_t_3 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1169, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_3 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_3) { + + /* "_pydevd_sys_monitoring_cython.pyx":1170 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return # <<<<<<<<<<<<<< + * + * while frame is not None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1169 + * # fmt: on + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1172 + * return + * + * while frame is not None: # <<<<<<<<<<<<<< + * func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + * if func_code_info.always_skip_code: + */ + while (1) { + __pyx_t_3 = (__pyx_v_frame != Py_None); + if (!__pyx_t_3) break; + + /* "_pydevd_sys_monitoring_cython.pyx":1173 + * + * while frame is not None: + * func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * frame = frame.f_back + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_t_2, __pyx_v_frame, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_func_code_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1174 + * while frame is not None: + * func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * frame = frame.f_back + * continue + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":1175 + * func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + * if func_code_info.always_skip_code: + * frame = frame.f_back # <<<<<<<<<<<<<< + * continue + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1176 + * if func_code_info.always_skip_code: + * frame = frame.f_back + * continue # <<<<<<<<<<<<<< + * + * _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, frame.f_code, frame, False) + */ + goto __pyx_L6_continue; + + /* "_pydevd_sys_monitoring_cython.pyx":1174 + * while frame is not None: + * func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * frame = frame.f_back + * continue + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1178 + * continue + * + * _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, frame.f_code, frame, False) # <<<<<<<<<<<<<< + * frame = frame.f_back + * + */ + __pyx_t_1 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing(__pyx_v_py_db, ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1), __pyx_v_func_code_info, __pyx_t_2, __pyx_v_frame, 0); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1178, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1179 + * + * _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, frame.f_code, frame, False) + * frame = frame.f_back # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_L6_continue:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1162 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _enable_code_tracing_for_frame_and_parents(ThreadInfo thread_info, frame): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._enable_code_tracing_for_frame_and_parents", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1184 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _stop_on_return(py_db, ThreadInfo thread_info, PyDBAdditionalThreadInfo info, int step_cmd, frame, retval): # <<<<<<<<<<<<<< + * # ELSE + * # def _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__stop_on_return(PyObject *__pyx_v_py_db, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info, struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, int __pyx_v_step_cmd, PyObject *__pyx_v_frame, PyObject *__pyx_v_retval) { + PyObject *__pyx_v_back = NULL; + PyObject *__pyx_v_back_absolute_filename = NULL; + CYTHON_UNUSED PyObject *__pyx_v__ = NULL; + PyObject *__pyx_v_base = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *(*__pyx_t_8)(PyObject *); + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_stop_on_return", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1189 + * # ENDIF + * # fmt: on + * back = frame.f_back # <<<<<<<<<<<<<< + * if back is not None: + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_back = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1190 + * # fmt: on + * back = frame.f_back + * if back is not None: # <<<<<<<<<<<<<< + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + * # (note that it can still go on for other threads, but for this one, we just make it finish) + */ + __pyx_t_2 = (__pyx_v_back != Py_None); + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1194 + * # (note that it can still go on for other threads, but for this one, we just make it finish) + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) # <<<<<<<<<<<<<< + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + * back = None + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_get_abs_path_real_path_and_base_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_back}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1194, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_3 = PyList_GET_ITEM(sequence, 0); + __pyx_t_4 = PyList_GET_ITEM(sequence, 1); + __pyx_t_6 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + index = 1; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 1194, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L5_unpacking_done; + __pyx_L4_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1194, __pyx_L1_error) + __pyx_L5_unpacking_done:; + } + __pyx_v_back_absolute_filename = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v__ = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_base = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1195 + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< + * back = None + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_base); + __Pyx_GIVEREF(__pyx_v_base); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_base)) __PYX_ERR(0, 1195, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_6); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6)) __PYX_ERR(0, 1195, __pyx_L1_error); + __pyx_t_6 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_DEBUG_START); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_2 = __pyx_t_9; + goto __pyx_L7_bool_binop_done; + } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUG_START_PY3K); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_2 = __pyx_t_9; + __pyx_L7_bool_binop_done:; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __pyx_t_2; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1196 + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + * back = None # <<<<<<<<<<<<<< + * + * elif base == TRACE_PROPERTY: + */ + __Pyx_INCREF(Py_None); + __Pyx_DECREF_SET(__pyx_v_back, Py_None); + + /* "_pydevd_sys_monitoring_cython.pyx":1195 + * # So, just setting it to None should be OK + * back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + * if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): # <<<<<<<<<<<<<< + * back = None + * + */ + goto __pyx_L6; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1198 + * back = None + * + * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_TRACE_PROPERTY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyObject_RichCompare(__pyx_v_base, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1198, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1198, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1201 + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + * return # <<<<<<<<<<<<<< + * + * elif pydevd_dont_trace.should_trace_hook is not None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1198 + * back = None + * + * elif base == TRACE_PROPERTY: # <<<<<<<<<<<<<< + * # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + * # if we're in a return, we want it to appear to the user in the previous frame! + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1203 + * return + * + * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_9 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1204 + * + * elif pydevd_dont_trace.should_trace_hook is not None: + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # <<<<<<<<<<<<<< + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + * # Also, we have to reset the tracing, because if the parent's parent (or some + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_should_trace_hook); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_code); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_v_back_absolute_filename}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = (!__pyx_t_9); + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1210 + * # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). + * # Related test: _debugger_case17a.py + * py_db.set_trace_for_frame_and_parents(thread_info.thread_ident, back) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_trace_for_frame_and_parents); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_thread_info->thread_ident); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_v_back}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1211 + * # Related test: _debugger_case17a.py + * py_db.set_trace_for_frame_and_parents(thread_info.thread_ident, back) + * return # <<<<<<<<<<<<<< + * + * if back is not None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1204 + * + * elif pydevd_dont_trace.should_trace_hook is not None: + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): # <<<<<<<<<<<<<< + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + * # Also, we have to reset the tracing, because if the parent's parent (or some + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1203 + * return + * + * elif pydevd_dont_trace.should_trace_hook is not None: # <<<<<<<<<<<<<< + * if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + * # In this case, we'll have to skip the previous one because it shouldn't be traced. + */ + } + __pyx_L6:; + + /* "_pydevd_sys_monitoring_cython.pyx":1190 + * # fmt: on + * back = frame.f_back + * if back is not None: # <<<<<<<<<<<<<< + * # When we get to the pydevd run function, the debugging has actually finished for the main thread + * # (note that it can still go on for other threads, but for this one, we just make it finish) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1213 + * return + * + * if back is not None: # <<<<<<<<<<<<<< + * # if we're in a return, we want it to appear to the user in the previous frame! + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + __pyx_t_2 = (__pyx_v_back != Py_None); + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1215 + * if back is not None: + * # if we're in a return, we want it to appear to the user in the previous frame! + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, back, "return", retval) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1215, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4)) __PYX_ERR(0, 1215, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_original_step_cmd, __pyx_t_3) < 0) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1216 + * # if we're in a return, we want it to appear to the user in the previous frame! + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, back, "return", retval) # <<<<<<<<<<<<<< + * else: + * # in jython we may not have a back frame + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_6, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_back, __pyx_n_s_return, __pyx_v_retval}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1213 + * return + * + * if back is not None: # <<<<<<<<<<<<<< + * # if we're in a return, we want it to appear to the user in the previous frame! + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + goto __pyx_L10; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1219 + * else: + * # in jython we may not have a back frame + * info.pydev_step_stop = None # <<<<<<<<<<<<<< + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 + */ + /*else*/ { + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->pydev_step_stop); + __Pyx_DECREF(__pyx_v_info->pydev_step_stop); + __pyx_v_info->pydev_step_stop = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":1220 + * # in jython we may not have a back frame + * info.pydev_step_stop = None + * info.pydev_original_step_cmd = -1 # <<<<<<<<<<<<<< + * info.pydev_step_cmd = -1 + * info.pydev_state = STATE_RUN + */ + __pyx_v_info->pydev_original_step_cmd = -1; + + /* "_pydevd_sys_monitoring_cython.pyx":1221 + * info.pydev_step_stop = None + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 # <<<<<<<<<<<<<< + * info.pydev_state = STATE_RUN + * info.update_stepping_info() + */ + __pyx_v_info->pydev_step_cmd = -1; + + /* "_pydevd_sys_monitoring_cython.pyx":1222 + * info.pydev_original_step_cmd = -1 + * info.pydev_step_cmd = -1 + * info.pydev_state = STATE_RUN # <<<<<<<<<<<<<< + * info.update_stepping_info() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_STATE_RUN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_info->pydev_state = __pyx_t_10; + + /* "_pydevd_sys_monitoring_cython.pyx":1223 + * info.pydev_step_cmd = -1 + * info.pydev_state = STATE_RUN + * info.update_stepping_info() # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = ((struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_v_info->__pyx_vtab)->update_stepping_info(__pyx_v_info, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L10:; + + /* "_pydevd_sys_monitoring_cython.pyx":1184 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _stop_on_return(py_db, ThreadInfo thread_info, PyDBAdditionalThreadInfo info, int step_cmd, frame, retval): # <<<<<<<<<<<<<< + * # ELSE + * # def _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._stop_on_return", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_back); + __Pyx_XDECREF(__pyx_v_back_absolute_filename); + __Pyx_XDECREF(__pyx_v__); + __Pyx_XDECREF(__pyx_v_base); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1228 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _stop_on_breakpoint(py_db, ThreadInfo thread_info, int stop_reason, bp, frame, new_frame, bint stop, bint stop_on_plugin_breakpoint, str bp_type): # <<<<<<<<<<<<<< + * cdef PyDBAdditionalThreadInfo additional_info + * # ELSE + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(PyObject *__pyx_v_py_db, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info, int __pyx_v_stop_reason, PyObject *__pyx_v_bp, PyObject *__pyx_v_frame, PyObject *__pyx_v_new_frame, int __pyx_v_stop, int __pyx_v_stop_on_plugin_breakpoint, PyObject *__pyx_v_bp_type) { + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_additional_info = 0; + PyObject *__pyx_v_eval_result = NULL; + PyObject *__pyx_v_cmd = NULL; + PyObject *__pyx_v_stop_at_frame = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_stop_on_breakpoint", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1247 + * Note that even if False is returned, it's still possible + * """ + * additional_info = thread_info.additional_info # <<<<<<<<<<<<<< + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here + */ + __pyx_t_1 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1250 + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here + * if bp.expression is not None: # <<<<<<<<<<<<<< + * # If it has an expression, it's always handled even if we don't stop. + * py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_expression); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1250, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__pyx_t_1 != Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1252 + * if bp.expression is not None: + * # If it has an expression, it's always handled even if we don't stop. + * py_db.handle_breakpoint_expression(bp, additional_info, new_frame) # <<<<<<<<<<<<<< + * + * if stop or stop_on_plugin_breakpoint: + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_expression); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_bp, ((PyObject *)__pyx_v_additional_info), __pyx_v_new_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1252, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1250 + * # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + * # lets do the conditional stuff here + * if bp.expression is not None: # <<<<<<<<<<<<<< + * # If it has an expression, it's always handled even if we don't stop. + * py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1254 + * py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + * + * if stop or stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * if bp.has_condition: + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + */ + if (!__pyx_v_stop) { + } else { + __pyx_t_2 = __pyx_v_stop; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = __pyx_v_stop_on_plugin_breakpoint; + __pyx_L5_bool_binop_done:; + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1255 + * + * if stop or stop_on_plugin_breakpoint: + * if bp.has_condition: # <<<<<<<<<<<<<< + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + * if not eval_result: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_has_condition); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1255, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1255, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1256 + * if stop or stop_on_plugin_breakpoint: + * if bp.has_condition: + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) # <<<<<<<<<<<<<< + * if not eval_result: + * stop = False + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_handle_breakpoint_condition); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_4, ((PyObject *)__pyx_v_additional_info), __pyx_v_bp, __pyx_v_new_frame}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v_eval_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1257 + * if bp.has_condition: + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + * if not eval_result: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_eval_result); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1257, __pyx_L1_error) + __pyx_t_6 = (!__pyx_t_2); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1258 + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + * if not eval_result: + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1259 + * if not eval_result: + * stop = False + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + * + * # Handle logpoint (on a logpoint we should never stop). + */ + __pyx_v_stop_on_plugin_breakpoint = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1257 + * if bp.has_condition: + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + * if not eval_result: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1255 + * + * if stop or stop_on_plugin_breakpoint: + * if bp.has_condition: # <<<<<<<<<<<<<< + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + * if not eval_result: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1254 + * py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + * + * if stop or stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * if bp.has_condition: + * eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1262 + * + * # Handle logpoint (on a logpoint we should never stop). + * if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + if (!__pyx_v_stop) { + } else { + goto __pyx_L11_next_and; + } + if (__pyx_v_stop_on_plugin_breakpoint) { + } else { + __pyx_t_6 = __pyx_v_stop_on_plugin_breakpoint; + goto __pyx_L10_bool_binop_done; + } + __pyx_L11_next_and:; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_is_logpoint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1262, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __pyx_t_2; + __pyx_L10_bool_binop_done:; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1263 + * # Handle logpoint (on a logpoint we should never stop). + * if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1264 + * if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: + * stop = False + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + * + * if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: + */ + __pyx_v_stop_on_plugin_breakpoint = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1266 + * stop_on_plugin_breakpoint = False + * + * if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) + */ + __pyx_t_2 = (__pyx_v_additional_info->pydev_message != ((PyObject*)Py_None)); + if (__pyx_t_2) { + } else { + __pyx_t_6 = __pyx_t_2; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_1 = __pyx_v_additional_info->pydev_message; + __Pyx_INCREF(__pyx_t_1); + __pyx_t_7 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1266, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_2 = (__pyx_t_7 > 0); + __pyx_t_6 = __pyx_t_2; + __pyx_L14_bool_binop_done:; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1267 + * + * if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: + * cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") # <<<<<<<<<<<<<< + * py_db.writer.add_command(cmd) + * + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_cmd_factory); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_make_io_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linesep); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Add(__pyx_v_additional_info->pydev_message, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_3, __pyx_kp_s_1}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_cmd = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1268 + * if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: + * cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) # <<<<<<<<<<<<<< + * + * if stop: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_writer); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_add_command); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_cmd}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1266 + * stop_on_plugin_breakpoint = False + * + * if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: # <<<<<<<<<<<<<< + * cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") + * py_db.writer.add_command(cmd) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1262 + * + * # Handle logpoint (on a logpoint we should never stop). + * if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1270 + * py_db.writer.add_command(cmd) + * + * if stop: # <<<<<<<<<<<<<< + * py_db.set_suspend( + * thread_info.thread, + */ + if (__pyx_v_stop) { + + /* "_pydevd_sys_monitoring_cython.pyx":1271 + * + * if stop: + * py_db.set_suspend( # <<<<<<<<<<<<<< + * thread_info.thread, + * stop_reason, + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "_pydevd_sys_monitoring_cython.pyx":1273 + * py_db.set_suspend( + * thread_info.thread, + * stop_reason, # <<<<<<<<<<<<<< + * suspend_other_threads=bp and bp.suspend_policy == "ALL", + * ) + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_stop_reason); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "_pydevd_sys_monitoring_cython.pyx":1271 + * + * if stop: + * py_db.set_suspend( # <<<<<<<<<<<<<< + * thread_info.thread, + * stop_reason, + */ + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1271, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3)) __PYX_ERR(0, 1271, __pyx_L1_error); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1274 + * thread_info.thread, + * stop_reason, + * suspend_other_threads=bp and bp.suspend_policy == "ALL", # <<<<<<<<<<<<<< + * ) + * # print('suspend on breakpoint...') + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_bp); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1274, __pyx_L1_error) + if (__pyx_t_6) { + } else { + __Pyx_INCREF(__pyx_v_bp); + __pyx_t_8 = __pyx_v_bp; + goto __pyx_L17_bool_binop_done; + } + __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_bp, __pyx_n_s_suspend_policy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1274, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_n_s_ALL, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1274, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_INCREF(__pyx_t_10); + __pyx_t_8 = __pyx_t_10; + __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; + __pyx_L17_bool_binop_done:; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_suspend_other_threads, __pyx_t_8) < 0) __PYX_ERR(0, 1274, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1271 + * + * if stop: + * py_db.set_suspend( # <<<<<<<<<<<<<< + * thread_info.thread, + * stop_reason, + */ + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1271, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1277 + * ) + * # print('suspend on breakpoint...') + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * return True + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_4, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1277, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1278 + * # print('suspend on breakpoint...') + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return True # <<<<<<<<<<<<<< + * + * elif stop_on_plugin_breakpoint: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1270 + * py_db.writer.add_command(cmd) + * + * if stop: # <<<<<<<<<<<<<< + * py_db.set_suspend( + * thread_info.thread, + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1280 + * return True + * + * elif stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + */ + if (__pyx_v_stop_on_plugin_breakpoint) { + + /* "_pydevd_sys_monitoring_cython.pyx":1281 + * + * elif stop_on_plugin_breakpoint: + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) # <<<<<<<<<<<<<< + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + * _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_py_db, __pyx_v_thread_info->thread, __pyx_v_frame, __pyx_v_bp_type}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_stop_at_frame = __pyx_t_8; + __pyx_t_8 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1282 + * elif stop_on_plugin_breakpoint: + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + * return + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_stop_at_frame); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1282, __pyx_L1_error) + if (__pyx_t_2) { + } else { + __pyx_t_6 = __pyx_t_2; + goto __pyx_L20_bool_binop_done; + } + __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_thread_info->additional_info->pydev_state); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1282, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_STATE_SUSPEND); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1282, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_8, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1282, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1282, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __pyx_t_2; + __pyx_L20_bool_binop_done:; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1283 + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + * _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1283, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_8, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_stop_at_frame, __pyx_n_s_line, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 5+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1283, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1282 + * elif stop_on_plugin_breakpoint: + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1284 + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + * _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + * return # <<<<<<<<<<<<<< + * + * return False + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1280 + * return True + * + * elif stop_on_plugin_breakpoint: # <<<<<<<<<<<<<< + * stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + * if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1286 + * return + * + * return False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1228 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _stop_on_breakpoint(py_db, ThreadInfo thread_info, int stop_reason, bp, frame, new_frame, bint stop, bint stop_on_plugin_breakpoint, str bp_type): # <<<<<<<<<<<<<< + * cdef PyDBAdditionalThreadInfo additional_info + * # ELSE + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._stop_on_breakpoint", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_additional_info); + __Pyx_XDECREF(__pyx_v_eval_result); + __Pyx_XDECREF(__pyx_v_cmd); + __Pyx_XDECREF(__pyx_v_stop_at_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1291 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _plugin_stepping(py_db, int step_cmd, event, frame, ThreadInfo thread_info): # <<<<<<<<<<<<<< + * cdef bint stop + * cdef dict stop_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__plugin_stepping(PyObject *__pyx_v_py_db, int __pyx_v_step_cmd, PyObject *__pyx_v_event, PyObject *__pyx_v_frame, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info) { + int __pyx_v_stop; + PyObject *__pyx_v_stop_info = 0; + PyObject *__pyx_v_plugin_manager = NULL; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_plugin_stop = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + PyObject *(*__pyx_t_10)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_plugin_stepping", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1298 + * # ENDIF + * # fmt: on + * plugin_manager = py_db.plugin # <<<<<<<<<<<<<< + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1298, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_plugin_manager = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1300 + * plugin_manager = py_db.plugin + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( # <<<<<<<<<<<<<< + * CMD_STEP_RETURN, + * CMD_STEP_RETURN_MY_CODE, + */ + __pyx_t_3 = __pyx_v_step_cmd; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_4 = __pyx_t_7; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_4 = __pyx_t_7; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_INTO_COROUTINE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_7) { + } else { + __pyx_t_4 = __pyx_t_7; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __pyx_t_7; + __pyx_L6_bool_binop_done:; + __pyx_t_7 = __pyx_t_4; + if (!__pyx_t_7) { + } else { + __pyx_t_2 = __pyx_t_7; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = __pyx_v_step_cmd; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "_pydevd_sys_monitoring_cython.pyx":1301 + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( + * CMD_STEP_RETURN, # <<<<<<<<<<<<<< + * CMD_STEP_RETURN_MY_CODE, + * ): + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_RETURN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1300 + * plugin_manager = py_db.plugin + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( # <<<<<<<<<<<<<< + * CMD_STEP_RETURN, + * CMD_STEP_RETURN_MY_CODE, + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_4) { + } else { + __pyx_t_7 = __pyx_t_4; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":1302 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( + * CMD_STEP_RETURN, + * CMD_STEP_RETURN_MY_CODE, # <<<<<<<<<<<<<< + * ): + * stop_info = {} + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_CMD_STEP_RETURN_MY_CODE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1300 + * plugin_manager = py_db.plugin + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( # <<<<<<<<<<<<<< + * CMD_STEP_RETURN, + * CMD_STEP_RETURN_MY_CODE, + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = __pyx_t_4; + __pyx_L10_bool_binop_done:; + __pyx_t_4 = __pyx_t_7; + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1304 + * CMD_STEP_RETURN_MY_CODE, + * ): + * stop_info = {} # <<<<<<<<<<<<<< + * stop = False + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1304, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_stop_info = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1305 + * ): + * stop_info = {} + * stop = False # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1306 + * stop_info = {} + * stop = False + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) # <<<<<<<<<<<<<< + * if result: + * stop, plugin_stop = result + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_into); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, ((PyObject *)__pyx_v_thread_info->additional_info), __pyx_v_thread_info->thread, __pyx_v_stop_info, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_9, 7+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1306, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1307 + * stop = False + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * if plugin_stop: + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1307, __pyx_L1_error) + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1308 + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: + * stop, plugin_stop = result # <<<<<<<<<<<<<< + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1308, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_1 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); + index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + index = 1; __pyx_t_5 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L13_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_6), 2) < 0) __PYX_ERR(0, 1308, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L14_unpacking_done; + __pyx_L13_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1308, __pyx_L1_error) + __pyx_L14_unpacking_done:; + } + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1308, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_stop = __pyx_t_2; + __pyx_v_plugin_stop = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1309 + * if result: + * stop, plugin_stop = result + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_plugin_stop); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1309, __pyx_L1_error) + if (__pyx_t_2) { + + /* "_pydevd_sys_monitoring_cython.pyx":1310 + * stop, plugin_stop = result + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_stop); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_v_thread_info->thread, __pyx_v_stop_info, Py_None, __pyx_t_6}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 7+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1311 + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return # <<<<<<<<<<<<<< + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1309 + * if result: + * stop, plugin_stop = result + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1307 + * stop = False + * result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * if plugin_stop: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1300 + * plugin_manager = py_db.plugin + * # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( # <<<<<<<<<<<<<< + * CMD_STEP_RETURN, + * CMD_STEP_RETURN_MY_CODE, + */ + goto __pyx_L3; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1313 + * return + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * if plugin_manager is not None: + * stop_info = {} + */ + __pyx_t_3 = __pyx_v_step_cmd; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1313, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_2 = __pyx_t_4; + __pyx_L16_bool_binop_done:; + __pyx_t_4 = __pyx_t_2; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1314 + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * stop_info = {} + * stop = False + */ + __pyx_t_4 = (__pyx_v_plugin_manager != Py_None); + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1315 + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if plugin_manager is not None: + * stop_info = {} # <<<<<<<<<<<<<< + * stop = False + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + */ + __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_v_stop_info = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1316 + * if plugin_manager is not None: + * stop_info = {} + * stop = False # <<<<<<<<<<<<<< + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1317 + * stop_info = {} + * stop = False + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) # <<<<<<<<<<<<<< + * if result: + * stop, plugin_stop = result + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_cmd_step_over); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_stop); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, ((PyObject *)__pyx_v_thread_info->additional_info), __pyx_v_thread_info->thread, __pyx_v_stop_info, __pyx_t_6}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_9, 7+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_v_result = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1318 + * stop = False + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * if plugin_stop: + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1318, __pyx_L1_error) + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1319 + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: + * stop, plugin_stop = result # <<<<<<<<<<<<<< + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1319, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_5 = PyList_GET_ITEM(sequence, 0); + __pyx_t_1 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + #else + __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_6 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1319, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); + index = 0; __pyx_t_5 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L20_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 1; __pyx_t_1 = __pyx_t_10(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L20_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_6), 2) < 0) __PYX_ERR(0, 1319, __pyx_L1_error) + __pyx_t_10 = NULL; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L21_unpacking_done; + __pyx_L20_unpacking_failed:; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1319, __pyx_L1_error) + __pyx_L21_unpacking_done:; + } + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1319, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_stop = __pyx_t_4; + __pyx_v_plugin_stop = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1320 + * if result: + * stop, plugin_stop = result + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_plugin_stop); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1320, __pyx_L1_error) + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1321 + * stop, plugin_stop = result + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_stop); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[8] = {__pyx_t_8, __pyx_v_py_db, __pyx_v_frame, __pyx_v_event, __pyx_v_thread_info->thread, __pyx_v_stop_info, Py_None, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_9, 7+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1322 + * if plugin_stop: + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1320 + * if result: + * stop, plugin_stop = result + * if plugin_stop: # <<<<<<<<<<<<<< + * plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1318 + * stop = False + * result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + * if result: # <<<<<<<<<<<<<< + * stop, plugin_stop = result + * if plugin_stop: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1314 + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + * if plugin_manager is not None: # <<<<<<<<<<<<<< + * stop_info = {} + * stop = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1313 + * return + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * if plugin_manager is not None: + * stop_info = {} + */ + } + __pyx_L3:; + + /* "_pydevd_sys_monitoring_cython.pyx":1291 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _plugin_stepping(py_db, int step_cmd, event, frame, ThreadInfo thread_info): # <<<<<<<<<<<<<< + * cdef bint stop + * cdef dict stop_info + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._plugin_stepping", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_stop_info); + __Pyx_XDECREF(__pyx_v_plugin_manager); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_plugin_stop); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1327 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _jump_event(code, int from_offset, int to_offset): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__jump_event(PyObject *__pyx_v_code, int __pyx_v_from_offset, int __pyx_v_to_offset) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + int __pyx_v_from_line; + int __pyx_v_to_line; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_t_12; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_jump_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1339 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1340 + * # needs to be per-thread. + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1340, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1340, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1340, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1339 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1341 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._jump_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 1341, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":1342 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1342, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1342, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1343 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1344 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1343 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1339 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1346 + * return + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1347 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + __pyx_t_9 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1347, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1347, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1348 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1347 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1350 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1350, __pyx_L1_error) + __pyx_t_10 = (!__pyx_t_9); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1350, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1350, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1353 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1350 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1355 + * return + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: + * return monitor.DISABLE + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_int_1, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1356 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + if (!__pyx_v_func_code_info->always_skip_code) { + } else { + __pyx_t_8 = __pyx_v_func_code_info->always_skip_code; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_8 = __pyx_v_func_code_info->always_filtered_out; + __pyx_L19_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1357 + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * # Same logic as "sys_trace_jump_func" in https://github.com/python/cpython/blob/main/Python/legacy_tracing.c + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_monitor); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1356 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1363 + * # Ignore forward jump. + * # print('jump event', code.co_name, 'from offset', from_offset, 'to offset', to_offset) + * if to_offset > from_offset: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + __pyx_t_8 = (__pyx_v_to_offset > __pyx_v_from_offset); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1364 + * # print('jump event', code.co_name, 'from offset', from_offset, 'to offset', to_offset) + * if to_offset > from_offset: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * from_line = func_code_info.get_line_of_offset(from_offset) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1364, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1364, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1363 + * # Ignore forward jump. + * # print('jump event', code.co_name, 'from offset', from_offset, 'to offset', to_offset) + * if to_offset > from_offset: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1366 + * return monitor.DISABLE + * + * from_line = func_code_info.get_line_of_offset(from_offset) # <<<<<<<<<<<<<< + * to_line = func_code_info.get_line_of_offset(to_offset) + * # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_func_code_info), __pyx_n_s_get_line_of_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_from_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_from_line = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1367 + * + * from_line = func_code_info.get_line_of_offset(from_offset) + * to_line = func_code_info.get_line_of_offset(to_offset) # <<<<<<<<<<<<<< + * # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_func_code_info), __pyx_n_s_get_line_of_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_to_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1367, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_to_line = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1370 + * # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + * + * if from_line != to_line: # <<<<<<<<<<<<<< + * # I.e.: use case: "yield from [j for j in a if j % 2 == 0]" + * return monitor.DISABLE + */ + __pyx_t_8 = (__pyx_v_from_line != __pyx_v_to_line); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1372 + * if from_line != to_line: + * # I.e.: use case: "yield from [j for j in a if j % 2 == 0]" + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * # We know the frame depth. + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_monitor); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1370 + * # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + * + * if from_line != to_line: # <<<<<<<<<<<<<< + * # I.e.: use case: "yield from [j for j in a if j % 2 == 0]" + * return monitor.DISABLE + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1375 + * + * # We know the frame depth. + * frame = _getframe(1) # <<<<<<<<<<<<<< + * + * # Disable the next line event as we're jumping to a line. The line event will be redundant. + */ + __pyx_t_13.__pyx_n = 1; + __pyx_t_13.depth = __pyx_int_1; + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1375, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_frame = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1378 + * + * # Disable the next line event as we're jumping to a line. The line event will be redundant. + * _thread_local_info.f_disable_next_line_if_match = frame.f_lineno # <<<<<<<<<<<<<< + * + * return _internal_line_event(func_code_info, frame, frame.f_lineno) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1378, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1378, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_f_disable_next_line_if_match, __pyx_t_4) < 0) __PYX_ERR(0, 1378, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1380 + * _thread_local_info.f_disable_next_line_if_match = frame.f_lineno + * + * return _internal_line_event(func_code_info, frame, frame.f_lineno) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__internal_line_event(__pyx_v_func_code_info, __pyx_v_frame, __pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1327 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _jump_event(code, int from_offset, int to_offset): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._jump_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1385 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _line_event(code, int line): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__line_event(PyObject *__pyx_v_code, int __pyx_v_line) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_frame = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_line_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1396 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1397 + * # needs to be per-thread. + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1397, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1397, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1397, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1396 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1398 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._line_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 1398, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":1399 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1399, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1399, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1400 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1401 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1400 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1396 + * # everything is global, yet, when we start tracing something for stepping that + * # needs to be per-thread. + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1403 + * return + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1404 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + __pyx_t_9 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1404, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1405 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1404 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1407 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1407, __pyx_L1_error) + __pyx_t_10 = (!__pyx_t_9); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1407, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1410 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * if hasattr(_thread_local_info, "f_disable_next_line_if_match"): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1407 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1412 + * return + * + * if hasattr(_thread_local_info, "f_disable_next_line_if_match"): # <<<<<<<<<<<<<< + * if _thread_local_info.f_disable_next_line_if_match is line: + * # If we're in a jump, we should skip this line event. The jump would have + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = __Pyx_HasAttr(__pyx_t_6, __pyx_n_s_f_disable_next_line_if_match); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1413 + * + * if hasattr(_thread_local_info, "f_disable_next_line_if_match"): + * if _thread_local_info.f_disable_next_line_if_match is line: # <<<<<<<<<<<<<< + * # If we're in a jump, we should skip this line event. The jump would have + * # been considered a line event for this same line and we don't want to + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_f_disable_next_line_if_match); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = (__pyx_t_4 == __pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1417 + * # been considered a line event for this same line and we don't want to + * # stop twice. + * del _thread_local_info.f_disable_next_line_if_match # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__Pyx_PyObject_DelAttrStr(__pyx_t_6, __pyx_n_s_f_disable_next_line_if_match) < 0) __PYX_ERR(0, 1417, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1418 + * # stop twice. + * del _thread_local_info.f_disable_next_line_if_match + * return # <<<<<<<<<<<<<< + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1413 + * + * if hasattr(_thread_local_info, "f_disable_next_line_if_match"): + * if _thread_local_info.f_disable_next_line_if_match is line: # <<<<<<<<<<<<<< + * # If we're in a jump, we should skip this line event. The jump would have + * # been considered a line event for this same line and we don't want to + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1412 + * return + * + * if hasattr(_thread_local_info, "f_disable_next_line_if_match"): # <<<<<<<<<<<<<< + * if _thread_local_info.f_disable_next_line_if_match is line: + * # If we're in a jump, we should skip this line event. The jump would have + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1420 + * return + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: + * return monitor.DISABLE + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_int_1, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1420, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1421 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + if (!__pyx_v_func_code_info->always_skip_code) { + } else { + __pyx_t_8 = __pyx_v_func_code_info->always_skip_code; + goto __pyx_L21_bool_binop_done; + } + __pyx_t_8 = __pyx_v_func_code_info->always_filtered_out; + __pyx_L21_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1422 + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * # print('line event', code.co_name, line) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_monitor); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1421 + * + * func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + * if func_code_info.always_skip_code or func_code_info.always_filtered_out: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1427 + * + * # We know the frame depth. + * frame = _getframe(1) # <<<<<<<<<<<<<< + * return _internal_line_event(func_code_info, frame, line) + * + */ + __pyx_t_11.__pyx_n = 1; + __pyx_t_11.depth = __pyx_int_1; + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_frame = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1428 + * # We know the frame depth. + * frame = _getframe(1) + * return _internal_line_event(func_code_info, frame, line) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__internal_line_event(__pyx_v_func_code_info, __pyx_v_frame, __pyx_v_line); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1385 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _line_event(code, int line): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._line_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1433 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _internal_line_event(FuncCodeInfo func_code_info, frame, int line): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef PyDBAdditionalThreadInfo info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__internal_line_event(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info, PyObject *__pyx_v_frame, int __pyx_v_line) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + int __pyx_v_step_cmd; + int __pyx_v_stop; + int __pyx_v_stop_on_plugin_breakpoint; + int __pyx_v_stop_reason; + int __pyx_v_force_check_project_scope; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_bp = NULL; + CYTHON_UNUSED PyObject *__pyx_v_stop_info = NULL; + PyObject *__pyx_v_bp_type = NULL; + PyObject *__pyx_v_new_frame = NULL; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_stop_frame = NULL; + PyObject *__pyx_v_filename = NULL; + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_f2 = NULL; + PyObject *__pyx_v_back = NULL; + int __pyx_v_pydev_smart_parent_offset; + PyObject *__pyx_v_pydev_smart_step_into_variants = NULL; + PyObject *__pyx_v_curr_func_name = NULL; + int __pyx_v_pydev_smart_child_offset; + PyObject *__pyx_v_smart_step_into_variant = NULL; + PyObject *__pyx_v_children_variants = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *(*__pyx_t_8)(PyObject *); + int __pyx_t_9; + PyObject *__pyx_t_10 = NULL; + int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_internal_line_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1445 + * # ENDIF + * # fmt: on + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * info = thread_info.additional_info + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1445, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_py_db = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1446 + * # fmt: on + * py_db: object = GlobalDebuggerHolder.global_dbg + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * info = thread_info.additional_info + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1446, __pyx_L1_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1447 + * py_db: object = GlobalDebuggerHolder.global_dbg + * thread_info = _thread_local_info.thread_info + * info = thread_info.additional_info # <<<<<<<<<<<<<< + * + * step_cmd = info.pydev_step_cmd + */ + __pyx_t_1 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_1); + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1449 + * info = thread_info.additional_info + * + * step_cmd = info.pydev_step_cmd # <<<<<<<<<<<<<< + * + * # print('line event', info, id(info), thread_info.thread.name) + */ + __pyx_t_3 = __pyx_v_info->pydev_step_cmd; + __pyx_v_step_cmd = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1455 + * # If we reached here, it was not filtered out. + * + * if func_code_info.breakpoint_found: # <<<<<<<<<<<<<< + * bp = None + * stop = False + */ + if (__pyx_v_func_code_info->breakpoint_found) { + + /* "_pydevd_sys_monitoring_cython.pyx":1456 + * + * if func_code_info.breakpoint_found: + * bp = None # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = False + */ + __Pyx_INCREF(Py_None); + __pyx_v_bp = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":1457 + * if func_code_info.breakpoint_found: + * bp = None + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1458 + * bp = None + * stop = False + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + * + * stop_info = {} + */ + __pyx_v_stop_on_plugin_breakpoint = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1460 + * stop_on_plugin_breakpoint = False + * + * stop_info = {} # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_BREAK + * bp_type = None + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_stop_info = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1461 + * + * stop_info = {} + * stop_reason = CMD_SET_BREAK # <<<<<<<<<<<<<< + * bp_type = None + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_SET_BREAK); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1461, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1461, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_stop_reason = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1462 + * stop_info = {} + * stop_reason = CMD_SET_BREAK + * bp_type = None # <<<<<<<<<<<<<< + * + * bp = func_code_info.bp_line_to_breakpoint.get(line) + */ + __Pyx_INCREF(Py_None); + __pyx_v_bp_type = Py_None; + + /* "_pydevd_sys_monitoring_cython.pyx":1464 + * bp_type = None + * + * bp = func_code_info.bp_line_to_breakpoint.get(line) # <<<<<<<<<<<<<< + * if bp is not None: + * new_frame = frame + */ + if (unlikely(__pyx_v_func_code_info->bp_line_to_breakpoint == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 1464, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_func_code_info->bp_line_to_breakpoint, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_bp, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1465 + * + * bp = func_code_info.bp_line_to_breakpoint.get(line) + * if bp is not None: # <<<<<<<<<<<<<< + * new_frame = frame + * stop = True + */ + __pyx_t_4 = (__pyx_v_bp != Py_None); + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1466 + * bp = func_code_info.bp_line_to_breakpoint.get(line) + * if bp is not None: + * new_frame = frame # <<<<<<<<<<<<<< + * stop = True + * + */ + __Pyx_INCREF(__pyx_v_frame); + __pyx_v_new_frame = __pyx_v_frame; + + /* "_pydevd_sys_monitoring_cython.pyx":1467 + * if bp is not None: + * new_frame = frame + * stop = True # <<<<<<<<<<<<<< + * + * if bp: + */ + __pyx_v_stop = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1465 + * + * bp = func_code_info.bp_line_to_breakpoint.get(line) + * if bp is not None: # <<<<<<<<<<<<<< + * new_frame = frame + * stop = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1469 + * stop = True + * + * if bp: # <<<<<<<<<<<<<< + * if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): + * return + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_bp); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1469, __pyx_L1_error) + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1470 + * + * if bp: + * if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): # <<<<<<<<<<<<<< + * return + * + */ + if (unlikely(!__pyx_v_new_frame)) { __Pyx_RaiseUnboundLocalError("new_frame"); __PYX_ERR(0, 1470, __pyx_L1_error) } + __pyx_t_2 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_stop_reason, __pyx_v_bp, __pyx_v_frame, __pyx_v_new_frame, __pyx_v_stop, __pyx_v_stop_on_plugin_breakpoint, __pyx_kp_s_python_line); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1470, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1470, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1471 + * if bp: + * if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): + * return # <<<<<<<<<<<<<< + * + * if func_code_info.plugin_line_breakpoint_found: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1470 + * + * if bp: + * if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1469 + * stop = True + * + * if bp: # <<<<<<<<<<<<<< + * if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1455 + * # If we reached here, it was not filtered out. + * + * if func_code_info.breakpoint_found: # <<<<<<<<<<<<<< + * bp = None + * stop = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1473 + * return + * + * if func_code_info.plugin_line_breakpoint_found: # <<<<<<<<<<<<<< + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + * if result: + */ + if (__pyx_v_func_code_info->plugin_line_breakpoint_found) { + + /* "_pydevd_sys_monitoring_cython.pyx":1474 + * + * if func_code_info.plugin_line_breakpoint_found: + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) # <<<<<<<<<<<<<< + * if result: + * stop_reason = CMD_SET_BREAK + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get_breakpoint); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_1, __pyx_v_py_db, __pyx_v_frame, __pyx_n_s_line, ((PyObject *)__pyx_v_info)}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 4+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_v_result = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1475 + * if func_code_info.plugin_line_breakpoint_found: + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + * if result: # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_BREAK + * stop = False + */ + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1475, __pyx_L1_error) + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1476 + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + * if result: + * stop_reason = CMD_SET_BREAK # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = True + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CMD_SET_BREAK); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1476, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1476, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_stop_reason = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1477 + * if result: + * stop_reason = CMD_SET_BREAK + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1478 + * stop_reason = CMD_SET_BREAK + * stop = False + * stop_on_plugin_breakpoint = True # <<<<<<<<<<<<<< + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + */ + __pyx_v_stop_on_plugin_breakpoint = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1479 + * stop = False + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result # <<<<<<<<<<<<<< + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + * return + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1479, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_5 = PyList_GET_ITEM(sequence, 1); + __pyx_t_1 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + index = 2; __pyx_t_1 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed; + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 1479, __pyx_L1_error) + __pyx_t_8 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L10_unpacking_done; + __pyx_L9_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_8 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1479, __pyx_L1_error) + __pyx_L10_unpacking_done:; + } + __Pyx_XDECREF_SET(__pyx_v_bp, __pyx_t_2); + __pyx_t_2 = 0; + __Pyx_XDECREF_SET(__pyx_v_new_frame, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_XDECREF_SET(__pyx_v_bp_type, __pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1480 + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) # <<<<<<<<<<<<<< + * return + * + */ + if (!(likely(PyString_CheckExact(__pyx_v_bp_type))||((__pyx_v_bp_type) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_bp_type))) __PYX_ERR(0, 1480, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_stop_reason, __pyx_v_bp, __pyx_v_frame, __pyx_v_new_frame, __pyx_v_stop, __pyx_v_stop_on_plugin_breakpoint, ((PyObject*)__pyx_v_bp_type)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1481 + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + * return # <<<<<<<<<<<<<< + * + * if info.pydev_state == STATE_SUSPEND: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1475 + * if func_code_info.plugin_line_breakpoint_found: + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + * if result: # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_BREAK + * stop = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1473 + * return + * + * if func_code_info.plugin_line_breakpoint_found: # <<<<<<<<<<<<<< + * result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + * if result: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1483 + * return + * + * if info.pydev_state == STATE_SUSPEND: # <<<<<<<<<<<<<< + * # Note: it's possible that it was suspended with a pause (and we'd stop here too). + * # print('suspend (pause)...') + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_state); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_STATE_SUSPEND); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1483, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1483, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1486 + * # Note: it's possible that it was suspended with a pause (and we'd stop here too). + * # print('suspend (pause)...') + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_1, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 5+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1487 + * # print('suspend (pause)...') + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return # <<<<<<<<<<<<<< + * + * # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1483 + * return + * + * if info.pydev_state == STATE_SUSPEND: # <<<<<<<<<<<<<< + * # Note: it's possible that it was suspended with a pause (and we'd stop here too). + * # print('suspend (pause)...') + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1490 + * + * # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + * stop_frame = info.pydev_step_stop # <<<<<<<<<<<<<< + * if step_cmd == -1: + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + */ + __pyx_t_2 = __pyx_v_info->pydev_step_stop; + __Pyx_INCREF(__pyx_t_2); + __pyx_v_stop_frame = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1491 + * # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + * stop_frame = info.pydev_step_stop + * if step_cmd == -1: # <<<<<<<<<<<<<< + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + * return None + */ + __pyx_t_4 = (__pyx_v_step_cmd == -1L); + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1492 + * stop_frame = info.pydev_step_stop + * if step_cmd == -1: + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): # <<<<<<<<<<<<<< + * return None + * + */ + if (!__pyx_v_func_code_info->breakpoint_found) { + } else { + __pyx_t_4 = __pyx_v_func_code_info->breakpoint_found; + goto __pyx_L14_bool_binop_done; + } + if (!__pyx_v_func_code_info->plugin_line_breakpoint_found) { + } else { + __pyx_t_4 = __pyx_v_func_code_info->plugin_line_breakpoint_found; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_9 = __pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping(0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1492, __pyx_L1_error) + __pyx_t_4 = __pyx_t_9; + __pyx_L14_bool_binop_done:; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1493 + * if step_cmd == -1: + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + * return None # <<<<<<<<<<<<<< + * + * return monitor.DISABLE + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1492 + * stop_frame = info.pydev_step_stop + * if step_cmd == -1: + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1495 + * return None + * + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * if info.suspend_type != PYTHON_SUSPEND: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1491 + * # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + * stop_frame = info.pydev_step_stop + * if step_cmd == -1: # <<<<<<<<<<<<<< + * if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + * return None + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1497 + * return monitor.DISABLE + * + * if info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * # Plugin stepping + * if func_code_info.plugin_line_stepping: + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_info->suspend_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1497, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1497, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1497, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1497, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1499 + * if info.suspend_type != PYTHON_SUSPEND: + * # Plugin stepping + * if func_code_info.plugin_line_stepping: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) + * return + */ + if (__pyx_v_func_code_info->plugin_line_stepping) { + + /* "_pydevd_sys_monitoring_cython.pyx":1500 + * # Plugin stepping + * if func_code_info.plugin_line_stepping: + * _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__plugin_stepping(__pyx_v_py_db, __pyx_v_step_cmd, __pyx_n_s_line, __pyx_v_frame, __pyx_v_thread_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1499 + * if info.suspend_type != PYTHON_SUSPEND: + * # Plugin stepping + * if func_code_info.plugin_line_stepping: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1501 + * if func_code_info.plugin_line_stepping: + * _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) + * return # <<<<<<<<<<<<<< + * + * # Python stepping now + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1497 + * return monitor.DISABLE + * + * if info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * # Plugin stepping + * if func_code_info.plugin_line_stepping: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1504 + * + * # Python stepping now + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: + */ + __pyx_t_3 = __pyx_v_step_cmd; + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CMD_STEP_INTO); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_4 = __pyx_t_9; + goto __pyx_L20_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_4 = __pyx_t_9; + goto __pyx_L20_bool_binop_done; + } + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CMD_STEP_INTO_COROUTINE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1504, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_4 = __pyx_t_9; + __pyx_L20_bool_binop_done:; + __pyx_t_9 = __pyx_t_4; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1505 + * # Python stepping now + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE # <<<<<<<<<<<<<< + * if not info.pydev_use_scoped_step_frame: + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + */ + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CMD_STEP_INTO_MY_CODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1505, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_force_check_project_scope = __pyx_t_9; + + /* "_pydevd_sys_monitoring_cython.pyx":1506 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + * return + */ + __pyx_t_9 = (!__pyx_v_info->pydev_use_scoped_step_frame); + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1507 + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): # <<<<<<<<<<<<<< + * return + * + */ + if (!__pyx_v_func_code_info->always_filtered_out) { + } else { + __pyx_t_9 = __pyx_v_func_code_info->always_filtered_out; + goto __pyx_L25_bool_binop_done; + } + if (__pyx_v_force_check_project_scope) { + } else { + __pyx_t_9 = __pyx_v_force_check_project_scope; + goto __pyx_L25_bool_binop_done; + } + __pyx_t_9 = __pyx_v_func_code_info->filtered_out_force_checked; + __pyx_L25_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1508 + * if not info.pydev_use_scoped_step_frame: + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + * return # <<<<<<<<<<<<<< + * + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1507 + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1510 + * return + * + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1510, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_original_step_cmd, __pyx_t_7) < 0) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1510, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1511 + * + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * return + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_5, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 5+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1511, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1512 + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return # <<<<<<<<<<<<<< + * else: + * # Make sure we check the filtering inside ipython calls too... + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1506 + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1515 + * else: + * # Make sure we check the filtering inside ipython calls too... + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): # <<<<<<<<<<<<<< + * return + * + */ + /*else*/ { + if (!__pyx_v_func_code_info->always_filtered_out) { + } else { + __pyx_t_9 = __pyx_v_func_code_info->always_filtered_out; + goto __pyx_L29_bool_binop_done; + } + if (__pyx_v_force_check_project_scope) { + } else { + __pyx_t_9 = __pyx_v_force_check_project_scope; + goto __pyx_L29_bool_binop_done; + } + __pyx_t_9 = __pyx_v_func_code_info->filtered_out_force_checked; + __pyx_L29_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1516 + * # Make sure we check the filtering inside ipython calls too... + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + * return # <<<<<<<<<<<<<< + * + * stop = False + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1515 + * else: + * # Make sure we check the filtering inside ipython calls too... + * if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1518 + * return + * + * stop = False # <<<<<<<<<<<<<< + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1520 + * stop = False + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename # <<<<<<<<<<<<<< + * if filename.endswith(".pyc"): + * filename = filename[:-1] + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1520, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_v_filename = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1521 + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): # <<<<<<<<<<<<<< + * filename = filename[:-1] + * + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_s_pyc}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1522 + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): + * filename = filename[:-1] # <<<<<<<<<<<<<< + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + */ + __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_filename, 0, -1L, NULL, NULL, &__pyx_slice__16, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1521 + * # We can only stop inside the ipython call. + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): # <<<<<<<<<<<<<< + * filename = filename[:-1] + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1524 + * filename = filename[:-1] + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< + * f = frame.f_back + * while f is not None: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_filename, __pyx_n_s_endswith); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1524, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1524, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1524, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1524, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1524, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = (!__pyx_t_9); + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1525 + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * f = frame.f_back # <<<<<<<<<<<<<< + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1525, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1526 + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + * f = frame.f_back + * while f is not None: # <<<<<<<<<<<<<< + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + */ + while (1) { + __pyx_t_4 = (__pyx_v_f != Py_None); + if (!__pyx_t_4) break; + + /* "_pydevd_sys_monitoring_cython.pyx":1527 + * f = frame.f_back + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_7, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1528 + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back # <<<<<<<<<<<<<< + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1528, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_XDECREF_SET(__pyx_v_f2, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1529 + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * pydev_log.debug("Stop inside ipython call") + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + __pyx_t_9 = (__pyx_v_f2 != Py_None); + if (__pyx_t_9) { + } else { + __pyx_t_4 = __pyx_t_9; + goto __pyx_L38_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_f2, __pyx_n_s_f_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_co_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1529, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __pyx_t_9; + __pyx_L38_bool_binop_done:; + if (__pyx_t_4) { + + /* "_pydevd_sys_monitoring_cython.pyx":1530 + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") # <<<<<<<<<<<<<< + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * thread_info.additional_info.trace_suspend_type = "sys_monitor" + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_kp_s_Stop_inside_ipython_call}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1531 + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * pydev_log.debug("Stop inside ipython call") + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * thread_info.additional_info.trace_suspend_type = "sys_monitor" + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1531, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_original_step_cmd, __pyx_t_5) < 0) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1531, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1532 + * pydev_log.debug("Stop inside ipython call") + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * thread_info.additional_info.trace_suspend_type = "sys_monitor" # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * break + */ + __Pyx_INCREF(__pyx_n_s_sys_monitor); + __Pyx_GIVEREF(__pyx_n_s_sys_monitor); + __Pyx_GOTREF(__pyx_v_thread_info->additional_info->trace_suspend_type); + __Pyx_DECREF(__pyx_v_thread_info->additional_info->trace_suspend_type); + __pyx_v_thread_info->additional_info->trace_suspend_type = __pyx_n_s_sys_monitor; + + /* "_pydevd_sys_monitoring_cython.pyx":1533 + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * thread_info.additional_info.trace_suspend_type = "sys_monitor" + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * break + * f = f.f_back + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_7, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 5+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1533, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1534 + * thread_info.additional_info.trace_suspend_type = "sys_monitor" + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * break # <<<<<<<<<<<<<< + * f = f.f_back + * + */ + goto __pyx_L35_break; + + /* "_pydevd_sys_monitoring_cython.pyx":1529 + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * pydev_log.debug("Stop inside ipython call") + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1527 + * f = frame.f_back + * while f is not None: + * if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f2 = f.f_back + * if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1535 + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * break + * f = f.f_back # <<<<<<<<<<<<<< + * + * del f + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_5); + __pyx_t_5 = 0; + } + __pyx_L35_break:; + + /* "_pydevd_sys_monitoring_cython.pyx":1537 + * f = f.f_back + * + * del f # <<<<<<<<<<<<<< + * + * # In scoped mode if step in didn't work in this context it won't work + */ + __Pyx_DECREF(__pyx_v_f); __pyx_v_f = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1524 + * filename = filename[:-1] + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): # <<<<<<<<<<<<<< + * f = frame.f_back + * while f is not None: + */ + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":1541 + * # In scoped mode if step in didn't work in this context it won't work + * # afterwards anyways. + * return # <<<<<<<<<<<<<< + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1504 + * + * # Python stepping now + * if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): # <<<<<<<<<<<<<< + * force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + * if not info.pydev_use_scoped_step_frame: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1543 + * return + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * # Note: when dealing with a step over my code it's the same as a step over (the + * # difference is that when we return from a frame in one we go to regular step + */ + __pyx_t_3 = __pyx_v_step_cmd; + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_STEP_OVER); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_9) { + } else { + __pyx_t_4 = __pyx_t_9; + goto __pyx_L40_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_STEP_OVER_MY_CODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = PyObject_RichCompare(__pyx_t_7, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_4 = __pyx_t_9; + __pyx_L40_bool_binop_done:; + __pyx_t_9 = __pyx_t_4; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1547 + * # difference is that when we return from a frame in one we go to regular step + * # into and in the other we go to a step into my code). + * if _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_frame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1548 + * # into and in the other we go to a step into my code). + * if _is_same_frame(info, stop_frame, frame): + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1548, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_original_step_cmd, __pyx_t_2) < 0) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1548, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1549 + * if _is_same_frame(info, stop_frame, frame): + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_7, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 5+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1550 + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return # <<<<<<<<<<<<<< + * + * elif step_cmd == CMD_SMART_STEP_INTO: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1547 + * # difference is that when we return from a frame in one we go to regular step + * # into and in the other we go to a step into my code). + * if _is_same_frame(info, stop_frame, frame): # <<<<<<<<<<<<<< + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1543 + * return + * + * elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): # <<<<<<<<<<<<<< + * # Note: when dealing with a step over my code it's the same as a step over (the + * # difference is that when we return from a frame in one we go to regular step + */ + goto __pyx_L19; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1552 + * return + * + * elif step_cmd == CMD_SMART_STEP_INTO: # <<<<<<<<<<<<<< + * stop = False + * back = frame.f_back + */ + __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CMD_SMART_STEP_INTO); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1553 + * + * elif step_cmd == CMD_SMART_STEP_INTO: + * stop = False # <<<<<<<<<<<<<< + * back = frame.f_back + * if _is_same_frame(info, stop_frame, back): + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1554 + * elif step_cmd == CMD_SMART_STEP_INTO: + * stop = False + * back = frame.f_back # <<<<<<<<<<<<<< + * if _is_same_frame(info, stop_frame, back): + * if info.pydev_smart_child_offset != -1: + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1554, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_v_back = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1555 + * stop = False + * back = frame.f_back + * if _is_same_frame(info, stop_frame, back): # <<<<<<<<<<<<<< + * if info.pydev_smart_child_offset != -1: + * # i.e.: in this case, we're not interested in the pause in the parent, rather + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_v_back); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1555, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1555, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1556 + * back = frame.f_back + * if _is_same_frame(info, stop_frame, back): + * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + */ + __pyx_t_9 = (__pyx_v_info->pydev_smart_child_offset != -1L); + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1559 + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + * stop = False # <<<<<<<<<<<<<< + * + * else: + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1556 + * back = frame.f_back + * if _is_same_frame(info, stop_frame, back): + * if info.pydev_smart_child_offset != -1: # <<<<<<<<<<<<<< + * # i.e.: in this case, we're not interested in the pause in the parent, rather + * # we're interested in the pause in the child (when the parent is at the proper place). + */ + goto __pyx_L44; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1562 + * + * else: + * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + */ + /*else*/ { + __pyx_t_3 = __pyx_v_info->pydev_smart_parent_offset; + __pyx_v_pydev_smart_parent_offset = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1564 + * pydev_smart_parent_offset = info.pydev_smart_parent_offset + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + * # Preferred mode (when the smart step into variants are available + */ + __pyx_t_7 = __pyx_v_info->pydev_smart_step_into_variants; + __Pyx_INCREF(__pyx_t_7); + __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_7); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1565 + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + */ + __pyx_t_4 = (__pyx_v_pydev_smart_parent_offset >= 0); + if (__pyx_t_4) { + } else { + __pyx_t_9 = __pyx_t_4; + goto __pyx_L46_bool_binop_done; + } + __pyx_t_4 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); + __pyx_t_9 = __pyx_t_4; + __pyx_L46_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1568 + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + * stop = get_smart_step_into_variant_from_frame_offset( # <<<<<<<<<<<<<< + * back.f_lasti, pydev_smart_step_into_variants + * ) is get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1568, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "_pydevd_sys_monitoring_cython.pyx":1569 + * # and the offset is set). + * stop = get_smart_step_into_variant_from_frame_offset( + * back.f_lasti, pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * ) is get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1569, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_2, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1568, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1570 + * stop = get_smart_step_into_variant_from_frame_offset( + * back.f_lasti, pydev_smart_step_into_variants + * ) is get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) # <<<<<<<<<<<<<< + * + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_9 = (__pyx_t_7 == __pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_stop = __pyx_t_9; + + /* "_pydevd_sys_monitoring_cython.pyx":1565 + * + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Preferred mode (when the smart step into variants are available + * # and the offset is set). + */ + goto __pyx_L45; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1574 + * else: + * # Only the name/line is available, so, check that. + * curr_func_name = frame.f_code.co_name # <<<<<<<<<<<<<< + * + * # global context is set with an empty name + */ + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1574, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_co_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1574, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_curr_func_name = __pyx_t_7; + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1577 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: # <<<<<<<<<<<<<< + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + */ + __Pyx_INCREF(__pyx_v_curr_func_name); + __pyx_t_7 = __pyx_v_curr_func_name; + __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s__17, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1577, __pyx_L1_error) + if (!__pyx_t_11) { + } else { + __pyx_t_4 = __pyx_t_11; + goto __pyx_L51_bool_binop_done; + } + __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_module, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1577, __pyx_L1_error) + __pyx_t_4 = __pyx_t_11; + __pyx_L51_bool_binop_done:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_11 = __pyx_t_4; + if (!__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L49_bool_binop_done; + } + __pyx_t_11 = (__pyx_v_curr_func_name == Py_None); + __pyx_t_9 = __pyx_t_11; + __pyx_L49_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1578 + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" # <<<<<<<<<<<<<< + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + * stop = True + */ + __Pyx_INCREF(__pyx_kp_s__14); + __Pyx_DECREF_SET(__pyx_v_curr_func_name, __pyx_kp_s__14); + + /* "_pydevd_sys_monitoring_cython.pyx":1577 + * + * # global context is set with an empty name + * if curr_func_name in ("?", "") or curr_func_name is None: # <<<<<<<<<<<<<< + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1579 + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< + * stop = True + * + */ + __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_v_curr_func_name, __pyx_v_info->pydev_func_name, Py_EQ)); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1579, __pyx_L1_error) + if (__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_stop_frame, __pyx_n_s_f_lineno); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_next_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_7, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __pyx_t_11; + __pyx_L54_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1580 + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + * stop = True # <<<<<<<<<<<<<< + * + * if not stop: + */ + __pyx_v_stop = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1579 + * if curr_func_name in ("?", "") or curr_func_name is None: + * curr_func_name = "" + * if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: # <<<<<<<<<<<<<< + * stop = True + * + */ + } + } + __pyx_L45:; + } + __pyx_L44:; + + /* "_pydevd_sys_monitoring_cython.pyx":1582 + * stop = True + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + __pyx_t_9 = (!__pyx_v_stop); + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1585 + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + * return # <<<<<<<<<<<<<< + * + * elif back is not None and _is_same_frame(info, stop_frame, back.f_back): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1582 + * stop = True + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1555 + * stop = False + * back = frame.f_back + * if _is_same_frame(info, stop_frame, back): # <<<<<<<<<<<<<< + * if info.pydev_smart_child_offset != -1: + * # i.e.: in this case, we're not interested in the pause in the parent, rather + */ + goto __pyx_L43; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1587 + * return + * + * elif back is not None and _is_same_frame(info, stop_frame, back.f_back): # <<<<<<<<<<<<<< + * # Ok, we have to track 2 stops at this point, the parent and the child offset. + * # This happens when handling a step into which targets a function inside a list comprehension + */ + __pyx_t_11 = (__pyx_v_back != Py_None); + if (__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L57_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_back); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(__pyx_v_info, __pyx_v_stop_frame, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1587, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __pyx_t_11; + __pyx_L57_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1591 + * # This happens when handling a step into which targets a function inside a list comprehension + * # or generator (in which case an intermediary frame is created due to an internal function call). + * pydev_smart_parent_offset = info.pydev_smart_parent_offset # <<<<<<<<<<<<<< + * pydev_smart_child_offset = info.pydev_smart_child_offset + * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + */ + __pyx_t_3 = __pyx_v_info->pydev_smart_parent_offset; + __pyx_v_pydev_smart_parent_offset = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1592 + * # or generator (in which case an intermediary frame is created due to an internal function call). + * pydev_smart_parent_offset = info.pydev_smart_parent_offset + * pydev_smart_child_offset = info.pydev_smart_child_offset # <<<<<<<<<<<<<< + * # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + * # print('parent f_lasti', back.f_back.f_lasti) + */ + __pyx_t_3 = __pyx_v_info->pydev_smart_child_offset; + __pyx_v_pydev_smart_child_offset = __pyx_t_3; + + /* "_pydevd_sys_monitoring_cython.pyx":1596 + * # print('parent f_lasti', back.f_back.f_lasti) + * # print('child f_lasti', back.f_lasti) + * stop = False # <<<<<<<<<<<<<< + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1597 + * # print('child f_lasti', back.f_lasti) + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + */ + __pyx_t_11 = (__pyx_v_pydev_smart_child_offset >= 0); + if (__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L60_bool_binop_done; + } + __pyx_t_11 = (__pyx_v_pydev_smart_child_offset >= 0); + __pyx_t_9 = __pyx_t_11; + __pyx_L60_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1598 + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + */ + __pyx_t_1 = __pyx_v_info->pydev_smart_step_into_variants; + __Pyx_INCREF(__pyx_t_1); + __pyx_v_pydev_smart_step_into_variants = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1600 + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Note that we don't really check the parent offset, only the offset of + * # the child (because this is a generator, the parent may have moved forward + */ + __pyx_t_11 = (__pyx_v_pydev_smart_parent_offset >= 0); + if (__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L63_bool_binop_done; + } + __pyx_t_11 = (__pyx_v_pydev_smart_step_into_variants != Py_None)&&(PyTuple_GET_SIZE(__pyx_v_pydev_smart_step_into_variants) != 0); + __pyx_t_9 = __pyx_t_11; + __pyx_L63_bool_binop_done:; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1605 + * # already -- and that's ok, so, we just check that the parent frame + * # matches in this case). + * smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( # <<<<<<<<<<<<<< + * pydev_smart_parent_offset, pydev_smart_step_into_variants + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "_pydevd_sys_monitoring_cython.pyx":1606 + * # matches in this case). + * smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + * pydev_smart_parent_offset, pydev_smart_step_into_variants # <<<<<<<<<<<<<< + * ) + * # print('matched parent offset', pydev_smart_parent_offset) + */ + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_parent_offset); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_7, __pyx_v_pydev_smart_step_into_variants}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_v_smart_step_into_variant = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1610 + * # print('matched parent offset', pydev_smart_parent_offset) + * # Ok, now, check the child variant + * children_variants = smart_step_into_variant.children_variants # <<<<<<<<<<<<<< + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_smart_step_into_variant, __pyx_n_s_children_variants); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1610, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_children_variants = __pyx_t_1; + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1611 + * # Ok, now, check the child variant + * children_variants = smart_step_into_variant.children_variants + * stop = children_variants and ( # <<<<<<<<<<<<<< + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + */ + __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_children_variants); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 1611, __pyx_L1_error) + if (__pyx_t_11) { + } else { + __pyx_t_9 = __pyx_t_11; + goto __pyx_L65_bool_binop_done; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1612 + * children_variants = smart_step_into_variant.children_variants + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) # <<<<<<<<<<<<<< + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + * ) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_back, __pyx_n_s_f_lasti); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_7, __pyx_v_children_variants}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1613 + * stop = children_variants and ( + * get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + * is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) # <<<<<<<<<<<<<< + * ) + * # print('stop at child', stop) + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_pydev_smart_child_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_10 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_10)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_10); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_5, __pyx_v_children_variants}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __pyx_t_11 = (__pyx_t_1 == __pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __pyx_t_11; + __pyx_L65_bool_binop_done:; + __pyx_v_stop = __pyx_t_9; + + /* "_pydevd_sys_monitoring_cython.pyx":1600 + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + * if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: # <<<<<<<<<<<<<< + * # Note that we don't really check the parent offset, only the offset of + * # the child (because this is a generator, the parent may have moved forward + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1597 + * # print('child f_lasti', back.f_lasti) + * stop = False + * if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: # <<<<<<<<<<<<<< + * pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1617 + * # print('stop at child', stop) + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + __pyx_t_9 = (!__pyx_v_stop); + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":1620 + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + * return # <<<<<<<<<<<<<< + * + * if stop: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1617 + * # print('stop at child', stop) + * + * if not stop: # <<<<<<<<<<<<<< + * # In smart step into, if we didn't hit it in this frame once, that'll + * # not be the case next time either, so, disable tracing for this frame. + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1587 + * return + * + * elif back is not None and _is_same_frame(info, stop_frame, back.f_back): # <<<<<<<<<<<<<< + * # Ok, we have to track 2 stops at this point, the parent and the child offset. + * # This happens when handling a step into which targets a function inside a list comprehension + */ + } + __pyx_L43:; + + /* "_pydevd_sys_monitoring_cython.pyx":1622 + * return + * + * if stop: # <<<<<<<<<<<<<< + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + */ + if (__pyx_v_stop) { + + /* "_pydevd_sys_monitoring_cython.pyx":1623 + * + * if stop: + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) # <<<<<<<<<<<<<< + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_set_suspend); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_step_cmd); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_INCREF(__pyx_v_thread_info->thread); + __Pyx_GIVEREF(__pyx_v_thread_info->thread); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_thread_info->thread)) __PYX_ERR(0, 1623, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_info->pydev_original_step_cmd); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_original_step_cmd, __pyx_t_5) < 0) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1623, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1624 + * if stop: + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) # <<<<<<<<<<<<<< + * return + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_do_wait_suspend); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[6] = {__pyx_t_7, __pyx_v_py_db, ((PyObject *)__pyx_v_thread_info), __pyx_v_frame, __pyx_n_s_line, Py_None}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 5+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1625 + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + * return # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1622 + * return + * + * if stop: # <<<<<<<<<<<<<< + * py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + * _do_wait_suspend(py_db, thread_info, frame, "line", None) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1552 + * return + * + * elif step_cmd == CMD_SMART_STEP_INTO: # <<<<<<<<<<<<<< + * stop = False + * back = frame.f_back + */ + } + __pyx_L19:; + + /* "_pydevd_sys_monitoring_cython.pyx":1433 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _internal_line_event(FuncCodeInfo func_code_info, frame, int line): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef PyDBAdditionalThreadInfo info + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._internal_line_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_bp); + __Pyx_XDECREF(__pyx_v_stop_info); + __Pyx_XDECREF(__pyx_v_bp_type); + __Pyx_XDECREF(__pyx_v_new_frame); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_stop_frame); + __Pyx_XDECREF(__pyx_v_filename); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_f2); + __Pyx_XDECREF(__pyx_v_back); + __Pyx_XDECREF(__pyx_v_pydev_smart_step_into_variants); + __Pyx_XDECREF(__pyx_v_curr_func_name); + __Pyx_XDECREF(__pyx_v_smart_step_into_variant); + __Pyx_XDECREF(__pyx_v_children_variants); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1630 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _start_method_event(code, instruction_offset): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__start_method_event(PyObject *__pyx_v_code, CYTHON_UNUSED PyObject *__pyx_v_instruction_offset) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v_func_code_info = 0; + int __pyx_v_stop; + int __pyx_v_stop_reason; + int __pyx_v_stop_on_plugin_breakpoint; + struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info = 0; + int __pyx_v_step_cmd; + PyObject *__pyx_v_py_db = 0; + PyObject *__pyx_v_frame = NULL; + int __pyx_v_keep_enabled; + PyObject *__pyx_v_bp = NULL; + PyObject *__pyx_v_new_frame = NULL; + PyObject *__pyx_v_plugin_manager = NULL; + PyObject *__pyx_v_result = NULL; + PyObject *__pyx_v_bp_type = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_t_10; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython__getframe __pyx_t_11; + int __pyx_t_12; + unsigned int __pyx_t_13; + PyObject *(*__pyx_t_14)(PyObject *); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_start_method_event", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1643 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1644 + * # fmt: on + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(True, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1644, __pyx_L3_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1644, __pyx_L3_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1643 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1645 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._start_method_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(0, 1645, __pyx_L5_except_error) + __Pyx_XGOTREF(__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_6); + + /* "_pydevd_sys_monitoring_cython.pyx":1646 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_7 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1646, __pyx_L5_except_error) + __Pyx_GOTREF(__pyx_t_7); + if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1646, __pyx_L5_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_7)); + __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1647 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_8 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1648 + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * + * py_db: object = GlobalDebuggerHolder.global_dbg + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L6_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1647 + * except: + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * + */ + } + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + goto __pyx_L4_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1643 + * # ENDIF + * # fmt: on + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L6_except_return:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L0; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1650 + * return + * + * py_db: object = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE + */ + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1650, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1650, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_py_db = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1651 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + __pyx_t_9 = (__pyx_v_py_db == Py_None); + if (!__pyx_t_9) { + } else { + __pyx_t_8 = __pyx_t_9; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_pydb_disposed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1651, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1651, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_9; + __pyx_L13_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1652 + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * if not thread_info.trace or thread_info.thread._is_stopped: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1652, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1652, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1651 + * + * py_db: object = GlobalDebuggerHolder.global_dbg + * if py_db is None or py_db.pydb_disposed: # <<<<<<<<<<<<<< + * return monitor.DISABLE + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1654 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_thread_info->trace); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1654, __pyx_L1_error) + __pyx_t_10 = (!__pyx_t_9); + if (!__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L16_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_thread_info->thread, __pyx_n_s_is_stopped); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1654, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1654, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L16_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1657 + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + * return # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1654 + * return monitor.DISABLE + * + * if not thread_info.trace or thread_info.thread._is_stopped: # <<<<<<<<<<<<<< + * # For thread-related stuff we can't disable the code tracing because other + * # threads may still want it... + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1660 + * + * + * frame = _getframe(1) # <<<<<<<<<<<<<< + * func_code_info = _get_func_code_info(code, frame) + * if func_code_info.always_skip_code: + */ + __pyx_t_11.__pyx_n = 1; + __pyx_t_11.depth = __pyx_int_1; + __pyx_t_6 = __pyx_f_29_pydevd_sys_monitoring_cython__getframe(&__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_frame = __pyx_t_6; + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1661 + * + * frame = _getframe(1) + * func_code_info = _get_func_code_info(code, frame) # <<<<<<<<<<<<<< + * if func_code_info.always_skip_code: + * # if DEBUG: + */ + __pyx_t_6 = ((PyObject *)__pyx_f_29_pydevd_sys_monitoring_cython__get_func_code_info(__pyx_v_code, __pyx_v_frame, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1661, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_v_func_code_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_t_6); + __pyx_t_6 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1662 + * frame = _getframe(1) + * func_code_info = _get_func_code_info(code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always skip)') + */ + if (__pyx_v_func_code_info->always_skip_code) { + + /* "_pydevd_sys_monitoring_cython.pyx":1665 + * # if DEBUG: + * # print('disable (always skip)') + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_monitor); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1665, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1665, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1662 + * frame = _getframe(1) + * func_code_info = _get_func_code_info(code, frame) + * if func_code_info.always_skip_code: # <<<<<<<<<<<<<< + * # if DEBUG: + * # print('disable (always skip)') + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1667 + * return monitor.DISABLE + * + * keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) # <<<<<<<<<<<<<< + * + * if func_code_info.function_breakpoint_found: + */ + __pyx_t_4 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_4); + __pyx_t_8 = __pyx_f_29_pydevd_sys_monitoring_cython__enable_code_tracing(__pyx_v_py_db, ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_4), __pyx_v_func_code_info, __pyx_v_code, __pyx_v_frame, 1); if (unlikely(__pyx_t_8 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1667, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_keep_enabled = __pyx_t_8; + + /* "_pydevd_sys_monitoring_cython.pyx":1669 + * keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) + * + * if func_code_info.function_breakpoint_found: # <<<<<<<<<<<<<< + * bp = func_code_info.function_breakpoint + * stop = True + */ + if (__pyx_v_func_code_info->function_breakpoint_found) { + + /* "_pydevd_sys_monitoring_cython.pyx":1670 + * + * if func_code_info.function_breakpoint_found: + * bp = func_code_info.function_breakpoint # <<<<<<<<<<<<<< + * stop = True + * new_frame = frame + */ + __pyx_t_4 = __pyx_v_func_code_info->function_breakpoint; + __Pyx_INCREF(__pyx_t_4); + __pyx_v_bp = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1671 + * if func_code_info.function_breakpoint_found: + * bp = func_code_info.function_breakpoint + * stop = True # <<<<<<<<<<<<<< + * new_frame = frame + * stop_reason = CMD_SET_FUNCTION_BREAK + */ + __pyx_v_stop = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1672 + * bp = func_code_info.function_breakpoint + * stop = True + * new_frame = frame # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_FUNCTION_BREAK + * stop_on_plugin_breakpoint = False + */ + __Pyx_INCREF(__pyx_v_frame); + __pyx_v_new_frame = __pyx_v_frame; + + /* "_pydevd_sys_monitoring_cython.pyx":1673 + * stop = True + * new_frame = frame + * stop_reason = CMD_SET_FUNCTION_BREAK # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = False + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_SET_FUNCTION_BREAK); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1673, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1673, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_stop_reason = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1674 + * new_frame = frame + * stop_reason = CMD_SET_FUNCTION_BREAK + * stop_on_plugin_breakpoint = False # <<<<<<<<<<<<<< + * + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-function") + */ + __pyx_v_stop_on_plugin_breakpoint = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1676 + * stop_on_plugin_breakpoint = False + * + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-function") # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_stop_reason, __pyx_v_bp, __pyx_v_frame, __pyx_v_new_frame, __pyx_v_stop, __pyx_v_stop_on_plugin_breakpoint, __pyx_kp_s_python_function); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1677 + * + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-function") + * return # <<<<<<<<<<<<<< + * + * if py_db.plugin: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1669 + * keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) + * + * if func_code_info.function_breakpoint_found: # <<<<<<<<<<<<<< + * bp = func_code_info.function_breakpoint + * stop = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1679 + * return + * + * if py_db.plugin: # <<<<<<<<<<<<<< + * plugin_manager = py_db.plugin + * + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1679, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1680 + * + * if py_db.plugin: + * plugin_manager = py_db.plugin # <<<<<<<<<<<<<< + * + * # Check breaking on breakpoints in a 'call' + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_plugin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_plugin_manager = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1683 + * + * # Check breaking on breakpoints in a 'call' + * info = thread_info.additional_info # <<<<<<<<<<<<<< + * if func_code_info.plugin_call_breakpoint_found: + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + */ + __pyx_t_4 = ((PyObject *)__pyx_v_thread_info->additional_info); + __Pyx_INCREF(__pyx_t_4); + __pyx_v_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1684 + * # Check breaking on breakpoints in a 'call' + * info = thread_info.additional_info + * if func_code_info.plugin_call_breakpoint_found: # <<<<<<<<<<<<<< + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + * if result: + */ + if (__pyx_v_func_code_info->plugin_call_breakpoint_found) { + + /* "_pydevd_sys_monitoring_cython.pyx":1685 + * info = thread_info.additional_info + * if func_code_info.plugin_call_breakpoint_found: + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) # <<<<<<<<<<<<<< + * if result: + * stop_reason = CMD_SET_BREAK + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_plugin_manager, __pyx_n_s_get_breakpoint); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = NULL; + __pyx_t_13 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_13 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_py_db, __pyx_v_frame, __pyx_n_s_call_2, ((PyObject *)__pyx_v_info)}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_13, 4+__pyx_t_13); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_v_result = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1686 + * if func_code_info.plugin_call_breakpoint_found: + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + * if result: # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_BREAK + * stop = False + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 1686, __pyx_L1_error) + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1687 + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + * if result: + * stop_reason = CMD_SET_BREAK # <<<<<<<<<<<<<< + * stop = False + * stop_on_plugin_breakpoint = True + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CMD_SET_BREAK); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1687, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1687, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_stop_reason = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1688 + * if result: + * stop_reason = CMD_SET_BREAK + * stop = False # <<<<<<<<<<<<<< + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result + */ + __pyx_v_stop = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1689 + * stop_reason = CMD_SET_BREAK + * stop = False + * stop_on_plugin_breakpoint = True # <<<<<<<<<<<<<< + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + */ + __pyx_v_stop_on_plugin_breakpoint = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1690 + * stop = False + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result # <<<<<<<<<<<<<< + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + * return + */ + if ((likely(PyTuple_CheckExact(__pyx_v_result))) || (PyList_CheckExact(__pyx_v_result))) { + PyObject* sequence = __pyx_v_result; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 3)) { + if (size > 3) __Pyx_RaiseTooManyValuesError(3); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1690, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); + } else { + __pyx_t_4 = PyList_GET_ITEM(sequence, 0); + __pyx_t_6 = PyList_GET_ITEM(sequence, 1); + __pyx_t_5 = PyList_GET_ITEM(sequence, 2); + } + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_5); + #else + __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + Py_ssize_t index = -1; + __pyx_t_7 = PyObject_GetIter(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1690, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_14 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); + index = 0; __pyx_t_4 = __pyx_t_14(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_4); + index = 1; __pyx_t_6 = __pyx_t_14(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_6); + index = 2; __pyx_t_5 = __pyx_t_14(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(__pyx_t_5); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_7), 3) < 0) __PYX_ERR(0, 1690, __pyx_L1_error) + __pyx_t_14 = NULL; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L24_unpacking_done; + __pyx_L23_unpacking_failed:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_14 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1690, __pyx_L1_error) + __pyx_L24_unpacking_done:; + } + __pyx_v_bp = __pyx_t_4; + __pyx_t_4 = 0; + __pyx_v_new_frame = __pyx_t_6; + __pyx_t_6 = 0; + __pyx_v_bp_type = __pyx_t_5; + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1691 + * stop_on_plugin_breakpoint = True + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) # <<<<<<<<<<<<<< + * return + * + */ + if (!(likely(PyString_CheckExact(__pyx_v_bp_type))||((__pyx_v_bp_type) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_bp_type))) __PYX_ERR(0, 1691, __pyx_L1_error) + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__stop_on_breakpoint(__pyx_v_py_db, __pyx_v_thread_info, __pyx_v_stop_reason, __pyx_v_bp, __pyx_v_frame, __pyx_v_new_frame, __pyx_v_stop, __pyx_v_stop_on_plugin_breakpoint, ((PyObject*)__pyx_v_bp_type)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1691, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1692 + * bp, new_frame, bp_type = result + * _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + * return # <<<<<<<<<<<<<< + * + * keep_enabled = True + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1686 + * if func_code_info.plugin_call_breakpoint_found: + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + * if result: # <<<<<<<<<<<<<< + * stop_reason = CMD_SET_BREAK + * stop = False + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1694 + * return + * + * keep_enabled = True # <<<<<<<<<<<<<< + * + * # Check breaking on line stepping in a 'call' + */ + __pyx_v_keep_enabled = 1; + + /* "_pydevd_sys_monitoring_cython.pyx":1684 + * # Check breaking on breakpoints in a 'call' + * info = thread_info.additional_info + * if func_code_info.plugin_call_breakpoint_found: # <<<<<<<<<<<<<< + * result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + * if result: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1697 + * + * # Check breaking on line stepping in a 'call' + * step_cmd = info.pydev_step_cmd # <<<<<<<<<<<<<< + * if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: + * _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + */ + __pyx_t_12 = __pyx_v_info->pydev_step_cmd; + __pyx_v_step_cmd = __pyx_t_12; + + /* "_pydevd_sys_monitoring_cython.pyx":1698 + * # Check breaking on line stepping in a 'call' + * step_cmd = info.pydev_step_cmd + * if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + * return + */ + __pyx_t_10 = (__pyx_v_step_cmd != -1L); + if (__pyx_t_10) { + } else { + __pyx_t_8 = __pyx_t_10; + goto __pyx_L26_bool_binop_done; + } + if (__pyx_v_func_code_info->plugin_call_stepping) { + } else { + __pyx_t_8 = __pyx_v_func_code_info->plugin_call_stepping; + goto __pyx_L26_bool_binop_done; + } + __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_info->suspend_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1698, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_6, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1698, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1698, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_8 = __pyx_t_10; + __pyx_L26_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1699 + * step_cmd = info.pydev_step_cmd + * if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: + * _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_4 = __pyx_f_29_pydevd_sys_monitoring_cython__plugin_stepping(__pyx_v_py_db, __pyx_v_step_cmd, __pyx_n_s_call_2, __pyx_v_frame, __pyx_v_thread_info); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1700 + * if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: + * _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + * return # <<<<<<<<<<<<<< + * + * if keep_enabled or any_thread_stepping(): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1698 + * # Check breaking on line stepping in a 'call' + * step_cmd = info.pydev_step_cmd + * if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: # <<<<<<<<<<<<<< + * _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1679 + * return + * + * if py_db.plugin: # <<<<<<<<<<<<<< + * plugin_manager = py_db.plugin + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1702 + * return + * + * if keep_enabled or any_thread_stepping(): # <<<<<<<<<<<<<< + * return None + * + */ + if (!__pyx_v_keep_enabled) { + } else { + __pyx_t_8 = __pyx_v_keep_enabled; + goto __pyx_L30_bool_binop_done; + } + __pyx_t_10 = __pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping(0); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1702, __pyx_L1_error) + __pyx_t_8 = __pyx_t_10; + __pyx_L30_bool_binop_done:; + if (__pyx_t_8) { + + /* "_pydevd_sys_monitoring_cython.pyx":1703 + * + * if keep_enabled or any_thread_stepping(): + * return None # <<<<<<<<<<<<<< + * + * return monitor.DISABLE + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1702 + * return + * + * if keep_enabled or any_thread_stepping(): # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1705 + * return None + * + * return monitor.DISABLE # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DISABLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_r = __pyx_t_6; + __pyx_t_6 = 0; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1630 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _start_method_event(code, instruction_offset): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * cdef FuncCodeInfo func_code_info + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._start_method_event", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF((PyObject *)__pyx_v_func_code_info); + __Pyx_XDECREF((PyObject *)__pyx_v_info); + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_frame); + __Pyx_XDECREF(__pyx_v_bp); + __Pyx_XDECREF(__pyx_v_new_frame); + __Pyx_XDECREF(__pyx_v_plugin_manager); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v_bp_type); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1709 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef _ensure_monitoring(): # <<<<<<<<<<<<<< + * # ELSE + * # def _ensure_monitoring(): + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_9_ensure_monitoring(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(CYTHON_UNUSED int __pyx_skip_dispatch) { + PyObject *__pyx_v_DEBUGGER_ID = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_ensure_monitoring", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1714 + * # ENDIF + * # fmt: on + * DEBUGGER_ID = monitor.DEBUGGER_ID # <<<<<<<<<<<<<< + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1714, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_DEBUGGER_ID = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1715 + * # fmt: on + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): # <<<<<<<<<<<<<< + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1715, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get_tool); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1715, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_DEBUGGER_ID}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1715, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1715, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1716 + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") # <<<<<<<<<<<<<< + * update_monitor_events() + * restart_events() + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1716, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_use_tool_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1716, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_DEBUGGER_ID, __pyx_n_s_pydevd}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1716, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1717 + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() # <<<<<<<<<<<<<< + * restart_events() + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_update_monitor_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1717, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1718 + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + * restart_events() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_restart_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1718, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1715 + * # fmt: on + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): # <<<<<<<<<<<<<< + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1709 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef _ensure_monitoring(): # <<<<<<<<<<<<<< + * # ELSE + * # def _ensure_monitoring(): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._ensure_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_DEBUGGER_ID); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_9_ensure_monitoring(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_9_ensure_monitoring = {"_ensure_monitoring", (PyCFunction)__pyx_pw_29_pydevd_sys_monitoring_cython_9_ensure_monitoring, METH_NOARGS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_9_ensure_monitoring(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_ensure_monitoring (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_8_ensure_monitoring(__pyx_self); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_8_ensure_monitoring(CYTHON_UNUSED PyObject *__pyx_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_ensure_monitoring", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython__ensure_monitoring(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._ensure_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1723 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef start_monitoring(bint all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_11start_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_start_monitoring(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_start_monitoring *__pyx_optional_args) { + int __pyx_v_all_threads = ((int)0); + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + PyObject *__pyx_v_DEBUGGER_ID = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("start_monitoring", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_all_threads = __pyx_optional_args->all_threads; + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":1729 + * # ENDIF + * # fmt: on + * if all_threads: # <<<<<<<<<<<<<< + * # print('start monitoring, all_threads=', all_threads) + * DEBUGGER_ID = monitor.DEBUGGER_ID + */ + if (__pyx_v_all_threads) { + + /* "_pydevd_sys_monitoring_cython.pyx":1731 + * if all_threads: + * # print('start monitoring, all_threads=', all_threads) + * DEBUGGER_ID = monitor.DEBUGGER_ID # <<<<<<<<<<<<<< + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1731, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_DEBUGGER_ID = __pyx_t_2; + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1732 + * # print('start monitoring, all_threads=', all_threads) + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): # <<<<<<<<<<<<<< + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_get_tool); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_DEBUGGER_ID}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1732, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 1732, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = (!__pyx_t_5); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1733 + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") # <<<<<<<<<<<<<< + * update_monitor_events() + * restart_events() + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_use_tool_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_DEBUGGER_ID, __pyx_n_s_pydevd}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1734 + * if not monitor.get_tool(DEBUGGER_ID): + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() # <<<<<<<<<<<<<< + * restart_events() + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_update_monitor_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1734, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1734, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1735 + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + * restart_events() # <<<<<<<<<<<<<< + * else: + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_restart_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1735, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1735, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1732 + * # print('start monitoring, all_threads=', all_threads) + * DEBUGGER_ID = monitor.DEBUGGER_ID + * if not monitor.get_tool(DEBUGGER_ID): # <<<<<<<<<<<<<< + * monitor.use_tool_id(DEBUGGER_ID, "pydevd") + * update_monitor_events() + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1729 + * # ENDIF + * # fmt: on + * if all_threads: # <<<<<<<<<<<<<< + * # print('start monitoring, all_threads=', all_threads) + * DEBUGGER_ID = monitor.DEBUGGER_ID + */ + goto __pyx_L3; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1737 + * restart_events() + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + /*else*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1738 + * else: + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * # code=None means we can already get the threading.current_thread. + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1738, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1738, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1738, __pyx_L5_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1737 + * restart_events() + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1739 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * # code=None means we can already get the threading.current_thread. + * thread_info = _get_thread_info(True, 1) + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.start_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 1739, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + + /* "_pydevd_sys_monitoring_cython.pyx":1741 + * except: + * # code=None means we can already get the threading.current_thread. + * thread_info = _get_thread_info(True, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * # print('start monitoring, thread=', None) + */ + __pyx_t_10 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(1, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1741, __pyx_L7_except_error) + __Pyx_GOTREF(__pyx_t_10); + if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1741, __pyx_L7_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_10)); + __pyx_t_10 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1742 + * # code=None means we can already get the threading.current_thread. + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * # print('start monitoring, thread=', None) + * return + */ + __pyx_t_6 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1744 + * if thread_info is None: + * # print('start monitoring, thread=', None) + * return # <<<<<<<<<<<<<< + * # print('start monitoring, thread=', thread_info.thread) + * thread_info.trace = True + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1742 + * # code=None means we can already get the threading.current_thread. + * thread_info = _get_thread_info(True, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * # print('start monitoring, thread=', None) + * return + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L6_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1737 + * restart_events() + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L1_error; + __pyx_L8_except_return:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + goto __pyx_L0; + __pyx_L6_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9); + __pyx_L10_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1746 + * return + * # print('start monitoring, thread=', thread_info.thread) + * thread_info.trace = True # <<<<<<<<<<<<<< + * + * + */ + __Pyx_INCREF(Py_True); + __Pyx_GIVEREF(Py_True); + __Pyx_GOTREF(__pyx_v_thread_info->trace); + __Pyx_DECREF(__pyx_v_thread_info->trace); + __pyx_v_thread_info->trace = Py_True; + } + __pyx_L3:; + + /* "_pydevd_sys_monitoring_cython.pyx":1723 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef start_monitoring(bint all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.start_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XDECREF(__pyx_v_DEBUGGER_ID); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_11start_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_11start_monitoring = {"start_monitoring", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_11start_monitoring, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_11start_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + int __pyx_v_all_threads; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("start_monitoring (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_all_threads,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_all_threads); + if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1723, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "start_monitoring") < 0)) __PYX_ERR(0, 1723, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + if (values[0]) { + __pyx_v_all_threads = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_all_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1723, __pyx_L3_error) + } else { + __pyx_v_all_threads = ((int)0); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("start_monitoring", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1723, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.start_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_10start_monitoring(__pyx_self, __pyx_v_all_threads); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_10start_monitoring(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_all_threads) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_start_monitoring __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("start_monitoring", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_2.__pyx_n = 1; + __pyx_t_2.all_threads = __pyx_v_all_threads; + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython_start_monitoring(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.start_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1751 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef stop_monitoring(all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_13stop_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython_stop_monitoring(CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_stop_monitoring *__pyx_optional_args) { + PyObject *__pyx_v_all_threads = ((PyObject *)Py_False); + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("stop_monitoring", 1); + if (__pyx_optional_args) { + if (__pyx_optional_args->__pyx_n > 0) { + __pyx_v_all_threads = __pyx_optional_args->all_threads; + } + } + + /* "_pydevd_sys_monitoring_cython.pyx":1757 + * # ENDIF + * # fmt: on + * if all_threads: # <<<<<<<<<<<<<< + * # print('stop monitoring, all_threads=', all_threads) + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + */ + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_all_threads); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1757, __pyx_L1_error) + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1759 + * if all_threads: + * # print('stop monitoring, all_threads=', all_threads) + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": # <<<<<<<<<<<<<< + * monitor.set_events(monitor.DEBUGGER_ID, 0) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_tool); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_pydevd, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1759, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1760 + * # print('stop monitoring, all_threads=', all_threads) + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + * monitor.set_events(monitor.DEBUGGER_ID, 0) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_set_events); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_int_0}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1761 + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + * monitor.set_events(monitor.DEBUGGER_ID, 0) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_PY_START); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1762 + * monitor.set_events(monitor.DEBUGGER_ID, 0) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_PY_RESUME); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_5, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1762, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1763 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_LINE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_4, __pyx_t_3, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1763, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1764 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_JUMP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_5, __pyx_t_4, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1765 + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + * monitor.free_tool_id(monitor.DEBUGGER_ID) + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_PY_RETURN); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_3, __pyx_t_5, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1766 + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) # <<<<<<<<<<<<<< + * monitor.free_tool_id(monitor.DEBUGGER_ID) + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_RAISE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_4, __pyx_t_3, Py_None}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1767 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + * monitor.free_tool_id(monitor.DEBUGGER_ID) # <<<<<<<<<<<<<< + * else: + * try: + */ + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_free_tool_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_monitor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1767, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1759 + * if all_threads: + * # print('stop monitoring, all_threads=', all_threads) + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": # <<<<<<<<<<<<<< + * monitor.set_events(monitor.DEBUGGER_ID, 0) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1757 + * # ENDIF + * # fmt: on + * if all_threads: # <<<<<<<<<<<<<< + * # print('stop monitoring, all_threads=', all_threads) + * if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + */ + goto __pyx_L3; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1769 + * monitor.free_tool_id(monitor.DEBUGGER_ID) + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + /*else*/ { + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1770 + * else: + * try: + * thread_info = _thread_local_info.thread_info # <<<<<<<<<<<<<< + * except: + * thread_info = _get_thread_info(False, 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_thread_local_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_thread_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1770, __pyx_L5_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1770, __pyx_L5_error) + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1769 + * monitor.free_tool_id(monitor.DEBUGGER_ID) + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + } + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + goto __pyx_L10_try_end; + __pyx_L5_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1771 + * try: + * thread_info = _thread_local_info.thread_info + * except: # <<<<<<<<<<<<<< + * thread_info = _get_thread_info(False, 1) + * if thread_info is None: + */ + /*except:*/ { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.stop_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 1771, __pyx_L7_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_4); + + /* "_pydevd_sys_monitoring_cython.pyx":1772 + * thread_info = _thread_local_info.thread_info + * except: + * thread_info = _get_thread_info(False, 1) # <<<<<<<<<<<<<< + * if thread_info is None: + * return + */ + __pyx_t_5 = __pyx_f_29_pydevd_sys_monitoring_cython__get_thread_info(0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1772, __pyx_L7_except_error) + __Pyx_GOTREF(__pyx_t_5); + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo))))) __PYX_ERR(0, 1772, __pyx_L7_except_error) + __Pyx_XDECREF_SET(__pyx_v_thread_info, ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_t_5)); + __pyx_t_5 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1773 + * except: + * thread_info = _get_thread_info(False, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * # print('stop monitoring, thread=', thread_info.thread) + */ + __pyx_t_1 = (((PyObject *)__pyx_v_thread_info) == Py_None); + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1774 + * thread_info = _get_thread_info(False, 1) + * if thread_info is None: + * return # <<<<<<<<<<<<<< + * # print('stop monitoring, thread=', thread_info.thread) + * thread_info.trace = False + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L8_except_return; + + /* "_pydevd_sys_monitoring_cython.pyx":1773 + * except: + * thread_info = _get_thread_info(False, 1) + * if thread_info is None: # <<<<<<<<<<<<<< + * return + * # print('stop monitoring, thread=', thread_info.thread) + */ + } + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L6_exception_handled; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1769 + * monitor.free_tool_id(monitor.DEBUGGER_ID) + * else: + * try: # <<<<<<<<<<<<<< + * thread_info = _thread_local_info.thread_info + * except: + */ + __pyx_L7_except_error:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L1_error; + __pyx_L8_except_return:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + goto __pyx_L0; + __pyx_L6_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_L10_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1776 + * return + * # print('stop monitoring, thread=', thread_info.thread) + * thread_info.trace = False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_INCREF(Py_False); + __Pyx_GIVEREF(Py_False); + __Pyx_GOTREF(__pyx_v_thread_info->trace); + __Pyx_DECREF(__pyx_v_thread_info->trace); + __pyx_v_thread_info->trace = Py_False; + } + __pyx_L3:; + + /* "_pydevd_sys_monitoring_cython.pyx":1751 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef stop_monitoring(all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.stop_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_thread_info); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_13stop_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_13stop_monitoring = {"stop_monitoring", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_13stop_monitoring, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_13stop_monitoring(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_all_threads = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("stop_monitoring (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_all_threads,0}; + values[0] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_False)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_all_threads); + if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1751, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "stop_monitoring") < 0)) __PYX_ERR(0, 1751, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_all_threads = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("stop_monitoring", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1751, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.stop_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_12stop_monitoring(__pyx_self, __pyx_v_all_threads); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_12stop_monitoring(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_all_threads) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct __pyx_opt_args_29_pydevd_sys_monitoring_cython_stop_monitoring __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("stop_monitoring", 1); + __Pyx_XDECREF(__pyx_r); + __pyx_t_2.__pyx_n = 1; + __pyx_t_2.all_threads = __pyx_v_all_threads; + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython_stop_monitoring(0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1751, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.stop_monitoring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1779 + * + * + * def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: # <<<<<<<<<<<<<< + * """ + * This should be called when breakpoints change. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_15update_monitor_events(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_29_pydevd_sys_monitoring_cython_14update_monitor_events, "\n This should be called when breakpoints change.\n\n :param suspend: means the user requested threads to be suspended\n "); +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_15update_monitor_events = {"update_monitor_events", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_15update_monitor_events, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_29_pydevd_sys_monitoring_cython_14update_monitor_events}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_15update_monitor_events(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_suspend_requested = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("update_monitor_events (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_suspend_requested,0}; + values[0] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None)); + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_suspend_requested); + if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1779, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "update_monitor_events") < 0)) __PYX_ERR(0, 1779, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_suspend_requested = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("update_monitor_events", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1779, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.update_monitor_events", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_14update_monitor_events(__pyx_self, __pyx_v_suspend_requested); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_14update_monitor_events(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_suspend_requested) { + PyObject *__pyx_v_py_db = NULL; + PyObject *__pyx_v_t = NULL; + PyObject *__pyx_v_additional_info = NULL; + PyObject *__pyx_v_required_events = NULL; + PyObject *__pyx_v_has_caught_exception_breakpoint_in_pydb = NULL; + PyObject *__pyx_v_break_on_uncaught_exceptions = NULL; + PyObject *__pyx_v_has_breaks = NULL; + PyObject *__pyx_v_file_to_line_to_breakpoints = NULL; + PyObject *__pyx_v_line_to_breakpoints = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + PyObject *(*__pyx_t_8)(PyObject *); + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + int __pyx_t_12; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + Py_ssize_t __pyx_t_16; + int __pyx_t_17; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("update_monitor_events", 0); + __Pyx_INCREF(__pyx_v_suspend_requested); + + /* "_pydevd_sys_monitoring_cython.pyx":1785 + * :param suspend: means the user requested threads to be suspended + * """ + * if monitor.get_tool(monitor.DEBUGGER_ID) != "pydevd": # <<<<<<<<<<<<<< + * # It is still not initialized. + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_tool); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_pydevd, Py_NE)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1785, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1787 + * if monitor.get_tool(monitor.DEBUGGER_ID) != "pydevd": + * # It is still not initialized. + * return # <<<<<<<<<<<<<< + * + * # When breakpoints change we need to update what we want to track based + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1785 + * :param suspend: means the user requested threads to be suspended + * """ + * if monitor.get_tool(monitor.DEBUGGER_ID) != "pydevd": # <<<<<<<<<<<<<< + * # It is still not initialized. + * return + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1791 + * # When breakpoints change we need to update what we want to track based + * # on the breakpoints. + * py_db = GlobalDebuggerHolder.global_dbg # <<<<<<<<<<<<<< + * if py_db is None: + * return + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1791, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_global_dbg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1791, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_py_db = __pyx_t_3; + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1792 + * # on the breakpoints. + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: # <<<<<<<<<<<<<< + * return + * + */ + __pyx_t_6 = (__pyx_v_py_db == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1793 + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: + * return # <<<<<<<<<<<<<< + * + * if suspend_requested is None: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1792 + * # on the breakpoints. + * py_db = GlobalDebuggerHolder.global_dbg + * if py_db is None: # <<<<<<<<<<<<<< + * return + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1795 + * return + * + * if suspend_requested is None: # <<<<<<<<<<<<<< + * suspend_requested = False + * + */ + __pyx_t_6 = (__pyx_v_suspend_requested == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1796 + * + * if suspend_requested is None: + * suspend_requested = False # <<<<<<<<<<<<<< + * + * for t in threading.enumerate(): + */ + __Pyx_INCREF(Py_False); + __Pyx_DECREF_SET(__pyx_v_suspend_requested, Py_False); + + /* "_pydevd_sys_monitoring_cython.pyx":1798 + * suspend_requested = False + * + * for t in threading.enumerate(): # <<<<<<<<<<<<<< + * if getattr(t, "pydev_do_not_trace", False): + * continue + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_threading); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_enumerate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { + __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); + __pyx_t_7 = 0; + __pyx_t_8 = NULL; + } else { + __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1798, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + for (;;) { + if (likely(!__pyx_t_8)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1798, __pyx_L1_error) + #endif + if (__pyx_t_7 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 1798, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1798, __pyx_L1_error) + #endif + if (__pyx_t_7 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 1798, __pyx_L1_error) + #else + __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1798, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + } + } else { + __pyx_t_3 = __pyx_t_8(__pyx_t_4); + if (unlikely(!__pyx_t_3)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 1798, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_3); + } + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1799 + * + * for t in threading.enumerate(): + * if getattr(t, "pydev_do_not_trace", False): # <<<<<<<<<<<<<< + * continue + * try: + */ + __pyx_t_3 = __Pyx_GetAttr3(__pyx_v_t, __pyx_n_s_pydev_do_not_trace, Py_False); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1799, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1799, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1800 + * for t in threading.enumerate(): + * if getattr(t, "pydev_do_not_trace", False): + * continue # <<<<<<<<<<<<<< + * try: + * additional_info = t.additional_info + */ + goto __pyx_L6_continue; + + /* "_pydevd_sys_monitoring_cython.pyx":1799 + * + * for t in threading.enumerate(): + * if getattr(t, "pydev_do_not_trace", False): # <<<<<<<<<<<<<< + * continue + * try: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1801 + * if getattr(t, "pydev_do_not_trace", False): + * continue + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":1802 + * continue + * try: + * additional_info = t.additional_info # <<<<<<<<<<<<<< + * if additional_info is None: + * # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_t, __pyx_n_s_additional_info); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1802, __pyx_L9_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_additional_info, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1803 + * try: + * additional_info = t.additional_info + * if additional_info is None: # <<<<<<<<<<<<<< + * # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + * continue + */ + __pyx_t_6 = (__pyx_v_additional_info == Py_None); + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1805 + * if additional_info is None: + * # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + * continue # <<<<<<<<<<<<<< + * except AttributeError: + * continue + */ + goto __pyx_L15_try_continue; + + /* "_pydevd_sys_monitoring_cython.pyx":1803 + * try: + * additional_info = t.additional_info + * if additional_info is None: # <<<<<<<<<<<<<< + * # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + * continue + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1801 + * if getattr(t, "pydev_do_not_trace", False): + * continue + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + } + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; + __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; + goto __pyx_L16_try_end; + __pyx_L9_error:; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1806 + * # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + * continue + * except AttributeError: # <<<<<<<<<<<<<< + * continue + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + */ + __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); + if (__pyx_t_12) { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.update_monitor_events", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 1806, __pyx_L11_except_error) + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + + /* "_pydevd_sys_monitoring_cython.pyx":1807 + * continue + * except AttributeError: + * continue # <<<<<<<<<<<<<< + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + * suspend_requested = True + */ + goto __pyx_L18_except_continue; + __pyx_L18_except_continue:; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L15_try_continue; + } + goto __pyx_L11_except_error; + + /* "_pydevd_sys_monitoring_cython.pyx":1801 + * if getattr(t, "pydev_do_not_trace", False): + * continue + * try: # <<<<<<<<<<<<<< + * additional_info = t.additional_info + * if additional_info is None: + */ + __pyx_L11_except_error:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + goto __pyx_L1_error; + __pyx_L15_try_continue:; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); + goto __pyx_L6_continue; + __pyx_L16_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1808 + * except AttributeError: + * continue + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: # <<<<<<<<<<<<<< + * suspend_requested = True + * break + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_pydev_step_cmd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = (__Pyx_PyInt_BoolNeObjC(__pyx_t_2, __pyx_int_neg_1, -1L, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 1808, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!__pyx_t_13) { + } else { + __pyx_t_6 = __pyx_t_13; + goto __pyx_L21_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_additional_info, __pyx_n_s_pydev_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_13 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_2, __pyx_int_2, 2, 0)); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 1808, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __pyx_t_13; + __pyx_L21_bool_binop_done:; + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1809 + * continue + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + * suspend_requested = True # <<<<<<<<<<<<<< + * break + * + */ + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_suspend_requested, Py_True); + + /* "_pydevd_sys_monitoring_cython.pyx":1810 + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + * suspend_requested = True + * break # <<<<<<<<<<<<<< + * + * required_events = 0 + */ + goto __pyx_L7_break; + + /* "_pydevd_sys_monitoring_cython.pyx":1808 + * except AttributeError: + * continue + * if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: # <<<<<<<<<<<<<< + * suspend_requested = True + * break + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1798 + * suspend_requested = False + * + * for t in threading.enumerate(): # <<<<<<<<<<<<<< + * if getattr(t, "pydev_do_not_trace", False): + * continue + */ + __pyx_L6_continue:; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L23_for_end; + __pyx_L7_break:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L23_for_end; + __pyx_L23_for_end:; + + /* "_pydevd_sys_monitoring_cython.pyx":1795 + * return + * + * if suspend_requested is None: # <<<<<<<<<<<<<< + * suspend_requested = False + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1812 + * break + * + * required_events = 0 # <<<<<<<<<<<<<< + * + * has_caught_exception_breakpoint_in_pydb = ( + */ + __Pyx_INCREF(__pyx_int_0); + __pyx_v_required_events = __pyx_int_0; + + /* "_pydevd_sys_monitoring_cython.pyx":1815 + * + * has_caught_exception_breakpoint_in_pydb = ( + * py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks # <<<<<<<<<<<<<< + * ) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_caught_exceptions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1815, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1815, __pyx_L1_error) + if (!__pyx_t_6) { + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_INCREF(__pyx_t_2); + __pyx_t_4 = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L24_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_user_uncaught_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1815, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1815, __pyx_L1_error) + if (!__pyx_t_6) { + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + __Pyx_INCREF(__pyx_t_2); + __pyx_t_4 = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + goto __pyx_L24_bool_binop_done; + } + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_exception_breaks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1815, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_t_4 = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_L24_bool_binop_done:; + __pyx_v_has_caught_exception_breakpoint_in_pydb = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1818 + * ) + * + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions # <<<<<<<<<<<<<< + * + * if has_caught_exception_breakpoint_in_pydb: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_break_on_uncaught_exceptions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1818, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_break_on_uncaught_exceptions = __pyx_t_4; + __pyx_t_4 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1820 + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + * + * if has_caught_exception_breakpoint_in_pydb: # <<<<<<<<<<<<<< + * required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND + * # print('track RAISE') + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_has_caught_exception_breakpoint_in_pydb); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1820, __pyx_L1_error) + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1821 + * + * if has_caught_exception_breakpoint_in_pydb: + * required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND # <<<<<<<<<<<<<< + * # print('track RAISE') + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _raise_event) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_RAISE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_UNWIND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Or(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyNumber_InPlaceOr(__pyx_v_required_events, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1821, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_required_events, __pyx_t_2); + __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1823 + * required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND + * # print('track RAISE') + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _raise_event) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_RAISE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(__pyx_f_29_pydevd_sys_monitoring_cython__raise_event); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_1, __pyx_t_3, __pyx_t_14}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1823, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1824 + * # print('track RAISE') + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _raise_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) # <<<<<<<<<<<<<< + * else: + * if break_on_uncaught_exceptions: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_UNWIND); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(__pyx_f_29_pydevd_sys_monitoring_cython__unwind_event); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_4, __pyx_t_3, __pyx_t_1}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1824, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1820 + * break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + * + * if has_caught_exception_breakpoint_in_pydb: # <<<<<<<<<<<<<< + * required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND + * # print('track RAISE') + */ + goto __pyx_L27; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1826 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + * else: + * if break_on_uncaught_exceptions: # <<<<<<<<<<<<<< + * required_events |= monitor.events.PY_UNWIND + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + */ + /*else*/ { + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_break_on_uncaught_exceptions); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1826, __pyx_L1_error) + if (__pyx_t_6) { + + /* "_pydevd_sys_monitoring_cython.pyx":1827 + * else: + * if break_on_uncaught_exceptions: + * required_events |= monitor.events.PY_UNWIND # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_events); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_PY_UNWIND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyNumber_InPlaceOr(__pyx_v_required_events, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1827, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_required_events, __pyx_t_14); + __pyx_t_14 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1828 + * if break_on_uncaught_exceptions: + * required_events |= monitor.events.PY_UNWIND + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) # <<<<<<<<<<<<<< + * else: + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_PY_UNWIND); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(__pyx_f_29_pydevd_sys_monitoring_cython__unwind_event); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_2, __pyx_t_3, __pyx_t_4}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1828, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1826 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + * else: + * if break_on_uncaught_exceptions: # <<<<<<<<<<<<<< + * required_events |= monitor.events.PY_UNWIND + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + */ + goto __pyx_L28; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1830 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + * else: + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) + * + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_RAISE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_1, __pyx_t_3, Py_None}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1830, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1831 + * else: + * monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) # <<<<<<<<<<<<<< + * + * has_breaks = py_db.has_plugin_line_breaks + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_PY_UNWIND); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_1, Py_None}; + __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1831, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __pyx_L28:; + } + __pyx_L27:; + + /* "_pydevd_sys_monitoring_cython.pyx":1833 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) + * + * has_breaks = py_db.has_plugin_line_breaks # <<<<<<<<<<<<<< + * if not has_breaks: + * if py_db.function_breakpoint_name_to_breakpoint: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_has_plugin_line_breaks); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1833, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_v_has_breaks = __pyx_t_14; + __pyx_t_14 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1834 + * + * has_breaks = py_db.has_plugin_line_breaks + * if not has_breaks: # <<<<<<<<<<<<<< + * if py_db.function_breakpoint_name_to_breakpoint: + * has_breaks = True + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_has_breaks); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1834, __pyx_L1_error) + __pyx_t_13 = (!__pyx_t_6); + if (__pyx_t_13) { + + /* "_pydevd_sys_monitoring_cython.pyx":1835 + * has_breaks = py_db.has_plugin_line_breaks + * if not has_breaks: + * if py_db.function_breakpoint_name_to_breakpoint: # <<<<<<<<<<<<<< + * has_breaks = True + * else: + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_function_breakpoint_name_to_brea); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1835, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 1835, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (__pyx_t_13) { + + /* "_pydevd_sys_monitoring_cython.pyx":1836 + * if not has_breaks: + * if py_db.function_breakpoint_name_to_breakpoint: + * has_breaks = True # <<<<<<<<<<<<<< + * else: + * file_to_line_to_breakpoints = py_db.breakpoints + */ + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_has_breaks, Py_True); + + /* "_pydevd_sys_monitoring_cython.pyx":1835 + * has_breaks = py_db.has_plugin_line_breaks + * if not has_breaks: + * if py_db.function_breakpoint_name_to_breakpoint: # <<<<<<<<<<<<<< + * has_breaks = True + * else: + */ + goto __pyx_L30; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1838 + * has_breaks = True + * else: + * file_to_line_to_breakpoints = py_db.breakpoints # <<<<<<<<<<<<<< + * for line_to_breakpoints in file_to_line_to_breakpoints.values(): + * if line_to_breakpoints: + */ + /*else*/ { + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_breakpoints); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1838, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_v_file_to_line_to_breakpoints = __pyx_t_14; + __pyx_t_14 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1839 + * else: + * file_to_line_to_breakpoints = py_db.breakpoints + * for line_to_breakpoints in file_to_line_to_breakpoints.values(): # <<<<<<<<<<<<<< + * if line_to_breakpoints: + * has_breaks = True + */ + __pyx_t_7 = 0; + if (unlikely(__pyx_v_file_to_line_to_breakpoints == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 1839, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_file_to_line_to_breakpoints, 0, __pyx_n_s_values, (&__pyx_t_16), (&__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1839, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_14); + __pyx_t_14 = __pyx_t_3; + __pyx_t_3 = 0; + while (1) { + __pyx_t_17 = __Pyx_dict_iter_next(__pyx_t_14, __pyx_t_16, &__pyx_t_7, NULL, &__pyx_t_3, NULL, __pyx_t_12); + if (unlikely(__pyx_t_17 == 0)) break; + if (unlikely(__pyx_t_17 == -1)) __PYX_ERR(0, 1839, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_line_to_breakpoints, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1840 + * file_to_line_to_breakpoints = py_db.breakpoints + * for line_to_breakpoints in file_to_line_to_breakpoints.values(): + * if line_to_breakpoints: # <<<<<<<<<<<<<< + * has_breaks = True + * break + */ + __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_v_line_to_breakpoints); if (unlikely((__pyx_t_13 < 0))) __PYX_ERR(0, 1840, __pyx_L1_error) + if (__pyx_t_13) { + + /* "_pydevd_sys_monitoring_cython.pyx":1841 + * for line_to_breakpoints in file_to_line_to_breakpoints.values(): + * if line_to_breakpoints: + * has_breaks = True # <<<<<<<<<<<<<< + * break + * + */ + __Pyx_INCREF(Py_True); + __Pyx_DECREF_SET(__pyx_v_has_breaks, Py_True); + + /* "_pydevd_sys_monitoring_cython.pyx":1842 + * if line_to_breakpoints: + * has_breaks = True + * break # <<<<<<<<<<<<<< + * + * if has_breaks or suspend_requested: + */ + goto __pyx_L32_break; + + /* "_pydevd_sys_monitoring_cython.pyx":1840 + * file_to_line_to_breakpoints = py_db.breakpoints + * for line_to_breakpoints in file_to_line_to_breakpoints.values(): + * if line_to_breakpoints: # <<<<<<<<<<<<<< + * has_breaks = True + * break + */ + } + } + __pyx_L32_break:; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __pyx_L30:; + + /* "_pydevd_sys_monitoring_cython.pyx":1834 + * + * has_breaks = py_db.has_plugin_line_breaks + * if not has_breaks: # <<<<<<<<<<<<<< + * if py_db.function_breakpoint_name_to_breakpoint: + * has_breaks = True + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1844 + * break + * + * if has_breaks or suspend_requested: # <<<<<<<<<<<<<< + * # print('track PY_START|PY_RESUME, suspend_requested=', suspend_requested) + * required_events |= monitor.events.PY_START | monitor.events.PY_RESUME + */ + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_has_breaks); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1844, __pyx_L1_error) + if (!__pyx_t_6) { + } else { + __pyx_t_13 = __pyx_t_6; + goto __pyx_L35_bool_binop_done; + } + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_suspend_requested); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1844, __pyx_L1_error) + __pyx_t_13 = __pyx_t_6; + __pyx_L35_bool_binop_done:; + if (__pyx_t_13) { + + /* "_pydevd_sys_monitoring_cython.pyx":1846 + * if has_breaks or suspend_requested: + * # print('track PY_START|PY_RESUME, suspend_requested=', suspend_requested) + * required_events |= monitor.events.PY_START | monitor.events.PY_RESUME # <<<<<<<<<<<<<< + * + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method_event) + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_PY_START); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_monitor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_RESUME); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyNumber_Or(__pyx_t_14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_InPlaceOr(__pyx_v_required_events, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1846, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_required_events, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1848 + * required_events |= monitor.events.PY_START | monitor.events.PY_RESUME + * + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method_event) # <<<<<<<<<<<<<< + * # monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _resume_method_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_PY_START); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(__pyx_f_29_pydevd_sys_monitoring_cython__start_method_event); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_1, __pyx_t_4, __pyx_t_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1848, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1850 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method_event) + * # monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _resume_method_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _jump_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _return_event) + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LINE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(__pyx_f_29_pydevd_sys_monitoring_cython__line_event); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_14, __pyx_t_4, __pyx_t_1}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1850, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1851 + * # monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _resume_method_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _jump_event) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _return_event) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_JUMP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(__pyx_f_29_pydevd_sys_monitoring_cython__jump_event); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_2, __pyx_t_4, __pyx_t_14}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1851, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1852 + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _jump_event) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _return_event) # <<<<<<<<<<<<<< + * + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_monitor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_PY_RETURN); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(__pyx_f_29_pydevd_sys_monitoring_cython__return_event); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_15 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_15)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_15, __pyx_t_1, __pyx_t_4, __pyx_t_2}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1852, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1844 + * break + * + * if has_breaks or suspend_requested: # <<<<<<<<<<<<<< + * # print('track PY_START|PY_RESUME, suspend_requested=', suspend_requested) + * required_events |= monitor.events.PY_START | monitor.events.PY_RESUME + */ + goto __pyx_L34; + } + + /* "_pydevd_sys_monitoring_cython.pyx":1855 + * + * else: + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_START); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_14, __pyx_t_4, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1855, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1856 + * else: + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_RESUME); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_14, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1856, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1857 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LINE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_4, __pyx_t_2, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1857, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1858 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) # <<<<<<<<<<<<<< + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_JUMP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_14, __pyx_t_4, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1858, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1859 + * monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) # <<<<<<<<<<<<<< + * + * monitor.set_events(DEBUGGER_ID, required_events) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register_callback); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_monitor); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_events); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PY_RETURN); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[4] = {__pyx_t_1, __pyx_t_2, __pyx_t_14, Py_None}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1859, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L34:; + + /* "_pydevd_sys_monitoring_cython.pyx":1861 + * monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + * + * monitor.set_events(DEBUGGER_ID, required_events) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_monitor); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1861, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_set_events); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1861, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1861, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, __pyx_v_required_events}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1861, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1779 + * + * + * def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: # <<<<<<<<<<<<<< + * """ + * This should be called when breakpoints change. + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.update_monitor_events", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_py_db); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_XDECREF(__pyx_v_additional_info); + __Pyx_XDECREF(__pyx_v_required_events); + __Pyx_XDECREF(__pyx_v_has_caught_exception_breakpoint_in_pydb); + __Pyx_XDECREF(__pyx_v_break_on_uncaught_exceptions); + __Pyx_XDECREF(__pyx_v_has_breaks); + __Pyx_XDECREF(__pyx_v_file_to_line_to_breakpoints); + __Pyx_XDECREF(__pyx_v_line_to_breakpoints); + __Pyx_XDECREF(__pyx_v_suspend_requested); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1864 + * + * + * def restart_events() -> None: # <<<<<<<<<<<<<< + * # Note: if breakpoints change, update_monitor_events usually needs to be + * # called first, then the line event tracing must be set for existing frames + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_17restart_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_17restart_events = {"restart_events", (PyCFunction)__pyx_pw_29_pydevd_sys_monitoring_cython_17restart_events, METH_NOARGS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_17restart_events(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("restart_events (wrapper)", 0); + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_16restart_events(__pyx_self); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_16restart_events(CYTHON_UNUSED PyObject *__pyx_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("restart_events", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1868 + * # called first, then the line event tracing must be set for existing frames + * # and then this function must be called at the end. + * monitor.restart_events() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_restart_events); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1868, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1864 + * + * + * def restart_events() -> None: # <<<<<<<<<<<<<< + * # Note: if breakpoints change, update_monitor_events usually needs to be + * # called first, then the line event tracing must be set for existing frames + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.restart_events", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1873 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_same_frame(PyDBAdditionalThreadInfo info, target_frame, current_frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_same_frame(info, target_frame, current_frame): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython__is_same_frame(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *__pyx_v_info, PyObject *__pyx_v_target_frame, PyObject *__pyx_v_current_frame) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_is_same_frame", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1878 + * # ENDIF + * # fmt: on + * if target_frame is current_frame: # <<<<<<<<<<<<<< + * return True + * + */ + __pyx_t_1 = (__pyx_v_target_frame == __pyx_v_current_frame); + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1879 + * # fmt: on + * if target_frame is current_frame: + * return True # <<<<<<<<<<<<<< + * + * if info.pydev_use_scoped_step_frame: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1878 + * # ENDIF + * # fmt: on + * if target_frame is current_frame: # <<<<<<<<<<<<<< + * return True + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1881 + * return True + * + * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + */ + if (__pyx_v_info->pydev_use_scoped_step_frame) { + + /* "_pydevd_sys_monitoring_cython.pyx":1884 + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + * # The co_name may be different (it may include the line number), but + */ + __pyx_t_2 = (__pyx_v_target_frame != Py_None); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L6_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_current_frame != Py_None); + __pyx_t_1 = __pyx_t_2; + __pyx_L6_bool_binop_done:; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1885 + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_target_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_filename); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1885, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1888 + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. + * f = current_frame.f_back # <<<<<<<<<<<<<< + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_current_frame, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1888, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_f = __pyx_t_3; + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1889 + * # the filename must still be the same. + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + __pyx_t_2 = (__pyx_v_f != Py_None); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1889, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_2; + __pyx_L10_bool_binop_done:; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1890 + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back # <<<<<<<<<<<<<< + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * return True + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_back); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1891 + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * return True + * + */ + __pyx_t_2 = (__pyx_v_f != Py_None); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L13_bool_binop_done; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_f_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_co_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_3, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1891, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __pyx_t_2; + __pyx_L13_bool_binop_done:; + if (__pyx_t_1) { + + /* "_pydevd_sys_monitoring_cython.pyx":1892 + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + * return True # <<<<<<<<<<<<<< + * + * return False + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_True); + __pyx_r = Py_True; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1891 + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: # <<<<<<<<<<<<<< + * return True + * + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1889 + * # the filename must still be the same. + * f = current_frame.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: # <<<<<<<<<<<<<< + * f = f.f_back + * if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1885 + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: # <<<<<<<<<<<<<< + * # The co_name may be different (it may include the line number), but + * # the filename must still be the same. + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1884 + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + * if target_frame is not None and current_frame is not None: # <<<<<<<<<<<<<< + * if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + * # The co_name may be different (it may include the line number), but + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1881 + * return True + * + * if info.pydev_use_scoped_step_frame: # <<<<<<<<<<<<<< + * # If using scoped step we don't check the target, we just need to check + * # if the current matches the same heuristic where the target was defined. + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":1894 + * return True + * + * return False # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_False); + __pyx_r = Py_False; + goto __pyx_L0; + + /* "_pydevd_sys_monitoring_cython.pyx":1873 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _is_same_frame(PyDBAdditionalThreadInfo info, target_frame, current_frame): # <<<<<<<<<<<<<< + * # ELSE + * # def _is_same_frame(info, target_frame, current_frame): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._is_same_frame", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "_pydevd_sys_monitoring_cython.pyx":1899 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _do_wait_suspend(py_db, thread_info, frame, event, arg): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_19_do_wait_suspend(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_19_do_wait_suspend = {"_do_wait_suspend", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_19_do_wait_suspend, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_19_do_wait_suspend(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_py_db = 0; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info = 0; + PyObject *__pyx_v_frame = 0; + PyObject *__pyx_v_event = 0; + PyObject *__pyx_v_arg = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("_do_wait_suspend (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_py_db,&__pyx_n_s_thread_info,&__pyx_n_s_frame,&__pyx_n_s_event,&__pyx_n_s_arg,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_py_db)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1899, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_thread_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1899, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_do_wait_suspend", 1, 5, 5, 1); __PYX_ERR(0, 1899, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_frame)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1899, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_do_wait_suspend", 1, 5, 5, 2); __PYX_ERR(0, 1899, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_event)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1899, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_do_wait_suspend", 1, 5, 5, 3); __PYX_ERR(0, 1899, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1899, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("_do_wait_suspend", 1, 5, 5, 4); __PYX_ERR(0, 1899, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_do_wait_suspend") < 0)) __PYX_ERR(0, 1899, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_py_db = values[0]; + __pyx_v_thread_info = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)values[1]); + __pyx_v_frame = values[2]; + __pyx_v_event = values[3]; + __pyx_v_arg = values[4]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("_do_wait_suspend", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1899, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._do_wait_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_thread_info), __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo, 1, "thread_info", 0))) __PYX_ERR(0, 1899, __pyx_L1_error) + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_18_do_wait_suspend(__pyx_self, __pyx_v_py_db, __pyx_v_thread_info, __pyx_v_frame, __pyx_v_event, __pyx_v_arg); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_18_do_wait_suspend(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_py_db, struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v_thread_info, PyObject *__pyx_v_frame, PyObject *__pyx_v_event, PyObject *__pyx_v_arg) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_do_wait_suspend", 1); + + /* "_pydevd_sys_monitoring_cython.pyx":1904 + * # ENDIF + * # fmt: on + * thread_info.additional_info.trace_suspend_type = "sys_monitor" # <<<<<<<<<<<<<< + * py_db.do_wait_suspend(thread_info.thread, frame, event, arg) + * + */ + __Pyx_INCREF(__pyx_n_s_sys_monitor); + __Pyx_GIVEREF(__pyx_n_s_sys_monitor); + __Pyx_GOTREF(__pyx_v_thread_info->additional_info->trace_suspend_type); + __Pyx_DECREF(__pyx_v_thread_info->additional_info->trace_suspend_type); + __pyx_v_thread_info->additional_info->trace_suspend_type = __pyx_n_s_sys_monitor; + + /* "_pydevd_sys_monitoring_cython.pyx":1905 + * # fmt: on + * thread_info.additional_info.trace_suspend_type = "sys_monitor" + * py_db.do_wait_suspend(thread_info.thread, frame, event, arg) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_py_db, __pyx_n_s_do_wait_suspend_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1905, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_v_thread_info->thread, __pyx_v_frame, __pyx_v_event, __pyx_v_arg}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1905, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1899 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _do_wait_suspend(py_db, thread_info, frame, event, arg): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython._do_wait_suspend", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_21__pyx_unpickle_ThreadInfo = {"__pyx_unpickle_ThreadInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_21__pyx_unpickle_ThreadInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_21__pyx_unpickle_ThreadInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_ThreadInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_ThreadInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_ThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_20__pyx_unpickle_ThreadInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_20__pyx_unpickle_ThreadInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo", 1); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xd625bfa, 0xfdc1f18, 0x57c379d): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__18, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0xd625bfa, 0xfdc1f18, 0x57c379d): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + * __pyx_result = ThreadInfo.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0xd625bfa, 0xfdc1f18, 0x57c379d): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = ThreadInfo.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xd625bfa, 0xfdc1f18, 0x57c379d): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + * __pyx_result = ThreadInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + * __pyx_result = ThreadInfo.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":9 + * __pyx_result = ThreadInfo.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_ThreadInfo__set_state(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + * __pyx_result = ThreadInfo.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_ThreadInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_ThreadInfo__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + unsigned long __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_ThreadInfo__set_state", 1); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[4]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo))))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->additional_info); + __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->additional_info); + __pyx_v___pyx_result->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->thread); + __Pyx_DECREF(__pyx_v___pyx_result->thread); + __pyx_v___pyx_result->thread = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_As_unsigned_long(__pyx_t_1); if (unlikely((__pyx_t_2 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->thread_ident = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->trace); + __Pyx_DECREF(__pyx_v___pyx_result->trace); + __pyx_v___pyx_result->trace = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[4]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 4); + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_3 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_3) { + + /* "(tree fragment)":14 + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[4]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[4]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_ThreadInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_FuncCodeInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_23__pyx_unpickle_FuncCodeInfo = {"__pyx_unpickle_FuncCodeInfo", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_23__pyx_unpickle_FuncCodeInfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_23__pyx_unpickle_FuncCodeInfo(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_FuncCodeInfo") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FuncCodeInfo", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_FuncCodeInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_22__pyx_unpickle_FuncCodeInfo(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_22__pyx_unpickle_FuncCodeInfo(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo", 1); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x3f403d2, 0x5f5636f, 0xb44aa80): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__20, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0x3f403d2, 0x5f5636f, 0xb44aa80): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0x3f403d2, 0x5f5636f, 0xb44aa80): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x3f403d2, 0x5f5636f, 0xb44aa80): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":9 + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_FuncCodeInfo__set_state(((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x3f403d2, 0x5f5636f, 0xb44aa80) = (abs_path_filename, always_filtered_out, always_skip_code, bp_line_to_breakpoint, breakpoint_found, canonical_normalized_filename, co_filename, co_name, code_obj, filtered_out_force_checked, function_breakpoint, function_breakpoint_found, plugin_call_breakpoint_found, plugin_call_stepping, plugin_line_breakpoint_found, plugin_line_stepping, plugin_return_stepping, pydb_mtime, try_except_container_obj))" % __pyx_checksum + * __pyx_result = FuncCodeInfo.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_FuncCodeInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_FuncCodeInfo", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle_FuncCodeInfo__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_FuncCodeInfo__set_state", 1); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->abs_path_filename); + __Pyx_DECREF(__pyx_v___pyx_result->abs_path_filename); + __pyx_v___pyx_result->abs_path_filename = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->always_filtered_out = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->always_skip_code = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->bp_line_to_breakpoint); + __Pyx_DECREF(__pyx_v___pyx_result->bp_line_to_breakpoint); + __pyx_v___pyx_result->bp_line_to_breakpoint = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->breakpoint_found = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->canonical_normalized_filename); + __Pyx_DECREF(__pyx_v___pyx_result->canonical_normalized_filename); + __pyx_v___pyx_result->canonical_normalized_filename = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->co_filename); + __Pyx_DECREF(__pyx_v___pyx_result->co_filename); + __pyx_v___pyx_result->co_filename = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->co_name); + __Pyx_DECREF(__pyx_v___pyx_result->co_name); + __pyx_v___pyx_result->co_name = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->code_obj); + __Pyx_DECREF(__pyx_v___pyx_result->code_obj); + __pyx_v___pyx_result->code_obj = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->filtered_out_force_checked = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->function_breakpoint); + __Pyx_DECREF(__pyx_v___pyx_result->function_breakpoint); + __pyx_v___pyx_result->function_breakpoint = __pyx_t_1; + __pyx_t_1 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->function_breakpoint_found = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->plugin_call_breakpoint_found = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->plugin_call_stepping = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->plugin_line_breakpoint_found = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->plugin_line_stepping = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->plugin_return_stepping = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v___pyx_result->pydb_mtime = __pyx_t_3; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 18, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->try_except_container_obj); + __Pyx_DECREF(__pyx_v___pyx_result->try_except_container_obj); + __pyx_v___pyx_result->try_except_container_obj = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 > 19); + if (__pyx_t_5) { + } else { + __pyx_t_2 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[19]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 19, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[19]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_FuncCodeInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_FuncCodeInfo__set_state(FuncCodeInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.abs_path_filename = __pyx_state[0]; __pyx_result.always_filtered_out = __pyx_state[1]; __pyx_result.always_skip_code = __pyx_state[2]; __pyx_result.bp_line_to_breakpoint = __pyx_state[3]; __pyx_result.breakpoint_found = __pyx_state[4]; __pyx_result.canonical_normalized_filename = __pyx_state[5]; __pyx_result.co_filename = __pyx_state[6]; __pyx_result.co_name = __pyx_state[7]; __pyx_result.code_obj = __pyx_state[8]; __pyx_result.filtered_out_force_checked = __pyx_state[9]; __pyx_result.function_breakpoint = __pyx_state[10]; __pyx_result.function_breakpoint_found = __pyx_state[11]; __pyx_result.plugin_call_breakpoint_found = __pyx_state[12]; __pyx_result.plugin_call_stepping = __pyx_state[13]; __pyx_result.plugin_line_breakpoint_found = __pyx_state[14]; __pyx_result.plugin_line_stepping = __pyx_state[15]; __pyx_result.plugin_return_stepping = __pyx_state[16]; __pyx_result.pydb_mtime = __pyx_state[17]; __pyx_result.try_except_container_obj = __pyx_state[18] + * if len(__pyx_state) > 19 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle_FuncCodeInfo__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle__TryExceptContainerObj(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_25__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_29_pydevd_sys_monitoring_cython_25__pyx_unpickle__TryExceptContainerObj = {"__pyx_unpickle__TryExceptContainerObj", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_25__pyx_unpickle__TryExceptContainerObj, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_29_pydevd_sys_monitoring_cython_25__pyx_unpickle__TryExceptContainerObj(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle__TryExceptContainerObj") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle__TryExceptContainerObj", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle__TryExceptContainerObj", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_29_pydevd_sys_monitoring_cython_24__pyx_unpickle__TryExceptContainerObj(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_29_pydevd_sys_monitoring_cython_24__pyx_unpickle__TryExceptContainerObj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj", 1); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__21, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xdbf5e44, 0xde17cd3, 0xc8b6eb1): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":9 + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle__TryExceptContainerObj__set_state(((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xdbf5e44, 0xde17cd3, 0xc8b6eb1) = (try_except_infos))" % __pyx_checksum + * __pyx_result = _TryExceptContainerObj.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): + * __pyx_result.try_except_infos = __pyx_state[0] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle__TryExceptContainerObj(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle__TryExceptContainerObj", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.try_except_infos = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_29_pydevd_sys_monitoring_cython___pyx_unpickle__TryExceptContainerObj__set_state(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle__TryExceptContainerObj__set_state", 1); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): + * __pyx_result.try_except_infos = __pyx_state[0] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(1, 12, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_1); + __Pyx_GOTREF(__pyx_v___pyx_result->try_except_infos); + __Pyx_DECREF(__pyx_v___pyx_result->try_except_infos); + __pyx_v___pyx_result->try_except_infos = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): + * __pyx_result.try_except_infos = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 > 1); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_2 = __pyx_t_4; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.try_except_infos = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<< + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_6))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_6, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): + * __pyx_result.try_except_infos = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[1]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle__TryExceptContainerObj__set_state(<_TryExceptContainerObj> __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle__TryExceptContainerObj__set_state(_TryExceptContainerObj __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.try_except_infos = __pyx_state[0] + * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython.__pyx_unpickle__TryExceptContainerObj__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython_ThreadInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *p; + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + #endif + p = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)o); + p->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)Py_None); Py_INCREF(Py_None); + p->thread = Py_None; Py_INCREF(Py_None); + p->trace = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_ThreadInfo(PyObject *o) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_ThreadInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->additional_info); + Py_CLEAR(p->thread); + Py_CLEAR(p->trace); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif +} + +static int __pyx_tp_traverse_29_pydevd_sys_monitoring_cython_ThreadInfo(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)o; + if (p->additional_info) { + e = (*v)(((PyObject *)p->additional_info), a); if (e) return e; + } + if (p->thread) { + e = (*v)(p->thread, a); if (e) return e; + } + if (p->trace) { + e = (*v)(p->trace, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_29_pydevd_sys_monitoring_cython_ThreadInfo(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo *)o; + tmp = ((PyObject*)p->additional_info); + p->additional_info = ((struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo *)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->thread); + p->thread = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->trace); + p->trace = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_29_pydevd_sys_monitoring_cython_ThreadInfo[] = { + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_ThreadInfo}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_29_pydevd_sys_monitoring_cython_ThreadInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_29_pydevd_sys_monitoring_cython_ThreadInfo}, + {Py_tp_methods, (void *)__pyx_methods_29_pydevd_sys_monitoring_cython_ThreadInfo}, + {Py_tp_init, (void *)__pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_29_pydevd_sys_monitoring_cython_ThreadInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo_spec = { + "_pydevd_sys_monitoring_cython.ThreadInfo", + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo_slots, +}; +#else + +static PyTypeObject __pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""ThreadInfo", /*tp_name*/ + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython_ThreadInfo), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_ThreadInfo, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_29_pydevd_sys_monitoring_cython_ThreadInfo, /*tp_traverse*/ + __pyx_tp_clear_29_pydevd_sys_monitoring_cython_ThreadInfo, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_29_pydevd_sys_monitoring_cython_ThreadInfo, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + __pyx_pw_29_pydevd_sys_monitoring_cython_10ThreadInfo_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_29_pydevd_sys_monitoring_cython_ThreadInfo, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython_FuncCodeInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *p; + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + #endif + p = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)o); + p->co_filename = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->canonical_normalized_filename = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->abs_path_filename = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->bp_line_to_breakpoint = ((PyObject*)Py_None); Py_INCREF(Py_None); + p->function_breakpoint = Py_None; Py_INCREF(Py_None); + p->try_except_container_obj = Py_None; Py_INCREF(Py_None); + p->code_obj = Py_None; Py_INCREF(Py_None); + p->co_name = ((PyObject*)Py_None); Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_FuncCodeInfo(PyObject *o) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_FuncCodeInfo) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->co_filename); + Py_CLEAR(p->canonical_normalized_filename); + Py_CLEAR(p->abs_path_filename); + Py_CLEAR(p->bp_line_to_breakpoint); + Py_CLEAR(p->function_breakpoint); + Py_CLEAR(p->try_except_container_obj); + Py_CLEAR(p->code_obj); + Py_CLEAR(p->co_name); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif +} + +static int __pyx_tp_traverse_29_pydevd_sys_monitoring_cython_FuncCodeInfo(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)o; + if (p->bp_line_to_breakpoint) { + e = (*v)(p->bp_line_to_breakpoint, a); if (e) return e; + } + if (p->function_breakpoint) { + e = (*v)(p->function_breakpoint, a); if (e) return e; + } + if (p->try_except_container_obj) { + e = (*v)(p->try_except_container_obj, a); if (e) return e; + } + if (p->code_obj) { + e = (*v)(p->code_obj, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_29_pydevd_sys_monitoring_cython_FuncCodeInfo(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo *)o; + tmp = ((PyObject*)p->bp_line_to_breakpoint); + p->bp_line_to_breakpoint = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->function_breakpoint); + p->function_breakpoint = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->try_except_container_obj); + p->try_except_container_obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + tmp = ((PyObject*)p->code_obj); + p->code_obj = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_29_pydevd_sys_monitoring_cython_FuncCodeInfo[] = { + {"get_line_of_offset", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_FuncCodeInfo}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_29_pydevd_sys_monitoring_cython_FuncCodeInfo}, + {Py_tp_clear, (void *)__pyx_tp_clear_29_pydevd_sys_monitoring_cython_FuncCodeInfo}, + {Py_tp_methods, (void *)__pyx_methods_29_pydevd_sys_monitoring_cython_FuncCodeInfo}, + {Py_tp_init, (void *)__pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_29_pydevd_sys_monitoring_cython_FuncCodeInfo}, + {0, 0}, +}; +static PyType_Spec __pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo_spec = { + "_pydevd_sys_monitoring_cython.FuncCodeInfo", + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo_slots, +}; +#else + +static PyTypeObject __pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""FuncCodeInfo", /*tp_name*/ + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython_FuncCodeInfo), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython_FuncCodeInfo, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_29_pydevd_sys_monitoring_cython_FuncCodeInfo, /*tp_traverse*/ + __pyx_tp_clear_29_pydevd_sys_monitoring_cython_FuncCodeInfo, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_29_pydevd_sys_monitoring_cython_FuncCodeInfo, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + __pyx_pw_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_29_pydevd_sys_monitoring_cython_FuncCodeInfo, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyObject *__pyx_tp_new_29_pydevd_sys_monitoring_cython__TryExceptContainerObj(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *p; + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + #endif + p = ((struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)o); + p->try_except_infos = ((PyObject*)Py_None); Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython__TryExceptContainerObj(PyObject *o) { + struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython__TryExceptContainerObj) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->try_except_infos); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif +} + +static int __pyx_tp_traverse_29_pydevd_sys_monitoring_cython__TryExceptContainerObj(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)o; + if (p->try_except_infos) { + e = (*v)(p->try_except_infos, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_29_pydevd_sys_monitoring_cython__TryExceptContainerObj(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *p = (struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj *)o; + tmp = ((PyObject*)p->try_except_infos); + p->try_except_infos = ((PyObject*)Py_None); Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_29_pydevd_sys_monitoring_cython__TryExceptContainerObj[] = { + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_29_pydevd_sys_monitoring_cython__TryExceptContainerObj}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_29_pydevd_sys_monitoring_cython__TryExceptContainerObj}, + {Py_tp_clear, (void *)__pyx_tp_clear_29_pydevd_sys_monitoring_cython__TryExceptContainerObj}, + {Py_tp_methods, (void *)__pyx_methods_29_pydevd_sys_monitoring_cython__TryExceptContainerObj}, + {Py_tp_init, (void *)__pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_29_pydevd_sys_monitoring_cython__TryExceptContainerObj}, + {0, 0}, +}; +static PyType_Spec __pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj_spec = { + "_pydevd_sys_monitoring_cython._TryExceptContainerObj", + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj_slots, +}; +#else + +static PyTypeObject __pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""_TryExceptContainerObj", /*tp_name*/ + sizeof(struct __pyx_obj_29_pydevd_sys_monitoring_cython__TryExceptContainerObj), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_doc*/ + __pyx_tp_traverse_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, /*tp_traverse*/ + __pyx_tp_clear_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + __pyx_pw_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc[8]; +static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc = 0; +#endif + +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc)))) { + o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc]; + memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc)); + (void) PyObject_INIT(o, t); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc)))) { + __pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc}, + {Py_tp_new, (void *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc}, + {0, 0}, +}; +static PyType_Spec __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_spec = { + "_pydevd_sys_monitoring_cython.__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc", + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_slots, +}; +#else + +static PyTypeObject __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc", /*tp_name*/ + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset[8]; +static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset = 0; +#endif + +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset)))) { + o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset]; + memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset)); + (void) PyObject_INIT(o, t); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset)))) { + __pyx_freelist___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset}, + {Py_tp_new, (void *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset}, + {0, 0}, +}; +static PyType_Spec __pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_spec = { + "_pydevd_sys_monitoring_cython.__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset", + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_slots, +}; +#else + +static PyTypeObject __pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset", /*tp_name*/ + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line[8]; +static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line = 0; +#endif + +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line)))) { + o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line]; + memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line)); + (void) PyObject_INIT(o, t); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line)))) { + __pyx_freelist___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line}, + {Py_tp_new, (void *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line}, + {0, 0}, +}; +static PyType_Spec __pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_spec = { + "_pydevd_sys_monitoring_cython.__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line", + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_slots, +}; +#else + +static PyTypeObject __pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line", /*tp_name*/ + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset[8]; +static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset = 0; +#endif + +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset)))) { + o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset]; + memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset)); + (void) PyObject_INIT(o, t); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset)))) { + __pyx_freelist___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset}, + {Py_tp_new, (void *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset}, + {0, 0}, +}; +static PyType_Spec __pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_spec = { + "_pydevd_sys_monitoring_cython.__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset", + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_slots, +}; +#else + +static PyTypeObject __pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset", /*tp_name*/ + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +#if CYTHON_USE_FREELISTS +static struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval[8]; +static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval = 0; +#endif + +static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + #if CYTHON_USE_FREELISTS + if (likely((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval)))) { + o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval]; + memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval)); + (void) PyObject_INIT(o, t); + } else + #endif + { + o = (*t->tp_alloc)(t, 0); + if (unlikely(!o)) return 0; + } + #endif + return o; +} + +static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + #if CYTHON_USE_FREELISTS + if (((int)(__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval)))) { + __pyx_freelist___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval *)o); + } else + #endif + { + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif + } +} +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval}, + {Py_tp_new, (void *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval}, + {0, 0}, +}; +static PyType_Spec __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_spec = { + "_pydevd_sys_monitoring_cython.__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval", + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, + __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_slots, +}; +#else + +static PyTypeObject __pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval = { + PyVarObject_HEAD_INIT(0, 0) + "_pydevd_sys_monitoring_cython.""__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval", /*tp_name*/ + sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + 0, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + 0, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif +/* #### Code section: pystring_table ### */ + +static int __Pyx_CreateStringTabAndInitStrings(void) { + __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0}, + {&__pyx_n_s_ALL, __pyx_k_ALL, sizeof(__pyx_k_ALL), 0, 0, 1, 1}, + {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1}, + {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_SET_BREAK, __pyx_k_CMD_SET_BREAK, sizeof(__pyx_k_CMD_SET_BREAK), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_k_CMD_SET_FUNCTION_BREAK, sizeof(__pyx_k_CMD_SET_FUNCTION_BREAK), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_SMART_STEP_INTO, __pyx_k_CMD_SMART_STEP_INTO, sizeof(__pyx_k_CMD_SMART_STEP_INTO), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_INTO, __pyx_k_CMD_STEP_INTO, sizeof(__pyx_k_CMD_STEP_INTO), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_INTO_COROUTINE, __pyx_k_CMD_STEP_INTO_COROUTINE, sizeof(__pyx_k_CMD_STEP_INTO_COROUTINE), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_INTO_MY_CODE, __pyx_k_CMD_STEP_INTO_MY_CODE, sizeof(__pyx_k_CMD_STEP_INTO_MY_CODE), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_OVER, __pyx_k_CMD_STEP_OVER, sizeof(__pyx_k_CMD_STEP_OVER), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_OVER_MY_CODE, __pyx_k_CMD_STEP_OVER_MY_CODE, sizeof(__pyx_k_CMD_STEP_OVER_MY_CODE), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_RETURN, __pyx_k_CMD_STEP_RETURN, sizeof(__pyx_k_CMD_STEP_RETURN), 0, 0, 1, 1}, + {&__pyx_n_s_CMD_STEP_RETURN_MY_CODE, __pyx_k_CMD_STEP_RETURN_MY_CODE, sizeof(__pyx_k_CMD_STEP_RETURN_MY_CODE), 0, 0, 1, 1}, + {&__pyx_n_s_CodeLineInfo, __pyx_k_CodeLineInfo, sizeof(__pyx_k_CodeLineInfo), 0, 0, 1, 1}, + {&__pyx_n_s_CodeType, __pyx_k_CodeType, sizeof(__pyx_k_CodeType), 0, 0, 1, 1}, + {&__pyx_n_s_DEBUGGER_ID, __pyx_k_DEBUGGER_ID, sizeof(__pyx_k_DEBUGGER_ID), 0, 0, 1, 1}, + {&__pyx_n_s_DEBUG_START, __pyx_k_DEBUG_START, sizeof(__pyx_k_DEBUG_START), 0, 0, 1, 1}, + {&__pyx_n_s_DEBUG_START_PY3K, __pyx_k_DEBUG_START_PY3K, sizeof(__pyx_k_DEBUG_START_PY3K), 0, 0, 1, 1}, + {&__pyx_n_s_DISABLE, __pyx_k_DISABLE, sizeof(__pyx_k_DISABLE), 0, 0, 1, 1}, + {&__pyx_n_s_DeleteDummyThreadOnDel, __pyx_k_DeleteDummyThreadOnDel, sizeof(__pyx_k_DeleteDummyThreadOnDel), 0, 0, 1, 1}, + {&__pyx_n_s_DeleteDummyThreadOnDel___del, __pyx_k_DeleteDummyThreadOnDel___del, sizeof(__pyx_k_DeleteDummyThreadOnDel___del), 0, 0, 1, 1}, + {&__pyx_n_s_DeleteDummyThreadOnDel___init, __pyx_k_DeleteDummyThreadOnDel___init, sizeof(__pyx_k_DeleteDummyThreadOnDel___init), 0, 0, 1, 1}, + {&__pyx_n_s_Dict, __pyx_k_Dict, sizeof(__pyx_k_Dict), 0, 0, 1, 1}, + {&__pyx_n_s_DummyThread, __pyx_k_DummyThread, sizeof(__pyx_k_DummyThread), 0, 0, 1, 1}, + {&__pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_k_EXCEPTION_TYPE_HANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_HANDLED), 0, 0, 1, 1}, + {&__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_k_EXCEPTION_TYPE_USER_UNHANDLED, sizeof(__pyx_k_EXCEPTION_TYPE_USER_UNHANDLED), 0, 0, 1, 1}, + {&__pyx_n_s_ForkSafeLock, __pyx_k_ForkSafeLock, sizeof(__pyx_k_ForkSafeLock), 0, 0, 1, 1}, + {&__pyx_n_s_FrameType, __pyx_k_FrameType, sizeof(__pyx_k_FrameType), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo, __pyx_k_FuncCodeInfo, sizeof(__pyx_k_FuncCodeInfo), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo___reduce_cython, __pyx_k_FuncCodeInfo___reduce_cython, sizeof(__pyx_k_FuncCodeInfo___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo___setstate_cython, __pyx_k_FuncCodeInfo___setstate_cython, sizeof(__pyx_k_FuncCodeInfo___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_FuncCodeInfo_get_line_of_offset, __pyx_k_FuncCodeInfo_get_line_of_offset, sizeof(__pyx_k_FuncCodeInfo_get_line_of_offset), 0, 0, 1, 1}, + {&__pyx_n_s_GlobalDebuggerHolder, __pyx_k_GlobalDebuggerHolder, sizeof(__pyx_k_GlobalDebuggerHolder), 0, 0, 1, 1}, + {&__pyx_kp_s_Helper_class_to_remove_a_dummy, __pyx_k_Helper_class_to_remove_a_dummy, sizeof(__pyx_k_Helper_class_to_remove_a_dummy), 0, 0, 1, 0}, + {&__pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_k_IGNORE_EXCEPTION_TAG, sizeof(__pyx_k_IGNORE_EXCEPTION_TAG), 0, 0, 1, 1}, + {&__pyx_kp_s_IgnoreException, __pyx_k_IgnoreException, sizeof(__pyx_k_IgnoreException), 0, 0, 1, 0}, + {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_3, __pyx_k_Incompatible_checksums_0x_x_vs_0_3, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_3), 0, 0, 1, 0}, + {&__pyx_n_s_JUMP, __pyx_k_JUMP, sizeof(__pyx_k_JUMP), 0, 0, 1, 1}, + {&__pyx_n_s_LINE, __pyx_k_LINE, sizeof(__pyx_k_LINE), 0, 0, 1, 1}, + {&__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_k_NORM_PATHS_AND_BASE_CONTAINER, sizeof(__pyx_k_NORM_PATHS_AND_BASE_CONTAINER), 0, 0, 1, 1}, + {&__pyx_n_s_None, __pyx_k_None, sizeof(__pyx_k_None), 0, 0, 1, 1}, + {&__pyx_n_s_Optional, __pyx_k_Optional, sizeof(__pyx_k_Optional), 0, 0, 1, 1}, + {&__pyx_kp_s_Optional_bool, __pyx_k_Optional_bool, sizeof(__pyx_k_Optional_bool), 0, 0, 1, 0}, + {&__pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_k_PYDEVD_IPYTHON_CONTEXT, sizeof(__pyx_k_PYDEVD_IPYTHON_CONTEXT), 0, 0, 1, 1}, + {&__pyx_n_s_PYTHON_SUSPEND, __pyx_k_PYTHON_SUSPEND, sizeof(__pyx_k_PYTHON_SUSPEND), 0, 0, 1, 1}, + {&__pyx_n_s_PY_RESUME, __pyx_k_PY_RESUME, sizeof(__pyx_k_PY_RESUME), 0, 0, 1, 1}, + {&__pyx_n_s_PY_RETURN, __pyx_k_PY_RETURN, sizeof(__pyx_k_PY_RETURN), 0, 0, 1, 1}, + {&__pyx_n_s_PY_START, __pyx_k_PY_START, sizeof(__pyx_k_PY_START), 0, 0, 1, 1}, + {&__pyx_n_s_PY_UNWIND, __pyx_k_PY_UNWIND, sizeof(__pyx_k_PY_UNWIND), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy, __pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy, sizeof(__pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy), 0, 0, 1, 1}, + {&__pyx_n_s_Pyx_CFunc_4904d5__29_pydevd_sy_2, __pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy_2, sizeof(__pyx_k_Pyx_CFunc_4904d5__29_pydevd_sy_2), 0, 0, 1, 1}, + {&__pyx_n_s_Pyx_CFunc_7f6725__29_pydevd_sy, __pyx_k_Pyx_CFunc_7f6725__29_pydevd_sy, sizeof(__pyx_k_Pyx_CFunc_7f6725__29_pydevd_sy), 0, 0, 1, 1}, + {&__pyx_n_s_Pyx_CFunc_893235__29_pydevd_sy, __pyx_k_Pyx_CFunc_893235__29_pydevd_sy, sizeof(__pyx_k_Pyx_CFunc_893235__29_pydevd_sy), 0, 0, 1, 1}, + {&__pyx_n_s_Pyx_CFunc_b0409f__29_pydevd_sy, __pyx_k_Pyx_CFunc_b0409f__29_pydevd_sy, sizeof(__pyx_k_Pyx_CFunc_b0409f__29_pydevd_sy), 0, 0, 1, 1}, + {&__pyx_n_s_RAISE, __pyx_k_RAISE, sizeof(__pyx_k_RAISE), 0, 0, 1, 1}, + {&__pyx_n_s_RETURN_VALUES_DICT, __pyx_k_RETURN_VALUES_DICT, sizeof(__pyx_k_RETURN_VALUES_DICT), 0, 0, 1, 1}, + {&__pyx_n_s_STATE_RUN, __pyx_k_STATE_RUN, sizeof(__pyx_k_STATE_RUN), 0, 0, 1, 1}, + {&__pyx_n_s_STATE_SUSPEND, __pyx_k_STATE_SUSPEND, sizeof(__pyx_k_STATE_SUSPEND), 0, 0, 1, 1}, + {&__pyx_kp_s_Stop_inside_ipython_call, __pyx_k_Stop_inside_ipython_call, sizeof(__pyx_k_Stop_inside_ipython_call), 0, 0, 1, 0}, + {&__pyx_n_s_TRACE_PROPERTY, __pyx_k_TRACE_PROPERTY, sizeof(__pyx_k_TRACE_PROPERTY), 0, 0, 1, 1}, + {&__pyx_n_s_Thread, __pyx_k_Thread, sizeof(__pyx_k_Thread), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo, __pyx_k_ThreadInfo, sizeof(__pyx_k_ThreadInfo), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo___reduce_cython, __pyx_k_ThreadInfo___reduce_cython, sizeof(__pyx_k_ThreadInfo___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_ThreadInfo___setstate_cython, __pyx_k_ThreadInfo___setstate_cython, sizeof(__pyx_k_ThreadInfo___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj, __pyx_k_TryExceptContainerObj, sizeof(__pyx_k_TryExceptContainerObj), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj___reduce, __pyx_k_TryExceptContainerObj___reduce, sizeof(__pyx_k_TryExceptContainerObj___reduce), 0, 0, 1, 1}, + {&__pyx_n_s_TryExceptContainerObj___setstat, __pyx_k_TryExceptContainerObj___setstat, sizeof(__pyx_k_TryExceptContainerObj___setstat), 0, 0, 1, 1}, + {&__pyx_n_s_Tuple, __pyx_k_Tuple, sizeof(__pyx_k_Tuple), 0, 0, 1, 1}, + {&__pyx_kp_s__14, __pyx_k__14, sizeof(__pyx_k__14), 0, 0, 1, 0}, + {&__pyx_kp_s__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 0, 1, 0}, + {&__pyx_kp_u__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 1, 0, 0}, + {&__pyx_n_s__22, __pyx_k__22, sizeof(__pyx_k__22), 0, 0, 1, 1}, + {&__pyx_n_s_active, __pyx_k_active, sizeof(__pyx_k_active), 0, 0, 1, 1}, + {&__pyx_n_s_active_limbo_lock, __pyx_k_active_limbo_lock, sizeof(__pyx_k_active_limbo_lock), 0, 0, 1, 1}, + {&__pyx_n_s_add_command, __pyx_k_add_command, sizeof(__pyx_k_add_command), 0, 0, 1, 1}, + {&__pyx_n_s_additional_info, __pyx_k_additional_info, sizeof(__pyx_k_additional_info), 0, 0, 1, 1}, + {&__pyx_n_s_all_threads, __pyx_k_all_threads, sizeof(__pyx_k_all_threads), 0, 0, 1, 1}, + {&__pyx_n_s_apply_files_filter, __pyx_k_apply_files_filter, sizeof(__pyx_k_apply_files_filter), 0, 0, 1, 1}, + {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, + {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, + {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_basename, __pyx_k_basename, sizeof(__pyx_k_basename), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap, __pyx_k_bootstrap, sizeof(__pyx_k_bootstrap), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_2, __pyx_k_bootstrap_2, sizeof(__pyx_k_bootstrap_2), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner, __pyx_k_bootstrap_inner, sizeof(__pyx_k_bootstrap_inner), 0, 0, 1, 1}, + {&__pyx_n_s_bootstrap_inner_2, __pyx_k_bootstrap_inner_2, sizeof(__pyx_k_bootstrap_inner_2), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_caught_exceptions, __pyx_k_break_on_caught_exceptions, sizeof(__pyx_k_break_on_caught_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_uncaught_exceptions, __pyx_k_break_on_uncaught_exceptions, sizeof(__pyx_k_break_on_uncaught_exceptions), 0, 0, 1, 1}, + {&__pyx_n_s_break_on_user_uncaught_exception, __pyx_k_break_on_user_uncaught_exception, sizeof(__pyx_k_break_on_user_uncaught_exception), 0, 0, 1, 1}, + {&__pyx_n_s_breakpoints, __pyx_k_breakpoints, sizeof(__pyx_k_breakpoints), 0, 0, 1, 1}, + {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, + {&__pyx_n_s_call_2, __pyx_k_call_2, sizeof(__pyx_k_call_2), 0, 0, 1, 1}, + {&__pyx_n_s_can_skip, __pyx_k_can_skip, sizeof(__pyx_k_can_skip), 0, 0, 1, 1}, + {&__pyx_n_s_cfunc_to_py, __pyx_k_cfunc_to_py, sizeof(__pyx_k_cfunc_to_py), 0, 0, 1, 1}, + {&__pyx_n_s_children_variants, __pyx_k_children_variants, sizeof(__pyx_k_children_variants), 0, 0, 1, 1}, + {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, + {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_factory, __pyx_k_cmd_factory, sizeof(__pyx_k_cmd_factory), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_step_into, __pyx_k_cmd_step_into, sizeof(__pyx_k_cmd_step_into), 0, 0, 1, 1}, + {&__pyx_n_s_cmd_step_over, __pyx_k_cmd_step_over, sizeof(__pyx_k_cmd_step_over), 0, 0, 1, 1}, + {&__pyx_n_s_co_filename, __pyx_k_co_filename, sizeof(__pyx_k_co_filename), 0, 0, 1, 1}, + {&__pyx_n_s_co_lines, __pyx_k_co_lines, sizeof(__pyx_k_co_lines), 0, 0, 1, 1}, + {&__pyx_n_s_co_name, __pyx_k_co_name, sizeof(__pyx_k_co_name), 0, 0, 1, 1}, + {&__pyx_n_s_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 0, 1, 1}, + {&__pyx_n_s_code_obj, __pyx_k_code_obj, sizeof(__pyx_k_code_obj), 0, 0, 1, 1}, + {&__pyx_n_s_code_to_func_code_info_cache, __pyx_k_code_to_func_code_info_cache, sizeof(__pyx_k_code_to_func_code_info_cache), 0, 0, 1, 1}, + {&__pyx_n_s_collect_try_except_info, __pyx_k_collect_try_except_info, sizeof(__pyx_k_collect_try_except_info), 0, 0, 1, 1}, + {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, + {&__pyx_n_s_compile, __pyx_k_compile, sizeof(__pyx_k_compile), 0, 0, 1, 1}, + {&__pyx_n_s_current_thread, __pyx_k_current_thread, sizeof(__pyx_k_current_thread), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_del, __pyx_k_del, sizeof(__pyx_k_del), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, + {&__pyx_n_s_dis, __pyx_k_dis, sizeof(__pyx_k_dis), 0, 0, 1, 1}, + {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, + {&__pyx_n_s_disable_code_tracing, __pyx_k_disable_code_tracing, sizeof(__pyx_k_disable_code_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_do_wait_suspend, __pyx_k_do_wait_suspend, sizeof(__pyx_k_do_wait_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_do_wait_suspend_2, __pyx_k_do_wait_suspend_2, sizeof(__pyx_k_do_wait_suspend_2), 0, 0, 1, 1}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_dummy_thread, __pyx_k_dummy_thread, sizeof(__pyx_k_dummy_thread), 0, 0, 1, 1}, + {&__pyx_n_s_dummy_thread_2, __pyx_k_dummy_thread_2, sizeof(__pyx_k_dummy_thread_2), 0, 0, 1, 1}, + {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, + {&__pyx_n_s_enable_code_tracing, __pyx_k_enable_code_tracing, sizeof(__pyx_k_enable_code_tracing), 0, 0, 1, 1}, + {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, + {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1}, + {&__pyx_n_s_ensure_monitoring, __pyx_k_ensure_monitoring, sizeof(__pyx_k_ensure_monitoring), 0, 0, 1, 1}, + {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, + {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, + {&__pyx_n_s_event, __pyx_k_event, sizeof(__pyx_k_event), 0, 0, 1, 1}, + {&__pyx_n_s_events, __pyx_k_events, sizeof(__pyx_k_events), 0, 0, 1, 1}, + {&__pyx_n_s_exc, __pyx_k_exc, sizeof(__pyx_k_exc), 0, 0, 1, 1}, + {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1}, + {&__pyx_n_s_exec, __pyx_k_exec, sizeof(__pyx_k_exec), 0, 0, 1, 1}, + {&__pyx_n_s_execfile, __pyx_k_execfile, sizeof(__pyx_k_execfile), 0, 0, 1, 1}, + {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, + {&__pyx_n_s_expression, __pyx_k_expression, sizeof(__pyx_k_expression), 0, 0, 1, 1}, + {&__pyx_n_s_f_back, __pyx_k_f_back, sizeof(__pyx_k_f_back), 0, 0, 1, 1}, + {&__pyx_n_s_f_bootstrap, __pyx_k_f_bootstrap, sizeof(__pyx_k_f_bootstrap), 0, 0, 1, 1}, + {&__pyx_n_s_f_code, __pyx_k_f_code, sizeof(__pyx_k_f_code), 0, 0, 1, 1}, + {&__pyx_n_s_f_disable_next_line_if_match, __pyx_k_f_disable_next_line_if_match, sizeof(__pyx_k_f_disable_next_line_if_match), 0, 0, 1, 1}, + {&__pyx_n_s_f_lasti, __pyx_k_f_lasti, sizeof(__pyx_k_f_lasti), 0, 0, 1, 1}, + {&__pyx_n_s_f_lineno, __pyx_k_f_lineno, sizeof(__pyx_k_f_lineno), 0, 0, 1, 1}, + {&__pyx_n_s_f_locals, __pyx_k_f_locals, sizeof(__pyx_k_f_locals), 0, 0, 1, 1}, + {&__pyx_n_s_file_to_line_to_breakpoints, __pyx_k_file_to_line_to_breakpoints, sizeof(__pyx_k_file_to_line_to_breakpoints), 0, 0, 1, 1}, + {&__pyx_n_s_findlinestarts, __pyx_k_findlinestarts, sizeof(__pyx_k_findlinestarts), 0, 0, 1, 1}, + {&__pyx_n_s_flag_as_unwinding, __pyx_k_flag_as_unwinding, sizeof(__pyx_k_flag_as_unwinding), 0, 0, 1, 1}, + {&__pyx_n_s_frame, __pyx_k_frame, sizeof(__pyx_k_frame), 0, 0, 1, 1}, + {&__pyx_n_s_frame_or_depth, __pyx_k_frame_or_depth, sizeof(__pyx_k_frame_or_depth), 0, 0, 1, 1}, + {&__pyx_n_s_free_tool_id, __pyx_k_free_tool_id, sizeof(__pyx_k_free_tool_id), 0, 0, 1, 1}, + {&__pyx_n_s_from_offset, __pyx_k_from_offset, sizeof(__pyx_k_from_offset), 0, 0, 1, 1}, + {&__pyx_kp_s_frozen_runpy, __pyx_k_frozen_runpy, sizeof(__pyx_k_frozen_runpy), 0, 0, 1, 0}, + {&__pyx_n_s_function_breakpoint_name_to_brea, __pyx_k_function_breakpoint_name_to_brea, sizeof(__pyx_k_function_breakpoint_name_to_brea), 0, 0, 1, 1}, + {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, + {&__pyx_n_s_get_abs_path_real_path_and_base, __pyx_k_get_abs_path_real_path_and_base, sizeof(__pyx_k_get_abs_path_real_path_and_base), 0, 0, 1, 1}, + {&__pyx_n_s_get_abs_path_real_path_and_base_2, __pyx_k_get_abs_path_real_path_and_base_2, sizeof(__pyx_k_get_abs_path_real_path_and_base_2), 0, 0, 1, 1}, + {&__pyx_n_s_get_breakpoint, __pyx_k_get_breakpoint, sizeof(__pyx_k_get_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_get_cache_file_type, __pyx_k_get_cache_file_type, sizeof(__pyx_k_get_cache_file_type), 0, 0, 1, 1}, + {&__pyx_n_s_get_clsname_for_code, __pyx_k_get_clsname_for_code, sizeof(__pyx_k_get_clsname_for_code), 0, 0, 1, 1}, + {&__pyx_n_s_get_file_type, __pyx_k_get_file_type, sizeof(__pyx_k_get_file_type), 0, 0, 1, 1}, + {&__pyx_n_s_get_func_code_info, __pyx_k_get_func_code_info, sizeof(__pyx_k_get_func_code_info), 0, 0, 1, 1}, + {&__pyx_n_s_get_ident, __pyx_k_get_ident, sizeof(__pyx_k_get_ident), 0, 0, 1, 1}, + {&__pyx_n_s_get_ident_2, __pyx_k_get_ident_2, sizeof(__pyx_k_get_ident_2), 0, 0, 1, 1}, + {&__pyx_n_s_get_line_of_offset, __pyx_k_get_line_of_offset, sizeof(__pyx_k_get_line_of_offset), 0, 0, 1, 1}, + {&__pyx_n_s_get_local_events, __pyx_k_get_local_events, sizeof(__pyx_k_get_local_events), 0, 0, 1, 1}, + {&__pyx_n_s_get_smart_step_into_variant_from, __pyx_k_get_smart_step_into_variant_from, sizeof(__pyx_k_get_smart_step_into_variant_from), 0, 0, 1, 1}, + {&__pyx_n_s_get_tool, __pyx_k_get_tool, sizeof(__pyx_k_get_tool), 0, 0, 1, 1}, + {&__pyx_n_s_getframe, __pyx_k_getframe, sizeof(__pyx_k_getframe), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_global_dbg, __pyx_k_global_dbg, sizeof(__pyx_k_global_dbg), 0, 0, 1, 1}, + {&__pyx_n_s_global_notify_skipped_step_in, __pyx_k_global_notify_skipped_step_in, sizeof(__pyx_k_global_notify_skipped_step_in), 0, 0, 1, 1}, + {&__pyx_n_s_global_notify_skipped_step_in_l, __pyx_k_global_notify_skipped_step_in_l, sizeof(__pyx_k_global_notify_skipped_step_in_l), 0, 0, 1, 1}, + {&__pyx_n_s_handle_breakpoint_condition, __pyx_k_handle_breakpoint_condition, sizeof(__pyx_k_handle_breakpoint_condition), 0, 0, 1, 1}, + {&__pyx_n_s_handle_breakpoint_expression, __pyx_k_handle_breakpoint_expression, sizeof(__pyx_k_handle_breakpoint_expression), 0, 0, 1, 1}, + {&__pyx_n_s_handle_exception, __pyx_k_handle_exception, sizeof(__pyx_k_handle_exception), 0, 0, 1, 1}, + {&__pyx_n_s_has_breaks, __pyx_k_has_breaks, sizeof(__pyx_k_has_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_has_caught_exception_breakpoint, __pyx_k_has_caught_exception_breakpoint, sizeof(__pyx_k_has_caught_exception_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_has_condition, __pyx_k_has_condition, sizeof(__pyx_k_has_condition), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_exception_breaks, __pyx_k_has_plugin_exception_breaks, sizeof(__pyx_k_has_plugin_exception_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_has_plugin_line_breaks, __pyx_k_has_plugin_line_breaks, sizeof(__pyx_k_has_plugin_line_breaks), 0, 0, 1, 1}, + {&__pyx_n_s_ident, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, + {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, + {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, + {&__pyx_n_s_instruction, __pyx_k_instruction, sizeof(__pyx_k_instruction), 0, 0, 1, 1}, + {&__pyx_n_s_instruction_offset, __pyx_k_instruction_offset, sizeof(__pyx_k_instruction_offset), 0, 0, 1, 1}, + {&__pyx_n_s_is_alive, __pyx_k_is_alive, sizeof(__pyx_k_is_alive), 0, 0, 1, 1}, + {&__pyx_n_s_is_bootstrap_frame_internal, __pyx_k_is_bootstrap_frame_internal, sizeof(__pyx_k_is_bootstrap_frame_internal), 0, 0, 1, 1}, + {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, + {&__pyx_n_s_is_files_filter_enabled, __pyx_k_is_files_filter_enabled, sizeof(__pyx_k_is_files_filter_enabled), 0, 0, 1, 1}, + {&__pyx_n_s_is_logpoint, __pyx_k_is_logpoint, sizeof(__pyx_k_is_logpoint), 0, 0, 1, 1}, + {&__pyx_n_s_is_pydev_daemon_thread, __pyx_k_is_pydev_daemon_thread, sizeof(__pyx_k_is_pydev_daemon_thread), 0, 0, 1, 1}, + {&__pyx_n_s_is_stopped, __pyx_k_is_stopped, sizeof(__pyx_k_is_stopped), 0, 0, 1, 1}, + {&__pyx_n_s_is_tracked_frame, __pyx_k_is_tracked_frame, sizeof(__pyx_k_is_tracked_frame), 0, 0, 1, 1}, + {&__pyx_n_s_is_unhandled_exception, __pyx_k_is_unhandled_exception, sizeof(__pyx_k_is_unhandled_exception), 0, 0, 1, 1}, + {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0}, + {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, + {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, + {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, + {&__pyx_n_s_line_to_breakpoints, __pyx_k_line_to_breakpoints, sizeof(__pyx_k_line_to_breakpoints), 0, 0, 1, 1}, + {&__pyx_n_s_line_to_offset, __pyx_k_line_to_offset, sizeof(__pyx_k_line_to_offset), 0, 0, 1, 1}, + {&__pyx_kp_s_line_to_offset_first_line_last_l, __pyx_k_line_to_offset_first_line_last_l, sizeof(__pyx_k_line_to_offset_first_line_last_l), 0, 0, 1, 0}, + {&__pyx_n_s_linesep, __pyx_k_linesep, sizeof(__pyx_k_linesep), 0, 0, 1, 1}, + {&__pyx_n_s_local, __pyx_k_local, sizeof(__pyx_k_local), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_main_2, __pyx_k_main_2, sizeof(__pyx_k_main_2), 0, 0, 1, 1}, + {&__pyx_n_s_make_io_message, __pyx_k_make_io_message, sizeof(__pyx_k_make_io_message), 0, 0, 1, 1}, + {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, + {&__pyx_kp_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 0}, + {&__pyx_n_s_module_2, __pyx_k_module_2, sizeof(__pyx_k_module_2), 0, 0, 1, 1}, + {&__pyx_n_s_monitor, __pyx_k_monitor, sizeof(__pyx_k_monitor), 0, 0, 1, 1}, + {&__pyx_n_s_monitoring, __pyx_k_monitoring, sizeof(__pyx_k_monitoring), 0, 0, 1, 1}, + {&__pyx_n_s_mtime, __pyx_k_mtime, sizeof(__pyx_k_mtime), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_namedtuple, __pyx_k_namedtuple, sizeof(__pyx_k_namedtuple), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_n_s_notify_skipped_step_in_because_o, __pyx_k_notify_skipped_step_in_because_o, sizeof(__pyx_k_notify_skipped_step_in_because_o), 0, 0, 1, 1}, + {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1}, + {&__pyx_n_s_original_step_cmd, __pyx_k_original_step_cmd, sizeof(__pyx_k_original_step_cmd), 0, 0, 1, 1}, + {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, + {&__pyx_n_s_os_path, __pyx_k_os_path, sizeof(__pyx_k_os_path), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_plugin, __pyx_k_plugin, sizeof(__pyx_k_plugin), 0, 0, 1, 1}, + {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_py_db, __pyx_k_py_db, sizeof(__pyx_k_py_db), 0, 0, 1, 1}, + {&__pyx_kp_s_pyc, __pyx_k_pyc, sizeof(__pyx_k_pyc), 0, 0, 1, 0}, + {&__pyx_n_s_pydb_disposed, __pyx_k_pydb_disposed, sizeof(__pyx_k_pydb_disposed), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle, __pyx_k_pydev_bundle, sizeof(__pyx_k_pydev_bundle), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_k_pydev_bundle__pydev_saved_modul, sizeof(__pyx_k_pydev_bundle__pydev_saved_modul), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_do_not_trace, __pyx_k_pydev_do_not_trace, sizeof(__pyx_k_pydev_do_not_trace), 0, 0, 1, 1}, + {&__pyx_kp_s_pydev_execfile_py, __pyx_k_pydev_execfile_py, sizeof(__pyx_k_pydev_execfile_py), 0, 0, 1, 0}, + {&__pyx_n_s_pydev_log, __pyx_k_pydev_log, sizeof(__pyx_k_pydev_log), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_monkey, __pyx_k_pydev_monkey, sizeof(__pyx_k_pydev_monkey), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_state, __pyx_k_pydev_state, sizeof(__pyx_k_pydev_state), 0, 0, 1, 1}, + {&__pyx_n_s_pydev_step_cmd, __pyx_k_pydev_step_cmd, sizeof(__pyx_k_pydev_step_cmd), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd, __pyx_k_pydevd, sizeof(__pyx_k_pydevd), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle, __pyx_k_pydevd_bundle, sizeof(__pyx_k_pydevd_bundle), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_breakpoint, __pyx_k_pydevd_bundle_pydevd_breakpoint, sizeof(__pyx_k_pydevd_bundle_pydevd_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_k_pydevd_bundle_pydevd_bytecode_u, sizeof(__pyx_k_pydevd_bundle_pydevd_bytecode_u), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_k_pydevd_bundle_pydevd_constants, sizeof(__pyx_k_pydevd_bundle_pydevd_constants), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_k_pydevd_bundle_pydevd_frame_util, sizeof(__pyx_k_pydevd_bundle_pydevd_frame_util), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_k_pydevd_bundle_pydevd_trace_disp, sizeof(__pyx_k_pydevd_bundle_pydevd_trace_disp), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_k_pydevd_bundle_pydevd_utils, sizeof(__pyx_k_pydevd_bundle_pydevd_utils), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_dont_trace, __pyx_k_pydevd_dont_trace, sizeof(__pyx_k_pydevd_dont_trace), 0, 0, 1, 1}, + {&__pyx_n_s_pydevd_file_utils, __pyx_k_pydevd_file_utils, sizeof(__pyx_k_pydevd_file_utils), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_py, __pyx_k_pydevd_py, sizeof(__pyx_k_pydevd_py), 0, 0, 1, 0}, + {&__pyx_n_s_pydevd_runpy, __pyx_k_pydevd_runpy, sizeof(__pyx_k_pydevd_runpy), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_k_pydevd_sys_monitoring__pydevd_s, sizeof(__pyx_k_pydevd_sys_monitoring__pydevd_s), 0, 0, 1, 0}, + {&__pyx_n_s_pydevd_sys_monitoring_cython, __pyx_k_pydevd_sys_monitoring_cython, sizeof(__pyx_k_pydevd_sys_monitoring_cython), 0, 0, 1, 1}, + {&__pyx_kp_s_pydevd_traceproperty_py, __pyx_k_pydevd_traceproperty_py, sizeof(__pyx_k_pydevd_traceproperty_py), 0, 0, 1, 0}, + {&__pyx_kp_s_python_function, __pyx_k_python_function, sizeof(__pyx_k_python_function), 0, 0, 1, 0}, + {&__pyx_kp_s_python_line, __pyx_k_python_line, sizeof(__pyx_k_python_line), 0, 0, 1, 0}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_k_pyx_unpickle_FuncCodeInfo, sizeof(__pyx_k_pyx_unpickle_FuncCodeInfo), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_k_pyx_unpickle_ThreadInfo, sizeof(__pyx_k_pyx_unpickle_ThreadInfo), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_k_pyx_unpickle__TryExceptContain, sizeof(__pyx_k_pyx_unpickle__TryExceptContain), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_ref, __pyx_k_ref, sizeof(__pyx_k_ref), 0, 0, 1, 1}, + {&__pyx_n_s_register_callback, __pyx_k_register_callback, sizeof(__pyx_k_register_callback), 0, 0, 1, 1}, + {&__pyx_n_s_required_events, __pyx_k_required_events, sizeof(__pyx_k_required_events), 0, 0, 1, 1}, + {&__pyx_n_s_required_events_breakpoint, __pyx_k_required_events_breakpoint, sizeof(__pyx_k_required_events_breakpoint), 0, 0, 1, 1}, + {&__pyx_n_s_required_events_stepping, __pyx_k_required_events_stepping, sizeof(__pyx_k_required_events_stepping), 0, 0, 1, 1}, + {&__pyx_n_s_restart_events, __pyx_k_restart_events, sizeof(__pyx_k_restart_events), 0, 0, 1, 1}, + {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1}, + {&__pyx_n_s_retval, __pyx_k_retval, sizeof(__pyx_k_retval), 0, 0, 1, 1}, + {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, + {&__pyx_n_s_run_2, __pyx_k_run_2, sizeof(__pyx_k_run_2), 0, 0, 1, 1}, + {&__pyx_n_s_runpy, __pyx_k_runpy, sizeof(__pyx_k_runpy), 0, 0, 1, 1}, + {&__pyx_kp_s_s_s, __pyx_k_s_s, sizeof(__pyx_k_s_s), 0, 0, 1, 0}, + {&__pyx_kp_s_s_s_2, __pyx_k_s_s_2, sizeof(__pyx_k_s_s_2), 0, 0, 1, 0}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_set_events, __pyx_k_set_events, sizeof(__pyx_k_set_events), 0, 0, 1, 1}, + {&__pyx_n_s_set_local_events, __pyx_k_set_local_events, sizeof(__pyx_k_set_local_events), 0, 0, 1, 1}, + {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, + {&__pyx_n_s_set_suspend, __pyx_k_set_suspend, sizeof(__pyx_k_set_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_set_trace_for_frame_and_parents, __pyx_k_set_trace_for_frame_and_parents, sizeof(__pyx_k_set_trace_for_frame_and_parents), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_short_frame, __pyx_k_short_frame, sizeof(__pyx_k_short_frame), 0, 0, 1, 1}, + {&__pyx_n_s_short_tb, __pyx_k_short_tb, sizeof(__pyx_k_short_tb), 0, 0, 1, 1}, + {&__pyx_n_s_should_stop_on_exception, __pyx_k_should_stop_on_exception, sizeof(__pyx_k_should_stop_on_exception), 0, 0, 1, 1}, + {&__pyx_n_s_should_trace_hook, __pyx_k_should_trace_hook, sizeof(__pyx_k_should_trace_hook), 0, 0, 1, 1}, + {&__pyx_n_s_show_return_values, __pyx_k_show_return_values, sizeof(__pyx_k_show_return_values), 0, 0, 1, 1}, + {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, + {&__pyx_n_s_splitext, __pyx_k_splitext, sizeof(__pyx_k_splitext), 0, 0, 1, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_start_monitoring, __pyx_k_start_monitoring, sizeof(__pyx_k_start_monitoring), 0, 0, 1, 1}, + {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_n_s_stop_monitoring, __pyx_k_stop_monitoring, sizeof(__pyx_k_stop_monitoring), 0, 0, 1, 1}, + {&__pyx_n_s_stop_on_unhandled_exception, __pyx_k_stop_on_unhandled_exception, sizeof(__pyx_k_stop_on_unhandled_exception), 0, 0, 1, 1}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, + {&__pyx_n_s_suspend, __pyx_k_suspend, sizeof(__pyx_k_suspend), 0, 0, 1, 1}, + {&__pyx_n_s_suspend_other_threads, __pyx_k_suspend_other_threads, sizeof(__pyx_k_suspend_other_threads), 0, 0, 1, 1}, + {&__pyx_n_s_suspend_policy, __pyx_k_suspend_policy, sizeof(__pyx_k_suspend_policy), 0, 0, 1, 1}, + {&__pyx_n_s_suspend_requested, __pyx_k_suspend_requested, sizeof(__pyx_k_suspend_requested), 0, 0, 1, 1}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_sys_monitor, __pyx_k_sys_monitor, sizeof(__pyx_k_sys_monitor), 0, 0, 1, 1}, + {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1}, + {&__pyx_n_s_thread_active, __pyx_k_thread_active, sizeof(__pyx_k_thread_active), 0, 0, 1, 1}, + {&__pyx_n_s_thread_ident, __pyx_k_thread_ident, sizeof(__pyx_k_thread_ident), 0, 0, 1, 1}, + {&__pyx_n_s_thread_info, __pyx_k_thread_info, sizeof(__pyx_k_thread_info), 0, 0, 1, 1}, + {&__pyx_n_s_thread_local_info, __pyx_k_thread_local_info, sizeof(__pyx_k_thread_local_info), 0, 0, 1, 1}, + {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1}, + {&__pyx_n_s_tident, __pyx_k_tident, sizeof(__pyx_k_tident), 0, 0, 1, 1}, + {&__pyx_n_s_to_offset, __pyx_k_to_offset, sizeof(__pyx_k_to_offset), 0, 0, 1, 1}, + {&__pyx_n_s_trace, __pyx_k_trace, sizeof(__pyx_k_trace), 0, 0, 1, 1}, + {&__pyx_n_s_traceback, __pyx_k_traceback, sizeof(__pyx_k_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_track_dummy_thread_ref, __pyx_k_track_dummy_thread_ref, sizeof(__pyx_k_track_dummy_thread_ref), 0, 0, 1, 1}, + {&__pyx_n_s_try_except_infos, __pyx_k_try_except_infos, sizeof(__pyx_k_try_except_infos), 0, 0, 1, 1}, + {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1}, + {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_update_monitor_events, __pyx_k_update_monitor_events, sizeof(__pyx_k_update_monitor_events), 0, 0, 1, 1}, + {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_use_tool_id, __pyx_k_use_tool_id, sizeof(__pyx_k_use_tool_id), 0, 0, 1, 1}, + {&__pyx_n_s_user_uncaught_exc_info, __pyx_k_user_uncaught_exc_info, sizeof(__pyx_k_user_uncaught_exc_info), 0, 0, 1, 1}, + {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_wrap, __pyx_k_wrap, sizeof(__pyx_k_wrap), 0, 0, 1, 1}, + {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} + }; + return __Pyx_InitStrings(__pyx_string_tab); +} +/* #### Code section: cached_builtins ### */ +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 55, __pyx_L1_error) + __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 343, __pyx_L1_error) + __pyx_builtin_min = __Pyx_GetBuiltinName(__pyx_n_s_min); if (!__pyx_builtin_min) __PYX_ERR(0, 472, __pyx_L1_error) + __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) __PYX_ERR(0, 473, __pyx_L1_error) + __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(0, 561, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: cached_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "cfunc.to_py":67 + * @cname("__Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc") + * cdef object __Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc(object (*f)(object, object, object) ): + * def wrap(object code, object instruction, object exc): # <<<<<<<<<<<<<< + * """wrap(code, instruction, exc)""" + * return f(code, instruction, exc) + */ + __pyx_tuple_ = PyTuple_Pack(3, __pyx_n_s_code, __pyx_n_s_instruction, __pyx_n_s_exc); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(1, 67, __pyx_L1_error) + __pyx_tuple__3 = PyTuple_Pack(2, __pyx_n_s_code, __pyx_n_s_instruction_offset); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(1, 67, __pyx_L1_error) + __pyx_tuple__5 = PyTuple_Pack(2, __pyx_n_s_code, __pyx_n_s_line); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) __PYX_ERR(1, 67, __pyx_L1_error) + __pyx_tuple__7 = PyTuple_Pack(3, __pyx_n_s_code, __pyx_n_s_from_offset, __pyx_n_s_to_offset); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) __PYX_ERR(1, 67, __pyx_L1_error) + __pyx_tuple__9 = PyTuple_Pack(3, __pyx_n_s_code, __pyx_n_s_instruction, __pyx_n_s_retval); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 67, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(1, 67, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":103 + * global _global_notify_skipped_step_in + * + * with _global_notify_skipped_step_in_lock: # <<<<<<<<<<<<<< + * if _global_notify_skipped_step_in: + * # Check with lock in place (callers should actually have checked + */ + __pyx_tuple__11 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "_pydevd_sys_monitoring_cython.pyx":146 + * if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + * # We need __bootstrap_inner, not __bootstrap. + * return None, False # <<<<<<<<<<<<<< + * + * elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + */ + __pyx_tuple__12 = PyTuple_Pack(2, Py_None, Py_False); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__12); + __Pyx_GIVEREF(__pyx_tuple__12); + + /* "_pydevd_sys_monitoring_cython.pyx":206 + * + * elif name == "pydevd_runpy": + * if frame.f_code.co_name.startswith(("run", "_run")): # <<<<<<<<<<<<<< + * return False + * + */ + __pyx_tuple__13 = PyTuple_Pack(2, __pyx_n_s_run, __pyx_n_s_run_2); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + + /* "_pydevd_sys_monitoring_cython.pyx":1522 + * filename = frame.f_code.co_filename + * if filename.endswith(".pyc"): + * filename = filename[:-1] # <<<<<<<<<<<<<< + * + * if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + */ + __pyx_slice__16 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(0, 1522, __pyx_L1_error) + __Pyx_GOTREF(__pyx_slice__16); + __Pyx_GIVEREF(__pyx_slice__16); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0xd625bfa, 0xfdc1f18, 0x57c379d): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xd625bfa, 0xfdc1f18, 0x57c379d) = (additional_info, thread, thread_ident, trace))" % __pyx_checksum + */ + __pyx_tuple__18 = PyTuple_Pack(3, __pyx_int_224549882, __pyx_int_266084120, __pyx_int_92026781); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + __pyx_tuple__20 = PyTuple_Pack(3, __pyx_int_66323410, __pyx_int_99967855, __pyx_int_189049472); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_tuple__21 = PyTuple_Pack(3, __pyx_int_230645316, __pyx_int_232881363, __pyx_int_210464433); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + + /* "_pydevd_sys_monitoring_cython.pyx":57 + * except ImportError: + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 57, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_get_smart_step_into_variant_from, 57, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 57, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":85 + * STATE_SUSPEND: int = 2 + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") # <<<<<<<<<<<<<< + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + */ + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_IgnoreException); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + + /* "_pydevd_sys_monitoring_cython.pyx":86 + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") # <<<<<<<<<<<<<< + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" + */ + __pyx_tuple__26 = PyTuple_Pack(2, __pyx_kp_s_pydevd_py, __pyx_n_s_run); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); + + /* "_pydevd_sys_monitoring_cython.pyx":87 + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") # <<<<<<<<<<<<<< + * TRACE_PROPERTY = "pydevd_traceproperty.py" + * + */ + __pyx_tuple__27 = PyTuple_Pack(2, __pyx_kp_s_pydev_execfile_py, __pyx_n_s_execfile); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_tuple__28 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + __pyx_tuple__30 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(1, 16, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":275 + * """ + * + * def __init__(self, dummy_thread): # <<<<<<<<<<<<<< + * self._dummy_thread = dummy_thread + * self._tident = dummy_thread.ident + */ + __pyx_tuple__32 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_dummy_thread); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_init, 275, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) __PYX_ERR(0, 275, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":286 + * _thread_local_info._track_dummy_thread_ref = self + * + * def __del__(self): # <<<<<<<<<<<<<< + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: + */ + __pyx_tuple__34 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_del, 286, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) __PYX_ERR(0, 286, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":416 + * self.co_name: str = "" + * + * def get_line_of_offset(self, offset): # <<<<<<<<<<<<<< + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: + */ + __pyx_tuple__36 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_offset, __pyx_n_s_start, __pyx_n_s_end, __pyx_n_s_line); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_get_line_of_offset, 416, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 416, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(1, 16, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":450 + * + * + * _CodeLineInfo = namedtuple("_CodeLineInfo", "line_to_offset, first_line, last_line") # <<<<<<<<<<<<<< + * + * + */ + __pyx_tuple__40 = PyTuple_Pack(2, __pyx_n_s_CodeLineInfo, __pyx_kp_s_line_to_offset_first_line_last_l); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + + /* "_pydevd_sys_monitoring_cython.pyx":484 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_code_obj, __pyx_n_s_frame_or_depth); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_get_func_code_info, 484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 484, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":678 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef disable_code_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def disable_code_tracing(code): + */ + __pyx_tuple__43 = PyTuple_Pack(1, __pyx_n_s_code); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 678, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__43); + __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_disable_code_tracing, 678, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 678, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":689 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef enable_code_tracing(unsigned long thread_ident, code, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: + */ + __pyx_tuple__45 = PyTuple_Pack(3, __pyx_n_s_thread_ident, __pyx_n_s_code, __pyx_n_s_frame); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_enable_code_tracing, 689, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 689, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(1, 16, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":1709 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef _ensure_monitoring(): # <<<<<<<<<<<<<< + * # ELSE + * # def _ensure_monitoring(): + */ + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_ensure_monitoring, 1709, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1709, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":1723 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef start_monitoring(bint all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + __pyx_tuple__50 = PyTuple_Pack(1, __pyx_n_s_all_threads); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__50); + __Pyx_GIVEREF(__pyx_tuple__50); + __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_start_monitoring, 1723, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 1723, __pyx_L1_error) + __pyx_tuple__52 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(0, 1723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__52); + __Pyx_GIVEREF(__pyx_tuple__52); + + /* "_pydevd_sys_monitoring_cython.pyx":1751 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef stop_monitoring(all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_stop_monitoring, 1751, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(0, 1751, __pyx_L1_error) + __pyx_tuple__54 = PyTuple_Pack(1, Py_False); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 1751, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__54); + __Pyx_GIVEREF(__pyx_tuple__54); + + /* "_pydevd_sys_monitoring_cython.pyx":1779 + * + * + * def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: # <<<<<<<<<<<<<< + * """ + * This should be called when breakpoints change. + */ + __pyx_tuple__55 = PyTuple_Pack(10, __pyx_n_s_suspend_requested, __pyx_n_s_py_db, __pyx_n_s_t, __pyx_n_s_additional_info, __pyx_n_s_required_events, __pyx_n_s_has_caught_exception_breakpoint, __pyx_n_s_break_on_uncaught_exceptions, __pyx_n_s_has_breaks, __pyx_n_s_file_to_line_to_breakpoints, __pyx_n_s_line_to_breakpoints); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 1779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__55); + __Pyx_GIVEREF(__pyx_tuple__55); + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_update_monitor_events, 1779, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 1779, __pyx_L1_error) + __pyx_tuple__57 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 1779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__57); + __Pyx_GIVEREF(__pyx_tuple__57); + + /* "_pydevd_sys_monitoring_cython.pyx":1864 + * + * + * def restart_events() -> None: # <<<<<<<<<<<<<< + * # Note: if breakpoints change, update_monitor_events usually needs to be + * # called first, then the line event tracing must be set for existing frames + */ + __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_restart_events, 1864, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 1864, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":1899 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _do_wait_suspend(py_db, thread_info, frame, event, arg): + */ + __pyx_tuple__59 = PyTuple_Pack(5, __pyx_n_s_py_db, __pyx_n_s_thread_info, __pyx_n_s_frame, __pyx_n_s_event, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 1899, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__59); + __Pyx_GIVEREF(__pyx_tuple__59); + __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pydevd_sys_monitoring__pydevd_s, __pyx_n_s_do_wait_suspend, 1899, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 1899, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__61 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__61); + __Pyx_GIVEREF(__pyx_tuple__61); + __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_ThreadInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_FuncCodeInfo, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle__TryExceptContain, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} +/* #### Code section: init_constants ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_get.method_name = &__pyx_n_s_get; + if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_107 = PyInt_FromLong(107); if (unlikely(!__pyx_int_107)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_108 = PyInt_FromLong(108); if (unlikely(!__pyx_int_108)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_109 = PyInt_FromLong(109); if (unlikely(!__pyx_int_109)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_111 = PyInt_FromLong(111); if (unlikely(!__pyx_int_111)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_128 = PyInt_FromLong(128); if (unlikely(!__pyx_int_128)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_144 = PyInt_FromLong(144); if (unlikely(!__pyx_int_144)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_159 = PyInt_FromLong(159); if (unlikely(!__pyx_int_159)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_160 = PyInt_FromLong(160); if (unlikely(!__pyx_int_160)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_206 = PyInt_FromLong(206); if (unlikely(!__pyx_int_206)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_208 = PyInt_FromLong(208); if (unlikely(!__pyx_int_208)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_66323410 = PyInt_FromLong(66323410L); if (unlikely(!__pyx_int_66323410)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_92026781 = PyInt_FromLong(92026781L); if (unlikely(!__pyx_int_92026781)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_99967855 = PyInt_FromLong(99967855L); if (unlikely(!__pyx_int_99967855)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_189049472 = PyInt_FromLong(189049472L); if (unlikely(!__pyx_int_189049472)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_210464433 = PyInt_FromLong(210464433L); if (unlikely(!__pyx_int_210464433)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_224549882 = PyInt_FromLong(224549882L); if (unlikely(!__pyx_int_224549882)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_230645316 = PyInt_FromLong(230645316L); if (unlikely(!__pyx_int_230645316)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_232881363 = PyInt_FromLong(232881363L); if (unlikely(!__pyx_int_232881363)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_266084120 = PyInt_FromLong(266084120L); if (unlikely(!__pyx_int_266084120)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_globals ### */ + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + /* AssertionsEnabled.init */ + if (likely(__Pyx_init_assertions_enabled() == 0)); else + +if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error) + + return 0; + __pyx_L1_error:; + return -1; +} +/* #### Code section: init_module ### */ + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo_spec, NULL); if (unlikely(!__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo)) __PYX_ERR(0, 243, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo_spec, __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + #else + __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo = &__pyx_type_29_pydevd_sys_monitoring_cython_ThreadInfo; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo->tp_dictoffset && __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ThreadInfo, (PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo_spec, NULL); if (unlikely(!__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo)) __PYX_ERR(0, 351, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo_spec, __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + #else + __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo = &__pyx_type_29_pydevd_sys_monitoring_cython_FuncCodeInfo; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo->tp_dictoffset && __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FuncCodeInfo, (PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo) < 0) __PYX_ERR(0, 351, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj_spec, NULL); if (unlikely(!__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj)) __PYX_ERR(0, 801, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj_spec, __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 801, __pyx_L1_error) + #else + __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj = &__pyx_type_29_pydevd_sys_monitoring_cython__TryExceptContainerObj; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 801, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj->tp_dictoffset && __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TryExceptContainerObj, (PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 801, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj) < 0) __PYX_ERR(0, 801, __pyx_L1_error) + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_spec, NULL); if (unlikely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc)) __PYX_ERR(1, 66, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc_spec, __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #else + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc = &__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc->tp_dictoffset && __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_3exc->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_spec, NULL); if (unlikely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset)) __PYX_ERR(1, 66, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset_spec, __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #else + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset = &__pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset->tp_dictoffset && __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_893235__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_18instruction_offset->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_spec, NULL); if (unlikely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line)) __PYX_ERR(1, 66, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line_spec, __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #else + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line = &__pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line->tp_dictoffset && __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_b0409f__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_4line->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_spec, NULL); if (unlikely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset)) __PYX_ERR(1, 66, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset_spec, __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #else + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset = &__pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset->tp_dictoffset && __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_7f6725__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11from_offset_9to_offset->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_spec, NULL); if (unlikely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval)) __PYX_ERR(1, 66, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval_spec, __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #else + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval = &__pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval) < 0) __PYX_ERR(1, 66, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval->tp_dictoffset && __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype___pyx_scope_struct____Pyx_CFunc_4904d5__29_pydevd_sys_monitoring_cython_object__lParen__etc_to_py_4code_11instruction_6retval->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; + } + #endif + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule("_pydevd_bundle.pydevd_cython"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = __Pyx_ImportType_3_0_11(__pyx_t_1, "_pydevd_bundle.pydevd_cython", "PyDBAdditionalThreadInfo", sizeof(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo), __PYX_GET_STRUCT_ALIGNMENT_3_0_11(struct __pyx_obj_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo),__Pyx_ImportType_CheckSize_Warn_3_0_11); if (!__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo) __PYX_ERR(2, 1, __pyx_L1_error) + __pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo = (struct __pyx_vtabstruct_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo*)__Pyx_GetVtable(__pyx_ptype_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo); if (unlikely(!__pyx_vtabptr_14_pydevd_bundle_13pydevd_cython_PyDBAdditionalThreadInfo)) __PYX_ERR(2, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __pyx_t_1 = PyImport_ImportModule("_pydevd_bundle.pydevd_cython"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_ImportFunction_3_0_11(__pyx_t_1, "set_additional_thread_info", (void (**)(void))&__pyx_f_14_pydevd_bundle_13pydevd_cython_set_additional_thread_info, "PyObject *(PyObject *, int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_ImportFunction_3_0_11(__pyx_t_1, "any_thread_stepping", (void (**)(void))&__pyx_f_14_pydevd_bundle_13pydevd_cython_any_thread_stepping, "int (int __pyx_skip_dispatch)") < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec__pydevd_sys_monitoring_cython(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec__pydevd_sys_monitoring_cython}, + {0, NULL} +}; +#endif + +#ifdef __cplusplus +namespace { + struct PyModuleDef __pyx_moduledef = + #else + static struct PyModuleDef __pyx_moduledef = + #endif + { + PyModuleDef_HEAD_INIT, + "_pydevd_sys_monitoring_cython", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #elif CYTHON_USE_MODULE_STATE + sizeof(__pyx_mstate), /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + #if CYTHON_USE_MODULE_STATE + __pyx_m_traverse, /* m_traverse */ + __pyx_m_clear, /* m_clear */ + NULL /* m_free */ + #else + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ + #endif + }; + #ifdef __cplusplus +} /* anonymous namespace */ +#endif +#endif + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC init_pydevd_sys_monitoring_cython(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC init_pydevd_sys_monitoring_cython(void) +#else +__Pyx_PyMODINIT_FUNC PyInit__pydevd_sys_monitoring_cython(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit__pydevd_sys_monitoring_cython(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) +#else +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) +#endif +{ + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { +#if CYTHON_COMPILING_IN_LIMITED_API + result = PyModule_AddObject(module, to_name, value); +#else + result = PyDict_SetItemString(moddict, to_name, value); +#endif + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + CYTHON_UNUSED_VAR(def); + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + moddict = module; +#else + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; +#endif + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec__pydevd_sys_monitoring_cython(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + int stringtab_initialized = 0; + #if CYTHON_USE_MODULE_STATE + int pystate_addmodule_run = 0; + #endif + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module '_pydevd_sys_monitoring_cython' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("_pydevd_sys_monitoring_cython", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #elif CYTHON_USE_MODULE_STATE + __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + { + int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); + __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "_pydevd_sys_monitoring_cython" pseudovariable */ + if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + pystate_addmodule_run = 1; + } + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #endif + CYTHON_UNUSED_VAR(__pyx_t_1); + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__pydevd_sys_monitoring_cython(void)", 0); + if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + stringtab_initialized = 1; + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main__pydevd_sys_monitoring_cython) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "_pydevd_sys_monitoring_cython")) { + if (unlikely((PyDict_SetItemString(modules, "_pydevd_sys_monitoring_cython", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely((__Pyx_modinit_type_init_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_variable_import_code(); + if (unlikely((__Pyx_modinit_function_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "_pydevd_sys_monitoring_cython.pyx":11 + * # License: EPL + * + * from collections import namedtuple # <<<<<<<<<<<<<< + * import dis + * import os + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_namedtuple); + __Pyx_GIVEREF(__pyx_n_s_namedtuple); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_namedtuple)) __PYX_ERR(0, 11, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_namedtuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_namedtuple, __pyx_t_2) < 0) __PYX_ERR(0, 11, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":12 + * + * from collections import namedtuple + * import dis # <<<<<<<<<<<<<< + * import os + * import re + */ + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_dis, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_dis, __pyx_t_3) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":13 + * from collections import namedtuple + * import dis + * import os # <<<<<<<<<<<<<< + * import re + * import sys + */ + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_os, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_3) < 0) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":14 + * import dis + * import os + * import re # <<<<<<<<<<<<<< + * import sys + * + */ + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_re, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_3) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":15 + * import os + * import re + * import sys # <<<<<<<<<<<<<< + * + * from _pydev_bundle._pydev_saved_modules import threading + */ + __pyx_t_3 = __Pyx_ImportDottedModule(__pyx_n_s_sys, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_3) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":17 + * import sys + * + * from _pydev_bundle._pydev_saved_modules import threading # <<<<<<<<<<<<<< + * from types import CodeType, FrameType + * from typing import Dict, Optional, Tuple, Any + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_threading); + __Pyx_GIVEREF(__pyx_n_s_threading); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_threading)) __PYX_ERR(0, 17, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle__pydev_saved_modul, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":18 + * + * from _pydev_bundle._pydev_saved_modules import threading + * from types import CodeType, FrameType # <<<<<<<<<<<<<< + * from typing import Dict, Optional, Tuple, Any + * from os.path import basename, splitext + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_CodeType); + __Pyx_GIVEREF(__pyx_n_s_CodeType); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_CodeType)) __PYX_ERR(0, 18, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_FrameType); + __Pyx_GIVEREF(__pyx_n_s_FrameType); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_FrameType)) __PYX_ERR(0, 18, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_types, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_CodeType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CodeType, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_FrameType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FrameType, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":19 + * from _pydev_bundle._pydev_saved_modules import threading + * from types import CodeType, FrameType + * from typing import Dict, Optional, Tuple, Any # <<<<<<<<<<<<<< + * from os.path import basename, splitext + * + */ + __pyx_t_3 = PyList_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_Dict); + __Pyx_GIVEREF(__pyx_n_s_Dict); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Dict)) __PYX_ERR(0, 19, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Optional); + __Pyx_GIVEREF(__pyx_n_s_Optional); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Optional)) __PYX_ERR(0, 19, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Tuple); + __Pyx_GIVEREF(__pyx_n_s_Tuple); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_Tuple)) __PYX_ERR(0, 19, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_Any); + __Pyx_GIVEREF(__pyx_n_s_Any); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_Any)) __PYX_ERR(0, 19, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Dict); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Dict, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Optional, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tuple, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Any); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":20 + * from types import CodeType, FrameType + * from typing import Dict, Optional, Tuple, Any + * from os.path import basename, splitext # <<<<<<<<<<<<<< + * + * from _pydev_bundle import pydev_log + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_basename); + __Pyx_GIVEREF(__pyx_n_s_basename); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_basename)) __PYX_ERR(0, 20, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_splitext); + __Pyx_GIVEREF(__pyx_n_s_splitext); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_splitext)) __PYX_ERR(0, 20, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_os_path, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_basename); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_basename, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_splitext); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_splitext, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":22 + * from os.path import basename, splitext + * + * from _pydev_bundle import pydev_log # <<<<<<<<<<<<<< + * from _pydevd_bundle import pydevd_dont_trace + * from _pydevd_bundle.pydevd_constants import ( + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_pydev_log); + __Pyx_GIVEREF(__pyx_n_s_pydev_log); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_pydev_log)) __PYX_ERR(0, 22, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydev_bundle, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_pydev_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydev_log, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":23 + * + * from _pydev_bundle import pydev_log + * from _pydevd_bundle import pydevd_dont_trace # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_constants import ( + * GlobalDebuggerHolder, + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_pydevd_dont_trace); + __Pyx_GIVEREF(__pyx_n_s_pydevd_dont_trace); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_pydevd_dont_trace)) __PYX_ERR(0, 23, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_pydevd_dont_trace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pydevd_dont_trace, __pyx_t_2) < 0) __PYX_ERR(0, 23, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":25 + * from _pydevd_bundle import pydevd_dont_trace + * from _pydevd_bundle.pydevd_constants import ( + * GlobalDebuggerHolder, # <<<<<<<<<<<<<< + * ForkSafeLock, + * PYDEVD_IPYTHON_CONTEXT, + */ + __pyx_t_3 = PyList_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_GlobalDebuggerHolder); + __Pyx_GIVEREF(__pyx_n_s_GlobalDebuggerHolder); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_GlobalDebuggerHolder)) __PYX_ERR(0, 25, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_ForkSafeLock); + __Pyx_GIVEREF(__pyx_n_s_ForkSafeLock); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_ForkSafeLock)) __PYX_ERR(0, 25, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + __Pyx_GIVEREF(__pyx_n_s_PYDEVD_IPYTHON_CONTEXT); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT)) __PYX_ERR(0, 25, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + __Pyx_GIVEREF(__pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 3, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED)) __PYX_ERR(0, 25, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_RETURN_VALUES_DICT); + __Pyx_GIVEREF(__pyx_n_s_RETURN_VALUES_DICT); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 4, __pyx_n_s_RETURN_VALUES_DICT)) __PYX_ERR(0, 25, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_PYTHON_SUSPEND); + __Pyx_GIVEREF(__pyx_n_s_PYTHON_SUSPEND); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 5, __pyx_n_s_PYTHON_SUSPEND)) __PYX_ERR(0, 25, __pyx_L1_error); + + /* "_pydevd_sys_monitoring_cython.pyx":24 + * from _pydev_bundle import pydev_log + * from _pydevd_bundle import pydevd_dont_trace + * from _pydevd_bundle.pydevd_constants import ( # <<<<<<<<<<<<<< + * GlobalDebuggerHolder, + * ForkSafeLock, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_GlobalDebuggerHolder); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_GlobalDebuggerHolder, __pyx_t_3) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ForkSafeLock, __pyx_t_3) < 0) __PYX_ERR(0, 26, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYDEVD_IPYTHON_CONTEXT, __pyx_t_3) < 0) __PYX_ERR(0, 27, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_USER_UNHANDLED, __pyx_t_3) < 0) __PYX_ERR(0, 28, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_RETURN_VALUES_DICT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_RETURN_VALUES_DICT, __pyx_t_3) < 0) __PYX_ERR(0, 29, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_PYTHON_SUSPEND); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 24, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_PYTHON_SUSPEND, __pyx_t_3) < 0) __PYX_ERR(0, 30, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":32 + * PYTHON_SUSPEND, + * ) + * from _pydevd_bundle.pydevd_frame_utils import short_tb, flag_as_unwinding, short_frame # <<<<<<<<<<<<<< + * from pydevd_file_utils import ( + * NORM_PATHS_AND_BASE_CONTAINER, + */ + __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_short_tb); + __Pyx_GIVEREF(__pyx_n_s_short_tb); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_short_tb)) __PYX_ERR(0, 32, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_flag_as_unwinding); + __Pyx_GIVEREF(__pyx_n_s_flag_as_unwinding); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_flag_as_unwinding)) __PYX_ERR(0, 32, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_short_frame); + __Pyx_GIVEREF(__pyx_n_s_short_frame); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_short_frame)) __PYX_ERR(0, 32, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_frame_util, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_short_tb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_short_tb, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_flag_as_unwinding); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_flag_as_unwinding, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_short_frame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_short_frame, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":34 + * from _pydevd_bundle.pydevd_frame_utils import short_tb, flag_as_unwinding, short_frame + * from pydevd_file_utils import ( + * NORM_PATHS_AND_BASE_CONTAINER, # <<<<<<<<<<<<<< + * get_abs_path_real_path_and_base_from_file, + * get_abs_path_real_path_and_base_from_frame, + */ + __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + __Pyx_GIVEREF(__pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER)) __PYX_ERR(0, 34, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_abs_path_real_path_and_base); + __Pyx_GIVEREF(__pyx_n_s_get_abs_path_real_path_and_base); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_get_abs_path_real_path_and_base)) __PYX_ERR(0, 34, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_get_abs_path_real_path_and_base_2); + __Pyx_GIVEREF(__pyx_n_s_get_abs_path_real_path_and_base_2); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_get_abs_path_real_path_and_base_2)) __PYX_ERR(0, 34, __pyx_L1_error); + + /* "_pydevd_sys_monitoring_cython.pyx":33 + * ) + * from _pydevd_bundle.pydevd_frame_utils import short_tb, flag_as_unwinding, short_frame + * from pydevd_file_utils import ( # <<<<<<<<<<<<<< + * NORM_PATHS_AND_BASE_CONTAINER, + * get_abs_path_real_path_and_base_from_file, + */ + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_file_utils, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_NORM_PATHS_AND_BASE_CONTAINER, __pyx_t_3) < 0) __PYX_ERR(0, 34, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_abs_path_real_path_and_base); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base, __pyx_t_3) < 0) __PYX_ERR(0, 35, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_abs_path_real_path_and_base_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_abs_path_real_path_and_base_2, __pyx_t_3) < 0) __PYX_ERR(0, 36, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":38 + * get_abs_path_real_path_and_base_from_frame, + * ) + * from _pydevd_bundle.pydevd_trace_dispatch import should_stop_on_exception, handle_exception # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED + * from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_should_stop_on_exception); + __Pyx_GIVEREF(__pyx_n_s_should_stop_on_exception); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_should_stop_on_exception)) __PYX_ERR(0, 38, __pyx_L1_error); + __Pyx_INCREF(__pyx_n_s_handle_exception); + __Pyx_GIVEREF(__pyx_n_s_handle_exception); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_handle_exception)) __PYX_ERR(0, 38, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_should_stop_on_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_should_stop_on_exception, __pyx_t_2) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_handle_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_handle_exception, __pyx_t_2) < 0) __PYX_ERR(0, 38, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":39 + * ) + * from _pydevd_bundle.pydevd_trace_dispatch import should_stop_on_exception, handle_exception + * from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception + * from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_EXCEPTION_TYPE_HANDLED); + __Pyx_GIVEREF(__pyx_n_s_EXCEPTION_TYPE_HANDLED); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_EXCEPTION_TYPE_HANDLED)) __PYX_ERR(0, 39, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_constants, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_EXCEPTION_TYPE_HANDLED); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_EXCEPTION_TYPE_HANDLED, __pyx_t_3) < 0) __PYX_ERR(0, 39, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":40 + * from _pydevd_bundle.pydevd_trace_dispatch import should_stop_on_exception, handle_exception + * from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED + * from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception + * from _pydevd_bundle.pydevd_utils import get_clsname_for_code + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_is_unhandled_exception); + __Pyx_GIVEREF(__pyx_n_s_is_unhandled_exception); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_is_unhandled_exception)) __PYX_ERR(0, 40, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_trace_disp, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_is_unhandled_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_unhandled_exception, __pyx_t_2) < 0) __PYX_ERR(0, 40, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":41 + * from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED + * from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception + * from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_utils import get_clsname_for_code + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_stop_on_unhandled_exception); + __Pyx_GIVEREF(__pyx_n_s_stop_on_unhandled_exception); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_stop_on_unhandled_exception)) __PYX_ERR(0, 41, __pyx_L1_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_breakpoint, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_stop_on_unhandled_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop_on_unhandled_exception, __pyx_t_3) < 0) __PYX_ERR(0, 41, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":42 + * from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception + * from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception + * from _pydevd_bundle.pydevd_utils import get_clsname_for_code # <<<<<<<<<<<<<< + * + * # fmt: off + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_get_clsname_for_code); + __Pyx_GIVEREF(__pyx_n_s_get_clsname_for_code); + if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_clsname_for_code)) __PYX_ERR(0, 42, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_utils, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_get_clsname_for_code); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_clsname_for_code, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":53 + * # fmt: on + * + * try: # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset + * except ImportError: + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_4); + __Pyx_XGOTREF(__pyx_t_5); + /*try:*/ { + + /* "_pydevd_sys_monitoring_cython.pyx":54 + * + * try: + * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset # <<<<<<<<<<<<<< + * except ImportError: + * + */ + __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_n_s_get_smart_step_into_variant_from); + __Pyx_GIVEREF(__pyx_n_s_get_smart_step_into_variant_from); + if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_get_smart_step_into_variant_from)) __PYX_ERR(0, 54, __pyx_L2_error); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_pydevd_bundle_pydevd_bytecode_u, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_get_smart_step_into_variant_from); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L2_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_3) < 0) __PYX_ERR(0, 54, __pyx_L2_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":53 + * # fmt: on + * + * try: # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset + * except ImportError: + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L7_try_end; + __pyx_L2_error:; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":55 + * try: + * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset + * except ImportError: # <<<<<<<<<<<<<< + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): + */ + __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError); + if (__pyx_t_6) { + __Pyx_AddTraceback("_pydevd_sys_monitoring_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_7) < 0) __PYX_ERR(0, 55, __pyx_L4_except_error) + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_7); + + /* "_pydevd_sys_monitoring_cython.pyx":57 + * except ImportError: + * + * def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_8 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_1get_smart_step_into_variant_from_frame_offset, 0, __pyx_n_s_get_smart_step_into_variant_from, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 57, __pyx_L4_except_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_smart_step_into_variant_from, __pyx_t_8) < 0) __PYX_ERR(0, 57, __pyx_L4_except_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L3_exception_handled; + } + goto __pyx_L4_except_error; + + /* "_pydevd_sys_monitoring_cython.pyx":53 + * # fmt: on + * + * try: # <<<<<<<<<<<<<< + * from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset + * except ImportError: + */ + __pyx_L4_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_4, __pyx_t_5); + goto __pyx_L1_error; + __pyx_L3_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_4); + __Pyx_XGIVEREF(__pyx_t_5); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_4, __pyx_t_5); + __pyx_L7_try_end:; + } + + /* "_pydevd_sys_monitoring_cython.pyx":61 + * + * + * if hasattr(sys, "monitoring"): # <<<<<<<<<<<<<< + * DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + * monitor = sys.monitoring + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_sys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_HasAttr(__pyx_t_7, __pyx_n_s_monitoring); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 61, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (__pyx_t_9) { + + /* "_pydevd_sys_monitoring_cython.pyx":62 + * + * if hasattr(sys, "monitoring"): + * DEBUGGER_ID = sys.monitoring.DEBUGGER_ID # <<<<<<<<<<<<<< + * monitor = sys.monitoring + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_sys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_monitoring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DEBUGGER_ID); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUGGER_ID, __pyx_t_7) < 0) __PYX_ERR(0, 62, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":63 + * if hasattr(sys, "monitoring"): + * DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + * monitor = sys.monitoring # <<<<<<<<<<<<<< + * + * _thread_local_info = threading.local() + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_sys); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_monitoring); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_monitor, __pyx_t_3) < 0) __PYX_ERR(0, 63, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":61 + * + * + * if hasattr(sys, "monitoring"): # <<<<<<<<<<<<<< + * DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + * monitor = sys.monitoring + */ + } + + /* "_pydevd_sys_monitoring_cython.pyx":65 + * monitor = sys.monitoring + * + * _thread_local_info = threading.local() # <<<<<<<<<<<<<< + * _get_ident = threading.get_ident + * _thread_active = threading._active # noqa + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_local); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_local_info, __pyx_t_3) < 0) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":66 + * + * _thread_local_info = threading.local() + * _get_ident = threading.get_ident # <<<<<<<<<<<<<< + * _thread_active = threading._active # noqa + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_ident_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_ident, __pyx_t_7) < 0) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":67 + * _thread_local_info = threading.local() + * _get_ident = threading.get_ident + * _thread_active = threading._active # noqa # <<<<<<<<<<<<<< + * + * STATE_SUSPEND: int = 2 + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_threading); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_active); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_active, __pyx_t_3) < 0) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":69 + * _thread_active = threading._active # noqa + * + * STATE_SUSPEND: int = 2 # <<<<<<<<<<<<<< + * CMD_STEP_INTO: int = 107 + * CMD_STEP_OVER: int = 108 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_SUSPEND, __pyx_int_2) < 0) __PYX_ERR(0, 69, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":70 + * + * STATE_SUSPEND: int = 2 + * CMD_STEP_INTO: int = 107 # <<<<<<<<<<<<<< + * CMD_STEP_OVER: int = 108 + * CMD_STEP_OVER_MY_CODE: int = 159 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_INTO, __pyx_int_107) < 0) __PYX_ERR(0, 70, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":71 + * STATE_SUSPEND: int = 2 + * CMD_STEP_INTO: int = 107 + * CMD_STEP_OVER: int = 108 # <<<<<<<<<<<<<< + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_INTO_MY_CODE: int = 144 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_OVER, __pyx_int_108) < 0) __PYX_ERR(0, 71, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":72 + * CMD_STEP_INTO: int = 107 + * CMD_STEP_OVER: int = 108 + * CMD_STEP_OVER_MY_CODE: int = 159 # <<<<<<<<<<<<<< + * CMD_STEP_INTO_MY_CODE: int = 144 + * CMD_STEP_INTO_COROUTINE: int = 206 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_OVER_MY_CODE, __pyx_int_159) < 0) __PYX_ERR(0, 72, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":73 + * CMD_STEP_OVER: int = 108 + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_INTO_MY_CODE: int = 144 # <<<<<<<<<<<<<< + * CMD_STEP_INTO_COROUTINE: int = 206 + * CMD_SMART_STEP_INTO: int = 128 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_INTO_MY_CODE, __pyx_int_144) < 0) __PYX_ERR(0, 73, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":74 + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_INTO_MY_CODE: int = 144 + * CMD_STEP_INTO_COROUTINE: int = 206 # <<<<<<<<<<<<<< + * CMD_SMART_STEP_INTO: int = 128 + * can_skip: bool = True + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_INTO_COROUTINE, __pyx_int_206) < 0) __PYX_ERR(0, 74, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":75 + * CMD_STEP_INTO_MY_CODE: int = 144 + * CMD_STEP_INTO_COROUTINE: int = 206 + * CMD_SMART_STEP_INTO: int = 128 # <<<<<<<<<<<<<< + * can_skip: bool = True + * CMD_STEP_RETURN: int = 109 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_SMART_STEP_INTO, __pyx_int_128) < 0) __PYX_ERR(0, 75, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":76 + * CMD_STEP_INTO_COROUTINE: int = 206 + * CMD_SMART_STEP_INTO: int = 128 + * can_skip: bool = True # <<<<<<<<<<<<<< + * CMD_STEP_RETURN: int = 109 + * CMD_STEP_OVER_MY_CODE: int = 159 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_can_skip, Py_True) < 0) __PYX_ERR(0, 76, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":77 + * CMD_SMART_STEP_INTO: int = 128 + * can_skip: bool = True + * CMD_STEP_RETURN: int = 109 # <<<<<<<<<<<<<< + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_RETURN_MY_CODE: int = 160 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_RETURN, __pyx_int_109) < 0) __PYX_ERR(0, 77, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":78 + * can_skip: bool = True + * CMD_STEP_RETURN: int = 109 + * CMD_STEP_OVER_MY_CODE: int = 159 # <<<<<<<<<<<<<< + * CMD_STEP_RETURN_MY_CODE: int = 160 + * CMD_SET_BREAK: int = 111 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_OVER_MY_CODE, __pyx_int_159) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":79 + * CMD_STEP_RETURN: int = 109 + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_RETURN_MY_CODE: int = 160 # <<<<<<<<<<<<<< + * CMD_SET_BREAK: int = 111 + * CMD_SET_FUNCTION_BREAK: int = 208 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_STEP_RETURN_MY_CODE, __pyx_int_160) < 0) __PYX_ERR(0, 79, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":80 + * CMD_STEP_OVER_MY_CODE: int = 159 + * CMD_STEP_RETURN_MY_CODE: int = 160 + * CMD_SET_BREAK: int = 111 # <<<<<<<<<<<<<< + * CMD_SET_FUNCTION_BREAK: int = 208 + * STATE_RUN: int = 1 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_SET_BREAK, __pyx_int_111) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":81 + * CMD_STEP_RETURN_MY_CODE: int = 160 + * CMD_SET_BREAK: int = 111 + * CMD_SET_FUNCTION_BREAK: int = 208 # <<<<<<<<<<<<<< + * STATE_RUN: int = 1 + * STATE_SUSPEND: int = 2 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CMD_SET_FUNCTION_BREAK, __pyx_int_208) < 0) __PYX_ERR(0, 81, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":82 + * CMD_SET_BREAK: int = 111 + * CMD_SET_FUNCTION_BREAK: int = 208 + * STATE_RUN: int = 1 # <<<<<<<<<<<<<< + * STATE_SUSPEND: int = 2 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_RUN, __pyx_int_1) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":83 + * CMD_SET_FUNCTION_BREAK: int = 208 + * STATE_RUN: int = 1 + * STATE_SUSPEND: int = 2 # <<<<<<<<<<<<<< + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_STATE_SUSPEND, __pyx_int_2) < 0) __PYX_ERR(0, 83, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":85 + * STATE_SUSPEND: int = 2 + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") # <<<<<<<<<<<<<< + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_re); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_compile); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IGNORE_EXCEPTION_TAG, __pyx_t_3) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":86 + * + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") # <<<<<<<<<<<<<< + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START, __pyx_tuple__26) < 0) __PYX_ERR(0, 86, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":87 + * IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") # <<<<<<<<<<<<<< + * TRACE_PROPERTY = "pydevd_traceproperty.py" + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_START_PY3K, __pyx_tuple__27) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":88 + * DEBUG_START = ("pydevd.py", "run") + * DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") + * TRACE_PROPERTY = "pydevd_traceproperty.py" # <<<<<<<<<<<<<< + * + * _global_notify_skipped_step_in = False + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TRACE_PROPERTY, __pyx_kp_s_pydevd_traceproperty_py) < 0) __PYX_ERR(0, 88, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":90 + * TRACE_PROPERTY = "pydevd_traceproperty.py" + * + * _global_notify_skipped_step_in = False # <<<<<<<<<<<<<< + * _global_notify_skipped_step_in_lock = ForkSafeLock() + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_notify_skipped_step_in, Py_False) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "_pydevd_sys_monitoring_cython.pyx":91 + * + * _global_notify_skipped_step_in = False + * _global_notify_skipped_step_in_lock = ForkSafeLock() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ForkSafeLock); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_global_notify_skipped_step_in_l, __pyx_t_7) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_10ThreadInfo_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadInfo___reduce_cython, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo, __pyx_n_s_reduce_cython, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_ThreadInfo, (type(self), 0xd625bfa, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_ThreadInfo__set_state(self, __pyx_state) + */ + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_10ThreadInfo_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ThreadInfo___setstate_cython, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo, __pyx_n_s_setstate_cython, __pyx_t_7) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython_ThreadInfo); + + /* "_pydevd_sys_monitoring_cython.pyx":270 + * + * + * class _DeleteDummyThreadOnDel: # <<<<<<<<<<<<<< + * """ + * Helper class to remove a dummy thread from threading._active on __del__. + */ + __pyx_t_7 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_DeleteDummyThreadOnDel, __pyx_n_s_DeleteDummyThreadOnDel, (PyObject *) NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_kp_s_Helper_class_to_remove_a_dummy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + + /* "_pydevd_sys_monitoring_cython.pyx":275 + * """ + * + * def __init__(self, dummy_thread): # <<<<<<<<<<<<<< + * self._dummy_thread = dummy_thread + * self._tident = dummy_thread.ident + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_1__init__, 0, __pyx_n_s_DeleteDummyThreadOnDel___init, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_init, __pyx_t_3) < 0) __PYX_ERR(0, 275, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":286 + * _thread_local_info._track_dummy_thread_ref = self + * + * def __del__(self): # <<<<<<<<<<<<<< + * with threading._active_limbo_lock: + * if _thread_active.get(self._tident) is self._dummy_thread: + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_23_DeleteDummyThreadOnDel_3__del__, 0, __pyx_n_s_DeleteDummyThreadOnDel___del, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_n_s_del, __pyx_t_3) < 0) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":270 + * + * + * class _DeleteDummyThreadOnDel: # <<<<<<<<<<<<<< + * """ + * Helper class to remove a dummy thread from threading._active on __del__. + */ + __pyx_t_3 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_DeleteDummyThreadOnDel, __pyx_empty_tuple, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_DeleteDummyThreadOnDel, __pyx_t_3) < 0) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":416 + * self.co_name: str = "" + * + * def get_line_of_offset(self, offset): # <<<<<<<<<<<<<< + * for start, end, line in self.code_obj.co_lines(): + * if offset >= start and offset <= end: + */ + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_3get_line_of_offset, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FuncCodeInfo_get_line_of_offset, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo, __pyx_n_s_get_line_of_offset, __pyx_t_7) < 0) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FuncCodeInfo___reduce_cython, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo, __pyx_n_s_reduce_cython, __pyx_t_7) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_FuncCodeInfo, (type(self), 0x3f403d2, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_FuncCodeInfo__set_state(self, __pyx_state) + */ + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_12FuncCodeInfo_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_FuncCodeInfo___setstate_cython, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo, __pyx_n_s_setstate_cython, __pyx_t_7) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython_FuncCodeInfo); + + /* "_pydevd_sys_monitoring_cython.pyx":450 + * + * + * _CodeLineInfo = namedtuple("_CodeLineInfo", "line_to_offset, first_line, last_line") # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_namedtuple); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CodeLineInfo, __pyx_t_3) < 0) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":456 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cdef _get_code_line_info(code_obj, _cache={}): # <<<<<<<<<<<<<< + * # ELSE + * # def _get_code_line_info(code_obj, _cache={}): + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 456, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__15 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":479 + * + * + * _code_to_func_code_info_cache: Dict[CodeType, "FuncCodeInfo"] = {} # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_code_to_func_code_info_cache, __pyx_t_3) < 0) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":484 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): # <<<<<<<<<<<<<< + * cdef FuncCodeInfo func_code_info + * # ELSE + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_3_get_func_code_info, 0, __pyx_n_s_get_func_code_info, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_func_code_info, __pyx_t_3) < 0) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":678 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef disable_code_tracing(code): # <<<<<<<<<<<<<< + * # ELSE + * # def disable_code_tracing(code): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_5disable_code_tracing, 0, __pyx_n_s_disable_code_tracing, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 678, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_disable_code_tracing, __pyx_t_3) < 0) __PYX_ERR(0, 678, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":689 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef enable_code_tracing(unsigned long thread_ident, code, frame): # <<<<<<<<<<<<<< + * # ELSE + * # def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_7enable_code_tracing, 0, __pyx_n_s_enable_code_tracing, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_enable_code_tracing, __pyx_t_3) < 0) __PYX_ERR(0, 689, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TryExceptContainerObj___reduce, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, __pyx_n_s_reduce_cython, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle__TryExceptContainerObj, (type(self), 0xdbf5e44, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle__TryExceptContainerObj__set_state(self, __pyx_state) + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_22_TryExceptContainerObj_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_TryExceptContainerObj___setstat, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj, __pyx_n_s_setstate_cython, __pyx_t_3) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + PyType_Modified(__pyx_ptype_29_pydevd_sys_monitoring_cython__TryExceptContainerObj); + + /* "_pydevd_sys_monitoring_cython.pyx":1709 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef _ensure_monitoring(): # <<<<<<<<<<<<<< + * # ELSE + * # def _ensure_monitoring(): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_9_ensure_monitoring, 0, __pyx_n_s_ensure_monitoring, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1709, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ensure_monitoring, __pyx_t_3) < 0) __PYX_ERR(0, 1709, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1723 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef start_monitoring(bint all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_11start_monitoring, 0, __pyx_n_s_start_monitoring, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1723, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__52); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_start_monitoring, __pyx_t_3) < 0) __PYX_ERR(0, 1723, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1751 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * cpdef stop_monitoring(all_threads=False): # <<<<<<<<<<<<<< + * cdef ThreadInfo thread_info + * # ELSE + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_13stop_monitoring, 0, __pyx_n_s_stop_monitoring, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1751, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__54); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop_monitoring, __pyx_t_3) < 0) __PYX_ERR(0, 1751, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1779 + * + * + * def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: # <<<<<<<<<<<<<< + * """ + * This should be called when breakpoints change. + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_suspend_requested, __pyx_kp_s_Optional_bool) < 0) __PYX_ERR(0, 1779, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_None) < 0) __PYX_ERR(0, 1779, __pyx_L1_error) + __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_15update_monitor_events, 0, __pyx_n_s_update_monitor_events, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1779, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_tuple__57); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_update_monitor_events, __pyx_t_7) < 0) __PYX_ERR(0, 1779, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1864 + * + * + * def restart_events() -> None: # <<<<<<<<<<<<<< + * # Note: if breakpoints change, update_monitor_events usually needs to be + * # called first, then the line event tracing must be set for existing frames + */ + __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_return, __pyx_n_s_None) < 0) __PYX_ERR(0, 1864, __pyx_L1_error) + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_17restart_events, 0, __pyx_n_s_restart_events, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1864, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_restart_events, __pyx_t_3) < 0) __PYX_ERR(0, 1864, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1899 + * # fmt: off + * # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + * def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): # <<<<<<<<<<<<<< + * # ELSE + * # def _do_wait_suspend(py_db, thread_info, frame, event, arg): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_19_do_wait_suspend, 0, __pyx_n_s_do_wait_suspend, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1899, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_do_wait_suspend, __pyx_t_3) < 0) __PYX_ERR(0, 1899, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_ThreadInfo(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_21__pyx_unpickle_ThreadInfo, 0, __pyx_n_s_pyx_unpickle_ThreadInfo, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_ThreadInfo, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":11 + * __pyx_unpickle_ThreadInfo__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_ThreadInfo__set_state(ThreadInfo __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.additional_info = __pyx_state[0]; __pyx_result.thread = __pyx_state[1]; __pyx_result.thread_ident = __pyx_state[2]; __pyx_result.trace = __pyx_state[3] + * if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'): + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_23__pyx_unpickle_FuncCodeInfo, 0, __pyx_n_s_pyx_unpickle_FuncCodeInfo, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_FuncCodeInfo, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle__TryExceptContainerObj(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_29_pydevd_sys_monitoring_cython_25__pyx_unpickle__TryExceptContainerObj, 0, __pyx_n_s_pyx_unpickle__TryExceptContain, NULL, __pyx_n_s_pydevd_sys_monitoring_cython, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle__TryExceptContain, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "_pydevd_sys_monitoring_cython.pyx":1 + * from __future__ import print_function # <<<<<<<<<<<<<< + * + * # Important: Autogenerated file. + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + if (__pyx_m) { + if (__pyx_d && stringtab_initialized) { + __Pyx_AddTraceback("init _pydevd_sys_monitoring_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + #if !CYTHON_USE_MODULE_STATE + Py_CLEAR(__pyx_m); + #else + Py_DECREF(__pyx_m); + if (pystate_addmodule_run) { + PyObject *tp, *value, *tb; + PyErr_Fetch(&tp, &value, &tb); + PyState_RemoveModule(&__pyx_moduledef); + PyErr_Restore(tp, value, tb); + } + #endif + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init _pydevd_sys_monitoring_cython"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} +/* #### Code section: cleanup_globals ### */ +/* #### Code section: cleanup_module ### */ +/* #### Code section: main_method ### */ +/* #### Code section: utility_code_pragmas ### */ +#ifdef _MSC_VER +#pragma warning( push ) +/* Warning 4127: conditional expression is constant + * Cython uses constant conditional expressions to allow in inline functions to be optimized at + * compile-time, so this warning is not useful + */ +#pragma warning( disable : 4127 ) +#endif + + + +/* #### Code section: utility_code_def ### */ + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030C00A6 + PyObject *current_exception = tstate->current_exception; + if (unlikely(!current_exception)) return 0; + exc_type = (PyObject*) Py_TYPE(current_exception); + if (exc_type == err) return 1; +#else + exc_type = tstate->curexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; +#endif + #if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(exc_type); + #endif + if (unlikely(PyTuple_Check(err))) { + result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + } else { + result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); + } + #if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(exc_type); + #endif + return result; +} +#endif + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject *tmp_value; + assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); + if (value) { + #if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) + #endif + PyException_SetTraceback(value, tb); + } + tmp_value = tstate->current_exception; + tstate->current_exception = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { +#if PY_VERSION_HEX >= 0x030C00A6 + PyObject* exc_value; + exc_value = tstate->current_exception; + tstate->current_exception = 0; + *value = exc_value; + *type = NULL; + *tb = NULL; + if (exc_value) { + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + #if CYTHON_COMPILING_IN_CPYTHON + *tb = ((PyBaseExceptionObject*) exc_value)->traceback; + Py_XINCREF(*tb); + #else + *tb = PyException_GetTraceback(exc_value); + #endif + } +#else + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#endif +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + (void) PyObject_GetOptionalAttr(obj, attr_name, &result); + return result; +#else +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +#endif +} + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); + if (unlikely(!result) && !PyErr_Occurred()) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* TupleAndListFromArray */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { + PyObject *v; + Py_ssize_t i; + for (i = 0; i < length; i++) { + v = dest[i] = src[i]; + Py_INCREF(v); + } +} +static CYTHON_INLINE PyObject * +__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + Py_INCREF(__pyx_empty_tuple); + return __pyx_empty_tuple; + } + res = PyTuple_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); + return res; +} +static CYTHON_INLINE PyObject * +__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) +{ + PyObject *res; + if (n <= 0) { + return PyList_New(0); + } + res = PyList_New(n); + if (unlikely(res == NULL)) return NULL; + __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); + return res; +} +#endif + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* fastcall */ +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) +{ + Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); + for (i = 0; i < n; i++) + { + if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; + } + for (i = 0; i < n; i++) + { + int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); + if (unlikely(eq != 0)) { + if (unlikely(eq < 0)) return NULL; + return kwvalues[i]; + } + } + return NULL; +} +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 +CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { + Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); + PyObject *dict; + dict = PyDict_New(); + if (unlikely(!dict)) + return NULL; + for (i=0; i= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject *const *kwvalues, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); + while (1) { + Py_XDECREF(key); key = NULL; + Py_XDECREF(value); value = NULL; + if (kwds_is_tuple) { + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(kwds); +#else + size = PyTuple_Size(kwds); + if (size < 0) goto bad; +#endif + if (pos >= size) break; +#if CYTHON_AVOID_BORROWED_REFS + key = __Pyx_PySequence_ITEM(kwds, pos); + if (!key) goto bad; +#elif CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kwds, pos); +#else + key = PyTuple_GetItem(kwds, pos); + if (!key) goto bad; +#endif + value = kwvalues[pos]; + pos++; + } + else + { + if (!PyDict_Next(kwds, &pos, &key, &value)) break; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + } + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + Py_INCREF(value); + Py_DECREF(key); +#endif + key = NULL; + value = NULL; + continue; + } +#if !CYTHON_AVOID_BORROWED_REFS + Py_INCREF(key); +#endif + Py_INCREF(value); + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = ( + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key) + ); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; +#if CYTHON_AVOID_BORROWED_REFS + value = NULL; +#endif + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + Py_XDECREF(key); + Py_XDECREF(value); + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + Py_XDECREF(key); + Py_XDECREF(value); + return -1; +} + +/* FixUpExtensionType */ +#if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* FetchSharedCythonModule */ +static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); +} + +/* FetchCommonType */ +static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; + } + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; + } + return 0; +} +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; +#endif + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; + } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} +#endif + +/* PyVectorcallFastCallDict */ +#if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; + } + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); +} +#endif + +/* CythonFunctionShared */ +#if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} +#else +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} +#endif +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#else + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); +#endif +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; +#else + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } +#endif + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); +#else + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; + } +#endif + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); + } +ignore: + PyErr_Clear(); + } +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, +#else +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, +#endif +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, +#else + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, +#endif +#endif + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; +#if CYTHON_COMPILING_IN_LIMITED_API + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; +#endif + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; +#if !CYTHON_COMPILING_IN_LIMITED_API + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; +#else + ((PyCMethodObject*)op)->mm_class = NULL; +#endif + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; + } +#endif + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_CLEAR(m->func); +#else + Py_CLEAR(((PyCFunctionObject*)m)->m_module); +#endif + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); + } +#endif +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); +#endif + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; +#endif + Py_ssize_t size; + switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 0)) + return (*meth)(self, NULL); +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); +#else + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; +#endif + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); +#endif + } +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) +{ + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; + } + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; +} +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); +} +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); +} +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) +{ + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_PyMethod_New, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); +#else + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); +#endif + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + m->defaults_size = size; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CythonFunction */ +static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); + } + return op; +} + +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kw, + const char* function_name, + int kw_allowed) +{ + PyObject* key = 0; + Py_ssize_t pos = 0; +#if CYTHON_COMPILING_IN_PYPY + if (!kw_allowed && PyDict_Next(kw, &pos, &key, 0)) + goto invalid_keyword; + return 1; +#else + if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) { + Py_ssize_t kwsize; +#if CYTHON_ASSUME_SAFE_MACROS + kwsize = PyTuple_GET_SIZE(kw); +#else + kwsize = PyTuple_Size(kw); + if (kwsize < 0) return 0; +#endif + if (unlikely(kwsize == 0)) + return 1; + if (!kw_allowed) { +#if CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kw, 0); +#else + key = PyTuple_GetItem(kw, pos); + if (!key) return 0; +#endif + goto invalid_keyword; + } +#if PY_VERSION_HEX < 0x03090000 + for (pos = 0; pos < kwsize; pos++) { +#if CYTHON_ASSUME_SAFE_MACROS + key = PyTuple_GET_ITEM(kw, pos); +#else + key = PyTuple_GetItem(kw, pos); + if (!key) return 0; +#endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } +#endif + return 1; + } + while (PyDict_Next(kw, &pos, &key, 0)) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_Check(key))) + #endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } + if (!kw_allowed && unlikely(key)) + goto invalid_keyword; + return 1; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + return 0; +#endif +invalid_keyword: + #if PY_MAJOR_VERSION < 3 + PyErr_Format(PyExc_TypeError, + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + PyErr_Format(PyExc_TypeError, + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif + return 0; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#elif CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(!__pyx_m)) { + return NULL; + } + result = PyObject_GetAttr(__pyx_m, name); + if (likely(result)) { + return result; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyObjectLookupSpecial */ +#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { + PyObject *res; + PyTypeObject *tp = Py_TYPE(obj); +#if PY_MAJOR_VERSION < 3 + if (unlikely(PyInstance_Check(obj))) + return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); +#endif + res = _PyType_Lookup(tp, attr_name); + if (likely(res)) { + descrgetfunc f = Py_TYPE(res)->tp_descr_get; + if (!f) { + Py_INCREF(res); + } else { + res = f(res, obj, (PyObject *)tp); + } + } else if (with_error) { + PyErr_SetObject(PyExc_AttributeError, attr_name); + } + return res; +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) { + return NULL; + } + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) { + return NULL; + } + #endif + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func); + self = __Pyx_CyOrPyCFunction_GET_SELF(func); + #if PY_MAJOR_VERSION < 3 + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + #else + if (unlikely(Py_EnterRecursiveCall(" while calling a Python object"))) + return NULL; + #endif + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectFastCall */ +#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API +static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) { + PyObject *argstuple; + PyObject *result = 0; + size_t i; + argstuple = PyTuple_New((Py_ssize_t)nargs); + if (unlikely(!argstuple)) return NULL; + for (i = 0; i < nargs; i++) { + Py_INCREF(args[i]); + if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) < 0) goto bad; + } + result = __Pyx_PyObject_Call(func, argstuple, kwargs); + bad: + Py_DECREF(argstuple); + return result; +} +#endif +static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) { + Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs); +#if CYTHON_COMPILING_IN_CPYTHON + if (nargs == 0 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS)) + return __Pyx_PyObject_CallMethO(func, NULL); + } + else if (nargs == 1 && kwargs == NULL) { + if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O)) + return __Pyx_PyObject_CallMethO(func, args[0]); + } +#endif + #if PY_VERSION_HEX < 0x030800B1 + #if CYTHON_FAST_PYCCALL + if (PyCFunction_Check(func)) { + if (kwargs) { + return _PyCFunction_FastCallDict(func, args, nargs, kwargs); + } else { + return _PyCFunction_FastCallKeywords(func, args, nargs, NULL); + } + } + #if PY_VERSION_HEX >= 0x030700A1 + if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) { + return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL); + } + #endif + #endif + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs); + } + #endif + #endif + if (kwargs == NULL) { + #if CYTHON_VECTORCALL + #if PY_VERSION_HEX < 0x03090000 + vectorcallfunc f = _PyVectorcall_Function(func); + #else + vectorcallfunc f = PyVectorcall_Function(func); + #endif + if (f) { + return f(func, args, (size_t)nargs, NULL); + } + #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL + if (__Pyx_CyFunction_CheckExact(func)) { + __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func); + if (f) return f(func, args, (size_t)nargs, NULL); + } + #endif + } + if (nargs == 0) { + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); + } + #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API + return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs); + #else + return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs); + #endif +} + +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* GetException */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) +#else +static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) +#endif +{ + PyObject *local_type = NULL, *local_value, *local_tb = NULL; +#if CYTHON_FAST_THREAD_STATE + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if PY_VERSION_HEX >= 0x030C00A6 + local_value = tstate->current_exception; + tstate->current_exception = 0; + if (likely(local_value)) { + local_type = (PyObject*) Py_TYPE(local_value); + Py_INCREF(local_type); + local_tb = PyException_GetTraceback(local_value); + } + #else + local_type = tstate->curexc_type; + local_value = tstate->curexc_value; + local_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + #endif +#else + PyErr_Fetch(&local_type, &local_value, &local_tb); +#endif + PyErr_NormalizeException(&local_type, &local_value, &local_tb); +#if CYTHON_FAST_THREAD_STATE && PY_VERSION_HEX >= 0x030C00A6 + if (unlikely(tstate->current_exception)) +#elif CYTHON_FAST_THREAD_STATE + if (unlikely(tstate->curexc_type)) +#else + if (unlikely(PyErr_Occurred())) +#endif + goto bad; + #if PY_MAJOR_VERSION >= 3 + if (local_tb) { + if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) + goto bad; + } + #endif + Py_XINCREF(local_tb); + Py_XINCREF(local_type); + Py_XINCREF(local_value); + *type = local_type; + *value = local_value; + *tb = local_tb; +#if CYTHON_FAST_THREAD_STATE + #if CYTHON_USE_EXC_INFO_STACK + { + _PyErr_StackItem *exc_info = tstate->exc_info; + #if PY_VERSION_HEX >= 0x030B00a4 + tmp_value = exc_info->exc_value; + exc_info->exc_value = local_value; + tmp_type = NULL; + tmp_tb = NULL; + Py_XDECREF(local_type); + Py_XDECREF(local_tb); + #else + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = local_type; + exc_info->exc_value = local_value; + exc_info->exc_traceback = local_tb; + #endif + } + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = local_type; + tstate->exc_value = local_value; + tstate->exc_traceback = local_tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_SetExcInfo(local_type, local_value, local_tb); +#endif + return 0; +bad: + *type = 0; + *value = 0; + *tb = 0; + Py_XDECREF(local_type); + Py_XDECREF(local_value); + Py_XDECREF(local_tb); + return -1; +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (unlikely(!j)) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; + PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; + if (mm && mm->mp_subscript) { + PyObject *r, *key = PyInt_FromSsize_t(i); + if (unlikely(!key)) return NULL; + r = mm->mp_subscript(o, key); + Py_DECREF(key); + return r; + } + if (likely(sm && sm->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { + Py_ssize_t l = sm->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return sm->sq_item(o, i); + } + } +#else + if (is_list || !PyMapping_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + __Pyx_TypeName type_name; + __Pyx_TypeName obj_type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + type_name = __Pyx_PyType_GetName(type); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME + ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name); + __Pyx_DECREF_TypeName(type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* GetAttr3 */ +#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +#endif +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r; +#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 + int res = PyObject_GetOptionalAttr(o, n, &r); + return (res != 0) ? r : __Pyx_NewRef(d); +#else + #if CYTHON_USE_TYPE_SLOTS + if (likely(PyString_Check(n))) { + r = __Pyx_PyObject_GetAttrStrNoError(o, n); + if (unlikely(!r) && likely(!PyErr_Occurred())) { + r = __Pyx_NewRef(d); + } + return r; + } + #endif + r = PyObject_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +#endif +} + +/* RaiseUnexpectedTypeError */ +static int +__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj) +{ + __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME, + expected, obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return 0; +} + +/* PyIntBinop */ +#if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { + PyObject* exc_type; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + exc_type = __Pyx_PyErr_CurrentExceptionType(); + if (unlikely(exc_type)) { + if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) + return -1; + __Pyx_PyErr_Clear(); + return 0; + } + return 0; +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } + return __Pyx_IterFinish(); +} + +/* PyObjectCallNoArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { + PyObject *arg[2] = {NULL, NULL}; + return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + __Pyx_PyThreadState_declare + CYTHON_UNUSED_VAR(cause); + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { + #if PY_VERSION_HEX >= 0x030C00A6 + PyException_SetTraceback(value, tb); + #elif CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#else + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyObjectCallOneArg */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *args[2] = {NULL, arg}; + return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* ObjectGetItem */ +#if CYTHON_USE_TYPE_SLOTS +static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) { + PyObject *runerr = NULL; + Py_ssize_t key_value; + key_value = __Pyx_PyIndex_AsSsize_t(index); + if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { + return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); + } + if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { + __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index)); + PyErr_Clear(); + PyErr_Format(PyExc_IndexError, + "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name); + __Pyx_DECREF_TypeName(index_type_name); + } + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) { + __Pyx_TypeName obj_type_name; + if (likely(PyType_Check(obj))) { + PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem); + if (!meth) { + PyErr_Clear(); + } else { + PyObject *result = __Pyx_PyObject_CallOneArg(meth, key); + Py_DECREF(meth); + return result; + } + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return NULL; +} +static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) { + PyTypeObject *tp = Py_TYPE(obj); + PyMappingMethods *mm = tp->tp_as_mapping; + PySequenceMethods *sm = tp->tp_as_sequence; + if (likely(mm && mm->mp_subscript)) { + return mm->mp_subscript(obj, key); + } + if (likely(sm && sm->sq_item)) { + return __Pyx_PyObject_GetIndex(obj, key); + } + return __Pyx_PyObject_GetItem_Slow(obj, key); +} +#endif + +/* ExtTypeTest */ +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + __Pyx_TypeName obj_type_name; + __Pyx_TypeName type_name; + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(__Pyx_TypeCheck(obj, type))) + return 1; + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_TypeError, + "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME, + obj_type_name, type_name); + __Pyx_DECREF_TypeName(obj_type_name); + __Pyx_DECREF_TypeName(type_name); + return 0; +} + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + __Pyx_TypeName type_name; + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR + if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) +#elif PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (likely(descr != NULL)) { + *method = descr; + return 0; + } + type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod0 */ +static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { + PyObject *method = NULL, *result = NULL; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_CallOneArg(method, obj); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) goto bad; + result = __Pyx_PyObject_CallNoArg(method); + Py_DECREF(method); +bad: + return result; +} + +/* RaiseNoneIterError */ +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +/* UnpackTupleError */ +static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { + if (t == Py_None) { + __Pyx_RaiseNoneNotIterableError(); + } else if (PyTuple_GET_SIZE(t) < index) { + __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); + } else { + __Pyx_RaiseTooManyValuesError(index); + } +} + +/* UnpackTuple2 */ +static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( + PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { + PyObject *value1 = NULL, *value2 = NULL; +#if CYTHON_COMPILING_IN_PYPY + value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; + value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; +#else + value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); + value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); +#endif + if (decref_tuple) { + Py_DECREF(tuple); + } + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +#if CYTHON_COMPILING_IN_PYPY +bad: + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +#endif +} +static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, + int has_known_size, int decref_tuple) { + Py_ssize_t index; + PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; + iternextfunc iternext; + iter = PyObject_GetIter(tuple); + if (unlikely(!iter)) goto bad; + if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } + iternext = __Pyx_PyObject_GetIterNextFunc(iter); + value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } + value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } + if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; + Py_DECREF(iter); + *pvalue1 = value1; + *pvalue2 = value2; + return 0; +unpacking_failed: + if (!has_known_size && __Pyx_IterFinish() == 0) + __Pyx_RaiseNeedMoreValuesError(index); +bad: + Py_XDECREF(iter); + Py_XDECREF(value1); + Py_XDECREF(value2); + if (decref_tuple) { Py_XDECREF(tuple); } + return -1; +} + +/* dict_iter */ +#if CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 +#include +#endif +static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, + Py_ssize_t* p_orig_length, int* p_source_is_dict) { + is_dict = is_dict || likely(PyDict_CheckExact(iterable)); + *p_source_is_dict = is_dict; + if (is_dict) { +#if !CYTHON_COMPILING_IN_PYPY + *p_orig_length = PyDict_Size(iterable); + Py_INCREF(iterable); + return iterable; +#elif PY_MAJOR_VERSION >= 3 + static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; + PyObject **pp = NULL; + if (method_name) { + const char *name = PyUnicode_AsUTF8(method_name); + if (strcmp(name, "iteritems") == 0) pp = &py_items; + else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; + else if (strcmp(name, "itervalues") == 0) pp = &py_values; + if (pp) { + if (!*pp) { + *pp = PyUnicode_FromString(name + 4); + if (!*pp) + return NULL; + } + method_name = *pp; + } + } +#endif + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* SwapException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_value = exc_info->exc_value; + exc_info->exc_value = *value; + if (tmp_value == NULL || tmp_value == Py_None) { + Py_XDECREF(tmp_value); + tmp_value = NULL; + tmp_type = NULL; + tmp_tb = NULL; + } else { + tmp_type = (PyObject*) Py_TYPE(tmp_value); + Py_INCREF(tmp_type); + #if CYTHON_COMPILING_IN_CPYTHON + tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback; + Py_XINCREF(tmp_tb); + #else + tmp_tb = PyException_GetTraceback(tmp_value); + #endif + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = *type; + exc_info->exc_value = *value; + exc_info->exc_traceback = *tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = *type; + tstate->exc_value = *value; + tstate->exc_traceback = *tb; + #endif + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#else +static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); + PyErr_SetExcInfo(*type, *value, *tb); + *type = tmp_type; + *value = tmp_value; + *tb = tmp_tb; +} +#endif + +/* UnpackUnboundCMethod */ +static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *result; + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else +#endif +#if CYTHON_COMPILING_IN_PYPY +#else + if (PyCFunction_Check(method)) +#endif + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); +#endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } + return 0; +} + +/* CallUnboundCMethod1 */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + #endif + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* CallUnboundCMethod2 */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 +static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) { + if (likely(cfunc->func)) { + PyObject *args[2] = {arg1, arg2}; + if (cfunc->flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, args, 2); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif + } + #if PY_VERSION_HEX >= 0x030700A0 + if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS)) + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif + } + return __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(3); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 1, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 2, arg2); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(3, self, arg1, arg2); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* dict_getitem_default */ +static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) { + PyObject* value; +#if PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (unlikely(PyErr_Occurred())) + return NULL; + value = default_value; + } + Py_INCREF(value); + if ((1)); +#else + if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) { + value = PyDict_GetItem(d, key); + if (unlikely(!value)) { + value = default_value; + } + Py_INCREF(value); + } +#endif + else { + if (default_value == Py_None) + value = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_get, d, key); + else + value = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyDict_Type_get, d, key, default_value); + } + return value; +} + +/* RaiseUnboundLocalError */ +static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { + PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); +} + +/* SliceObject */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, + Py_ssize_t cstart, Py_ssize_t cstop, + PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, + int has_cstart, int has_cstop, int wraparound) { + __Pyx_TypeName obj_type_name; +#if CYTHON_USE_TYPE_SLOTS + PyMappingMethods* mp; +#if PY_MAJOR_VERSION < 3 + PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; + if (likely(ms && ms->sq_slice)) { + if (!has_cstart) { + if (_py_start && (*_py_start != Py_None)) { + cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); + if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstart = 0; + } + if (!has_cstop) { + if (_py_stop && (*_py_stop != Py_None)) { + cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); + if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + } else + cstop = PY_SSIZE_T_MAX; + } + if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { + Py_ssize_t l = ms->sq_length(obj); + if (likely(l >= 0)) { + if (cstop < 0) { + cstop += l; + if (cstop < 0) cstop = 0; + } + if (cstart < 0) { + cstart += l; + if (cstart < 0) cstart = 0; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + goto bad; + PyErr_Clear(); + } + } + return ms->sq_slice(obj, cstart, cstop); + } +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + mp = Py_TYPE(obj)->tp_as_mapping; + if (likely(mp && mp->mp_subscript)) +#else + CYTHON_UNUSED_VAR(wraparound); +#endif + { + PyObject* result; + PyObject *py_slice, *py_start, *py_stop; + if (_py_slice) { + py_slice = *_py_slice; + } else { + PyObject* owned_start = NULL; + PyObject* owned_stop = NULL; + if (_py_start) { + py_start = *_py_start; + } else { + if (has_cstart) { + owned_start = py_start = PyInt_FromSsize_t(cstart); + if (unlikely(!py_start)) goto bad; + } else + py_start = Py_None; + } + if (_py_stop) { + py_stop = *_py_stop; + } else { + if (has_cstop) { + owned_stop = py_stop = PyInt_FromSsize_t(cstop); + if (unlikely(!py_stop)) { + Py_XDECREF(owned_start); + goto bad; + } + } else + py_stop = Py_None; + } + py_slice = PySlice_New(py_start, py_stop, Py_None); + Py_XDECREF(owned_start); + Py_XDECREF(owned_stop); + if (unlikely(!py_slice)) goto bad; + } +#if CYTHON_USE_TYPE_SLOTS + result = mp->mp_subscript(obj, py_slice); +#else + result = PyObject_GetItem(obj, py_slice); +#endif + if (!_py_slice) { + Py_DECREF(py_slice); + } + return result; + } + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); +bad: + return NULL; +} + +/* PyIntCompare */ +static CYTHON_INLINE int __Pyx_PyInt_BoolNeObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 0; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a != b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) != 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 1; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 1; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal != 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a != (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_NE)); +} + +/* PyIntCompare */ +static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *module = 0; + PyObject *empty_dict = 0; + PyObject *empty_list = 0; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (unlikely(!py_import)) + goto bad; + if (!from_list) { + empty_list = PyList_New(0); + if (unlikely(!empty_list)) + goto bad; + from_list = empty_list; + } + #endif + empty_dict = PyDict_New(); + if (unlikely(!empty_dict)) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, 1); + if (unlikely(!module)) { + if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (unlikely(!py_level)) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, __pyx_d, empty_dict, from_list, level); + #endif + } + } +bad: + Py_XDECREF(empty_dict); + Py_XDECREF(empty_list); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + const char* module_name_str = 0; + PyObject* module_name = 0; + PyObject* module_dot = 0; + PyObject* full_name = 0; + PyErr_Clear(); + module_name_str = PyModule_GetName(module); + if (unlikely(!module_name_str)) { goto modbad; } + module_name = PyUnicode_FromString(module_name_str); + if (unlikely(!module_name)) { goto modbad; } + module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__19); + if (unlikely(!module_dot)) { goto modbad; } + full_name = PyUnicode_Concat(module_dot, name); + if (unlikely(!full_name)) { goto modbad; } + #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + { + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + goto modbad; + value = PyObject_GetItem(modules, full_name); + } + #else + value = PyImport_GetModule(full_name); + #endif + modbad: + Py_XDECREF(full_name); + Py_XDECREF(module_dot); + Py_XDECREF(module_name); + } + if (unlikely(!value)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* ValidateBasesTuple */ +#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } + } +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + } + return 0; +} +#endif + +/* PyType_Ready */ +static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) + return -1; +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; + #else + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } + #endif + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; +#endif +#else + (void)__Pyx_PyObject_CallMethod0; +#endif + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } + } + Py_DECREF(gc); + #endif + } +#endif + return r; +#endif +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* SetupReduce */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_getstate = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; + PyObject *getstate = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +#else + getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); + if (!getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (getstate) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); +#else + object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); + if (!object_getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (object_getstate != getstate) { + goto __PYX_GOOD; + } + } +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); + } + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); + Py_XDECREF(object_getstate); + Py_XDECREF(getstate); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; + } + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; + } + if ((size_t)(basicsize + itemsize) < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* GetVTable */ +static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); +#endif + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; +} + +/* ImportDottedModule */ +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { + PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; + if (unlikely(PyErr_Occurred())) { + PyErr_Clear(); + } + if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { + partial_name = name; + } else { + slice = PySequence_GetSlice(parts_tuple, 0, count); + if (unlikely(!slice)) + goto bad; + sep = PyUnicode_FromStringAndSize(".", 1); + if (unlikely(!sep)) + goto bad; + partial_name = PyUnicode_Join(sep, slice); + } + PyErr_Format( +#if PY_MAJOR_VERSION < 3 + PyExc_ImportError, + "No module named '%s'", PyString_AS_STRING(partial_name)); +#else +#if PY_VERSION_HEX >= 0x030600B1 + PyExc_ModuleNotFoundError, +#else + PyExc_ImportError, +#endif + "No module named '%U'", partial_name); +#endif +bad: + Py_XDECREF(sep); + Py_XDECREF(slice); + Py_XDECREF(partial_name); + return NULL; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { + PyObject *imported_module; +#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) + PyObject *modules = PyImport_GetModuleDict(); + if (unlikely(!modules)) + return NULL; + imported_module = __Pyx_PyDict_GetItemStr(modules, name); + Py_XINCREF(imported_module); +#else + imported_module = PyImport_GetModule(name); +#endif + return imported_module; +} +#endif +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { + Py_ssize_t i, nparts; + nparts = PyTuple_GET_SIZE(parts_tuple); + for (i=1; i < nparts && module; i++) { + PyObject *part, *submodule; +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + part = PyTuple_GET_ITEM(parts_tuple, i); +#else + part = PySequence_ITEM(parts_tuple, i); +#endif + submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); +#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(part); +#endif + Py_DECREF(module); + module = submodule; + } + if (unlikely(!module)) { + return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); + } + return module; +} +#endif +static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if PY_MAJOR_VERSION < 3 + PyObject *module, *from_list, *star = __pyx_n_s__22; + CYTHON_UNUSED_VAR(parts_tuple); + from_list = PyList_New(1); + if (unlikely(!from_list)) + return NULL; + Py_INCREF(star); + PyList_SET_ITEM(from_list, 0, star); + module = __Pyx_Import(name, from_list, 0); + Py_DECREF(from_list); + return module; +#else + PyObject *imported_module; + PyObject *module = __Pyx_Import(name, NULL, 0); + if (!parts_tuple || unlikely(!module)) + return module; + imported_module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(imported_module)) { + Py_DECREF(module); + return imported_module; + } + PyErr_Clear(); + return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); +#endif +} +static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 + PyObject *module = __Pyx__ImportDottedModule_Lookup(name); + if (likely(module)) { + PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); + if (likely(spec)) { + PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); + if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { + Py_DECREF(spec); + spec = NULL; + } + Py_XDECREF(unsafe); + } + if (likely(!spec)) { + PyErr_Clear(); + return module; + } + Py_DECREF(spec); + Py_DECREF(module); + } else if (PyErr_Occurred()) { + PyErr_Clear(); + } +#endif + return __Pyx__ImportDottedModule(name, parts_tuple); +} + +/* CalculateMetaclass */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases; +#if CYTHON_ASSUME_SAFE_MACROS + nbases = PyTuple_GET_SIZE(bases); +#else + nbases = PyTuple_Size(bases); + if (nbases < 0) return NULL; +#endif + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; +#if CYTHON_ASSUME_SAFE_MACROS + PyObject *tmp = PyTuple_GET_ITEM(bases, i); +#else + PyObject *tmp = PyTuple_GetItem(bases, i); + if (!tmp) return NULL; +#endif + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* PyObjectCall2Args */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* Py3ClassCreate */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs[3] = {NULL, name, bases}; + ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); + Py_DECREF(prep); + } else { + if (unlikely(PyErr_Occurred())) + return NULL; + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module_2, modname) < 0)) goto bad; +#if PY_VERSION_HEX >= 0x03030000 + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; +#else + CYTHON_MAYBE_UNUSED_VAR(qualname); +#endif + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS +static int __Pyx_SetNamesPEP487(PyObject *type_obj) { + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *names_to_set, *key, *value, *set_name, *tmp; + Py_ssize_t i = 0; +#if CYTHON_USE_TYPE_SLOTS + names_to_set = PyDict_Copy(type->tp_dict); +#else + { + PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); + names_to_set = NULL; + if (likely(d)) { + PyObject *names_to_set = PyDict_New(); + int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; + Py_DECREF(d); + if (unlikely(ret < 0)) + Py_CLEAR(names_to_set); + } + } +#endif + if (unlikely(names_to_set == NULL)) + goto bad; + while (PyDict_Next(names_to_set, &i, &key, &value)) { + set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); + if (unlikely(set_name != NULL)) { + tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); + Py_DECREF(set_name); + if (unlikely(tmp == NULL)) { + __Pyx_TypeName value_type_name = + __Pyx_PyType_GetName(Py_TYPE(value)); + __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); + PyErr_Format(PyExc_RuntimeError, +#if PY_MAJOR_VERSION >= 3 + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", + value_type_name, key, type_name); +#else + "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", + value_type_name, + PyString_Check(key) ? PyString_AS_STRING(key) : "?", + type_name); +#endif + goto bad; + } else { + Py_DECREF(tmp); + } + } + else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } + Py_DECREF(names_to_set); + return 0; +bad: + Py_XDECREF(names_to_set); + return -1; +} +static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { +#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyTypeObject *type = (PyTypeObject*) type_obj; + PyObject *mro = type->tp_mro; + Py_ssize_t i, nbases; + if (unlikely(!mro)) goto done; + (void) &__Pyx_GetBuiltinName; + Py_INCREF(mro); + nbases = PyTuple_GET_SIZE(mro); + assert(PyTuple_GET_ITEM(mro, 0) == type_obj); + for (i = 1; i < nbases-1; i++) { + PyObject *base, *dict, *meth; + base = PyTuple_GET_ITEM(mro, i); + dict = ((PyTypeObject *)base)->tp_dict; + meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); + if (unlikely(meth)) { + descrgetfunc f = Py_TYPE(meth)->tp_descr_get; + PyObject *res; + Py_INCREF(meth); + if (likely(f)) { + res = f(meth, NULL, type_obj); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + meth = res; + } + res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); + Py_DECREF(meth); + if (unlikely(!res)) goto bad; + Py_DECREF(res); + goto done; + } else if (unlikely(PyErr_Occurred())) { + goto bad; + } + } +done: + Py_XDECREF(mro); + return type_obj; +bad: + Py_XDECREF(mro); + Py_DECREF(type_obj); + return NULL; +#else + PyObject *super_type, *super, *func, *res; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); +#else + super_type = (PyObject*) &PySuper_Type; + (void) &__Pyx_GetBuiltinName; +#endif + super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; +#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) + Py_XDECREF(super_type); +#endif + if (unlikely(!super)) { + Py_CLEAR(type_obj); + goto done; + } + func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); + Py_DECREF(super); + if (likely(!func)) { + if (unlikely(PyErr_Occurred())) + Py_CLEAR(type_obj); + goto done; + } + res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); + Py_DECREF(func); + if (unlikely(!res)) + Py_CLEAR(type_obj); + Py_XDECREF(res); +done: + return type_obj; +#endif +} +#endif +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result; + PyObject *owned_metaclass = NULL; + PyObject *margs[4] = {NULL, name, bases, dict}; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, +#if PY_VERSION_HEX < 0x030600A4 + (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw +#else + mkw +#endif + ); + Py_XDECREF(owned_metaclass); +#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS + if (likely(result) && likely(PyType_Check(result))) { + if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { + Py_CLEAR(result); + } else { + result = __Pyx_InitSubclassPEP487(result, mkw); + } + } +#else + (void) &__Pyx_GetBuiltinName; +#endif + return result; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +#if !CYTHON_COMPILING_IN_LIMITED_API +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} +#endif + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" +#endif +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; + } + #else + return NULL; + #endif +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; + { + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); + } + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); + } + Py_XDECREF(frame); +} +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject *ptype, *pvalue, *ptraceback; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} +#endif + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(unsigned long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ +static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(unsigned long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + unsigned long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned long) -1; + val = __Pyx_PyInt_As_unsigned_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT)) { + return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT)) { + return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) >= 4 * PyLong_SHIFT)) { + return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(unsigned long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(unsigned long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + unsigned long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (unsigned long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (unsigned long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (unsigned long) -1; + } else { + stepval = v; + } + v = NULL; + val = (unsigned long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(unsigned long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (unsigned long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned long"); + return (unsigned long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long) -1; +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(int) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(int) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(int) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; + } + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + long val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (long) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (long) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (long) -1; + } else { + stepval = v; + } + v = NULL; + val = (long) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((long) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (long) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* FormatTypeName */ +#if CYTHON_COMPILING_IN_LIMITED_API +static __Pyx_TypeName +__Pyx_PyType_GetName(PyTypeObject* tp) +{ + PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, + __pyx_n_s_name); + if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { + PyErr_Clear(); + Py_XDECREF(name); + name = __Pyx_NewRef(__pyx_kp_s__17); + } + return name; +} +#endif + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; i= 0x030B00A4 + return Py_Version & ~0xFFUL; +#else + const char* rt_version = Py_GetVersion(); + unsigned long version = 0; + unsigned long factor = 0x01000000UL; + unsigned int digit = 0; + int i = 0; + while (factor) { + while ('0' <= rt_version[i] && rt_version[i] <= '9') { + digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); + ++i; + } + version += factor * digit; + if (rt_version[i] != '.') + break; + digit = 0; + factor >>= 8; + ++i; + } + return version; +#endif +} +static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { + const unsigned long MAJOR_MINOR = 0xFFFF0000UL; + if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) + return 0; + if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) + return 1; + { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compile time Python version %d.%d " + "of module '%.100s' " + "%s " + "runtime version %d.%d", + (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), + __Pyx_MODULE_NAME, + (allow_newer) ? "was newer than" : "does not match", + (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) + ); + return PyErr_WarnEx(NULL, message, 1); + } +} + +/* FunctionImport */ +#ifndef __PYX_HAVE_RT_ImportFunction_3_0_11 +#define __PYX_HAVE_RT_ImportFunction_3_0_11 +static int __Pyx_ImportFunction_3_0_11(PyObject *module, const char *funcname, void (**f)(void), const char *sig) { + PyObject *d = 0; + PyObject *cobj = 0; + union { + void (*fp)(void); + void *p; + } tmp; + d = PyObject_GetAttrString(module, (char *)"__pyx_capi__"); + if (!d) + goto bad; + cobj = PyDict_GetItemString(d, funcname); + if (!cobj) { + PyErr_Format(PyExc_ImportError, + "%.200s does not export expected C function %.200s", + PyModule_GetName(module), funcname); + goto bad; + } + if (!PyCapsule_IsValid(cobj, sig)) { + PyErr_Format(PyExc_TypeError, + "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)", + PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj)); + goto bad; + } + tmp.p = PyCapsule_GetPointer(cobj, sig); + *f = tmp.fp; + if (!(*f)) + goto bad; + Py_DECREF(d); + return 0; +bad: + Py_XDECREF(d); + return -1; +} +#endif + +/* InitStrings */ +#if PY_MAJOR_VERSION >= 3 +static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { + if (t.is_unicode | t.is_str) { + if (t.intern) { + *str = PyUnicode_InternFromString(t.s); + } else if (t.encoding) { + *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); + } else { + *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); + } + } else { + *str = PyBytes_FromStringAndSize(t.s, t.n - 1); + } + if (!*str) + return -1; + if (PyObject_Hash(*str) == -1) + return -1; + return 0; +} +#endif +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION >= 3 + __Pyx_InitString(*t, t->p); + #else + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + #endif + ++t; + } + return 0; +} + +#include +static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { + size_t len = strlen(s); + if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { + PyErr_SetString(PyExc_OverflowError, "byte string is too long"); + return -1; + } + return (Py_ssize_t) len; +} +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return __Pyx_PyUnicode_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { + Py_ssize_t len = __Pyx_ssize_strlen(c_str); + if (unlikely(len < 0)) return NULL; + return PyByteArray_FromStringAndSize(c_str, len); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { + __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " + "The ability to return an instance of a strict subclass of int is deprecated, " + "and may be removed in a future version of Python.", + result_type_name)) { + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; + } + __Pyx_DECREF_TypeName(result_type_name); + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", + type_name, type_name, result_type_name); + __Pyx_DECREF_TypeName(result_type_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(__Pyx_PyLong_IsCompact(b))) { + return __Pyx_PyLong_CompactValue(b); + } else { + const digit* digits = __Pyx_PyLong_Digits(b); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +/* #### Code section: utility_code_pragmas_end ### */ +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + + + +/* #### Code section: end ### */ +#endif /* Py_PYTHON_H */ diff --git a/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd new file mode 100644 index 000000000..194127543 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pxd @@ -0,0 +1,46 @@ +from cpython.mem cimport PyMem_Malloc, PyMem_Free + +cdef extern from *: + ctypedef void PyObject + ctypedef struct PyCodeObject: + int co_argcount; # arguments, except *args */ + int co_kwonlyargcount; # keyword only arguments */ + int co_nlocals; # local variables */ + int co_stacksize; # entries needed for evaluation stack */ + int co_flags; # CO_..., see below */ + int co_firstlineno; # first source line number */ + PyObject *co_code; # instruction opcodes */ + PyObject *co_consts; # list (constants used) */ + PyObject *co_names; # list of strings (names used) */ + PyObject *co_varnames; # tuple of strings (local variable names) */ + PyObject *co_freevars; # tuple of strings (free variable names) */ + PyObject *co_cellvars; # tuple of strings (cell variable names) */ + unsigned char *co_cell2arg; # Maps cell vars which are arguments. */ + PyObject *co_filename; # unicode (where it was loaded from) */ + PyObject *co_name; # unicode (name, for reference) */ + PyObject *co_lnotab; # string (encoding addr<->lineno mapping) See + # Objects/lnotab_notes.txt for details. */ + void *co_zombieframe; # for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; # to support weakrefs to code objects */ + void *co_extra; + +cdef extern from "frameobject.h": + ctypedef struct PyFrameObject: + PyFrameObject *f_back + PyCodeObject *f_code # code segment + PyObject *f_builtins # builtin symbol table (PyDictObject) + PyObject *f_globals # global symbol table (PyDictObject) */ + PyObject *f_locals # local symbol table (any mapping) */ + PyObject **f_valuestack # + PyObject **f_stacktop + PyObject *f_trace # Trace function */ + PyObject *f_exc_type + PyObject *f_exc_value + PyObject *f_exc_traceback + PyObject *f_gen; + + int f_lasti; #/* Last instruction if called */ + int f_lineno; #/* Current line number */ + int f_iblock; #/* index in f_blockstack */ + char f_executing; #/* whether the frame is still executing */ + PyObject *f_localsplus[1]; diff --git a/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx new file mode 100644 index 000000000..1bb4e51a6 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx @@ -0,0 +1,1934 @@ +from __future__ import print_function + +# Important: Autogenerated file. + +# DO NOT edit manually! +# DO NOT edit manually! +# Copyright: Brainwy Software +# +# License: EPL + +from collections import namedtuple +import dis +import os +import re +import sys + +from _pydev_bundle._pydev_saved_modules import threading +from types import CodeType, FrameType +from typing import Dict, Optional, Tuple, Any +from os.path import basename, splitext + +from _pydev_bundle import pydev_log +from _pydevd_bundle import pydevd_dont_trace +from _pydevd_bundle.pydevd_constants import ( + GlobalDebuggerHolder, + ForkSafeLock, + PYDEVD_IPYTHON_CONTEXT, + EXCEPTION_TYPE_USER_UNHANDLED, + RETURN_VALUES_DICT, + PYTHON_SUSPEND, +) +from _pydevd_bundle.pydevd_frame_utils import short_tb, flag_as_unwinding, short_frame +from pydevd_file_utils import ( + NORM_PATHS_AND_BASE_CONTAINER, + get_abs_path_real_path_and_base_from_file, + get_abs_path_real_path_and_base_from_frame, +) +from _pydevd_bundle.pydevd_trace_dispatch import should_stop_on_exception, handle_exception +from _pydevd_bundle.pydevd_constants import EXCEPTION_TYPE_HANDLED +from _pydevd_bundle.pydevd_trace_dispatch import is_unhandled_exception +from _pydevd_bundle.pydevd_breakpoints import stop_on_unhandled_exception +from _pydevd_bundle.pydevd_utils import get_clsname_for_code + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +import cython +from _pydevd_bundle.pydevd_cython cimport set_additional_thread_info, any_thread_stepping, PyDBAdditionalThreadInfo +# ELSE +# from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info, any_thread_stepping, PyDBAdditionalThreadInfo +# ENDIF +# fmt: on + +try: + from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset +except ImportError: + + def get_smart_step_into_variant_from_frame_offset(*args, **kwargs): + return None + + +if hasattr(sys, "monitoring"): + DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + monitor = sys.monitoring + +_thread_local_info = threading.local() +_get_ident = threading.get_ident +_thread_active = threading._active # noqa + +STATE_SUSPEND: int = 2 +CMD_STEP_INTO: int = 107 +CMD_STEP_OVER: int = 108 +CMD_STEP_OVER_MY_CODE: int = 159 +CMD_STEP_INTO_MY_CODE: int = 144 +CMD_STEP_INTO_COROUTINE: int = 206 +CMD_SMART_STEP_INTO: int = 128 +can_skip: bool = True +CMD_STEP_RETURN: int = 109 +CMD_STEP_OVER_MY_CODE: int = 159 +CMD_STEP_RETURN_MY_CODE: int = 160 +CMD_SET_BREAK: int = 111 +CMD_SET_FUNCTION_BREAK: int = 208 +STATE_RUN: int = 1 +STATE_SUSPEND: int = 2 + +IGNORE_EXCEPTION_TAG = re.compile("[^#]*#.*@IgnoreException") +DEBUG_START = ("pydevd.py", "run") +DEBUG_START_PY3K = ("_pydev_execfile.py", "execfile") +TRACE_PROPERTY = "pydevd_traceproperty.py" + +_global_notify_skipped_step_in = False +_global_notify_skipped_step_in_lock = ForkSafeLock() + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _notify_skipped_step_in_because_of_filters(py_db, frame): +# ELSE +# def _notify_skipped_step_in_because_of_filters(py_db, frame): +# ENDIF +# fmt: on + global _global_notify_skipped_step_in + + with _global_notify_skipped_step_in_lock: + if _global_notify_skipped_step_in: + # Check with lock in place (callers should actually have checked + # before without the lock in place due to performance). + return + _global_notify_skipped_step_in = True + py_db.notify_skipped_step_in_because_of_filters(frame) + + +# Easy for cython: always get the one at level 0 as that's the caller frame +# (on Python we have to control the depth to get the first user frame). +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +@cython.cfunc +def _getframe(depth=0): + return sys._getframe() +# ELSE +# _getframe = sys._getframe +# ENDIF +# fmt: on + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _get_bootstrap_frame(depth): +# ELSE +# def _get_bootstrap_frame(depth: int) -> Tuple[Optional[FrameType], bool]: +# ENDIF +# fmt: on + try: + return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + except: + frame = _getframe(depth) + f_bootstrap = frame + # print('called at', f_bootstrap.f_code.co_name, f_bootstrap.f_code.co_filename, f_bootstrap.f_code.co_firstlineno) + is_bootstrap_frame_internal = False + while f_bootstrap is not None: + filename = f_bootstrap.f_code.co_filename + name = splitext(basename(filename))[0] + + if name == "threading": + if f_bootstrap.f_code.co_name in ("__bootstrap", "_bootstrap"): + # We need __bootstrap_inner, not __bootstrap. + return None, False + + elif f_bootstrap.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + is_bootstrap_frame_internal = True + break + + elif name == "pydev_monkey": + if f_bootstrap.f_code.co_name == "__call__": + is_bootstrap_frame_internal = True + break + + elif name == "pydevd": + if f_bootstrap.f_code.co_name in ("run", "main"): + # We need to get to _exec + return None, False + + if f_bootstrap.f_code.co_name == "_exec": + is_bootstrap_frame_internal = True + break + + elif f_bootstrap.f_back is None: + break + + f_bootstrap = f_bootstrap.f_back + + if f_bootstrap is not None: + _thread_local_info.is_bootstrap_frame_internal = is_bootstrap_frame_internal + _thread_local_info.f_bootstrap = f_bootstrap + return _thread_local_info.f_bootstrap, _thread_local_info.is_bootstrap_frame_internal + + return f_bootstrap, is_bootstrap_frame_internal + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _is_user_frame(frame: FrameType): +# ELSE +# def _is_user_frame(frame: FrameType) -> bool: +# ENDIF +# fmt: on + if frame is None: + return False + + filename = frame.f_code.co_filename + name = splitext(basename(filename))[0] + + # When the frame is the bootstrap it is not a user frame. + if name == "threading": + if frame.f_code.co_name in ("__bootstrap", "_bootstrap", "__bootstrap_inner", "_bootstrap_inner", "run"): + return False + + elif name == "pydev_monkey": + if frame.f_code.co_name == "__call__": + return False + + elif name == "pydevd": + if frame.f_code.co_name in ("_exec", "run", "main"): + return False + + elif name == "pydevd_runpy": + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + elif filename == "": + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + elif name == 'runpy': + if frame.f_code.co_name.startswith(("run", "_run")): + return False + + return True + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _is_last_user_frame(frame: FrameType): +# ELSE +# def _is_last_user_frame(frame: FrameType) -> bool: +# ENDIF +# fmt: on + # If this frame is not a user frame, then it can't be the last one + if not _is_user_frame(frame): + return False + + # If this frame is the last frame, then it is the last one + if frame.f_back is None: + return True + + # If the next frame is not a user frame, then this frame is the last one + if not _is_user_frame(frame.f_back): + return True + + # Otherwise if the next frame is a user frame, then this frame is not the last one + return False + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef class ThreadInfo: + cdef unsigned long thread_ident + cdef PyDBAdditionalThreadInfo additional_info + thread: threading.Thread + trace: bool +# ELSE +# class ThreadInfo: +# additional_info: PyDBAdditionalThreadInfo +# thread_ident: int +# thread: threading.Thread +# trace: bool +# ENDIF +# fmt: on + + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + def __init__(self, thread, unsigned long thread_ident, bint trace, PyDBAdditionalThreadInfo additional_info): + # ELSE +# def __init__(self, thread: threading.Thread, thread_ident: int, trace: bool, additional_info: PyDBAdditionalThreadInfo): + # ENDIF + # fmt: on + self.thread = thread + self.thread_ident = thread_ident + self.additional_info = additional_info + self.trace = trace + + +class _DeleteDummyThreadOnDel: + """ + Helper class to remove a dummy thread from threading._active on __del__. + """ + + def __init__(self, dummy_thread): + self._dummy_thread = dummy_thread + self._tident = dummy_thread.ident + # Put the thread on a thread local variable so that when + # the related thread finishes this instance is collected. + # + # Note: no other references to this instance may be created. + # If any client code creates a reference to this instance, + # the related _DummyThread will be kept forever! + _thread_local_info._track_dummy_thread_ref = self + + def __del__(self): + with threading._active_limbo_lock: + if _thread_active.get(self._tident) is self._dummy_thread: + _thread_active.pop(self._tident, None) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _create_thread_info(depth): + cdef unsigned long thread_ident +# ELSE +# def _create_thread_info(depth): +# ENDIF +# fmt: on + # Don't call threading.currentThread because if we're too early in the process + # we may create a dummy thread. + thread_ident = _get_ident() + + f_bootstrap_frame, is_bootstrap_frame_internal = _get_bootstrap_frame(depth + 1) + if f_bootstrap_frame is None: + return None # Case for threading when it's still in bootstrap or early in pydevd. + + if is_bootstrap_frame_internal: + t = None + if f_bootstrap_frame.f_code.co_name in ("__bootstrap_inner", "_bootstrap_inner", "is_alive"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + t = f_bootstrap_frame.f_locals.get("self") + if not isinstance(t, threading.Thread): + t = None + + elif f_bootstrap_frame.f_code.co_name in ("_exec", "__call__"): + # Note: be careful not to use threading.current_thread to avoid creating a dummy thread. + t = f_bootstrap_frame.f_locals.get("t") + if not isinstance(t, threading.Thread): + t = None + + else: + # This means that the first frame is not in threading nor in pydevd. + # In practice this means it's some unmanaged thread, so, creating + # a dummy thread is ok in this use-case. + t = threading.current_thread() + + if t is None: + t = _thread_active.get(thread_ident) + + if isinstance(t, threading._DummyThread): + _thread_local_info._ref = _DeleteDummyThreadOnDel(t) + + if t is None: + return None + + if getattr(t, "is_pydev_daemon_thread", False): + return ThreadInfo(t, thread_ident, False, None) + else: + try: + additional_info = t.additional_info + if additional_info is None: + raise AttributeError() + except: + additional_info = set_additional_thread_info(t) + return ThreadInfo(t, thread_ident, True, additional_info) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef class FuncCodeInfo: + cdef str co_filename + cdef str canonical_normalized_filename + cdef str abs_path_filename + cdef bint always_skip_code + cdef bint breakpoint_found + cdef bint function_breakpoint_found + cdef bint plugin_line_breakpoint_found + cdef bint plugin_call_breakpoint_found + cdef bint plugin_line_stepping + cdef bint plugin_call_stepping + cdef bint plugin_return_stepping + cdef int pydb_mtime + cdef dict bp_line_to_breakpoint + cdef object function_breakpoint + cdef bint always_filtered_out + cdef bint filtered_out_force_checked + cdef object try_except_container_obj + cdef object code_obj + cdef str co_name +# ELSE +# class FuncCodeInfo: +# ENDIF +# fmt: on + def __init__(self): + self.co_filename: str = "" + self.canonical_normalized_filename: str = "" + self.abs_path_filename: str = "" + + # These is never seen and we never stop, even if it's a callback coming + # from user code (these are completely invisible to the debugging tracing). + self.always_skip_code: bool = False + + self.breakpoint_found: bool = False + self.function_breakpoint_found: bool = False + + # A plugin can choose whether to stop on function calls or line events. + self.plugin_line_breakpoint_found: bool = False + self.plugin_call_breakpoint_found: bool = False + + self.plugin_line_stepping: bool = False + self.plugin_call_stepping: bool = False + self.plugin_return_stepping: bool = False + + # When pydb_mtime != PyDb.mtime the validity of breakpoints have + # to be re-evaluated (if invalid a new FuncCodeInfo must be created and + # tracing can't be disabled for the related frames). + self.pydb_mtime: int = -1 + + self.bp_line_to_breakpoint: Dict[int, Any] = {} + self.function_breakpoint = None + + # This means some file is globally filtered out during debugging. Note + # that we may still need to pause in it (in a step return to user code, + # we may need to track this one). + self.always_filtered_out: bool = False + + # This should be used to filter code in a CMD_STEP_INTO_MY_CODE + # (and other XXX_MY_CODE variants). + self.filtered_out_force_checked: bool = False + + self.try_except_container_obj: Optional[_TryExceptContainerObj] = None + self.code_obj: CodeType = None + self.co_name: str = "" + + def get_line_of_offset(self, offset): + for start, end, line in self.code_obj.co_lines(): + if offset >= start and offset <= end: + return line + return -1 + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _get_thread_info(bint create, int depth): +# ELSE +# def _get_thread_info(create: bool, depth: int) -> Optional[ThreadInfo]: +# ENDIF +# fmt: on + """ + Provides thread-related info. + + May return None if the thread is still not active. + """ + try: + # Note: changing to a `dict[thread.ident] = thread_info` had almost no + # effect in the performance. + return _thread_local_info.thread_info + except: + if not create: + return None + thread_info = _create_thread_info(depth + 1) + if thread_info is None: + return None + + _thread_local_info.thread_info = thread_info + return _thread_local_info.thread_info + + +_CodeLineInfo = namedtuple("_CodeLineInfo", "line_to_offset, first_line, last_line") + + +# Note: this method has a version in cython too +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _get_code_line_info(code_obj, _cache={}): +# ELSE +# def _get_code_line_info(code_obj, _cache={}): +# ENDIF +# fmt: on + try: + return _cache[code_obj] + except: + line_to_offset = {} + first_line = None + last_line = None + + for offset, line in dis.findlinestarts(code_obj): + line_to_offset[line] = offset + + if line_to_offset: + first_line = min(line_to_offset) + last_line = max(line_to_offset) + ret = _CodeLineInfo(line_to_offset, first_line, last_line) + _cache[code_obj] = ret + return ret + + +_code_to_func_code_info_cache: Dict[CodeType, "FuncCodeInfo"] = {} + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef FuncCodeInfo _get_func_code_info(code_obj, frame_or_depth): + cdef FuncCodeInfo func_code_info +# ELSE +# def _get_func_code_info(code_obj, frame_or_depth) -> FuncCodeInfo: +# ENDIF +# fmt: on + """ + Provides code-object related info. + + Note that it contains informations on the breakpoints for a given function. + If breakpoints change a new FuncCodeInfo instance will be created. + + Note that this can be called by any thread. + """ + py_db = GlobalDebuggerHolder.global_dbg + if py_db is None: + return None + + func_code_info = _code_to_func_code_info_cache.get(code_obj) + if func_code_info is not None: + if func_code_info.pydb_mtime == py_db.mtime: + # if DEBUG: + # print('_get_func_code_info: matched mtime', key, code_obj) + return func_code_info + + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + cdef dict cache_file_type + cdef tuple cache_file_type_key + cdef PyCodeObject * code + cdef str co_filename + cdef str co_name + code = code_obj + co_filename = code.co_filename + co_name = code.co_name + # ELSE +# cache_file_type: dict +# cache_file_type_key: tuple +# code = code_obj +# co_filename: str = code.co_filename +# co_name: str = code.co_name + # ENDIF + # fmt: on + + # print('_get_func_code_info: new (mtime did not match)', key, code_obj) + + func_code_info = FuncCodeInfo() + func_code_info.code_obj = code_obj + code_line_info = _get_code_line_info(code_obj) + line_to_offset = code_line_info.line_to_offset + func_code_info.pydb_mtime = py_db.mtime + + func_code_info.co_filename = co_filename + func_code_info.co_name = co_name + + # Compute whether to always skip this. + try: + abs_path_real_path_and_base = NORM_PATHS_AND_BASE_CONTAINER[co_filename] + except: + abs_path_real_path_and_base = get_abs_path_real_path_and_base_from_file(co_filename) + + func_code_info.abs_path_filename = abs_path_real_path_and_base[0] + func_code_info.canonical_normalized_filename = abs_path_real_path_and_base[1] + + frame = None + cache_file_type = py_db.get_cache_file_type() + # Note: this cache key must be the same from PyDB.get_file_type() -- see it for comments + # on the cache. + cache_file_type_key = (code.co_firstlineno, abs_path_real_path_and_base[0], code_obj) + try: + file_type = cache_file_type[cache_file_type_key] # Make it faster + except: + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj, "%s != %s" % (frame.f_code, code_obj) + + file_type = py_db.get_file_type(frame, abs_path_real_path_and_base) # we don't want to debug anything related to pydevd + + if file_type is not None: + func_code_info.always_skip_code = True + func_code_info.always_filtered_out = True + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + # still not set, check for dont trace comments. + if pydevd_dont_trace.should_trace_hook is not None: + # I.e.: cache the result skip (no need to evaluate the same frame multiple times). + # Note that on a code reload, we won't re-evaluate this because in practice, the frame.f_code + # Which will be handled by this frame is read-only, so, we can cache it safely. + if not pydevd_dont_trace.should_trace_hook(code_obj, func_code_info.abs_path_filename): + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj + + func_code_info.always_filtered_out = True + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + if frame is None: + if frame_or_depth.__class__ == int: + frame = _getframe(frame_or_depth + 1) + else: + frame = frame_or_depth + assert frame.f_code is code_obj + + func_code_info.filtered_out_force_checked = py_db.apply_files_filter(frame, func_code_info.abs_path_filename, True) + + if py_db.is_files_filter_enabled: + func_code_info.always_filtered_out = func_code_info.filtered_out_force_checked + if func_code_info.always_filtered_out: + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + else: + func_code_info.always_filtered_out = False + + # Handle regular breakpoints + breakpoints: dict = py_db.breakpoints.get(func_code_info.canonical_normalized_filename) + function_breakpoint: object = py_db.function_breakpoint_name_to_breakpoint.get(func_code_info.co_name) + # print('\n---') + # print(py_db.breakpoints) + # print(func_code_info.canonical_normalized_filename) + # print(py_db.breakpoints.get(func_code_info.canonical_normalized_filename)) + if function_breakpoint: + # Go directly into tracing mode + func_code_info.function_breakpoint_found = True + func_code_info.function_breakpoint = function_breakpoint + + if breakpoints: + # if DEBUG: + # print('found breakpoints', code_obj_py.co_name, breakpoints) + + bp_line_to_breakpoint = {} + + for breakpoint_line, bp in breakpoints.items(): + if breakpoint_line in line_to_offset: + bp_line_to_breakpoint[breakpoint_line] = bp + + func_code_info.breakpoint_found = bool(bp_line_to_breakpoint) + func_code_info.bp_line_to_breakpoint = bp_line_to_breakpoint + + if py_db.plugin: + plugin_manager = py_db.plugin + is_tracked_frame = plugin_manager.is_tracked_frame(frame) + + if is_tracked_frame: + if py_db.has_plugin_line_breaks: + required_events_breakpoint = plugin_manager.required_events_breakpoint() + func_code_info.plugin_line_breakpoint_found = "line" in required_events_breakpoint + func_code_info.plugin_call_breakpoint_found = "call" in required_events_breakpoint + + required_events_stepping = plugin_manager.required_events_stepping() + func_code_info.plugin_line_stepping: bool = "line" in required_events_stepping + func_code_info.plugin_call_stepping: bool = "call" in required_events_stepping + func_code_info.plugin_return_stepping: bool = "return" in required_events_stepping + + _code_to_func_code_info_cache[code_obj] = func_code_info + return func_code_info + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _enable_line_tracing(code): +# ELSE +# def _enable_line_tracing(code): +# ENDIF +# fmt: on + # print('enable line tracing', code) + _ensure_monitoring() + events = monitor.get_local_events(DEBUGGER_ID, code) + monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.LINE | monitor.events.JUMP) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _enable_return_tracing(code): +# ELSE +# def _enable_return_tracing(code): +# ENDIF +# fmt: on + # print('enable return tracing', code) + _ensure_monitoring() + events = monitor.get_local_events(DEBUGGER_ID, code) + monitor.set_local_events(DEBUGGER_ID, code, events | monitor.events.PY_RETURN) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef disable_code_tracing(code): +# ELSE +# def disable_code_tracing(code): +# ENDIF +# fmt: on + _ensure_monitoring() + monitor.set_local_events(DEBUGGER_ID, code, 0) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef enable_code_tracing(unsigned long thread_ident, code, frame): +# ELSE +# def enable_code_tracing(thread_ident: Optional[int], code, frame) -> bool: +# ENDIF +# fmt: on + """ + Note: this must enable code tracing for the given code/frame. + + The frame can be from any thread! + + :return: Whether code tracing was added in this function to the given code. + """ + # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + # if DEBUG: + # print('==== enable code tracing', code.co_filename[-30:], code.co_name) + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return False + + func_code_info: FuncCodeInfo = _get_func_code_info(code, frame) + if func_code_info.always_skip_code: + # if DEBUG: + # print('disable (always skip)') + return False + + try: + thread = threading._active.get(thread_ident) + if thread is None: + return False + additional_info = set_additional_thread_info(thread) + except: + # Cannot set based on stepping + return False + + return _enable_code_tracing(py_db, additional_info, func_code_info, code, frame, False) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef bint _enable_code_tracing(py_db, PyDBAdditionalThreadInfo additional_info, FuncCodeInfo func_code_info, code, frame, bint warn_on_filtered_out): + cdef int step_cmd + cdef bint is_stepping + cdef bint code_tracing_added +# ELSE +# def _enable_code_tracing(py_db, additional_info, func_code_info: FuncCodeInfo, code, frame, warn_on_filtered_out) -> bool: +# ENDIF +# fmt: on + """ + :return: Whether code tracing was added in this function to the given code. + """ + # DEBUG = False # 'my_code.py' in code.co_filename or 'other.py' in code.co_filename + step_cmd = additional_info.pydev_step_cmd + is_stepping = step_cmd != -1 + code_tracing_added = False + + if func_code_info.always_filtered_out: + # if DEBUG: + # print('disable (always filtered out)') + if ( + warn_on_filtered_out + and is_stepping + and additional_info.pydev_original_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE) + and not _global_notify_skipped_step_in + ): + _notify_skipped_step_in_because_of_filters(py_db, frame) + + if is_stepping: + # Tracing may be needed for return value + _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + code_tracing_added = True + return code_tracing_added + + if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found: + _enable_line_tracing(code) + code_tracing_added = True + + if is_stepping: + _enable_step_tracing(py_db, code, step_cmd, additional_info, frame) + code_tracing_added = True + + return code_tracing_added + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _enable_step_tracing(py_db, code, step_cmd, PyDBAdditionalThreadInfo info, frame): +# ELSE +# def _enable_step_tracing(py_db, code, step_cmd, info, frame): +# ENDIF +# fmt: on + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO): + # Stepping (must have line/return tracing enabled). + _enable_line_tracing(code) + _enable_return_tracing(code) + + elif step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, info.pydev_step_stop, frame): + _enable_return_tracing(code) + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + if _is_same_frame(info, info.pydev_step_stop, frame): + _enable_line_tracing(code) + + # Wee need to enable return tracing because if we have a return during a step over + # we need to stop too. + _enable_return_tracing(code) + elif py_db.show_return_values and _is_same_frame(info, info.pydev_step_stop, frame.f_back): + # Show return values on step over. + _enable_return_tracing(code) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef class _TryExceptContainerObj: + cdef list try_except_infos +# ELSE +# class _TryExceptContainerObj: +# ENDIF +# fmt: on + """ + A dumb container object just to contain the try..except info when needed. Meant to be + persistent among multiple PyDBFrames to the same code object. + """ + + # fmt: off + # IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) + def __init__(self, list try_except_infos): + self.try_except_infos = try_except_infos + # ELSE +# def __init__(self, try_except_infos): +# self.try_except_infos = try_except_infos +# + # ENDIF + # fmt: on + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _unwind_event(code, instruction, exc): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info +# ELSE +# def _unwind_event(code, instruction, exc): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + frame = _getframe(1) + arg = (type(exc), exc, exc.__traceback__) + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return + + # print('_unwind_event', code, exc) + + has_caught_exception_breakpoint_in_pydb = ( + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) + + + if has_caught_exception_breakpoint_in_pydb: + _should_stop, frame, user_uncaught_exc_info = should_stop_on_exception( + py_db, thread_info.additional_info, frame, thread_info.thread, arg, None + ) + if user_uncaught_exc_info: + # TODO: Check: this may no longer be needed as in the unwind we know it's + # an exception bubbling up (wait for all tests to pass to check it). + if func_code_info.try_except_container_obj is None: + container_obj = _TryExceptContainerObj(py_db.collect_try_except_info(frame.f_code)) + func_code_info.try_except_container_obj = container_obj + + is_unhandled = is_unhandled_exception( + func_code_info.try_except_container_obj, py_db, frame, user_uncaught_exc_info[1], user_uncaught_exc_info[2] + ) + + if is_unhandled: + # print('stop in user uncaught') + handle_exception(py_db, thread_info.thread, frame, user_uncaught_exc_info[0], EXCEPTION_TYPE_USER_UNHANDLED) + return + + break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + if break_on_uncaught_exceptions and _is_last_user_frame(frame): + stop_on_unhandled_exception(py_db, thread_info.thread, thread_info.additional_info, arg) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _raise_event(code, instruction, exc): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info +# ELSE +# def _raise_event(code, instruction, exc): +# ENDIF +# fmt: on + """ + The way this should work is the following: when the user is using + pydevd to do the launch and we're on a managed stack, we should consider + unhandled only if it gets into a pydevd. If it's a thread, if it stops + inside the threading and if it's an unmanaged thread (i.e.: QThread) + then stop if it doesn't have a back frame. + + Note: unlike other events, this one is global and not per-code (so, + it cannot be individually enabled/disabled for a given code object). + """ + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + frame = _getframe(1) + arg = (type(exc), exc, exc.__traceback__) + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return + + # print('_raise_event --- ', code, exc) + + # Compute the previous exception info (if any). We use it to check if the exception + # should be stopped + prev_exc_info = _thread_local_info._user_uncaught_exc_info if hasattr(_thread_local_info, "_user_uncaught_exc_info") else None + should_stop, frame, _user_uncaught_exc_info = should_stop_on_exception( + py_db, thread_info.additional_info, frame, thread_info.thread, arg, prev_exc_info + ) + + # Save the current exception info for the next raise event. + _thread_local_info._user_uncaught_exc_info = _user_uncaught_exc_info + + # print('!!!! should_stop (in raise)', should_stop) + if should_stop: + handle_exception(py_db, thread_info.thread, frame, arg, EXCEPTION_TYPE_HANDLED) + + # Once we leave the raise event, we are no longer in the state of 'just_raised', so + # indicate that this traceback is for an exception in the unwinding state + flag_as_unwinding(exc.__traceback__) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef str get_func_name(frame): + cdef str func_name +# ELSE +# def get_func_name(frame): +# ENDIF +# fmt: on + code_obj = frame.f_code + func_name = code_obj.co_name + try: + cls_name = get_clsname_for_code(code_obj, frame) + if cls_name is not None: + return "%s.%s" % (cls_name, func_name) + else: + return func_name + except: + pydev_log.exception() + return func_name + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _show_return_values(frame, arg): +# ELSE +# def _show_return_values(frame, arg): +# ENDIF +# fmt: on + try: + try: + f_locals_back = getattr(frame.f_back, "f_locals", None) + if f_locals_back is not None: + return_values_dict = f_locals_back.get(RETURN_VALUES_DICT, None) + if return_values_dict is None: + return_values_dict = {} + f_locals_back[RETURN_VALUES_DICT] = return_values_dict + name = get_func_name(frame) + return_values_dict[name] = arg + except: + pydev_log.exception() + finally: + f_locals_back = None + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _remove_return_values(py_db, frame): +# ELSE +# def _remove_return_values(py_db, frame): +# ENDIF +# fmt: on + try: + try: + # Showing return values was turned off, we should remove them from locals dict. + # The values can be in the current frame or in the back one + frame.f_locals.pop(RETURN_VALUES_DICT, None) + + f_locals_back = getattr(frame.f_back, "f_locals", None) + if f_locals_back is not None: + f_locals_back.pop(RETURN_VALUES_DICT, None) + except: + pydev_log.exception() + finally: + f_locals_back = None + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _return_event(code, instruction, retval): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info + cdef PyDBAdditionalThreadInfo info + cdef int step_cmd +# ELSE +# def _return_event(code, instruction, retval): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code: + return monitor.DISABLE + + info = thread_info.additional_info + + # We know the frame depth. + frame = _getframe(1) + + step_cmd = info.pydev_step_cmd + if step_cmd == -1: + return + + if info.suspend_type != PYTHON_SUSPEND: + # Plugin stepping + if func_code_info.plugin_return_stepping: + _plugin_stepping(py_db, step_cmd, "return", frame, thread_info) + return + + # Python line stepping + stop_frame = info.pydev_step_stop + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + if frame.f_back is not None and not info.pydev_use_scoped_step_frame: + back_func_code_info = _get_func_code_info(frame.f_back.f_code, frame.f_back) + if ( + # Not filtered out. + not back_func_code_info.always_skip_code + and not back_func_code_info.always_filtered_out + and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + # Prevent stopping in a return to the same location we were initially + # (i.e.: double-stop at the same place due to some filtering). + and info.step_in_initial_location != (frame.f_back, frame.f_back.f_lineno) + ): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + if step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and _is_same_frame(info, stop_frame, frame): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + elif ( + step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE) + and not info.pydev_use_scoped_step_frame + and _is_same_frame(info, stop_frame, frame) + ): + # This isn't in the sys.settrace version: on a step over, if we return and the return is valid, show + # as a step return instead of going back to step into mode (but if the back frame is not valid, then + # go to step into mode). + f_back = frame.f_back + if f_back is not None: + back_func_code_info = _get_func_code_info(f_back.f_code, 2) + force_check_project_scope = step_cmd == CMD_STEP_OVER_MY_CODE + + if ( + back_func_code_info is not None + and not back_func_code_info.always_skip_code + and not back_func_code_info.always_filtered_out + and not (force_check_project_scope and back_func_code_info.filtered_out_force_checked) + ): + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + elif step_cmd == CMD_SMART_STEP_INTO: + if _is_same_frame(info, stop_frame, frame): + # We're exiting the smart step into initial frame (so, we probably didn't find our target). + if py_db.show_return_values: + _show_return_values(frame, retval) + + _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval) + return + + if py_db.show_return_values: + if ( + ( + info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO) + and (_is_same_frame(info, stop_frame, frame.f_back)) + ) + or (info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE) and (info, _is_same_frame(info, stop_frame, frame))) + or (info.pydev_step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_COROUTINE)) + or ( + info.pydev_step_cmd == CMD_STEP_INTO_MY_CODE + and frame.f_back is not None + and not py_db.apply_files_filter(frame.f_back, frame.f_back.f_code.co_filename, True) + ) + ): + _show_return_values(frame, retval) + + if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_STEP_OVER_MY_CODE, CMD_STEP_RETURN_MY_CODE, CMD_SMART_STEP_INTO): + # If we are in single step mode and something causes us to exit the current frame, we need to make sure we break + # eventually. Force the step mode to step into and the step stop frame to None. + # I.e.: F6 in the end of a function should stop in the next possible position (instead of forcing the user + # to make a step in or step over at that location). + # Note: this is especially troublesome when we're skipping code with the + # @DontTrace comment. + stop_frame = info.pydev_step_stop + if stop_frame is frame and not info.pydev_use_scoped_step_frame: + if step_cmd in (CMD_STEP_OVER, CMD_STEP_RETURN, CMD_SMART_STEP_INTO): + info.pydev_step_cmd = CMD_STEP_INTO + else: + info.pydev_step_cmd = CMD_STEP_INTO_MY_CODE + info.pydev_step_stop = None + _enable_code_tracing_for_frame_and_parents(thread_info, stop_frame.f_back) + if py_db.show_return_values: + _show_return_values(frame, retval) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _enable_code_tracing_for_frame_and_parents(ThreadInfo thread_info, frame): + cdef FuncCodeInfo func_code_info +# ELSE +# def _enable_code_tracing_for_frame_and_parents(thread_info, frame): +# ENDIF +# fmt: on + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return + + while frame is not None: + func_code_info: FuncCodeInfo = _get_func_code_info(frame.f_code, frame) + if func_code_info.always_skip_code: + frame = frame.f_back + continue + + _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, frame.f_code, frame, False) + frame = frame.f_back + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _stop_on_return(py_db, ThreadInfo thread_info, PyDBAdditionalThreadInfo info, int step_cmd, frame, retval): +# ELSE +# def _stop_on_return(py_db, thread_info, info, step_cmd, frame, retval): +# ENDIF +# fmt: on + back = frame.f_back + if back is not None: + # When we get to the pydevd run function, the debugging has actually finished for the main thread + # (note that it can still go on for other threads, but for this one, we just make it finish) + # So, just setting it to None should be OK + back_absolute_filename, _, base = get_abs_path_real_path_and_base_from_frame(back) + if (base, back.f_code.co_name) in (DEBUG_START, DEBUG_START_PY3K): + back = None + + elif base == TRACE_PROPERTY: + # We dont want to trace the return event of pydevd_traceproperty (custom property for debugging) + # if we're in a return, we want it to appear to the user in the previous frame! + return + + elif pydevd_dont_trace.should_trace_hook is not None: + if not pydevd_dont_trace.should_trace_hook(back.f_code, back_absolute_filename): + # In this case, we'll have to skip the previous one because it shouldn't be traced. + # Also, we have to reset the tracing, because if the parent's parent (or some + # other parent) has to be traced and it's not currently, we wouldn't stop where + # we should anymore (so, a step in/over/return may not stop anywhere if no parent is traced). + # Related test: _debugger_case17a.py + py_db.set_trace_for_frame_and_parents(thread_info.thread_ident, back) + return + + if back is not None: + # if we're in a return, we want it to appear to the user in the previous frame! + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, back, "return", retval) + else: + # in jython we may not have a back frame + info.pydev_step_stop = None + info.pydev_original_step_cmd = -1 + info.pydev_step_cmd = -1 + info.pydev_state = STATE_RUN + info.update_stepping_info() + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _stop_on_breakpoint(py_db, ThreadInfo thread_info, int stop_reason, bp, frame, new_frame, bint stop, bint stop_on_plugin_breakpoint, str bp_type): + cdef PyDBAdditionalThreadInfo additional_info +# ELSE +# def _stop_on_breakpoint( +# py_db, thread_info: ThreadInfo, stop_reason: int, bp, frame, new_frame, stop: bool, stop_on_plugin_breakpoint: bool, bp_type: str +# ): +# ENDIF +# fmt: on + """ + :param bp: the breakpoint hit (additional conditions will be checked now). + :param frame: the actual frame + :param new_frame: either the actual frame or the frame provided by the plugins. + :param stop: whether we should do a regular line breakpoint. + :param stop_on_plugin_breakpoint: whether we should stop in a plugin breakpoint. + + :return: + True if the breakpoint was suspended inside this function and False otherwise. + Note that even if False is returned, it's still possible + """ + additional_info = thread_info.additional_info + # ok, hit breakpoint, now, we have to discover if it is a conditional breakpoint + # lets do the conditional stuff here + if bp.expression is not None: + # If it has an expression, it's always handled even if we don't stop. + py_db.handle_breakpoint_expression(bp, additional_info, new_frame) + + if stop or stop_on_plugin_breakpoint: + if bp.has_condition: + eval_result = py_db.handle_breakpoint_condition(additional_info, bp, new_frame) + if not eval_result: + stop = False + stop_on_plugin_breakpoint = False + + # Handle logpoint (on a logpoint we should never stop). + if (stop or stop_on_plugin_breakpoint) and bp.is_logpoint: + stop = False + stop_on_plugin_breakpoint = False + + if additional_info.pydev_message is not None and len(additional_info.pydev_message) > 0: + cmd = py_db.cmd_factory.make_io_message(additional_info.pydev_message + os.linesep, "1") + py_db.writer.add_command(cmd) + + if stop: + py_db.set_suspend( + thread_info.thread, + stop_reason, + suspend_other_threads=bp and bp.suspend_policy == "ALL", + ) + # print('suspend on breakpoint...') + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return True + + elif stop_on_plugin_breakpoint: + stop_at_frame = py_db.plugin.suspend(py_db, thread_info.thread, frame, bp_type) + if stop_at_frame and thread_info.additional_info.pydev_state == STATE_SUSPEND: + _do_wait_suspend(py_db, thread_info, stop_at_frame, "line", None) + return + + return False + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _plugin_stepping(py_db, int step_cmd, event, frame, ThreadInfo thread_info): + cdef bint stop + cdef dict stop_info +# ELSE +# def _plugin_stepping(py_db, step_cmd, event, frame, thread_info): +# ENDIF +# fmt: on + plugin_manager = py_db.plugin + # Step return makes no sense for plugins (I guess?!?), so, just handle as step into. + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE, CMD_SMART_STEP_INTO) or step_cmd in ( + CMD_STEP_RETURN, + CMD_STEP_RETURN_MY_CODE, + ): + stop_info = {} + stop = False + result = plugin_manager.cmd_step_into(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + if result: + stop, plugin_stop = result + if plugin_stop: + plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + return + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + if plugin_manager is not None: + stop_info = {} + stop = False + result = plugin_manager.cmd_step_over(py_db, frame, event, thread_info.additional_info, thread_info.thread, stop_info, stop) + if result: + stop, plugin_stop = result + if plugin_stop: + plugin_manager.stop(py_db, frame, event, thread_info.thread, stop_info, None, step_cmd) + return + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _jump_event(code, int from_offset, int to_offset): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info + cdef int from_line + cdef int to_line +# ELSE +# def _jump_event(code, from_offset, to_offset): +# ENDIF +# fmt: on + # A bunch of things have to be repeated especially because in the sys.monitoring + # everything is global, yet, when we start tracing something for stepping that + # needs to be per-thread. + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code or func_code_info.always_filtered_out: + return monitor.DISABLE + + # Same logic as "sys_trace_jump_func" in https://github.com/python/cpython/blob/main/Python/legacy_tracing.c + + # Ignore forward jump. + # print('jump event', code.co_name, 'from offset', from_offset, 'to offset', to_offset) + if to_offset > from_offset: + return monitor.DISABLE + + from_line = func_code_info.get_line_of_offset(from_offset) + to_line = func_code_info.get_line_of_offset(to_offset) + # print('jump event', code.co_name, 'from line', from_line, 'to line', to_line) + + if from_line != to_line: + # I.e.: use case: "yield from [j for j in a if j % 2 == 0]" + return monitor.DISABLE + + # We know the frame depth. + frame = _getframe(1) + + # Disable the next line event as we're jumping to a line. The line event will be redundant. + _thread_local_info.f_disable_next_line_if_match = frame.f_lineno + + return _internal_line_event(func_code_info, frame, frame.f_lineno) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _line_event(code, int line): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info +# ELSE +# def _line_event(code, line): +# ENDIF +# fmt: on + + # A bunch of things have to be repeated especially because in the sys.monitoring + # everything is global, yet, when we start tracing something for stepping that + # needs to be per-thread. + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + if hasattr(_thread_local_info, "f_disable_next_line_if_match"): + if _thread_local_info.f_disable_next_line_if_match is line: + # If we're in a jump, we should skip this line event. The jump would have + # been considered a line event for this same line and we don't want to + # stop twice. + del _thread_local_info.f_disable_next_line_if_match + return + + func_code_info: FuncCodeInfo = _get_func_code_info(code, 1) + if func_code_info.always_skip_code or func_code_info.always_filtered_out: + return monitor.DISABLE + + # print('line event', code.co_name, line) + + # We know the frame depth. + frame = _getframe(1) + return _internal_line_event(func_code_info, frame, line) + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _internal_line_event(FuncCodeInfo func_code_info, frame, int line): + cdef ThreadInfo thread_info + cdef PyDBAdditionalThreadInfo info + cdef int step_cmd + cdef bint stop + cdef bint stop_on_plugin_breakpoint + cdef int stop_reason + cdef bint force_check_project_scope +# ELSE +# def _internal_line_event(func_code_info, frame, line): +# ENDIF +# fmt: on + py_db: object = GlobalDebuggerHolder.global_dbg + thread_info = _thread_local_info.thread_info + info = thread_info.additional_info + + step_cmd = info.pydev_step_cmd + + # print('line event', info, id(info), thread_info.thread.name) + # print('line event', info.pydev_state, line, threading.current_thread(), code) + # If we reached here, it was not filtered out. + + if func_code_info.breakpoint_found: + bp = None + stop = False + stop_on_plugin_breakpoint = False + + stop_info = {} + stop_reason = CMD_SET_BREAK + bp_type = None + + bp = func_code_info.bp_line_to_breakpoint.get(line) + if bp is not None: + new_frame = frame + stop = True + + if bp: + if _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-line"): + return + + if func_code_info.plugin_line_breakpoint_found: + result = py_db.plugin.get_breakpoint(py_db, frame, "line", info) + if result: + stop_reason = CMD_SET_BREAK + stop = False + stop_on_plugin_breakpoint = True + bp, new_frame, bp_type = result + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + return + + if info.pydev_state == STATE_SUSPEND: + # Note: it's possible that it was suspended with a pause (and we'd stop here too). + # print('suspend (pause)...') + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + # Ok, did not suspend due to a breakpoint, let's see if we're stepping. + stop_frame = info.pydev_step_stop + if step_cmd == -1: + if func_code_info.breakpoint_found or func_code_info.plugin_line_breakpoint_found or any_thread_stepping(): + return None + + return monitor.DISABLE + + if info.suspend_type != PYTHON_SUSPEND: + # Plugin stepping + if func_code_info.plugin_line_stepping: + _plugin_stepping(py_db, step_cmd, "line", frame, thread_info) + return + + # Python stepping now + if step_cmd in (CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE, CMD_STEP_INTO_COROUTINE): + force_check_project_scope = step_cmd == CMD_STEP_INTO_MY_CODE + if not info.pydev_use_scoped_step_frame: + if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + return + + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + else: + # Make sure we check the filtering inside ipython calls too... + if func_code_info.always_filtered_out or (force_check_project_scope and func_code_info.filtered_out_force_checked): + return + + stop = False + # We can only stop inside the ipython call. + filename = frame.f_code.co_filename + if filename.endswith(".pyc"): + filename = filename[:-1] + + if not filename.endswith(PYDEVD_IPYTHON_CONTEXT[0]): + f = frame.f_back + while f is not None: + if f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + f2 = f.f_back + if f2 is not None and f2.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + pydev_log.debug("Stop inside ipython call") + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + thread_info.additional_info.trace_suspend_type = "sys_monitor" + _do_wait_suspend(py_db, thread_info, frame, "line", None) + break + f = f.f_back + + del f + + # In scoped mode if step in didn't work in this context it won't work + # afterwards anyways. + return + + elif step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE): + # Note: when dealing with a step over my code it's the same as a step over (the + # difference is that when we return from a frame in one we go to regular step + # into and in the other we go to a step into my code). + if _is_same_frame(info, stop_frame, frame): + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + elif step_cmd == CMD_SMART_STEP_INTO: + stop = False + back = frame.f_back + if _is_same_frame(info, stop_frame, back): + if info.pydev_smart_child_offset != -1: + # i.e.: in this case, we're not interested in the pause in the parent, rather + # we're interested in the pause in the child (when the parent is at the proper place). + stop = False + + else: + pydev_smart_parent_offset = info.pydev_smart_parent_offset + + pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + # Preferred mode (when the smart step into variants are available + # and the offset is set). + stop = get_smart_step_into_variant_from_frame_offset( + back.f_lasti, pydev_smart_step_into_variants + ) is get_smart_step_into_variant_from_frame_offset(pydev_smart_parent_offset, pydev_smart_step_into_variants) + + else: + # Only the name/line is available, so, check that. + curr_func_name = frame.f_code.co_name + + # global context is set with an empty name + if curr_func_name in ("?", "") or curr_func_name is None: + curr_func_name = "" + if curr_func_name == info.pydev_func_name and stop_frame.f_lineno == info.pydev_next_line: + stop = True + + if not stop: + # In smart step into, if we didn't hit it in this frame once, that'll + # not be the case next time either, so, disable tracing for this frame. + return + + elif back is not None and _is_same_frame(info, stop_frame, back.f_back): + # Ok, we have to track 2 stops at this point, the parent and the child offset. + # This happens when handling a step into which targets a function inside a list comprehension + # or generator (in which case an intermediary frame is created due to an internal function call). + pydev_smart_parent_offset = info.pydev_smart_parent_offset + pydev_smart_child_offset = info.pydev_smart_child_offset + # print('matched back frame', pydev_smart_parent_offset, pydev_smart_child_offset) + # print('parent f_lasti', back.f_back.f_lasti) + # print('child f_lasti', back.f_lasti) + stop = False + if pydev_smart_child_offset >= 0 and pydev_smart_child_offset >= 0: + pydev_smart_step_into_variants = info.pydev_smart_step_into_variants + + if pydev_smart_parent_offset >= 0 and pydev_smart_step_into_variants: + # Note that we don't really check the parent offset, only the offset of + # the child (because this is a generator, the parent may have moved forward + # already -- and that's ok, so, we just check that the parent frame + # matches in this case). + smart_step_into_variant = get_smart_step_into_variant_from_frame_offset( + pydev_smart_parent_offset, pydev_smart_step_into_variants + ) + # print('matched parent offset', pydev_smart_parent_offset) + # Ok, now, check the child variant + children_variants = smart_step_into_variant.children_variants + stop = children_variants and ( + get_smart_step_into_variant_from_frame_offset(back.f_lasti, children_variants) + is get_smart_step_into_variant_from_frame_offset(pydev_smart_child_offset, children_variants) + ) + # print('stop at child', stop) + + if not stop: + # In smart step into, if we didn't hit it in this frame once, that'll + # not be the case next time either, so, disable tracing for this frame. + return + + if stop: + py_db.set_suspend(thread_info.thread, step_cmd, original_step_cmd=info.pydev_original_step_cmd) + _do_wait_suspend(py_db, thread_info, frame, "line", None) + return + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _start_method_event(code, instruction_offset): + cdef ThreadInfo thread_info + cdef FuncCodeInfo func_code_info + cdef bint stop + cdef int stop_reason + cdef bint stop_on_plugin_breakpoint + cdef PyDBAdditionalThreadInfo info + cdef int step_cmd + cdef bint code_tracing_added +# ELSE +# def _start_method_event(code, instruction_offset): +# ENDIF +# fmt: on + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(True, 1) + if thread_info is None: + return + + py_db: object = GlobalDebuggerHolder.global_dbg + if py_db is None or py_db.pydb_disposed: + return monitor.DISABLE + + if not thread_info.trace or thread_info.thread._is_stopped: + # For thread-related stuff we can't disable the code tracing because other + # threads may still want it... + return + + + frame = _getframe(1) + func_code_info = _get_func_code_info(code, frame) + if func_code_info.always_skip_code: + # if DEBUG: + # print('disable (always skip)') + return monitor.DISABLE + + keep_enabled: bool = _enable_code_tracing(py_db, thread_info.additional_info, func_code_info, code, frame, True) + + if func_code_info.function_breakpoint_found: + bp = func_code_info.function_breakpoint + stop = True + new_frame = frame + stop_reason = CMD_SET_FUNCTION_BREAK + stop_on_plugin_breakpoint = False + + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, "python-function") + return + + if py_db.plugin: + plugin_manager = py_db.plugin + + # Check breaking on breakpoints in a 'call' + info = thread_info.additional_info + if func_code_info.plugin_call_breakpoint_found: + result = plugin_manager.get_breakpoint(py_db, frame, "call", info) + if result: + stop_reason = CMD_SET_BREAK + stop = False + stop_on_plugin_breakpoint = True + bp, new_frame, bp_type = result + _stop_on_breakpoint(py_db, thread_info, stop_reason, bp, frame, new_frame, stop, stop_on_plugin_breakpoint, bp_type) + return + + keep_enabled = True + + # Check breaking on line stepping in a 'call' + step_cmd = info.pydev_step_cmd + if step_cmd != -1 and func_code_info.plugin_call_stepping and info.suspend_type != PYTHON_SUSPEND: + _plugin_stepping(py_db, step_cmd, "call", frame, thread_info) + return + + if keep_enabled or any_thread_stepping(): + return None + + return monitor.DISABLE + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef _ensure_monitoring(): +# ELSE +# def _ensure_monitoring(): +# ENDIF +# fmt: on + DEBUGGER_ID = monitor.DEBUGGER_ID + if not monitor.get_tool(DEBUGGER_ID): + monitor.use_tool_id(DEBUGGER_ID, "pydevd") + update_monitor_events() + restart_events() + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef start_monitoring(bint all_threads=False): + cdef ThreadInfo thread_info +# ELSE +# def start_monitoring(all_threads=False): +# ENDIF +# fmt: on + if all_threads: + # print('start monitoring, all_threads=', all_threads) + DEBUGGER_ID = monitor.DEBUGGER_ID + if not monitor.get_tool(DEBUGGER_ID): + monitor.use_tool_id(DEBUGGER_ID, "pydevd") + update_monitor_events() + restart_events() + else: + try: + thread_info = _thread_local_info.thread_info + except: + # code=None means we can already get the threading.current_thread. + thread_info = _get_thread_info(True, 1) + if thread_info is None: + # print('start monitoring, thread=', None) + return + # print('start monitoring, thread=', thread_info.thread) + thread_info.trace = True + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cpdef stop_monitoring(all_threads=False): + cdef ThreadInfo thread_info +# ELSE +# def stop_monitoring(all_threads=False): +# ENDIF +# fmt: on + if all_threads: + # print('stop monitoring, all_threads=', all_threads) + if monitor.get_tool(monitor.DEBUGGER_ID) == "pydevd": + monitor.set_events(monitor.DEBUGGER_ID, 0) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + monitor.free_tool_id(monitor.DEBUGGER_ID) + else: + try: + thread_info = _thread_local_info.thread_info + except: + thread_info = _get_thread_info(False, 1) + if thread_info is None: + return + # print('stop monitoring, thread=', thread_info.thread) + thread_info.trace = False + + +def update_monitor_events(suspend_requested: Optional[bool] = None) -> None: + """ + This should be called when breakpoints change. + + :param suspend: means the user requested threads to be suspended + """ + if monitor.get_tool(monitor.DEBUGGER_ID) != "pydevd": + # It is still not initialized. + return + + # When breakpoints change we need to update what we want to track based + # on the breakpoints. + py_db = GlobalDebuggerHolder.global_dbg + if py_db is None: + return + + if suspend_requested is None: + suspend_requested = False + + for t in threading.enumerate(): + if getattr(t, "pydev_do_not_trace", False): + continue + try: + additional_info = t.additional_info + if additional_info is None: + # i.e.: if we don't have it then it makes no sense to check if it was suspended or is stepping + continue + except AttributeError: + continue + if additional_info.pydev_step_cmd != -1 or additional_info.pydev_state == 2: + suspend_requested = True + break + + required_events = 0 + + has_caught_exception_breakpoint_in_pydb = ( + py_db.break_on_caught_exceptions or py_db.break_on_user_uncaught_exceptions or py_db.has_plugin_exception_breaks + ) + + break_on_uncaught_exceptions = py_db.break_on_uncaught_exceptions + + if has_caught_exception_breakpoint_in_pydb: + required_events |= monitor.events.RAISE | monitor.events.PY_UNWIND + # print('track RAISE') + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _raise_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + else: + if break_on_uncaught_exceptions: + required_events |= monitor.events.PY_UNWIND + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _unwind_event) + else: + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) + + has_breaks = py_db.has_plugin_line_breaks + if not has_breaks: + if py_db.function_breakpoint_name_to_breakpoint: + has_breaks = True + else: + file_to_line_to_breakpoints = py_db.breakpoints + for line_to_breakpoints in file_to_line_to_breakpoints.values(): + if line_to_breakpoints: + has_breaks = True + break + + if has_breaks or suspend_requested: + # print('track PY_START|PY_RESUME, suspend_requested=', suspend_requested) + required_events |= monitor.events.PY_START | monitor.events.PY_RESUME + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method_event) + # monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _resume_method_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _line_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _jump_event) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _return_event) + + else: + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + + monitor.set_events(DEBUGGER_ID, required_events) + + +def restart_events() -> None: + # Note: if breakpoints change, update_monitor_events usually needs to be + # called first, then the line event tracing must be set for existing frames + # and then this function must be called at the end. + monitor.restart_events() + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +cdef _is_same_frame(PyDBAdditionalThreadInfo info, target_frame, current_frame): +# ELSE +# def _is_same_frame(info, target_frame, current_frame): +# ENDIF +# fmt: on + if target_frame is current_frame: + return True + + if info.pydev_use_scoped_step_frame: + # If using scoped step we don't check the target, we just need to check + # if the current matches the same heuristic where the target was defined. + if target_frame is not None and current_frame is not None: + if target_frame.f_code.co_filename == current_frame.f_code.co_filename: + # The co_name may be different (it may include the line number), but + # the filename must still be the same. + f = current_frame.f_back + if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[1]: + f = f.f_back + if f is not None and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: + return True + + return False + + +# fmt: off +# IFDEF CYTHON -- DONT EDIT THIS FILE (it is automatically generated) +def _do_wait_suspend(py_db, ThreadInfo thread_info, frame, event, arg): +# ELSE +# def _do_wait_suspend(py_db, thread_info, frame, event, arg): +# ENDIF +# fmt: on + thread_info.additional_info.trace_suspend_type = "sys_monitor" + py_db.do_wait_suspend(thread_info.thread, frame, event, arg) + + +# This can be used to diagnose exceptions inside of the debugger itself. +# +# import types +# import functools +# +# +# def safe_func(method): +# +# @functools.wraps(method) +# def new_method(*args, **kwargs): +# try: +# return method(*args, **kwargs) +# except: +# import traceback;traceback.print_exc() +# raise +# +# return new_method +# +# +# for name, obj in list(globals().items()): +# if name.endswith('_event'): +# if isinstance(obj, types.FunctionType): +# globals()[name] = safe_func(obj) +# +# +# def _getframe(depth): +# return sys._getframe(depth + 1) diff --git a/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py new file mode 100644 index 000000000..3378a7ebf --- /dev/null +++ b/src/debugpy/_vendored/pydevd/_pydevd_sys_monitoring/pydevd_sys_monitoring.py @@ -0,0 +1,16 @@ +from _pydevd_bundle.pydevd_constants import USE_CYTHON_FLAG, ENV_TRUE_LOWER_VALUES, ENV_FALSE_LOWER_VALUES, IS_PY312_OR_GREATER + +if IS_PY312_OR_GREATER: + if USE_CYTHON_FLAG in ENV_TRUE_LOWER_VALUES: + from ._pydevd_sys_monitoring_cython import * + + elif USE_CYTHON_FLAG in ENV_FALSE_LOWER_VALUES: + from ._pydevd_sys_monitoring import * + + else: + try: + from ._pydevd_sys_monitoring_cython import * + except: + from ._pydevd_sys_monitoring import * +else: + from ._pydevd_sys_monitoring import * diff --git a/src/debugpy/_vendored/pydevd/build_tools/build.py b/src/debugpy/_vendored/pydevd/build_tools/build.py index a722c6b6f..d8c52566a 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/build.py +++ b/src/debugpy/_vendored/pydevd/build_tools/build.py @@ -1,4 +1,4 @@ -''' +""" Helper to build pydevd. It should: @@ -6,13 +6,15 @@ * compile cython deps (properly setting up the environment first). Note that it's used in the CI to build the cython deps based on the PYDEVD_USE_CYTHON environment variable. -''' +""" from __future__ import print_function import os import subprocess import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + from generate_code import remove_if_exists, root_dir, is_python_64bit, generate_dont_trace_files, generate_cython_module @@ -47,12 +49,12 @@ def get_environment_from_batch_command(env_cmd, initial=None): if not isinstance(env_cmd, (list, tuple)): env_cmd = [env_cmd] if not os.path.exists(env_cmd[0]): - raise RuntimeError('Error: %s does not exist' % (env_cmd[0],)) + raise RuntimeError("Error: %s does not exist" % (env_cmd[0],)) # construct the command that will alter the environment env_cmd = subprocess.list2cmdline(env_cmd) # create a tag so we can tell in the output when the proc is done - tag = 'Done running command' + tag = "Done running command" # construct a cmd.exe command to do accomplish this cmd = 'cmd.exe /s /c "{env_cmd} && echo "{tag}" && set"'.format(**vars()) # launch the process @@ -61,17 +63,20 @@ def get_environment_from_batch_command(env_cmd, initial=None): lines = proc.stdout # consume whatever output occurs until the tag is reached for line in lines: - line = line.decode('utf-8') - if 'The specified configuration type is missing.' in line: - raise AssertionError('Error executing %s. View http://blog.ionelmc.ro/2014/12/21/compiling-python-extensions-on-windows/ for details.' % (env_cmd)) + line = line.decode("utf-8") + if "The specified configuration type is missing." in line: + raise AssertionError( + "Error executing %s. View http://blog.ionelmc.ro/2014/12/21/compiling-python-extensions-on-windows/ for details." + % (env_cmd) + ) if tag in line: break if sys.version_info[0] > 2: # define a way to handle each KEY=VALUE line - handle_line = lambda l: l.decode('utf-8').rstrip().split('=', 1) + handle_line = lambda l: l.decode("utf-8").rstrip().split("=", 1) else: # define a way to handle each KEY=VALUE line - handle_line = lambda l: l.rstrip().split('=', 1) + handle_line = lambda l: l.rstrip().split("=", 1) # parse key/values into pairs pairs = map(handle_line, lines) # make sure the pairs are valid @@ -84,29 +89,28 @@ def get_environment_from_batch_command(env_cmd, initial=None): def remove_binaries(suffixes): - for f in os.listdir(os.path.join(root_dir, '_pydevd_bundle')): + for f in os.listdir(os.path.join(root_dir, "_pydevd_bundle")): for suffix in suffixes: if f.endswith(suffix): - remove_if_exists(os.path.join(root_dir, '_pydevd_bundle', f)) + remove_if_exists(os.path.join(root_dir, "_pydevd_bundle", f)) def build(): - if '--no-remove-binaries' not in sys.argv: - remove_binaries(['.pyd', '.so']) + if "--no-remove-binaries" not in sys.argv: + remove_binaries([".pyd", ".so"]) os.chdir(root_dir) - env = None - if sys.platform == 'win32': + env = os.environ.copy() + if sys.platform == "win32": # "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars64.bat" # set MSSdk=1 # set DISTUTILS_USE_SDK=1 # set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools - if 'GITHUB_ACTION' not in os.environ: - env = os.environ.copy() - if sys.version_info[:2] in ((3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (3, 11)): - FORCE_PYDEVD_VC_VARS = os.environ.get('FORCE_PYDEVD_VC_VARS') + if "GITHUB_ACTION" not in os.environ: + if sys.version_info[:2] in ((3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (3, 11), (3, 12)): + FORCE_PYDEVD_VC_VARS = os.environ.get("FORCE_PYDEVD_VC_VARS") if FORCE_PYDEVD_VC_VARS: env.update(get_environment_from_batch_command([FORCE_PYDEVD_VC_VARS], initial=os.environ.copy())) else: @@ -116,56 +120,58 @@ def build(): vcvarsall = msvc9compiler.find_vcvarsall(14.0) if vcvarsall is None or not os.path.exists(vcvarsall): msvc_version = msvc9compiler.get_build_version() - print('msvc_version', msvc_version) + print("msvc_version", msvc_version) vcvarsall = msvc9compiler.find_vcvarsall(msvc_version) if vcvarsall is None or not os.path.exists(vcvarsall): - raise RuntimeError('Error finding vcvarsall.') + raise RuntimeError("Error finding vcvarsall.") if is_python_64bit(): - env.update(get_environment_from_batch_command( - [vcvarsall, 'amd64'], - initial=os.environ.copy())) + env.update(get_environment_from_batch_command([vcvarsall, "amd64"], initial=os.environ.copy())) else: - env.update(get_environment_from_batch_command( - [vcvarsall, 'x86'], - initial=os.environ.copy())) + env.update(get_environment_from_batch_command([vcvarsall, "x86"], initial=os.environ.copy())) else: - raise AssertionError('Unable to setup environment for Python: %s' % (sys.version,)) + raise AssertionError("Unable to setup environment for Python: %s" % (sys.version,)) - env['MSSdk'] = '1' - env['DISTUTILS_USE_SDK'] = '1' + env["MSSdk"] = "1" + env["DISTUTILS_USE_SDK"] = "1" additional_args = [] for arg in sys.argv: - if arg.startswith('--target-pyd-name='): + if arg.startswith("--target-pyd-name="): additional_args.append(arg) - if arg.startswith('--target-pyd-frame-eval='): + if arg.startswith("--target-pyd-frame-eval="): additional_args.append(arg) break else: - additional_args.append('--force-cython') # Build always forces cython! + additional_args.append("--force-cython") # Build always forces cython! args = [ - sys.executable, os.path.join(os.path.dirname(__file__), '..', 'setup_pydevd_cython.py'), 'build_ext', '--inplace', + sys.executable, + os.path.join(os.path.dirname(__file__), "..", "setup_pydevd_cython.py"), + "build_ext", + "--inplace", ] + additional_args - print('Calling args: %s' % (args,)) - subprocess.check_call(args, env=env,) + print("Calling args: %s" % (args,)) + subprocess.check_call( + args, + env=env, + ) -if __name__ == '__main__': - use_cython = os.getenv('PYDEVD_USE_CYTHON', '').lower() +if __name__ == "__main__": + use_cython = os.getenv("PYDEVD_USE_CYTHON", "").lower() # Note: don't import pydevd during build (so, accept just yes/no in this case). - if use_cython == 'yes': + if use_cython == "yes": print("Building") build() - elif use_cython == 'no': + elif use_cython == "no": print("Removing binaries") - remove_binaries(['.pyd', '.so']) + remove_binaries([".pyd", ".so"]) elif not use_cython: # Regular process - if '--no-regenerate-files' not in sys.argv: + if "--no-regenerate-files" not in sys.argv: print("Generating dont trace files") generate_dont_trace_files() print("Generating cython modules") @@ -173,5 +179,4 @@ def build(): print("Building") build() else: - raise RuntimeError('Unexpected value for PYDEVD_USE_CYTHON: %s (accepted: yes, no)' % (use_cython,)) - + raise RuntimeError("Unexpected value for PYDEVD_USE_CYTHON: %s (accepted: yes, no)" % (use_cython,)) diff --git a/src/debugpy/_vendored/pydevd/build_tools/build_binaries_osx.py b/src/debugpy/_vendored/pydevd/build_tools/build_binaries_osx.py index a3e376fff..3d6197ad0 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/build_binaries_osx.py +++ b/src/debugpy/_vendored/pydevd/build_tools/build_binaries_osx.py @@ -1,28 +1,27 @@ - from __future__ import unicode_literals import os import subprocess import sys -miniconda64_envs = os.getenv('MINICONDA64_ENVS') +miniconda64_envs = os.getenv("MINICONDA64_ENVS") python_installations = [ - r'%s/py34_64/bin/python' % miniconda64_envs, - r'%s/py35_64/bin/python' % miniconda64_envs, - r'%s/py36_64/bin/python' % miniconda64_envs, - r'%s/py37_64/bin/python' % miniconda64_envs, - ] + r"%s/py34_64/bin/python" % miniconda64_envs, + r"%s/py35_64/bin/python" % miniconda64_envs, + r"%s/py36_64/bin/python" % miniconda64_envs, + r"%s/py37_64/bin/python" % miniconda64_envs, +] root_dir = os.path.dirname(os.path.dirname(__file__)) def list_binaries(): - for f in os.listdir(os.path.join(root_dir, '_pydevd_bundle')): - if f.endswith('.so'): + for f in os.listdir(os.path.join(root_dir, "_pydevd_bundle")): + if f.endswith(".so"): yield f def extract_version(python_install): - return python_install.split('/')[-3][2:] + return python_install.split("/")[-3][2:] def main(): @@ -37,24 +36,30 @@ def main(): assert os.path.exists(python_install) from build import remove_binaries - remove_binaries(['.so']) + + remove_binaries([".so"]) for f in list_binaries(): - raise AssertionError('Binary not removed: %s' % (f,)) + raise AssertionError("Binary not removed: %s" % (f,)) for i, python_install in enumerate(python_installations): - new_name = 'pydevd_cython_%s_%s' % (sys.platform, extract_version(python_install)) + new_name = "pydevd_cython_%s_%s" % (sys.platform, extract_version(python_install)) args = [ - python_install, os.path.join(root_dir, 'build_tools', 'build.py'), '--no-remove-binaries', '--target-pyd-name=%s' % new_name, '--force-cython'] + python_install, + os.path.join(root_dir, "build_tools", "build.py"), + "--no-remove-binaries", + "--target-pyd-name=%s" % new_name, + "--force-cython", + ] if i != 0: - args.append('--no-regenerate-files') + args.append("--no-regenerate-files") version_number = extract_version(python_install) - if version_number.startswith('36') or version_number.startswith('37'): - name_frame_eval = 'pydevd_frame_evaluator_%s_%s' % (sys.platform, extract_version(python_install)) - args.append('--target-pyd-frame-eval=%s' % name_frame_eval) - print('Calling: %s' % (' '.join(args))) + if version_number.startswith("36") or version_number.startswith("37"): + name_frame_eval = "pydevd_frame_evaluator_%s_%s" % (sys.platform, extract_version(python_install)) + args.append("--target-pyd-frame-eval=%s" % name_frame_eval) + print("Calling: %s" % (" ".join(args))) subprocess.check_call(args) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/src/debugpy/_vendored/pydevd/build_tools/build_binaries_windows.py b/src/debugpy/_vendored/pydevd/build_tools/build_binaries_windows.py index 637841c94..65c8381b2 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/build_binaries_windows.py +++ b/src/debugpy/_vendored/pydevd/build_tools/build_binaries_windows.py @@ -1,4 +1,4 @@ -r''' +r""" Creating the needed environments for creating the pre-compiled distribution on Windows: See: @@ -6,35 +6,35 @@ build_tools\pydevd_release_process.txt for building binaries/release process. -''' +""" from __future__ import unicode_literals import os import subprocess import sys -miniconda_envs = os.getenv('MINICONDA_ENVS', r'C:\bin\Miniconda3\envs') +miniconda_envs = os.getenv("MINICONDA_ENVS", r"D:\bin\miniconda\envs") python_installations = [ - r'%s\py36_64\python.exe' % miniconda_envs, - r'%s\py37_64\python.exe' % miniconda_envs, - r'%s\py38_64\python.exe' % miniconda_envs, - r'%s\py39_64\python.exe' % miniconda_envs, - r'%s\py310_64\python.exe' % miniconda_envs, - r'%s\py311_64\python.exe' % miniconda_envs, + r"%s\py38_64\python.exe" % miniconda_envs, + r"%s\py39_64\python.exe" % miniconda_envs, + r"%s\py310_64\python.exe" % miniconda_envs, + r"%s\py311_64\python.exe" % miniconda_envs, + r"%s\py312_64\python.exe" % miniconda_envs, + # See: build_tools\pydevd_release_process.txt when adding a new one ] root_dir = os.path.dirname(os.path.dirname(__file__)) def list_binaries(): - for f in os.listdir(os.path.join(root_dir, '_pydevd_bundle')): - if f.endswith('.pyd'): + for f in os.listdir(os.path.join(root_dir, "_pydevd_bundle")): + if f.endswith(".pyd"): yield f def extract_version(python_install): - return python_install.split('\\')[-2][2:] + return python_install.split("\\")[-2][2:] def main(): @@ -46,35 +46,41 @@ def main(): generate_cython_module() for python_install in python_installations: - assert os.path.exists(python_install), '%s does not exist.' % (python_install,) + assert os.path.exists(python_install), "%s does not exist." % (python_install,) from build import remove_binaries - remove_binaries(['.pyd']) + + remove_binaries([".pyd"]) for f in list_binaries(): - raise AssertionError('Binary not removed: %s' % (f,)) + raise AssertionError("Binary not removed: %s" % (f,)) for i, python_install in enumerate(python_installations): print() - print('*' * 80) - print('*' * 80) + print("*" * 80) + print("*" * 80) print() - new_name = 'pydevd_cython_%s_%s' % (sys.platform, extract_version(python_install)) + new_name = "pydevd_cython_%s_%s" % (sys.platform, extract_version(python_install)) args = [ - python_install, os.path.join(root_dir, 'build_tools', 'build.py'), '--no-remove-binaries', '--target-pyd-name=%s' % new_name, '--force-cython'] + python_install, + os.path.join(root_dir, "build_tools", "build.py"), + "--no-remove-binaries", + "--target-pyd-name=%s" % new_name, + "--force-cython", + ] if i != 0: - args.append('--no-regenerate-files') - name_frame_eval = 'pydevd_frame_evaluator_%s_%s' % (sys.platform, extract_version(python_install)) - args.append('--target-pyd-frame-eval=%s' % name_frame_eval) - print('Calling: %s' % (' '.join(args))) + args.append("--no-regenerate-files") + name_frame_eval = "pydevd_frame_evaluator_%s_%s" % (sys.platform, extract_version(python_install)) + args.append("--target-pyd-frame-eval=%s" % name_frame_eval) + print("Calling: %s" % (" ".join(args))) env = os.environ.copy() python_exe_dir = os.path.dirname(python_install) - env['PATH'] = env['PATH'] + ';' + os.path.join(python_exe_dir, 'DLLs') + ';' + os.path.join(python_exe_dir, 'Library', 'bin') + env["PATH"] = env["PATH"] + ";" + os.path.join(python_exe_dir, "DLLs") + ";" + os.path.join(python_exe_dir, "Library", "bin") subprocess.check_call(args, env=env) -if __name__ == '__main__': +if __name__ == "__main__": main() # To run do: diff --git a/src/debugpy/_vendored/pydevd/build_tools/check_no_git_modifications.py b/src/debugpy/_vendored/pydevd/build_tools/check_no_git_modifications.py index 3bad1a09e..78ce4bab9 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/check_no_git_modifications.py +++ b/src/debugpy/_vendored/pydevd/build_tools/check_no_git_modifications.py @@ -1,32 +1,89 @@ import sys +expected_differences = set( + line.strip() + for line in r""" +--- a/_pydevd_bundle/pydevd_cython.c ++++ b/_pydevd_bundle/pydevd_cython.c +- "_pydevd_bundle\\\\pydevd_cython.pyx", +- "_pydevd_bundle\\\\pydevd_cython.pxd", ++ "_pydevd_bundle/pydevd_cython.pyx", ++ "_pydevd_bundle/pydevd_cython.pxd", + +--- a/_pydevd_frame_eval/pydevd_frame_evaluator.c ++++ b/_pydevd_frame_eval/pydevd_frame_evaluator.c +- "_pydevd_frame_eval\\\\pydevd_frame_evaluator.pyx", ++ "_pydevd_frame_eval/pydevd_frame_evaluator.pyx", +- "_pydevd_bundle\\\\pydevd_cython.pxd", ++ "_pydevd_bundle/pydevd_cython.pxd", + + +- "_pydevd_bundle/pydevd_cython.pyx", +- "_pydevd_bundle/pydevd_cython.pxd", ++ "_pydevd_bundle\\\\pydevd_cython.pyx", ++ "_pydevd_bundle\\\\pydevd_cython.pxd", + +- "_pydevd_frame_eval/pydevd_frame_evaluator.pyx", ++ "_pydevd_frame_eval\\\\pydevd_frame_evaluator.pyx", +- "_pydevd_bundle/pydevd_cython.pxd", ++ "_pydevd_bundle\\\\pydevd_cython.pxd", + +--- a/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c ++++ b/_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c +- "_pydevd_sys_monitoring\\\\\\\\_pydevd_sys_monitoring_cython.pyx", ++ "_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx", +- ".\\\\\\\\_pydevd_bundle\\\\\\\\pydevd_cython.pxd", ++ "./_pydevd_bundle/pydevd_cython.pxd", +-static const char __pyx_k_pydevd_sys_monitoring__pydevd_s[] = "_pydevd_sys_monitoring\\\\_pydevd_sys_monitoring_cython.pyx"; ++static const char __pyx_k_pydevd_sys_monitoring__pydevd_s[] = "_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.pyx"; + +- "_pydevd_sys_monitoring\\\\_pydevd_sys_monitoring_cython.pyx", +- ".\\\\\\\\_pydevd_bundle\\\\pydevd_cython.pxd", +-static const char __pyx_k_pydevd_sys_monitoring__pydevd_s[] = "_pydevd_sys_monitoring\\_pydevd_sys_monitoring_cython.pyx"; +- ".\\\\\\\\_pydevd_bundle\\\\\\\\pydevd_cython.pxd", +- ".\\\\_pydevd_bundle\\\\pydevd_cython.pxd", +""".splitlines() + if line.strip() +) + def main(): import subprocess - process = subprocess.Popen( - 'git status --porcelain'.split(), stderr=subprocess.STDOUT, stdout=subprocess.PIPE) + + process = subprocess.Popen("git status --porcelain".split(), stderr=subprocess.STDOUT, stdout=subprocess.PIPE) output, _ = process.communicate() if output: if sys.version_info[0] > 2: - output = output.decode('utf-8') + output = output.decode("utf-8") files = set() for line in output.splitlines(): filename = line[3:] files.add(filename.strip()) - files.discard('.travis_install_python_deps.sh') - files.discard('miniconda.sh') + files.discard(".travis_install_python_deps.sh") + files.discard("miniconda.sh") + files.discard("build_tools/check_no_git_modifications.py") + found_unexpected = True if files: + found_unexpected = False + output = subprocess.check_output("git diff".split()) + for line in output.decode("utf-8").splitlines(): + if line.startswith("+") or line.startswith("-"): + if line.strip() not in expected_differences: + print("Found unexpected: %r" % (line,)) + found_unexpected = True + + if files and found_unexpected: # If there are modifications, show a diff of the modifications and fail the script. # (we're mostly interested in modifications to the .c generated files by cython). - print('Found modifications in git:\n%s ' % (output,)) - print('Files: %s' % (files,)) - print('----------- diff -------------') - subprocess.call('git diff'.split()) - print('----------- end diff -------------') + print("Found modifications in git:\n%s " % (output,)) + print("Files: %s" % (files,)) + print("----------- diff -------------") + subprocess.call("git diff".split()) + print("----------- end diff -------------") sys.exit(1) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/src/debugpy/_vendored/pydevd/build_tools/generate_code.py b/src/debugpy/_vendored/pydevd/build_tools/generate_code.py index e38004dec..6eb3509d1 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/generate_code.py +++ b/src/debugpy/_vendored/pydevd/build_tools/generate_code.py @@ -1,7 +1,7 @@ -''' +""" This module should be run to recreate the files that we generate automatically (i.e.: modules that shouldn't be traced and cython .pyx) -''' +""" from __future__ import print_function @@ -11,99 +11,104 @@ def is_python_64bit(): - return (struct.calcsize('P') == 8) + return struct.calcsize("P") == 8 -root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) def get_cython_contents(filename): - if filename.endswith('.pyc'): + if filename.endswith(".pyc"): filename = filename[:-1] - state = 'regular' + state = "regular" replacements = [] new_contents = [] - with open(filename, 'r') as stream: + with open(filename, "r") as stream: for line in stream: strip = line.strip() - if state == 'regular': - if strip == '# IFDEF CYTHON': - state = 'cython' + if state == "regular": + if strip == "# IFDEF CYTHON": + state = "cython" - new_contents.append('%s -- DONT EDIT THIS FILE (it is automatically generated)\n' % line.replace('\n', '').replace('\r', '')) + new_contents.append( + "%s -- DONT EDIT THIS FILE (it is automatically generated)\n" % line.replace("\n", "").replace("\r", "") + ) continue new_contents.append(line) - elif state == 'cython': - if strip == '# ELSE': - state = 'nocython' + elif state == "cython": + if strip == "# ELSE": + state = "nocython" new_contents.append(line) continue - elif strip == '# ENDIF': - state = 'regular' + elif strip == "# ENDIF": + state = "regular" new_contents.append(line) continue - if strip == '#': + if strip == "#": continue - assert strip.startswith('# '), 'Line inside # IFDEF CYTHON must start with "# ". Found: %s' % (strip,) - strip = strip.replace('# ', '', 1).strip() + assert strip.startswith("# "), 'Line inside # IFDEF CYTHON must start with "# ". Found: %s' % (strip,) + strip = strip.replace("# ", "", 1).strip() - if strip.startswith('cython_inline_constant:'): - strip = strip.replace('cython_inline_constant:', '') - word_to_replace, replacement = strip.split('=') + if strip.startswith("cython_inline_constant:"): + strip = strip.replace("cython_inline_constant:", "") + word_to_replace, replacement = strip.split("=") replacements.append((word_to_replace.strip(), replacement.strip())) continue - line = line.replace('# ', '', 1) + line = line.replace("# ", "", 1) new_contents.append(line) - elif state == 'nocython': - if strip == '# ENDIF': - state = 'regular' + elif state == "nocython": + if strip == "# ENDIF": + state = "regular" new_contents.append(line) continue - new_contents.append('# %s' % line) + new_contents.append("# %s" % line) - assert state == 'regular', 'Error: # IFDEF CYTHON found without # ENDIF' + assert state == "regular", "Error: # IFDEF CYTHON found without # ENDIF" - ret = ''.join(new_contents) + ret = "".join(new_contents) - for (word_to_replace, replacement) in replacements: + for word_to_replace, replacement in replacements: ret = re.sub(r"\b%s\b" % (word_to_replace,), replacement, ret) return ret def _generate_cython_from_files(target, modules): - contents = ['''from __future__ import print_function + contents = [ + """from __future__ import print_function # Important: Autogenerated file. # DO NOT edit manually! # DO NOT edit manually! -'''] +""" + ] found = [] for mod in modules: found.append(mod.__file__) contents.append(get_cython_contents(mod.__file__)) - print('Generating cython from: %s' % (found,)) + print("Generating cython from: %s" % (found,)) - with open(target, 'w') as stream: - stream.write(''.join(contents)) + with open(target, "w") as stream: + stream.write("".join(contents)) def generate_dont_trace_files(): - template = '''# Important: Autogenerated file. + template = """# Important: Autogenerated file. +# fmt: off # DO NOT edit manually! # DO NOT edit manually! @@ -114,6 +119,10 @@ def generate_dont_trace_files(): %(pydev_dirs)s } +LIB_FILES_IN_DONT_TRACE_DIRS = { +%(pydev_lib_files_in_dont_trace_dirs)s +} + DONT_TRACE = { # commonly used things from the stdlib that we don't want to trace 'Queue.py':LIB_FILE, @@ -136,38 +145,43 @@ def generate_dont_trace_files(): DONT_TRACE['cp1252.py'] = LIB_FILE DONT_TRACE['utf_8.py'] = LIB_FILE DONT_TRACE['codecs.py'] = LIB_FILE -''' + +# fmt: on +""" pydev_files = [] pydev_dirs = [] + pydev_lib_files_in_dont_trace_dirs = [] exclude_dirs = [ - '.git', - '.settings', - 'build', - 'build_tools', - 'dist', - 'pydevd.egg-info', - 'pydevd_attach_to_process', - 'pydev_sitecustomize', - 'stubs', - 'tests', - 'tests_mainloop', - 'tests_python', - 'tests_runfiles', - 'test_pydevd_reload', - 'third_party', - '__pycache__', - 'pydev_ipython', - 'vendored', - '.mypy_cache', - 'pydevd.egg-info', + ".git", + ".settings", + "build", + "build_tools", + "dist", + "pydevd.egg-info", + "pydevd_attach_to_process", + "pydev_sitecustomize", + "stubs", + "tests", + "tests_mainloop", + "tests_python", + "tests_runfiles", + "test_pydevd_reload", + "third_party", + "__pycache__", + "vendored", + ".mypy_cache", + "pydevd.egg-info", ] for root, dirs, files in os.walk(root_dir): - for d in dirs: - if 'pydev' in d and d != 'pydevd.egg-info': + if d == "pydev_ipython": + pydev_dirs.append(" '%s': LIB_FILE," % (d,)) + continue + + if "pydev" in d and d != "pydevd.egg-info": # print(os.path.join(root, d)) pydev_dirs.append(" '%s': PYDEV_FILE," % (d,)) @@ -177,27 +191,36 @@ def generate_dont_trace_files(): except: pass + if os.path.basename(root) == "pydev_ipython": + for f in files: + if f.endswith(".py"): + pydev_lib_files_in_dont_trace_dirs.append(" '%s'," % (f,)) + continue + for f in files: - if f.endswith('.py'): + if f.endswith(".py"): if f not in ( - '__init__.py', - 'runfiles.py', - 'pydev_coverage.py', - 'pydev_pysrc.py', - 'setup.py', - 'setup_pydevd_cython.py', - 'interpreterInfo.py', - 'conftest.py', - ): + "__init__.py", + "runfiles.py", + "pydev_coverage.py", + "pydev_pysrc.py", + "setup.py", + "setup_pydevd_cython.py", + "interpreterInfo.py", + "conftest.py", + ): pydev_files.append(" '%s': PYDEV_FILE," % (f,)) - contents = template % (dict( - pydev_files='\n'.join(sorted(set(pydev_files))), - pydev_dirs='\n'.join(sorted(set(pydev_dirs))), - )) - assert 'pydevd.py' in contents - assert 'pydevd_dont_trace.py' in contents - with open(os.path.join(root_dir, '_pydevd_bundle', 'pydevd_dont_trace_files.py'), 'w') as stream: + contents = template % ( + dict( + pydev_files="\n".join(sorted(set(pydev_files))), + pydev_dirs="\n".join(sorted(set(pydev_dirs))), + pydev_lib_files_in_dont_trace_dirs="\n".join(sorted(set(pydev_lib_files_in_dont_trace_dirs))), + ) + ) + assert "pydevd.py" in contents + assert "pydevd_dont_trace.py" in contents + with open(os.path.join(root_dir, "_pydevd_bundle", "pydevd_dont_trace_files.py"), "w") as stream: stream.write(contents) @@ -206,28 +229,55 @@ def remove_if_exists(f): if os.path.exists(f): os.remove(f) except: - import traceback;traceback.print_exc() + import traceback + + traceback.print_exc() def generate_cython_module(): - print('Removing pydevd_cython.pyx') - remove_if_exists(os.path.join(root_dir, '_pydevd_bundle', 'pydevd_cython.pyx')) + _generate_cython_module() + _generate_sys_monitoring_cython_module() + + +def _generate_cython_module(): + print("Removing pydevd_cython.pyx") + remove_if_exists(os.path.join(root_dir, "_pydevd_bundle", "pydevd_cython.pyx")) - target = os.path.join(root_dir, '_pydevd_bundle', 'pydevd_cython.pyx') - curr = os.environ.get('PYDEVD_USE_CYTHON') + target = os.path.join(root_dir, "_pydevd_bundle", "pydevd_cython.pyx") + curr = os.environ.get("PYDEVD_USE_CYTHON") try: - os.environ['PYDEVD_USE_CYTHON'] = 'NO' + os.environ["PYDEVD_USE_CYTHON"] = "NO" from _pydevd_bundle import pydevd_additional_thread_info_regular from _pydevd_bundle import pydevd_frame, pydevd_trace_dispatch_regular + _generate_cython_from_files(target, [pydevd_additional_thread_info_regular, pydevd_frame, pydevd_trace_dispatch_regular]) finally: if curr is None: - del os.environ['PYDEVD_USE_CYTHON'] + del os.environ["PYDEVD_USE_CYTHON"] + else: + os.environ["PYDEVD_USE_CYTHON"] = curr + + +def _generate_sys_monitoring_cython_module(): + print("Removing _pydevd_sys_monitoring_cython.pyx") + remove_if_exists(os.path.join(root_dir, "_pydevd_sys_monitoring", "_pydevd_sys_monitoring_cython.pyx")) + + target = os.path.join(root_dir, "_pydevd_sys_monitoring", "_pydevd_sys_monitoring_cython.pyx") + curr = os.environ.get("PYDEVD_USE_CYTHON") + try: + os.environ["PYDEVD_USE_CYTHON"] = "NO" + + from _pydevd_sys_monitoring import _pydevd_sys_monitoring + + _generate_cython_from_files(target, [_pydevd_sys_monitoring]) + finally: + if curr is None: + del os.environ["PYDEVD_USE_CYTHON"] else: - os.environ['PYDEVD_USE_CYTHON'] = curr + os.environ["PYDEVD_USE_CYTHON"] = curr -if __name__ == '__main__': +if __name__ == "__main__": generate_dont_trace_files() generate_cython_module() diff --git a/src/debugpy/_vendored/pydevd/build_tools/names_to_rename.py b/src/debugpy/_vendored/pydevd/build_tools/names_to_rename.py index 97d061a8d..49d529bbb 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/names_to_rename.py +++ b/src/debugpy/_vendored/pydevd/build_tools/names_to_rename.py @@ -1,7 +1,7 @@ -''' +""" Helper module to hold the names to rename while doing refactoring to convert to pep8. -''' -NAMES = ''' +""" +NAMES = """ # sendCaughtExceptionStack # sendBreakpointConditionException # setSuspend @@ -315,4 +315,4 @@ # setUpModule -- skip # tearDown -- skip -''' \ No newline at end of file +""" diff --git a/src/debugpy/_vendored/pydevd/build_tools/pydevd_release_process.txt b/src/debugpy/_vendored/pydevd/build_tools/pydevd_release_process.txt index 1ddfbedd3..0c79a4c77 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/pydevd_release_process.txt +++ b/src/debugpy/_vendored/pydevd/build_tools/pydevd_release_process.txt @@ -3,44 +3,50 @@ __version_info__ in pydevd.py +Update cython-generated files (must update cython and then run build_tools/build.py on python 3.10 and 3.12) + +Create tag: +----------- +git tag pydev_debugger_3_1_0 -a -m "PyDev.Debugger 3.1.0" +git push --tags + + +(pushing the tag does the release to PyPi now) + -2. Create conda envs -===================== -conda create -y -f -n py36_64 python=3.6 cython numpy nose ipython pip -activate py36_64 -pip install "django>=1.9" -pip install -U "setuptools>=0.9" -pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate -conda create -y -f -n py37_64 python=3.7 cython numpy nose ipython pip -activate py37_64 -pip install "django>=1.9" -pip install -U "setuptools>=0.9" -pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate + + + + + +Old release process (locally): +================================= + +Create conda envs +===================== conda create -y -f -n py38_64 python=3.8 cython numpy nose ipython pip activate py38_64 pip install "django>=1.9" pip install -U "setuptools>=0.9" pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate +deactivate conda create -y -f -n py39_64 python=3.9 cython pip activate py39_64 pip install "django>=1.9" pip install -U "setuptools>=0.9" pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate +deactivate conda create -y -f -n py310_64 python=3.10 cython pip activate py310_64 pip install "django>=1.9" pip install -U "setuptools>=0.9" pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate +deactivate conda create -y -f -n py311_64 python=3.11 -c conda-forge activate py311_64 @@ -48,35 +54,39 @@ pip install cython pip install "django>=1.9" pip install -U "setuptools>=0.9" pip install -U "pip>=1.4" "wheel>=0.21" twine -conda deactivate - -### UPDATE CYTHON +deactivate -activate py36_64 -pip install cython==0.29.32 -conda deactivate +conda create -y -f -n py312_64 python=3.11 -c conda-forge +activate py312_64 +pip install cython +pip install "django>=1.9" +pip install -U "setuptools>=0.9" +pip install -U "pip>=1.4" "wheel>=0.21" twine +deactivate -activate py37_64 -pip install cython==0.29.32 -conda deactivate +### UPDATE CYTHON activate py38_64 -pip install cython==0.29.32 -conda deactivate +pip install cython==3.0.8 +deactivate activate py39_64 -pip install cython==0.29.32 -conda deactivate +pip install cython==3.0.8 +deactivate activate py310_64 -pip install cython==0.29.32 -conda deactivate +pip install cython==3.0.8 +deactivate activate py311_64 -pip install cython==0.29.32 -conda deactivate +pip install cython==3.0.8 +deactivate + +activate py312_64 +pip install cython==3.0.8 +deactivate -4. Regenerate the .pyx and .c +Regenerate the .pyx and .c =============================== set FORCE_PYDEVD_VC_VARS=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat @@ -94,7 +104,7 @@ cd ~/Desktop/Pydev/plugins/org.python.pydev.core/pysrc export PYTHONPATH=~/Desktop/Pydev/plugins/org.python.pydev.core/pysrc python build_tools/build.py -3. Generate new version +Generate new version ====================== cd /D x:\debugpyws\PyDev.Debugger @@ -109,16 +119,6 @@ python build_tools\build_binaries_windows.py rm dist/pydevd* deactivate -activate py36_64 -python setup.py sdist bdist_wheel -deactivate -dir dist - -activate py37_64 -python setup.py sdist bdist_wheel -deactivate -dir dist - activate py38_64 python setup.py sdist bdist_wheel deactivate diff --git a/src/debugpy/_vendored/pydevd/build_tools/rename_pep8.py b/src/debugpy/_vendored/pydevd/build_tools/rename_pep8.py index 644ac11a6..4263a8469 100644 --- a/src/debugpy/_vendored/pydevd/build_tools/rename_pep8.py +++ b/src/debugpy/_vendored/pydevd/build_tools/rename_pep8.py @@ -1,16 +1,16 @@ -''' +""" Helper module to do refactoring to convert names to pep8. -''' +""" import re import os import names_to_rename -_CAMEL_RE = re.compile(r'(?<=[a-z])([A-Z])') -_CAMEL_DEF_RE = re.compile(r'(def )((([A-Z0-9]+|[a-z0-9])[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*)') +_CAMEL_RE = re.compile(r"(?<=[a-z])([A-Z])") +_CAMEL_DEF_RE = re.compile(r"(def )((([A-Z0-9]+|[a-z0-9])[a-z][a-z0-9]*[A-Z]|[a-z0-9]*[A-Z][A-Z0-9]*[a-z])[A-Za-z0-9]*)") def _normalize(name): - return _CAMEL_RE.sub(lambda x: '_' + x.group(1).lower(), name).lower() + return _CAMEL_RE.sub(lambda x: "_" + x.group(1).lower(), name).lower() def find_matches_in_contents(contents): @@ -19,15 +19,15 @@ def find_matches_in_contents(contents): def iter_files_in_dir(dirname): for root, dirs, files in os.walk(dirname): - for name in ('pydevd_attach_to_process', '.git', 'stubs', 'pydev_ipython', 'third_party', 'pydev_ipython'): + for name in ("pydevd_attach_to_process", ".git", "stubs", "pydev_ipython", "third_party", "pydev_ipython"): try: dirs.remove(name) except: pass for filename in files: - if filename.endswith('.py') and filename not in ('rename_pep8.py', 'names_to_rename.py'): + if filename.endswith(".py") and filename not in ("rename_pep8.py", "names_to_rename.py"): path = os.path.join(root, filename) - with open(path, 'rb') as stream: + with open(path, "rb") as stream: initial_contents = stream.read() yield path, initial_contents @@ -37,8 +37,8 @@ def find_matches(): found = set() for path, initial_contents in iter_files_in_dir(os.path.dirname(os.path.dirname(__file__))): found.update(find_matches_in_contents(initial_contents)) - print('\n'.join(sorted(found))) - print('Total', len(found)) + print("\n".join(sorted(found))) + print("Total", len(found)) def substitute_contents(re_name_to_new_val, initial_contents): @@ -54,14 +54,20 @@ def make_replace(): for path, initial_contents in iter_files_in_dir(os.path.dirname(os.path.dirname(__file__))): contents = substitute_contents(re_name_to_new_val, initial_contents) if contents != initial_contents: - print('Changed something at: %s' % (path,)) + print("Changed something at: %s" % (path,)) for val in re_name_to_new_val.itervalues(): # Check in initial contents to see if it already existed! - if re.findall(r'\b%s\b' % (val,), initial_contents): - raise AssertionError('Error in:\n%s\n%s is already being used (and changes may conflict).' % (path, val,)) - - with open(path, 'wb') as stream: + if re.findall(r"\b%s\b" % (val,), initial_contents): + raise AssertionError( + "Error in:\n%s\n%s is already being used (and changes may conflict)." + % ( + path, + val, + ) + ) + + with open(path, "wb") as stream: stream.write(contents) @@ -69,25 +75,28 @@ def load_re_to_new_val(names): name_to_new_val = {} for n in names.splitlines(): n = n.strip() - if not n.startswith('#') and n: - name_to_new_val[r'\b' + n + r'\b'] = _normalize(n) + if not n.startswith("#") and n: + name_to_new_val[r"\b" + n + r"\b"] = _normalize(n) return name_to_new_val def test(): - assert _normalize('RestoreSysSetTraceFunc') == 'restore_sys_set_trace_func' - assert _normalize('restoreSysSetTraceFunc') == 'restore_sys_set_trace_func' - assert _normalize('Restore') == 'restore' - matches = find_matches_in_contents(''' + assert _normalize("RestoreSysSetTraceFunc") == "restore_sys_set_trace_func" + assert _normalize("restoreSysSetTraceFunc") == "restore_sys_set_trace_func" + assert _normalize("Restore") == "restore" + matches = find_matches_in_contents( + """ def CamelCase() def camelCase() def ignore() def ignore_this() def Camel() def CamelCaseAnother() - ''') - assert matches == ['CamelCase', 'camelCase', 'Camel', 'CamelCaseAnother'] - re_name_to_new_val = load_re_to_new_val(''' + """ + ) + assert matches == ["CamelCase", "camelCase", "Camel", "CamelCaseAnother"] + re_name_to_new_val = load_re_to_new_val( + """ # Call -- skip # Call1 -- skip # Call2 -- skip @@ -101,9 +110,22 @@ def CamelCaseAnother() DictKeys DictPop DictValues -''') - assert re_name_to_new_val == {'\\bDictPop\\b': 'dict_pop', '\\bDictItems\\b': 'dict_items', '\\bDictIterValues\\b': 'dict_iter_values', '\\bDictKeys\\b': 'dict_keys', '\\bDictContains\\b': 'dict_contains', '\\bDictIterItems\\b': 'dict_iter_items', '\\bCustomFramesContainerInit\\b': 'custom_frames_container_init', '\\bDictValues\\b': 'dict_values'} - assert substitute_contents(re_name_to_new_val, ''' +""" + ) + assert re_name_to_new_val == { + "\\bDictPop\\b": "dict_pop", + "\\bDictItems\\b": "dict_items", + "\\bDictIterValues\\b": "dict_iter_values", + "\\bDictKeys\\b": "dict_keys", + "\\bDictContains\\b": "dict_contains", + "\\bDictIterItems\\b": "dict_iter_items", + "\\bCustomFramesContainerInit\\b": "custom_frames_container_init", + "\\bDictValues\\b": "dict_values", + } + assert ( + substitute_contents( + re_name_to_new_val, + """ CustomFramesContainerInit DictContains DictItems @@ -112,7 +134,9 @@ def CamelCaseAnother() DictKeys DictPop DictValues -''') == ''' +""", + ) + == """ custom_frames_container_init dict_contains dict_items @@ -121,11 +145,11 @@ def CamelCaseAnother() dict_keys dict_pop dict_values -''' +""" + ) -if __name__ == '__main__': -# find_matches() +if __name__ == "__main__": + # find_matches() make_replace() # test() - diff --git a/src/debugpy/_vendored/pydevd/conftest.py b/src/debugpy/_vendored/pydevd/conftest.py index c46c3f9f5..37728e657 100644 --- a/src/debugpy/_vendored/pydevd/conftest.py +++ b/src/debugpy/_vendored/pydevd/conftest.py @@ -9,33 +9,33 @@ def pytest_report_header(config): - print('PYDEVD_USE_CYTHON: %s' % (TEST_CYTHON,)) - print('PYDEVD_TEST_VM: %s' % (PYDEVD_TEST_VM,)) + print("PYDEVD_USE_CYTHON: %s" % (TEST_CYTHON,)) + print("PYDEVD_TEST_VM: %s" % (PYDEVD_TEST_VM,)) try: import multiprocessing except ImportError: pass else: - print('Number of processors: %s' % (multiprocessing.cpu_count(),)) + print("Number of processors: %s" % (multiprocessing.cpu_count(),)) - print('Relevant system paths:') - print('sys.executable: %s' % (sys.executable,)) - print('sys.prefix: %s' % (sys.prefix,)) + print("Relevant system paths:") + print("sys.executable: %s" % (sys.executable,)) + print("sys.prefix: %s" % (sys.prefix,)) - if hasattr(sys, 'base_prefix'): - print('sys.base_prefix: %s' % (sys.base_prefix,)) + if hasattr(sys, "base_prefix"): + print("sys.base_prefix: %s" % (sys.base_prefix,)) - if hasattr(sys, 'real_prefix'): - print('sys.real_prefix: %s' % (sys.real_prefix,)) + if hasattr(sys, "real_prefix"): + print("sys.real_prefix: %s" % (sys.real_prefix,)) - if hasattr(site, 'getusersitepackages'): - print('site.getusersitepackages(): %s' % (site.getusersitepackages(),)) + if hasattr(site, "getusersitepackages"): + print("site.getusersitepackages(): %s" % (site.getusersitepackages(),)) - if hasattr(site, 'getsitepackages'): - print('site.getsitepackages(): %s' % (site.getsitepackages(),)) + if hasattr(site, "getsitepackages"): + print("site.getsitepackages(): %s" % (site.getsitepackages(),)) for path in sys.path: - if os.path.exists(path) and os.path.basename(path) == 'site-packages': + if os.path.exists(path) and os.path.basename(path) == "site-packages": print('Folder with "site-packages" in sys.path: %s' % (path,)) @@ -51,44 +51,46 @@ def _start_monitoring_threads(): _started_monitoring_threads = True import threading - if hasattr(sys, '_current_frames') and hasattr(threading, 'enumerate'): + + if hasattr(sys, "_current_frames") and hasattr(threading, "enumerate"): import time import traceback class DumpThreads(threading.Thread): - def run(self): time.sleep(20) thread_id_to_name = {} try: for t in threading.enumerate(): - thread_id_to_name[t.ident] = '%s (daemon: %s)' % (t.name, t.daemon) + thread_id_to_name[t.ident] = "%s (daemon: %s)" % (t.name, t.daemon) except: pass stack_trace = [ - '===============================================================================', - 'pydev pyunit runner: Threads still found running after tests finished', - '================================= Thread Dump ================================='] + "===============================================================================", + "pydev pyunit runner: Threads still found running after tests finished", + "================================= Thread Dump =================================", + ] for thread_id, stack in sys._current_frames().items(): - stack_trace.append('\n-------------------------------------------------------------------------------') + stack_trace.append("\n-------------------------------------------------------------------------------") stack_trace.append(" Thread %s" % thread_id_to_name.get(thread_id, thread_id)) - stack_trace.append('') + stack_trace.append("") - if 'self' in stack.f_locals: - sys.stderr.write(str(stack.f_locals['self']) + '\n') + if "self" in stack.f_locals: + sys.stderr.write(str(stack.f_locals["self"]) + "\n") for filename, lineno, name, line in traceback.extract_stack(stack): stack_trace.append(' File "%s", line %d, in %s' % (filename, lineno, name)) if line: stack_trace.append(" %s" % (line.strip())) - stack_trace.append('\n=============================== END Thread Dump ===============================') - sys.stderr.write('\n'.join(stack_trace)) + stack_trace.append("\n=============================== END Thread Dump ===============================") + sys.stderr.write("\n".join(stack_trace)) # Force thread run to finish import os + os._exit(123) dump_current_frames_thread = DumpThreads() @@ -108,16 +110,14 @@ def check_no_threads(): # see: http://goo.gl/kTQMs SYMBOLS = { - 'customary': ('B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'), - 'customary_ext': ('byte', 'kilo', 'mega', 'giga', 'tera', 'peta', 'exa', - 'zetta', 'iotta'), - 'iec': ('Bi', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'), - 'iec_ext': ('byte', 'kibi', 'mebi', 'gibi', 'tebi', 'pebi', 'exbi', - 'zebi', 'yobi'), + "customary": ("B", "K", "M", "G", "T", "P", "E", "Z", "Y"), + "customary_ext": ("byte", "kilo", "mega", "giga", "tera", "peta", "exa", "zetta", "iotta"), + "iec": ("Bi", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi"), + "iec_ext": ("byte", "kibi", "mebi", "gibi", "tebi", "pebi", "exbi", "zebi", "yobi"), } -def bytes2human(n, format='%(value).1f %(symbol)s', symbols='customary'): +def bytes2human(n, format="%(value).1f %(symbol)s", symbols="customary"): """ Bytes-to-human / human-to-bytes converter. Based on: http://goo.gl/kTQMs @@ -178,8 +178,12 @@ def bytes2human(n, format='%(value).1f %(symbol)s', symbols='customary'): def format_memory_info(memory_info, curr_proc_memory_info): - return 'Total: %s, Available: %s, Used: %s %%, Curr process: %s' % ( - bytes2human(memory_info.total), bytes2human(memory_info.available), memory_info.percent, format_process_memory_info(curr_proc_memory_info)) + return "Total: %s, Available: %s, Used: %s %%, Curr process: %s" % ( + bytes2human(memory_info.total), + bytes2human(memory_info.available), + memory_info.percent, + format_process_memory_info(curr_proc_memory_info), + ) def format_process_memory_info(proc_memory_info): @@ -209,17 +213,20 @@ def before_after_each_function(request): if _global_collect_info and DEBUG_MEMORY_INFO: try: from pympler import summary, muppy + sum1 = summary.summarize(muppy.get_objects()) except: pydev_log.exception() sys.stdout.write( -''' + """ =============================================================================== Memory before: %s %s =============================================================================== -''' % (request.function, format_memory_info(psutil.virtual_memory(), before_curr_proc_memory_info))) +""" + % (request.function, format_memory_info(psutil.virtual_memory(), before_curr_proc_memory_info)) + ) yield processes_info = [] @@ -229,14 +236,9 @@ def before_after_each_function(request): try: cmdline = proc.cmdline() except: - cmdline = '' + cmdline = "" processes_info.append( - 'New Process: %s(%s - %s) - %s' % ( - proc.name(), - proc.pid, - cmdline, - format_process_memory_info(proc.memory_info()) - ) + "New Process: %s(%s - %s) - %s" % (proc.name(), proc.pid, cmdline, format_process_memory_info(proc.memory_info())) ) except (psutil.NoSuchProcess, psutil.AccessDenied): pass # The process could've died in the meanwhile @@ -250,11 +252,11 @@ def before_after_each_function(request): if _global_collect_info: sum2 = summary.summarize(muppy.get_objects()) diff = summary.get_diff(sum1, sum2) - sys.stdout.write('===============================================================================\n') - sys.stdout.write('Leak info:\n') - sys.stdout.write('===============================================================================\n') + sys.stdout.write("===============================================================================\n") + sys.stdout.write("Leak info:\n") + sys.stdout.write("===============================================================================\n") summary.print_(diff) - sys.stdout.write('===============================================================================\n') + sys.stdout.write("===============================================================================\n") _global_collect_info = True # We'll only really collect the info on the next test (i.e.: if at one test @@ -265,17 +267,19 @@ def before_after_each_function(request): pydev_log.exception() sys.stdout.write( -''' + """ =============================================================================== Memory after: %s %s%s =============================================================================== -''' % ( - request.function, - format_memory_info(psutil.virtual_memory(), after_curr_proc_memory_info), - '' if not processes_info else '\nLeaked processes:\n' + '\n'.join(processes_info)), +""" + % ( + request.function, + format_memory_info(psutil.virtual_memory(), after_curr_proc_memory_info), + "" if not processes_info else "\nLeaked processes:\n" + "\n".join(processes_info), + ), ) @@ -337,7 +341,7 @@ def factory(source): raise ValueError("Failed to locate function header.") # Remove everything up to and including "def". - source = source[def_lineno + 1:] + source = source[def_lineno + 1 :] assert source # Now we need to adjust indentation. Compute how much the first line of @@ -353,8 +357,8 @@ def factory(source): # Write it to file. tmpfile = os.path.join(str(tmpdir), name + ".py") - assert not os.path.exists(tmpfile), '%s already exists.' % (tmpfile,) - with open(tmpfile, 'w') as stream: + assert not os.path.exists(tmpfile), "%s already exists." % (tmpfile,) + with open(tmpfile, "w") as stream: stream.write(source) return tmpfile @@ -363,7 +367,6 @@ def factory(source): if IS_JYTHON or IS_IRONPYTHON: - # On Jython and IronPython, it's a no-op. def before_after_each_function(): pass diff --git a/src/debugpy/_vendored/pydevd/interpreterInfo.py b/src/debugpy/_vendored/pydevd/interpreterInfo.py index de6aa0035..73dd43960 100644 --- a/src/debugpy/_vendored/pydevd/interpreterInfo.py +++ b/src/debugpy/_vendored/pydevd/interpreterInfo.py @@ -1,4 +1,4 @@ -''' +""" This module was created to get information available in the interpreter, such as libraries, paths, etc. @@ -10,30 +10,28 @@ EXECUTABLE:python.exe|libs@compiled_dlls$builtin_mods all internal are separated by | -''' +""" import sys try: import os.path def fully_normalize_path(path): - '''fixes the path so that the format of the path really reflects the directories in the system - ''' + """fixes the path so that the format of the path really reflects the directories in the system""" return os.path.normpath(path) join = os.path.join except: # ImportError or AttributeError. - # See: http://stackoverflow.com/questions/10254353/error-while-installing-jython-for-pydev def fully_normalize_path(path): - '''fixes the path so that the format of the path really reflects the directories in the system - ''' + """fixes the path so that the format of the path really reflects the directories in the system""" return path def join(a, b): - if a.endswith('/') or a.endswith('\\'): + if a.endswith("/") or a.endswith("\\"): return a + b - return a + '/' + b + return a + "/" + b + IS_PYTHON_3_ONWARDS = 0 @@ -48,21 +46,20 @@ def join(a, b): False True except: - exec ('True, False = 1,0') # An exec is used so that python 3k does not give a syntax error + exec("True, False = 1,0") # An exec is used so that python 3k does not give a syntax error if sys.platform == "cygwin": - import ctypes def native_path(path): MAX_PATH = 512 # On cygwin NT, its 260 lately, but just need BIG ENOUGH buffer - '''Get the native form of the path, like c:\\Foo for /cygdrive/c/Foo''' + """Get the native form of the path, like c:\\Foo for /cygdrive/c/Foo""" retval = ctypes.create_string_buffer(MAX_PATH) path = fully_normalize_path(path) path = tobytes(path) CCP_POSIX_TO_WIN_A = 0 - cygwin1dll = ctypes.cdll.LoadLibrary('cygwin1.dll') + cygwin1dll = ctypes.cdll.LoadLibrary("cygwin1.dll") cygwin1dll.cygwin_conv_path(CCP_POSIX_TO_WIN_A, path, retval, MAX_PATH) return retval.value @@ -74,29 +71,30 @@ def native_path(path): def __getfilesystemencoding(): - ''' + """ Note: there's a copy of this method in _pydev_filesystem_encoding.py - ''' + """ try: ret = sys.getfilesystemencoding() if not ret: - raise RuntimeError('Unable to get encoding.') + raise RuntimeError("Unable to get encoding.") return ret except: try: # Handle Jython from java.lang import System # @UnresolvedImport + env = System.getProperty("os.name").lower() - if env.find('win') != -1: - return 'ISO-8859-1' # mbcs does not work on Jython, so, use a (hopefully) suitable replacement - return 'utf-8' + if env.find("win") != -1: + return "ISO-8859-1" # mbcs does not work on Jython, so, use a (hopefully) suitable replacement + return "utf-8" except: pass # Only available from 2.3 onwards. - if sys.platform == 'win32': - return 'mbcs' - return 'utf-8' + if sys.platform == "win32": + return "mbcs" + return "utf-8" def getfilesystemencoding(): @@ -104,14 +102,14 @@ def getfilesystemencoding(): ret = __getfilesystemencoding() # Check if the encoding is actually there to be used! - if hasattr('', 'encode'): - ''.encode(ret) - if hasattr('', 'decode'): - ''.decode(ret) + if hasattr("", "encode"): + "".encode(ret) + if hasattr("", "decode"): + "".decode(ret) return ret except: - return 'utf-8' + return "utf-8" file_system_encoding = getfilesystemencoding() @@ -126,7 +124,7 @@ def getfilesystemencoding(): def tounicode(s): - if hasattr(s, 'decode'): + if hasattr(s, "decode"): if not isinstance(s, unicode_type): # Depending on the platform variant we may have decode on string or not. return s.decode(file_system_encoding) @@ -134,7 +132,7 @@ def tounicode(s): def tobytes(s): - if hasattr(s, 'encode'): + if hasattr(s, "encode"): if not isinstance(s, bytes_type): return s.encode(file_system_encoding) return s @@ -148,13 +146,13 @@ def toasciimxl(s): s = s.replace("&", "&") try: - ret = s.encode('ascii', 'xmlcharrefreplace') + ret = s.encode("ascii", "xmlcharrefreplace") except: # use workaround - ret = '' + ret = "" for c in s: try: - ret += c.encode('ascii') + ret += c.encode("ascii") except: try: # Python 2: unicode is a valid identifier @@ -165,10 +163,11 @@ def toasciimxl(s): return ret -if __name__ == '__main__': +if __name__ == "__main__": try: # just give some time to get the reading threads attached (just in case) import time + time.sleep(0.1) except: pass @@ -178,8 +177,8 @@ def toasciimxl(s): except: executable = tounicode(sys.executable) - if sys.platform == "cygwin" and not executable.endswith(tounicode('.exe')): - executable += tounicode('.exe') + if sys.platform == "cygwin" and not executable.endswith(tounicode(".exe")): + executable += tounicode(".exe") try: major = str(sys.version_info[0]) @@ -187,17 +186,18 @@ def toasciimxl(s): except AttributeError: # older versions of python don't have version_info import string - s = string.split(sys.version, ' ')[0] - s = string.split(s, '.') + + s = string.split(sys.version, " ")[0] + s = string.split(s, ".") major = s[0] minor = s[1] - s = tounicode('%s.%s') % (tounicode(major), tounicode(minor)) + s = tounicode("%s.%s") % (tounicode(major), tounicode(minor)) - contents = [tounicode('')] - contents.append(tounicode('%s') % (tounicode(s),)) + contents = [tounicode("")] + contents.append(tounicode("%s") % (tounicode(s),)) - contents.append(tounicode('%s') % tounicode(executable)) + contents.append(tounicode("%s") % tounicode(executable)) # this is the new implementation to get the system folders # (still need to check if it works in linux) @@ -218,6 +218,7 @@ def toasciimxl(s): try: import string # to be compatible with older versions + if string.find(p, prefix) == 0: # was startswith result.append((p, True)) else: @@ -240,10 +241,10 @@ def toasciimxl(s): # nor forced libs for builtinMod in sys.builtin_module_names: - contents.append(tounicode('%s') % tounicode(builtinMod)) + contents.append(tounicode("%s") % tounicode(builtinMod)) - contents.append(tounicode('')) - unic = tounicode('\n').join(contents) + contents.append(tounicode("")) + unic = tounicode("\n").join(contents) inasciixml = toasciimxl(unic) if IS_PYTHON_3_ONWARDS: # This is the 'official' way of writing binary output in Py3K (see: http://bugs.python.org/issue4571) diff --git a/src/debugpy/_vendored/pydevd/pycompletionserver.py b/src/debugpy/_vendored/pydevd/pycompletionserver.py index 2fb04f8d9..e2a7cbfa8 100644 --- a/src/debugpy/_vendored/pydevd/pycompletionserver.py +++ b/src/debugpy/_vendored/pydevd/pycompletionserver.py @@ -1,24 +1,27 @@ -''' +""" Entry-point module to start the code-completion server for PyDev. @author Fabio Zadrozny -''' +""" from _pydevd_bundle.pydevd_constants import IS_JYTHON if IS_JYTHON: import java.lang # @UnresolvedImport - SERVER_NAME = 'jycompletionserver' + + SERVER_NAME = "jycompletionserver" from _pydev_bundle import _pydev_jy_imports_tipper + _pydev_imports_tipper = _pydev_jy_imports_tipper else: # it is python - SERVER_NAME = 'pycompletionserver' + SERVER_NAME = "pycompletionserver" from _pydev_bundle import _pydev_imports_tipper from _pydev_bundle._pydev_saved_modules import socket import sys + if sys.platform == "darwin": # See: https://sourceforge.net/projects/pydev/forums/forum/293649/topic/3454227 try: @@ -53,27 +56,30 @@ def dbg(s, prior): if prior & DEBUG != 0: - sys.stdout.write('%s\n' % (s,)) + sys.stdout.write("%s\n" % (s,)) + + # f = open('c:/temp/test.txt', 'a') # print_ >> f, s # f.close() from _pydev_bundle import pydev_localhost + HOST = pydev_localhost.get_localhost() # Symbolic name meaning the local host -MSG_KILL_SERVER = '@@KILL_SERVER_END@@' -MSG_COMPLETIONS = '@@COMPLETIONS' -MSG_END = 'END@@' -MSG_INVALID_REQUEST = '@@INVALID_REQUEST' -MSG_JYTHON_INVALID_REQUEST = '@@JYTHON_INVALID_REQUEST' -MSG_CHANGE_DIR = '@@CHANGE_DIR:' -MSG_OK = '@@MSG_OK_END@@' -MSG_IMPORTS = '@@IMPORTS:' -MSG_PYTHONPATH = '@@PYTHONPATH_END@@' -MSG_CHANGE_PYTHONPATH = '@@CHANGE_PYTHONPATH:' -MSG_JEDI = '@@MSG_JEDI:' -MSG_SEARCH = '@@SEARCH' +MSG_KILL_SERVER = "@@KILL_SERVER_END@@" +MSG_COMPLETIONS = "@@COMPLETIONS" +MSG_END = "END@@" +MSG_INVALID_REQUEST = "@@INVALID_REQUEST" +MSG_JYTHON_INVALID_REQUEST = "@@JYTHON_INVALID_REQUEST" +MSG_CHANGE_DIR = "@@CHANGE_DIR:" +MSG_OK = "@@MSG_OK_END@@" +MSG_IMPORTS = "@@IMPORTS:" +MSG_PYTHONPATH = "@@PYTHONPATH_END@@" +MSG_CHANGE_PYTHONPATH = "@@CHANGE_PYTHONPATH:" +MSG_JEDI = "@@MSG_JEDI:" +MSG_SEARCH = "@@SEARCH" BUFFER_SIZE = 1024 @@ -81,10 +87,10 @@ def dbg(s, prior): def complete_from_dir(directory): - ''' + """ This is necessary so that we get the imports from the same directory where the file we are completing is located. - ''' + """ global currDirModule if currDirModule is not None: if len(sys.path) > 0 and sys.path[0] == currDirModule: @@ -95,12 +101,12 @@ def complete_from_dir(directory): def change_python_path(pythonpath): - '''Changes the pythonpath (clears all the previous pythonpath) + """Changes the pythonpath (clears all the previous pythonpath) @param pythonpath: string with paths separated by | - ''' + """ - split = pythonpath.split('|') + split = pythonpath.split("|") sys.path = [] for path in split: path = path.strip() @@ -109,7 +115,6 @@ def change_python_path(pythonpath): class Processor: - def __init__(self): # nothing to do return @@ -124,36 +129,36 @@ def remove_invalid_chars(self, msg): try: return quote_plus(msg) except: - sys.stdout.write('error making quote plus in %s\n' % (msg,)) + sys.stdout.write("error making quote plus in %s\n" % (msg,)) raise - return ' ' + return " " def format_completion_message(self, defFile, completionsList): - ''' + """ Format the completions suggestions in the following format: @@COMPLETIONS(modFile(token,description),(token,description),(token,description))END@@ - ''' + """ compMsg = [] - compMsg.append('%s' % defFile) + compMsg.append("%s" % defFile) for tup in completionsList: - compMsg.append(',') + compMsg.append(",") - compMsg.append('(') + compMsg.append("(") compMsg.append(str(self.remove_invalid_chars(tup[0]))) # token - compMsg.append(',') + compMsg.append(",") compMsg.append(self.remove_invalid_chars(tup[1])) # description - if(len(tup) > 2): - compMsg.append(',') + if len(tup) > 2: + compMsg.append(",") compMsg.append(self.remove_invalid_chars(tup[2])) # args - only if function. - if(len(tup) > 3): - compMsg.append(',') + if len(tup) > 3: + compMsg.append(",") compMsg.append(self.remove_invalid_chars(tup[3])) # TYPE - compMsg.append(')') + compMsg.append(")") - return '%s(%s)%s' % (MSG_COMPLETIONS, ''.join(compMsg), MSG_END) + return "%s(%s)%s" % (MSG_COMPLETIONS, "".join(compMsg), MSG_END) class Exit(Exception): @@ -161,7 +166,6 @@ class Exit(Exception): class CompletionServer: - def __init__(self, port): self.ended = False self.port = port @@ -176,27 +180,27 @@ def connect_to_server(self): try: s.connect((HOST, self.port)) except: - sys.stderr.write('Error on connect_to_server with parameters: host: %s port: %s\n' % (HOST, self.port)) + sys.stderr.write("Error on connect_to_server with parameters: host: %s port: %s\n" % (HOST, self.port)) raise def get_completions_message(self, defFile, completionsList): - ''' + """ get message with completions. - ''' + """ return self.processor.format_completion_message(defFile, completionsList) def get_token_and_data(self, data): - ''' + """ When we receive this, we have 'token):data' - ''' - token = '' + """ + token = "" for c in data: - if c != ')': + if c != ")": token = token + c else: - break; + break - return token, data.lstrip(token + '):') + return token, data.lstrip(token + "):") def emulated_sendall(self, msg): MSGLEN = 1024 * 20 @@ -209,68 +213,69 @@ def emulated_sendall(self, msg): totalsent = totalsent + sent def send(self, msg): - self.socket.sendall(bytearray(msg, 'utf-8')) + self.socket.sendall(bytearray(msg, "utf-8")) def run(self): # Echo server program try: from _pydev_bundle import _pydev_log + log = _pydev_log.Log() - dbg(SERVER_NAME + ' connecting to java server on %s (%s)' % (HOST, self.port) , INFO1) + dbg(SERVER_NAME + " connecting to java server on %s (%s)" % (HOST, self.port), INFO1) # after being connected, create a socket as a client. self.connect_to_server() - dbg(SERVER_NAME + ' Connected to java server', INFO1) + dbg(SERVER_NAME + " Connected to java server", INFO1) while not self.ended: - data = '' + data = "" while data.find(MSG_END) == -1: received = self.socket.recv(BUFFER_SIZE) if len(received) == 0: raise Exit() # ok, connection ended - data = data + received.decode('utf-8') + data = data + received.decode("utf-8") try: try: if data.find(MSG_KILL_SERVER) != -1: - dbg(SERVER_NAME + ' kill message received', INFO1) + dbg(SERVER_NAME + " kill message received", INFO1) # break if we received kill message. self.ended = True raise Exit() - dbg(SERVER_NAME + ' starting keep alive thread', INFO2) + dbg(SERVER_NAME + " starting keep alive thread", INFO2) if data.find(MSG_PYTHONPATH) != -1: comps = [] for p in _sys_path: - comps.append((p, ' ')) + comps.append((p, " ")) self.send(self.get_completions_message(None, comps)) else: - data = data[:data.rfind(MSG_END)] + data = data[: data.rfind(MSG_END)] if data.startswith(MSG_IMPORTS): - data = data[len(MSG_IMPORTS):] + data = data[len(MSG_IMPORTS) :] data = unquote_plus(data) defFile, comps = _pydev_imports_tipper.generate_tip(data, log) self.send(self.get_completions_message(defFile, comps)) elif data.startswith(MSG_CHANGE_PYTHONPATH): - data = data[len(MSG_CHANGE_PYTHONPATH):] + data = data[len(MSG_CHANGE_PYTHONPATH) :] data = unquote_plus(data) change_python_path(data) self.send(MSG_OK) elif data.startswith(MSG_JEDI): - data = data[len(MSG_JEDI):] + data = data[len(MSG_JEDI) :] data = unquote_plus(data) - line, column, encoding, path, source = data.split('|', 4) + line, column, encoding, path, source = data.split("|", 4) try: import jedi # @UnresolvedImport except: - self.send(self.get_completions_message(None, [('Error on import jedi', 'Error importing jedi', '')])) + self.send(self.get_completions_message(None, [("Error on import jedi", "Error importing jedi", "")])) else: script = jedi.Script( # Line +1 because it expects lines 1-based (and col 0-based) @@ -283,36 +288,36 @@ def run(self): lst = [] for completion in script.completions(): t = completion.type - if t == 'class': - t = '1' + if t == "class": + t = "1" - elif t == 'function': - t = '2' + elif t == "function": + t = "2" - elif t == 'import': - t = '0' + elif t == "import": + t = "0" - elif t == 'keyword': + elif t == "keyword": continue # Keywords are already handled in PyDev - elif t == 'statement': - t = '3' + elif t == "statement": + t = "3" else: - t = '-1' + t = "-1" # gen list(tuple(name, doc, args, type)) - lst.append((completion.name, '', '', t)) - self.send(self.get_completions_message('empty', lst)) + lst.append((completion.name, "", "", t)) + self.send(self.get_completions_message("empty", lst)) elif data.startswith(MSG_SEARCH): - data = data[len(MSG_SEARCH):] + data = data[len(MSG_SEARCH) :] data = unquote_plus(data) (f, line, col), foundAs = _pydev_imports_tipper.search_definition(data) self.send(self.get_completions_message(f, [(line, col, foundAs)])) elif data.startswith(MSG_CHANGE_DIR): - data = data[len(MSG_CHANGE_DIR):] + data = data[len(MSG_CHANGE_DIR) :] data = unquote_plus(data) complete_from_dir(data) self.send(MSG_OK) @@ -321,7 +326,7 @@ def run(self): self.send(MSG_INVALID_REQUEST) except Exit: e = sys.exc_info()[1] - msg = self.get_completions_message(None, [('Exit:', 'SystemExit', '')]) + msg = self.get_completions_message(None, [("Exit:", "SystemExit", "")]) try: self.send(msg) except socket.error: @@ -330,13 +335,13 @@ def run(self): raise e # raise original error. except: - dbg(SERVER_NAME + ' exception occurred', ERROR) + dbg(SERVER_NAME + " exception occurred", ERROR) s = StringIO() traceback.print_exc(file=s) err = s.getvalue() - dbg(SERVER_NAME + ' received error: ' + str(err), ERROR) - msg = self.get_completions_message(None, [('ERROR:', '%s\nLog:%s' % (err, log.get_contents()), '')]) + dbg(SERVER_NAME + " received error: " + str(err), ERROR) + msg = self.get_completions_message(None, [("ERROR:", "%s\nLog:%s" % (err, log.get_contents()), "")]) try: self.send(msg) except socket.error: @@ -359,14 +364,13 @@ def run(self): traceback.print_exception(exc_info[0], exc_info[1], exc_info[2], limit=None, file=s) err = s.getvalue() - dbg(SERVER_NAME + ' received error: ' + str(err), ERROR) + dbg(SERVER_NAME + " received error: " + str(err), ERROR) raise -if __name__ == '__main__': - +if __name__ == "__main__": port = int(sys.argv[1]) # this is from where we want to receive messages. t = CompletionServer(port) - dbg(SERVER_NAME + ' will start', INFO1) + dbg(SERVER_NAME + " will start", INFO1) t.run() diff --git a/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py b/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py index 464f0ddf3..7325d1a88 100644 --- a/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py +++ b/src/debugpy/_vendored/pydevd/pydev_app_engine_debug_startup.py @@ -1,21 +1,22 @@ if False: config = None - - + + # See: https://docs.google.com/document/d/1CCSaRiIWCLgbD3OwmuKsRoHHDfBffbROWyVWWL0ZXN4/edit -if ':' not in config.version_id: +if ":" not in config.version_id: # The default server version_id does not contain ':' - import json + import json import os import sys - + startup = config.python_config.startup_args if not startup: - raise AssertionError('Expected --python_startup_args to be passed from the pydev debugger.') - - setup = json.loads(startup) - pydevd_path = setup['pydevd'] + raise AssertionError("Expected --python_startup_args to be passed from the pydev debugger.") + + setup = json.loads(startup) + pydevd_path = setup["pydevd"] sys.path.append(os.path.dirname(pydevd_path)) - + import pydevd - pydevd.settrace(setup['client'], port=setup['port'], suspend=False, trace_only_current_thread=False) + + pydevd.settrace(setup["client"], port=setup["port"], suspend=False, trace_only_current_thread=False) diff --git a/src/debugpy/_vendored/pydevd/pydev_coverage.py b/src/debugpy/_vendored/pydevd/pydev_coverage.py index 665e87ba9..77324c8f5 100644 --- a/src/debugpy/_vendored/pydevd/pydev_coverage.py +++ b/src/debugpy/_vendored/pydevd/pydev_coverage.py @@ -1,20 +1,20 @@ -''' +""" Entry point module to run code-coverage. -''' +""" def is_valid_py_file(path): - ''' + """ Checks whether the file can be read by the coverage module. This is especially needed for .pyx files and .py files with syntax errors. - ''' + """ import os is_valid = False - if os.path.isfile(path) and not os.path.splitext(path)[1] == '.pyx': + if os.path.isfile(path) and not os.path.splitext(path)[1] == ".pyx": try: - with open(path, 'rb') as f: - compile(f.read(), path, 'exec') + with open(path, "rb") as f: + compile(f.read(), path, "exec") is_valid = True except: pass @@ -26,29 +26,26 @@ def execute(): import sys files = None - if 'combine' not in sys.argv: - - if '--pydev-analyze' in sys.argv: - + if "combine" not in sys.argv: + if "--pydev-analyze" in sys.argv: # Ok, what we want here is having the files passed through stdin (because # there may be too many files for passing in the command line -- we could # just pass a dir and make the find files here, but as that's already # given in the java side, let's just gather that info here). - sys.argv.remove('--pydev-analyze') + sys.argv.remove("--pydev-analyze") s = input() - s = s.replace('\r', '') - s = s.replace('\n', '') + s = s.replace("\r", "") + s = s.replace("\n", "") files = [] invalid_files = [] - for v in s.split('|'): + for v in s.split("|"): if is_valid_py_file(v): files.append(v) else: invalid_files.append(v) if invalid_files: - sys.stderr.write('Invalid files not passed to coverage: %s\n' - % ', '.join(invalid_files)) + sys.stderr.write("Invalid files not passed to coverage: %s\n" % ", ".join(invalid_files)) # Note that in this case we'll already be in the working dir with the coverage files, # so, the coverage file location is not passed. @@ -56,39 +53,40 @@ def execute(): else: # For all commands, the coverage file is configured in pydev, and passed as the first # argument in the command line, so, let's make sure this gets to the coverage module. - os.environ['COVERAGE_FILE'] = sys.argv[1] + os.environ["COVERAGE_FILE"] = sys.argv[1] del sys.argv[1] try: import coverage # @UnresolvedImport except: - sys.stderr.write('Error: coverage module could not be imported\n') - sys.stderr.write('Please make sure that the coverage module ' - '(http://nedbatchelder.com/code/coverage/)\n') - sys.stderr.write('is properly installed in your interpreter: %s\n' % (sys.executable,)) + sys.stderr.write("Error: coverage module could not be imported\n") + sys.stderr.write("Please make sure that the coverage module " "(http://nedbatchelder.com/code/coverage/)\n") + sys.stderr.write("is properly installed in your interpreter: %s\n" % (sys.executable,)) + + import traceback - import traceback;traceback.print_exc() + traceback.print_exc() return - if hasattr(coverage, '__version__'): - version = tuple(map(int, coverage.__version__.split('.')[:2])) + if hasattr(coverage, "__version__"): + version = tuple(map(int, coverage.__version__.split(".")[:2])) if version < (4, 3): - sys.stderr.write('Error: minimum supported coverage version is 4.3.' - '\nFound: %s\nLocation: %s\n' - % ('.'.join(str(x) for x in version), coverage.__file__)) + sys.stderr.write( + "Error: minimum supported coverage version is 4.3." + "\nFound: %s\nLocation: %s\n" % (".".join(str(x) for x in version), coverage.__file__) + ) sys.exit(1) else: - sys.stderr.write('Warning: Could not determine version of python module coverage.' - '\nEnsure coverage version is >= 4.3\n') + sys.stderr.write("Warning: Could not determine version of python module coverage." "\nEnsure coverage version is >= 4.3\n") from coverage.cmdline import main # @UnresolvedImport if files is not None: - sys.argv.append('xml') + sys.argv.append("xml") sys.argv += files main() -if __name__ == '__main__': +if __name__ == "__main__": execute() diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py index b9e88fff3..db606e337 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhook.py @@ -3,41 +3,41 @@ Inputhook management for GUI event loop integration. """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import sys import select -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Constants -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Constants for identifying the GUI toolkits. -GUI_WX = 'wx' -GUI_QT = 'qt' -GUI_QT4 = 'qt4' -GUI_QT5 = 'qt5' -GUI_QT6 = 'qt6' -GUI_GTK = 'gtk' -GUI_TK = 'tk' -GUI_OSX = 'osx' -GUI_GLUT = 'glut' -GUI_PYGLET = 'pyglet' -GUI_GTK3 = 'gtk3' -GUI_NONE = 'none' # i.e. disable - -#----------------------------------------------------------------------------- +GUI_WX = "wx" +GUI_QT = "qt" +GUI_QT4 = "qt4" +GUI_QT5 = "qt5" +GUI_QT6 = "qt6" +GUI_GTK = "gtk" +GUI_TK = "tk" +GUI_OSX = "osx" +GUI_GLUT = "glut" +GUI_PYGLET = "pyglet" +GUI_GTK3 = "gtk3" +GUI_NONE = "none" # i.e. disable + +# ----------------------------------------------------------------------------- # Utilities -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def ignore_CTRL_C(): @@ -49,9 +49,10 @@ def allow_CTRL_C(): """Take CTRL+C into account (not implemented).""" pass -#----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- # Main InputHookManager class -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- class InputHookManager(object): @@ -147,12 +148,14 @@ def enable_wx(self, app=None): """ import wx from distutils.version import LooseVersion as V + wx_version = V(wx.__version__).version # @UndefinedVariable if wx_version < [2, 8]: raise ValueError("requires wxPython >= 2.8, but you have %s" % wx.__version__) # @UndefinedVariable from pydev_ipython.inputhookwx import inputhook_wx + self.set_inputhook(inputhook_wx) self._current_gui = GUI_WX @@ -175,6 +178,7 @@ def disable_wx(self): def enable_qt(self, app=None): from pydev_ipython.qt_for_kernel import QT_API, QT_API_PYQT5, QT_API_PYQT6 + if QT_API == QT_API_PYQT6: self.enable_qt6(app) elif QT_API == QT_API_PYQT5: @@ -205,6 +209,7 @@ def enable_qt4(self, app=None): app = QtGui.QApplication(sys.argv) """ from pydev_ipython.inputhookqt4 import create_inputhook_qt4 + app, inputhook_qt4 = create_inputhook_qt4(self, app) self.set_inputhook(inputhook_qt4) @@ -224,6 +229,7 @@ def disable_qt4(self): def enable_qt5(self, app=None): from pydev_ipython.inputhookqt5 import create_inputhook_qt5 + app, inputhook_qt5 = create_inputhook_qt5(self, app) self.set_inputhook(inputhook_qt5) @@ -239,6 +245,7 @@ def disable_qt5(self): def enable_qt6(self, app=None): from pydev_ipython.inputhookqt6 import create_inputhook_qt6 + app, inputhook_qt6 = create_inputhook_qt6(self, app) self.set_inputhook(inputhook_qt6) @@ -269,6 +276,7 @@ def enable_gtk(self, app=None): IPython. """ from pydev_ipython.inputhookgtk import create_inputhook_gtk + self.set_inputhook(create_inputhook_gtk(self._stdin_file)) self._current_gui = GUI_GTK @@ -307,6 +315,7 @@ def enable_tk(self, app=None): self._apps[GUI_TK] = app from pydev_ipython.inputhooktk import create_inputhook_tk + self.set_inputhook(create_inputhook_tk(app)) return app @@ -318,7 +327,7 @@ def disable_tk(self): self.clear_inputhook() def enable_glut(self, app=None): - """ Enable event loop integration with GLUT. + """Enable event loop integration with GLUT. Parameters ---------- @@ -343,19 +352,16 @@ def enable_glut(self, app=None): """ import OpenGL.GLUT as glut # @UnresolvedImport - from pydev_ipython.inputhookglut import glut_display_mode, \ - glut_close, glut_display, \ - glut_idle, inputhook_glut + from pydev_ipython.inputhookglut import glut_display_mode, glut_close, glut_display, glut_idle, inputhook_glut if GUI_GLUT not in self._apps: - argv = getattr(sys, 'argv', []) + argv = getattr(sys, "argv", []) glut.glutInit(argv) glut.glutInitDisplayMode(glut_display_mode) # This is specific to freeglut if bool(glut.glutSetOption): - glut.glutSetOption(glut.GLUT_ACTION_ON_WINDOW_CLOSE, - glut.GLUT_ACTION_GLUTMAINLOOP_RETURNS) - glut.glutCreateWindow(argv[0] if len(argv) > 0 else '') + glut.glutSetOption(glut.GLUT_ACTION_ON_WINDOW_CLOSE, glut.GLUT_ACTION_GLUTMAINLOOP_RETURNS) + glut.glutCreateWindow(argv[0] if len(argv) > 0 else "") glut.glutReshapeWindow(1, 1) glut.glutHideWindow() glut.glutWMCloseFunc(glut_close) @@ -401,6 +407,7 @@ def enable_pyglet(self, app=None): """ from pydev_ipython.inputhookpyglet import inputhook_pyglet + self.set_inputhook(inputhook_pyglet) self._current_gui = GUI_PYGLET return app @@ -429,6 +436,7 @@ def enable_gtk3(self, app=None): IPython. """ from pydev_ipython.inputhookgtk3 import create_inputhook_gtk3 + self.set_inputhook(create_inputhook_gtk3(self._stdin_file)) self._current_gui = GUI_GTK @@ -440,7 +448,7 @@ def disable_gtk3(self): self.clear_inputhook() def enable_mac(self, app=None): - """ Enable event loop integration with MacOSX. + """Enable event loop integration with MacOSX. We call function pyplot.pause, which updates and displays active figure during pause. It's not MacOSX-specific, but it enables to @@ -452,13 +460,13 @@ def enable_mac(self, app=None): def inputhook_mac(app=None): if self.pyplot_imported: - pyplot = sys.modules['matplotlib.pyplot'] + pyplot = sys.modules["matplotlib.pyplot"] try: pyplot.pause(0.01) except: pass else: - if 'matplotlib.pyplot' in sys.modules: + if "matplotlib.pyplot" in sys.modules: self.pyplot_imported = True self.set_inputhook(inputhook_mac) @@ -535,22 +543,23 @@ def enable_gui(gui=None, app=None): if get_return_control_callback() is None: raise ValueError("A return_control_callback must be supplied as a reference before a gui can be enabled") - guis = {GUI_NONE: clear_inputhook, - GUI_OSX: enable_mac, - GUI_TK: enable_tk, - GUI_GTK: enable_gtk, - GUI_WX: enable_wx, - GUI_QT: enable_qt, - GUI_QT4: enable_qt4, - GUI_QT5: enable_qt5, - GUI_GLUT: enable_glut, - GUI_PYGLET: enable_pyglet, - GUI_GTK3: enable_gtk3, - } + guis = { + GUI_NONE: clear_inputhook, + GUI_OSX: enable_mac, + GUI_TK: enable_tk, + GUI_GTK: enable_gtk, + GUI_WX: enable_wx, + GUI_QT: enable_qt, + GUI_QT4: enable_qt4, + GUI_QT5: enable_qt5, + GUI_GLUT: enable_glut, + GUI_PYGLET: enable_pyglet, + GUI_GTK3: enable_gtk3, + } try: gui_hook = guis[gui] except KeyError: - if gui is None or gui == '': + if gui is None or gui == "": gui_hook = clear_inputhook else: e = "Invalid GUI request %r, valid ones are:%s" % (gui, list(guis.keys())) @@ -570,14 +579,10 @@ def enable_gui(gui=None, app=None): "GUI_PYGLET", "GUI_GTK3", "GUI_NONE", - "ignore_CTRL_C", "allow_CTRL_C", - "InputHookManager", - "inputhook_manager", - "enable_wx", "disable_wx", "enable_qt", @@ -601,10 +606,9 @@ def enable_gui(gui=None, app=None): "set_inputhook", "current_gui", "clear_app_refs", - "stdin_ready", "set_return_control_callback", "get_return_control_callback", "get_inputhook", - - "enable_gui"] + "enable_gui", +] diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py index d65add9b9..feab648dc 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookglut.py @@ -3,12 +3,12 @@ GLUT Inputhook support functions """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # GLUT is quite an old library and it is difficult to ensure proper # integration within IPython since original GLUT does not allow to handle @@ -26,9 +26,9 @@ # them later without modifying the code. This should probably be made available # via IPython options system. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import os import sys from _pydev_bundle._pydev_saved_modules import time @@ -38,9 +38,9 @@ from timeit import default_timer as clock from pydev_ipython.inputhook import stdin_ready -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Constants -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Frame per second : 60 # Should probably be an IPython option @@ -48,34 +48,30 @@ # Display mode : double buffeed + rgba + depth # Should probably be an IPython option -glut_display_mode = (glut.GLUT_DOUBLE | - glut.GLUT_RGBA | - glut.GLUT_DEPTH) +glut_display_mode = glut.GLUT_DOUBLE | glut.GLUT_RGBA | glut.GLUT_DEPTH glutMainLoopEvent = None -if sys.platform == 'darwin': +if sys.platform == "darwin": try: glutCheckLoop = platform.createBaseFunction( - 'glutCheckLoop', dll=platform.GLUT, resultType=None, + "glutCheckLoop", + dll=platform.GLUT, + resultType=None, argTypes=[], - doc='glutCheckLoop( ) -> None', + doc="glutCheckLoop( ) -> None", argNames=(), - ) + ) except AttributeError: - raise RuntimeError( - '''Your glut implementation does not allow interactive sessions''' - '''Consider installing freeglut.''') + raise RuntimeError("""Your glut implementation does not allow interactive sessions""" """Consider installing freeglut.""") glutMainLoopEvent = glutCheckLoop elif glut.HAVE_FREEGLUT: glutMainLoopEvent = glut.glutMainLoopEvent else: - raise RuntimeError( - '''Your glut implementation does not allow interactive sessions. ''' - '''Consider installing freeglut.''') + raise RuntimeError("""Your glut implementation does not allow interactive sessions. """ """Consider installing freeglut.""") -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Callback functions -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def glut_display(): @@ -97,13 +93,13 @@ def glut_close(): def glut_int_handler(signum, frame): # Catch sigint and print the defautl message signal.signal(signal.SIGINT, signal.default_int_handler) - print('\nKeyboardInterrupt') + print("\nKeyboardInterrupt") # Need to reprint the prompt at this stage -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def inputhook_glut(): """Run the pyglet event loop by processing pending events only. diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py index 53006cde9..8911a868b 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk.py @@ -5,32 +5,33 @@ Authors: Brian Granger """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import gtk, gobject # @UnresolvedImport -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def _main_quit(*args, **kwargs): gtk.main_quit() return False + def create_inputhook_gtk(stdin_file): def inputhook_gtk(): gobject.io_add_watch(stdin_file, gobject.IO_IN, _main_quit) gtk.main() return 0 - return inputhook_gtk + return inputhook_gtk diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py index f2ca39f39..198f9b816 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookgtk3.py @@ -4,23 +4,24 @@ Authors: Thomi Richards """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (c) 2012, the IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- from gi.repository import Gtk, GLib # @UnresolvedImport -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + def _main_quit(*args, **kwargs): Gtk.main_quit() @@ -32,4 +33,5 @@ def inputhook_gtk3(): GLib.io_add_watch(stdin_file, GLib.IO_IN, _main_quit) Gtk.main() return 0 + return inputhook_gtk3 diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py index 552930796..76d5f6385 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookpyglet.py @@ -9,16 +9,16 @@ * Fernando Perez """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import os import sys @@ -32,19 +32,22 @@ # window close. For details, see: # http://groups.google.com/group/pyglet-users/browse_thread/thread/47c1aab9aa4a3d23/c22f9e819826799e?#c22f9e819826799e -if sys.platform.startswith('linux'): +if sys.platform.startswith("linux"): + def flip(window): try: window.flip() except AttributeError: pass else: + def flip(window): window.flip() -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + def inputhook_pyglet(): """Run the pyglet event loop by processing pending events only. @@ -63,7 +66,7 @@ def inputhook_pyglet(): for window in pyglet.app.windows: window.switch_to() window.dispatch_events() - window.dispatch_event('on_draw') + window.dispatch_event("on_draw") flip(window) # We need to sleep at this point to keep the idle CPU load diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py index b7e1cf052..e24689ce6 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt4.py @@ -5,16 +5,16 @@ Author: Christian Boos """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import os import signal @@ -25,31 +25,35 @@ from pydev_ipython.qt_for_kernel import QtCore, QtGui from pydev_ipython.inputhook import allow_CTRL_C, ignore_CTRL_C, stdin_ready + # To minimise future merging complexity, rather than edit the entire code base below # we fake InteractiveShell here class InteractiveShell: _instance = None + @classmethod def instance(cls): if cls._instance is None: cls._instance = cls() return cls._instance + def set_hook(self, *args, **kwargs): # We don't consider the pre_prompt_hook because we don't have # KeyboardInterrupts to consider since we are running under PyDev pass -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Module Globals -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- got_kbdint = False sigint_timer = None -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + def create_inputhook_qt4(mgr, app=None): """Create an input hook for running the Qt4 application event loop. @@ -85,7 +89,7 @@ def create_inputhook_qt4(mgr, app=None): # Re-use previously created inputhook if any ip = InteractiveShell.instance() - if hasattr(ip, '_inputhook_qt4'): + if hasattr(ip, "_inputhook_qt4"): return app, ip._inputhook_qt4 # Otherwise create the inputhook_qt4/preprompthook_qt4 pair of @@ -106,7 +110,7 @@ def inputhook_qt4(): try: allow_CTRL_C() app = QtCore.QCoreApplication.instance() - if not app: # shouldn't happen, but safer if it happens anyway... + if not app: # shouldn't happen, but safer if it happens anyway... return 0 app.processEvents(QtCore.QEventLoop.AllEvents, 300) if not stdin_ready(): @@ -154,19 +158,18 @@ def inputhook_qt4(): # # Unfortunately this doesn't work on Windows (SIGINT kills # Python and CTRL_C_EVENT doesn't work). - if(os.name == 'posix'): + if os.name == "posix": pid = os.getpid() - if(not sigint_timer): - sigint_timer = threading.Timer(.01, os.kill, - args=[pid, signal.SIGINT] ) + if not sigint_timer: + sigint_timer = threading.Timer(0.01, os.kill, args=[pid, signal.SIGINT]) sigint_timer.start() else: print("\nKeyboardInterrupt - Ctrl-C again for new prompt") - - except: # NO exceptions are allowed to escape from a ctypes callback + except: # NO exceptions are allowed to escape from a ctypes callback ignore_CTRL_C() from traceback import print_exc + print_exc() print("Got exception from inputhook_qt4, unregistering.") mgr.clear_inputhook() @@ -182,7 +185,7 @@ def preprompthook_qt4(ishell): """ global got_kbdint, sigint_timer - if(sigint_timer): + if sigint_timer: sigint_timer.cancel() sigint_timer = None @@ -191,6 +194,6 @@ def preprompthook_qt4(ishell): got_kbdint = False ip._inputhook_qt4 = inputhook_qt4 - ip.set_hook('pre_prompt_hook', preprompthook_qt4) + ip.set_hook("pre_prompt_hook", preprompthook_qt4) return app, inputhook_qt4 diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py index 15222df3f..8bf61ab12 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt5.py @@ -5,16 +5,16 @@ Author: Christian Boos """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import os import signal @@ -41,17 +41,18 @@ def set_hook(self, *args, **kwargs): # KeyboardInterrupts to consider since we are running under PyDev pass -#----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- # Module Globals -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- got_kbdint = False sigint_timer = None -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def create_inputhook_qt5(mgr, app=None): @@ -85,11 +86,12 @@ def create_inputhook_qt5(mgr, app=None): app = QtCore.QCoreApplication.instance() if app is None: from PyQt5 import QtWidgets + app = QtWidgets.QApplication([" "]) # Re-use previously created inputhook if any ip = InteractiveShell.instance() - if hasattr(ip, '_inputhook_qt5'): + if hasattr(ip, "_inputhook_qt5"): return app, ip._inputhook_qt5 # Otherwise create the inputhook_qt5/preprompthook_qt5 pair of @@ -158,11 +160,10 @@ def inputhook_qt5(): # # Unfortunately this doesn't work on Windows (SIGINT kills # Python and CTRL_C_EVENT doesn't work). - if(os.name == 'posix'): + if os.name == "posix": pid = os.getpid() - if(not sigint_timer): - sigint_timer = threading.Timer(.01, os.kill, - args=[pid, signal.SIGINT]) + if not sigint_timer: + sigint_timer = threading.Timer(0.01, os.kill, args=[pid, signal.SIGINT]) sigint_timer.start() else: print("\nKeyboardInterrupt - Ctrl-C again for new prompt") @@ -170,6 +171,7 @@ def inputhook_qt5(): except: # NO exceptions are allowed to escape from a ctypes callback ignore_CTRL_C() from traceback import print_exc + print_exc() print("Got exception from inputhook_qt5, unregistering.") mgr.clear_inputhook() @@ -185,7 +187,7 @@ def preprompthook_qt5(ishell): """ global got_kbdint, sigint_timer - if(sigint_timer): + if sigint_timer: sigint_timer.cancel() sigint_timer = None @@ -194,6 +196,6 @@ def preprompthook_qt5(ishell): got_kbdint = False ip._inputhook_qt5 = inputhook_qt5 - ip.set_hook('pre_prompt_hook', preprompthook_qt5) + ip.set_hook("pre_prompt_hook", preprompthook_qt5) return app, inputhook_qt5 diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py index 014642f15..0d2a8c4f1 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookqt6.py @@ -5,16 +5,16 @@ Author: Christian Boos, Marijn van Vliet """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import os import signal @@ -41,17 +41,18 @@ def set_hook(self, *args, **kwargs): # KeyboardInterrupts to consider since we are running under PyDev pass -#----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- # Module Globals -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- got_kbdint = False sigint_timer = None -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- def create_inputhook_qt6(mgr, app=None): @@ -85,11 +86,12 @@ def create_inputhook_qt6(mgr, app=None): app = QtCore.QCoreApplication.instance() if app is None: from PyQt6 import QtWidgets + app = QtWidgets.QApplication([" "]) # Re-use previously created inputhook if any ip = InteractiveShell.instance() - if hasattr(ip, '_inputhook_qt6'): + if hasattr(ip, "_inputhook_qt6"): return app, ip._inputhook_qt6 # Otherwise create the inputhook_qt6/preprompthook_qt6 pair of @@ -158,11 +160,10 @@ def inputhook_qt6(): # # Unfortunately this doesn't work on Windows (SIGINT kills # Python and CTRL_C_EVENT doesn't work). - if(os.name == 'posix'): + if os.name == "posix": pid = os.getpid() - if(not sigint_timer): - sigint_timer = threading.Timer(.01, os.kill, - args=[pid, signal.SIGINT]) + if not sigint_timer: + sigint_timer = threading.Timer(0.01, os.kill, args=[pid, signal.SIGINT]) sigint_timer.start() else: print("\nKeyboardInterrupt - Ctrl-C again for new prompt") @@ -170,6 +171,7 @@ def inputhook_qt6(): except: # NO exceptions are allowed to escape from a ctypes callback ignore_CTRL_C() from traceback import print_exc + print_exc() print("Got exception from inputhook_qt6, unregistering.") mgr.clear_inputhook() @@ -185,7 +187,7 @@ def preprompthook_qt6(ishell): """ global got_kbdint, sigint_timer - if(sigint_timer): + if sigint_timer: sigint_timer.cancel() sigint_timer = None @@ -194,6 +196,6 @@ def preprompthook_qt6(ishell): got_kbdint = False ip._inputhook_qt6 = inputhook_qt6 - ip.set_hook('pre_prompt_hook', preprompthook_qt6) + ip.set_hook("pre_prompt_hook", preprompthook_qt6) return app, inputhook_qt6 diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py index e245cc05c..b853c1765 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhooktk.py @@ -2,22 +2,24 @@ # Unlike what IPython does, we need to have an explicit inputhook because tkinter handles # input hook in the C Source code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- from pydev_ipython.inputhook import stdin_ready -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- TCL_DONT_WAIT = 1 << 1 + def create_inputhook_tk(app): def inputhook_tk(): while app.dooneevent(TCL_DONT_WAIT) == 1: if stdin_ready(): break return 0 + return inputhook_tk diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py index c2e4b91d0..455114b65 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/inputhookwx.py @@ -5,16 +5,16 @@ Authors: Robin Dunn, Brian Granger, Ondrej Certik """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2008-2011 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- import sys import signal @@ -25,9 +25,10 @@ from pydev_ipython.inputhook import stdin_ready -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + def inputhook_wx1(): """Run the wx event loop by processing pending events only. @@ -53,8 +54,8 @@ def inputhook_wx1(): pass return 0 -class EventLoopTimer(wx.Timer): # @UndefinedVariable +class EventLoopTimer(wx.Timer): # @UndefinedVariable def __init__(self, func): self.func = func wx.Timer.__init__(self) # @UndefinedVariable @@ -62,8 +63,8 @@ def __init__(self, func): def Notify(self): self.func() -class EventLoopRunner(object): +class EventLoopRunner(object): def Run(self, time): self.evtloop = wx.EventLoop() # @UndefinedVariable self.timer = EventLoopTimer(self.check_stdin) @@ -75,6 +76,7 @@ def check_stdin(self): self.timer.Stop() self.evtloop.Exit() + def inputhook_wx2(): """Run the wx event loop, polling for stdin. @@ -101,6 +103,7 @@ def inputhook_wx2(): pass return 0 + def inputhook_wx3(): """Run the wx event loop by processing pending events only. @@ -114,7 +117,7 @@ def inputhook_wx3(): try: app = wx.GetApp() # @UndefinedVariable if app is not None: - if hasattr(wx, 'IsMainThread'): + if hasattr(wx, "IsMainThread"): assert wx.IsMainThread() # @UndefinedVariable else: assert wx.Thread_IsMain() # @UndefinedVariable @@ -159,7 +162,8 @@ def inputhook_wx3(): pass return 0 -if sys.platform == 'darwin': + +if sys.platform == "darwin": # On OSX, evtloop.Pending() always returns True, regardless of there being # any events pending. As such we can't use implementations 1 or 3 of the # inputhook as those depend on a pending/dispatch loop. diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py b/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py index 6c1fa2dce..ef185b798 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/matplotlibtools.py @@ -1,15 +1,16 @@ - import sys from _pydev_bundle import pydev_log -backends = {'tk': 'TkAgg', - 'gtk': 'GTKAgg', - 'wx': 'WXAgg', - 'qt': 'QtAgg', # Auto-choose qt4/5 - 'qt4': 'Qt4Agg', - 'qt5': 'Qt5Agg', - 'qt6': 'Qt6Agg', - 'osx': 'MacOSX'} +backends = { + "tk": "TkAgg", + "gtk": "GTKAgg", + "wx": "WXAgg", + "qt": "QtAgg", # Auto-choose qt4/5 + "qt4": "Qt4Agg", + "qt5": "Qt5Agg", + "qt6": "Qt6Agg", + "osx": "MacOSX", +} # We also need a reverse backends2guis mapping that will properly choose which # GUI support to activate based on the desired matplotlib backend. For the @@ -18,21 +19,23 @@ backend2gui = dict(zip(backends.values(), backends.keys())) # In the reverse mapping, there are a few extra valid matplotlib backends that # map to the same GUI support -backend2gui['GTK'] = backend2gui['GTKCairo'] = 'gtk' -backend2gui['WX'] = 'wx' -backend2gui['CocoaAgg'] = 'osx' +backend2gui["GTK"] = backend2gui["GTKCairo"] = "gtk" +backend2gui["WX"] = "wx" +backend2gui["CocoaAgg"] = "osx" def do_enable_gui(guiname): from _pydev_bundle.pydev_versioncheck import versionok_for_gui + if versionok_for_gui(): try: from pydev_ipython.inputhook import enable_gui + enable_gui(guiname) except: sys.stderr.write("Failed to enable GUI event loop integration for '%s'\n" % guiname) pydev_log.exception() - elif guiname not in ['none', '', None]: + elif guiname not in ["none", "", None]: # Only print a warning if the guiname was going to do something sys.stderr.write("Debug console: Python version does not support GUI event loop integration for '%s'\n" % guiname) # Return value does not matter, so return back what was sent @@ -41,9 +44,9 @@ def do_enable_gui(guiname): def find_gui_and_backend(): """Return the gui and mpl backend.""" - matplotlib = sys.modules['matplotlib'] + matplotlib = sys.modules["matplotlib"] # WARNING: this assumes matplotlib 1.1 or newer!! - backend = matplotlib.rcParams['backend'] + backend = matplotlib.rcParams["backend"] # In this case, we need to find what the appropriate gui selection call # should be for IPython, so we can activate inputhook accordingly gui = backend2gui.get(backend, None) @@ -51,9 +54,10 @@ def find_gui_and_backend(): def is_interactive_backend(backend): - """ Check if backend is interactive """ - matplotlib = sys.modules['matplotlib'] + """Check if backend is interactive""" + matplotlib = sys.modules["matplotlib"] from matplotlib.rcsetup import interactive_bk, non_interactive_bk # @UnresolvedImport + if backend in interactive_bk: return True elif backend in non_interactive_bk: @@ -63,8 +67,8 @@ def is_interactive_backend(backend): def patch_use(enable_gui_function): - """ Patch matplotlib function 'use' """ - matplotlib = sys.modules['matplotlib'] + """Patch matplotlib function 'use'""" + matplotlib = sys.modules["matplotlib"] def patched_use(*args, **kwargs): matplotlib.real_use(*args, **kwargs) @@ -76,11 +80,11 @@ def patched_use(*args, **kwargs): def patch_is_interactive(): - """ Patch matplotlib function 'use' """ - matplotlib = sys.modules['matplotlib'] + """Patch matplotlib function 'use'""" + matplotlib = sys.modules["matplotlib"] def patched_is_interactive(): - return matplotlib.rcParams['interactive'] + return matplotlib.rcParams["interactive"] matplotlib.real_is_interactive = matplotlib.is_interactive matplotlib.is_interactive = patched_is_interactive @@ -90,7 +94,7 @@ def activate_matplotlib(enable_gui_function): """Set interactive to True for interactive backends. enable_gui_function - Function which enables gui, should be run in the main thread. """ - matplotlib = sys.modules['matplotlib'] + matplotlib = sys.modules["matplotlib"] gui, backend = find_gui_and_backend() is_interactive = is_interactive_backend(backend) if is_interactive: @@ -120,7 +124,7 @@ def flag_calls(func): func() was attempted and succeeded.""" # don't wrap twice - if hasattr(func, 'called'): + if hasattr(func, "called"): return func def wrapper(*args, **kw): @@ -135,7 +139,7 @@ def wrapper(*args, **kw): def activate_pylab(): - pylab = sys.modules['pylab'] + pylab = sys.modules["pylab"] pylab.show._needmain = False # We need to detect at runtime whether show() is called by the user. # For this, we wrap it into a decorator which adds a 'called' flag. @@ -143,7 +147,7 @@ def activate_pylab(): def activate_pyplot(): - pyplot = sys.modules['matplotlib.pyplot'] + pyplot = sys.modules["matplotlib.pyplot"] pyplot.show._needmain = False # We need to detect at runtime whether show() is called by the user. # For this, we wrap it into a decorator which adds a 'called' flag. diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py b/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py index a45672ae8..2b2a46706 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/qt.py @@ -1,4 +1,4 @@ -""" A Qt API selector that can be used to switch between PyQt and PySide. +"""A Qt API selector that can be used to switch between PyQt and PySide. This uses the ETS 4.0 selection pattern of: PySide first, PyQt with API v2. second. @@ -8,13 +8,14 @@ import os -from pydev_ipython.qt_loaders import (load_qt, QT_API_PYSIDE, QT_API_PYSIDE2, - QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6) +from pydev_ipython.qt_loaders import load_qt, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6 -QT_API = os.environ.get('QT_API', None) +QT_API = os.environ.get("QT_API", None) if QT_API not in [QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6, None]: - raise RuntimeError("Invalid Qt API %r, valid values are: %r, %r, %r, %r, %r" % - (QT_API, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6)) + raise RuntimeError( + "Invalid Qt API %r, valid values are: %r, %r, %r, %r, %r" + % (QT_API, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6) + ) if QT_API is None: api_opts = [QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQT5, QT_API_PYQT6] else: diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py index 55d3d4848..efb29bc2b 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_for_kernel.py @@ -1,4 +1,4 @@ -""" Import Qt in a manner suitable for an IPython kernel. +"""Import Qt in a manner suitable for an IPython kernel. This is the import used for the `gui=qt` or `matplotlib=qt` initialization. @@ -35,9 +35,16 @@ import sys from pydev_ipython.version import check_version -from pydev_ipython.qt_loaders import (load_qt, QT_API_PYSIDE, QT_API_PYSIDE2, - QT_API_PYQT, QT_API_PYQT_DEFAULT, - loaded_api, QT_API_PYQT5, QT_API_PYQT6) +from pydev_ipython.qt_loaders import ( + load_qt, + QT_API_PYSIDE, + QT_API_PYSIDE2, + QT_API_PYQT, + QT_API_PYQT_DEFAULT, + loaded_api, + QT_API_PYQT5, + QT_API_PYQT6, +) # Constraints placed on an imported matplotlib @@ -48,57 +55,53 @@ def matplotlib_options(mpl): # #PyDev-779: In pysrc/pydev_ipython/qt_for_kernel.py, matplotlib_options should be replaced with latest from ipython # (i.e.: properly check backend to decide upon qt4/qt5). - backend = mpl.rcParams.get('backend', None) - if backend == 'Qt4Agg': - mpqt = mpl.rcParams.get('backend.qt4', None) + backend = mpl.rcParams.get("backend", None) + if backend == "Qt4Agg": + mpqt = mpl.rcParams.get("backend.qt4", None) if mpqt is None: return None - if mpqt.lower() == 'pyside': + if mpqt.lower() == "pyside": return [QT_API_PYSIDE] - elif mpqt.lower() == 'pyqt4': + elif mpqt.lower() == "pyqt4": return [QT_API_PYQT_DEFAULT] - elif mpqt.lower() == 'pyqt4v2': + elif mpqt.lower() == "pyqt4v2": return [QT_API_PYQT] - raise ImportError("unhandled value for backend.qt4 from matplotlib: %r" % - mpqt) + raise ImportError("unhandled value for backend.qt4 from matplotlib: %r" % mpqt) - elif backend == 'Qt5Agg': - mpqt = mpl.rcParams.get('backend.qt5', None) + elif backend == "Qt5Agg": + mpqt = mpl.rcParams.get("backend.qt5", None) if mpqt is None: return None - if mpqt.lower() == 'pyqt5': + if mpqt.lower() == "pyqt5": return [QT_API_PYQT5] - raise ImportError("unhandled value for backend.qt5 from matplotlib: %r" % - mpqt) + raise ImportError("unhandled value for backend.qt5 from matplotlib: %r" % mpqt) - elif backend == 'Qt6Agg': - mpqt = mpl.rcParams.get('backend.qt6', None) + elif backend == "Qt6Agg": + mpqt = mpl.rcParams.get("backend.qt6", None) if mpqt is None: return None - if mpqt.lower() == 'pyqt6': + if mpqt.lower() == "pyqt6": return [QT_API_PYQT6] - raise ImportError("unhandled value for backend.qt6 from matplotlib: %r" % - mpqt) + raise ImportError("unhandled value for backend.qt6 from matplotlib: %r" % mpqt) # Fallback without checking backend (previous code) - mpqt = mpl.rcParams.get('backend.qt4', None) + mpqt = mpl.rcParams.get("backend.qt4", None) if mpqt is None: - mpqt = mpl.rcParams.get('backend.qt5', None) + mpqt = mpl.rcParams.get("backend.qt5", None) if mpqt is None: - mpqt = mpl.rcParams.get('backend.qt6', None) + mpqt = mpl.rcParams.get("backend.qt6", None) if mpqt is None: return None - if mpqt.lower() == 'pyside': + if mpqt.lower() == "pyside": return [QT_API_PYSIDE] - elif mpqt.lower() == 'pyqt4': + elif mpqt.lower() == "pyqt4": return [QT_API_PYQT_DEFAULT] - elif mpqt.lower() == 'pyqt5': + elif mpqt.lower() == "pyqt5": return [QT_API_PYQT5] - elif mpqt.lower() == 'pyqt6': + elif mpqt.lower() == "pyqt6": return [QT_API_PYQT6] - raise ImportError("unhandled value for qt backend from matplotlib: %r" % - mpqt) + raise ImportError("unhandled value for qt backend from matplotlib: %r" % mpqt) def get_options(): @@ -110,13 +113,13 @@ def get_options(): if loaded is not None: return [loaded] - mpl = sys.modules.get('matplotlib', None) + mpl = sys.modules.get("matplotlib", None) - if mpl is not None and not check_version(mpl.__version__, '1.0.2'): + if mpl is not None and not check_version(mpl.__version__, "1.0.2"): # 1.0.1 only supports PyQt4 v1 return [QT_API_PYQT_DEFAULT] - if os.environ.get('QT_API', None) is None: + if os.environ.get("QT_API", None) is None: # no ETS variable. Ask mpl, then use either return matplotlib_options(mpl) or [QT_API_PYQT_DEFAULT, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT5, QT_API_PYQT6] diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py index f2bff6dc8..a807d3fd8 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/qt_loaders.py @@ -8,20 +8,21 @@ This is used primarily by qt and qt_for_kernel, and shouldn't be accessed directly from the outside """ + import sys from functools import partial from pydev_ipython.version import check_version # Available APIs. -QT_API_PYQT = 'pyqt' -QT_API_PYQTv1 = 'pyqtv1' -QT_API_PYQT_DEFAULT = 'pyqtdefault' # don't set SIP explicitly -QT_API_PYSIDE = 'pyside' -QT_API_PYSIDE2 = 'pyside2' -QT_API_PYSIDE6 = 'pyside6' -QT_API_PYQT5 = 'pyqt5' -QT_API_PYQT6 = 'pyqt6' +QT_API_PYQT = "pyqt" +QT_API_PYQTv1 = "pyqtv1" +QT_API_PYQT_DEFAULT = "pyqtdefault" # don't set SIP explicitly +QT_API_PYSIDE = "pyside" +QT_API_PYSIDE2 = "pyside2" +QT_API_PYSIDE6 = "pyside6" +QT_API_PYQT5 = "pyqt5" +QT_API_PYQT6 = "pyqt6" class ImportDenier(object): @@ -43,10 +44,13 @@ def find_module(self, fullname, path=None): return self def load_module(self, fullname): - raise ImportError(""" + raise ImportError( + """ Importing %s disabled by IPython, which has already imported an Incompatible QT Binding: %s - """ % (fullname, loaded_api())) + """ + % (fullname, loaded_api()) + ) ID = ImportDenier() @@ -55,16 +59,16 @@ def load_module(self, fullname): def commit_api(api): """Commit to a particular API, and trigger ImportErrors on subsequent - dangerous imports""" + dangerous imports""" if api == QT_API_PYSIDE: - ID.forbid('PyQt4') - ID.forbid('PyQt5') - ID.forbid('PyQt6') + ID.forbid("PyQt4") + ID.forbid("PyQt5") + ID.forbid("PyQt6") else: - ID.forbid('PySide') - ID.forbid('PySide2') - ID.forbid('PySide6') + ID.forbid("PySide") + ID.forbid("PySide2") + ID.forbid("PySide6") def loaded_api(): @@ -77,63 +81,65 @@ def loaded_api(): ------- None, 'pyside', 'pyside2', 'pyside6', 'pyqt5', 'pyqt6', or 'pyqtv1' """ - if 'PyQt4.QtCore' in sys.modules: + if "PyQt4.QtCore" in sys.modules: if qtapi_version() == 2: return QT_API_PYQT else: return QT_API_PYQTv1 - elif 'PySide.QtCore' in sys.modules: + elif "PySide.QtCore" in sys.modules: return QT_API_PYSIDE - elif 'PySide2.QtCore' in sys.modules: + elif "PySide2.QtCore" in sys.modules: return QT_API_PYSIDE2 - elif 'PySide6.QtCore' in sys.modules: + elif "PySide6.QtCore" in sys.modules: return QT_API_PYSIDE6 - elif 'PyQt5.QtCore' in sys.modules: + elif "PyQt5.QtCore" in sys.modules: return QT_API_PYQT5 - elif 'PyQt6.QtCore' in sys.modules: + elif "PyQt6.QtCore" in sys.modules: return QT_API_PYQT6 return None def has_binding(api): """Safely check for PyQt or PySide, without importing - submodules + submodules - Parameters - ---------- - api : str [ 'pyqtv1' | 'pyqt' | 'pyside' | 'pyqtdefault'] - Which module to check for + Parameters + ---------- + api : str [ 'pyqtv1' | 'pyqt' | 'pyside' | 'pyqtdefault'] + Which module to check for - Returns - ------- - True if the relevant module appears to be importable + Returns + ------- + True if the relevant module appears to be importable """ # we can't import an incomplete pyside and pyqt4 # this will cause a crash in sip (#1431) # check for complete presence before importing - module_name = {QT_API_PYSIDE: 'PySide', - QT_API_PYSIDE2: 'PySide2', - QT_API_PYSIDE6: 'PySide6', - QT_API_PYQT: 'PyQt4', - QT_API_PYQTv1: 'PyQt4', - QT_API_PYQT_DEFAULT: 'PyQt4', - QT_API_PYQT5: 'PyQt5', - QT_API_PYQT6: 'PyQt6', - } + module_name = { + QT_API_PYSIDE: "PySide", + QT_API_PYSIDE2: "PySide2", + QT_API_PYSIDE6: "PySide6", + QT_API_PYQT: "PyQt4", + QT_API_PYQTv1: "PyQt4", + QT_API_PYQT_DEFAULT: "PyQt4", + QT_API_PYQT5: "PyQt5", + QT_API_PYQT6: "PyQt6", + } module_name = module_name[api] import imp + try: # importing top level PyQt4/PySide module is ok... mod = __import__(module_name) # ...importing submodules is not - imp.find_module('QtCore', mod.__path__) - imp.find_module('QtGui', mod.__path__) - imp.find_module('QtSvg', mod.__path__) + imp.find_module("QtCore", mod.__path__) + imp.find_module("QtGui", mod.__path__) + imp.find_module("QtSvg", mod.__path__) # we can also safely check PySide version if api == QT_API_PYSIDE: - return check_version(mod.__version__, '1.0.3') + return check_version(mod.__version__, "1.0.3") else: return True except ImportError: @@ -152,7 +158,7 @@ def qtapi_version(): except ImportError: return try: - return sip.getapi('QString') + return sip.getapi("QString") except ValueError: return @@ -187,21 +193,20 @@ def import_pyqt4(version=2): import sip if version is not None: - sip.setapi('QString', version) - sip.setapi('QVariant', version) + sip.setapi("QString", version) + sip.setapi("QVariant", version) from PyQt4 import QtGui, QtCore, QtSvg - if not check_version(QtCore.PYQT_VERSION_STR, '4.7'): - raise ImportError("IPython requires PyQt4 >= 4.7, found %s" % - QtCore.PYQT_VERSION_STR) + if not check_version(QtCore.PYQT_VERSION_STR, "4.7"): + raise ImportError("IPython requires PyQt4 >= 4.7, found %s" % QtCore.PYQT_VERSION_STR) # Alias PyQt-specific functions for PySide compatibility. QtCore.Signal = QtCore.pyqtSignal QtCore.Slot = QtCore.pyqtSlot # query for the API version (in case version == None) - version = sip.getapi('QString') + version = sip.getapi("QString") api = QT_API_PYQTv1 if version == 1 else QT_API_PYQT return QtCore, QtGui, QtSvg, api @@ -243,6 +248,7 @@ def import_pyside(): ImportErrors raised within this function are non-recoverable """ from PySide import QtGui, QtCore, QtSvg # @UnresolvedImport + return QtCore, QtGui, QtSvg, QT_API_PYSIDE @@ -253,6 +259,7 @@ def import_pyside2(): ImportErrors raised within this function are non-recoverable """ from PySide2 import QtGui, QtCore, QtSvg # @UnresolvedImport + return QtCore, QtGui, QtSvg, QT_API_PYSIDE2 @@ -263,6 +270,7 @@ def import_pyside6(): ImportErrors raised within this function are non-recoverable """ from PySide6 import QtGui, QtCore, QtSvg # @UnresolvedImport + return QtCore, QtGui, QtSvg, QT_API_PYSIDE6 @@ -292,23 +300,23 @@ def load_qt(api_options): bindings (either becaues they aren't installed, or because an incompatible library has already been installed) """ - loaders = {QT_API_PYSIDE: import_pyside, - QT_API_PYSIDE2: import_pyside2, - QT_API_PYSIDE6: import_pyside6, - QT_API_PYQT: import_pyqt4, - QT_API_PYQTv1: partial(import_pyqt4, version=1), - QT_API_PYQT_DEFAULT: partial(import_pyqt4, version=None), - QT_API_PYQT5: import_pyqt5, - QT_API_PYQT6: import_pyqt6, - } + loaders = { + QT_API_PYSIDE: import_pyside, + QT_API_PYSIDE2: import_pyside2, + QT_API_PYSIDE6: import_pyside6, + QT_API_PYQT: import_pyqt4, + QT_API_PYQTv1: partial(import_pyqt4, version=1), + QT_API_PYQT_DEFAULT: partial(import_pyqt4, version=None), + QT_API_PYQT5: import_pyqt5, + QT_API_PYQT6: import_pyqt6, + } for api in api_options: - if api not in loaders: raise RuntimeError( - "Invalid Qt API %r, valid values are: %r, %r, %r, %r, %r, %r, %r" % - (api, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, - QT_API_PYQTv1, QT_API_PYQT_DEFAULT, QT_API_PYQT5, QT_API_PYQT6)) + "Invalid Qt API %r, valid values are: %r, %r, %r, %r, %r, %r, %r" + % (api, QT_API_PYSIDE, QT_API_PYSIDE2, QT_API_PYQT, QT_API_PYQTv1, QT_API_PYQT_DEFAULT, QT_API_PYQT5, QT_API_PYQT6) + ) if not can_import(api): continue @@ -319,7 +327,8 @@ def load_qt(api_options): commit_api(api) return result else: - raise ImportError(""" + raise ImportError( + """ Could not load requested Qt binding. Please ensure that PyQt4 >= 4.7 or PySide >= 1.0.3 is available, and only one is imported per session. @@ -332,11 +341,15 @@ def load_qt(api_options): PySide2 installed: %s PySide6 installed: %s Tried to load: %r - """ % (loaded_api(), - has_binding(QT_API_PYQT), - has_binding(QT_API_PYQT5), - has_binding(QT_API_PYQT6), - has_binding(QT_API_PYSIDE), - has_binding(QT_API_PYSIDE2), - has_binding(QT_API_PYSIDE6), - api_options)) + """ + % ( + loaded_api(), + has_binding(QT_API_PYQT), + has_binding(QT_API_PYQT5), + has_binding(QT_API_PYQT6), + has_binding(QT_API_PYSIDE), + has_binding(QT_API_PYSIDE2), + has_binding(QT_API_PYSIDE6), + api_options, + ) + ) diff --git a/src/debugpy/_vendored/pydevd/pydev_ipython/version.py b/src/debugpy/_vendored/pydevd/pydev_ipython/version.py index 1de0047e6..6837ded53 100644 --- a/src/debugpy/_vendored/pydevd/pydev_ipython/version.py +++ b/src/debugpy/_vendored/pydevd/pydev_ipython/version.py @@ -5,22 +5,23 @@ It is a bit ridiculous that we need these. """ -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Copyright (C) 2013 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Imports -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- from distutils.version import LooseVersion -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- # Code -#----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + def check_version(v, check): """check version string v >= check @@ -33,4 +34,3 @@ def check_version(v, check): return LooseVersion(v) >= LooseVersion(check) except TypeError: return True - diff --git a/src/debugpy/_vendored/pydevd/pydev_pysrc.py b/src/debugpy/_vendored/pydevd/pydev_pysrc.py index b9ed49e80..f02d9fd8f 100644 --- a/src/debugpy/_vendored/pydevd/pydev_pysrc.py +++ b/src/debugpy/_vendored/pydevd/pydev_pysrc.py @@ -1 +1 @@ -'''An empty file in pysrc that can be imported (from sitecustomize) to find the location of pysrc''' \ No newline at end of file +"""An empty file in pysrc that can be imported (from sitecustomize) to find the location of pysrc""" diff --git a/src/debugpy/_vendored/pydevd/pydev_run_in_console.py b/src/debugpy/_vendored/pydevd/pydev_run_in_console.py index a87a0e4b3..bffc88c9d 100644 --- a/src/debugpy/_vendored/pydevd/pydev_run_in_console.py +++ b/src/debugpy/_vendored/pydevd/pydev_run_in_console.py @@ -1,6 +1,6 @@ -''' +""" Entry point module to run a file in the interactive console. -''' +""" import os import sys import traceback @@ -17,7 +17,7 @@ def run_file(file, globals=None, locals=None, is_module=False): module_name = None entry_point_fn = None if is_module: - file, _, entry_point_fn = file.partition(':') + file, _, entry_point_fn = file.partition(":") module_name = file filename = get_fullname(file) if filename is None: @@ -27,16 +27,16 @@ def run_file(file, globals=None, locals=None, is_module=False): file = filename if os.path.isdir(file): - new_target = os.path.join(file, '__main__.py') + new_target = os.path.join(file, "__main__.py") if os.path.isfile(new_target): file = new_target if globals is None: - m = save_main_module(file, 'pydev_run_in_console') + m = save_main_module(file, "pydev_run_in_console") globals = m.__dict__ try: - globals['__builtins__'] = __builtins__ + globals["__builtins__"] = __builtins__ except NameError: pass # Not there on Jython... @@ -46,7 +46,7 @@ def run_file(file, globals=None, locals=None, is_module=False): if not is_module: sys.path.insert(0, os.path.split(file)[0]) - print('Running %s' % file) + print("Running %s" % file) try: if not is_module: pydev_imports.execfile(file, globals, locals) # execute the script @@ -61,6 +61,7 @@ def run_file(file, globals=None, locals=None, is_module=False): else: # Run with the -m switch from _pydevd_bundle import pydevd_runpy + pydevd_runpy._run_module_as_main(module_name) except: traceback.print_exc() @@ -69,7 +70,7 @@ def run_file(file, globals=None, locals=None, is_module=False): def skip_successful_exit(*args): - """ System exit in file shouldn't kill interpreter (i.e. in `timeit`)""" + """System exit in file shouldn't kill interpreter (i.e. in `timeit`)""" if len(args) == 1 and args[0] in (0, None): pass else: @@ -77,38 +78,38 @@ def skip_successful_exit(*args): def process_args(argv): - setup_args = {'file': '', 'module': False} + setup_args = {"file": "", "module": False} - setup_args['port'] = argv[1] + setup_args["port"] = argv[1] del argv[1] - setup_args['client_port'] = argv[1] + setup_args["client_port"] = argv[1] del argv[1] module_flag = "--module" if module_flag in argv: i = argv.index(module_flag) if i != -1: - setup_args['module'] = True - setup_args['file'] = argv[i + 1] + setup_args["module"] = True + setup_args["file"] = argv[i + 1] del sys.argv[i] else: - setup_args['file'] = argv[1] + setup_args["file"] = argv[1] del argv[0] return setup_args -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= -if __name__ == '__main__': +# ======================================================================================================================= +if __name__ == "__main__": setup = process_args(sys.argv) - port = setup['port'] - client_port = setup['client_port'] - file = setup['file'] - is_module = setup['module'] + port = setup["port"] + client_port = setup["client_port"] + file = setup["file"] + is_module = setup["module"] from _pydev_bundle import pydev_localhost @@ -125,9 +126,7 @@ def process_args(argv): connect_status_queue = _queue.Queue() interpreter = InterpreterInterface(host, int(client_port), threading.current_thread(), connect_status_queue=connect_status_queue) - server_thread = threading.Thread(target=start_console_server, - name='ServerThread', - args=(host, int(port), interpreter)) + server_thread = threading.Thread(target=start_console_server, name="ServerThread", args=(host, int(port), interpreter)) server_thread.daemon = True server_thread.start() diff --git a/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py b/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py index 8b51eba78..f683ae50e 100644 --- a/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py +++ b/src/debugpy/_vendored/pydevd/pydev_sitecustomize/sitecustomize.py @@ -1,4 +1,4 @@ -''' +""" This module will: - change the input() and raw_input() commands to change \r\n or \r into \n - execute the user site customize -- if available @@ -7,10 +7,11 @@ Up to PyDev 3.4 it also was setting the default encoding, but it was removed because of differences when running from a shell (i.e.: now we just set the PYTHONIOENCODING related to that -- which is properly treated on Py 2.7 onwards). -''' -DEBUG = 0 #0 or 1 because of jython +""" +DEBUG = 0 # 0 or 1 because of jython import sys + encoding = None IS_PYTHON_3_ONWARDS = 0 @@ -18,15 +19,17 @@ try: IS_PYTHON_3_ONWARDS = sys.version_info[0] >= 3 except: - #That's OK, not all versions of python have sys.version_info + # That's OK, not all versions of python have sys.version_info if DEBUG: - import traceback;traceback.print_exc() #@Reimport + import traceback + + traceback.print_exc() # @Reimport -#----------------------------------------------------------------------------------------------------------------------- -#Line buffering +# ----------------------------------------------------------------------------------------------------------------------- +# Line buffering if IS_PYTHON_3_ONWARDS: - #Python 3 has a bug (http://bugs.python.org/issue4705) in which -u doesn't properly make output/input unbuffered - #so, we need to enable that ourselves here. + # Python 3 has a bug (http://bugs.python.org/issue4705) in which -u doesn't properly make output/input unbuffered + # so, we need to enable that ourselves here. try: sys.stdout._line_buffering = True except: @@ -42,50 +45,55 @@ try: - import org.python.core.PyDictionary #@UnresolvedImport @UnusedImport -- just to check if it could be valid + import org.python.core.PyDictionary # @UnresolvedImport @UnusedImport -- just to check if it could be valid + def dict_contains(d, key): return d.has_key(key) except: try: - #Py3k does not have has_key anymore, and older versions don't have __contains__ + # Py3k does not have has_key anymore, and older versions don't have __contains__ dict_contains = dict.__contains__ except: try: dict_contains = dict.has_key except NameError: + def dict_contains(d, key): return d.has_key(key) + def install_breakpointhook(): def custom_sitecustomize_breakpointhook(*args, **kwargs): import os - hookname = os.getenv('PYTHONBREAKPOINT') + + hookname = os.getenv("PYTHONBREAKPOINT") if ( - hookname is not None - and len(hookname) > 0 - and hasattr(sys, '__breakpointhook__') - and sys.__breakpointhook__ != custom_sitecustomize_breakpointhook - ): + hookname is not None + and len(hookname) > 0 + and hasattr(sys, "__breakpointhook__") + and sys.__breakpointhook__ != custom_sitecustomize_breakpointhook + ): sys.__breakpointhook__(*args, **kwargs) else: sys.path.append(os.path.dirname(os.path.dirname(__file__))) import pydevd - kwargs.setdefault('stop_at_frame', sys._getframe().f_back) + + kwargs.setdefault("stop_at_frame", sys._getframe().f_back) pydevd.settrace(*args, **kwargs) if sys.version_info[0:2] >= (3, 7): - # There are some choices on how to provide the breakpoint hook. Namely, we can provide a + # There are some choices on how to provide the breakpoint hook. Namely, we can provide a # PYTHONBREAKPOINT which provides the import path for a method to be executed or we # can override sys.breakpointhook. # pydevd overrides sys.breakpointhook instead of providing an environment variable because - # it's possible that the debugger starts the user program but is not available in the + # it's possible that the debugger starts the user program but is not available in the # PYTHONPATH (and would thus fail to be imported if PYTHONBREAKPOINT was set to pydevd.settrace). # Note that the implementation still takes PYTHONBREAKPOINT in account (so, if it was provided # by someone else, it'd still work). sys.breakpointhook = custom_sitecustomize_breakpointhook else: if sys.version_info[0] >= 3: - import builtins as __builtin__ # Py3 + import builtins as __builtin__ # Py3 else: import __builtin__ @@ -94,144 +102,166 @@ def custom_sitecustomize_breakpointhook(*args, **kwargs): __builtin__.breakpoint = custom_sitecustomize_breakpointhook sys.__breakpointhook__ = custom_sitecustomize_breakpointhook + # Install the breakpoint hook at import time. install_breakpointhook() -#----------------------------------------------------------------------------------------------------------------------- -#now that we've finished the needed pydev sitecustomize, let's run the default one (if available) +# ----------------------------------------------------------------------------------------------------------------------- +# now that we've finished the needed pydev sitecustomize, let's run the default one (if available) -#Ok, some weirdness going on in Python 3k: when removing this module from the sys.module to import the 'real' -#sitecustomize, all the variables in this scope become None (as if it was garbage-collected), so, the the reference -#below is now being kept to create a cyclic reference so that it neven dies) -__pydev_sitecustomize_module__ = sys.modules.get('sitecustomize') #A ref to this module +# Ok, some weirdness going on in Python 3k: when removing this module from the sys.module to import the 'real' +# sitecustomize, all the variables in this scope become None (as if it was garbage-collected), so, the the reference +# below is now being kept to create a cyclic reference so that it neven dies) +__pydev_sitecustomize_module__ = sys.modules.get("sitecustomize") # A ref to this module -#remove the pydev site customize (and the pythonpath for it) +# remove the pydev site customize (and the pythonpath for it) paths_removed = [] try: for c in sys.path[:]: - #Pydev controls the whole classpath in Jython already, so, we don't want a a duplicate for - #what we've already added there (this is needed to support Jython 2.5b1 onwards -- otherwise, as - #we added the sitecustomize to the pythonpath and to the classpath, we'd have to remove it from the - #classpath too -- and I don't think there's a way to do that... or not?) - if c.find('pydev_sitecustomize') != -1 or c == '__classpath__' or c == '__pyclasspath__' or \ - c == '__classpath__/' or c == '__pyclasspath__/' or c == '__classpath__\\' or c == '__pyclasspath__\\': + # Pydev controls the whole classpath in Jython already, so, we don't want a a duplicate for + # what we've already added there (this is needed to support Jython 2.5b1 onwards -- otherwise, as + # we added the sitecustomize to the pythonpath and to the classpath, we'd have to remove it from the + # classpath too -- and I don't think there's a way to do that... or not?) + if ( + c.find("pydev_sitecustomize") != -1 + or c == "__classpath__" + or c == "__pyclasspath__" + or c == "__classpath__/" + or c == "__pyclasspath__/" + or c == "__classpath__\\" + or c == "__pyclasspath__\\" + ): sys.path.remove(c) - if c.find('pydev_sitecustomize') == -1: - #We'll re-add any paths removed but the pydev_sitecustomize we added from pydev. + if c.find("pydev_sitecustomize") == -1: + # We'll re-add any paths removed but the pydev_sitecustomize we added from pydev. paths_removed.append(c) - if dict_contains(sys.modules, 'sitecustomize'): - del sys.modules['sitecustomize'] #this module + if dict_contains(sys.modules, "sitecustomize"): + del sys.modules["sitecustomize"] # this module except: - #print the error... should never happen (so, always show, and not only on debug)! - import traceback;traceback.print_exc() #@Reimport + # print the error... should never happen (so, always show, and not only on debug)! + import traceback + + traceback.print_exc() # @Reimport else: - #Now, execute the default sitecustomize + # Now, execute the default sitecustomize try: - import sitecustomize #@UnusedImport + import sitecustomize # @UnusedImport + sitecustomize.__pydev_sitecustomize_module__ = __pydev_sitecustomize_module__ except: pass - if not dict_contains(sys.modules, 'sitecustomize'): - #If there was no sitecustomize, re-add the pydev sitecustomize (pypy gives a KeyError if it's not there) - sys.modules['sitecustomize'] = __pydev_sitecustomize_module__ + if not dict_contains(sys.modules, "sitecustomize"): + # If there was no sitecustomize, re-add the pydev sitecustomize (pypy gives a KeyError if it's not there) + sys.modules["sitecustomize"] = __pydev_sitecustomize_module__ try: if paths_removed: if sys is None: import sys if sys is not None: - #And after executing the default sitecustomize, restore the paths (if we didn't remove it before, - #the import sitecustomize would recurse). + # And after executing the default sitecustomize, restore the paths (if we didn't remove it before, + # the import sitecustomize would recurse). sys.path.extend(paths_removed) except: - #print the error... should never happen (so, always show, and not only on debug)! - import traceback;traceback.print_exc() #@Reimport - + # print the error... should never happen (so, always show, and not only on debug)! + import traceback + traceback.print_exc() # @Reimport if sys.version_info[0] < 3: try: - #Redefine input and raw_input only after the original sitecustomize was executed - #(because otherwise, the original raw_input and input would still not be defined) + # Redefine input and raw_input only after the original sitecustomize was executed + # (because otherwise, the original raw_input and input would still not be defined) import __builtin__ + original_raw_input = __builtin__.raw_input original_input = __builtin__.input - - def raw_input(prompt=''): - #the original raw_input would only remove a trailing \n, so, at - #this point if we had a \r\n the \r would remain (which is valid for eclipse) - #so, let's remove the remaining \r which python didn't expect. + def raw_input(prompt=""): + # the original raw_input would only remove a trailing \n, so, at + # this point if we had a \r\n the \r would remain (which is valid for eclipse) + # so, let's remove the remaining \r which python didn't expect. ret = original_raw_input(prompt) - if ret.endswith('\r'): + if ret.endswith("\r"): return ret[:-1] return ret + raw_input.__doc__ = original_raw_input.__doc__ - def input(prompt=''): - #input must also be rebinded for using the new raw_input defined + def input(prompt=""): + # input must also be rebinded for using the new raw_input defined return eval(raw_input(prompt)) - input.__doc__ = original_input.__doc__ + input.__doc__ = original_input.__doc__ __builtin__.raw_input = raw_input __builtin__.input = input except: - #Don't report errors at this stage + # Don't report errors at this stage if DEBUG: - import traceback;traceback.print_exc() #@Reimport + import traceback + + traceback.print_exc() # @Reimport else: try: - import builtins #Python 3.0 does not have the __builtin__ module @UnresolvedImport + import builtins # Python 3.0 does not have the __builtin__ module @UnresolvedImport + original_input = builtins.input - def input(prompt=''): - #the original input would only remove a trailing \n, so, at - #this point if we had a \r\n the \r would remain (which is valid for eclipse) - #so, let's remove the remaining \r which python didn't expect. + + def input(prompt=""): + # the original input would only remove a trailing \n, so, at + # this point if we had a \r\n the \r would remain (which is valid for eclipse) + # so, let's remove the remaining \r which python didn't expect. ret = original_input(prompt) - if ret.endswith('\r'): + if ret.endswith("\r"): return ret[:-1] return ret + input.__doc__ = original_input.__doc__ builtins.input = input except: - #Don't report errors at this stage + # Don't report errors at this stage if DEBUG: - import traceback;traceback.print_exc() #@Reimport + import traceback + traceback.print_exc() # @Reimport try: - #The original getpass doesn't work from the eclipse console, so, let's put a replacement - #here (note that it'll not go into echo mode in the console, so, what' the user writes - #will actually be seen) - #Note: same thing from the fix_getpass module -- but we don't want to import it in this - #custom sitecustomize. + # The original getpass doesn't work from the eclipse console, so, let's put a replacement + # here (note that it'll not go into echo mode in the console, so, what' the user writes + # will actually be seen) + # Note: same thing from the fix_getpass module -- but we don't want to import it in this + # custom sitecustomize. def fix_get_pass(): try: import getpass except ImportError: - return #If we can't import it, we can't fix it + return # If we can't import it, we can't fix it import warnings - fallback = getattr(getpass, 'fallback_getpass', None) # >= 2.6 + + fallback = getattr(getpass, "fallback_getpass", None) # >= 2.6 if not fallback: - fallback = getpass.default_getpass # <= 2.5 + fallback = getpass.default_getpass # <= 2.5 getpass.getpass = fallback - if hasattr(getpass, 'GetPassWarning'): + if hasattr(getpass, "GetPassWarning"): warnings.simplefilter("ignore", category=getpass.GetPassWarning) + fix_get_pass() except: - #Don't report errors at this stage + # Don't report errors at this stage if DEBUG: - import traceback;traceback.print_exc() #@Reimport + import traceback + + traceback.print_exc() # @Reimport diff --git a/src/debugpy/_vendored/pydevd/pydevconsole.py b/src/debugpy/_vendored/pydevd/pydevconsole.py index 6b1378887..342ca1527 100644 --- a/src/debugpy/_vendored/pydevd/pydevconsole.py +++ b/src/debugpy/_vendored/pydevd/pydevconsole.py @@ -1,8 +1,9 @@ -''' +""" Entry point module to start the interactive console. -''' +""" from _pydev_bundle._pydev_saved_modules import thread, _code from _pydevd_bundle.pydevd_constants import IS_JYTHON + start_new_thread = thread.start_new_thread from _pydevd_bundle.pydevconsole_code import InteractiveConsole @@ -30,7 +31,6 @@ class Command: - def __init__(self, interpreter, code_fragment): """ :type code_fragment: CodeFragment @@ -42,12 +42,12 @@ def __init__(self, interpreter, code_fragment): def symbol_for_fragment(code_fragment): if code_fragment.is_single_line: - symbol = 'single' + symbol = "single" else: if IS_JYTHON: - symbol = 'single' # Jython doesn't support exec + symbol = "single" # Jython doesn't support exec else: - symbol = 'exec' + symbol = "exec" return symbol symbol_for_fragment = staticmethod(symbol_for_fragment) @@ -56,7 +56,7 @@ def run(self): text = self.code_fragment.text symbol = self.symbol_for_fragment(self.code_fragment) - self.more = self.interpreter.runsource(text, '', symbol) + self.more = self.interpreter.runsource(text, "", symbol) try: @@ -68,19 +68,20 @@ def run(self): # Pull in runfile, the interface to UMD that wraps execfile from _pydev_bundle.pydev_umd import runfile, _set_globals_function + if sys.version_info[0] >= 3: __builtin__.runfile = runfile else: __builtin__.runfile = runfile -#======================================================================================================================= +# ======================================================================================================================= # InterpreterInterface -#======================================================================================================================= +# ======================================================================================================================= class InterpreterInterface(BaseInterpreterInterface): - ''' - The methods in this class should be registered in the xml-rpc server. - ''' + """ + The methods in this class should be registered in the xml-rpc server. + """ def __init__(self, host, client_port, mainThread, connect_status_queue=None): BaseInterpreterInterface.__init__(self, mainThread, connect_status_queue) @@ -112,7 +113,7 @@ def close(self): sys.exit(0) def get_greeting_msg(self): - return 'PyDev console: starting.\n' + return "PyDev console: starting.\n" class _ProcessExecQueueHelper: @@ -136,8 +137,8 @@ def init_set_return_control_back(interpreter): from pydev_ipython.inputhook import set_return_control_callback def return_control(): - ''' A function that the inputhooks can call (via inputhook.stdin_ready()) to find - out if they should cede control and return ''' + """A function that the inputhooks can call (via inputhook.stdin_ready()) to find + out if they should cede control and return""" if _ProcessExecQueueHelper._debug_hook: # Some of the input hooks check return control without doing # a single operation, so we don't return True on every @@ -164,13 +165,13 @@ def init_mpl_in_console(interpreter): activate_mpl_if_already_imported(interpreter) from _pydev_bundle.pydev_import_hook import import_hook_manager + for mod in list(interpreter.mpl_modules_for_patching): import_hook_manager.add_module_name(mod, interpreter.mpl_modules_for_patching.pop(mod)) -if sys.platform != 'win32': - - if not hasattr(os, 'kill'): # Jython may not have it. +if sys.platform != "win32": + if not hasattr(os, "kill"): # Jython may not have it. def pid_exists(pid): return True @@ -183,6 +184,7 @@ def pid_exists(pid): # no longer running, so, we need to be 100% sure it actually exited). import errno + if pid == 0: # According to "man 2 kill" PID 0 has a special meaning: # it refers to < 1 - expression = str(expression.replace('@LINE@', '\n')) + is_multiline = expression.count("@LINE@") > 1 + expression = str(expression.replace("@LINE@", "\n")) # Not using frame.f_globals because of https://sourceforge.net/tracker2/?func=detail&aid=2541355&group_id=85796&atid=577329 # (Names not resolved in generator expression in method) @@ -581,16 +588,17 @@ def console_exec(thread_id, frame_id, expression, dbg): return False -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= -if __name__ == '__main__': +# ======================================================================================================================= +if __name__ == "__main__": # Important: don't use this module directly as the __main__ module, rather, import itself as pydevconsole # so that we don't get multiple pydevconsole modules if it's executed directly (otherwise we'd have multiple # representations of its classes). # See: https://sw-brainwy.rhcloud.com/tracker/PyDev/446: # 'Variables' and 'Expressions' views stopped working when debugging interactive console import pydevconsole + sys.stdin = pydevconsole.BaseStdIn(sys.stdin) port, client_port = sys.argv[1:3] from _pydev_bundle import pydev_localhost diff --git a/src/debugpy/_vendored/pydevd/pydevd.py b/src/debugpy/_vendored/pydevd/pydevd.py index ae865b161..3152ce28b 100644 --- a/src/debugpy/_vendored/pydevd/pydevd.py +++ b/src/debugpy/_vendored/pydevd/pydevd.py @@ -1,11 +1,14 @@ -''' +""" Entry point module (keep at root): This module starts the debugger. -''' +""" import sys # @NoMove + if sys.version_info[:2] < (3, 6): - raise RuntimeError('The PyDev.Debugger requires Python 3.6 onwards to be run. If you need to use an older Python version, use an older version of the debugger.') + raise RuntimeError( + "The PyDev.Debugger requires Python 3.6 onwards to be run. If you need to use an older Python version, use an older version of the debugger." + ) import os try: @@ -20,6 +23,8 @@ # Import this first as it'll check for shadowed modules and will make sure that we import # things as needed for gevent. from _pydevd_bundle import pydevd_constants +from typing import Optional, Tuple +from types import FrameType import atexit import dis @@ -34,29 +39,63 @@ import functools import pydevd_file_utils +from _pydevd_bundle.pydevd_dont_trace_files import LIB_FILES_IN_DONT_TRACE_DIRS from _pydev_bundle import pydev_imports, pydev_log from _pydev_bundle._pydev_filesystem_encoding import getfilesystemencoding from _pydev_bundle.pydev_is_thread_alive import is_thread_alive from _pydev_bundle.pydev_override import overrides -from _pydev_bundle._pydev_saved_modules import threading, time, thread +from _pydev_bundle._pydev_saved_modules import threading, time, thread, ThreadingEvent from _pydevd_bundle import pydevd_extension_utils, pydevd_frame_utils from _pydevd_bundle.pydevd_filtering import FilesFiltering, glob_matches_path from _pydevd_bundle import pydevd_io, pydevd_vm_type, pydevd_defaults from _pydevd_bundle import pydevd_utils from _pydevd_bundle import pydevd_runpy from _pydev_bundle.pydev_console_utils import DebugConsoleStdIn -from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info +from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info, remove_additional_info from _pydevd_bundle.pydevd_breakpoints import ExceptionBreakpoint, get_exception_breakpoint -from _pydevd_bundle.pydevd_comm_constants import (CMD_THREAD_SUSPEND, CMD_STEP_INTO, CMD_SET_BREAK, - CMD_STEP_INTO_MY_CODE, CMD_STEP_OVER, CMD_SMART_STEP_INTO, CMD_RUN_TO_LINE, - CMD_SET_NEXT_STATEMENT, CMD_STEP_RETURN, CMD_ADD_EXCEPTION_BREAK, CMD_STEP_RETURN_MY_CODE, - CMD_STEP_OVER_MY_CODE, constant_to_str, CMD_STEP_INTO_COROUTINE) -from _pydevd_bundle.pydevd_constants import (get_thread_id, get_current_thread_id, - DebugInfoHolder, PYTHON_SUSPEND, STATE_SUSPEND, STATE_RUN, get_frame, - clear_cached_thread_id, INTERACTIVE_MODE_AVAILABLE, SHOW_DEBUG_INFO_ENV, NULL, - NO_FTRACE, IS_IRONPYTHON, JSON_PROTOCOL, IS_CPYTHON, HTTP_JSON_PROTOCOL, USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, call_only_once, - ForkSafeLock, IGNORE_BASENAMES_STARTING_WITH, EXCEPTION_TYPE_UNHANDLED, SUPPORT_GEVENT, - PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING, PYDEVD_IPYTHON_CONTEXT) +from _pydevd_bundle.pydevd_comm_constants import ( + CMD_THREAD_SUSPEND, + CMD_STEP_INTO, + CMD_SET_BREAK, + CMD_STEP_INTO_MY_CODE, + CMD_STEP_OVER, + CMD_SMART_STEP_INTO, + CMD_RUN_TO_LINE, + CMD_SET_NEXT_STATEMENT, + CMD_STEP_RETURN, + CMD_ADD_EXCEPTION_BREAK, + CMD_STEP_RETURN_MY_CODE, + CMD_STEP_OVER_MY_CODE, + constant_to_str, + CMD_STEP_INTO_COROUTINE, +) +from _pydevd_bundle.pydevd_constants import ( + get_thread_id, + get_current_thread_id, + DebugInfoHolder, + PYTHON_SUSPEND, + STATE_SUSPEND, + STATE_RUN, + get_frame, + clear_cached_thread_id, + INTERACTIVE_MODE_AVAILABLE, + SHOW_DEBUG_INFO_ENV, + NULL, + NO_FTRACE, + IS_IRONPYTHON, + JSON_PROTOCOL, + IS_CPYTHON, + HTTP_JSON_PROTOCOL, + USE_CUSTOM_SYS_CURRENT_FRAMES_MAP, + call_only_once, + ForkSafeLock, + IGNORE_BASENAMES_STARTING_WITH, + EXCEPTION_TYPE_UNHANDLED, + SUPPORT_GEVENT, + PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING, + PYDEVD_IPYTHON_CONTEXT, + PYDEVD_USE_SYS_MONITORING, +) from _pydevd_bundle.pydevd_defaults import PydevdCustomization # Note: import alias used on pydev_monkey. from _pydevd_bundle.pydevd_custom_frames import CustomFramesContainer, custom_frames_container_init from _pydevd_bundle.pydevd_dont_trace_files import DONT_TRACE, PYDEV_FILE, LIB_FILE, DONT_TRACE_DIRS @@ -64,26 +103,46 @@ from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, remove_exception_from_frame from _pydevd_bundle.pydevd_net_command_factory_xml import NetCommandFactory from _pydevd_bundle.pydevd_trace_dispatch import ( - trace_dispatch as _trace_dispatch, global_cache_skips, global_cache_frame_skips, fix_top_level_trace_and_get_trace_func, USING_CYTHON) -from _pydevd_bundle.pydevd_utils import save_main_module, is_current_thread_main_thread, \ - import_attr_from_module -from _pydevd_frame_eval.pydevd_frame_eval_main import ( - frame_eval_func, dummy_trace_dispatch, USING_FRAME_EVAL) + trace_dispatch as _trace_dispatch, + global_cache_skips, + global_cache_frame_skips, + fix_top_level_trace_and_get_trace_func, + USING_CYTHON, +) +from _pydevd_bundle.pydevd_utils import save_main_module, is_current_thread_main_thread, import_attr_from_module +from _pydevd_frame_eval.pydevd_frame_eval_main import frame_eval_func, dummy_trace_dispatch, USING_FRAME_EVAL import pydev_ipython # @UnusedImport from _pydevd_bundle.pydevd_source_mapping import SourceMapping -from _pydevd_bundle.pydevd_concurrency_analyser.pydevd_concurrency_logger import ThreadingLogger, AsyncioLogger, send_concurrency_message, cur_time +from _pydevd_bundle.pydevd_concurrency_analyser.pydevd_concurrency_logger import ( + ThreadingLogger, + AsyncioLogger, + send_concurrency_message, + cur_time, +) from _pydevd_bundle.pydevd_concurrency_analyser.pydevd_thread_wrappers import wrap_threads -from pydevd_file_utils import get_abs_path_real_path_and_base_from_frame, NORM_PATHS_AND_BASE_CONTAINER +from pydevd_file_utils import ( + get_abs_path_real_path_and_base_from_frame, + get_abs_path_real_path_and_base_from_file, + NORM_PATHS_AND_BASE_CONTAINER, +) from pydevd_file_utils import get_fullname, get_package_dir from os.path import abspath as os_path_abspath import pydevd_tracing -from _pydevd_bundle.pydevd_comm import (InternalThreadCommand, InternalThreadCommandForAnyThread, - create_server_socket, FSNotifyThread) -from _pydevd_bundle.pydevd_comm import(InternalConsoleExec, - _queue, ReaderThread, GetGlobalDebugger, get_global_debugger, - set_global_debugger, WriterThread, - start_client, start_server, InternalGetBreakpointException, InternalSendCurrExceptionTrace, - InternalSendCurrExceptionTraceProceeded) +from _pydevd_bundle.pydevd_comm import InternalThreadCommand, InternalThreadCommandForAnyThread, create_server_socket, FSNotifyThread +from _pydevd_bundle.pydevd_comm import ( + InternalConsoleExec, + _queue, + ReaderThread, + GetGlobalDebugger, + get_global_debugger, + set_global_debugger, + WriterThread, + start_client, + start_server, + InternalGetBreakpointException, + InternalSendCurrExceptionTrace, + InternalSendCurrExceptionTraceProceeded, +) from _pydevd_bundle.pydevd_daemon_thread import PyDBDaemonThread, mark_as_pydevd_daemon_thread from _pydevd_bundle.pydevd_process_net_command_json import PyDevJsonCommandProcessor from _pydevd_bundle.pydevd_process_net_command import process_net_command @@ -97,6 +156,9 @@ from _pydevd_bundle.pydevd_timeout import TimeoutTracker from _pydevd_bundle.pydevd_thread_lifecycle import suspend_all_threads, mark_thread_suspended +if PYDEVD_USE_SYS_MONITORING: + from _pydevd_sys_monitoring import pydevd_sys_monitoring + pydevd_gevent_integration = None if SUPPORT_GEVENT: @@ -104,20 +166,21 @@ from _pydevd_bundle import pydevd_gevent_integration except: pydev_log.exception( - 'pydevd: GEVENT_SUPPORT is set but gevent is not available in the environment.\n' - 'Please unset GEVENT_SUPPORT from the environment variables or install gevent.') + "pydevd: GEVENT_SUPPORT is set but gevent is not available in the environment.\n" + "Please unset GEVENT_SUPPORT from the environment variables or install gevent." + ) else: pydevd_gevent_integration.log_gevent_debug_info() if USE_CUSTOM_SYS_CURRENT_FRAMES_MAP: from _pydevd_bundle.pydevd_constants import constructed_tid_to_last_frame -__version_info__ = (2, 9, 5) +__version_info__ = (3, 1, 0) __version_info_str__ = [] for v in __version_info__: __version_info_str__.append(str(v)) -__version__ = '.'.join(__version_info_str__) +__version__ = ".".join(__version_info_str__) # IMPORTANT: pydevd_constants must be the 1st thing defined because it'll keep a reference to the original sys._getframe @@ -126,13 +189,13 @@ def install_breakpointhook(pydevd_breakpointhook=None): if pydevd_breakpointhook is None: def pydevd_breakpointhook(*args, **kwargs): - hookname = os.getenv('PYTHONBREAKPOINT') + hookname = os.getenv("PYTHONBREAKPOINT") if ( - hookname is not None - and len(hookname) > 0 - and hasattr(sys, '__breakpointhook__') - and sys.__breakpointhook__ != pydevd_breakpointhook - ): + hookname is not None + and len(hookname) > 0 + and hasattr(sys, "__breakpointhook__") + and sys.__breakpointhook__ != pydevd_breakpointhook + ): sys.__breakpointhook__(*args, **kwargs) else: settrace(*args, **kwargs) @@ -168,7 +231,7 @@ def pydevd_breakpointhook(*args, **kwargs): threadingCurrentThread = threading.current_thread try: - 'dummy'.encode('utf-8') # Added because otherwise Jython 2.2.1 wasn't finding the encoding (if it wasn't loaded in the main thread). + "dummy".encode("utf-8") # Added because otherwise Jython 2.2.1 wasn't finding the encoding (if it wasn't loaded in the main thread). except: pass @@ -179,28 +242,30 @@ def pydevd_breakpointhook(*args, **kwargs): _CACHE_FILE_TYPE = {} -pydev_log.debug('Using GEVENT_SUPPORT: %s', pydevd_constants.SUPPORT_GEVENT) -pydev_log.debug('Using GEVENT_SHOW_PAUSED_GREENLETS: %s', pydevd_constants.GEVENT_SHOW_PAUSED_GREENLETS) -pydev_log.debug('pydevd __file__: %s', os.path.abspath(__file__)) -pydev_log.debug('Using PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING: %s', pydevd_constants.PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING) +pydev_log.debug("Using GEVENT_SUPPORT: %s", pydevd_constants.SUPPORT_GEVENT) +pydev_log.debug("Using GEVENT_SHOW_PAUSED_GREENLETS: %s", pydevd_constants.GEVENT_SHOW_PAUSED_GREENLETS) +pydev_log.debug("pydevd __file__: %s", os.path.abspath(__file__)) +pydev_log.debug("Using PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING: %s", pydevd_constants.PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING) if pydevd_constants.PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING: - pydev_log.debug('PYDEVD_IPYTHON_CONTEXT: %s', pydevd_constants.PYDEVD_IPYTHON_CONTEXT) + pydev_log.debug("PYDEVD_IPYTHON_CONTEXT: %s", pydevd_constants.PYDEVD_IPYTHON_CONTEXT) + +TIMEOUT_SLOW = 0.2 +TIMEOUT_FAST = 1.0 / 50 -#======================================================================================================================= +# ======================================================================================================================= # PyDBCommandThread -#======================================================================================================================= +# ======================================================================================================================= class PyDBCommandThread(PyDBDaemonThread): - def __init__(self, py_db): PyDBDaemonThread.__init__(self, py_db) self._py_db_command_thread_event = py_db._py_db_command_thread_event - self.name = 'pydevd.CommandThread' + self.name = "pydevd.CommandThread" @overrides(PyDBDaemonThread._on_run) def _on_run(self): # Delay a bit this initialization to wait for the main program to start. - self._py_db_command_thread_event.wait(0.3) + self._py_db_command_thread_event.wait(TIMEOUT_SLOW) if self._kill_received: return @@ -208,11 +273,11 @@ def _on_run(self): try: while not self._kill_received: try: - self.py_db.process_internal_commands() + self.py_db.process_internal_commands(("*",)) except: - pydev_log.info('Finishing debug communication...(2)') + pydev_log.info("Finishing debug communication...(2)") self._py_db_command_thread_event.clear() - self._py_db_command_thread_event.wait(0.3) + self._py_db_command_thread_event.wait(TIMEOUT_SLOW) except: try: pydev_log.debug(sys.exc_info()[0]) @@ -231,17 +296,16 @@ def do_kill_pydev_thread(self): self._py_db_command_thread_event.set() -#======================================================================================================================= +# ======================================================================================================================= # CheckAliveThread # Non-daemon thread: guarantees that all data is written even if program is finished -#======================================================================================================================= +# ======================================================================================================================= class CheckAliveThread(PyDBDaemonThread): - def __init__(self, py_db): PyDBDaemonThread.__init__(self, py_db) - self.name = 'pydevd.CheckAliveThread' + self.name = "pydevd.CheckAliveThread" self.daemon = False - self._wait_event = threading.Event() + self._wait_event = ThreadingEvent() @overrides(PyDBDaemonThread._on_run) def _on_run(self): @@ -258,7 +322,7 @@ def can_exit(): try: while not self._kill_received: - self._wait_event.wait(0.3) + self._wait_event.wait(TIMEOUT_SLOW) if can_exit(): break @@ -284,7 +348,7 @@ def do_kill_pydev_thread(self): class AbstractSingleNotificationBehavior(object): - ''' + """ The basic usage should be: # Increment the request time for the suspend. @@ -300,20 +364,20 @@ class AbstractSingleNotificationBehavior(object): def do_wait_suspend(...): with single_notification_behavior.notify_thread_suspended(thread_id, thread, reason): ... - ''' + """ __slots__ = [ - '_last_resume_notification_time', - '_last_suspend_notification_time', - '_lock', - '_next_request_time', - '_suspend_time_request', - '_suspended_thread_id_to_thread', - '_pause_requested', - '_py_db', + "_last_resume_notification_time", + "_last_suspend_notification_time", + "_lock", + "_next_request_time", + "_suspend_time_request", + "_suspended_thread_id_to_thread", + "_pause_requested", + "_py_db", ] - NOTIFY_OF_PAUSE_TIMEOUT = .5 + NOTIFY_OF_PAUSE_TIMEOUT = 0.5 def __init__(self, py_db): self._py_db = weakref.ref(py_db) @@ -326,10 +390,10 @@ def __init__(self, py_db): self._pause_requested = False def send_suspend_notification(self, thread_id, thread, stop_reason): - raise AssertionError('abstract: subclasses must override.') + raise AssertionError("abstract: subclasses must override.") def send_resume_notification(self, thread_id): - raise AssertionError('abstract: subclasses must override.') + raise AssertionError("abstract: subclasses must override.") def increment_suspend_time(self): with self._lock: @@ -344,9 +408,7 @@ def on_pause(self): py_db = self._py_db() if py_db is not None: py_db.timeout_tracker.call_on_timeout( - self.NOTIFY_OF_PAUSE_TIMEOUT, - self._notify_after_timeout, - kwargs={'global_suspend_time': global_suspend_time} + self.NOTIFY_OF_PAUSE_TIMEOUT, self._notify_after_timeout, kwargs={"global_suspend_time": global_suspend_time} ) def _notify_after_timeout(self, global_suspend_time): @@ -355,7 +417,7 @@ def _notify_after_timeout(self, global_suspend_time): if global_suspend_time > self._last_suspend_notification_time: self._last_suspend_notification_time = global_suspend_time # Notify about any thread which is currently suspended. - pydev_log.info('Sending suspend notification after timeout.') + pydev_log.info("Sending suspend notification after timeout.") thread_id, thread = next(iter(self._suspended_thread_id_to_thread.items())) self.send_suspend_notification(thread_id, thread, CMD_THREAD_SUSPEND) @@ -372,18 +434,18 @@ def on_thread_suspend(self, thread_id, thread, stop_reason): # issue for a CMD_THREAD_SUSPEND if a pause is pending. if stop_reason != CMD_THREAD_SUSPEND or pause_requested: if self._suspend_time_request > self._last_suspend_notification_time: - pydev_log.info('Sending suspend notification.') + pydev_log.info("Sending suspend notification.") self._last_suspend_notification_time = self._suspend_time_request self.send_suspend_notification(thread_id, thread, stop_reason) else: pydev_log.info( - 'Suspend not sent (it was already sent). Last suspend % <= Last resume %s', + "Suspend not sent (it was already sent). Last suspend % <= Last resume %s", self._last_suspend_notification_time, self._last_resume_notification_time, ) else: pydev_log.info( - 'Suspend not sent because stop reason is thread suspend and pause was not requested.', + "Suspend not sent because stop reason is thread suspend and pause was not requested.", ) def on_thread_resume(self, thread_id, thread): @@ -391,12 +453,12 @@ def on_thread_resume(self, thread_id, thread): with self._lock: self._suspended_thread_id_to_thread.pop(thread_id) if self._last_resume_notification_time < self._last_suspend_notification_time: - pydev_log.info('Sending resume notification.') + pydev_log.info("Sending resume notification.") self._last_resume_notification_time = self._last_suspend_notification_time self.send_resume_notification(thread_id) else: pydev_log.info( - 'Resume not sent (it was already sent). Last resume %s >= Last suspend %s', + "Resume not sent (it was already sent). Last resume %s >= Last suspend %s", self._last_resume_notification_time, self._last_suspend_notification_time, ) @@ -411,9 +473,7 @@ def notify_thread_suspended(self, thread_id, thread, stop_reason): class ThreadsSuspendedSingleNotification(AbstractSingleNotificationBehavior): - - __slots__ = AbstractSingleNotificationBehavior.__slots__ + [ - 'multi_threads_single_notification', '_callbacks', '_callbacks_lock'] + __slots__ = AbstractSingleNotificationBehavior.__slots__ + ["multi_threads_single_notification", "_callbacks", "_callbacks_lock"] def __init__(self, py_db): AbstractSingleNotificationBehavior.__init__(self, py_db) @@ -443,23 +503,22 @@ def send_resume_notification(self, thread_id): def send_suspend_notification(self, thread_id, thread, stop_reason): py_db = self._py_db() if py_db is not None: - py_db.writer.add_command( - py_db.cmd_factory.make_thread_suspend_single_notification( - py_db, thread_id, thread, stop_reason)) + py_db.writer.add_command(py_db.cmd_factory.make_thread_suspend_single_notification(py_db, thread_id, thread, stop_reason)) @overrides(AbstractSingleNotificationBehavior.notify_thread_suspended) @contextmanager def notify_thread_suspended(self, thread_id, thread, stop_reason): if self.multi_threads_single_notification: + pydev_log.info("Thread suspend mode: single notification") with AbstractSingleNotificationBehavior.notify_thread_suspended(self, thread_id, thread, stop_reason): yield else: + pydev_log.info("Thread suspend mode: NOT single notification") yield class _Authentication(object): - - __slots__ = ['access_token', 'client_access_token', '_authenticated', '_wrong_attempts'] + __slots__ = ["access_token", "client_access_token", "_authenticated", "_wrong_attempts"] def __init__(self): # A token to be send in the command line or through the settrace api -- when such token @@ -497,7 +556,7 @@ def logout(self): class PyDB(object): - """ Main debugging class + """Main debugging class Lots of stuff going on here: PyDB starts two threads on startup that connect to remote debugger (RDB) @@ -525,12 +584,13 @@ def __init__(self, set_as_global=True): self._fsnotify_thread = None self.created_pydb_daemon_threads = {} self._waiting_for_connection_thread = None - self._on_configuration_done_event = threading.Event() + self._on_configuration_done_event = ThreadingEvent() self.check_alive_thread = None self.py_db_command_thread = None self.quitting = None self.cmd_factory = NetCommandFactory() self._cmd_queue = defaultdict(_queue.Queue) # Key is thread id or '*', value is Queue + self._thread_events = defaultdict(ThreadingEvent) # Key is thread id or '*', value is Event self.suspended_frames_manager = SuspendedFramesManager() self._files_filtering = FilesFiltering() self.timeout_tracker = TimeoutTracker(self) @@ -538,7 +598,7 @@ def __init__(self, set_as_global=True): # Note: when the source mapping is changed we also have to clear the file types cache # (because if a given file is a part of the project or not may depend on it being # defined in the source mapping). - self.source_mapping = SourceMapping(on_source_mapping_changed=self._clear_filters_caches) + self.source_mapping = SourceMapping(on_source_mapping_changed=self._clear_caches) # Determines whether we should terminate child processes when asked to terminate. self.terminate_child_processes = True @@ -563,7 +623,8 @@ def __init__(self, set_as_global=True): self.variable_presentation = PyDevdAPI.VariablePresentation() - # mtime to be raised when breakpoints change + # mtime to be raised when something that will affect the + # tracing in place (such as breakpoints change or filtering). self.mtime = 0 self.file_to_id_to_line_breakpoint = {} @@ -579,14 +640,14 @@ def __init__(self, set_as_global=True): self._main_lock = thread.allocate_lock() self._lock_running_thread_ids = thread.allocate_lock() self._lock_create_fs_notify = thread.allocate_lock() - self._py_db_command_thread_event = threading.Event() + self._py_db_command_thread_event = ThreadingEvent() if set_as_global: CustomFramesContainer._py_db_command_thread_event = self._py_db_command_thread_event self.pydb_disposed = False self._wait_for_threads_to_finish_called = False self._wait_for_threads_to_finish_called_lock = thread.allocate_lock() - self._wait_for_threads_to_finish_called_event = threading.Event() + self._wait_for_threads_to_finish_called_event = ThreadingEvent() self.terminate_requested = False self._disposed_lock = thread.allocate_lock() @@ -631,7 +692,7 @@ def __init__(self, set_as_global=True): # matplotlib - Whatever GUI backend matplotlib is using. # 'wx'/'qt'/'none'/... - GUI toolkits that have bulitin support. See pydevd_ipython/inputhook.py:24. # Other - A custom function that'll be imported and run. - self._gui_event_loop = 'matplotlib' + self._gui_event_loop = "matplotlib" self._installed_gui_support = False self.gui_in_use = False @@ -665,14 +726,13 @@ def __init__(self, set_as_global=True): self._local_thread_trace_func = threading.local() - self._server_socket_ready_event = threading.Event() + self._server_socket_ready_event = ThreadingEvent() self._server_socket_name = None # Bind many locals to the debugger because upon teardown those names may become None # in the namespace (and thus can't be relied upon unless the reference was previously # saved). if IS_IRONPYTHON: - # A partial() cannot be used in IronPython for sys.settrace. def new_trace_dispatch(frame, event, arg): return _trace_dispatch(self, frame, event, arg) @@ -726,14 +786,13 @@ def collect_try_except_info(self, code_obj): filename = code_obj.co_filename try: if os.path.exists(filename): - pydev_log.debug('Collecting try..except info from source for %s', filename) + pydev_log.debug("Collecting try..except info from source for %s", filename) try_except_infos = collect_try_except_info_from_source(filename) if try_except_infos: # Filter for the current function max_line = -1 min_line = sys.maxsize for _, line in dis.findlinestarts(code_obj): - if line > max_line: max_line = line @@ -744,15 +803,14 @@ def collect_try_except_info(self, code_obj): return try_except_infos except: - pydev_log.exception('Error collecting try..except info from source (%s)', filename) + pydev_log.exception("Error collecting try..except info from source (%s)", filename) - pydev_log.debug('Collecting try..except info from bytecode for %s', filename) + pydev_log.debug("Collecting try..except info from bytecode for %s", filename) return collect_try_except_info(code_obj) def setup_auto_reload_watcher(self, enable_auto_reload, watch_dirs, poll_target_time, exclude_patterns, include_patterns): try: with self._lock_create_fs_notify: - # When setting up, dispose of the previous one (if any). if self._fsnotify_thread is not None: self._fsnotify_thread.do_kill_pydev_thread() @@ -768,7 +826,7 @@ def accept_directory(absolute_filename, cache={}): try: return cache[absolute_filename] except: - if absolute_filename and absolute_filename[-1] not in ('/', '\\'): + if absolute_filename and absolute_filename[-1] not in ("/", "\\"): # I.e.: for directories we always end with '/' or '\\' so that # we match exclusions such as "**/node_modules/**" absolute_filename += os.path.sep @@ -818,15 +876,15 @@ def accept_file(absolute_filename, cache={}): watcher.target_time_for_notification = poll_target_time self._fsnotify_thread.start() except: - pydev_log.exception('Error setting up auto-reload.') + pydev_log.exception("Error setting up auto-reload.") def get_arg_ppid(self): try: setup = SetupHolder.setup if setup: - return int(setup.get('ppid', 0)) + return int(setup.get("ppid", 0)) except: - pydev_log.exception('Error getting ppid.') + pydev_log.exception("Error getting ppid.") return 0 @@ -835,18 +893,18 @@ def wait_for_ready_to_run(self): # busy wait until we receive run command self.process_internal_commands() self._py_db_command_thread_event.clear() - self._py_db_command_thread_event.wait(0.1) + self._py_db_command_thread_event.wait(TIMEOUT_FAST) def on_initialize(self): - ''' + """ Note: only called when using the DAP (Debug Adapter Protocol). - ''' + """ self._on_configuration_done_event.clear() def on_configuration_done(self): - ''' + """ Note: only called when using the DAP (Debug Adapter Protocol). - ''' + """ self._on_configuration_done_event.set() self._py_db_command_thread_event.set() @@ -854,9 +912,9 @@ def is_attached(self): return self._on_configuration_done_event.is_set() def on_disconnect(self): - ''' + """ Note: only called when using the DAP (Debug Adapter Protocol). - ''' + """ self.authentication.logout() self._on_configuration_done_event.clear() @@ -865,7 +923,7 @@ def set_ignore_system_exit_codes(self, ignore_system_exit_codes): self._ignore_system_exit_codes = set(ignore_system_exit_codes) def ignore_system_exit_code(self, system_exit_exc): - if hasattr(system_exit_exc, 'code'): + if hasattr(system_exit_exc, "code"): return system_exit_exc.code in self._ignore_system_exit_codes else: return system_exit_exc in self._ignore_system_exit_codes @@ -881,7 +939,7 @@ def block_until_configuration_done(self, cancel=None): self.process_internal_commands() self._py_db_command_thread_event.clear() - self._py_db_command_thread_event.wait(1 / 15.) + self._py_db_command_thread_event.wait(TIMEOUT_FAST) def add_fake_frame(self, thread_id, frame_id, frame): self.suspended_frames_manager.add_fake_frame(thread_id, frame_id, frame) @@ -902,8 +960,7 @@ def handle_breakpoint_condition(self, info, pybreakpoint, new_frame): etype, value, tb = sys.exc_info() traceback.print_exception(etype, value, tb.tb_next, file=stack_trace) - msg = 'Error while evaluating expression in conditional breakpoint: %s\n%s' % ( - condition, stack_trace.getvalue()) + msg = "Error while evaluating expression in conditional breakpoint: %s\n%s" % (condition, stack_trace.getvalue()) api = PyDevdAPI() api.send_error_message(self, msg) @@ -911,13 +968,12 @@ def handle_breakpoint_condition(self, info, pybreakpoint, new_frame): try: # add exception_type and stacktrace into thread additional info etype, value, tb = sys.exc_info() - error = ''.join(traceback.format_exception_only(etype, value)) + error = "".join(traceback.format_exception_only(etype, value)) stack = traceback.extract_stack(f=tb.tb_frame.f_back) # On self.set_suspend(thread, CMD_SET_BREAK) this info will be # sent to the client. - info.conditional_breakpoint_exception = \ - ('Condition:\n' + condition + '\n\nError:\n' + error, stack) + info.conditional_breakpoint_exception = ("Condition:\n" + condition + "\n\nError:\n" + error, stack) except: pydev_log.exception() return True @@ -939,10 +995,7 @@ def handle_breakpoint_expression(self, pybreakpoint, info, new_frame): def _internal_get_file_type(self, abs_real_path_and_basename): basename = abs_real_path_and_basename[-1] - if ( - basename.startswith(IGNORE_BASENAMES_STARTING_WITH) or - abs_real_path_and_basename[0].startswith(IGNORE_BASENAMES_STARTING_WITH) - ): + if basename.startswith(IGNORE_BASENAMES_STARTING_WITH) or abs_real_path_and_basename[0].startswith(IGNORE_BASENAMES_STARTING_WITH): # Note: these are the files that are completely ignored (they aren't shown to the user # as user nor library code as it's usually just noise in the frame stack). return self.PYDEV_FILE @@ -950,16 +1003,16 @@ def _internal_get_file_type(self, abs_real_path_and_basename): if file_type is not None: return file_type - if basename.startswith('__init__.py'): + if basename.startswith("__init__.py") or basename in LIB_FILES_IN_DONT_TRACE_DIRS: # i.e.: ignore the __init__ files inside pydevd (the other # files are ignored just by their name). abs_path = abs_real_path_and_basename[0] - i = max(abs_path.rfind('/'), abs_path.rfind('\\')) + i = max(abs_path.rfind("/"), abs_path.rfind("\\")) if i: abs_path = abs_path[0:i] - i = max(abs_path.rfind('/'), abs_path.rfind('\\')) + i = max(abs_path.rfind("/"), abs_path.rfind("\\")) if i: - dirname = abs_path[i + 1:] + dirname = abs_path[i + 1 :] # At this point, something as: # "my_path\_pydev_runfiles\__init__.py" # is now "_pydev_runfiles". @@ -967,7 +1020,7 @@ def _internal_get_file_type(self, abs_real_path_and_basename): return None def dont_trace_external_files(self, abs_path): - ''' + """ :param abs_path: The result from get_abs_path_real_path_and_base_from_file or get_abs_path_real_path_and_base_from_frame. @@ -978,13 +1031,13 @@ def dont_trace_external_files(self, abs_path): False: If files should be traced. - ''' + """ # By default all external files are traced. Note: this function is expected to # be changed for another function in PyDevdAPI.set_dont_trace_start_end_patterns. return False def get_file_type(self, frame, abs_real_path_and_basename=None, _cache_file_type=_CACHE_FILE_TYPE): - ''' + """ :param abs_real_path_and_basename: The result from get_abs_path_real_path_and_base_from_file or get_abs_path_real_path_and_base_from_frame. @@ -999,7 +1052,7 @@ def get_file_type(self, frame, abs_real_path_and_basename=None, _cache_file_type None: If it's a regular user file which should be traced. - ''' + """ if abs_real_path_and_basename is None: try: # Make fast path faster! @@ -1021,14 +1074,26 @@ def get_file_type(self, frame, abs_real_path_and_basename=None, _cache_file_type try: return _cache_file_type[cache_key] except: - if abs_real_path_and_basename[0] == '': - + if abs_real_path_and_basename[0] == "": # Consider it an untraceable file unless there's no back frame (ignoring # internal files and runpy.py). + if frame.f_back is None: + _cache_file_type[cache_key] = None + return None + + back_basename = pydevd_file_utils.basename(frame.f_back.f_code.co_filename) + if "sys_monitoring" in back_basename or "pydevd" in back_basename: + # Special case, this is a string coming from pydevd itself + _cache_file_type[cache_key] = PYDEV_FILE + return PYDEV_FILE + f = frame.f_back + back_frames = "" while f is not None: - if (self.get_file_type(f) != self.PYDEV_FILE and - pydevd_file_utils.basename(f.f_code.co_filename) not in ('runpy.py', '')): + if self.get_file_type(f) != self.PYDEV_FILE and pydevd_file_utils.basename(f.f_code.co_filename) not in ( + "runpy.py", + "", + ): # We found some back frame that's not internal, which means we must consider # this a library file. # This is done because we only want to trace files as if they don't @@ -1040,6 +1105,8 @@ def get_file_type(self, frame, abs_real_path_and_basename=None, _cache_file_type # to show it in the stack. _cache_file_type[cache_key] = LIB_FILE return LIB_FILE + + back_frames += " -> %s" % (pydevd_file_utils.basename(f.f_code.co_filename)) f = f.f_back else: # This is a top-level file (used in python -c), so, trace it as usual... we @@ -1069,7 +1136,7 @@ def get_thread_local_trace_func(self): return thread_trace_func def enable_tracing(self, thread_trace_func=None, apply_to_all_threads=False): - ''' + """ Enables tracing. If in regular mode (tracing), will set the tracing function to the tracing @@ -1083,7 +1150,11 @@ def enable_tracing(self, thread_trace_func=None, apply_to_all_threads=False): In general apply_to_all_threads should only be true if this is the first time this function is called on a multi-threaded program (either programmatically or attach to pid). - ''' + """ + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.start_monitoring(all_threads=apply_to_all_threads) + return + if pydevd_gevent_integration is not None: pydevd_gevent_integration.enable_gevent_integration() @@ -1109,12 +1180,15 @@ def enable_tracing(self, thread_trace_func=None, apply_to_all_threads=False): pydevd_tracing.set_trace_to_threads(thread_trace_func) def disable_tracing(self): - pydevd_tracing.SetTrace(None) + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.stop_monitoring(all_threads=False) + else: + pydevd_tracing.SetTrace(None) def on_breakpoints_changed(self, removed=False): - ''' + """ When breakpoints change, we have to re-evaluate all the assumptions we've made so far. - ''' + """ if not self.ready_to_run: # No need to do anything if we're still not running. return @@ -1123,11 +1197,18 @@ def on_breakpoints_changed(self, removed=False): if not removed: # When removing breakpoints we can leave tracing as was, but if a breakpoint was added # we have to reset the tracing for the existing functions to be re-evaluated. - self.set_tracing_for_untraced_contexts() - def set_tracing_for_untraced_contexts(self): + # The caches also need to be cleared because of django breakpoints use case, + # where adding a file needs to start tracking a context which was previously + # untracked. + self._clear_caches() + self.set_tracing_for_untraced_contexts(breakpoints_changed=True) + + def set_tracing_for_untraced_contexts(self, breakpoints_changed=False): # Enable the tracing for existing threads (because there may be frames being executed that # are currently untraced). + if PYDEVD_USE_SYS_MONITORING and breakpoints_changed: + pydevd_sys_monitoring.update_monitor_events() if IS_CPYTHON: # Note: use sys._current_frames instead of threading.enumerate() because this way @@ -1135,26 +1216,27 @@ def set_tracing_for_untraced_contexts(self): tid_to_frame = sys._current_frames() ignore_thread_ids = set( - t.ident for t in threadingEnumerate() - if getattr(t, 'is_pydev_daemon_thread', False) or getattr(t, 'pydev_do_not_trace', False) + t.ident + for t in threadingEnumerate() + if getattr(t, "is_pydev_daemon_thread", False) or getattr(t, "pydev_do_not_trace", False) ) - for thread_id, frame in tid_to_frame.items(): - if thread_id not in ignore_thread_ids: - self.set_trace_for_frame_and_parents(frame) + for thread_ident, frame in tid_to_frame.items(): + if thread_ident not in ignore_thread_ids: + self.set_trace_for_frame_and_parents(thread_ident, frame) else: try: threads = threadingEnumerate() for t in threads: - if getattr(t, 'is_pydev_daemon_thread', False) or getattr(t, 'pydev_do_not_trace', False): + if getattr(t, "is_pydev_daemon_thread", False) or getattr(t, "pydev_do_not_trace", False): continue additional_info = set_additional_thread_info(t) frame = additional_info.get_topmost_frame(t) try: if frame is not None: - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(t.ident, frame) finally: frame = None finally: @@ -1163,6 +1245,9 @@ def set_tracing_for_untraced_contexts(self): threads = None additional_info = None + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.restart_events() + @property def multi_threads_single_notification(self): return self._threads_suspended_single_notification.multi_threads_single_notification @@ -1181,7 +1266,7 @@ def get_plugin_lazy_init(self): return self.plugin def in_project_scope(self, frame, absolute_filename=None): - ''' + """ Note: in general this method should not be used (apply_files_filter should be used in most cases as it also handles the project scope check). @@ -1192,7 +1277,7 @@ def in_project_scope(self, frame, absolute_filename=None): Must be the result from get_abs_path_real_path_and_base_from_frame(frame)[0] (can be used to speed this function a bit if it's already available to the caller, but in general it's not needed). - ''' + """ try: if absolute_filename is None: try: @@ -1218,7 +1303,7 @@ def in_project_scope(self, frame, absolute_filename=None): if file_type == self.PYDEV_FILE: cache[cache_key] = False - elif absolute_filename == '': + elif absolute_filename == "": # Special handling for '' if file_type == self.LIB_FILE: cache[cache_key] = False @@ -1236,7 +1321,12 @@ def in_project_scope(self, frame, absolute_filename=None): def in_project_roots_filename_uncached(self, absolute_filename): return self._files_filtering.in_project_roots(absolute_filename) - def _clear_filters_caches(self): + def _clear_caches(self): + # Skip caches + global_cache_skips.clear() + global_cache_frame_skips.clear() + + # Filter caches self._in_project_scope_cache.clear() self._exclude_by_filter_cache.clear() self._apply_filter_cache.clear() @@ -1244,22 +1334,26 @@ def _clear_filters_caches(self): self._is_libraries_filter_enabled = self._files_filtering.use_libraries_filter() self.is_files_filter_enabled = self._exclude_filters_enabled or self._is_libraries_filter_enabled + self.mtime += 1 + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.update_monitor_events() + pydevd_sys_monitoring.restart_events() + def clear_dont_trace_start_end_patterns_caches(self): # When start/end patterns are changed we must clear all caches which would be # affected by a change in get_file_type() and reset the tracing function # as places which were traced may no longer need to be traced and vice-versa. self.on_breakpoints_changed() _CACHE_FILE_TYPE.clear() - self._clear_filters_caches() - self._clear_skip_caches() + self._clear_caches() def _exclude_by_filter(self, frame, absolute_filename): - ''' + """ :return: True if it should be excluded, False if it should be included and None if no rule matched the given file. :note: it'll be normalized as needed inside of this method. - ''' + """ cache_key = (absolute_filename, frame.f_code.co_name, frame.f_code.co_firstlineno) try: return self._exclude_by_filter_cache[cache_key] @@ -1272,13 +1366,13 @@ def _exclude_by_filter(self, frame, absolute_filename): else: module_name = None if self._files_filtering.require_module: - module_name = frame.f_globals.get('__name__', '') + module_name = frame.f_globals.get("__name__", "") cache[cache_key] = self._files_filtering.exclude_by_filter(absolute_filename, module_name) return cache[cache_key] def apply_files_filter(self, frame, original_filename, force_check_project_scope): - ''' + """ Should only be called if `self.is_files_filter_enabled == True` or `force_check_project_scope == True`. Note that it covers both the filter by specific paths includes/excludes as well @@ -1294,15 +1388,17 @@ def apply_files_filter(self, frame, original_filename, force_check_project_scope :return bool: True if it should be excluded when stepping and False if it should be included. - ''' + """ cache_key = (frame.f_code.co_firstlineno, original_filename, force_check_project_scope, frame.f_code) try: return self._apply_filter_cache[cache_key] except KeyError: + DEBUG = True # 'defaulttags' in original_filename if self.plugin is not None and (self.has_plugin_line_breaks or self.has_plugin_exception_breaks): # If it's explicitly needed by some plugin, we can't skip it. if not self.plugin.can_skip(self, frame): - pydev_log.debug_once('File traced (included by plugins): %s', original_filename) + if DEBUG: + pydev_log.debug_once("File traced (included by plugins): %s", original_filename) self._apply_filter_cache[cache_key] = False return False @@ -1312,12 +1408,14 @@ def apply_files_filter(self, frame, original_filename, force_check_project_scope if exclude_by_filter is not None: if exclude_by_filter: # ignore files matching stepping filters - pydev_log.debug_once('File not traced (excluded by filters): %s', original_filename) + if DEBUG: + pydev_log.debug_once("File not traced (excluded by filters): %s", original_filename) self._apply_filter_cache[cache_key] = True return True else: - pydev_log.debug_once('File traced (explicitly included by filters): %s', original_filename) + if DEBUG: + pydev_log.debug_once("File traced (explicitly included by filters): %s", original_filename) self._apply_filter_cache[cache_key] = False return False @@ -1326,16 +1424,20 @@ def apply_files_filter(self, frame, original_filename, force_check_project_scope # ignore library files while stepping self._apply_filter_cache[cache_key] = True if force_check_project_scope: - pydev_log.debug_once('File not traced (not in project): %s', original_filename) + if DEBUG: + pydev_log.debug_once("File not traced (not in project): %s", original_filename) else: - pydev_log.debug_once('File not traced (not in project - force_check_project_scope): %s', original_filename) + if DEBUG: + pydev_log.debug_once("File not traced (not in project - force_check_project_scope): %s", original_filename) return True if force_check_project_scope: - pydev_log.debug_once('File traced: %s (force_check_project_scope)', original_filename) + if DEBUG: + pydev_log.debug_once("File traced: %s (force_check_project_scope)", original_filename) else: - pydev_log.debug_once('File traced: %s', original_filename) + if DEBUG: + pydev_log.debug_once("File traced: %s", original_filename) self._apply_filter_cache[cache_key] = False return False @@ -1349,28 +1451,25 @@ def exclude_exception_by_filter(self, exception_breakpoint, trace): ignore_libraries = exception_breakpoint.ignore_libraries exclude_filters_enabled = self._exclude_filters_enabled - if (ignore_libraries and not self.in_project_scope(trace.tb_frame)) \ - or (exclude_filters_enabled and self._exclude_by_filter( - trace.tb_frame, - pydevd_file_utils.absolute_path(trace.tb_frame.f_code.co_filename))): + if (ignore_libraries and not self.in_project_scope(trace.tb_frame)) or ( + exclude_filters_enabled + and self._exclude_by_filter(trace.tb_frame, pydevd_file_utils.absolute_path(trace.tb_frame.f_code.co_filename)) + ): return True return False def set_project_roots(self, project_roots): self._files_filtering.set_project_roots(project_roots) - self._clear_skip_caches() - self._clear_filters_caches() + self._clear_caches() def set_exclude_filters(self, exclude_filters): self._files_filtering.set_exclude_filters(exclude_filters) - self._clear_skip_caches() - self._clear_filters_caches() + self._clear_caches() def set_use_libraries_filter(self, use_libraries_filter): self._files_filtering.set_use_libraries_filter(use_libraries_filter) - self._clear_skip_caches() - self._clear_filters_caches() + self._clear_caches() def get_use_libraries_filter(self): return self._files_filtering.use_libraries_filter() @@ -1381,8 +1480,7 @@ def get_require_module_for_filters(self): def has_user_threads_alive(self): for t in pydevd_utils.get_non_pydevd_threads(): if isinstance(t, PyDBDaemonThread): - pydev_log.error_once( - 'Error in debugger: Found PyDBDaemonThread not marked with is_pydev_daemon_thread=True.\n') + pydev_log.error_once("Error in debugger: Found PyDBDaemonThread not marked with is_pydev_daemon_thread=True.\n") if is_thread_alive(t): if not t.daemon or hasattr(t, "__pydevd_main_thread"): @@ -1396,8 +1494,8 @@ def initialize_network(self, sock, terminate_on_socket_close=True): sock.settimeout(None) # infinite, no timeouts from now on - jython does not have it except: pass - curr_reader = getattr(self, 'reader', None) - curr_writer = getattr(self, 'writer', None) + curr_reader = getattr(self, "reader", None) + curr_writer = getattr(self, "writer", None) if curr_reader: curr_reader.do_kill_pydev_thread() if curr_writer: @@ -1409,7 +1507,7 @@ def initialize_network(self, sock, terminate_on_socket_close=True): self, PyDevJsonCommandProcessor=PyDevJsonCommandProcessor, process_net_command=process_net_command, - terminate_on_socket_close=terminate_on_socket_close + terminate_on_socket_close=terminate_on_socket_close, ) self.writer.start() self.reader.start() @@ -1426,7 +1524,7 @@ def connect(self, host, port): def create_wait_for_connection_thread(self): if self._waiting_for_connection_thread is not None: - raise AssertionError('There is already another thread waiting for a connection.') + raise AssertionError("There is already another thread waiting for a connection.") self._server_socket_ready_event.clear() self._waiting_for_connection_thread = self._WaitForConnectionThread(self) @@ -1446,14 +1544,13 @@ def add_dap_messages_listener(self, listener): self._dap_messages_listeners.append(listener) class _WaitForConnectionThread(PyDBDaemonThread): - def __init__(self, py_db): PyDBDaemonThread.__init__(self, py_db) self._server_socket = None def run(self): - host = SetupHolder.setup['client'] - port = SetupHolder.setup['port'] + host = SetupHolder.setup["client"] + port = SetupHolder.setup["port"] self._server_socket = create_server_socket(host=host, port=port) self.py_db._server_socket_name = self._server_socket.getsockname() @@ -1472,7 +1569,7 @@ def run(self): return pydev_log.info("Connection (from wait_for_attach) accepted.") - reader = getattr(self.py_db, 'reader', None) + reader = getattr(self.py_db, "reader", None) if reader is not None: # This is needed if a new connection is done without the client properly # sending a disconnect for the previous connection. @@ -1496,27 +1593,28 @@ def do_kill_pydev_thread(self): pass self._server_socket = None - def get_internal_queue(self, thread_id): - """ returns internal command queue for a given thread. - if new queue is created, notify the RDB about it """ - if thread_id.startswith('__frame__'): - thread_id = thread_id[thread_id.rfind('|') + 1:] - return self._cmd_queue[thread_id] + def get_internal_queue_and_event(self, thread_id) -> Tuple[_queue.Queue, ThreadingEvent]: + """returns internal command queue for a given thread. + if new queue is created, notify the RDB about it""" + if thread_id.startswith("__frame__"): + thread_id = thread_id[thread_id.rfind("|") + 1 :] + return self._cmd_queue[thread_id], self._thread_events[thread_id] def post_method_as_internal_command(self, thread_id, method, *args, **kwargs): - if thread_id == '*': + if thread_id == "*": internal_cmd = InternalThreadCommandForAnyThread(thread_id, method, *args, **kwargs) else: internal_cmd = InternalThreadCommand(thread_id, method, *args, **kwargs) self.post_internal_command(internal_cmd, thread_id) - if thread_id == '*': - # Notify so that the command is handled as soon as possible. - self._py_db_command_thread_event.set() def post_internal_command(self, int_cmd, thread_id): - """ if thread_id is *, post to the '*' queue""" - queue = self.get_internal_queue(thread_id) + """if thread_id is *, post to the '*' queue""" + queue, event = self.get_internal_queue_and_event(thread_id) queue.put(int_cmd) + if thread_id == "*": + self._py_db_command_thread_event.set() + else: + event.set() def enable_output_redirection(self, redirect_stdout, redirect_stderr): global _global_redirect_stdout_to_server @@ -1540,13 +1638,6 @@ def check_output_redirect(self): if _global_redirect_stderr_to_server: _init_stderr_redirect() - def init_matplotlib_in_debug_console(self): - # import hook and patches for matplotlib support in debug console - from _pydev_bundle.pydev_import_hook import import_hook_manager - if is_current_thread_main_thread(): - for module in list(self.mpl_modules_for_patching): - import_hook_manager.add_module_name(module, self.mpl_modules_for_patching.pop(module)) - def init_gui_support(self): if self._installed_gui_support: return @@ -1569,13 +1660,15 @@ def return_control(): set_return_control_callback(return_control) - if self._gui_event_loop == 'matplotlib': + if self._gui_event_loop == "matplotlib": # prepare debugger for matplotlib integration with GUI event loop from pydev_ipython.matplotlibtools import activate_matplotlib, activate_pylab, activate_pyplot, do_enable_gui - self.mpl_modules_for_patching = {"matplotlib": lambda: activate_matplotlib(do_enable_gui), - "matplotlib.pyplot": activate_pyplot, - "pylab": activate_pylab } + self.mpl_modules_for_patching = { + "matplotlib": lambda: activate_matplotlib(do_enable_gui), + "matplotlib.pyplot": activate_pyplot, + "pylab": activate_pylab, + } else: self.activate_gui_function = enable_gui @@ -1602,6 +1695,7 @@ def _activate_gui_if_needed(self): except ValueError: # The user requested a custom GUI event loop, try to import it. from pydev_ipython.inputhook import set_inputhook + try: inputhook_function = import_attr_from_module(self._gui_event_loop) set_inputhook(inputhook_function) @@ -1614,6 +1708,7 @@ def _activate_gui_if_needed(self): def _call_input_hook(self): try: from pydev_ipython.inputhook import get_inputhook + inputhook = get_inputhook() if inputhook: inputhook() @@ -1649,7 +1744,7 @@ def notify_thread_created(self, thread_id, thread, use_lock=True): self.writer.add_command(self.cmd_factory.make_thread_created_message(thread)) def notify_thread_not_alive(self, thread_id, use_lock=True): - """ if thread is not alive, cancel trace_dispatch processing """ + """if thread is not alive, cancel trace_dispatch processing""" if self.writer is None: return @@ -1665,6 +1760,7 @@ def notify_thread_not_alive(self, thread_id, use_lock=True): was_notified = additional_info.pydev_notify_kill if not was_notified: additional_info.pydev_notify_kill = True + remove_additional_info(additional_info) self.writer.add_command(self.cmd_factory.make_thread_killed_message(thread_id)) @@ -1678,10 +1774,10 @@ def set_enable_thread_notifications(self, enable): # (so, clear the cache related to that). self._running_thread_ids = {} - def process_internal_commands(self): - ''' + def process_internal_commands(self, process_thread_ids: Optional[tuple] = None): + """ This function processes internal commands. - ''' + """ # If this method is being called before the debugger is ready to run we should not notify # about threads and should only process commands sent to all threads. ready_to_run = self.ready_to_run @@ -1698,10 +1794,10 @@ def process_internal_commands(self): reset_cache = not self._running_thread_ids for t in all_threads: - if getattr(t, 'is_pydev_daemon_thread', False): + if getattr(t, "is_pydev_daemon_thread", False): pass # I.e.: skip the DummyThreads created from pydev daemon threads elif isinstance(t, PyDBDaemonThread): - pydev_log.error_once('Error in debugger: Found PyDBDaemonThread not marked with is_pydev_daemon_thread=True.') + pydev_log.error_once("Error in debugger: Found PyDBDaemonThread not marked with is_pydev_daemon_thread=True.") elif is_thread_alive(t): if reset_cache: @@ -1732,17 +1828,18 @@ def process_internal_commands(self): if len(program_threads_alive) == 0 and ready_to_run: dispose = True else: - # Actually process the commands now (make sure we don't have a lock for _lock_running_thread_ids - # acquired at this point as it could lead to a deadlock if some command evaluated tried to - # create a thread and wait for it -- which would try to notify about it getting that lock). curr_thread_id = get_current_thread_id(threadingCurrentThread()) - if ready_to_run: - process_thread_ids = (curr_thread_id, '*') - else: - process_thread_ids = ('*',) + if process_thread_ids is None: + # Actually process the commands now (make sure we don't have a lock for _lock_running_thread_ids + # acquired at this point as it could lead to a deadlock if some command evaluated tried to + # create a thread and wait for it -- which would try to notify about it getting that lock). + if ready_to_run: + process_thread_ids = (curr_thread_id, "*") + else: + process_thread_ids = ("*",) for thread_id in process_thread_ids: - queue = self.get_internal_queue(thread_id) + queue, _event = self.get_internal_queue_and_event(thread_id) # some commands must be processed by the thread itself... if that's the case, # we will re-add the commands to the queue after executing. @@ -1750,39 +1847,33 @@ def process_internal_commands(self): try: while True: - int_cmd = queue.get(False) - - if not self.mpl_hooks_in_debug_console and isinstance(int_cmd, InternalConsoleExec) and not self.gui_in_use: - # add import hooks for matplotlib patches if only debug console was started - try: - self.init_matplotlib_in_debug_console() - self.gui_in_use = True - except: - pydev_log.debug("Matplotlib support in debug console failed", traceback.format_exc()) - self.mpl_hooks_in_debug_console = True - - if int_cmd.can_be_executed_by(curr_thread_id): - cmds_to_execute.append(int_cmd) - else: - pydev_log.verbose("NOT processing internal command: %s ", int_cmd) - cmds_to_add_back.append(int_cmd) + internal_cmd = queue.get(False) + try: + if internal_cmd.can_be_executed_by(curr_thread_id): + cmds_to_execute.append(internal_cmd) + else: + pydev_log.verbose("NOT processing internal command: %s ", internal_cmd) + cmds_to_add_back.append(internal_cmd) + except: + pydev_log.exception() + raise except _queue.Empty: # @UndefinedVariable # this is how we exit - for int_cmd in cmds_to_add_back: - queue.put(int_cmd) + for internal_cmd in cmds_to_add_back: + queue.put(internal_cmd) if dispose: # Note: must be called without the main lock to avoid deadlocks. self.dispose_and_kill_all_pydevd_threads() else: # Actually execute the commands without the main lock! - for int_cmd in cmds_to_execute: - pydev_log.verbose("processing internal command: %s", int_cmd) + for internal_cmd in cmds_to_execute: + pydev_log.verbose("processing internal command: %s", internal_cmd) try: - int_cmd.do_it(self) + internal_cmd.do_it(self) except: - pydev_log.exception('Error processing internal command.') + pydev_log.exception("Error processing internal command.") def consolidate_breakpoints(self, canonical_normalized_filename, id_to_breakpoint, file_to_line_to_breakpoints): break_dict = {} @@ -1790,11 +1881,7 @@ def consolidate_breakpoints(self, canonical_normalized_filename, id_to_breakpoin break_dict[pybreakpoint.line] = pybreakpoint file_to_line_to_breakpoints[canonical_normalized_filename] = break_dict - self._clear_skip_caches() - - def _clear_skip_caches(self): - global_cache_skips.clear() - global_cache_frame_skips.clear() + self._clear_caches() def add_break_on_exception( self, @@ -1805,8 +1892,8 @@ def add_break_on_exception( notify_on_unhandled_exceptions, notify_on_user_unhandled_exceptions, notify_on_first_raise_only, - ignore_libraries=False - ): + ignore_libraries=False, + ): try: eb = ExceptionBreakpoint( exception, @@ -1816,7 +1903,7 @@ def add_break_on_exception( notify_on_unhandled_exceptions, notify_on_user_unhandled_exceptions, notify_on_first_raise_only, - ignore_libraries + ignore_libraries, ) except ImportError: pydev_log.critical("Error unable to add break on exception for: %s (exception could not be imported).", exception) @@ -1842,8 +1929,16 @@ def add_break_on_exception( return eb - def set_suspend(self, thread, stop_reason, suspend_other_threads=False, is_pause=False, original_step_cmd=-1): - ''' + def set_suspend( + self, + thread, + stop_reason: int, + suspend_other_threads: bool = False, + is_pause=False, + original_step_cmd: int = -1, + suspend_requested: bool = False, + ): + """ :param thread: The thread which should be suspended. @@ -1860,19 +1955,29 @@ def set_suspend(self, thread, stop_reason, suspend_other_threads=False, is_pause :param original_step_cmd: If given we may change the stop reason to this. - ''' + + :param suspend_requested: + If the execution will be suspended right away then this may be false, otherwise, + if the thread should be stopped due to this suspend at a later time then it + should be true. + """ self._threads_suspended_single_notification.increment_suspend_time() if is_pause: self._threads_suspended_single_notification.on_pause() info = mark_thread_suspended(thread, stop_reason, original_step_cmd=original_step_cmd) + if (suspend_requested or is_pause) and PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.update_monitor_events(suspend_requested=True) + if is_pause: # Must set tracing after setting the state to suspend. frame = info.get_topmost_frame(thread) if frame is not None: + # Where suspend was requested + # traceback.print_stack(frame) try: - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) finally: frame = None @@ -1891,6 +1996,9 @@ def set_suspend(self, thread, stop_reason, suspend_other_threads=False, is_pause # Suspend all except the current one (which we're currently suspending already). suspend_all_threads(self, except_thread=thread) + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.restart_events() + def _send_breakpoint_condition_exception(self, thread, conditional_breakpoint_exception_tuple): """If conditional breakpoint raises an exception during evaluation send exception details to java @@ -1912,24 +2020,21 @@ def send_caught_exception_stack(self, thread, arg, curr_frame_id): self.post_internal_command(int_cmd, thread_id) def send_caught_exception_stack_proceeded(self, thread): - """Sends that some thread was resumed and is no longer showing an exception trace. - """ + """Sends that some thread was resumed and is no longer showing an exception trace.""" thread_id = get_thread_id(thread) int_cmd = InternalSendCurrExceptionTraceProceeded(thread_id) self.post_internal_command(int_cmd, thread_id) self.process_internal_commands() def send_process_created_message(self): - """Sends a message that a new process has been created. - """ + """Sends a message that a new process has been created.""" if self.writer is None or self.cmd_factory is None: return cmd = self.cmd_factory.make_process_created_message() self.writer.add_command(cmd) def send_process_about_to_be_replaced(self): - """Sends a message that a new process has been created. - """ + """Sends a message that a new process has been created.""" if self.writer is None or self.cmd_factory is None: return cmd = self.cmd_factory.make_process_about_to_be_replaced_message() @@ -1947,17 +2052,17 @@ def after_sent(*args, **kwargs): timeout = 5 # Wait up to 5 seconds initial_time = time.time() while not sent[0]: - time.sleep(.05) + time.sleep(0.05) if (time.time() - initial_time) > timeout: - pydev_log.critical('pydevd: Sending message related to process being replaced timed-out after %s seconds', timeout) + pydev_log.critical("pydevd: Sending message related to process being replaced timed-out after %s seconds", timeout) break def set_next_statement(self, frame, event, func_name, next_line): stop = False response_msg = "" old_line = frame.f_lineno - if event == 'line' or event == 'exception': + if event == "line" or event == "exception": # If we're already in the correct context, we have to stop it now, because we can act only on # line events -- if a return was the next statement it wouldn't work (so, we have this code # repeated at pydevd_frame). @@ -1965,10 +2070,10 @@ def set_next_statement(self, frame, event, func_name, next_line): curr_func_name = frame.f_code.co_name # global context is set with an empty name - if curr_func_name in ('?', ''): - curr_func_name = '' + if curr_func_name in ("?", ""): + curr_func_name = "" - if func_name == '*' or curr_func_name == func_name: + if func_name == "*" or curr_func_name == func_name: line = next_line frame.f_trace = self.trace_dispatch frame.f_lineno = line @@ -1982,18 +2087,22 @@ def cancel_async_evaluation(self, thread_id, frame_id): try: all_threads = threadingEnumerate() for t in all_threads: - if getattr(t, 'is_pydev_daemon_thread', False) and hasattr(t, 'cancel_event') and t.thread_id == thread_id and \ - t.frame_id == frame_id: + if ( + getattr(t, "is_pydev_daemon_thread", False) + and hasattr(t, "cancel_event") + and t.thread_id == thread_id + and t.frame_id == frame_id + ): t.cancel_event.set() except: pydev_log.exception() def find_frame(self, thread_id, frame_id): - """ returns a frame on the thread that has a given frame_id """ + """returns a frame on the thread that has a given frame_id""" return self.suspended_frames_manager.find_frame(thread_id, frame_id) def do_wait_suspend(self, thread, frame, event, arg, exception_type=None): # @UnusedVariable - """ busy waits until the thread state changes to RUN + """busy waits until the thread state changes to RUN it expects thread's state as attributes of the thread. Upon running, processes any outstanding Stepping commands. @@ -2002,35 +2111,43 @@ def do_wait_suspend(self, thread, frame, event, arg, exception_type=None): # @U """ if USE_CUSTOM_SYS_CURRENT_FRAMES_MAP: constructed_tid_to_last_frame[thread.ident] = sys._getframe() - self.process_internal_commands() + + # Only process from all threads, not for current one (we'll do that later on in this method). + self.process_internal_commands(("*",)) thread_id = get_current_thread_id(thread) - # print('do_wait_suspend %s %s %s %s %s %s (%s)' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, arg, constant_to_str(thread.additional_info.pydev_step_cmd), constant_to_str(thread.additional_info.pydev_original_step_cmd))) - # print('--- stack ---') - # print(traceback.print_stack(file=sys.stdout)) - # print('--- end stack ---') + # if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 2: + # pydev_log.debug('do_wait_suspend %s %s %s %s %s %s (%s)' % (frame.f_lineno, frame.f_code.co_name, frame.f_code.co_filename, event, arg, constant_to_str(thread.additional_info.pydev_step_cmd), constant_to_str(thread.additional_info.pydev_original_step_cmd))) + # pydev_log.debug('--- internal stack ---') + # _f = sys._getframe() + # while _f is not None: + # pydev_log.debug(' -> %s' % (_f)) + # _f = _f.f_back + # pydev_log.debug('--- end internal stack ---') # Send the suspend message message = thread.additional_info.pydev_message - suspend_type = thread.additional_info.trace_suspend_type - thread.additional_info.trace_suspend_type = 'trace' # Reset to trace mode for next call. + trace_suspend_type = thread.additional_info.trace_suspend_type + thread.additional_info.trace_suspend_type = "trace" # Reset to trace mode for next call. stop_reason = thread.stop_reason frames_list = None - if arg is not None and event == 'exception': + if arg is not None and event == "exception": # arg must be the exception info (tuple(exc_type, exc, traceback)) exc_type, exc_desc, trace_obj = arg if trace_obj is not None: - frames_list = pydevd_frame_utils.create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exception_type=exception_type) + frames_list = pydevd_frame_utils.create_frames_list_from_traceback( + trace_obj, frame, exc_type, exc_desc, exception_type=exception_type + ) if frames_list is None: frames_list = pydevd_frame_utils.create_frames_list_from_frame(frame) if DebugInfoHolder.DEBUG_TRACE_LEVEL > 2: pydev_log.debug( - 'PyDB.do_wait_suspend\nname: %s (line: %s)\n file: %s\n event: %s\n arg: %s\n step: %s (original step: %s)\n thread: %s, thread id: %s, id(thread): %s', + "PyDB.do_wait_suspend\nname: %s (line: %s)\n file: %s\n event: %s\n arg: %s\n step: %s (original step: %s)\n thread: %s, thread id: %s, id(thread): %s", frame.f_code.co_name, frame.f_lineno, frame.f_code.co_filename, @@ -2043,11 +2160,13 @@ def do_wait_suspend(self, thread, frame, event, arg, exception_type=None): # @U id(thread), ) for f in frames_list: - pydev_log.debug(' Stack: %s, %s, %s', f.f_code.co_filename, f.f_code.co_name, f.f_lineno) + pydev_log.debug(" Stack: %s, %s, %s", f.f_code.co_filename, f.f_code.co_name, f.f_lineno) with self.suspended_frames_manager.track_frames(self) as frames_tracker: frames_tracker.track(thread_id, frames_list) - cmd = frames_tracker.create_thread_suspend_command(thread_id, stop_reason, message, suspend_type) + cmd = frames_tracker.create_thread_suspend_command( + thread_id, stop_reason, message, trace_suspend_type, thread, thread.additional_info + ) self.writer.add_command(cmd) with CustomFramesContainer.custom_frames_lock: # @UndefinedVariable @@ -2055,19 +2174,27 @@ def do_wait_suspend(self, thread, frame, event, arg, exception_type=None): # @U for frame_custom_thread_id, custom_frame in CustomFramesContainer.custom_frames.items(): if custom_frame.thread_id == thread.ident: - frames_tracker.track(thread_id, pydevd_frame_utils.create_frames_list_from_frame(custom_frame.frame), frame_custom_thread_id=frame_custom_thread_id) + frames_tracker.track( + thread_id, + pydevd_frame_utils.create_frames_list_from_frame(custom_frame.frame), + frame_custom_thread_id=frame_custom_thread_id, + ) # print('Frame created as thread: %s' % (frame_custom_thread_id,)) - self.writer.add_command(self.cmd_factory.make_custom_frame_created_message( - frame_custom_thread_id, custom_frame.name)) + self.writer.add_command( + self.cmd_factory.make_custom_frame_created_message(frame_custom_thread_id, custom_frame.name) + ) self.writer.add_command( - frames_tracker.create_thread_suspend_command(frame_custom_thread_id, CMD_THREAD_SUSPEND, "", suspend_type)) + frames_tracker.create_thread_suspend_command( + frame_custom_thread_id, CMD_THREAD_SUSPEND, "", trace_suspend_type, thread, thread.additional_info + ) + ) from_this_thread.append(frame_custom_thread_id) with self._threads_suspended_single_notification.notify_thread_suspended(thread_id, thread, stop_reason): - keep_suspended = self._do_wait_suspend(thread, frame, event, arg, suspend_type, from_this_thread, frames_tracker) + keep_suspended = self._do_wait_suspend(thread, frame, event, arg, trace_suspend_type, from_this_thread, frames_tracker) frames_list = None @@ -2076,34 +2203,72 @@ def do_wait_suspend(self, thread, frame, event, arg, exception_type=None): # @U self._threads_suspended_single_notification.increment_suspend_time() self.do_wait_suspend(thread, frame, event, arg, exception_type) if DebugInfoHolder.DEBUG_TRACE_LEVEL > 2: - pydev_log.debug('Leaving PyDB.do_wait_suspend: %s (%s) %s', thread, thread_id, id(thread)) + pydev_log.debug("Leaving PyDB.do_wait_suspend: %s (%s) %s", thread, thread_id, id(thread)) - def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_thread, frames_tracker): + def _do_wait_suspend(self, thread, frame, event, arg, trace_suspend_type, from_this_thread, frames_tracker): info = thread.additional_info - info.step_in_initial_location = None - keep_suspended = False + try: + info.is_in_wait_loop = True + info.update_stepping_info() + info.step_in_initial_location = None + keep_suspended = False - with self._main_lock: # Use lock to check if suspended state changed - activate_gui = info.pydev_state == STATE_SUSPEND and not self.pydb_disposed + with self._main_lock: # Use lock to check if suspended state changed + activate_gui = info.pydev_state == STATE_SUSPEND and not self.pydb_disposed + + in_main_thread = is_current_thread_main_thread() + if activate_gui and in_main_thread: + # before every stop check if matplotlib modules were imported inside script code + # or some GUI event loop needs to be activated + self._activate_gui_if_needed() + + # self.process_internal_commands(): processes for all the threads + # and updates running threads. This was called once in `do_wait_suspend` + # At this point it's just processing for this thread. + # Note that clients may not post an actual event (for instance, it + # could just set the internal state and signal the event instead + # of posting a command to the queue). In any case, if an item is + # put in the queue, the event must be set too. + curr_thread_id = get_current_thread_id(threadingCurrentThread()) + queue, notify_event = self.get_internal_queue_and_event(curr_thread_id) + + wait_timeout = TIMEOUT_SLOW + while True: + with self._main_lock: # Use lock to check if suspended state changed + if info.pydev_state != STATE_SUSPEND or (self.pydb_disposed and not self.terminate_requested): + # Note: we can't exit here if terminate was requested while a breakpoint was hit. + break - in_main_thread = is_current_thread_main_thread() - if activate_gui and in_main_thread: - # before every stop check if matplotlib modules were imported inside script code - # or some GUI event loop needs to be activated - self._activate_gui_if_needed() + if in_main_thread and self.gui_in_use: + wait_timeout = TIMEOUT_FAST + # call input hooks if only GUI is in use + self._call_input_hook() - while True: - with self._main_lock: # Use lock to check if suspended state changed - if info.pydev_state != STATE_SUSPEND or (self.pydb_disposed and not self.terminate_requested): - # Note: we can't exit here if terminate was requested while a breakpoint was hit. - break + # No longer process commands for '*' at this point, just the + # ones related to this thread. + try: + internal_cmd = queue.get(False) + except _queue.Empty: + pass + else: + if internal_cmd.can_be_executed_by(curr_thread_id): + pydev_log.verbose("processing internal command: %s", internal_cmd) + try: + internal_cmd.do_it(self) + except: + pydev_log.exception("Error processing internal command.") + else: + # This shouldn't really happen... + pydev_log.verbose("NOT processing internal command: %s ", internal_cmd) + queue.put(internal_cmd) + wait_timeout = TIMEOUT_FAST - if in_main_thread and self.gui_in_use: - # call input hooks if only GUI is in use - self._call_input_hook() + notify_event.wait(wait_timeout) + notify_event.clear() - self.process_internal_commands() - time.sleep(0.01) + finally: + info.is_in_wait_loop = False + info.update_stepping_info() self.cancel_async_evaluation(get_current_thread_id(thread), str(id(frame))) @@ -2114,18 +2279,18 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th # When in a coroutine we switch to CMD_STEP_INTO_COROUTINE. info.pydev_step_cmd = CMD_STEP_INTO_COROUTINE info.pydev_step_stop = frame - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) else: info.pydev_step_stop = None - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) elif info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_SMART_STEP_INTO): info.pydev_step_stop = frame - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) elif info.pydev_step_cmd == CMD_RUN_TO_LINE or info.pydev_step_cmd == CMD_SET_NEXT_STATEMENT: info.pydev_step_stop = None - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) stop = False response_msg = "" try: @@ -2136,12 +2301,12 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th seq = info.pydev_message cmd = self.cmd_factory.make_set_next_stmnt_status_message(seq, stop, response_msg) self.writer.add_command(cmd) - info.pydev_message = '' + info.pydev_message = "" if stop: # Uninstall the current frames tracker before running it. frames_tracker.untrack_all() - cmd = self.cmd_factory.make_thread_run_message(get_current_thread_id(thread), info.pydev_step_cmd) + cmd = self.cmd_factory.make_thread_run_message(self, get_current_thread_id(thread), info.pydev_step_cmd) self.writer.add_command(cmd) info.pydev_state = STATE_SUSPEND thread.stop_reason = CMD_SET_NEXT_STATEMENT @@ -2155,7 +2320,7 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th thread.stop_reason = CMD_THREAD_SUSPEND # return to the suspend state and wait for other command (without sending any # additional notification to the client). - return self._do_wait_suspend(thread, frame, event, arg, suspend_type, from_this_thread, frames_tracker) + return self._do_wait_suspend(thread, frame, event, arg, trace_suspend_type, from_this_thread, frames_tracker) elif info.pydev_step_cmd in (CMD_STEP_RETURN, CMD_STEP_RETURN_MY_CODE): back_frame = frame.f_back @@ -2172,7 +2337,7 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th if back_frame is not None: # steps back to the same frame (in a return call it will stop in the 'back frame' for the user) info.pydev_step_stop = frame - self.set_trace_for_frame_and_parents(frame) + self.set_trace_for_frame_and_parents(thread.ident, frame) else: # No back frame?!? -- this happens in jython when we have some frame created from an awt event # (the previous frame would be the awt event, but this doesn't make part of 'jython', only 'java') @@ -2184,10 +2349,7 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th if PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING: info.pydev_use_scoped_step_frame = False - if info.pydev_step_cmd in ( - CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, - CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE - ): + if info.pydev_step_cmd in (CMD_STEP_OVER, CMD_STEP_OVER_MY_CODE, CMD_STEP_INTO, CMD_STEP_INTO_MY_CODE): # i.e.: We're stepping: check if the stepping should be scoped (i.e.: in ipython # each line is executed separately in a new frame, in which case we need to consider # the next line as if it was still in the same frame). @@ -2196,11 +2358,11 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th f = f.f_back if f and f.f_code.co_name == PYDEVD_IPYTHON_CONTEXT[2]: info.pydev_use_scoped_step_frame = True - pydev_log.info('Using (ipython) scoped stepping.') + pydev_log.info("Using (ipython) scoped stepping.") del f del frame - cmd = self.cmd_factory.make_thread_run_message(get_current_thread_id(thread), info.pydev_step_cmd) + cmd = self.cmd_factory.make_thread_run_message(self, get_current_thread_id(thread), info.pydev_step_cmd) self.writer.add_command(cmd) with CustomFramesContainer.custom_frames_lock: @@ -2209,6 +2371,7 @@ def _do_wait_suspend(self, thread, frame, event, arg, suspend_type, from_this_th # print('Removing created frame: %s' % (frame_id,)) self.writer.add_command(self.cmd_factory.make_thread_killed_message(frame_id)) + info.update_stepping_info() return keep_suspended def do_stop_on_unhandled_exception(self, thread, frame, frames_byid, arg): @@ -2218,7 +2381,7 @@ def do_stop_on_unhandled_exception(self, thread, frame, frames_byid, arg): self.send_caught_exception_stack(thread, arg, id(frame)) try: self.set_suspend(thread, CMD_ADD_EXCEPTION_BREAK) - self.do_wait_suspend(thread, frame, 'exception', arg, EXCEPTION_TYPE_UNHANDLED) + self.do_wait_suspend(thread, frame, "exception", arg, EXCEPTION_TYPE_UNHANDLED) except: self.send_caught_exception_stack_proceeded(thread) except: @@ -2227,25 +2390,51 @@ def do_stop_on_unhandled_exception(self, thread, frame, frames_byid, arg): remove_exception_from_frame(frame) frame = None - def set_trace_for_frame_and_parents(self, frame, **kwargs): - disable = kwargs.pop('disable', False) + def set_trace_for_frame_and_parents(self, thread_ident: Optional[int], frame, **kwargs): + disable = kwargs.pop("disable", False) assert not kwargs + DEBUG = True # 'defaulttags' in frame.f_code.co_filename + while frame is not None: + if not isinstance(frame, FrameType): + # This is the case for django/jinja frames. + pydev_log.debug("Not a frame: %s", frame) + frame = frame.f_back + continue + # Don't change the tracing on debugger-related files file_type = self.get_file_type(frame) + if PYDEVD_USE_SYS_MONITORING: + if file_type is None: + if disable: + if DEBUG: + pydev_log.debug("Disable tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) + pydevd_sys_monitoring.disable_code_tracing(frame.f_code) - if file_type is None: - if disable: - pydev_log.debug('Disable tracing of frame: %s - %s', frame.f_code.co_filename, frame.f_code.co_name) - if frame.f_trace is not None and frame.f_trace is not NO_FTRACE: - frame.f_trace = NO_FTRACE - - elif frame.f_trace is not self.trace_dispatch: - pydev_log.debug('Set tracing of frame: %s - %s', frame.f_code.co_filename, frame.f_code.co_name) - frame.f_trace = self.trace_dispatch + else: + if DEBUG: + pydev_log.debug("Set tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) + pydevd_sys_monitoring.enable_code_tracing(thread_ident, frame.f_code, frame) + else: + if DEBUG: + pydev_log.debug("SKIP set tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) else: - pydev_log.debug('SKIP set tracing of frame: %s - %s', frame.f_code.co_filename, frame.f_code.co_name) + # Not using sys.monitoring. + if file_type is None: + if disable: + if DEBUG: + pydev_log.debug("Disable tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) + if frame.f_trace is not None and frame.f_trace is not NO_FTRACE: + frame.f_trace = NO_FTRACE + + elif frame.f_trace is not self.trace_dispatch: + if DEBUG: + pydev_log.debug("Set tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) + frame.f_trace = self.trace_dispatch + else: + if DEBUG: + pydev_log.debug("SKIP set tracing of frame: %s - %s", frame.f_code.co_filename, frame.f_code.co_name) frame = frame.f_back @@ -2296,19 +2485,18 @@ def get_pydb_daemon_threads_to_wait(): while time.time() < started_at + timeout: if len(get_pydb_daemon_threads_to_wait()) == 0: break - time.sleep(1 / 10.) + time.sleep(1 / 10.0) else: thread_names = [t.name for t in get_pydb_daemon_threads_to_wait()] if thread_names: - pydev_log.debug("The following pydb threads may not have finished correctly: %s", - ', '.join(thread_names)) + pydev_log.debug("The following pydb threads may not have finished correctly: %s", ", ".join(thread_names)) finally: self._wait_for_threads_to_finish_called_event.set() except: pydev_log.exception() - def dispose_and_kill_all_pydevd_threads(self, wait=True, timeout=.5): - ''' + def dispose_and_kill_all_pydevd_threads(self, wait=True, timeout=0.5): + """ When this method is called we finish the debug session, terminate threads and if this was registered as the global instance, unregister it -- afterwards it should be possible to create a new instance and set as global to start @@ -2319,12 +2507,14 @@ def dispose_and_kill_all_pydevd_threads(self, wait=True, timeout=.5): (based on the available timeout). Note that this must be thread-safe and if one thread is waiting the other thread should also wait. - ''' + """ try: back_frame = sys._getframe().f_back pydev_log.debug( 'PyDB.dispose_and_kill_all_pydevd_threads (called from: File "%s", line %s, in %s)', - back_frame.f_code.co_filename, back_frame.f_lineno, back_frame.f_code.co_name + back_frame.f_code.co_filename, + back_frame.f_lineno, + back_frame.f_code.co_name, ) back_frame = None with self._disposed_lock: @@ -2354,7 +2544,7 @@ def dispose_and_kill_all_pydevd_threads(self, wait=True, timeout=.5): pydb_daemon_threads = set(self.created_pydb_daemon_threads) for t in pydb_daemon_threads: - if hasattr(t, 'do_kill_pydev_thread'): + if hasattr(t, "do_kill_pydev_thread"): pydev_log.debug("PyDB.dispose_and_kill_all_pydevd_threads killing thread: %s", t) t.do_kill_pydev_thread() @@ -2377,32 +2567,36 @@ def dispose_and_kill_all_pydevd_threads(self, wait=True, timeout=.5): pydev_log.debug("PyDB.dispose_and_kill_all_pydevd_threads: finished") def prepare_to_run(self): - ''' Shared code to prepare debugging by installing traces and registering threads ''' + """Shared code to prepare debugging by installing traces and registering threads""" self.patch_threads() self.start_auxiliary_daemon_threads() def patch_threads(self): - try: - # not available in jython! - threading.settrace(self.trace_dispatch) # for all future threads - except: - pass + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.start_monitoring(all_threads=True) + else: + try: + # not available in jython! + threading.settrace(self.trace_dispatch) # for all future threads + except: + pass from _pydev_bundle.pydev_monkey import patch_thread_modules + patch_thread_modules() def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): module_name = None - entry_point_fn = '' + entry_point_fn = "" if is_module: # When launching with `python -m `, python automatically adds # an empty path to the PYTHONPATH which resolves files in the current # directory, so, depending how pydevd itself is launched, we may need # to manually add such an entry to properly resolve modules in the # current directory (see: https://github.com/Microsoft/ptvsd/issues/1010). - if '' not in sys.path: - sys.path.insert(0, '') - file, _, entry_point_fn = file.partition(':') + if "" not in sys.path: + sys.path.insert(0, "") + file, _, entry_point_fn = file.partition(":") module_name = file filename = get_fullname(file) if filename is None: @@ -2420,14 +2614,14 @@ def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): else: file = filename mod_dir = os.path.dirname(filename) - main_py = os.path.join(mod_dir, '__main__.py') - main_pyc = os.path.join(mod_dir, '__main__.pyc') - if filename.endswith('__init__.pyc'): + main_py = os.path.join(mod_dir, "__main__.py") + main_pyc = os.path.join(mod_dir, "__main__.pyc") + if filename.endswith("__init__.pyc"): if os.path.exists(main_pyc): filename = main_pyc elif os.path.exists(main_py): filename = main_py - elif filename.endswith('__init__.py'): + elif filename.endswith("__init__.py"): if os.path.exists(main_pyc) and not os.path.exists(main_py): filename = main_pyc elif os.path.exists(main_py): @@ -2436,16 +2630,16 @@ def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): sys.argv[0] = filename if os.path.isdir(file): - new_target = os.path.join(file, '__main__.py') + new_target = os.path.join(file, "__main__.py") if os.path.isfile(new_target): file = new_target m = None if globals is None: - m = save_main_module(file, 'pydevd') + m = save_main_module(file, "pydevd") globals = m.__dict__ try: - globals['__builtins__'] = __builtins__ + globals["__builtins__"] = __builtins__ except NameError: pass # Not there on Jython... @@ -2461,7 +2655,7 @@ def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): # I think this is an ugly hack, bug it works (seems to) for the bug that says that sys.path should be the same in # debug and run. - if sys.path[0] != '' and m is not None and m.__file__.startswith(sys.path[0]): + if sys.path[0] != "" and m is not None and m.__file__.startswith(sys.path[0]): # print >> sys.stderr, 'Deleting: ', sys.path[0] del sys.path[0] @@ -2496,7 +2690,7 @@ def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): except: pydev_log.exception("Matplotlib support in debugger failed") - if hasattr(sys, 'exc_clear'): + if hasattr(sys, "exc_clear"): # we should clean exception information in Python 2, before user's code execution sys.exc_clear() @@ -2510,11 +2704,12 @@ def run(self, file, globals=None, locals=None, is_module=False, set_trace=True): return self._exec(is_module, entry_point_fn, module_name, file, globals, locals) def _exec(self, is_module, entry_point_fn, module_name, file, globals, locals): - ''' + """ This function should have frames tracked by unhandled exceptions (the `_exec` name is important). - ''' + """ + t = threading.current_thread() # Keep in 't' local variable to be accessed afterwards from frame.f_locals. if not is_module: - globals = pydevd_runpy.run_path(file, globals, '__main__') + globals = pydevd_runpy.run_path(file, globals, "__main__") else: # treat ':' as a separator between module and entry point function # if there is no entry point we run we same as with -m switch. Otherwise we perform @@ -2533,8 +2728,10 @@ def wait_for_commands(self, globals): thread = threading.current_thread() from _pydevd_bundle import pydevd_frame_utils - frame = pydevd_frame_utils.Frame(None, -1, pydevd_frame_utils.FCode("Console", - os.path.abspath(os.path.dirname(__file__))), globals, globals) + + frame = pydevd_frame_utils.Frame( + None, -1, pydevd_frame_utils.FCode("Console", os.path.abspath(os.path.dirname(__file__))), globals, globals + ) thread_id = get_current_thread_id(thread) self.add_fake_frame(thread_id, id(frame), frame) @@ -2551,24 +2748,23 @@ def wait_for_commands(self, globals): class IDAPMessagesListener(object): - def before_send(self, message_as_dict): - ''' + """ Called just before a message is sent to the IDE. :type message_as_dict: dict - ''' + """ def after_receive(self, message_as_dict): - ''' + """ Called just after a message is received from the IDE. :type message_as_dict: dict - ''' + """ def add_dap_messages_listener(dap_messages_listener): - ''' + """ Adds a listener for the DAP (debug adapter protocol) messages. :type dap_messages_listener: IDAPMessagesListener @@ -2577,16 +2773,16 @@ def add_dap_messages_listener(dap_messages_listener): :note: the notifications are sent from threads and they are not synchronized (so, it's possible that a message is sent and received from different threads at the same time). - ''' + """ py_db = get_global_debugger() if py_db is None: - raise AssertionError('PyDB is still not setup.') + raise AssertionError("PyDB is still not setup.") py_db.add_dap_messages_listener(dap_messages_listener) def send_json_message(msg): - ''' + """ API to send some custom json message. :param dict|pydevd_schema.BaseSchema msg: @@ -2594,7 +2790,7 @@ def send_json_message(msg): :return bool: True if the message was added to the queue to be sent and False otherwise. - ''' + """ py_db = get_global_debugger() if py_db is None: return False @@ -2610,11 +2806,12 @@ def send_json_message(msg): def enable_qt_support(qt_support_mode): from _pydev_bundle import pydev_monkey_qt + pydev_monkey_qt.patch_qt(qt_support_mode) def start_dump_threads_thread(filename_template, timeout, recurrent): - ''' + """ Helper to dump threads after a timeout. :param filename_template: @@ -2624,9 +2821,8 @@ def start_dump_threads_thread(filename_template, timeout, recurrent): The timeout (in seconds) for the dump. :param recurrent: If True we'll keep on doing thread dumps. - ''' - assert filename_template.count('%s') == 1, \ - 'Expected one %%s to appear in: %s' % (filename_template,) + """ + assert filename_template.count("%s") == 1, "Expected one %%s to appear in: %s" % (filename_template,) def _threads_on_timeout(): try: @@ -2637,7 +2833,7 @@ def _threads_on_timeout(): os.makedirs(os.path.dirname(filename)) except Exception: pass - with open(filename, 'w') as stream: + with open(filename, "w") as stream: dump_threads(stream) if not recurrent: return @@ -2650,25 +2846,25 @@ def _threads_on_timeout(): def dump_threads(stream=None): - ''' + """ Helper to dump thread info (default is printing to stderr). - ''' + """ pydevd_utils.dump_threads(stream) def usage(doExit=0): - sys.stdout.write('Usage:\n') - sys.stdout.write('pydevd.py --port N [(--client hostname) | --server] --file executable [file_options]\n') + sys.stdout.write("Usage:\n") + sys.stdout.write("pydevd.py --port N [(--client hostname) | --server] --file executable [file_options]\n") if doExit: sys.exit(0) def _init_stdout_redirect(): - pydevd_io.redirect_stream_to_pydb_io_messages(std='stdout') + pydevd_io.redirect_stream_to_pydb_io_messages(std="stdout") def _init_stderr_redirect(): - pydevd_io.redirect_stream_to_pydb_io_messages(std='stderr') + pydevd_io.redirect_stream_to_pydb_io_messages(std="stderr") def _enable_attach( @@ -2678,8 +2874,8 @@ def _enable_attach( patch_multiprocessing=False, access_token=None, client_access_token=None, - ): - ''' +): + """ Starts accepting connections at the given host/port. The debugger will not be initialized nor configured, it'll only start accepting connections (and will have the tracing setup in this thread). @@ -2688,13 +2884,13 @@ def _enable_attach( :param address: (host, port) :type address: tuple(str, int) - ''' + """ host = address[0] port = int(address[1]) if SetupHolder.setup is not None: - if port != SetupHolder.setup['port']: - raise AssertionError('Unable to listen in port: %s (already listening in port: %s)' % (port, SetupHolder.setup['port'])) + if port != SetupHolder.setup["port"]: + raise AssertionError("Unable to listen in port: %s (already listening in port: %s)" % (port, SetupHolder.setup["port"])) settrace( host=host, port=port, @@ -2714,30 +2910,30 @@ def _enable_attach( def _wait_for_attach(cancel=None): - ''' + """ Meant to be called after _enable_attach() -- the current thread will only unblock after a connection is in place and the DAP (Debug Adapter Protocol) sends the ConfigurationDone request. - ''' + """ py_db = get_global_debugger() if py_db is None: - raise AssertionError('Debugger still not created. Please use _enable_attach() before using _wait_for_attach().') + raise AssertionError("Debugger still not created. Please use _enable_attach() before using _wait_for_attach().") py_db.block_until_configuration_done(cancel=cancel) def _is_attached(): - ''' + """ Can be called any time to check if the connection was established and the DAP (Debug Adapter Protocol) has sent the ConfigurationDone request. - ''' + """ py_db = get_global_debugger() return (py_db is not None) and py_db.is_attached() -#======================================================================================================================= +# ======================================================================================================================= # settrace -#======================================================================================================================= +# ======================================================================================================================= def settrace( host=None, stdout_to_server=False, @@ -2745,7 +2941,7 @@ def settrace( port=5678, suspend=True, trace_only_current_thread=False, - overwrite_prev_trace=False, + overwrite_prev_trace=False, # Deprecated patch_multiprocessing=False, stop_at_frame=None, block_until_connected=True, @@ -2755,9 +2951,10 @@ def settrace( access_token=None, client_access_token=None, notify_stdin=True, - **kwargs - ): - '''Sets the tracing function with the pydev debug function and initializes needed facilities. + protocol=None, + **kwargs, +): + """Sets the tracing function with the pydev debug function and initializes needed facilities. :param host: the user may specify another host, if the debug server is not in the same machine (default is the local host) @@ -2809,13 +3006,20 @@ def settrace( as an input to the process or as a command to be evaluated. Note that parallel-python has issues with this (because it tries to assert that sys.stdin is of a given type instead of just checking that it has what it needs). - ''' - stdout_to_server = stdout_to_server or kwargs.get('stdoutToServer', False) # Backward compatibility - stderr_to_server = stderr_to_server or kwargs.get('stderrToServer', False) # Backward compatibility + :param protocol: + When using in Eclipse the protocol should not be passed, but when used in VSCode + or some other IDE/editor that accepts the Debug Adapter Protocol then 'dap' should + be passed. + """ + if protocol and protocol.lower() == "dap": + pydevd_defaults.PydevdCustomization.DEFAULT_PROTOCOL = pydevd_constants.HTTP_JSON_PROTOCOL + + stdout_to_server = stdout_to_server or kwargs.get("stdoutToServer", False) # Backward compatibility + stderr_to_server = stderr_to_server or kwargs.get("stderrToServer", False) # Backward compatibility # Internal use (may be used to set the setup info directly for subprocesess). - __setup_holder__ = kwargs.get('__setup_holder__') + __setup_holder__ = kwargs.get("__setup_holder__") with _set_trace_lock: _locked_settrace( @@ -2858,7 +3062,7 @@ def _locked_settrace( client_access_token, __setup_holder__, notify_stdin, - ): +): if patch_multiprocessing: try: from _pydev_bundle import pydev_monkey @@ -2869,6 +3073,7 @@ def _locked_settrace( if host is None: from _pydev_bundle import pydev_localhost + host = pydev_localhost.get_localhost() global _global_redirect_stdout_to_server @@ -2883,20 +3088,20 @@ def _locked_settrace( if SetupHolder.setup is None: setup = { - 'client': host, # dispatch expects client to be set to the host address when server is False - 'server': False, - 'port': int(port), - 'multiprocess': patch_multiprocessing, - 'skip-notify-stdin': not notify_stdin, + "client": host, # dispatch expects client to be set to the host address when server is False + "server": False, + "port": int(port), + "multiprocess": patch_multiprocessing, + "skip-notify-stdin": not notify_stdin, } SetupHolder.setup = setup if access_token is not None: py_db.authentication.access_token = access_token - SetupHolder.setup['access-token'] = access_token + SetupHolder.setup["access-token"] = access_token if client_access_token is not None: py_db.authentication.client_access_token = client_access_token - SetupHolder.setup['client-access-token'] = client_access_token + SetupHolder.setup["client-access-token"] = client_access_token if block_until_connected: py_db.connect(host, port) # Note: connect can raise error. @@ -2946,11 +3151,11 @@ def _locked_settrace( # As this is the first connection, also set tracing for any untraced threads py_db.set_tracing_for_untraced_contexts() - py_db.set_trace_for_frame_and_parents(get_frame().f_back) + py_db.set_trace_for_frame_and_parents(t.ident, get_frame().f_back) with CustomFramesContainer.custom_frames_lock: # @UndefinedVariable for _frameId, custom_frame in CustomFramesContainer.custom_frames.items(): - py_db.set_trace_for_frame_and_parents(custom_frame.frame) + py_db.set_trace_for_frame_and_parents(None, custom_frame.frame) else: # ok, we're already in debug mode, with all set, so, let's just set the break @@ -2959,9 +3164,8 @@ def _locked_settrace( if client_access_token is not None: py_db.authentication.client_access_token = client_access_token - py_db.set_trace_for_frame_and_parents(get_frame().f_back) - t = threadingCurrentThread() + py_db.set_trace_for_frame_and_parents(t.ident, get_frame().f_back) additional_info = set_additional_thread_info(t) if trace_only_current_thread: @@ -2973,30 +3177,42 @@ def _locked_settrace( # Suspend as the last thing after all tracing is in place. if suspend: + additional_info.pydev_original_step_cmd = CMD_SET_BREAK if stop_at_frame is not None: # If the step was set we have to go to run state and # set the proper frame for it to stop. additional_info.pydev_state = STATE_RUN - additional_info.pydev_original_step_cmd = CMD_STEP_OVER additional_info.pydev_step_cmd = CMD_STEP_OVER additional_info.pydev_step_stop = stop_at_frame additional_info.suspend_type = PYTHON_SUSPEND + additional_info.update_stepping_info() + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.update_monitor_events(suspend_requested=True) + py_db.set_trace_for_frame_and_parents(t.ident, stop_at_frame) else: # Ask to break as soon as possible. - py_db.set_suspend(t, CMD_SET_BREAK) + py_db.set_suspend(t, CMD_SET_BREAK, suspend_requested=True) + py_db.set_trace_for_frame_and_parents(t.ident, get_frame().f_back) + + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.restart_events() def stoptrace(): pydev_log.debug("pydevd.stoptrace()") pydevd_tracing.restore_sys_set_trace_func() - sys.settrace(None) - try: - # not available in jython! - threading.settrace(None) # for all future threads - except: - pass + if PYDEVD_USE_SYS_MONITORING: + pydevd_sys_monitoring.stop_monitoring(all_threads=True) + else: + sys.settrace(None) + try: + # not available in jython! + threading.settrace(None) # for all future threads + except: + pass from _pydev_bundle.pydev_monkey import undo_patch_thread_modules + undo_patch_thread_modules() # Either or both standard streams can be closed at this point, @@ -3017,7 +3233,6 @@ def stoptrace(): class Dispatcher(object): - def __init__(self): self.port = None @@ -3037,7 +3252,6 @@ def close(self): class DispatchReader(ReaderThread): - def __init__(self, dispatcher): self.dispatcher = dispatcher @@ -3081,8 +3295,8 @@ def process_command(self, cmd_id, seq, text): def dispatch(): setup = SetupHolder.setup - host = setup['client'] - port = setup['port'] + host = setup["client"] + port = setup["port"] if DISPATCH_APPROACH == DISPATCH_APPROACH_EXISTING_CONNECTION: dispatcher = Dispatcher() try: @@ -3094,10 +3308,11 @@ def dispatch(): def settrace_forked(setup_tracing=True): - ''' + """ When creating a fork from a process in the debugger, we need to reset the whole debugger environment! - ''' + """ from _pydevd_bundle.pydevd_constants import GlobalDebuggerHolder + py_db = GlobalDebuggerHolder.global_dbg if py_db is not None: py_db.created_pydb_daemon_threads = {} # Just making sure we won't touch those (paused) threads. @@ -3114,14 +3329,16 @@ def settrace_forked(setup_tracing=True): # i.e.: Get the ppid at this point as it just changed. # If we later do an exec() it should remain the same ppid. setup[pydevd_constants.ARGUMENT_PPID] = PyDevdAPI().get_ppid() - access_token = setup.get('access-token') - client_access_token = setup.get('client-access-token') + access_token = setup.get("access-token") + client_access_token = setup.get("client-access-token") if setup_tracing: from _pydevd_frame_eval.pydevd_frame_eval_main import clear_thread_local_info + host, port = dispatch() import pydevd_tracing + pydevd_tracing.restore_sys_set_trace_func() if setup_tracing: @@ -3132,20 +3349,20 @@ def settrace_forked(setup_tracing=True): clear_thread_local_info() settrace( - host, - port=port, - suspend=False, - trace_only_current_thread=False, - overwrite_prev_trace=True, - patch_multiprocessing=True, - access_token=access_token, - client_access_token=client_access_token, + host, + port=port, + suspend=False, + trace_only_current_thread=False, + overwrite_prev_trace=True, + patch_multiprocessing=True, + access_token=access_token, + client_access_token=client_access_token, ) @contextmanager def skip_subprocess_arg_patch(): - ''' + """ May be used to skip the monkey-patching that pydevd does to skip changing arguments to embed the debugger into child processes. @@ -3153,14 +3370,15 @@ def skip_subprocess_arg_patch(): with pydevd.skip_subprocess_arg_patch(): subprocess.call(...) - ''' + """ from _pydev_bundle import pydev_monkey + with pydev_monkey.skip_subprocess_arg_patch(): yield def add_dont_terminate_child_pid(pid): - ''' + """ May be used to ask pydevd to skip the termination of some process when it's asked to terminate (debug adapter protocol only). @@ -3171,14 +3389,13 @@ def add_dont_terminate_child_pid(pid): process = subprocess.Popen(...) pydevd.add_dont_terminate_child_pid(process.pid) - ''' + """ py_db = get_global_debugger() if py_db is not None: py_db.dont_terminate_child_pids.add(pid) class SetupHolder: - setup = None @@ -3187,21 +3404,22 @@ def apply_debugger_options(setup_options): :type setup_options: dict[str, bool] """ - default_options = {'save-signatures': False, 'qt-support': ''} + default_options = {"save-signatures": False, "qt-support": ""} default_options.update(setup_options) setup_options = default_options debugger = get_global_debugger() - if setup_options['save-signatures']: + if setup_options["save-signatures"]: if pydevd_vm_type.get_vm_type() == pydevd_vm_type.PydevdVmType.JYTHON: sys.stderr.write("Collecting run-time type information is not supported for Jython\n") else: # Only import it if we're going to use it! from _pydevd_bundle.pydevd_signature import SignatureFactory + debugger.signature_factory = SignatureFactory() - if setup_options['qt-support']: - enable_qt_support(setup_options['qt-support']) + if setup_options["qt-support"]: + enable_qt_support(setup_options["qt-support"]) @call_only_once @@ -3210,10 +3428,10 @@ def patch_stdin(): def _internal_patch_stdin(py_db=None, sys=None, getpass_mod=None): - ''' + """ Note: don't use this function directly, use `patch_stdin()` instead. (this function is only meant to be used on test-cases to avoid patching the actual globals). - ''' + """ # Patch stdin so that we notify when readline() is called. original_sys_stdin = sys.stdin debug_console_stdin = DebugConsoleStdIn(py_db, original_sys_stdin) @@ -3234,6 +3452,7 @@ def getpass(*args, **kwargs): getpass_mod.getpass = getpass + # Dispatch on_debugger_modules_loaded here, after all primary py_db modules are loaded @@ -3241,8 +3460,8 @@ def getpass(*args, **kwargs): handler.on_debugger_modules_loaded(debugger_version=__version__) -def log_to(log_file:str, log_level=3) -> None: - ''' +def log_to(log_file: str, log_level=3) -> None: + """ In pydevd it's possible to log by setting the following environment variables: PYDEVD_DEBUG=1 (sets the default log level to 3 along with other default options) @@ -3256,7 +3475,7 @@ def log_to(log_file:str, log_level=3) -> None: pydevd is still doing its imports and not just after this method is called, but on cases where this is hard to do this function may be called to set the tracing after pydevd itself is already imported. - ''' + """ pydev_log.log_to(log_file, log_level) @@ -3268,45 +3487,45 @@ def _log_initial_info(): pydev_log.debug("Using gevent mode: %s / imported gevent module support: %s", SUPPORT_GEVENT, bool(pydevd_gevent_integration)) -def config(protocol='', debug_mode='', preimport=''): - pydev_log.debug('Config: protocol: %s, debug_mode: %s, preimport: %s', protocol, debug_mode, preimport) +def config(protocol="", debug_mode="", preimport=""): + pydev_log.debug("Config: protocol: %s, debug_mode: %s, preimport: %s", protocol, debug_mode, preimport) PydevdCustomization.DEFAULT_PROTOCOL = protocol PydevdCustomization.DEBUG_MODE = debug_mode PydevdCustomization.PREIMPORT = preimport -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= +# ======================================================================================================================= def main(): - # parse the command line. --file is our last argument that is required _log_initial_info() original_argv = sys.argv[:] try: from _pydevd_bundle.pydevd_command_line_handling import process_command_line + setup = process_command_line(sys.argv) SetupHolder.setup = setup except ValueError: pydev_log.exception() usage(1) - preimport = setup.get('preimport') + preimport = setup.get("preimport") if preimport: pydevd_defaults.PydevdCustomization.PREIMPORT = preimport - debug_mode = setup.get('debug-mode') + debug_mode = setup.get("debug-mode") if debug_mode: pydevd_defaults.PydevdCustomization.DEBUG_MODE = debug_mode - log_trace_level = setup.get('log-level') + log_trace_level = setup.get("log-level") # Note: the logging info could've been changed (this would happen if this is a # subprocess and the value in the environment variable does not match the value in the # argument because the user used `pydevd.log_to` instead of supplying the environment # variable). If this is the case, update the logging info and re-log some information # in the new target. - new_debug_file = setup.get('log-file') + new_debug_file = setup.get("log-file") if new_debug_file and DebugInfoHolder.PYDEVD_DEBUG_FILE != new_debug_file: # The debug file can't be set directly, we need to use log_to() so that the a # new stream is actually created for the new file. @@ -3316,23 +3535,23 @@ def main(): elif log_trace_level is not None: # The log file was not specified DebugInfoHolder.DEBUG_TRACE_LEVEL = log_trace_level - pydev_log.debug('Original sys.argv: %s', original_argv) + pydev_log.debug("Original sys.argv: %s", original_argv) - if setup['print-in-debugger-startup']: + if setup["print-in-debugger-startup"]: try: - pid = ' (pid: %s)' % os.getpid() + pid = " (pid: %s)" % os.getpid() except: - pid = '' + pid = "" sys.stderr.write("pydev debugger: starting%s\n" % pid) - pydev_log.debug("Executing file %s", setup['file']) + pydev_log.debug("Executing file %s", setup["file"]) pydev_log.debug("arguments: %s", (sys.argv,)) - pydevd_vm_type.setup_type(setup.get('vm_type', None)) + pydevd_vm_type.setup_type(setup.get("vm_type", None)) - port = setup['port'] - host = setup['client'] - f = setup['file'] + port = setup["port"] + host = setup["client"] + f = setup["file"] fix_app_engine_debug = False debugger = get_global_debugger() @@ -3344,10 +3563,10 @@ def main(): except: pass # Not usable on jython 2.1 else: - if setup['multiprocess']: # PyDev + if setup["multiprocess"]: # PyDev pydev_monkey.patch_new_process_functions() - elif setup['multiproc']: # PyCharm + elif setup["multiproc"]: # PyCharm pydev_log.debug("Started in multiproc mode\n") global DISPATCH_APPROACH DISPATCH_APPROACH = DISPATCH_APPROACH_EXISTING_CONNECTION @@ -3375,20 +3594,20 @@ def main(): pydev_log.exception("Error patching process functions.") # Only do this patching if we're not running with multiprocess turned on. - if f.find('dev_appserver.py') != -1: - if os.path.basename(f).startswith('dev_appserver.py'): + if f.find("dev_appserver.py") != -1: + if os.path.basename(f).startswith("dev_appserver.py"): appserver_dir = os.path.dirname(f) - version_file = os.path.join(appserver_dir, 'VERSION') + version_file = os.path.join(appserver_dir, "VERSION") if os.path.exists(version_file): try: - stream = open(version_file, 'r') + stream = open(version_file, "r") try: for line in stream.read().splitlines(): line = line.strip() - if line.startswith('release:'): + if line.startswith("release:"): line = line[8:].strip() - version = line.replace('"', '') - version = version.split('.') + version = line.replace('"', "") + version = version.split(".") if int(version[0]) > 1: fix_app_engine_debug = True @@ -3417,17 +3636,18 @@ def main(): # # itself to be able to benefit from seeing the tasklets created before the remote debugger is attached. from _pydevd_bundle import pydevd_stackless + pydevd_stackless.patch_stackless() except: # It's ok not having stackless there... try: - if hasattr(sys, 'exc_clear'): + if hasattr(sys, "exc_clear"): sys.exc_clear() # the exception information should be cleaned in Python 2 except: pass - is_module = setup['module'] - if not setup['skip-notify-stdin']: + is_module = setup["module"] + if not setup["skip-notify-stdin"]: patch_stdin() if setup[pydevd_constants.ARGUMENT_JSON_PROTOCOL]: @@ -3442,32 +3662,36 @@ def main(): elif setup[pydevd_constants.ARGUMENT_QUOTED_LINE_PROTOCOL]: PyDevdAPI().set_protocol(debugger, 0, pydevd_constants.QUOTED_LINE_PROTOCOL) - access_token = setup['access-token'] + access_token = setup["access-token"] if access_token: debugger.authentication.access_token = access_token - client_access_token = setup['client-access-token'] + client_access_token = setup["client-access-token"] if client_access_token: debugger.authentication.client_access_token = client_access_token if fix_app_engine_debug: sys.stderr.write("pydev debugger: google app engine integration enabled\n") curr_dir = os.path.dirname(__file__) - app_engine_startup_file = os.path.join(curr_dir, 'pydev_app_engine_debug_startup.py') + app_engine_startup_file = os.path.join(curr_dir, "pydev_app_engine_debug_startup.py") - sys.argv.insert(1, '--python_startup_script=' + app_engine_startup_file) + sys.argv.insert(1, "--python_startup_script=" + app_engine_startup_file) import json - setup['pydevd'] = __file__ - sys.argv.insert(2, '--python_startup_args=%s' % json.dumps(setup),) - sys.argv.insert(3, '--automatic_restart=no') - sys.argv.insert(4, '--max_module_instances=1') + + setup["pydevd"] = __file__ + sys.argv.insert( + 2, + "--python_startup_args=%s" % json.dumps(setup), + ) + sys.argv.insert(3, "--automatic_restart=no") + sys.argv.insert(4, "--max_module_instances=1") # Run the dev_appserver - debugger.run(setup['file'], None, None, is_module, set_trace=False) + debugger.run(setup["file"], None, None, is_module, set_trace=False) else: - if setup['save-threading']: + if setup["save-threading"]: debugger.thread_analyser = ThreadingLogger() - if setup['save-asyncio']: + if setup["save-asyncio"]: debugger.asyncio_analyser = AsyncioLogger() apply_debugger_options(setup) @@ -3479,11 +3703,11 @@ def main(): pydev_log.exception() sys.exit(1) - globals = debugger.run(setup['file'], None, None, is_module) + globals = debugger.run(setup["file"], None, None, is_module) - if setup['cmd-line']: + if setup["cmd-line"]: debugger.wait_for_commands(globals) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py index 6369508ed..78ad8ac56 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_always_live_program.py @@ -1,32 +1,40 @@ import sys import struct -print('Executable: %s' % sys.executable) + +print("Executable: %s" % sys.executable) import os + + def loop_in_thread(): while True: import time - time.sleep(.5) - sys.stdout.write('#') + + time.sleep(0.5) + sys.stdout.write("#") sys.stdout.flush() + import threading + threading.Thread(target=loop_in_thread).start() def is_python_64bit(): - return (struct.calcsize('P') == 8) + return struct.calcsize("P") == 8 -print('Is 64: %s' % is_python_64bit()) -if __name__ == '__main__': - print('pid:%s' % (os.getpid())) +print("Is 64: %s" % is_python_64bit()) + +if __name__ == "__main__": + print("pid:%s" % (os.getpid())) i = 0 while True: i += 1 import time - time.sleep(.5) - sys.stdout.write('.') + + time.sleep(0.5) + sys.stdout.write(".") sys.stdout.flush() if i % 40 == 0: - sys.stdout.write('\n') + sys.stdout.write("\n") sys.stdout.flush() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py index 2dbeafe3c..979b6f7ac 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_check.py @@ -1,2 +1,3 @@ import add_code_to_python_process + print(add_code_to_python_process.run_python_code(3736, "print(20)", connect_debugger_tracing=False)) diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py index daeee93f4..c934dd2af 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process.py @@ -1,9 +1,11 @@ import subprocess import sys + print(sys.executable) -if __name__ == '__main__': - p = subprocess.Popen([sys.executable, '-u', '_always_live_program.py']) +if __name__ == "__main__": + p = subprocess.Popen([sys.executable, "-u", "_always_live_program.py"]) import attach_pydevd - attach_pydevd.main(attach_pydevd.process_command_line(['--pid', str(p.pid), '--protocol', 'http'])) + + attach_pydevd.main(attach_pydevd.process_command_line(["--pid", str(p.pid), "--protocol", "http"])) p.wait() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py index 842e71a13..0bc7729bb 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/_test_attach_to_process_linux.py @@ -1,4 +1,4 @@ -''' +""" This module is just for testing concepts. It should be erased later on. Experiments: @@ -17,58 +17,59 @@ // call dlopen("/home/fabioz/Desktop/dev/PyDev.Debugger/pydevd_attach_to_process/linux/attach_linux.so", 1|8) // call dlsym($1, "hello") // call hello() -''' +""" import subprocess import sys import os import time -if __name__ == '__main__': - - linux_dir = os.path.join(os.path.dirname(__file__), 'linux') +if __name__ == "__main__": + linux_dir = os.path.join(os.path.dirname(__file__), "linux") os.chdir(linux_dir) - so_location = os.path.join(linux_dir, 'attach_linux.so') + so_location = os.path.join(linux_dir, "attach_linux.so") try: os.remove(so_location) except: pass - subprocess.call('g++ -shared -o attach_linux.so -fPIC -nostartfiles attach_linux.c'.split()) - print('Finished compiling') - assert os.path.exists('/home/fabioz/Desktop/dev/PyDev.Debugger/pydevd_attach_to_process/linux/attach_linux.so') + subprocess.call("g++ -shared -o attach_linux.so -fPIC -nostartfiles attach_linux.c".split()) + print("Finished compiling") + assert os.path.exists("/home/fabioz/Desktop/dev/PyDev.Debugger/pydevd_attach_to_process/linux/attach_linux.so") os.chdir(os.path.dirname(linux_dir)) -# import attach_pydevd -# attach_pydevd.main(attach_pydevd.process_command_line(['--pid', str(p.pid)])) - p = subprocess.Popen([sys.executable, '-u', '_always_live_program.py']) - print('Size of file: %s' % (os.stat(so_location).st_size)) + # import attach_pydevd + # attach_pydevd.main(attach_pydevd.process_command_line(['--pid', str(p.pid)])) + p = subprocess.Popen([sys.executable, "-u", "_always_live_program.py"]) + print("Size of file: %s" % (os.stat(so_location).st_size)) # (gdb) set architecture # Requires an argument. Valid arguments are i386, i386:x86-64, i386:x64-32, i8086, i386:intel, i386:x86-64:intel, i386:x64-32:intel, i386:nacl, i386:x86-64:nacl, i386:x64-32:nacl, auto. cmd = [ - 'gdb', - '--pid', + "gdb", + "--pid", str(p.pid), - '--batch', + "--batch", ] - arch = 'i386:x86-64' + arch = "i386:x86-64" if arch: cmd.extend(["--eval-command='set architecture %s'" % arch]) - cmd.extend([ - "--eval-command='call dlopen(\"/home/fabioz/Desktop/dev/PyDev.Debugger/pydevd_attach_to_process/linux/attach_linux.so\", 2)'", - "--eval-command='call (int)DoAttach(1, \"print(\\\"check11111check\\\")\", 0)'", - # "--eval-command='call (int)SetSysTraceFunc(1, 0)'", -- never call this way, always use "--command='...gdb_threads_settrace.py'", - # So that threads are all stopped! - ]) + cmd.extend( + [ + "--eval-command='call dlopen(\"/home/fabioz/Desktop/dev/PyDev.Debugger/pydevd_attach_to_process/linux/attach_linux.so\", 2)'", + '--eval-command=\'call (int)DoAttach(1, "print(\\"check11111check\\")", 0)\'', + # "--eval-command='call (int)SetSysTraceFunc(1, 0)'", -- never call this way, always use "--command='...gdb_threads_settrace.py'", + # So that threads are all stopped! + ] + ) - print(' '.join(cmd)) - time.sleep(.5) + print(" ".join(cmd)) + time.sleep(0.5) env = os.environ.copy() - env.pop('PYTHONIOENCODING', None) - env.pop('PYTHONPATH', None) - p2 = subprocess.call(' '.join(cmd), env=env, shell=True) + env.pop("PYTHONIOENCODING", None) + env.pop("PYTHONPATH", None) + p2 = subprocess.call(" ".join(cmd), env=env, shell=True) time.sleep(1) p.kill() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py index 85f3353b1..2e328f617 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/add_code_to_python_process.py @@ -1,4 +1,4 @@ -r''' +r""" Copyright: Brainwy Software Ltda. License: EPL. @@ -64,7 +64,7 @@ To build the dlls needed on windows, visual studio express 13 was used (see compile_dll.bat) See: attach_pydevd.py to attach the pydev debugger to a running python process. -''' +""" # Note: to work with nasm compiling asm to code and decompiling to see asm with shellcode: # x:\nasm\nasm-2.07-win32\nasm-2.07\nasm.exe @@ -94,17 +94,16 @@ def _create_win_event(name): manual_reset = False # i.e.: after someone waits it, automatically set to False. initial_state = False if not isinstance(name, bytes): - name = name.encode('utf-8') + name = name.encode("utf-8") event = CreateEventA(None, manual_reset, initial_state, name) if not event: raise ctypes.WinError() class _WinEvent(object): - def wait_for_event_set(self, timeout=None): - ''' + """ :param timeout: in seconds - ''' + """ if timeout is None: timeout = 0xFFFFFFFF else: @@ -124,13 +123,13 @@ def wait_for_event_set(self, timeout=None): CloseHandle(event) -IS_WINDOWS = sys.platform == 'win32' -IS_LINUX = sys.platform in ('linux', 'linux2') -IS_MAC = sys.platform == 'darwin' +IS_WINDOWS = sys.platform == "win32" +IS_LINUX = sys.platform in ("linux", "linux2") +IS_MAC = sys.platform == "darwin" def is_python_64bit(): - return (struct.calcsize('P') == 8) + return struct.calcsize("P") == 8 def get_target_filename(is_target_process_64=None, prefix=None, extension=None): @@ -140,7 +139,7 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None): # debugger -- the only situation where it's imported is if the user actually does an attach to # process, through `attach_pydevd.py`, but this should usually be called from the IDE directly # and not from the debugger). - libdir = os.path.dirname(__file__) + libdir = os.path.dirname(os.path.abspath(__file__)) if is_target_process_64 is None: if IS_WINDOWS: @@ -150,41 +149,41 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None): # For other platforms, just use the the same bitness of the process we're running in. is_target_process_64 = is_python_64bit() - arch = '' + arch = "" if IS_WINDOWS: # prefer not using platform.machine() when possible (it's a bit heavyweight as it may # spawn a subprocess). - arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get('PROCESSOR_ARCHITECTURE', '')) + arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get("PROCESSOR_ARCHITECTURE", "")) if not arch: arch = platform.machine() if not arch: - print('platform.machine() did not return valid value.') # This shouldn't happen... + print("platform.machine() did not return valid value.") # This shouldn't happen... return None if IS_WINDOWS: if not extension: - extension = '.dll' - suffix_64 = 'amd64' - suffix_32 = 'x86' + extension = ".dll" + suffix_64 = "amd64" + suffix_32 = "x86" elif IS_LINUX: if not extension: - extension = '.so' - suffix_64 = 'amd64' - suffix_32 = 'x86' + extension = ".so" + suffix_64 = "amd64" + suffix_32 = "x86" elif IS_MAC: if not extension: - extension = '.dylib' - suffix_64 = 'x86_64' - suffix_32 = 'x86' + extension = ".dylib" + suffix_64 = "x86_64" + suffix_32 = "x86" else: - print('Unable to attach to process in platform: %s', sys.platform) + print("Unable to attach to process in platform: %s", sys.platform) return None - if arch.lower() not in ('amd64', 'x86', 'x86_64', 'i386', 'x86'): + if arch.lower() not in ("amd64", "x86", "x86_64", "i386", "x86"): # We don't support this processor by default. Still, let's support the case where the # user manually compiled it himself with some heuristics. # @@ -195,19 +194,19 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None): # - linux_and_mac/compile_mac.sh try: - found = [name for name in os.listdir(libdir) if name.startswith('attach_') and name.endswith(extension)] + found = [name for name in os.listdir(libdir) if name.startswith("attach_") and name.endswith(extension)] except: - print('Error listing dir: %s' % (libdir,)) + print("Error listing dir: %s" % (libdir,)) traceback.print_exc() return None if prefix: expected_name = prefix + arch + extension - expected_name_linux = prefix + 'linux_' + arch + extension + expected_name_linux = prefix + "linux_" + arch + extension else: # Default is looking for the attach_ / attach_linux - expected_name = 'attach_' + arch + extension - expected_name_linux = 'attach_linux_' + arch + extension + expected_name = "attach_" + arch + extension + expected_name_linux = "attach_linux_" + arch + extension filename = None if expected_name in found: # Heuristic: user compiled with "attach_." @@ -225,14 +224,10 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None): filename = os.path.join(libdir, found[0]) if filename is None: - print( - 'Unable to attach to process in arch: %s (did not find %s in %s).' % ( - arch, expected_name, libdir - ) - ) + print("Unable to attach to process in arch: %s (did not find %s in %s)." % (arch, expected_name, libdir)) return None - print('Using %s in arch: %s.' % (filename, arch)) + print("Using %s in arch: %s." % (filename, arch)) else: if is_target_process_64: @@ -243,33 +238,34 @@ def get_target_filename(is_target_process_64=None, prefix=None, extension=None): if not prefix: # Default is looking for the attach_ / attach_linux if IS_WINDOWS or IS_MAC: # just the extension changes - prefix = 'attach_' + prefix = "attach_" elif IS_LINUX: - prefix = 'attach_linux_' # historically it has a different name + prefix = "attach_linux_" # historically it has a different name else: - print('Unable to attach to process in platform: %s' % (sys.platform,)) + print("Unable to attach to process in platform: %s" % (sys.platform,)) return None - filename = os.path.join(libdir, '%s%s%s' % (prefix, suffix, extension)) + filename = os.path.join(libdir, "%s%s%s" % (prefix, suffix, extension)) if not os.path.exists(filename): - print('Expected: %s to exist.' % (filename,)) + print("Expected: %s to exist." % (filename,)) return None return filename def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, show_debug_info=0): - assert '\'' not in python_code, 'Having a single quote messes with our command.' + assert "'" not in python_code, "Having a single quote messes with our command." # Suppress winappdbg warning about sql package missing. import warnings + with warnings.catch_warnings(): warnings.simplefilter("ignore", category=ImportWarning) from winappdbg.process import Process if not isinstance(python_code, bytes): - python_code = python_code.encode('utf-8') + python_code = python_code.encode("utf-8") process = Process(pid) bits = process.get_bits() @@ -282,41 +278,40 @@ def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, sh # "Target 64 bits: %s\n" # "Current Python 64 bits: %s" % (is_target_process_64, is_python_64bit())) - with _acquire_mutex('_pydevd_pid_attach_mutex_%s' % (pid,), 10): - print('--- Connecting to %s bits target (current process is: %s) ---' % (bits, 64 if is_python_64bit() else 32)) + with _acquire_mutex("_pydevd_pid_attach_mutex_%s" % (pid,), 10): + print("--- Connecting to %s bits target (current process is: %s) ---" % (bits, 64 if is_python_64bit() else 32)) sys.stdout.flush() with _win_write_to_shared_named_memory(python_code, pid): - - target_executable = get_target_filename(is_target_process_64, 'inject_dll_', '.exe') + target_executable = get_target_filename(is_target_process_64, "inject_dll_", ".exe") if not target_executable: - raise RuntimeError('Could not find expected .exe file to inject dll in attach to process.') + raise RuntimeError("Could not find expected .exe file to inject dll in attach to process.") target_dll = get_target_filename(is_target_process_64) if not target_dll: - raise RuntimeError('Could not find expected .dll file in attach to process.') + raise RuntimeError("Could not find expected .dll file in attach to process.") - print('\n--- Injecting attach dll: %s into pid: %s ---' % (os.path.basename(target_dll), pid)) + print("\n--- Injecting attach dll: %s into pid: %s ---" % (os.path.basename(target_dll), pid)) sys.stdout.flush() args = [target_executable, str(pid), target_dll] subprocess.check_call(args) # Now, if the first injection worked, go on to the second which will actually # run the code. - target_dll_run_on_dllmain = get_target_filename(is_target_process_64, 'run_code_on_dllmain_', '.dll') + target_dll_run_on_dllmain = get_target_filename(is_target_process_64, "run_code_on_dllmain_", ".dll") if not target_dll_run_on_dllmain: - raise RuntimeError('Could not find expected .dll in attach to process.') + raise RuntimeError("Could not find expected .dll in attach to process.") - with _create_win_event('_pydevd_pid_event_%s' % (pid,)) as event: - print('\n--- Injecting run code dll: %s into pid: %s ---' % (os.path.basename(target_dll_run_on_dllmain), pid)) + with _create_win_event("_pydevd_pid_event_%s" % (pid,)) as event: + print("\n--- Injecting run code dll: %s into pid: %s ---" % (os.path.basename(target_dll_run_on_dllmain), pid)) sys.stdout.flush() args = [target_executable, str(pid), target_dll_run_on_dllmain] subprocess.check_call(args) if not event.wait_for_event_set(15): - print('Timeout error: the attach may not have completed.') + print("Timeout error: the attach may not have completed.") sys.stdout.flush() - print('--- Finished dll injection ---\n') + print("--- Finished dll injection ---\n") sys.stdout.flush() return 0 @@ -324,10 +319,10 @@ def run_python_code_windows(pid, python_code, connect_debugger_tracing=False, sh @contextmanager def _acquire_mutex(mutex_name, timeout): - ''' + """ Only one process may be attaching to a pid, so, create a system mutex to make sure this holds in practice. - ''' + """ from winappdbg.win32.kernel32 import CreateMutex, GetLastError, CloseHandle from winappdbg.win32.defines import ERROR_ALREADY_EXISTS @@ -338,8 +333,8 @@ def _acquire_mutex(mutex_name, timeout): if acquired: break if time.time() - initial_time > timeout: - raise TimeoutError('Unable to acquire mutex to make attach before timeout.') - time.sleep(.2) + raise TimeoutError("Unable to acquire mutex to make attach before timeout.") + time.sleep(0.2) try: yield @@ -369,18 +364,17 @@ def _win_write_to_shared_named_memory(python_code, pid): # Note: BUFSIZE must be the same from run_code_in_memory.hpp BUFSIZE = 2048 assert isinstance(python_code, bytes) - assert len(python_code) > 0, 'Python code must not be empty.' + assert len(python_code) > 0, "Python code must not be empty." # Note: -1 so that we're sure we'll add a \0 to the end. - assert len(python_code) < BUFSIZE - 1, 'Python code must have at most %s bytes (found: %s)' % (BUFSIZE - 1, len(python_code)) + assert len(python_code) < BUFSIZE - 1, "Python code must have at most %s bytes (found: %s)" % (BUFSIZE - 1, len(python_code)) - python_code += b'\0' * (BUFSIZE - len(python_code)) - assert python_code.endswith(b'\0') + python_code += b"\0" * (BUFSIZE - len(python_code)) + assert python_code.endswith(b"\0") INVALID_HANDLE_VALUE = -1 PAGE_READWRITE = 0x4 FILE_MAP_WRITE = 0x2 - filemap = CreateFileMapping( - INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, BUFSIZE, u"__pydevd_pid_code_to_run__%s" % (pid,)) + filemap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, BUFSIZE, "__pydevd_pid_code_to_run__%s" % (pid,)) if filemap == INVALID_HANDLE_VALUE or filemap is None: raise Exception("Failed to create named file mapping (ctypes: CreateFileMapping): %s" % (filemap,)) @@ -399,26 +393,34 @@ def _win_write_to_shared_named_memory(python_code, pid): def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show_debug_info=0): - assert '\'' not in python_code, 'Having a single quote messes with our command.' + assert "'" not in python_code, "Having a single quote messes with our command." target_dll = get_target_filename() if not target_dll: - raise RuntimeError('Could not find .so for attach to process.') + libdir = os.path.dirname(os.path.abspath(__file__)) + found = [name for name in os.listdir(libdir)] + raise RuntimeError( + "Could not find .so for attach to process.\nlibdir: %s\nAvailable in dir: %s" + % ( + libdir, + found, + ) + ) target_dll_name = os.path.splitext(os.path.basename(target_dll))[0] # Note: we currently don't support debug builds is_debug = 0 # Note that the space in the beginning of each line in the multi-line is important! cmd = [ - 'gdb', - '--nw', # no gui interface - '--nh', # no ~/.gdbinit - '--nx', # no .gdbinit -# '--quiet', # no version number on startup - '--pid', + "gdb", + "--nw", # no gui interface + "--nh", # no ~/.gdbinit + "--nx", # no .gdbinit + # '--quiet', # no version number on startup + "--pid", str(pid), - '--batch', -# '--batch-silent', + "--batch", + # '--batch-silent', ] # PYDEVD_GDB_SCAN_SHARED_LIBRARIES can be a list of strings with the shared libraries @@ -442,16 +444,16 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show # # The downside is that it may be dependent on the Linux version being attached to (which is the # reason why this is no longer done by default -- see: https://github.com/microsoft/debugpy/issues/882). - gdb_load_shared_libraries = os.environ.get('PYDEVD_GDB_SCAN_SHARED_LIBRARIES', '').strip() + gdb_load_shared_libraries = os.environ.get("PYDEVD_GDB_SCAN_SHARED_LIBRARIES", "").strip() if gdb_load_shared_libraries: - print('PYDEVD_GDB_SCAN_SHARED_LIBRARIES set: %s.' % (gdb_load_shared_libraries,)) + print("PYDEVD_GDB_SCAN_SHARED_LIBRARIES set: %s." % (gdb_load_shared_libraries,)) cmd.extend(["--init-eval-command='set auto-solib-add off'"]) # Don't scan all libraries. - for lib in gdb_load_shared_libraries.split(','): + for lib in gdb_load_shared_libraries.split(","): lib = lib.strip() cmd.extend(["--eval-command='sharedlibrary %s'" % (lib,)]) # Scan the specified library else: - print('PYDEVD_GDB_SCAN_SHARED_LIBRARIES not set (scanning all libraries for needed symbols).') + print("PYDEVD_GDB_SCAN_SHARED_LIBRARIES not set (scanning all libraries for needed symbols).") cmd.extend(["--eval-command='set scheduler-locking off'"]) # If on we'll deadlock. @@ -459,79 +461,83 @@ def run_python_code_linux(pid, python_code, connect_debugger_tracing=False, show # current host). cmd.extend(["--eval-command='set architecture auto'"]) - cmd.extend([ - "--eval-command='call (void*)dlopen(\"%s\", 2)'" % target_dll, - "--eval-command='sharedlibrary %s'" % target_dll_name, - "--eval-command='call (int)DoAttach(%s, \"%s\", %s)'" % ( - is_debug, python_code, show_debug_info) - ]) + cmd.extend( + [ + "--eval-command='call (void*)dlopen(\"%s\", 2)'" % target_dll, + "--eval-command='sharedlibrary %s'" % target_dll_name, + "--eval-command='call (int)DoAttach(%s, \"%s\", %s)'" % (is_debug, python_code, show_debug_info), + ] + ) # print ' '.join(cmd) env = os.environ.copy() # Remove the PYTHONPATH (if gdb has a builtin Python it could fail if we # have the PYTHONPATH for a different python version or some forced encoding). - env.pop('PYTHONIOENCODING', None) - env.pop('PYTHONPATH', None) - print('Running: %s' % (' '.join(cmd))) - subprocess.check_call(' '.join(cmd), shell=True, env=env) + env.pop("PYTHONIOENCODING", None) + env.pop("PYTHONPATH", None) + print("Running: %s" % (" ".join(cmd))) + subprocess.check_call(" ".join(cmd), shell=True, env=env) def find_helper_script(filedir, script_name): - target_filename = os.path.join(filedir, 'linux_and_mac', script_name) + target_filename = os.path.join(filedir, "linux_and_mac", script_name) target_filename = os.path.normpath(target_filename) if not os.path.exists(target_filename): - raise RuntimeError('Could not find helper script: %s' % target_filename) + raise RuntimeError("Could not find helper script: %s" % target_filename) return target_filename def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_debug_info=0): - assert '\'' not in python_code, 'Having a single quote messes with our command.' + assert "'" not in python_code, "Having a single quote messes with our command." target_dll = get_target_filename() if not target_dll: - raise RuntimeError('Could not find .dylib for attach to process.') + raise RuntimeError("Could not find .dylib for attach to process.") libdir = os.path.dirname(__file__) - lldb_prepare_file = find_helper_script(libdir, 'lldb_prepare.py') + lldb_prepare_file = find_helper_script(libdir, "lldb_prepare.py") # Note: we currently don't support debug builds is_debug = 0 # Note that the space in the beginning of each line in the multi-line is important! cmd = [ - 'lldb', - '--no-lldbinit', # Do not automatically parse any '.lldbinit' files. + "lldb", + "--no-lldbinit", # Do not automatically parse any '.lldbinit' files. # '--attach-pid', # str(pid), # '--arch', # arch, - '--script-language', - 'Python' + "--script-language", + "Python", # '--batch-silent', ] - cmd.extend([ - "-o 'process attach --pid %d'" % pid, - "-o 'command script import \"%s\"'" % (lldb_prepare_file,), - "-o 'load_lib_and_attach \"%s\" %s \"%s\" %s'" % (target_dll, - is_debug, python_code, show_debug_info), - ]) + cmd.extend( + [ + "-o 'process attach --pid %d'" % pid, + "-o 'command script import \"%s\"'" % (lldb_prepare_file,), + '-o \'load_lib_and_attach "%s" %s "%s" %s\'' % (target_dll, is_debug, python_code, show_debug_info), + ] + ) - cmd.extend([ - "-o 'process detach'", - "-o 'script import os; os._exit(1)'", - ]) + cmd.extend( + [ + "-o 'process detach'", + "-o 'script import os; os._exit(1)'", + ] + ) # print ' '.join(cmd) env = os.environ.copy() # Remove the PYTHONPATH (if lldb has a builtin Python it could fail if we # have the PYTHONPATH for a different python version or some forced encoding). - env.pop('PYTHONIOENCODING', None) - env.pop('PYTHONPATH', None) - print('Running: %s' % (' '.join(cmd))) - subprocess.check_call(' '.join(cmd), shell=True, env=env) + env.pop("PYTHONIOENCODING", None) + env.pop("PYTHONPATH", None) + print("Running: %s" % (" ".join(cmd))) + subprocess.check_call(" ".join(cmd), shell=True, env=env) if IS_WINDOWS: @@ -543,12 +549,12 @@ def run_python_code_mac(pid, python_code, connect_debugger_tracing=False, show_d else: def run_python_code(*args, **kwargs): - print('Unable to attach to process in platform: %s', sys.platform) + print("Unable to attach to process in platform: %s", sys.platform) def test(): - print('Running with: %s' % (sys.executable,)) - code = ''' + print("Running with: %s" % (sys.executable,)) + code = """ import os, time, sys print(os.getpid()) #from threading import Thread @@ -558,16 +564,16 @@ def test(): time.sleep(.5) sys.stdout.write('.\\n') sys.stdout.flush() -''' +""" - p = subprocess.Popen([sys.executable, '-u', '-c', code]) + p = subprocess.Popen([sys.executable, "-u", "-c", code]) try: code = 'print("It worked!")\n' # Real code will be something as: # code = '''import sys;sys.path.append(r'X:\winappdbg-code\examples'); import imported;''' run_python_code(p.pid, python_code=code) - print('\nRun a 2nd time...\n') + print("\nRun a 2nd time...\n") run_python_code(p.pid, python_code=code) time.sleep(3) @@ -580,19 +586,18 @@ def main(args): # in the target process. pid = int(args[0]) del args[0] - python_code = ';'.join(args) + python_code = ";".join(args) # Note: on Linux the python code may not have a single quote char: ' run_python_code(pid, python_code) -if __name__ == '__main__': +if __name__ == "__main__": args = sys.argv[1:] if not args: - print('Expected pid and Python code to execute in target process.') + print("Expected pid and Python code to execute in target process.") else: - if '--test' == args[0]: + if "--test" == args[0]: test() else: main(args) - diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll index da4dd60e2..6f804e79f 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.dll differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb index 74c127600..db2eb3219 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_amd64.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py index 25076f46e..7eccf5326 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_pydevd.py @@ -4,41 +4,41 @@ def process_command_line(argv): setup = {} - setup['port'] = 5678 # Default port for PyDev remote debugger - setup['pid'] = 0 - setup['host'] = '127.0.0.1' - setup['protocol'] = '' - setup['debug-mode'] = '' + setup["port"] = 5678 # Default port for PyDev remote debugger + setup["pid"] = 0 + setup["host"] = "127.0.0.1" + setup["protocol"] = "" + setup["debug-mode"] = "" i = 0 while i < len(argv): - if argv[i] == '--port': + if argv[i] == "--port": del argv[i] - setup['port'] = int(argv[i]) + setup["port"] = int(argv[i]) del argv[i] - elif argv[i] == '--pid': + elif argv[i] == "--pid": del argv[i] - setup['pid'] = int(argv[i]) + setup["pid"] = int(argv[i]) del argv[i] - elif argv[i] == '--host': + elif argv[i] == "--host": del argv[i] - setup['host'] = argv[i] + setup["host"] = argv[i] del argv[i] - elif argv[i] == '--protocol': + elif argv[i] == "--protocol": del argv[i] - setup['protocol'] = argv[i] + setup["protocol"] = argv[i] del argv[i] - elif argv[i] == '--debug-mode': + elif argv[i] == "--debug-mode": del argv[i] - setup['debug-mode'] = argv[i] + setup["debug-mode"] = argv[i] del argv[i] - if not setup['pid']: - sys.stderr.write('Expected --pid to be passed.\n') + if not setup["pid"]: + sys.stderr.write("Expected --pid to be passed.\n") sys.exit(1) return setup @@ -46,34 +46,44 @@ def process_command_line(argv): def main(setup): sys.path.append(os.path.dirname(__file__)) import add_code_to_python_process + show_debug_info_on_target_process = 0 pydevd_dirname = os.path.dirname(os.path.dirname(__file__)) - if sys.platform == 'win32': - setup['pythonpath'] = pydevd_dirname.replace('\\', '/') - setup['pythonpath2'] = os.path.dirname(__file__).replace('\\', '/') - python_code = '''import sys; + if sys.platform == "win32": + setup["pythonpath"] = pydevd_dirname.replace("\\", "/") + setup["pythonpath2"] = os.path.dirname(__file__).replace("\\", "/") + python_code = ( + """import sys; sys.path.append("%(pythonpath)s"); sys.path.append("%(pythonpath2)s"); import attach_script; attach_script.attach(port=%(port)s, host="%(host)s", protocol="%(protocol)s", debug_mode="%(debug-mode)s"); -'''.replace('\r\n', '').replace('\r', '').replace('\n', '') +""".replace("\r\n", "") + .replace("\r", "") + .replace("\n", "") + ) else: - setup['pythonpath'] = pydevd_dirname - setup['pythonpath2'] = os.path.dirname(__file__) + setup["pythonpath"] = pydevd_dirname + setup["pythonpath2"] = os.path.dirname(__file__) # We have to pass it a bit differently for gdb - python_code = '''import sys; + python_code = ( + """import sys; sys.path.append(\\\"%(pythonpath)s\\\"); sys.path.append(\\\"%(pythonpath2)s\\\"); import attach_script; attach_script.attach(port=%(port)s, host=\\\"%(host)s\\\", protocol=\\\"%(protocol)s\\\", debug_mode=\\\"%(debug-mode)s\\\"); -'''.replace('\r\n', '').replace('\r', '').replace('\n', '') +""".replace("\r\n", "") + .replace("\r", "") + .replace("\n", "") + ) python_code = python_code % setup add_code_to_python_process.run_python_code( - setup['pid'], python_code, connect_debugger_tracing=True, show_debug_info=show_debug_info_on_target_process) + setup["pid"], python_code, connect_debugger_tracing=True, show_debug_info=show_debug_info_on_target_process + ) -if __name__ == '__main__': +if __name__ == "__main__": main(process_command_line(sys.argv[1:])) diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py index af23e5613..eb5f8d0a7 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_script.py @@ -1,7 +1,5 @@ - - def get_main_thread_instance(threading): - if hasattr(threading, 'main_thread'): + if hasattr(threading, "main_thread"): return threading.main_thread() else: # On Python 2 we don't really have an API to get the main thread, @@ -10,12 +8,12 @@ def get_main_thread_instance(threading): def get_main_thread_id(unlikely_thread_id=None): - ''' + """ :param unlikely_thread_id: Pass to mark some thread id as not likely the main thread. :return tuple(thread_id, critical_warning) - ''' + """ import sys import os @@ -26,22 +24,22 @@ def get_main_thread_id(unlikely_thread_id=None): frame = frame.f_back basename = os.path.basename(frame.f_code.co_filename) - if basename.endswith(('.pyc', '.pyo')): + if basename.endswith((".pyc", ".pyo")): basename = basename[:-1] if (frame.f_code.co_name, basename) in [ - ('_run_module_as_main', 'runpy.py'), - ('_run_module_as_main', ''), - ('run_module_as_main', 'runpy.py'), - ('run_module', 'runpy.py'), - ('run_path', 'runpy.py'), - ]: + ("_run_module_as_main", "runpy.py"), + ("_run_module_as_main", ""), + ("run_module_as_main", "runpy.py"), + ("run_module", "runpy.py"), + ("run_path", "runpy.py"), + ]: # This is the case for python -m (this is an ideal match, so, # let's return it). - return thread_ident, '' + return thread_ident, "" - if frame.f_code.co_name == '': - if frame.f_globals.get('__name__') == '__main__': + if frame.f_code.co_name == "": + if frame.f_globals.get("__name__") == "__main__": possible_thread_ids.insert(0, thread_ident) # Add with higher priority continue @@ -53,25 +51,26 @@ def get_main_thread_id(unlikely_thread_id=None): if len(possible_thread_ids) > 0: if len(possible_thread_ids) == 1: - return possible_thread_ids[0], '' # Ideal: only one match + return possible_thread_ids[0], "" # Ideal: only one match while unlikely_thread_id in possible_thread_ids: possible_thread_ids.remove(unlikely_thread_id) if len(possible_thread_ids) == 1: - return possible_thread_ids[0], '' # Ideal: only one match + return possible_thread_ids[0], "" # Ideal: only one match elif len(possible_thread_ids) > 1: # Bad: we can't really be certain of anything at this point. - return possible_thread_ids[0], \ - 'Multiple thread ids found (%s). Choosing main thread id randomly (%s).' % ( - possible_thread_ids, possible_thread_ids[0]) + return possible_thread_ids[0], "Multiple thread ids found (%s). Choosing main thread id randomly (%s)." % ( + possible_thread_ids, + possible_thread_ids[0], + ) # If we got here we couldn't discover the main thread id. - return None, 'Unable to discover main thread id.' + return None, "Unable to discover main thread id." -def fix_main_thread_id(on_warn=lambda msg:None, on_exception=lambda msg:None, on_critical=lambda msg:None): +def fix_main_thread_id(on_warn=lambda msg: None, on_exception=lambda msg: None, on_critical=lambda msg: None): # This means that we weren't able to import threading in the main thread (which most # likely means that the main thread is paused or in some very long operation). # In this case we'll import threading here and hotfix what may be wrong in the threading @@ -86,10 +85,10 @@ def fix_main_thread_id(on_warn=lambda msg:None, on_exception=lambda msg:None, on with threading._active_limbo_lock: main_thread_instance = get_main_thread_instance(threading) - if sys.platform == 'win32': + if sys.platform == "win32": # On windows this code would be called in a secondary thread, so, # the current thread is unlikely to be the main thread. - if hasattr(threading, '_get_ident'): + if hasattr(threading, "_get_ident"): unlikely_thread_id = threading._get_ident() # py2 else: unlikely_thread_id = threading.get_ident() # py3 @@ -99,9 +98,9 @@ def fix_main_thread_id(on_warn=lambda msg:None, on_exception=lambda msg:None, on main_thread_id, critical_warning = get_main_thread_id(unlikely_thread_id) if main_thread_id is not None: - main_thread_id_attr = '_ident' + main_thread_id_attr = "_ident" if not hasattr(main_thread_instance, main_thread_id_attr): - main_thread_id_attr = '_Thread__ident' + main_thread_id_attr = "_Thread__ident" assert hasattr(main_thread_instance, main_thread_id_attr) if main_thread_id != getattr(main_thread_instance, main_thread_id_attr): @@ -121,45 +120,54 @@ def fix_main_thread_id(on_warn=lambda msg:None, on_exception=lambda msg:None, on # Note: only import from pydevd after the patching is done (we want to do the minimum # possible when doing that patching). - on_warn('The threading module was not imported by user code in the main thread. The debugger will attempt to work around https://bugs.python.org/issue37416.') + on_warn( + "The threading module was not imported by user code in the main thread. The debugger will attempt to work around https://bugs.python.org/issue37416." + ) if critical_warning: - on_critical('Issue found when debugger was trying to work around https://bugs.python.org/issue37416:\n%s' % (critical_warning,)) + on_critical("Issue found when debugger was trying to work around https://bugs.python.org/issue37416:\n%s" % (critical_warning,)) except: - on_exception('Error patching main thread id.') + on_exception("Error patching main thread id.") -def attach(port, host, protocol='', debug_mode=''): +def attach(port, host, protocol="", debug_mode=""): try: import sys - fix_main_thread = 'threading' not in sys.modules + + fix_main_thread = "threading" not in sys.modules if fix_main_thread: def on_warn(msg): from _pydev_bundle import pydev_log + pydev_log.warn(msg) def on_exception(msg): from _pydev_bundle import pydev_log + pydev_log.exception(msg) def on_critical(msg): from _pydev_bundle import pydev_log + pydev_log.critical(msg) fix_main_thread_id(on_warn=on_warn, on_exception=on_exception, on_critical=on_critical) else: from _pydev_bundle import pydev_log # @Reimport - pydev_log.debug('The threading module is already imported by user code.') + + pydev_log.debug("The threading module is already imported by user code.") if protocol: from _pydevd_bundle import pydevd_defaults + pydevd_defaults.PydevdCustomization.DEFAULT_PROTOCOL = protocol if debug_mode: from _pydevd_bundle import pydevd_defaults + pydevd_defaults.PydevdCustomization.DEBUG_MODE = debug_mode import pydevd @@ -185,4 +193,5 @@ def on_critical(msg): ) except: import traceback + traceback.print_exc() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll index 10ba717bc..9b3167269 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.dll differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb index fa5362567..211572527 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86_64.dylib b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86_64.dylib index 2dc609a99..beef83e8e 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86_64.dylib and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/attach_x86_64.dylib differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe index d157b436d..6211dcea6 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.exe differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb index ce00e817f..a5892f1aa 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe index 78752d4a5..b0c0275a9 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.exe differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb index 546826bfc..bb4b0279e 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/inject_dll_x86.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py index 8a220542c..aa48b061b 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/linux_and_mac/lldb_prepare.py @@ -3,8 +3,10 @@ # Also it marks process threads to to distinguish them from debugger # threads later while settings trace in threads + def load_lib_and_attach(debugger, command, result, internal_dict): import shlex + args = shlex.split(command) dll = args[0] @@ -13,6 +15,7 @@ def load_lib_and_attach(debugger, command, result, internal_dict): show_debug_info = args[3] import lldb + options = lldb.SBExpressionOptions() options.SetFetchDynamicValue() options.SetTryAllThreads(run_others=False) @@ -20,23 +23,22 @@ def load_lib_and_attach(debugger, command, result, internal_dict): print(dll) target = debugger.GetSelectedTarget() - res = target.EvaluateExpression("(void*)dlopen(\"%s\", 2);" % ( - dll), options) + res = target.EvaluateExpression('(void*)dlopen("%s", 2);' % (dll), options) error = res.GetError() if error: print(error) print(python_code) - res = target.EvaluateExpression("(int)DoAttach(%s, \"%s\", %s);" % ( - is_debug, python_code.replace('"', "'"), show_debug_info), options) + res = target.EvaluateExpression('(int)DoAttach(%s, "%s", %s);' % (is_debug, python_code.replace('"', "'"), show_debug_info), options) error = res.GetError() if error: print(error) + def __lldb_init_module(debugger, internal_dict): import lldb - debugger.HandleCommand('command script add -f lldb_prepare.load_lib_and_attach load_lib_and_attach') + debugger.HandleCommand("command script add -f lldb_prepare.load_lib_and_attach load_lib_and_attach") try: target = debugger.GetSelectedTarget() @@ -45,10 +47,9 @@ def __lldb_init_module(debugger, internal_dict): if process: for thread in process: # print('Marking process thread %d'%thread.GetThreadID()) - internal_dict['_thread_%d' % thread.GetThreadID()] = True + internal_dict["_thread_%d" % thread.GetThreadID()] = True # thread.Suspend() except: - import traceback;traceback.print_exc() - - + import traceback + traceback.print_exc() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll index 299f1b6bc..639eedbbc 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb index ca2ea985c..b40bd07e6 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll index 7fc9d8eef..d91c00c66 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb index 826e82ed0..c63e18788 100644 Binary files a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb and b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb differ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py index aa138ccfd..4dbb06068 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/__init__.py @@ -113,122 +113,105 @@ __revision__ = "$Id$" # List of all public symbols -__all__ = [ - # Library version - 'version', - 'version_number', - - # from breakpoint import * -## 'Breakpoint', -## 'CodeBreakpoint', -## 'PageBreakpoint', -## 'HardwareBreakpoint', -## 'Hook', -## 'ApiHook', -## 'BufferWatch', - 'BreakpointWarning', - 'BreakpointCallbackWarning', - - # from crash import * - 'Crash', - 'CrashWarning', - 'CrashDictionary', - 'CrashContainer', - 'CrashTable', - 'CrashTableMSSQL', - 'VolatileCrashContainer', - 'DummyCrashContainer', - - # from debug import * - 'Debug', - 'MixedBitsWarning', - - # from disasm import * - 'Disassembler', - 'BeaEngine', - 'DistormEngine', - 'PyDasmEngine', - - # from event import * - 'EventHandler', - 'EventSift', -## 'EventFactory', -## 'EventDispatcher', - 'EventCallbackWarning', - 'Event', -## 'NoEvent', - 'CreateProcessEvent', - 'CreateThreadEvent', - 'ExitProcessEvent', - 'ExitThreadEvent', - 'LoadDLLEvent', - 'UnloadDLLEvent', - 'OutputDebugStringEvent', - 'RIPEvent', - 'ExceptionEvent', - - # from interactive import * -## 'ConsoleDebugger', - - # from module import * - 'Module', - 'DebugSymbolsWarning', - - # from process import * - 'Process', - - # from system import * - 'System', - - # from search import * - 'Search', - 'Pattern', - 'BytePattern', - 'TextPattern', - 'RegExpPattern', - 'HexPattern', - - # from registry import * - 'Registry', - - # from textio import * - 'HexDump', - 'HexInput', - 'HexOutput', - 'Color', - 'Table', - 'CrashDump', - 'DebugLog', - 'Logger', - - # from thread import * - 'Thread', - - # from util import * - 'PathOperations', - 'MemoryAddresses', - 'CustomAddressIterator', - 'DataAddressIterator', - 'ImageAddressIterator', - 'MappedAddressIterator', - 'ExecutableAddressIterator', - 'ReadableAddressIterator', - 'WriteableAddressIterator', - 'ExecutableAndWriteableAddressIterator', - 'DebugRegister', - - # from window import * - 'Window', - - # import win32 - 'win32', - - # from win32 import Handle, ProcessHandle, ThreadHandle, FileHandle - 'Handle', - 'ProcessHandle', - 'ThreadHandle', - 'FileHandle', - ] +__all__ = [ + # Library version + "version", + "version_number", + # from breakpoint import * + ## 'Breakpoint', + ## 'CodeBreakpoint', + ## 'PageBreakpoint', + ## 'HardwareBreakpoint', + ## 'Hook', + ## 'ApiHook', + ## 'BufferWatch', + "BreakpointWarning", + "BreakpointCallbackWarning", + # from crash import * + "Crash", + "CrashWarning", + "CrashDictionary", + "CrashContainer", + "CrashTable", + "CrashTableMSSQL", + "VolatileCrashContainer", + "DummyCrashContainer", + # from debug import * + "Debug", + "MixedBitsWarning", + # from disasm import * + "Disassembler", + "BeaEngine", + "DistormEngine", + "PyDasmEngine", + # from event import * + "EventHandler", + "EventSift", + ## 'EventFactory', + ## 'EventDispatcher', + "EventCallbackWarning", + "Event", + ## 'NoEvent', + "CreateProcessEvent", + "CreateThreadEvent", + "ExitProcessEvent", + "ExitThreadEvent", + "LoadDLLEvent", + "UnloadDLLEvent", + "OutputDebugStringEvent", + "RIPEvent", + "ExceptionEvent", + # from interactive import * + ## 'ConsoleDebugger', + # from module import * + "Module", + "DebugSymbolsWarning", + # from process import * + "Process", + # from system import * + "System", + # from search import * + "Search", + "Pattern", + "BytePattern", + "TextPattern", + "RegExpPattern", + "HexPattern", + # from registry import * + "Registry", + # from textio import * + "HexDump", + "HexInput", + "HexOutput", + "Color", + "Table", + "CrashDump", + "DebugLog", + "Logger", + # from thread import * + "Thread", + # from util import * + "PathOperations", + "MemoryAddresses", + "CustomAddressIterator", + "DataAddressIterator", + "ImageAddressIterator", + "MappedAddressIterator", + "ExecutableAddressIterator", + "ReadableAddressIterator", + "WriteableAddressIterator", + "ExecutableAndWriteableAddressIterator", + "DebugRegister", + # from window import * + "Window", + # import win32 + "win32", + # from win32 import Handle, ProcessHandle, ThreadHandle, FileHandle + "Handle", + "ProcessHandle", + "ThreadHandle", + "FileHandle", +] # Import all public symbols from winappdbg.breakpoint import * @@ -252,11 +235,12 @@ try: from sql import * - __all__.append('CrashDAO') + + __all__.append("CrashDAO") except ImportError: import warnings - warnings.warn("No SQL database support present (missing dependencies?)", - ImportWarning) + + warnings.warn("No SQL database support present (missing dependencies?)", ImportWarning) # Library version version_number = 1.5 diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py index 3b9ca73ff..5fa5d51eb 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/breakpoint.py @@ -42,25 +42,20 @@ __revision__ = "$Id$" __all__ = [ - # Base class for breakpoints - 'Breakpoint', - + "Breakpoint", # Breakpoint implementations - 'CodeBreakpoint', - 'PageBreakpoint', - 'HardwareBreakpoint', - + "CodeBreakpoint", + "PageBreakpoint", + "HardwareBreakpoint", # Hooks and watches - 'Hook', - 'ApiHook', - 'BufferWatch', - + "Hook", + "ApiHook", + "BufferWatch", # Warnings - 'BreakpointWarning', - 'BreakpointCallbackWarning', - - ] + "BreakpointWarning", + "BreakpointCallbackWarning", +] from winappdbg import win32 from winappdbg import compat @@ -73,23 +68,27 @@ import warnings import traceback -#============================================================================== +# ============================================================================== + -class BreakpointWarning (UserWarning): +class BreakpointWarning(UserWarning): """ This warning is issued when a non-fatal error occurs that's related to breakpoints. """ -class BreakpointCallbackWarning (RuntimeWarning): + +class BreakpointCallbackWarning(RuntimeWarning): """ This warning is issued when an uncaught exception was raised by a breakpoint's user-defined callback. """ -#============================================================================== -class Breakpoint (object): +# ============================================================================== + + +class Breakpoint(object): """ Base class for breakpoints. Here's the breakpoints state machine. @@ -131,21 +130,21 @@ class Breakpoint (object): # I don't think transitions Enabled <-> OneShot should be allowed... plus # it would require special handling to avoid setting the same bp twice - DISABLED = 0 - ENABLED = 1 - ONESHOT = 2 - RUNNING = 3 + DISABLED = 0 + ENABLED = 1 + ONESHOT = 2 + RUNNING = 3 - typeName = 'breakpoint' + typeName = "breakpoint" - stateNames = { - DISABLED : 'disabled', - ENABLED : 'enabled', - ONESHOT : 'one shot', - RUNNING : 'running', + stateNames = { + DISABLED: "disabled", + ENABLED: "enabled", + ONESHOT: "one shot", + RUNNING: "running", } - def __init__(self, address, size = 1, condition = True, action = None): + def __init__(self, address, size=1, condition=True, action=None): """ Breakpoint object. @@ -179,37 +178,37 @@ def action_callback(event): Where B{event} is an L{Event} object. """ - self.__address = address - self.__size = size - self.__state = self.DISABLED + self.__address = address + self.__size = size + self.__state = self.DISABLED self.set_condition(condition) self.set_action(action) def __repr__(self): if self.is_disabled(): - state = 'Disabled' + state = "Disabled" else: - state = 'Active (%s)' % self.get_state_name() + state = "Active (%s)" % self.get_state_name() if self.is_conditional(): - condition = 'conditional' + condition = "conditional" else: - condition = 'unconditional' + condition = "unconditional" name = self.typeName size = self.get_size() if size == 1: - address = HexDump.address( self.get_address() ) + address = HexDump.address(self.get_address()) else: - begin = self.get_address() - end = begin + size - begin = HexDump.address(begin) - end = HexDump.address(end) + begin = self.get_address() + end = begin + size + begin = HexDump.address(begin) + end = HexDump.address(end) address = "range %s-%s" % (begin, end) msg = "<%s %s %s at remote address %s>" msg = msg % (state, condition, name, address) return msg -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_disabled(self): """ @@ -245,7 +244,7 @@ def is_here(self, address): @return: C{True} if the address is within the range of the breakpoint. """ begin = self.get_address() - end = begin + self.get_size() + end = begin + self.get_size() return begin <= address < end def get_address(self): @@ -270,8 +269,8 @@ def get_span(self): covered by the breakpoint. """ address = self.get_address() - size = self.get_size() - return ( address, address + size ) + size = self.get_size() + return (address, address + size) def get_state(self): """ @@ -286,9 +285,9 @@ def get_state_name(self): @rtype: str @return: The name of the current state of the breakpoint. """ - return self.stateNames[ self.get_state() ] + return self.stateNames[self.get_state()] -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_conditional(self): """ @@ -315,7 +314,7 @@ def get_condition(self): """ return self.__condition - def set_condition(self, condition = True): + def set_condition(self, condition=True): """ Sets a new condition callback for the breakpoint. @@ -340,21 +339,20 @@ def eval_condition(self, event): @return: C{True} to dispatch the event, C{False} otherwise. """ condition = self.get_condition() - if condition is True: # shortcut for unconditional breakpoints + if condition is True: # shortcut for unconditional breakpoints return True if callable(condition): try: - return bool( condition(event) ) + return bool(condition(event)) except Exception: e = sys.exc_info()[1] - msg = ("Breakpoint condition callback %r" - " raised an exception: %s") + msg = "Breakpoint condition callback %r" " raised an exception: %s" msg = msg % (condition, traceback.format_exc(e)) warnings.warn(msg, BreakpointCallbackWarning) return False - return bool( condition ) # force evaluation now + return bool(condition) # force evaluation now -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_automatic(self): """ @@ -379,7 +377,7 @@ def get_action(self): """ return self.__action - def set_action(self, action = None): + def set_action(self, action=None): """ Sets a new action callback for the breakpoint. @@ -398,17 +396,16 @@ def run_action(self, event): action = self.get_action() if action is not None: try: - return bool( action(event) ) + return bool(action(event)) except Exception: e = sys.exc_info()[1] - msg = ("Breakpoint action callback %r" - " raised an exception: %s") + msg = "Breakpoint action callback %r" " raised an exception: %s" msg = msg % (action, traceback.format_exc(e)) warnings.warn(msg, BreakpointCallbackWarning) return False return True -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def __bad_transition(self, state): """ @@ -422,10 +419,9 @@ def __bad_transition(self, state): @raise Exception: Always. """ statemsg = "" - oldState = self.stateNames[ self.get_state() ] - newState = self.stateNames[ state ] - msg = "Invalid state transition (%s -> %s)" \ - " for breakpoint at address %s" + oldState = self.stateNames[self.get_state()] + newState = self.stateNames[state] + msg = "Invalid state transition (%s -> %s)" " for breakpoint at address %s" msg = msg % (oldState, newState, HexDump.address(self.get_address())) raise AssertionError(msg) @@ -443,8 +439,8 @@ def disable(self, aProcess, aThread): @type aThread: L{Thread} @param aThread: Thread object. """ -## if self.__state not in (self.ENABLED, self.ONESHOT, self.RUNNING): -## self.__bad_transition(self.DISABLED) + ## if self.__state not in (self.ENABLED, self.ONESHOT, self.RUNNING): + ## self.__bad_transition(self.DISABLED) self.__state = self.DISABLED def enable(self, aProcess, aThread): @@ -461,8 +457,8 @@ def enable(self, aProcess, aThread): @type aThread: L{Thread} @param aThread: Thread object. """ -## if self.__state not in (self.DISABLED, self.RUNNING): -## self.__bad_transition(self.ENABLED) + ## if self.__state not in (self.DISABLED, self.RUNNING): + ## self.__bad_transition(self.ENABLED) self.__state = self.ENABLED def one_shot(self, aProcess, aThread): @@ -476,8 +472,8 @@ def one_shot(self, aProcess, aThread): @type aThread: L{Thread} @param aThread: Thread object. """ -## if self.__state != self.DISABLED: -## self.__bad_transition(self.ONESHOT) + ## if self.__state != self.DISABLED: + ## self.__bad_transition(self.ONESHOT) self.__state = self.ONESHOT def running(self, aProcess, aThread): @@ -510,8 +506,8 @@ def hit(self, event): @raise AssertionError: Disabled breakpoints can't be hit. """ aProcess = event.get_process() - aThread = event.get_thread() - state = self.get_state() + aThread = event.get_thread() + state = self.get_state() event.breakpoint = self @@ -527,16 +523,18 @@ def hit(self, event): elif state == self.DISABLED: # this should not happen msg = "Hit a disabled breakpoint at address %s" - msg = msg % HexDump.address( self.get_address() ) + msg = msg % HexDump.address(self.get_address()) warnings.warn(msg, BreakpointWarning) -#============================================================================== + +# ============================================================================== # XXX TODO # Check if the user is trying to set a code breakpoint on a memory mapped file, # so we don't end up writing the int3 instruction in the file by accident. -class CodeBreakpoint (Breakpoint): + +class CodeBreakpoint(Breakpoint): """ Code execution breakpoints (using an int3 opcode). @@ -546,12 +544,12 @@ class CodeBreakpoint (Breakpoint): @cvar bpInstruction: Breakpoint instruction for the current processor. """ - typeName = 'code breakpoint' + typeName = "code breakpoint" if win32.arch in (win32.ARCH_I386, win32.ARCH_AMD64): - bpInstruction = '\xCC' # int 3 + bpInstruction = "\xCC" # int 3 - def __init__(self, address, condition = True, action = None): + def __init__(self, address, condition=True, action=None): """ Code breakpoint object. @@ -569,8 +567,7 @@ def __init__(self, address, condition = True, action = None): if win32.arch not in (win32.ARCH_I386, win32.ARCH_AMD64): msg = "Code breakpoints not supported for %s" % win32.arch raise NotImplementedError(msg) - Breakpoint.__init__(self, address, len(self.bpInstruction), - condition, action) + Breakpoint.__init__(self, address, len(self.bpInstruction), condition, action) self.__previousValue = self.bpInstruction def __set_bp(self, aProcess): @@ -632,7 +629,8 @@ def running(self, aProcess, aThread): aThread.set_tf() super(CodeBreakpoint, self).running(aProcess, aThread) -#============================================================================== + +# ============================================================================== # TODO: # * If the original page was already a guard page, the exception should be @@ -647,7 +645,8 @@ def running(self, aProcess, aThread): # protect bits (for example the pages where the PEB and TEB reside). Maybe # a more descriptive error message could be shown in this case. -class PageBreakpoint (Breakpoint): + +class PageBreakpoint(Breakpoint): """ Page access breakpoint (using guard pages). @@ -657,11 +656,11 @@ class PageBreakpoint (Breakpoint): get_size_in_pages """ - typeName = 'page breakpoint' + typeName = "page breakpoint" -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def __init__(self, address, pages = 1, condition = True, action = None): + def __init__(self, address, pages=1, condition=True, action=None): """ Page breakpoint object. @@ -679,15 +678,12 @@ def __init__(self, address, pages = 1, condition = True, action = None): @type action: function @param action: (Optional) Action callback function. """ - Breakpoint.__init__(self, address, pages * MemoryAddresses.pageSize, - condition, action) -## if (address & 0x00000FFF) != 0: + Breakpoint.__init__(self, address, pages * MemoryAddresses.pageSize, condition, action) + ## if (address & 0x00000FFF) != 0: floordiv_align = long(address) // long(MemoryAddresses.pageSize) - truediv_align = float(address) / float(MemoryAddresses.pageSize) + truediv_align = float(address) / float(MemoryAddresses.pageSize) if floordiv_align != truediv_align: - msg = "Address of page breakpoint " \ - "must be aligned to a page size boundary " \ - "(value %s received)" % HexDump.address(address) + msg = "Address of page breakpoint " "must be aligned to a page size boundary " "(value %s received)" % HexDump.address(address) raise ValueError(msg) def get_size_in_pages(self): @@ -705,8 +701,8 @@ def __set_bp(self, aProcess): @type aProcess: L{Process} @param aProcess: Process object. """ - lpAddress = self.get_address() - dwSize = self.get_size() + lpAddress = self.get_address() + dwSize = self.get_size() flNewProtect = aProcess.mquery(lpAddress).Protect flNewProtect = flNewProtect | win32.PAGE_GUARD aProcess.mprotect(lpAddress, dwSize, flNewProtect) @@ -718,9 +714,9 @@ def __clear_bp(self, aProcess): @type aProcess: L{Process} @param aProcess: Process object. """ - lpAddress = self.get_address() + lpAddress = self.get_address() flNewProtect = aProcess.mquery(lpAddress).Protect - flNewProtect = flNewProtect & (0xFFFFFFFF ^ win32.PAGE_GUARD) # DWORD + flNewProtect = flNewProtect & (0xFFFFFFFF ^ win32.PAGE_GUARD) # DWORD aProcess.mprotect(lpAddress, self.get_size(), flNewProtect) def disable(self, aProcess, aThread): @@ -745,9 +741,11 @@ def running(self, aProcess, aThread): aThread.set_tf() super(PageBreakpoint, self).running(aProcess, aThread) -#============================================================================== -class HardwareBreakpoint (Breakpoint): +# ============================================================================== + + +class HardwareBreakpoint(Breakpoint): """ Hardware breakpoint (using debug registers). @@ -790,14 +788,14 @@ class HardwareBreakpoint (Breakpoint): @cvar validWatchSizes: Valid watch flag values. """ - typeName = 'hardware breakpoint' + typeName = "hardware breakpoint" - BREAK_ON_EXECUTION = DebugRegister.BREAK_ON_EXECUTION - BREAK_ON_WRITE = DebugRegister.BREAK_ON_WRITE - BREAK_ON_ACCESS = DebugRegister.BREAK_ON_ACCESS + BREAK_ON_EXECUTION = DebugRegister.BREAK_ON_EXECUTION + BREAK_ON_WRITE = DebugRegister.BREAK_ON_WRITE + BREAK_ON_ACCESS = DebugRegister.BREAK_ON_ACCESS - WATCH_BYTE = DebugRegister.WATCH_BYTE - WATCH_WORD = DebugRegister.WATCH_WORD + WATCH_BYTE = DebugRegister.WATCH_BYTE + WATCH_WORD = DebugRegister.WATCH_WORD WATCH_DWORD = DebugRegister.WATCH_DWORD WATCH_QWORD = DebugRegister.WATCH_QWORD @@ -814,10 +812,7 @@ class HardwareBreakpoint (Breakpoint): WATCH_QWORD, ) - def __init__(self, address, triggerFlag = BREAK_ON_ACCESS, - sizeFlag = WATCH_DWORD, - condition = True, - action = None): + def __init__(self, address, triggerFlag=BREAK_ON_ACCESS, sizeFlag=WATCH_DWORD, condition=True, action=None): """ Hardware breakpoint object. @@ -869,7 +864,7 @@ def __init__(self, address, triggerFlag = BREAK_ON_ACCESS, if win32.arch not in (win32.ARCH_I386, win32.ARCH_AMD64): msg = "Hardware breakpoints not supported for %s" % win32.arch raise NotImplementedError(msg) - if sizeFlag == self.WATCH_BYTE: + if sizeFlag == self.WATCH_BYTE: size = 1 elif sizeFlag == self.WATCH_WORD: size = 2 @@ -888,9 +883,9 @@ def __init__(self, address, triggerFlag = BREAK_ON_ACCESS, raise ValueError(msg) Breakpoint.__init__(self, address, size, condition, action) - self.__trigger = triggerFlag - self.__watch = sizeFlag - self.__slot = None + self.__trigger = triggerFlag + self.__watch = sizeFlag + self.__slot = None def __clear_bp(self, aThread): """ @@ -925,8 +920,7 @@ def __set_bp(self, aThread): msg = "No available hardware breakpoint slots for thread ID %d" msg = msg % aThread.get_tid() raise RuntimeError(msg) - DebugRegister.set_bp(ctx, self.__slot, self.get_address(), - self.__trigger, self.__watch) + DebugRegister.set_bp(ctx, self.__slot, self.get_address(), self.__trigger, self.__watch) aThread.set_context(ctx) finally: aThread.resume() @@ -975,7 +969,8 @@ def running(self, aProcess, aThread): super(HardwareBreakpoint, self).running(aProcess, aThread) aThread.set_tf() -#============================================================================== + +# ============================================================================== # XXX FIXME # @@ -1010,7 +1005,8 @@ def running(self, aProcess, aThread): # TODO: an API to modify the hooked function's arguments -class Hook (object): + +class Hook(object): """ Factory class to produce hook objects. Used by L{Debug.hook_function} and L{Debug.stalk_function}. @@ -1034,8 +1030,8 @@ class Hook (object): # the architecture specific implementation. def __new__(cls, *argv, **argd): try: - arch = argd['arch'] - del argd['arch'] + arch = argd["arch"] + del argd["arch"] except KeyError: try: arch = argv[4] @@ -1063,9 +1059,7 @@ def __new__(cls, *argv, **argd): # useHardwareBreakpoints = False - def __init__(self, preCB = None, postCB = None, - paramCount = None, signature = None, - arch = None): + def __init__(self, preCB=None, postCB=None, paramCount=None, signature=None, arch=None): """ @type preCB: function @param preCB: (Optional) Callback triggered on function entry. @@ -1122,9 +1116,9 @@ def post_LoadLibraryEx(event, return_value): @param arch: (Optional) Target architecture. Defaults to the current architecture. See: L{win32.arch} """ - self.__preCB = preCB - self.__postCB = postCB - self.__paramStack = dict() # tid -> list of tuple( arg, arg, arg... ) + self.__preCB = preCB + self.__postCB = postCB + self.__paramStack = dict() # tid -> list of tuple( arg, arg, arg... ) self._paramCount = paramCount @@ -1140,30 +1134,25 @@ def post_LoadLibraryEx(event, return_value): self._signature = None def _cast_signature_pointers_to_void(self, signature): - c_void_p = ctypes.c_void_p - c_char_p = ctypes.c_char_p + c_void_p = ctypes.c_void_p + c_char_p = ctypes.c_char_p c_wchar_p = ctypes.c_wchar_p - _Pointer = ctypes._Pointer - cast = ctypes.cast + _Pointer = ctypes._Pointer + cast = ctypes.cast for i in compat.xrange(len(signature)): t = signature[i] - if t is not c_void_p and (issubclass(t, _Pointer) \ - or t in [c_char_p, c_wchar_p]): + if t is not c_void_p and (issubclass(t, _Pointer) or t in [c_char_p, c_wchar_p]): signature[i] = cast(t, c_void_p) def _calc_signature(self, signature): - raise NotImplementedError( - "Hook signatures are not supported for architecture: %s" \ - % win32.arch) + raise NotImplementedError("Hook signatures are not supported for architecture: %s" % win32.arch) def _get_return_address(self, aProcess, aThread): return None def _get_function_arguments(self, aProcess, aThread): if self._signature or self._paramCount: - raise NotImplementedError( - "Hook signatures are not supported for architecture: %s" \ - % win32.arch) + raise NotImplementedError("Hook signatures are not supported for architecture: %s" % win32.arch) return () def _get_return_value(self, aThread): @@ -1188,12 +1177,12 @@ def __call__(self, event): debug = event.debug dwProcessId = event.get_pid() - dwThreadId = event.get_tid() - aProcess = event.get_process() - aThread = event.get_thread() + dwThreadId = event.get_tid() + aProcess = event.get_process() + aThread = event.get_thread() # Get the return address and function arguments. - ra = self._get_return_address(aProcess, aThread) + ra = self._get_return_address(aProcess, aThread) params = self._get_function_arguments(aProcess, aThread) # Keep the function arguments for later use. @@ -1202,39 +1191,30 @@ def __call__(self, event): # If we need to hook the return from the function... bHookedReturn = False if ra is not None and self.__postCB is not None: - # Try to set a one shot hardware breakpoint at the return address. useHardwareBreakpoints = self.useHardwareBreakpoints if useHardwareBreakpoints: try: debug.define_hardware_breakpoint( - dwThreadId, - ra, - event.debug.BP_BREAK_ON_EXECUTION, - event.debug.BP_WATCH_BYTE, - True, - self.__postCallAction_hwbp - ) + dwThreadId, ra, event.debug.BP_BREAK_ON_EXECUTION, event.debug.BP_WATCH_BYTE, True, self.__postCallAction_hwbp + ) debug.enable_one_shot_hardware_breakpoint(dwThreadId, ra) bHookedReturn = True except Exception: e = sys.exc_info()[1] useHardwareBreakpoints = False - msg = ("Failed to set hardware breakpoint" - " at address %s for thread ID %d") + msg = "Failed to set hardware breakpoint" " at address %s for thread ID %d" msg = msg % (HexDump.address(ra), dwThreadId) warnings.warn(msg, BreakpointWarning) # If not possible, set a code breakpoint instead. if not useHardwareBreakpoints: try: - debug.break_at(dwProcessId, ra, - self.__postCallAction_codebp) + debug.break_at(dwProcessId, ra, self.__postCallAction_codebp) bHookedReturn = True except Exception: e = sys.exc_info()[1] - msg = ("Failed to set code breakpoint" - " at address %s for process ID %d") + msg = "Failed to set code breakpoint" " at address %s for process ID %d" msg = msg % (HexDump.address(ra), dwProcessId) warnings.warn(msg, BreakpointWarning) @@ -1257,7 +1237,7 @@ def __postCallAction_hwbp(self, event): # Remove the one shot hardware breakpoint # at the return address location in the stack. - tid = event.get_tid() + tid = event.get_tid() address = event.breakpoint.get_address() event.debug.erase_hardware_breakpoint(tid, address) @@ -1288,7 +1268,7 @@ def __postCallAction_codebp(self, event): return True # Remove the code breakpoint at the return address. - pid = event.get_pid() + pid = event.get_pid() address = event.breakpoint.get_address() event.debug.dont_break_at(pid, address) @@ -1308,7 +1288,7 @@ def __postCallAction(self, event): @param event: Breakpoint hit event. """ aThread = event.get_thread() - retval = self._get_return_value(aThread) + retval = self._get_return_value(aThread) self.__callHandler(self.__postCB, event, retval) def __callHandler(self, callback, event, *params): @@ -1339,7 +1319,7 @@ def __push_params(self, tid, params): @type params: tuple( arg, arg, arg... ) @param params: Tuple of arguments. """ - stack = self.__paramStack.get( tid, [] ) + stack = self.__paramStack.get(tid, []) stack.append(params) self.__paramStack[tid] = stack @@ -1430,7 +1410,8 @@ def unhook(self, debug, pid, address): """ return debug.dont_break_at(pid, address) -class _Hook_i386 (Hook): + +class _Hook_i386(Hook): """ Implementation details for L{Hook} on the L{win32.ARCH_I386} architecture. """ @@ -1440,30 +1421,30 @@ class _Hook_i386 (Hook): def _calc_signature(self, signature): self._cast_signature_pointers_to_void(signature) - class Arguments (ctypes.Structure): - _fields_ = [ ("arg_%s" % i, signature[i]) \ - for i in compat.xrange(len(signature) - 1, -1, -1) ] + + class Arguments(ctypes.Structure): + _fields_ = [("arg_%s" % i, signature[i]) for i in compat.xrange(len(signature) - 1, -1, -1)] + return Arguments def _get_return_address(self, aProcess, aThread): - return aProcess.read_pointer( aThread.get_sp() ) + return aProcess.read_pointer(aThread.get_sp()) def _get_function_arguments(self, aProcess, aThread): if self._signature: - params = aThread.read_stack_structure(self._signature, - offset = win32.sizeof(win32.LPVOID)) + params = aThread.read_stack_structure(self._signature, offset=win32.sizeof(win32.LPVOID)) elif self._paramCount: - params = aThread.read_stack_dwords(self._paramCount, - offset = win32.sizeof(win32.LPVOID)) + params = aThread.read_stack_dwords(self._paramCount, offset=win32.sizeof(win32.LPVOID)) else: params = () return params def _get_return_value(self, aThread): ctx = aThread.get_context(win32.CONTEXT_INTEGER) - return ctx['Eax'] + return ctx["Eax"] -class _Hook_amd64 (Hook): + +class _Hook_amd64(Hook): """ Implementation details for L{Hook} on the L{win32.ARCH_AMD64} architecture. """ @@ -1486,67 +1467,60 @@ def _calc_signature(self, signature): self._cast_signature_pointers_to_void(signature) float_types = self.__float_types - c_sizeof = ctypes.sizeof - reg_size = c_sizeof(ctypes.c_size_t) + c_sizeof = ctypes.sizeof + reg_size = c_sizeof(ctypes.c_size_t) - reg_int_sig = [] + reg_int_sig = [] reg_float_sig = [] - stack_sig = [] + stack_sig = [] for i in compat.xrange(len(signature)): - arg = signature[i] + arg = signature[i] name = "arg_%d" % i - stack_sig.insert( 0, (name, arg) ) + stack_sig.insert(0, (name, arg)) if i < 4: if type(arg) in float_types: - reg_float_sig.append( (name, arg) ) + reg_float_sig.append((name, arg)) elif c_sizeof(arg) <= reg_size: - reg_int_sig.append( (name, arg) ) + reg_int_sig.append((name, arg)) else: - msg = ("Hook signatures don't support structures" - " within the first 4 arguments of a function" - " for the %s architecture") % win32.arch + msg = ( + "Hook signatures don't support structures" " within the first 4 arguments of a function" " for the %s architecture" + ) % win32.arch raise NotImplementedError(msg) if reg_int_sig: - class RegisterArguments (ctypes.Structure): + + class RegisterArguments(ctypes.Structure): _fields_ = reg_int_sig else: RegisterArguments = None if reg_float_sig: - class FloatArguments (ctypes.Structure): + + class FloatArguments(ctypes.Structure): _fields_ = reg_float_sig else: FloatArguments = None if stack_sig: - class StackArguments (ctypes.Structure): + + class StackArguments(ctypes.Structure): _fields_ = stack_sig else: StackArguments = None - return (len(signature), - RegisterArguments, - FloatArguments, - StackArguments) + return (len(signature), RegisterArguments, FloatArguments, StackArguments) def _get_return_address(self, aProcess, aThread): - return aProcess.read_pointer( aThread.get_sp() ) + return aProcess.read_pointer(aThread.get_sp()) def _get_function_arguments(self, aProcess, aThread): if self._signature: - (args_count, - RegisterArguments, - FloatArguments, - StackArguments) = self._signature + (args_count, RegisterArguments, FloatArguments, StackArguments) = self._signature arguments = {} if StackArguments: address = aThread.get_sp() + win32.sizeof(win32.LPVOID) - stack_struct = aProcess.read_structure(address, - StackArguments) - stack_args = dict( - [ (name, stack_struct.__getattribute__(name)) - for (name, type) in stack_struct._fields_ ] - ) + stack_struct = aProcess.read_structure(address, StackArguments) + stack_args = dict([(name, stack_struct.__getattribute__(name)) for (name, type) in stack_struct._fields_]) arguments.update(stack_args) flags = 0 if RegisterArguments: @@ -1556,43 +1530,37 @@ def _get_function_arguments(self, aProcess, aThread): if flags: ctx = aThread.get_context(flags) if RegisterArguments: - buffer = (win32.QWORD * 4)(ctx['Rcx'], ctx['Rdx'], - ctx['R8'], ctx['R9']) - reg_args = self._get_arguments_from_buffer(buffer, - RegisterArguments) + buffer = (win32.QWORD * 4)(ctx["Rcx"], ctx["Rdx"], ctx["R8"], ctx["R9"]) + reg_args = self._get_arguments_from_buffer(buffer, RegisterArguments) arguments.update(reg_args) if FloatArguments: - buffer = (win32.M128A * 4)(ctx['XMM0'], ctx['XMM1'], - ctx['XMM2'], ctx['XMM3']) - float_args = self._get_arguments_from_buffer(buffer, - FloatArguments) + buffer = (win32.M128A * 4)(ctx["XMM0"], ctx["XMM1"], ctx["XMM2"], ctx["XMM3"]) + float_args = self._get_arguments_from_buffer(buffer, FloatArguments) arguments.update(float_args) - params = tuple( [ arguments["arg_%d" % i] - for i in compat.xrange(args_count) ] ) + params = tuple([arguments["arg_%d" % i] for i in compat.xrange(args_count)]) else: params = () return params def _get_arguments_from_buffer(self, buffer, structure): - b_ptr = ctypes.pointer(buffer) - v_ptr = ctypes.cast(b_ptr, ctypes.c_void_p) - s_ptr = ctypes.cast(v_ptr, ctypes.POINTER(structure)) + b_ptr = ctypes.pointer(buffer) + v_ptr = ctypes.cast(b_ptr, ctypes.c_void_p) + s_ptr = ctypes.cast(v_ptr, ctypes.POINTER(structure)) struct = s_ptr.contents - return dict( - [ (name, struct.__getattribute__(name)) - for (name, type) in struct._fields_ ] - ) + return dict([(name, struct.__getattribute__(name)) for (name, type) in struct._fields_]) def _get_return_value(self, aThread): ctx = aThread.get_context(win32.CONTEXT_INTEGER) - return ctx['Rax'] + return ctx["Rax"] + -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # This class acts as a factory of Hook objects, one per target process. # Said objects are deleted by the unhook() method. -class ApiHook (object): + +class ApiHook(object): """ Used by L{EventHandler}. @@ -1610,8 +1578,7 @@ class ApiHook (object): @ivar procName: Procedure name. """ - def __init__(self, eventHandler, modName, procName, paramCount = None, - signature = None): + def __init__(self, eventHandler, modName, procName, paramCount=None, signature=None): """ @type eventHandler: L{EventHandler} @param eventHandler: Event handler instance. This is where the hook @@ -1670,13 +1637,13 @@ def post_LoadLibraryEx(self, event, return_value): be used to parse the arguments from the stack. Overrides the C{paramCount} argument. """ - self.__modName = modName - self.__procName = procName + self.__modName = modName + self.__procName = procName self.__paramCount = paramCount - self.__signature = signature - self.__preCB = getattr(eventHandler, 'pre_%s' % procName, None) - self.__postCB = getattr(eventHandler, 'post_%s' % procName, None) - self.__hook = dict() + self.__signature = signature + self.__preCB = getattr(eventHandler, "pre_%s" % procName, None) + self.__postCB = getattr(eventHandler, "post_%s" % procName, None) + self.__hook = dict() def __call__(self, event): """ @@ -1691,9 +1658,7 @@ def __call__(self, event): try: hook = self.__hook[pid] except KeyError: - hook = Hook(self.__preCB, self.__postCB, - self.__paramCount, self.__signature, - event.get_process().get_arch() ) + hook = Hook(self.__preCB, self.__postCB, self.__paramCount, self.__signature, event.get_process().get_arch()) self.__hook[pid] = hook return hook(event) @@ -1725,9 +1690,7 @@ def hook(self, debug, pid): aProcess = debug.system.get_process(pid) except KeyError: aProcess = Process(pid) - hook = Hook(self.__preCB, self.__postCB, - self.__paramCount, self.__signature, - aProcess.get_arch() ) + hook = Hook(self.__preCB, self.__postCB, self.__paramCount, self.__signature, aProcess.get_arch()) self.__hook[pid] = hook hook.hook(debug, pid, label) @@ -1751,9 +1714,11 @@ def unhook(self, debug, pid): hook.unhook(debug, pid, label) del self.__hook[pid] -#============================================================================== -class BufferWatch (object): +# ============================================================================== + + +class BufferWatch(object): """ Returned by L{Debug.watch_buffer}. @@ -1776,11 +1741,11 @@ class BufferWatch (object): @ivar oneshot: C{True} for one shot breakpoints, C{False} otherwise. """ - def __init__(self, pid, start, end, action = None, oneshot = False): - self.__pid = pid - self.__start = start - self.__end = end - self.__action = action + def __init__(self, pid, start, end, action=None, oneshot=False): + self.__pid = pid + self.__start = start + self.__end = end + self.__action = action self.__oneshot = oneshot @property @@ -1813,9 +1778,11 @@ def match(self, address): """ return self.__start <= address < self.__end -#============================================================================== -class _BufferWatchCondition (object): +# ============================================================================== + + +class _BufferWatchCondition(object): """ Used by L{Debug.watch_buffer}. @@ -1873,7 +1840,7 @@ def remove_last_match(self, address, size): """ count = 0 start = address - end = address + size - 1 + end = address + size - 1 matched = None for item in self.__ranges: if item.match(start) and item.match(end): @@ -1904,7 +1871,7 @@ def __call__(self, event): to at least one of the buffers that was being watched and had no action callback. """ - address = event.get_exception_information(1) + address = event.get_exception_information(1) bCondition = False for bw in self.__ranges: bMatched = bw.match(address) @@ -1915,8 +1882,7 @@ def __call__(self, event): action(event) except Exception: e = sys.exc_info()[1] - msg = ("Breakpoint action callback %r" - " raised an exception: %s") + msg = "Breakpoint action callback %r" " raised an exception: %s" msg = msg % (action, traceback.format_exc(e)) warnings.warn(msg, BreakpointCallbackWarning) else: @@ -1926,9 +1892,11 @@ def __call__(self, event): event.debug.dont_watch_buffer(bw) return bCondition -#============================================================================== -class _BreakpointContainer (object): +# ============================================================================== + + +class _BreakpointContainer(object): """ Encapsulates the capability to contain Breakpoint objects. @@ -2034,37 +2002,37 @@ class _BreakpointContainer (object): """ # Breakpoint types - BP_TYPE_ANY = 0 # to get all breakpoints - BP_TYPE_CODE = 1 - BP_TYPE_PAGE = 2 - BP_TYPE_HARDWARE = 3 + BP_TYPE_ANY = 0 # to get all breakpoints + BP_TYPE_CODE = 1 + BP_TYPE_PAGE = 2 + BP_TYPE_HARDWARE = 3 # Breakpoint states - BP_STATE_DISABLED = Breakpoint.DISABLED - BP_STATE_ENABLED = Breakpoint.ENABLED - BP_STATE_ONESHOT = Breakpoint.ONESHOT - BP_STATE_RUNNING = Breakpoint.RUNNING + BP_STATE_DISABLED = Breakpoint.DISABLED + BP_STATE_ENABLED = Breakpoint.ENABLED + BP_STATE_ONESHOT = Breakpoint.ONESHOT + BP_STATE_RUNNING = Breakpoint.RUNNING # Memory breakpoint trigger flags - BP_BREAK_ON_EXECUTION = HardwareBreakpoint.BREAK_ON_EXECUTION - BP_BREAK_ON_WRITE = HardwareBreakpoint.BREAK_ON_WRITE - BP_BREAK_ON_ACCESS = HardwareBreakpoint.BREAK_ON_ACCESS + BP_BREAK_ON_EXECUTION = HardwareBreakpoint.BREAK_ON_EXECUTION + BP_BREAK_ON_WRITE = HardwareBreakpoint.BREAK_ON_WRITE + BP_BREAK_ON_ACCESS = HardwareBreakpoint.BREAK_ON_ACCESS # Memory breakpoint size flags - BP_WATCH_BYTE = HardwareBreakpoint.WATCH_BYTE - BP_WATCH_WORD = HardwareBreakpoint.WATCH_WORD - BP_WATCH_QWORD = HardwareBreakpoint.WATCH_QWORD - BP_WATCH_DWORD = HardwareBreakpoint.WATCH_DWORD + BP_WATCH_BYTE = HardwareBreakpoint.WATCH_BYTE + BP_WATCH_WORD = HardwareBreakpoint.WATCH_WORD + BP_WATCH_QWORD = HardwareBreakpoint.WATCH_QWORD + BP_WATCH_DWORD = HardwareBreakpoint.WATCH_DWORD def __init__(self): - self.__codeBP = dict() # (pid, address) -> CodeBreakpoint - self.__pageBP = dict() # (pid, address) -> PageBreakpoint - self.__hardwareBP = dict() # tid -> [ HardwareBreakpoint ] - self.__runningBP = dict() # tid -> set( Breakpoint ) - self.__tracing = set() # set( tid ) - self.__deferredBP = dict() # pid -> label -> (action, oneshot) + self.__codeBP = dict() # (pid, address) -> CodeBreakpoint + self.__pageBP = dict() # (pid, address) -> PageBreakpoint + self.__hardwareBP = dict() # tid -> [ HardwareBreakpoint ] + self.__runningBP = dict() # tid -> set( Breakpoint ) + self.__tracing = set() # set( tid ) + self.__deferredBP = dict() # pid -> label -> (action, oneshot) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # This operates on the dictionary of running breakpoints. # Since the bps are meant to stay alive no cleanup is done here. @@ -2087,12 +2055,12 @@ def __del_running_bp(self, tid, bp): def __del_running_bp_from_all_threads(self, bp): "Auxiliary method." - for (tid, bpset) in compat.iteritems(self.__runningBP): + for tid, bpset in compat.iteritems(self.__runningBP): if bp in bpset: bpset.remove(bp) self.system.get_thread(tid).clear_tf() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # This is the cleanup code. Mostly called on response to exit/unload debug # events. If possible it shouldn't raise exceptions on runtime errors. @@ -2102,12 +2070,12 @@ def __cleanup_breakpoint(self, event, bp): "Auxiliary method." try: process = event.get_process() - thread = event.get_thread() - bp.disable(process, thread) # clear the debug regs / trap flag + thread = event.get_thread() + bp.disable(process, thread) # clear the debug regs / trap flag except Exception: pass bp.set_condition(True) # break possible circular reference - bp.set_action(None) # break possible circular reference + bp.set_action(None) # break possible circular reference def __cleanup_thread(self, event): """ @@ -2140,22 +2108,22 @@ def __cleanup_process(self, event): """ Auxiliary method for L{_notify_exit_process}. """ - pid = event.get_pid() + pid = event.get_pid() process = event.get_process() # Cleanup code breakpoints - for (bp_pid, bp_address) in compat.keys(self.__codeBP): + for bp_pid, bp_address in compat.keys(self.__codeBP): if bp_pid == pid: - bp = self.__codeBP[ (bp_pid, bp_address) ] + bp = self.__codeBP[(bp_pid, bp_address)] self.__cleanup_breakpoint(event, bp) - del self.__codeBP[ (bp_pid, bp_address) ] + del self.__codeBP[(bp_pid, bp_address)] # Cleanup page breakpoints - for (bp_pid, bp_address) in compat.keys(self.__pageBP): + for bp_pid, bp_address in compat.keys(self.__pageBP): if bp_pid == pid: - bp = self.__pageBP[ (bp_pid, bp_address) ] + bp = self.__pageBP[(bp_pid, bp_address)] self.__cleanup_breakpoint(event, bp) - del self.__pageBP[ (bp_pid, bp_address) ] + del self.__pageBP[(bp_pid, bp_address)] # Cleanup deferred code breakpoints try: @@ -2167,9 +2135,9 @@ def __cleanup_module(self, event): """ Auxiliary method for L{_notify_unload_dll}. """ - pid = event.get_pid() + pid = event.get_pid() process = event.get_process() - module = event.get_module() + module = event.get_module() # Cleanup thread breakpoints on this module for tid in process.iter_thread_ids(): @@ -2194,28 +2162,27 @@ def __cleanup_module(self, event): self.__hardwareBP[tid].remove(bp) # Cleanup code breakpoints on this module - for (bp_pid, bp_address) in compat.keys(self.__codeBP): + for bp_pid, bp_address in compat.keys(self.__codeBP): if bp_pid == pid: if process.get_module_at_address(bp_address) == module: - bp = self.__codeBP[ (bp_pid, bp_address) ] + bp = self.__codeBP[(bp_pid, bp_address)] self.__cleanup_breakpoint(event, bp) - del self.__codeBP[ (bp_pid, bp_address) ] + del self.__codeBP[(bp_pid, bp_address)] # Cleanup page breakpoints on this module - for (bp_pid, bp_address) in compat.keys(self.__pageBP): + for bp_pid, bp_address in compat.keys(self.__pageBP): if bp_pid == pid: if process.get_module_at_address(bp_address) == module: - bp = self.__pageBP[ (bp_pid, bp_address) ] + bp = self.__pageBP[(bp_pid, bp_address)] self.__cleanup_breakpoint(event, bp) - del self.__pageBP[ (bp_pid, bp_address) ] + del self.__pageBP[(bp_pid, bp_address)] -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Defining breakpoints. # Code breakpoints. - def define_code_breakpoint(self, dwProcessId, address, condition = True, - action = None): + def define_code_breakpoint(self, dwProcessId, address, condition=True, action=None): """ Creates a disabled code breakpoint at the given address. @@ -2273,9 +2240,7 @@ def action_callback(event): return bp # Page breakpoints. - def define_page_breakpoint(self, dwProcessId, address, pages = 1, - condition = True, - action = None): + def define_page_breakpoint(self, dwProcessId, address, pages=1, condition=True, action=None): """ Creates a disabled page breakpoint at the given address. @@ -2326,11 +2291,11 @@ def action_callback(event): @return: The page breakpoint object. """ process = self.system.get_process(dwProcessId) - bp = PageBreakpoint(address, pages, condition, action) - begin = bp.get_address() - end = begin + bp.get_size() + bp = PageBreakpoint(address, pages, condition, action) + begin = bp.get_address() + end = begin + bp.get_size() - address = begin + address = begin pageSize = MemoryAddresses.pageSize while address < end: key = (dwProcessId, address) @@ -2348,11 +2313,9 @@ def action_callback(event): return bp # Hardware breakpoints. - def define_hardware_breakpoint(self, dwThreadId, address, - triggerFlag = BP_BREAK_ON_ACCESS, - sizeFlag = BP_WATCH_DWORD, - condition = True, - action = None): + def define_hardware_breakpoint( + self, dwThreadId, address, triggerFlag=BP_BREAK_ON_ACCESS, sizeFlag=BP_WATCH_DWORD, condition=True, action=None + ): """ Creates a disabled hardware breakpoint at the given address. @@ -2437,19 +2400,17 @@ def action_callback(event): @rtype: L{HardwareBreakpoint} @return: The hardware breakpoint object. """ - thread = self.system.get_thread(dwThreadId) - bp = HardwareBreakpoint(address, triggerFlag, sizeFlag, condition, - action) - begin = bp.get_address() - end = begin + bp.get_size() + thread = self.system.get_thread(dwThreadId) + bp = HardwareBreakpoint(address, triggerFlag, sizeFlag, condition, action) + begin = bp.get_address() + end = begin + bp.get_size() if dwThreadId in self.__hardwareBP: bpSet = self.__hardwareBP[dwThreadId] for oldbp in bpSet: old_begin = oldbp.get_address() - old_end = old_begin + oldbp.get_size() - if MemoryAddresses.do_ranges_intersect(begin, end, old_begin, - old_end): + old_end = old_begin + oldbp.get_size() + if MemoryAddresses.do_ranges_intersect(begin, end, old_begin, old_end): msg = "Already exists (TID %d) : %r" % (dwThreadId, oldbp) raise KeyError(msg) else: @@ -2458,7 +2419,7 @@ def action_callback(event): bpSet.add(bp) return bp -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Checking breakpoint definitions. @@ -2536,7 +2497,7 @@ def has_hardware_breakpoint(self, dwThreadId, address): return True return False -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Getting breakpoints. @@ -2639,7 +2600,7 @@ def get_hardware_breakpoint(self, dwThreadId, address): msg = "No hardware breakpoint at thread %d, address %s" raise KeyError(msg % (dwThreadId, HexDump.address(address))) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Enabling and disabling breakpoints. @@ -2660,11 +2621,11 @@ def enable_code_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_code_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.enable(p, None) # XXX HACK thread is not used + bp.enable(p, None) # XXX HACK thread is not used def enable_page_breakpoint(self, dwProcessId, address): """ @@ -2684,11 +2645,11 @@ def enable_page_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_page_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.enable(p, None) # XXX HACK thread is not used + bp.enable(p, None) # XXX HACK thread is not used def enable_hardware_breakpoint(self, dwThreadId, address): """ @@ -2711,11 +2672,11 @@ def enable_hardware_breakpoint(self, dwThreadId, address): @type address: int @param address: Memory address of breakpoint. """ - t = self.system.get_thread(dwThreadId) + t = self.system.get_thread(dwThreadId) bp = self.get_hardware_breakpoint(dwThreadId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.enable(None, t) # XXX HACK process is not used + bp.enable(None, t) # XXX HACK process is not used def enable_one_shot_code_breakpoint(self, dwProcessId, address): """ @@ -2735,11 +2696,11 @@ def enable_one_shot_code_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_code_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.one_shot(p, None) # XXX HACK thread is not used + bp.one_shot(p, None) # XXX HACK thread is not used def enable_one_shot_page_breakpoint(self, dwProcessId, address): """ @@ -2759,11 +2720,11 @@ def enable_one_shot_page_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_page_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.one_shot(p, None) # XXX HACK thread is not used + bp.one_shot(p, None) # XXX HACK thread is not used def enable_one_shot_hardware_breakpoint(self, dwThreadId, address): """ @@ -2783,11 +2744,11 @@ def enable_one_shot_hardware_breakpoint(self, dwThreadId, address): @type address: int @param address: Memory address of breakpoint. """ - t = self.system.get_thread(dwThreadId) + t = self.system.get_thread(dwThreadId) bp = self.get_hardware_breakpoint(dwThreadId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.one_shot(None, t) # XXX HACK process is not used + bp.one_shot(None, t) # XXX HACK process is not used def disable_code_breakpoint(self, dwProcessId, address): """ @@ -2807,11 +2768,11 @@ def disable_code_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_code_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.disable(p, None) # XXX HACK thread is not used + bp.disable(p, None) # XXX HACK thread is not used def disable_page_breakpoint(self, dwProcessId, address): """ @@ -2831,11 +2792,11 @@ def disable_page_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - p = self.system.get_process(dwProcessId) + p = self.system.get_process(dwProcessId) bp = self.get_page_breakpoint(dwProcessId, address) if bp.is_running(): self.__del_running_bp_from_all_threads(bp) - bp.disable(p, None) # XXX HACK thread is not used + bp.disable(p, None) # XXX HACK thread is not used def disable_hardware_breakpoint(self, dwThreadId, address): """ @@ -2855,14 +2816,14 @@ def disable_hardware_breakpoint(self, dwThreadId, address): @type address: int @param address: Memory address of breakpoint. """ - t = self.system.get_thread(dwThreadId) - p = t.get_process() + t = self.system.get_thread(dwThreadId) + p = t.get_process() bp = self.get_hardware_breakpoint(dwThreadId, address) if bp.is_running(): self.__del_running_bp(dwThreadId, bp) bp.disable(p, t) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Undefining (erasing) breakpoints. @@ -2887,7 +2848,7 @@ def erase_code_breakpoint(self, dwProcessId, address): bp = self.get_code_breakpoint(dwProcessId, address) if not bp.is_disabled(): self.disable_code_breakpoint(dwProcessId, address) - del self.__codeBP[ (dwProcessId, address) ] + del self.__codeBP[(dwProcessId, address)] def erase_page_breakpoint(self, dwProcessId, address): """ @@ -2907,15 +2868,15 @@ def erase_page_breakpoint(self, dwProcessId, address): @type address: int @param address: Memory address of breakpoint. """ - bp = self.get_page_breakpoint(dwProcessId, address) + bp = self.get_page_breakpoint(dwProcessId, address) begin = bp.get_address() - end = begin + bp.get_size() + end = begin + bp.get_size() if not bp.is_disabled(): self.disable_page_breakpoint(dwProcessId, address) - address = begin + address = begin pageSize = MemoryAddresses.pageSize while address < end: - del self.__pageBP[ (dwProcessId, address) ] + del self.__pageBP[(dwProcessId, address)] address = address + pageSize def erase_hardware_breakpoint(self, dwThreadId, address): @@ -2944,7 +2905,7 @@ def erase_hardware_breakpoint(self, dwThreadId, address): if not bpSet: del self.__hardwareBP[dwThreadId] -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Listing breakpoints. @@ -2974,17 +2935,17 @@ def get_all_breakpoints(self): bplist = list() # Get the code breakpoints. - for (pid, bp) in self.get_all_code_breakpoints(): - bplist.append( (pid, None, bp) ) + for pid, bp in self.get_all_code_breakpoints(): + bplist.append((pid, None, bp)) # Get the page breakpoints. - for (pid, bp) in self.get_all_page_breakpoints(): - bplist.append( (pid, None, bp) ) + for pid, bp in self.get_all_page_breakpoints(): + bplist.append((pid, None, bp)) # Get the hardware breakpoints. - for (tid, bp) in self.get_all_hardware_breakpoints(): + for tid, bp in self.get_all_hardware_breakpoints(): pid = self.system.get_thread(tid).get_pid() - bplist.append( (pid, tid, bp) ) + bplist.append((pid, tid, bp)) # Return the list of breakpoints. return bplist @@ -2994,17 +2955,17 @@ def get_all_code_breakpoints(self): @rtype: list of tuple( int, L{CodeBreakpoint} ) @return: All code breakpoints as a list of tuples (pid, bp). """ - return [ (pid, bp) for ((pid, address), bp) in compat.iteritems(self.__codeBP) ] + return [(pid, bp) for ((pid, address), bp) in compat.iteritems(self.__codeBP)] def get_all_page_breakpoints(self): """ @rtype: list of tuple( int, L{PageBreakpoint} ) @return: All page breakpoints as a list of tuples (pid, bp). """ -## return list( set( [ (pid, bp) for ((pid, address), bp) in compat.iteritems(self.__pageBP) ] ) ) + ## return list( set( [ (pid, bp) for ((pid, address), bp) in compat.iteritems(self.__pageBP) ] ) ) result = set() - for ((pid, address), bp) in compat.iteritems(self.__pageBP): - result.add( (pid, bp) ) + for (pid, address), bp in compat.iteritems(self.__pageBP): + result.add((pid, bp)) return list(result) def get_all_hardware_breakpoints(self): @@ -3013,9 +2974,9 @@ def get_all_hardware_breakpoints(self): @return: All hardware breakpoints as a list of tuples (tid, bp). """ result = list() - for (tid, bplist) in compat.iteritems(self.__hardwareBP): + for tid, bplist in compat.iteritems(self.__hardwareBP): for bp in bplist: - result.append( (tid, bp) ) + result.append((tid, bp)) return result def get_process_breakpoints(self, dwProcessId): @@ -3048,16 +3009,16 @@ def get_process_breakpoints(self, dwProcessId): # Get the code breakpoints. for bp in self.get_process_code_breakpoints(dwProcessId): - bplist.append( (dwProcessId, None, bp) ) + bplist.append((dwProcessId, None, bp)) # Get the page breakpoints. for bp in self.get_process_page_breakpoints(dwProcessId): - bplist.append( (dwProcessId, None, bp) ) + bplist.append((dwProcessId, None, bp)) # Get the hardware breakpoints. - for (tid, bp) in self.get_process_hardware_breakpoints(dwProcessId): + for tid, bp in self.get_process_hardware_breakpoints(dwProcessId): pid = self.system.get_thread(tid).get_pid() - bplist.append( (dwProcessId, tid, bp) ) + bplist.append((dwProcessId, tid, bp)) # Return the list of breakpoints. return bplist @@ -3070,8 +3031,7 @@ def get_process_code_breakpoints(self, dwProcessId): @rtype: list of L{CodeBreakpoint} @return: All code breakpoints for the given process. """ - return [ bp for ((pid, address), bp) in compat.iteritems(self.__codeBP) \ - if pid == dwProcessId ] + return [bp for ((pid, address), bp) in compat.iteritems(self.__codeBP) if pid == dwProcessId] def get_process_page_breakpoints(self, dwProcessId): """ @@ -3081,8 +3041,7 @@ def get_process_page_breakpoints(self, dwProcessId): @rtype: list of L{PageBreakpoint} @return: All page breakpoints for the given process. """ - return [ bp for ((pid, address), bp) in compat.iteritems(self.__pageBP) \ - if pid == dwProcessId ] + return [bp for ((pid, address), bp) in compat.iteritems(self.__pageBP) if pid == dwProcessId] def get_thread_hardware_breakpoints(self, dwThreadId): """ @@ -3095,7 +3054,7 @@ def get_thread_hardware_breakpoints(self, dwThreadId): @return: All hardware breakpoints for the given thread. """ result = list() - for (tid, bplist) in compat.iteritems(self.__hardwareBP): + for tid, bplist in compat.iteritems(self.__hardwareBP): if tid == dwThreadId: for bp in bplist: result.append(bp) @@ -3118,35 +3077,35 @@ def get_process_hardware_breakpoints(self, dwProcessId): if dwThreadId in self.__hardwareBP: bplist = self.__hardwareBP[dwThreadId] for bp in bplist: - result.append( (dwThreadId, bp) ) + result.append((dwThreadId, bp)) return result -## def get_all_hooks(self): -## """ -## @see: L{get_process_hooks} -## -## @rtype: list of tuple( int, int, L{Hook} ) -## @return: All defined hooks as a list of tuples (pid, address, hook). -## """ -## return [ (pid, address, hook) \ -## for ((pid, address), hook) in self.__hook_objects ] -## -## def get_process_hooks(self, dwProcessId): -## """ -## @see: L{get_all_hooks} -## -## @type dwProcessId: int -## @param dwProcessId: Process global ID. -## -## @rtype: list of tuple( int, int, L{Hook} ) -## @return: All hooks for the given process as a list of tuples -## (pid, address, hook). -## """ -## return [ (pid, address, hook) \ -## for ((pid, address), hook) in self.__hook_objects \ -## if pid == dwProcessId ] - -#------------------------------------------------------------------------------ + ## def get_all_hooks(self): + ## """ + ## @see: L{get_process_hooks} + ## + ## @rtype: list of tuple( int, int, L{Hook} ) + ## @return: All defined hooks as a list of tuples (pid, address, hook). + ## """ + ## return [ (pid, address, hook) \ + ## for ((pid, address), hook) in self.__hook_objects ] + ## + ## def get_process_hooks(self, dwProcessId): + ## """ + ## @see: L{get_all_hooks} + ## + ## @type dwProcessId: int + ## @param dwProcessId: Process global ID. + ## + ## @rtype: list of tuple( int, int, L{Hook} ) + ## @return: All hooks for the given process as a list of tuples + ## (pid, address, hook). + ## """ + ## return [ (pid, address, hook) \ + ## for ((pid, address), hook) in self.__hook_objects \ + ## if pid == dwProcessId ] + + # ------------------------------------------------------------------------------ # Batch operations on all breakpoints. @@ -3161,17 +3120,17 @@ def enable_all_breakpoints(self): """ # disable code breakpoints - for (pid, bp) in self.get_all_code_breakpoints(): + for pid, bp in self.get_all_code_breakpoints(): if bp.is_disabled(): self.enable_code_breakpoint(pid, bp.get_address()) # disable page breakpoints - for (pid, bp) in self.get_all_page_breakpoints(): + for pid, bp in self.get_all_page_breakpoints(): if bp.is_disabled(): self.enable_page_breakpoint(pid, bp.get_address()) # disable hardware breakpoints - for (tid, bp) in self.get_all_hardware_breakpoints(): + for tid, bp in self.get_all_hardware_breakpoints(): if bp.is_disabled(): self.enable_hardware_breakpoint(tid, bp.get_address()) @@ -3186,17 +3145,17 @@ def enable_one_shot_all_breakpoints(self): """ # disable code breakpoints for one shot - for (pid, bp) in self.get_all_code_breakpoints(): + for pid, bp in self.get_all_code_breakpoints(): if bp.is_disabled(): self.enable_one_shot_code_breakpoint(pid, bp.get_address()) # disable page breakpoints for one shot - for (pid, bp) in self.get_all_page_breakpoints(): + for pid, bp in self.get_all_page_breakpoints(): if bp.is_disabled(): self.enable_one_shot_page_breakpoint(pid, bp.get_address()) # disable hardware breakpoints for one shot - for (tid, bp) in self.get_all_hardware_breakpoints(): + for tid, bp in self.get_all_hardware_breakpoints(): if bp.is_disabled(): self.enable_one_shot_hardware_breakpoint(tid, bp.get_address()) @@ -3211,15 +3170,15 @@ def disable_all_breakpoints(self): """ # disable code breakpoints - for (pid, bp) in self.get_all_code_breakpoints(): + for pid, bp in self.get_all_code_breakpoints(): self.disable_code_breakpoint(pid, bp.get_address()) # disable page breakpoints - for (pid, bp) in self.get_all_page_breakpoints(): + for pid, bp in self.get_all_page_breakpoints(): self.disable_page_breakpoint(pid, bp.get_address()) # disable hardware breakpoints - for (tid, bp) in self.get_all_hardware_breakpoints(): + for tid, bp in self.get_all_hardware_breakpoints(): self.disable_hardware_breakpoint(tid, bp.get_address()) def erase_all_breakpoints(self): @@ -3240,23 +3199,23 @@ def erase_all_breakpoints(self): # self.__runningBP = dict() # self.__hook_objects = dict() -## # erase hooks -## for (pid, address, hook) in self.get_all_hooks(): -## self.dont_hook_function(pid, address) + ## # erase hooks + ## for (pid, address, hook) in self.get_all_hooks(): + ## self.dont_hook_function(pid, address) # erase code breakpoints - for (pid, bp) in self.get_all_code_breakpoints(): + for pid, bp in self.get_all_code_breakpoints(): self.erase_code_breakpoint(pid, bp.get_address()) # erase page breakpoints - for (pid, bp) in self.get_all_page_breakpoints(): + for pid, bp in self.get_all_page_breakpoints(): self.erase_page_breakpoint(pid, bp.get_address()) # erase hardware breakpoints - for (tid, bp) in self.get_all_hardware_breakpoints(): + for tid, bp in self.get_all_hardware_breakpoints(): self.erase_hardware_breakpoint(tid, bp.get_address()) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Batch operations on breakpoints per process. @@ -3359,9 +3318,9 @@ def erase_process_breakpoints(self, dwProcessId): # if an error occurs, no breakpoint is erased self.disable_process_breakpoints(dwProcessId) -## # erase hooks -## for address, hook in self.get_process_hooks(dwProcessId): -## self.dont_hook_function(dwProcessId, address) + ## # erase hooks + ## for address, hook in self.get_process_hooks(dwProcessId): + ## self.dont_hook_function(dwProcessId, address) # erase code breakpoints for bp in self.get_process_code_breakpoints(dwProcessId): @@ -3382,7 +3341,7 @@ def erase_process_breakpoints(self, dwProcessId): for bp in self.get_thread_hardware_breakpoints(dwThreadId): self.erase_hardware_breakpoint(dwThreadId, bp.get_address()) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Internal handlers of debug events. @@ -3396,9 +3355,9 @@ def _notify_guard_page(self, event): @rtype: bool @return: C{True} to call the user-defined handle, C{False} otherwise. """ - address = event.get_fault_address() - pid = event.get_pid() - bCallHandler = True + address = event.get_fault_address() + pid = event.get_pid() + bCallHandler = True # Align address to page boundary. mask = ~(MemoryAddresses.pageSize - 1) @@ -3409,10 +3368,9 @@ def _notify_guard_page(self, event): if key in self.__pageBP: bp = self.__pageBP[key] if bp.is_enabled() or bp.is_one_shot(): - # Breakpoint is ours. event.continueStatus = win32.DBG_CONTINUE -## event.continueStatus = win32.DBG_EXCEPTION_HANDLED + ## event.continueStatus = win32.DBG_EXCEPTION_HANDLED # Hit the breakpoint. bp.hit(event) @@ -3450,16 +3408,15 @@ def _notify_breakpoint(self, event): @rtype: bool @return: C{True} to call the user-defined handle, C{False} otherwise. """ - address = event.get_exception_address() - pid = event.get_pid() - bCallHandler = True + address = event.get_exception_address() + pid = event.get_pid() + bCallHandler = True # Do we have an active code breakpoint there? key = (pid, address) if key in self.__codeBP: bp = self.__codeBP[key] if not bp.is_disabled(): - # Change the program counter (PC) to the exception address. # This accounts for the change in PC caused by # executing the breakpoint instruction, no matter @@ -3516,12 +3473,12 @@ def _notify_single_step(self, event): @rtype: bool @return: C{True} to call the user-defined handle, C{False} otherwise. """ - pid = event.get_pid() - tid = event.get_tid() - aThread = event.get_thread() - aProcess = event.get_process() - bCallHandler = True - bIsOurs = False + pid = event.get_pid() + tid = event.get_tid() + aThread = event.get_thread() + aProcess = event.get_process() + bCallHandler = True + bIsOurs = False # In hostile mode set the default to pass the exception to the debugee. # If we later determine the exception is ours, hide it instead. @@ -3545,24 +3502,24 @@ def _notify_single_step(self, event): # the trap flag. # bNextIsPopFlags: Don't let popf instructions clear the trap flag. # - bFakeSingleStep = False + bFakeSingleStep = False bLastIsPushFlags = False - bNextIsPopFlags = False + bNextIsPopFlags = False if self.in_hostile_mode(): pc = aThread.get_pc() c = aProcess.read_char(pc - 1) - if c == 0xF1: # int1 - bFakeSingleStep = True - elif c == 0x9C: # pushf + if c == 0xF1: # int1 + bFakeSingleStep = True + elif c == 0x9C: # pushf bLastIsPushFlags = True c = aProcess.peek_char(pc) - if c == 0x66: # the only valid prefix for popf + if c == 0x66: # the only valid prefix for popf c = aProcess.peek_char(pc + 1) - if c == 0x9D: # popf + if c == 0x9D: # popf if bLastIsPushFlags: bLastIsPushFlags = False # they cancel each other out else: - bNextIsPopFlags = True + bNextIsPopFlags = True # When the thread is in tracing mode, # don't pass the exception to the debugee @@ -3580,7 +3537,7 @@ def _notify_single_step(self, event): flags = aProcess.read_dword(sp) if bLastIsPushFlags: flags &= ~Thread.Flags.Trap - else: # if bNextIsPopFlags: + else: # if bNextIsPopFlags: flags |= Thread.Flags.Trap aProcess.write_dword(sp, flags) @@ -3600,20 +3557,19 @@ def _notify_single_step(self, event): # Handle hardware breakpoints. if tid in self.__hardwareBP: - ctx = aThread.get_context(win32.CONTEXT_DEBUG_REGISTERS) - Dr6 = ctx['Dr6'] - ctx['Dr6'] = Dr6 & DebugRegister.clearHitMask + ctx = aThread.get_context(win32.CONTEXT_DEBUG_REGISTERS) + Dr6 = ctx["Dr6"] + ctx["Dr6"] = Dr6 & DebugRegister.clearHitMask aThread.set_context(ctx) bFoundBreakpoint = False - bCondition = False - hwbpList = [ bp for bp in self.__hardwareBP[tid] ] + bCondition = False + hwbpList = [bp for bp in self.__hardwareBP[tid]] for bp in hwbpList: if not bp in self.__hardwareBP[tid]: - continue # it was removed by a user-defined callback + continue # it was removed by a user-defined callback slot = bp.get_slot() - if (slot is not None) and \ - (Dr6 & DebugRegister.hitMask[slot]): - if not bFoundBreakpoint: #set before actions are called + if (slot is not None) and (Dr6 & DebugRegister.hitMask[slot]): + if not bFoundBreakpoint: # set before actions are called if not bFakeSingleStep: event.continueStatus = win32.DBG_CONTINUE bFoundBreakpoint = True @@ -3700,7 +3656,7 @@ def _notify_exit_process(self, event): self.__cleanup_thread(event) return True -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # This is the high level breakpoint interface. Here we don't have to care # about defining or enabling breakpoints, and many errors are ignored @@ -3709,7 +3665,7 @@ def _notify_exit_process(self, event): # and more intuitive, if less detailed. It also allows the use of deferred # breakpoints. -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Code breakpoints @@ -3759,7 +3715,7 @@ def __set_break(self, pid, address, action, oneshot): return None if self.has_code_breakpoint(pid, address): bp = self.get_code_breakpoint(pid, address) - if bp.get_action() != action: # can't use "is not", fails for bound methods + if bp.get_action() != action: # can't use "is not", fails for bound methods bp.set_action(action) msg = "Redefined code breakpoint at %s in process ID %d" msg = msg % (label, pid) @@ -3796,7 +3752,7 @@ def __clear_break(self, pid, address): del deferred[label] unknown = False except KeyError: -## traceback.print_last() # XXX DEBUG + ## traceback.print_last() # XXX DEBUG pass aProcess = self.system.get_process(pid) try: @@ -3804,10 +3760,9 @@ def __clear_break(self, pid, address): if not address: raise Exception() except Exception: -## traceback.print_last() # XXX DEBUG + ## traceback.print_last() # XXX DEBUG if unknown: - msg = ("Can't clear unknown code breakpoint" - " at %s in process ID %d") + msg = "Can't clear unknown code breakpoint" " at %s in process ID %d" msg = msg % (label, pid) warnings.warn(msg, BreakpointWarning) return @@ -3828,7 +3783,7 @@ def __set_deferred_breakpoints(self, event): except KeyError: return aProcess = event.get_process() - for (label, (action, oneshot)) in deferred.items(): + for label, (action, oneshot) in deferred.items(): try: address = aProcess.resolve_label(label) except Exception: @@ -3854,8 +3809,8 @@ def get_all_deferred_code_breakpoints(self): """ result = [] for pid, deferred in compat.iteritems(self.__deferredBP): - for (label, (action, oneshot)) in compat.iteritems(deferred): - result.add( (pid, label, action, oneshot) ) + for label, (action, oneshot) in compat.iteritems(deferred): + result.add((pid, label, action, oneshot)) return result def get_process_deferred_code_breakpoints(self, dwProcessId): @@ -3871,11 +3826,9 @@ def get_process_deferred_code_breakpoints(self, dwProcessId): - Action callback for the breakpoint. - C{True} of the breakpoint is one-shot, C{False} otherwise. """ - return [ (label, action, oneshot) - for (label, (action, oneshot)) - in compat.iteritems(self.__deferredBP.get(dwProcessId, {})) ] + return [(label, action, oneshot) for (label, (action, oneshot)) in compat.iteritems(self.__deferredBP.get(dwProcessId, {}))] - def stalk_at(self, pid, address, action = None): + def stalk_at(self, pid, address, action=None): """ Sets a one shot code breakpoint at the given process and address. @@ -3902,10 +3855,10 @@ def stalk_at(self, pid, address, action = None): @return: C{True} if the breakpoint was set immediately, or C{False} if it was deferred. """ - bp = self.__set_break(pid, address, action, oneshot = True) + bp = self.__set_break(pid, address, action, oneshot=True) return bp is not None - def break_at(self, pid, address, action = None): + def break_at(self, pid, address, action=None): """ Sets a code breakpoint at the given process and address. @@ -3932,7 +3885,7 @@ def break_at(self, pid, address, action = None): @return: C{True} if the breakpoint was set immediately, or C{False} if it was deferred. """ - bp = self.__set_break(pid, address, action, oneshot = False) + bp = self.__set_break(pid, address, action, oneshot=False) return bp is not None def dont_break_at(self, pid, address): @@ -3965,13 +3918,11 @@ def dont_stalk_at(self, pid, address): """ self.__clear_break(pid, address) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Function hooks - def hook_function(self, pid, address, - preCB = None, postCB = None, - paramCount = None, signature = None): + def hook_function(self, pid, address, preCB=None, postCB=None, paramCount=None, signature=None): """ Sets a function hook at the given address. @@ -4051,9 +4002,7 @@ def post_LoadLibraryEx(event, return_value): bp = self.break_at(pid, address, hookObj) return bp is not None - def stalk_function(self, pid, address, - preCB = None, postCB = None, - paramCount = None, signature = None): + def stalk_function(self, pid, address, preCB=None, postCB=None, paramCount=None, signature=None): """ Sets a one-shot function hook at the given address. @@ -4166,7 +4115,7 @@ def dont_stalk_function(self, pid, address): """ self.dont_stalk_at(pid, address) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Variable watches @@ -4211,22 +4160,19 @@ def __set_variable_watch(self, tid, address, size, action): if self.has_hardware_breakpoint(tid, address): warnings.warn( - "Hardware breakpoint in thread %d at address %s was overwritten!" \ - % (tid, HexDump.address(address, - self.system.get_thread(tid).get_bits())), - BreakpointWarning) + "Hardware breakpoint in thread %d at address %s was overwritten!" + % (tid, HexDump.address(address, self.system.get_thread(tid).get_bits())), + BreakpointWarning, + ) bp = self.get_hardware_breakpoint(tid, address) - if bp.get_trigger() != self.BP_BREAK_ON_ACCESS or \ - bp.get_watch() != sizeFlag: - self.erase_hardware_breakpoint(tid, address) - self.define_hardware_breakpoint(tid, address, - self.BP_BREAK_ON_ACCESS, sizeFlag, True, action) - bp = self.get_hardware_breakpoint(tid, address) + if bp.get_trigger() != self.BP_BREAK_ON_ACCESS or bp.get_watch() != sizeFlag: + self.erase_hardware_breakpoint(tid, address) + self.define_hardware_breakpoint(tid, address, self.BP_BREAK_ON_ACCESS, sizeFlag, True, action) + bp = self.get_hardware_breakpoint(tid, address) else: - self.define_hardware_breakpoint(tid, address, - self.BP_BREAK_ON_ACCESS, sizeFlag, True, action) + self.define_hardware_breakpoint(tid, address, self.BP_BREAK_ON_ACCESS, sizeFlag, True, action) bp = self.get_hardware_breakpoint(tid, address) return bp @@ -4244,7 +4190,7 @@ def __clear_variable_watch(self, tid, address): if self.has_hardware_breakpoint(tid, address): self.erase_hardware_breakpoint(tid, address) - def watch_variable(self, tid, address, size, action = None): + def watch_variable(self, tid, address, size, action=None): """ Sets a hardware breakpoint at the given thread, address and size. @@ -4269,7 +4215,7 @@ def watch_variable(self, tid, address, size, action = None): if not bp.is_enabled(): self.enable_hardware_breakpoint(tid, address) - def stalk_variable(self, tid, address, size, action = None): + def stalk_variable(self, tid, address, size, action=None): """ Sets a one-shot hardware breakpoint at the given thread, address and size. @@ -4319,7 +4265,7 @@ def dont_stalk_variable(self, tid, address): """ self.__clear_variable_watch(tid, address) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Buffer watches @@ -4355,31 +4301,29 @@ def __set_buffer_watch(self, pid, address, size, action, bOneShot): bw = BufferWatch(pid, address, address + size, action, bOneShot) # Get the base address and size in pages required for this buffer. - base = MemoryAddresses.align_address_to_page_start(address) + base = MemoryAddresses.align_address_to_page_start(address) limit = MemoryAddresses.align_address_to_page_end(address + size) pages = MemoryAddresses.get_buffer_size_in_pages(address, size) try: - # For each page: # + if a page breakpoint exists reuse it # + if it doesn't exist define it - bset = set() # all breakpoints used - nset = set() # newly defined breakpoints - cset = set() # condition objects + bset = set() # all breakpoints used + nset = set() # newly defined breakpoints + cset = set() # condition objects page_addr = base - pageSize = MemoryAddresses.pageSize + pageSize = MemoryAddresses.pageSize while page_addr < limit: - # If a breakpoints exists, reuse it. if self.has_page_breakpoint(pid, page_addr): bp = self.get_page_breakpoint(pid, page_addr) if bp not in bset: condition = bp.get_condition() if not condition in cset: - if not isinstance(condition,_BufferWatchCondition): + if not isinstance(condition, _BufferWatchCondition): # this shouldn't happen unless you tinkered # with it or defined your own page breakpoints # manually. @@ -4392,8 +4336,7 @@ def __set_buffer_watch(self, pid, address, size, action, bOneShot): # If it doesn't, define it. else: condition = _BufferWatchCondition() - bp = self.define_page_breakpoint(pid, page_addr, 1, - condition = condition) + bp = self.define_page_breakpoint(pid, page_addr, 1, condition=condition) bset.add(bp) nset.add(bp) cset.add(condition) @@ -4409,7 +4352,6 @@ def __set_buffer_watch(self, pid, address, size, action, bOneShot): # On error... except: - # Erase the newly defined breakpoints. for bp in nset: try: @@ -4446,14 +4388,14 @@ def __clear_buffer_watch_old_method(self, pid, address, size): raise ValueError("Bad size for buffer watch: %r" % size) # Get the base address and size in pages required for this buffer. - base = MemoryAddresses.align_address_to_page_start(address) + base = MemoryAddresses.align_address_to_page_start(address) limit = MemoryAddresses.align_address_to_page_end(address + size) pages = MemoryAddresses.get_buffer_size_in_pages(address, size) # For each page, get the breakpoint and it's condition object. # For each condition, remove the buffer. # For each breakpoint, if no buffers are on watch, erase it. - cset = set() # condition objects + cset = set() # condition objects page_addr = base pageSize = MemoryAddresses.pageSize while page_addr < limit: @@ -4483,19 +4425,19 @@ def __clear_buffer_watch(self, bw): """ # Get the PID and the start and end addresses of the buffer. - pid = bw.pid + pid = bw.pid start = bw.start - end = bw.end + end = bw.end # Get the base address and size in pages required for the buffer. - base = MemoryAddresses.align_address_to_page_start(start) + base = MemoryAddresses.align_address_to_page_start(start) limit = MemoryAddresses.align_address_to_page_end(end) pages = MemoryAddresses.get_buffer_size_in_pages(start, end - start) # For each page, get the breakpoint and it's condition object. # For each condition, remove the buffer. # For each breakpoint, if no buffers are on watch, erase it. - cset = set() # condition objects + cset = set() # condition objects page_addr = base pageSize = MemoryAddresses.pageSize while page_addr < limit: @@ -4514,11 +4456,11 @@ def __clear_buffer_watch(self, bw): self.erase_page_breakpoint(pid, bp.get_address()) except WindowsError: msg = "Cannot remove page breakpoint at address %s" - msg = msg % HexDump.address( bp.get_address() ) + msg = msg % HexDump.address(bp.get_address()) warnings.warn(msg, BreakpointWarning) page_addr = page_addr + pageSize - def watch_buffer(self, pid, address, size, action = None): + def watch_buffer(self, pid, address, size, action=None): """ Sets a page breakpoint and notifies when the given buffer is accessed. @@ -4543,7 +4485,7 @@ def watch_buffer(self, pid, address, size, action = None): """ self.__set_buffer_watch(pid, address, size, action, False) - def stalk_buffer(self, pid, address, size, action = None): + def stalk_buffer(self, pid, address, size, action=None): """ Sets a one-shot page breakpoint and notifies when the given buffer is accessed. @@ -4586,12 +4528,12 @@ def dont_watch_buffer(self, bw, *argv, **argd): else: argv = list(argv) argv.insert(0, bw) - if 'pid' in argd: - argv.insert(0, argd.pop('pid')) - if 'address' in argd: - argv.insert(1, argd.pop('address')) - if 'size' in argd: - argv.insert(2, argd.pop('size')) + if "pid" in argd: + argv.insert(0, argd.pop("pid")) + if "address" in argd: + argv.insert(1, argd.pop("address")) + if "size" in argd: + argv.insert(2, argd.pop("size")) if argd: raise TypeError("Wrong arguments for dont_watch_buffer()") try: @@ -4610,12 +4552,12 @@ def dont_stalk_buffer(self, bw, *argv, **argd): """ self.dont_watch_buffer(bw, *argv, **argd) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Tracing -# XXX TODO -# Add "action" parameter to tracing mode + # XXX TODO + # Add "action" parameter to tracing mode def __start_tracing(self, thread): """ @@ -4715,7 +4657,7 @@ def stop_tracing_all(self): for pid in self.get_debugee_pids(): self.stop_tracing_process(pid) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Break on LastError values (only available since Windows Server 2003) @@ -4751,10 +4693,9 @@ def break_on_error(self, pid, errorCode): An error occurred while processing this request. """ aProcess = self.system.get_process(pid) - address = aProcess.get_break_on_error_ptr() + address = aProcess.get_break_on_error_ptr() if not address: - raise NotImplementedError( - "The functionality is not supported in this system.") + raise NotImplementedError("The functionality is not supported in this system.") aProcess.write_dword(address, errorCode) def dont_break_on_error(self, pid): @@ -4772,7 +4713,7 @@ def dont_break_on_error(self, pid): """ self.break_on_error(pid, 0) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Simplified symbol resolving, useful for hooking functions diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py index ad64901cf..65590f72b 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/compat.py @@ -28,21 +28,20 @@ import types - # Useful for very coarse version differentiation. PY2 = sys.version_info[0] == 2 PY3 = sys.version_info[0] == 3 if PY3: - string_types = str, - integer_types = int, - class_types = type, + string_types = (str,) + integer_types = (int,) + class_types = (type,) text_type = str binary_type = bytes MAXSIZE = sys.maxsize else: - string_types = basestring, + string_types = (basestring,) integer_types = (int, long) class_types = (type, types.ClassType) text_type = unicode @@ -56,6 +55,7 @@ class X(object): def __len__(self): return 1 << 31 + try: len(X()) except OverflowError: @@ -71,23 +71,24 @@ def __len__(self): xrange = range unicode = str bytes = bytes + def iterkeys(d, **kw): - if hasattr(d, 'iterkeys'): + if hasattr(d, "iterkeys"): return iter(d.iterkeys(**kw)) return iter(d.keys(**kw)) def itervalues(d, **kw): - if hasattr(d, 'itervalues'): + if hasattr(d, "itervalues"): return iter(d.itervalues(**kw)) return iter(d.values(**kw)) def iteritems(d, **kw): - if hasattr(d, 'iteritems'): + if hasattr(d, "iteritems"): return iter(d.iteritems(**kw)) return iter(d.items(**kw)) def iterlists(d, **kw): - if hasattr(d, 'iterlists'): + if hasattr(d, "iterlists"): return iter(d.iterlists(**kw)) return iter(d.lists(**kw)) @@ -97,6 +98,7 @@ def keys(d, **kw): unicode = unicode xrange = xrange bytes = str + def keys(d, **kw): return d.keys(**kw) @@ -112,10 +114,11 @@ def iteritems(d, **kw): def iterlists(d, **kw): return iter(d.iterlists(**kw)) + if PY3: import builtins - exec_ = getattr(builtins, "exec") + exec_ = getattr(builtins, "exec") def reraise(tp, value, tb=None): if value is None: @@ -125,6 +128,7 @@ def reraise(tp, value, tb=None): raise value else: + def exec_(_code_, _globs_=None, _locs_=None): """Execute code in a namespace.""" if _globs_ is None: @@ -137,23 +141,28 @@ def exec_(_code_, _globs_=None, _locs_=None): _locs_ = _globs_ exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): + exec_( + """def reraise(tp, value, tb=None): raise tp, value, tb -""") +""" + ) if PY3: import operator + def b(s): if isinstance(s, str): return s.encode("latin-1") assert isinstance(s, bytes) return s + def u(s): return s + unichr = chr if sys.version_info[1] <= 1: + def int2byte(i): return bytes((i,)) else: @@ -163,21 +172,30 @@ def int2byte(i): indexbytes = operator.getitem iterbytes = iter import io + StringIO = io.StringIO BytesIO = io.BytesIO else: + def b(s): return s + # Workaround for standalone backslash def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") + return unicode(s.replace(r"\\", r"\\\\"), "unicode_escape") + unichr = unichr int2byte = chr + def byte2int(bs): return ord(bs[0]) + def indexbytes(buf, i): return ord(buf[i]) + def iterbytes(buf): return (ord(byte) for byte in buf) + import StringIO - StringIO = BytesIO = StringIO.StringIO \ No newline at end of file + + StringIO = BytesIO = StringIO.StringIO diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py index a53172e55..5471ce4e1 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/crash.py @@ -45,22 +45,18 @@ __revision__ = "$Id$" __all__ = [ - # Object that represents a crash in the debugee. - 'Crash', - + "Crash", # Crash storage. - 'CrashDictionary', - + "CrashDictionary", # Warnings. - 'CrashWarning', - + "CrashWarning", # Backwards compatibility with WinAppDbg 1.4 and before. - 'CrashContainer', - 'CrashTable', - 'CrashTableMSSQL', - 'VolatileCrashContainer', - 'DummyCrashContainer', + "CrashContainer", + "CrashTable", + "CrashTableMSSQL", + "VolatileCrashContainer", + "DummyCrashContainer", ] from winappdbg import win32 @@ -79,11 +75,12 @@ sql = None anydbm = None -#============================================================================== +# ============================================================================== # Secure alternative to pickle, use it if present. try: import cerealizer + pickle = cerealizer # There is no optimization function for cerealized objects. @@ -102,7 +99,6 @@ def optimize(picklestring): # If cerealizer is not present fallback to the insecure pickle module. except ImportError: - # Faster implementation of the pickle module as a C extension. try: import cPickle as pickle @@ -118,10 +114,12 @@ def optimize(picklestring): try: from pickletools import optimize except ImportError: + def optimize(picklestring): return picklestring -class Marshaller (StaticClass): + +class Marshaller(StaticClass): """ Custom pickler for L{Crash} objects. Optimizes the pickled data when using the standard C{pickle} (or C{cPickle}) module. The pickled data is then @@ -136,18 +134,22 @@ def dumps(obj, protocol=HIGHEST_PROTOCOL): def loads(data): return pickle.loads(zlib.decompress(data)) -#============================================================================== -class CrashWarning (Warning): +# ============================================================================== + + +class CrashWarning(Warning): """ An error occurred while gathering crash data. Some data may be incomplete or missing. """ -#============================================================================== + +# ============================================================================== + # Crash object. Must be serializable. -class Crash (object): +class Crash(object): """ Represents a crash, bug, or another interesting event in the debugee. @@ -427,59 +429,59 @@ def __init__(self, event): """ # First of all, take the timestamp. - self.timeStamp = time.time() + self.timeStamp = time.time() # Notes are initially empty. - self.notes = list() + self.notes = list() # Get the process and thread, but dont't store them in the DB. process = event.get_process() - thread = event.get_thread() + thread = event.get_thread() # Determine the architecture. - self.os = System.os - self.arch = process.get_arch() - self.bits = process.get_bits() + self.os = System.os + self.arch = process.get_arch() + self.bits = process.get_bits() # The following properties are always retrieved for all events. - self.eventCode = event.get_event_code() - self.eventName = event.get_event_name() - self.pid = event.get_pid() - self.tid = event.get_tid() - self.registers = dict(thread.get_context()) - self.labelPC = process.get_label_at_address(self.pc) + self.eventCode = event.get_event_code() + self.eventName = event.get_event_name() + self.pid = event.get_pid() + self.tid = event.get_tid() + self.registers = dict(thread.get_context()) + self.labelPC = process.get_label_at_address(self.pc) # The following properties are only retrieved for some events. - self.commandLine = None - self.environment = None - self.environmentData = None - self.registersPeek = None - self.debugString = None - self.modFileName = None - self.lpBaseOfDll = None - self.exceptionCode = None - self.exceptionName = None + self.commandLine = None + self.environment = None + self.environmentData = None + self.registersPeek = None + self.debugString = None + self.modFileName = None + self.lpBaseOfDll = None + self.exceptionCode = None + self.exceptionName = None self.exceptionDescription = None - self.exceptionAddress = None - self.exceptionLabel = None - self.firstChance = None - self.faultType = None - self.faultAddress = None - self.faultLabel = None - self.isOurBreakpoint = None + self.exceptionAddress = None + self.exceptionLabel = None + self.firstChance = None + self.faultType = None + self.faultAddress = None + self.faultLabel = None + self.isOurBreakpoint = None self.isSystemBreakpoint = None - self.stackTrace = None - self.stackTracePC = None - self.stackTraceLabels = None - self.stackTracePretty = None - self.stackRange = None - self.stackFrame = None - self.stackPeek = None - self.faultCode = None - self.faultMem = None - self.faultPeek = None - self.faultDisasm = None - self.memoryMap = None + self.stackTrace = None + self.stackTracePC = None + self.stackTraceLabels = None + self.stackTracePretty = None + self.stackRange = None + self.stackFrame = None + self.stackPeek = None + self.faultCode = None + self.faultMem = None + self.faultPeek = None + self.faultDisasm = None + self.memoryMap = None # Get information for debug string events. if self.eventCode == win32.OUTPUT_DEBUG_STRING_EVENT: @@ -488,10 +490,12 @@ def __init__(self, event): # Get information for module load and unload events. # For create and exit process events, get the information # for the main module. - elif self.eventCode in (win32.CREATE_PROCESS_DEBUG_EVENT, - win32.EXIT_PROCESS_DEBUG_EVENT, - win32.LOAD_DLL_DEBUG_EVENT, - win32.UNLOAD_DLL_DEBUG_EVENT): + elif self.eventCode in ( + win32.CREATE_PROCESS_DEBUG_EVENT, + win32.EXIT_PROCESS_DEBUG_EVENT, + win32.LOAD_DLL_DEBUG_EVENT, + win32.UNLOAD_DLL_DEBUG_EVENT, + ): aModule = event.get_module() self.modFileName = event.get_filename() if not self.modFileName: @@ -503,50 +507,38 @@ def __init__(self, event): # Get some information for exception events. # To get the remaining information call fetch_extra_data(). elif self.eventCode == win32.EXCEPTION_DEBUG_EVENT: - # Exception information. - self.exceptionCode = event.get_exception_code() - self.exceptionName = event.get_exception_name() - self.exceptionDescription = event.get_exception_description() - self.exceptionAddress = event.get_exception_address() - self.firstChance = event.is_first_chance() - self.exceptionLabel = process.get_label_at_address( - self.exceptionAddress) - if self.exceptionCode in (win32.EXCEPTION_ACCESS_VIOLATION, - win32.EXCEPTION_GUARD_PAGE, - win32.EXCEPTION_IN_PAGE_ERROR): - self.faultType = event.get_fault_type() + self.exceptionCode = event.get_exception_code() + self.exceptionName = event.get_exception_name() + self.exceptionDescription = event.get_exception_description() + self.exceptionAddress = event.get_exception_address() + self.firstChance = event.is_first_chance() + self.exceptionLabel = process.get_label_at_address(self.exceptionAddress) + if self.exceptionCode in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_GUARD_PAGE, win32.EXCEPTION_IN_PAGE_ERROR): + self.faultType = event.get_fault_type() self.faultAddress = event.get_fault_address() - self.faultLabel = process.get_label_at_address( - self.faultAddress) - elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT, - win32.EXCEPTION_SINGLE_STEP): - self.isOurBreakpoint = hasattr(event, 'breakpoint') \ - and event.breakpoint - self.isSystemBreakpoint = \ - process.is_system_defined_breakpoint(self.exceptionAddress) + self.faultLabel = process.get_label_at_address(self.faultAddress) + elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT, win32.EXCEPTION_SINGLE_STEP): + self.isOurBreakpoint = hasattr(event, "breakpoint") and event.breakpoint + self.isSystemBreakpoint = process.is_system_defined_breakpoint(self.exceptionAddress) # Stack trace. try: self.stackTracePretty = thread.get_stack_trace_with_labels() except Exception: e = sys.exc_info()[1] - warnings.warn( - "Cannot get stack trace with labels, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot get stack trace with labels, reason: %s" % str(e), CrashWarning) try: - self.stackTrace = thread.get_stack_trace() - stackTracePC = [ ra for (_,ra,_) in self.stackTrace ] - self.stackTracePC = tuple(stackTracePC) - stackTraceLabels = [ process.get_label_at_address(ra) \ - for ra in self.stackTracePC ] + self.stackTrace = thread.get_stack_trace() + stackTracePC = [ra for (_, ra, _) in self.stackTrace] + self.stackTracePC = tuple(stackTracePC) + stackTraceLabels = [process.get_label_at_address(ra) for ra in self.stackTracePC] self.stackTraceLabels = tuple(stackTraceLabels) except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot get stack trace, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot get stack trace, reason: %s" % str(e), CrashWarning) - def fetch_extra_data(self, event, takeMemorySnapshot = 0): + def fetch_extra_data(self, event, takeMemorySnapshot=0): """ Fetch extra data from the L{Event} object. @@ -571,25 +563,22 @@ def fetch_extra_data(self, event, takeMemorySnapshot = 0): # Get the process and thread, we'll use them below. process = event.get_process() - thread = event.get_thread() + thread = event.get_thread() # Get the command line for the target process. try: self.commandLine = process.get_command_line() except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot get command line, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot get command line, reason: %s" % str(e), CrashWarning) # Get the environment variables for the target process. try: self.environmentData = process.get_environment_data() - self.environment = process.parse_environment_data( - self.environmentData) + self.environment = process.parse_environment_data(self.environmentData) except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot get environment, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot get environment, reason: %s" % str(e), CrashWarning) # Data pointed to by registers. self.registersPeek = thread.peek_pointers_in_registers() @@ -605,8 +594,7 @@ def fetch_extra_data(self, event, takeMemorySnapshot = 0): self.stackRange = thread.get_stack_range() except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot get stack range, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot get stack range, reason: %s" % str(e), CrashWarning) try: self.stackFrame = thread.get_stack_frame() stackFrame = self.stackFrame @@ -617,29 +605,27 @@ def fetch_extra_data(self, event, takeMemorySnapshot = 0): self.stackPeek = process.peek_pointers_in_data(stackFrame) # Code being executed. - self.faultCode = thread.peek_code_bytes() + self.faultCode = thread.peek_code_bytes() try: self.faultDisasm = thread.disassemble_around_pc(32) except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot disassemble, reason: %s" % str(e), - CrashWarning) + warnings.warn("Cannot disassemble, reason: %s" % str(e), CrashWarning) # For memory related exceptions, get the memory contents # of the location that caused the exception to be raised. if self.eventCode == win32.EXCEPTION_DEBUG_EVENT: if self.pc != self.exceptionAddress and self.exceptionCode in ( - win32.EXCEPTION_ACCESS_VIOLATION, - win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED, - win32.EXCEPTION_DATATYPE_MISALIGNMENT, - win32.EXCEPTION_IN_PAGE_ERROR, - win32.EXCEPTION_STACK_OVERFLOW, - win32.EXCEPTION_GUARD_PAGE, - ): + win32.EXCEPTION_ACCESS_VIOLATION, + win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED, + win32.EXCEPTION_DATATYPE_MISALIGNMENT, + win32.EXCEPTION_IN_PAGE_ERROR, + win32.EXCEPTION_STACK_OVERFLOW, + win32.EXCEPTION_GUARD_PAGE, + ): self.faultMem = process.peek(self.exceptionAddress, 64) if self.faultMem: - self.faultPeek = process.peek_pointers_in_data( - self.faultMem) + self.faultPeek = process.peek_pointers_in_data(self.faultMem) # TODO: maybe add names and versions of DLLs and EXE? @@ -650,7 +636,7 @@ def fetch_extra_data(self, event, takeMemorySnapshot = 0): mappedFilenames = process.get_mapped_filenames(self.memoryMap) for mbi in self.memoryMap: mbi.filename = mappedFilenames.get(mbi.BaseAddress, None) - mbi.content = None + mbi.content = None elif takeMemorySnapshot == 2: self.memoryMap = process.take_memory_snapshot() elif takeMemorySnapshot == 3: @@ -664,9 +650,9 @@ def pc(self): @rtype: int """ try: - return self.registers['Eip'] # i386 + return self.registers["Eip"] # i386 except KeyError: - return self.registers['Rip'] # amd64 + return self.registers["Rip"] # amd64 @property def sp(self): @@ -676,9 +662,9 @@ def sp(self): @rtype: int """ try: - return self.registers['Esp'] # i386 + return self.registers["Esp"] # i386 except KeyError: - return self.registers['Rsp'] # amd64 + return self.registers["Rsp"] # amd64 @property def fp(self): @@ -688,9 +674,9 @@ def fp(self): @rtype: int """ try: - return self.registers['Ebp'] # i386 + return self.registers["Ebp"] # i386 except KeyError: - return self.registers['Rbp'] # amd64 + return self.registers["Rbp"] # amd64 def __str__(self): return self.fullReport() @@ -699,8 +685,7 @@ def key(self): """ Alias of L{signature}. Deprecated since WinAppDbg 1.5. """ - warnings.warn("Crash.key() method was deprecated in WinAppDbg 1.5", - DeprecationWarning) + warnings.warn("Crash.key() method was deprecated in WinAppDbg 1.5", DeprecationWarning) return self.signature @property @@ -713,14 +698,14 @@ def signature(self): trace = self.stackTraceLabels else: trace = self.stackTracePC - return ( - self.arch, - self.eventCode, - self.exceptionCode, - pc, - trace, - self.debugString, - ) + return ( + self.arch, + self.eventCode, + self.exceptionCode, + pc, + trace, + self.debugString, + ) # TODO # add the name and version of the binary where the crash happened? @@ -770,47 +755,95 @@ def isExploitable(self): return ("Exploitable", "StackPointerCorruption", "Stack pointer corruption is considered exploitable.") if self.exceptionCode == win32.EXCEPTION_ILLEGAL_INSTRUCTION: - return ("Exploitable", "IllegalInstruction", "An illegal instruction exception indicates that the attacker controls execution flow.") + return ( + "Exploitable", + "IllegalInstruction", + "An illegal instruction exception indicates that the attacker controls execution flow.", + ) if self.exceptionCode == win32.EXCEPTION_PRIV_INSTRUCTION: - return ("Exploitable", "PrivilegedInstruction", "A privileged instruction exception indicates that the attacker controls execution flow.") + return ( + "Exploitable", + "PrivilegedInstruction", + "A privileged instruction exception indicates that the attacker controls execution flow.", + ) if self.exceptionCode == win32.EXCEPTION_GUARD_PAGE: - return ("Exploitable", "GuardPage", "A guard page violation indicates a stack overflow has occured, and the stack of another thread was reached (possibly the overflow length is not controlled by the attacker).") + return ( + "Exploitable", + "GuardPage", + "A guard page violation indicates a stack overflow has occured, and the stack of another thread was reached (possibly the overflow length is not controlled by the attacker).", + ) if self.exceptionCode == win32.STATUS_STACK_BUFFER_OVERRUN: - return ("Exploitable", "GSViolation", "An overrun of a protected stack buffer has been detected. This is considered exploitable, and must be fixed.") + return ( + "Exploitable", + "GSViolation", + "An overrun of a protected stack buffer has been detected. This is considered exploitable, and must be fixed.", + ) if self.exceptionCode == win32.STATUS_HEAP_CORRUPTION: - return ("Exploitable", "HeapCorruption", "Heap Corruption has been detected. This is considered exploitable, and must be fixed.") + return ( + "Exploitable", + "HeapCorruption", + "Heap Corruption has been detected. This is considered exploitable, and must be fixed.", + ) if self.exceptionCode == win32.EXCEPTION_ACCESS_VIOLATION: - nearNull = self.faultAddress is None or MemoryAddresses.align_address_to_page_start(self.faultAddress) == 0 - controlFlow = self.__is_control_flow() + nearNull = self.faultAddress is None or MemoryAddresses.align_address_to_page_start(self.faultAddress) == 0 + controlFlow = self.__is_control_flow() blockDataMove = self.__is_block_data_move() if self.faultType == win32.EXCEPTION_EXECUTE_FAULT: if nearNull: - return ("Probably exploitable", "DEPViolation", "User mode DEP access violations are probably exploitable if near NULL.") + return ( + "Probably exploitable", + "DEPViolation", + "User mode DEP access violations are probably exploitable if near NULL.", + ) else: return ("Exploitable", "DEPViolation", "User mode DEP access violations are exploitable.") elif self.faultType == win32.EXCEPTION_WRITE_FAULT: if nearNull: - return ("Probably exploitable", "WriteAV", "User mode write access violations that are near NULL are probably exploitable.") + return ( + "Probably exploitable", + "WriteAV", + "User mode write access violations that are near NULL are probably exploitable.", + ) else: return ("Exploitable", "WriteAV", "User mode write access violations that are not near NULL are exploitable.") elif self.faultType == win32.EXCEPTION_READ_FAULT: if self.faultAddress == self.pc: if nearNull: - return ("Probably exploitable", "ReadAVonIP", "Access violations at the instruction pointer are probably exploitable if near NULL.") + return ( + "Probably exploitable", + "ReadAVonIP", + "Access violations at the instruction pointer are probably exploitable if near NULL.", + ) else: - return ("Exploitable", "ReadAVonIP", "Access violations at the instruction pointer are exploitable if not near NULL.") + return ( + "Exploitable", + "ReadAVonIP", + "Access violations at the instruction pointer are exploitable if not near NULL.", + ) if controlFlow: if nearNull: - return ("Probably exploitable", "ReadAVonControlFlow", "Access violations near null in control flow instructions are considered probably exploitable.") + return ( + "Probably exploitable", + "ReadAVonControlFlow", + "Access violations near null in control flow instructions are considered probably exploitable.", + ) else: - return ("Exploitable", "ReadAVonControlFlow", "Access violations not near null in control flow instructions are considered exploitable.") + return ( + "Exploitable", + "ReadAVonControlFlow", + "Access violations not near null in control flow instructions are considered exploitable.", + ) if blockDataMove: - return ("Probably exploitable", "ReadAVonBlockMove", "This is a read access violation in a block data move, and is therefore classified as probably exploitable.") + return ( + "Probably exploitable", + "ReadAVonBlockMove", + "This is a read access violation in a block data move, and is therefore classified as probably exploitable.", + ) # Rule: Tainted information used to control branch addresses is considered probably exploitable # Rule: Tainted information used to control the target of a later write is probably exploitable @@ -826,7 +859,11 @@ def isExploitable(self): if self.exceptionCode == win32.EXCEPTION_ACCESS_VIOLATION: if self.faultType == win32.EXCEPTION_READ_FAULT: if nearNull: - result = ("Not likely exploitable", "ReadAVNearNull", "This is a user mode read access violation near null, and is probably not exploitable.") + result = ( + "Not likely exploitable", + "ReadAVNearNull", + "This is a user mode read access violation near null, and is probably not exploitable.", + ) elif self.exceptionCode == win32.EXCEPTION_INT_DIVIDE_BY_ZERO: result = ("Not likely exploitable", "DivideByZero", "This is an integer divide by zero, and is probably not exploitable.") @@ -835,7 +872,11 @@ def isExploitable(self): result = ("Not likely exploitable", "DivideByZero", "This is a floating point divide by zero, and is probably not exploitable.") elif self.exceptionCode in (win32.EXCEPTION_BREAKPOINT, win32.STATUS_WX86_BREAKPOINT): - result = ("Unknown", "Breakpoint", "While a breakpoint itself is probably not exploitable, it may also be an indication that an attacker is testing a target. In either case breakpoints should not exist in production code.") + result = ( + "Unknown", + "Breakpoint", + "While a breakpoint itself is probably not exploitable, it may also be an indication that an attacker is testing a target. In either case breakpoints should not exist in production code.", + ) # Rule: If the stack contains unknown symbols in user mode, call that out # Rule: Tainted information used to control the source of a later block move unknown, but called out explicitly @@ -852,15 +893,43 @@ def __is_control_flow(self): Currently only works for x86 and amd64 architectures. """ jump_instructions = ( - 'jmp', 'jecxz', 'jcxz', - 'ja', 'jnbe', 'jae', 'jnb', 'jb', 'jnae', 'jbe', 'jna', 'jc', 'je', - 'jz', 'jnc', 'jne', 'jnz', 'jnp', 'jpo', 'jp', 'jpe', 'jg', 'jnle', - 'jge', 'jnl', 'jl', 'jnge', 'jle', 'jng', 'jno', 'jns', 'jo', 'js' + "jmp", + "jecxz", + "jcxz", + "ja", + "jnbe", + "jae", + "jnb", + "jb", + "jnae", + "jbe", + "jna", + "jc", + "je", + "jz", + "jnc", + "jne", + "jnz", + "jnp", + "jpo", + "jp", + "jpe", + "jg", + "jnle", + "jge", + "jnl", + "jl", + "jnge", + "jle", + "jng", + "jno", + "jns", + "jo", + "js", ) - call_instructions = ( 'call', 'ret', 'retn' ) - loop_instructions = ( 'loop', 'loopz', 'loopnz', 'loope', 'loopne' ) - control_flow_instructions = call_instructions + loop_instructions + \ - jump_instructions + call_instructions = ("call", "ret", "retn") + loop_instructions = ("loop", "loopz", "loopnz", "loope", "loopne") + control_flow_instructions = call_instructions + loop_instructions + jump_instructions isControlFlow = False instruction = None if self.pc is not None and self.faultDisasm: @@ -882,7 +951,7 @@ def __is_block_data_move(self): Currently only works for x86 and amd64 architectures. """ - block_data_move_instructions = ('movs', 'stos', 'lods') + block_data_move_instructions = ("movs", "stos", "lods") isBlockDataMove = False instruction = None if self.pc is not None and self.faultDisasm: @@ -915,12 +984,11 @@ def briefReport(self): elif self.exceptionName: what = self.exceptionName else: - what = "Exception %s" % \ - HexDump.integer(self.exceptionCode, self.bits) + what = "Exception %s" % HexDump.integer(self.exceptionCode, self.bits) if self.firstChance: - chance = 'first' + chance = "first" else: - chance = 'second' + chance = "second" if self.exceptionLabel: where = self.exceptionLabel elif self.exceptionAddress: @@ -941,14 +1009,10 @@ def briefReport(self): where = self.labelPC else: where = HexDump.address(self.pc, self.bits) - msg = "%s (%s) at %s" % ( - self.eventName, - HexDump.integer(self.eventCode, self.bits), - where - ) + msg = "%s (%s) at %s" % (self.eventName, HexDump.integer(self.eventCode, self.bits), where) return msg - def fullReport(self, bShowNotes = True): + def fullReport(self, bShowNotes=True): """ @type bShowNotes: bool @param bShowNotes: C{True} to show the user notes, C{False} otherwise. @@ -956,8 +1020,8 @@ def fullReport(self, bShowNotes = True): @rtype: str @return: Long description of the event. """ - msg = self.briefReport() - msg += '\n' + msg = self.briefReport() + msg += "\n" if self.bits == 32: width = 16 @@ -966,89 +1030,76 @@ def fullReport(self, bShowNotes = True): if self.eventCode == win32.EXCEPTION_DEBUG_EVENT: (exploitability, expcode, expdescription) = self.isExploitable() - msg += '\nSecurity risk level: %s\n' % exploitability - msg += ' %s\n' % expdescription + msg += "\nSecurity risk level: %s\n" % exploitability + msg += " %s\n" % expdescription if bShowNotes and self.notes: - msg += '\nNotes:\n' + msg += "\nNotes:\n" msg += self.notesReport() if self.commandLine: - msg += '\nCommand line: %s\n' % self.commandLine + msg += "\nCommand line: %s\n" % self.commandLine if self.environment: - msg += '\nEnvironment:\n' + msg += "\nEnvironment:\n" msg += self.environmentReport() if not self.labelPC: base = HexDump.address(self.lpBaseOfDll, self.bits) if self.modFileName: - fn = PathOperations.pathname_to_filename(self.modFileName) - msg += '\nRunning in %s (%s)\n' % (fn, base) + fn = PathOperations.pathname_to_filename(self.modFileName) + msg += "\nRunning in %s (%s)\n" % (fn, base) else: - msg += '\nRunning in module at %s\n' % base + msg += "\nRunning in module at %s\n" % base if self.registers: - msg += '\nRegisters:\n' + msg += "\nRegisters:\n" msg += CrashDump.dump_registers(self.registers) if self.registersPeek: - msg += '\n' - msg += CrashDump.dump_registers_peek(self.registers, - self.registersPeek, - width = width) + msg += "\n" + msg += CrashDump.dump_registers_peek(self.registers, self.registersPeek, width=width) if self.faultDisasm: - msg += '\nCode disassembly:\n' - msg += CrashDump.dump_code(self.faultDisasm, self.pc, - bits = self.bits) + msg += "\nCode disassembly:\n" + msg += CrashDump.dump_code(self.faultDisasm, self.pc, bits=self.bits) if self.stackTrace: - msg += '\nStack trace:\n' + msg += "\nStack trace:\n" if self.stackTracePretty: - msg += CrashDump.dump_stack_trace_with_labels( - self.stackTracePretty, - bits = self.bits) + msg += CrashDump.dump_stack_trace_with_labels(self.stackTracePretty, bits=self.bits) else: - msg += CrashDump.dump_stack_trace(self.stackTrace, - bits = self.bits) + msg += CrashDump.dump_stack_trace(self.stackTrace, bits=self.bits) if self.stackFrame: if self.stackPeek: - msg += '\nStack pointers:\n' - msg += CrashDump.dump_stack_peek(self.stackPeek, width = width) - msg += '\nStack dump:\n' - msg += HexDump.hexblock(self.stackFrame, self.sp, - bits = self.bits, width = width) + msg += "\nStack pointers:\n" + msg += CrashDump.dump_stack_peek(self.stackPeek, width=width) + msg += "\nStack dump:\n" + msg += HexDump.hexblock(self.stackFrame, self.sp, bits=self.bits, width=width) if self.faultCode and not self.modFileName: - msg += '\nCode dump:\n' - msg += HexDump.hexblock(self.faultCode, self.pc, - bits = self.bits, width = width) + msg += "\nCode dump:\n" + msg += HexDump.hexblock(self.faultCode, self.pc, bits=self.bits, width=width) if self.faultMem: if self.faultPeek: - msg += '\nException address pointers:\n' - msg += CrashDump.dump_data_peek(self.faultPeek, - self.exceptionAddress, - bits = self.bits, - width = width) - msg += '\nException address dump:\n' - msg += HexDump.hexblock(self.faultMem, self.exceptionAddress, - bits = self.bits, width = width) + msg += "\nException address pointers:\n" + msg += CrashDump.dump_data_peek(self.faultPeek, self.exceptionAddress, bits=self.bits, width=width) + msg += "\nException address dump:\n" + msg += HexDump.hexblock(self.faultMem, self.exceptionAddress, bits=self.bits, width=width) if self.memoryMap: - msg += '\nMemory map:\n' + msg += "\nMemory map:\n" mappedFileNames = dict() for mbi in self.memoryMap: - if hasattr(mbi, 'filename') and mbi.filename: + if hasattr(mbi, "filename") and mbi.filename: mappedFileNames[mbi.BaseAddress] = mbi.filename - msg += CrashDump.dump_memory_map(self.memoryMap, mappedFileNames, - bits = self.bits) + msg += CrashDump.dump_memory_map(self.memoryMap, mappedFileNames, bits=self.bits) - if not msg.endswith('\n\n'): - if not msg.endswith('\n'): - msg += '\n' - msg += '\n' + if not msg.endswith("\n\n"): + if not msg.endswith("\n"): + msg += "\n" + msg += "\n" return msg def environmentReport(self): @@ -1057,10 +1108,10 @@ def environmentReport(self): @return: The process environment variables, merged and formatted for a report. """ - msg = '' + msg = "" if self.environment: for key, value in compat.iteritems(self.environment): - msg += ' %s=%s\n' % (key, value) + msg += " %s=%s\n" % (key, value) return msg def notesReport(self): @@ -1068,17 +1119,17 @@ def notesReport(self): @rtype: str @return: All notes, merged and formatted for a report. """ - msg = '' + msg = "" if self.notes: for n in self.notes: - n = n.strip('\n') - if '\n' in n: - n = n.strip('\n') - msg += ' * %s\n' % n.pop(0) + n = n.strip("\n") + if "\n" in n: + n = n.strip("\n") + msg += " * %s\n" % n.pop(0) for x in n: - msg += ' %s\n' % x + msg += " %s\n" % x else: - msg += ' * %s\n' % n + msg += " * %s\n" % n return msg def addNote(self, msg): @@ -1119,11 +1170,13 @@ def hasNotes(self): @rtype: bool @return: C{True} if there are notes for this crash event. """ - return bool( self.notes ) + return bool(self.notes) + -#============================================================================== +# ============================================================================== -class CrashContainer (object): + +class CrashContainer(object): """ Old crash dump persistencer using a DBM database. Doesn't support duplicate crashes. @@ -1181,16 +1234,16 @@ class CrashContainer (object): C{buffer} type), C{False} to use text marshalled values (C{str} type). """ - optimizeKeys = False - optimizeValues = True - compressKeys = False - compressValues = True - escapeKeys = False - escapeValues = False - binaryKeys = False - binaryValues = False + optimizeKeys = False + optimizeValues = True + compressKeys = False + compressValues = True + escapeKeys = False + escapeValues = False + binaryKeys = False + binaryValues = False - def __init__(self, filename = None, allowRepeatedKeys = False): + def __init__(self, filename=None, allowRepeatedKeys=False): """ @type filename: str @param filename: (Optional) File name for crash database. @@ -1210,9 +1263,8 @@ def __init__(self, filename = None, allowRepeatedKeys = False): global anydbm if not anydbm: import anydbm - self.__db = anydbm.open(filename, 'c') - self.__keys = dict([ (self.unmarshall_key(mk), mk) - for mk in self.__db.keys() ]) + self.__db = anydbm.open(filename, "c") + self.__keys = dict([(self.unmarshall_key(mk), mk) for mk in self.__db.keys()]) else: self.__db = dict() self.__keys = dict() @@ -1240,11 +1292,11 @@ def marshall_key(self, key): """ if key in self.__keys: return self.__keys[key] - skey = pickle.dumps(key, protocol = 0) + skey = pickle.dumps(key, protocol=0) if self.compressKeys: skey = zlib.compress(skey, zlib.Z_BEST_COMPRESSION) if self.escapeKeys: - skey = skey.encode('hex') + skey = skey.encode("hex") if self.binaryKeys: skey = buffer(skey) self.__keys[key] = skey @@ -1262,13 +1314,13 @@ def unmarshall_key(self, key): """ key = str(key) if self.escapeKeys: - key = key.decode('hex') + key = key.decode("hex") if self.compressKeys: key = zlib.decompress(key) key = pickle.loads(key) return key - def marshall_value(self, value, storeMemoryMap = False): + def marshall_value(self, value, storeMemoryMap=False): """ Marshalls a Crash object to be used in the database. By default the C{memoryMap} member is B{NOT} stored here. @@ -1286,7 +1338,7 @@ def marshall_value(self, value, storeMemoryMap = False): @rtype: str @return: Converted object. """ - if hasattr(value, 'memoryMap'): + if hasattr(value, "memoryMap"): crash = value memoryMap = crash.memoryMap try: @@ -1295,10 +1347,10 @@ def marshall_value(self, value, storeMemoryMap = False): # convert the generator to a list crash.memoryMap = list(memoryMap) if self.optimizeValues: - value = pickle.dumps(crash, protocol = HIGHEST_PROTOCOL) + value = pickle.dumps(crash, protocol=HIGHEST_PROTOCOL) value = optimize(value) else: - value = pickle.dumps(crash, protocol = 0) + value = pickle.dumps(crash, protocol=0) finally: crash.memoryMap = memoryMap del memoryMap @@ -1306,7 +1358,7 @@ def marshall_value(self, value, storeMemoryMap = False): if self.compressValues: value = zlib.compress(value, zlib.Z_BEST_COMPRESSION) if self.escapeValues: - value = value.encode('hex') + value = value.encode("hex") if self.binaryValues: value = buffer(value) return value @@ -1323,7 +1375,7 @@ def unmarshall_value(self, value): """ value = str(value) if self.escapeValues: - value = value.decode('hex') + value = value.decode("hex") if self.compressValues: value = zlib.decompress(value) value = pickle.loads(value) @@ -1357,7 +1409,7 @@ def __contains__(self, crash): @return: C{True} if a Crash object with the same key is in the container. """ - return self.has_key( crash.key() ) + return self.has_key(crash.key()) def has_key(self, key): """ @@ -1376,7 +1428,7 @@ def iterkeys(self): """ return compat.iterkeys(self.__keys) - class __CrashContainerIterator (object): + class __CrashContainerIterator(object): """ Iterator of Crash objects. Returned by L{CrashContainer.__iter__}. """ @@ -1402,7 +1454,7 @@ def next(self): @return: A B{copy} of a Crash object in the L{CrashContainer}. @raise StopIteration: No more items left. """ - key = self.__keys_iter.next() + key = self.__keys_iter.next() return self.__container.get(key) def __del__(self): @@ -1447,9 +1499,9 @@ def add(self, crash): @param crash: Crash object to add. """ if crash not in self: - key = crash.key() + key = crash.key() skey = self.marshall_key(key) - data = self.marshall_value(crash, storeMemoryMap = True) + data = self.marshall_value(crash, storeMemoryMap=True) self.__db[skey] = data def __delitem__(self, key): @@ -1470,7 +1522,7 @@ def remove(self, crash): @type crash: L{Crash} @param crash: Crash object to remove. """ - del self[ crash.key() ] + del self[crash.key()] def get(self, key): """ @@ -1491,8 +1543,8 @@ def get(self, key): 2. Delete the object from the set. 3. Modify the object and add it again. """ - skey = self.marshall_key(key) - data = self.__db[skey] + skey = self.marshall_key(key) + data = self.__db[skey] crash = self.unmarshall_value(data) return crash @@ -1517,7 +1569,9 @@ def __getitem__(self, key): """ return self.get(key) -#============================================================================== + +# ============================================================================== + class CrashDictionary(object): """ @@ -1526,7 +1580,7 @@ class CrashDictionary(object): Currently the only implementation is through L{sql.CrashDAO}. """ - def __init__(self, url, creator = None, allowRepeatedKeys = True): + def __init__(self, url, creator=None, allowRepeatedKeys=True): """ @type url: str @param url: Connection URL of the crash database. @@ -1599,7 +1653,7 @@ def __iter__(self): @return: Iterator of the contained L{Crash} objects. """ offset = 0 - limit = 10 + limit = 10 while 1: found = self._dao.find(offset=offset, limit=limit) if not found: @@ -1621,7 +1675,7 @@ def iterkeys(self): @return: Iterator of the contained L{Crash} heuristic signatures. """ for crash in self: - yield crash.signature # FIXME this gives repeated results! + yield crash.signature # FIXME this gives repeated results! def __contains__(self, crash): """ @@ -1655,7 +1709,8 @@ def __bool__(self): @rtype: bool @return: C{False} if the container is empty. """ - return bool( len(self) ) + return bool(len(self)) + class CrashTable(CrashDictionary): """ @@ -1666,7 +1721,7 @@ class CrashTable(CrashDictionary): New applications should not use this class. """ - def __init__(self, location = None, allowRepeatedKeys = True): + def __init__(self, location=None, allowRepeatedKeys=True): """ @type location: str @param location: (Optional) Location of the crash database. @@ -1683,16 +1738,15 @@ def __init__(self, location = None, allowRepeatedKeys = True): If C{False} any L{Crash} object with the same signature as a previously existing object will be ignored. """ - warnings.warn( - "The %s class is deprecated since WinAppDbg 1.5." % self.__class__, - DeprecationWarning) + warnings.warn("The %s class is deprecated since WinAppDbg 1.5." % self.__class__, DeprecationWarning) if location: url = "sqlite:///%s" % location else: url = "sqlite://" super(CrashTable, self).__init__(url, allowRepeatedKeys) -class CrashTableMSSQL (CrashDictionary): + +class CrashTableMSSQL(CrashDictionary): """ Old crash dump persistencer using a Microsoft SQL Server database. @@ -1701,7 +1755,7 @@ class CrashTableMSSQL (CrashDictionary): New applications should not use this class. """ - def __init__(self, location = None, allowRepeatedKeys = True): + def __init__(self, location=None, allowRepeatedKeys=True): """ @type location: str @param location: Location of the crash database. @@ -1714,14 +1768,14 @@ def __init__(self, location = None, allowRepeatedKeys = True): If C{False} any L{Crash} object with the same signature as a previously existing object will be ignored. """ - warnings.warn( - "The %s class is deprecated since WinAppDbg 1.5." % self.__class__, - DeprecationWarning) + warnings.warn("The %s class is deprecated since WinAppDbg 1.5." % self.__class__, DeprecationWarning) import urllib + url = "mssql+pyodbc:///?odbc_connect=" + urllib.quote_plus(location) super(CrashTableMSSQL, self).__init__(url, allowRepeatedKeys) -class VolatileCrashContainer (CrashTable): + +class VolatileCrashContainer(CrashTable): """ Old in-memory crash dump storage. @@ -1730,7 +1784,7 @@ class VolatileCrashContainer (CrashTable): New applications should not use this class. """ - def __init__(self, allowRepeatedKeys = True): + def __init__(self, allowRepeatedKeys=True): """ Volatile containers are stored only in memory and destroyed when they go out of scope. @@ -1742,8 +1796,8 @@ def __init__(self, allowRepeatedKeys = True): If C{False} any L{Crash} object with the same key as a previously existing object will be ignored. """ - super(VolatileCrashContainer, self).__init__( - allowRepeatedKeys=allowRepeatedKeys) + super(VolatileCrashContainer, self).__init__(allowRepeatedKeys=allowRepeatedKeys) + class DummyCrashContainer(object): """ @@ -1756,7 +1810,7 @@ class DummyCrashContainer(object): @see: L{CrashDictionary} """ - def __init__(self, allowRepeatedKeys = True): + def __init__(self, allowRepeatedKeys=True): """ Fake containers don't store L{Crash} objects, but they implement the interface properly. @@ -1765,7 +1819,7 @@ def __init__(self, allowRepeatedKeys = True): @param allowRepeatedKeys: Mimics the duplicate filter behavior found in real containers. """ - self.__keys = set() + self.__keys = set() self.__count = 0 self.__allowRepeatedKeys = allowRepeatedKeys @@ -1786,14 +1840,14 @@ def __len__(self): """ if self.__allowRepeatedKeys: return self.__count - return len( self.__keys ) + return len(self.__keys) def __bool__(self): """ @rtype: bool @return: C{False} if the container is empty. """ - return bool( len(self) ) + return bool(len(self)) def add(self, crash): """ @@ -1808,7 +1862,7 @@ def add(self, crash): @type crash: L{Crash} @param crash: Crash object to add. """ - self.__keys.add( crash.signature ) + self.__keys.add(crash.signature) self.__count += 1 def get(self, key): @@ -1825,7 +1879,7 @@ def has_key(self, key): @rtype: bool @return: C{True} if a matching L{Crash} object is in the container. """ - return self.__keys.has_key( key ) + return self.__keys.has_key(key) def iterkeys(self): """ @@ -1843,7 +1897,8 @@ def iterkeys(self): """ return iter(self.__keys) -#============================================================================== + +# ============================================================================== # Register the Crash class with the secure serializer. try: diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py index 8364a5b8c..8d7a4a49e 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/debug.py @@ -40,7 +40,7 @@ __revision__ = "$Id$" -__all__ = [ 'Debug', 'MixedBitsWarning' ] +__all__ = ["Debug", "MixedBitsWarning"] import sys from winappdbg import win32 @@ -56,17 +56,19 @@ import warnings ##import traceback -#============================================================================== +# ============================================================================== + # If you set this warning to be considered as an error, you can stop the # debugger from attaching to 64-bit processes from a 32-bit Python VM and # visceversa. -class MixedBitsWarning (RuntimeWarning): +class MixedBitsWarning(RuntimeWarning): """ This warning is issued when mixing 32 and 64 bit processes. """ -#============================================================================== + +# ============================================================================== # TODO # * Add memory read and write operations, similar to those in the Process @@ -81,7 +83,8 @@ class MixedBitsWarning (RuntimeWarning): # not such a great idea to use the snapshot to store data that really belongs # to the Debug class. -class Debug (EventDispatcher, _BreakpointContainer): + +class Debug(EventDispatcher, _BreakpointContainer): """ The main debugger class. @@ -107,8 +110,7 @@ class Debug (EventDispatcher, _BreakpointContainer): # Automatically set to True the first time a Debug object is instanced. _debug_static_init = False - def __init__(self, eventHandler = None, bKillOnExit = False, - bHostileCode = False): + def __init__(self, eventHandler=None, bKillOnExit=False, bHostileCode=False): """ Debugger object. @@ -141,14 +143,14 @@ def __init__(self, eventHandler = None, bKillOnExit = False, EventDispatcher.__init__(self, eventHandler) _BreakpointContainer.__init__(self) - self.system = System() - self.lastEvent = None - self.__firstDebugee = True - self.__bKillOnExit = bKillOnExit - self.__bHostileCode = bHostileCode - self.__breakOnEP = set() # set of pids - self.__attachedDebugees = set() # set of pids - self.__startedDebugees = set() # set of pids + self.system = System() + self.lastEvent = None + self.__firstDebugee = True + self.__bKillOnExit = bKillOnExit + self.__bHostileCode = bHostileCode + self.__breakOnEP = set() # set of pids + self.__attachedDebugees = set() # set of pids + self.__startedDebugees = set() # set of pids if not self._debug_static_init: self._debug_static_init = True @@ -156,19 +158,19 @@ def __init__(self, eventHandler = None, bKillOnExit = False, # Request debug privileges for the current process. # Only do this once, and only after instancing a Debug object, # so passive debuggers don't get detected because of this. - self.system.request_debug_privileges(bIgnoreExceptions = False) + self.system.request_debug_privileges(bIgnoreExceptions=False) # Try to fix the symbol store path if it wasn't set. # But don't enable symbol downloading by default, since it may # degrade performance severely. - self.system.fix_symbol_store_path(remote = False, force = False) + self.system.fix_symbol_store_path(remote=False, force=False) -## # It's hard not to create circular references, -## # and if we have a destructor, we can end up leaking everything. -## # It's best to code the debugging loop properly to always -## # stop the debugger before going out of scope. -## def __del__(self): -## self.stop() + ## # It's hard not to create circular references, + ## # and if we have a destructor, we can end up leaking everything. + ## # It's best to code the debugging loop properly to always + ## # stop the debugger before going out of scope. + ## def __del__(self): + ## self.stop() def __enter__(self): """ @@ -193,7 +195,7 @@ def __len__(self): # it already does work (because of __len__) but it'd be # useful to do it from the event handler anyway -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def __setSystemKillOnExitMode(self): # Make sure the default system behavior on detaching from processes @@ -237,8 +239,7 @@ def attach(self, dwProcessId): # This also allows the user to stop attaching altogether, # depending on how the warnings are configured. if System.bits != aProcess.get_bits(): - msg = "Mixture of 32 and 64 bits is considered experimental." \ - " Use at your own risk!" + msg = "Mixture of 32 and 64 bits is considered experimental." " Use at your own risk!" warnings.warn(msg, MixedBitsWarning) # Attach to the process. @@ -434,55 +435,46 @@ def execl(self, lpCmdLine, **kwargs): warnings.warn("Debug.execl expects a string") # Set the "debug" flag to True. - kwargs['bDebug'] = True + kwargs["bDebug"] = True # Pop the "break on entry point" flag. - bBreakOnEntryPoint = kwargs.pop('bBreakOnEntryPoint', False) + bBreakOnEntryPoint = kwargs.pop("bBreakOnEntryPoint", False) # Set the default trust level if requested. - if 'iTrustLevel' not in kwargs: + if "iTrustLevel" not in kwargs: if self.__bHostileCode: - kwargs['iTrustLevel'] = 0 + kwargs["iTrustLevel"] = 0 else: - kwargs['iTrustLevel'] = 2 + kwargs["iTrustLevel"] = 2 # Set the default UAC elevation flag if requested. - if 'bAllowElevation' not in kwargs: - kwargs['bAllowElevation'] = not self.__bHostileCode + if "bAllowElevation" not in kwargs: + kwargs["bAllowElevation"] = not self.__bHostileCode # In hostile mode the default parent process is explorer.exe. # Only supported for Windows Vista and above. - if self.__bHostileCode and not kwargs.get('dwParentProcessId', None): + if self.__bHostileCode and not kwargs.get("dwParentProcessId", None): try: vista_and_above = self.__vista_and_above except AttributeError: osi = win32.OSVERSIONINFOEXW() osi.dwMajorVersion = 6 osi.dwMinorVersion = 0 - osi.dwPlatformId = win32.VER_PLATFORM_WIN32_NT + osi.dwPlatformId = win32.VER_PLATFORM_WIN32_NT mask = 0 - mask = win32.VerSetConditionMask(mask, - win32.VER_MAJORVERSION, - win32.VER_GREATER_EQUAL) - mask = win32.VerSetConditionMask(mask, - win32.VER_MAJORVERSION, - win32.VER_GREATER_EQUAL) - mask = win32.VerSetConditionMask(mask, - win32.VER_PLATFORMID, - win32.VER_EQUAL) - vista_and_above = win32.VerifyVersionInfoW(osi, - win32.VER_MAJORVERSION | \ - win32.VER_MINORVERSION | \ - win32.VER_PLATFORMID, - mask) + mask = win32.VerSetConditionMask(mask, win32.VER_MAJORVERSION, win32.VER_GREATER_EQUAL) + mask = win32.VerSetConditionMask(mask, win32.VER_MAJORVERSION, win32.VER_GREATER_EQUAL) + mask = win32.VerSetConditionMask(mask, win32.VER_PLATFORMID, win32.VER_EQUAL) + vista_and_above = win32.VerifyVersionInfoW( + osi, win32.VER_MAJORVERSION | win32.VER_MINORVERSION | win32.VER_PLATFORMID, mask + ) self.__vista_and_above = vista_and_above if vista_and_above: dwParentProcessId = self.system.get_explorer_pid() if dwParentProcessId: - kwargs['dwParentProcessId'] = dwParentProcessId + kwargs["dwParentProcessId"] = dwParentProcessId else: - msg = ("Failed to find \"explorer.exe\"!" - " Using the debugger as parent process.") + msg = 'Failed to find "explorer.exe"!' " Using the debugger as parent process." warnings.warn(msg, RuntimeWarning) # Start the new process. @@ -498,8 +490,7 @@ def execl(self, lpCmdLine, **kwargs): # This also allows the user to stop attaching altogether, # depending on how the warnings are configured. if System.bits != aProcess.get_bits(): - msg = "Mixture of 32 and 64 bits is considered experimental." \ - " Use at your own risk!" + msg = "Mixture of 32 and 64 bits is considered experimental." " Use at your own risk!" warnings.warn(msg, MixedBitsWarning) # Add the new PID to the set of debugees. @@ -533,7 +524,7 @@ def execl(self, lpCmdLine, **kwargs): pass raise - def add_existing_session(self, dwProcessId, bStarted = False): + def add_existing_session(self, dwProcessId, bStarted=False): """ Use this method only when for some reason the debugger's been attached to the target outside of WinAppDbg (for example when integrating with @@ -579,7 +570,7 @@ def add_existing_session(self, dwProcessId, bStarted = False): aProcess.scan_threads() aProcess.scan_modules() - def __cleanup_process(self, dwProcessId, bIgnoreExceptions = False): + def __cleanup_process(self, dwProcessId, bIgnoreExceptions=False): """ Perform the necessary cleanup of a process about to be killed or detached from. @@ -598,14 +589,13 @@ def __cleanup_process(self, dwProcessId, bIgnoreExceptions = False): """ # If the process is being debugged... if self.is_debugee(dwProcessId): - # Make sure a Process object exists or the following calls fail. if not self.system.has_process(dwProcessId): aProcess = Process(dwProcessId) try: aProcess.get_handle() except WindowsError: - pass # fails later on with more specific reason + pass # fails later on with more specific reason self.system._add_process(aProcess) # Erase all breakpoints in the process. @@ -663,7 +653,7 @@ def __cleanup_process(self, dwProcessId, bIgnoreExceptions = False): e = sys.exc_info()[1] warnings.warn(str(e), RuntimeWarning) - def kill(self, dwProcessId, bIgnoreExceptions = False): + def kill(self, dwProcessId, bIgnoreExceptions=False): """ Kills a process currently being debugged. @@ -687,8 +677,7 @@ def kill(self, dwProcessId, bIgnoreExceptions = False): aProcess = Process(dwProcessId) # Cleanup all data referring to the process. - self.__cleanup_process(dwProcessId, - bIgnoreExceptions = bIgnoreExceptions) + self.__cleanup_process(dwProcessId, bIgnoreExceptions=bIgnoreExceptions) # Kill the process. try: @@ -698,8 +687,7 @@ def kill(self, dwProcessId, bIgnoreExceptions = False): if aProcess.is_alive(): aProcess.suspend() finally: - self.detach(dwProcessId, - bIgnoreExceptions = bIgnoreExceptions) + self.detach(dwProcessId, bIgnoreExceptions=bIgnoreExceptions) finally: aProcess.kill() except Exception: @@ -717,7 +705,7 @@ def kill(self, dwProcessId, bIgnoreExceptions = False): e = sys.exc_info()[1] warnings.warn(str(e), RuntimeWarning) - def kill_all(self, bIgnoreExceptions = False): + def kill_all(self, bIgnoreExceptions=False): """ Kills from all processes currently being debugged. @@ -730,9 +718,9 @@ def kill_all(self, bIgnoreExceptions = False): C{bIgnoreExceptions} is C{True}. """ for pid in self.get_debugee_pids(): - self.kill(pid, bIgnoreExceptions = bIgnoreExceptions) + self.kill(pid, bIgnoreExceptions=bIgnoreExceptions) - def detach(self, dwProcessId, bIgnoreExceptions = False): + def detach(self, dwProcessId, bIgnoreExceptions=False): """ Detaches from a process currently being debugged. @@ -769,8 +757,7 @@ def detach(self, dwProcessId, bIgnoreExceptions = False): # Continue the last event before detaching. # XXX not sure about this... try: - if can_detach and self.lastEvent and \ - self.lastEvent.get_pid() == dwProcessId: + if can_detach and self.lastEvent and self.lastEvent.get_pid() == dwProcessId: self.cont(self.lastEvent) except Exception: if not bIgnoreExceptions: @@ -779,8 +766,7 @@ def detach(self, dwProcessId, bIgnoreExceptions = False): warnings.warn(str(e), RuntimeWarning) # Cleanup all data referring to the process. - self.__cleanup_process(dwProcessId, - bIgnoreExceptions = bIgnoreExceptions) + self.__cleanup_process(dwProcessId, bIgnoreExceptions=bIgnoreExceptions) try: # Detach from the process. @@ -803,11 +789,10 @@ def detach(self, dwProcessId, bIgnoreExceptions = False): warnings.warn(str(e), RuntimeWarning) finally: - # Cleanup what remains of the process data. aProcess.clear() - def detach_from_all(self, bIgnoreExceptions = False): + def detach_from_all(self, bIgnoreExceptions=False): """ Detaches from all processes currently being debugged. @@ -821,11 +806,11 @@ def detach_from_all(self, bIgnoreExceptions = False): C{bIgnoreExceptions} is C{True}. """ for pid in self.get_debugee_pids(): - self.detach(pid, bIgnoreExceptions = bIgnoreExceptions) + self.detach(pid, bIgnoreExceptions=bIgnoreExceptions) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def wait(self, dwMilliseconds = None): + def wait(self, dwMilliseconds=None): """ Waits for the next debug event. @@ -844,7 +829,7 @@ def wait(self, dwMilliseconds = None): """ # Wait for the next debug event. - raw = win32.WaitForDebugEvent(dwMilliseconds) + raw = win32.WaitForDebugEvent(dwMilliseconds) event = EventFactory.get(self, raw) # Remember it. @@ -853,7 +838,7 @@ def wait(self, dwMilliseconds = None): # Return it. return event - def dispatch(self, event = None): + def dispatch(self, event=None): """ Calls the debug event notify callbacks. @@ -881,7 +866,6 @@ def dispatch(self, event = None): code = event.get_event_code() if code == win32.EXCEPTION_DEBUG_EVENT: - # At this point, by default some exception types are swallowed by # the debugger, because we don't know yet if it was caused by the # debugger itself or the debugged process. @@ -899,11 +883,11 @@ def dispatch(self, event = None): exc_code = event.get_exception_code() if exc_code in ( - win32.EXCEPTION_BREAKPOINT, - win32.EXCEPTION_WX86_BREAKPOINT, - win32.EXCEPTION_SINGLE_STEP, - win32.EXCEPTION_GUARD_PAGE, - ): + win32.EXCEPTION_BREAKPOINT, + win32.EXCEPTION_WX86_BREAKPOINT, + win32.EXCEPTION_SINGLE_STEP, + win32.EXCEPTION_GUARD_PAGE, + ): event.continueStatus = win32.DBG_CONTINUE elif exc_code == win32.EXCEPTION_INVALID_HANDLE: if self.__bHostileCode: @@ -913,14 +897,11 @@ def dispatch(self, event = None): else: event.continueStatus = win32.DBG_EXCEPTION_NOT_HANDLED - elif code == win32.RIP_EVENT and \ - event.get_rip_type() == win32.SLE_ERROR: - + elif code == win32.RIP_EVENT and event.get_rip_type() == win32.SLE_ERROR: # RIP events that signal fatal events should kill the process. event.continueStatus = win32.DBG_TERMINATE_PROCESS else: - # Other events need this continue code. # Sometimes other codes can be used and are ignored, sometimes not. # For example, when using the DBG_EXCEPTION_NOT_HANDLED code, @@ -930,7 +911,7 @@ def dispatch(self, event = None): # Dispatch the debug event. return EventDispatcher.dispatch(self, event) - def cont(self, event = None): + def cont(self, event=None): """ Resumes execution after processing a debug event. @@ -951,13 +932,12 @@ def cont(self, event = None): return # Get the event continue status information. - dwProcessId = event.get_pid() - dwThreadId = event.get_tid() + dwProcessId = event.get_pid() + dwThreadId = event.get_tid() dwContinueStatus = event.continueStatus # Check if the process is still being debugged. if self.is_debugee(dwProcessId): - # Try to flush the instruction cache. try: if self.system.has_process(dwProcessId): @@ -986,7 +966,7 @@ def cont(self, event = None): if event == self.lastEvent: self.lastEvent = None - def stop(self, bIgnoreExceptions = True): + def stop(self, bIgnoreExceptions=True): """ Stops debugging all processes. @@ -1016,7 +996,6 @@ def stop(self, bIgnoreExceptions = True): # If we do... if has_event: - # Disable all breakpoints in the process before resuming execution. try: pid = event.get_pid() @@ -1156,8 +1135,7 @@ def is_debugee(self, dwProcessId): @return: C{True} if the given process is being debugged by this L{Debug} instance. """ - return self.is_debugee_attached(dwProcessId) or \ - self.is_debugee_started(dwProcessId) + return self.is_debugee_attached(dwProcessId) or self.is_debugee_started(dwProcessId) def is_debugee_started(self, dwProcessId): """ @@ -1199,9 +1177,9 @@ def in_hostile_mode(self): """ return self.__bHostileCode -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def interactive(self, bConfirmQuit = True, bShowBanner = True): + def interactive(self, bConfirmQuit=True, bShowBanner=True): """ Start an interactive debugging session. @@ -1217,14 +1195,14 @@ def interactive(self, bConfirmQuit = True, bShowBanner = True): This method returns when the user closes the session. """ - print('') + print("") print("-" * 79) print("Interactive debugging session started.") - print("Use the \"help\" command to list all available commands.") - print("Use the \"quit\" command to close this session.") + print('Use the "help" command to list all available commands.') + print('Use the "quit" command to close this session.') print("-" * 79) if self.lastEvent is None: - print('') + print("") console = ConsoleDebugger() console.confirm_quit = bConfirmQuit console.load_history() @@ -1234,16 +1212,16 @@ def interactive(self, bConfirmQuit = True, bShowBanner = True): finally: console.stop_using_debugger() console.save_history() - print('') + print("") print("-" * 79) print("Interactive debugging session closed.") print("-" * 79) - print('') + print("") -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @staticmethod - def force_garbage_collection(bIgnoreExceptions = True): + def force_garbage_collection(bIgnoreExceptions=True): """ Close all Win32 handles the Python garbage collector failed to close. @@ -1253,6 +1231,7 @@ def force_garbage_collection(bIgnoreExceptions = True): """ try: import gc + gc.collect() bRecollect = False for obj in list(gc.garbage): @@ -1288,7 +1267,7 @@ def force_garbage_collection(bIgnoreExceptions = True): e = sys.exc_info()[1] warnings.warn(str(e), RuntimeWarning) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def _notify_create_process(self, event): """ @@ -1333,15 +1312,13 @@ def _notify_create_process(self, event): aProcess = event.get_process() try: hProcess = aProcess.get_handle(win32.PROCESS_QUERY_INFORMATION) - pbi = win32.NtQueryInformationProcess( - hProcess, win32.ProcessBasicInformation) + pbi = win32.NtQueryInformationProcess(hProcess, win32.ProcessBasicInformation) ptr = pbi.PebBaseAddress + 2 - if aProcess.peek(ptr, 1) == '\x01': - aProcess.poke(ptr, '\x00') + if aProcess.peek(ptr, 1) == "\x01": + aProcess.poke(ptr, "\x00") except WindowsError: e = sys.exc_info()[1] - warnings.warn( - "Cannot patch PEB->BeingDebugged, reason: %s" % e.strerror) + warnings.warn("Cannot patch PEB->BeingDebugged, reason: %s" % e.strerror) return retval @@ -1384,8 +1361,7 @@ def _notify_load_dll(self, event): # Anti-anti-debugging tricks on ntdll.dll. if self.__bHostileCode: aModule = event.get_module() - if aModule.match_name('ntdll.dll'): - + if aModule.match_name("ntdll.dll"): # Since we've overwritten the PEB to hide # ourselves, we no longer have the system # breakpoint when attaching to the process. @@ -1395,8 +1371,7 @@ def _notify_load_dll(self, event): # a simple anti-debugging trick: the hostile # process could have overwritten the int3 # instruction at the system breakpoint. - self.break_at(aProcess.get_pid(), - aProcess.resolve_label('ntdll!DbgUiRemoteBreakin')) + self.break_at(aProcess.get_pid(), aProcess.resolve_label("ntdll!DbgUiRemoteBreakin")) return bCallHandler @@ -1416,18 +1391,14 @@ def _notify_exit_process(self, event): bCallHandler2 = self.system._notify_exit_process(event) try: - self.detach( event.get_pid() ) + self.detach(event.get_pid()) except WindowsError: e = sys.exc_info()[1] if e.winerror != win32.ERROR_INVALID_PARAMETER: - warnings.warn( - "Failed to detach from dead process, reason: %s" % str(e), - RuntimeWarning) + warnings.warn("Failed to detach from dead process, reason: %s" % str(e), RuntimeWarning) except Exception: e = sys.exc_info()[1] - warnings.warn( - "Failed to detach from dead process, reason: %s" % str(e), - RuntimeWarning) + warnings.warn("Failed to detach from dead process, reason: %s" % str(e), RuntimeWarning) return bCallHandler1 and bCallHandler2 @@ -1475,7 +1446,7 @@ def _notify_rip(self, event): @rtype: bool @return: C{True} to call the user-defined handle, C{False} otherwise. """ - event.debug.detach( event.get_pid() ) + event.debug.detach(event.get_pid()) return True def _notify_debug_control_c(self, event): @@ -1519,14 +1490,13 @@ def _notify_ms_vc_exception(self, event): """ dwType = event.get_exception_information(0) if dwType == 0x1000: - pszName = event.get_exception_information(1) - dwThreadId = event.get_exception_information(2) - dwFlags = event.get_exception_information(3) + pszName = event.get_exception_information(1) + dwThreadId = event.get_exception_information(2) + dwFlags = event.get_exception_information(3) aProcess = event.get_process() - szName = aProcess.peek_string(pszName, fUnicode = False) + szName = aProcess.peek_string(pszName, fUnicode=False) if szName: - if dwThreadId == -1: dwThreadId = event.get_tid() @@ -1536,8 +1506,8 @@ def _notify_ms_vc_exception(self, event): aThread = Thread(dwThreadId) aProcess._add_thread(aThread) -## if aThread.get_name() is None: -## aThread.set_name(szName) + ## if aThread.get_name() is None: + ## aThread.set_name(szName) aThread.set_name(szName) return True diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py index 230e3314a..306c4ea0e 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/disasm.py @@ -44,13 +44,13 @@ __revision__ = "$Id$" __all__ = [ - 'Disassembler', - 'Engine', - 'BeaEngine', - 'CapstoneEngine', - 'DistormEngine', - 'LibdisassembleEngine', - 'PyDasmEngine', + "Disassembler", + "Engine", + "BeaEngine", + "CapstoneEngine", + "DistormEngine", + "LibdisassembleEngine", + "PyDasmEngine", ] from winappdbg.textio import HexDump @@ -66,9 +66,10 @@ libdisassemble = None capstone = None -#============================================================================== +# ============================================================================== -class Engine (object): + +class Engine(object): """ Base class for disassembly engine adaptors. @@ -91,10 +92,10 @@ class Engine (object): name = "" desc = "" - url = "" + url = "" supported = set() - def __init__(self, arch = None): + def __init__(self, arch=None): """ @type arch: str @param arch: Name of the processor architecture. @@ -112,7 +113,7 @@ def __init__(self, arch = None): msg = msg % (self.name, self.url) raise NotImplementedError(msg) - def _validate_arch(self, arch = None): + def _validate_arch(self, arch=None): """ @type arch: str @param arch: Name of the processor architecture. @@ -171,9 +172,11 @@ def decode(self, address, code): """ raise NotImplementedError() -#============================================================================== -class BeaEngine (Engine): +# ============================================================================== + + +class BeaEngine(Engine): """ Integration with the BeaEngine disassembler by Beatrix. @@ -182,15 +185,16 @@ class BeaEngine (Engine): name = "BeaEngine" desc = "BeaEngine disassembler by Beatrix" - url = "https://sourceforge.net/projects/winappdbg/files/additional%20packages/BeaEngine/" + url = "https://sourceforge.net/projects/winappdbg/files/additional%20packages/BeaEngine/" - supported = set(( - win32.ARCH_I386, - win32.ARCH_AMD64, - )) + supported = set( + ( + win32.ARCH_I386, + win32.ARCH_AMD64, + ) + ) def _import_dependencies(self): - # Load the BeaEngine ctypes wrapper. global BeaEnginePython if BeaEnginePython is None: @@ -212,10 +216,9 @@ def decode(self, address, code): Instruction.Archi = 0 else: Instruction.Archi = 0x40 - Instruction.Options = ( BeaEnginePython.Tabulation + - BeaEnginePython.NasmSyntax + - BeaEnginePython.SuffixedNumeral + - BeaEnginePython.ShowSegmentRegs ) + Instruction.Options = ( + BeaEnginePython.Tabulation + BeaEnginePython.NasmSyntax + BeaEnginePython.SuffixedNumeral + BeaEnginePython.ShowSegmentRegs + ) # Prepare for looping over each instruction. result = [] @@ -223,12 +226,11 @@ def decode(self, address, code): InstructionPtr = addressof(Instruction) hexdump = HexDump.hexadecimal append = result.append - OUT_OF_BLOCK = BeaEnginePython.OUT_OF_BLOCK + OUT_OF_BLOCK = BeaEnginePython.OUT_OF_BLOCK UNKNOWN_OPCODE = BeaEnginePython.UNKNOWN_OPCODE # For each decoded instruction... while True: - # Calculate the current offset into the buffer. offset = Instruction.EIP - buffer_ptr @@ -245,15 +247,16 @@ def decode(self, address, code): # The instruction could not be decoded. if InstrLength == UNKNOWN_OPCODE: - # Output a single byte as a "db" instruction. char = "%.2X" % ord(buffer[offset]) - result.append(( - Instruction.VirtualAddr, - 1, - "db %sh" % char, - char, - )) + result.append( + ( + Instruction.VirtualAddr, + 1, + "db %sh" % char, + char, + ) + ) Instruction.VirtualAddr += 1 Instruction.EIP += 1 @@ -261,38 +264,42 @@ def decode(self, address, code): # This can happen when the last instruction is a prefix without an # opcode. For example: decode(0, '\x66') elif offset + InstrLength > len(code): - # Output each byte as a "db" instruction. - for char in buffer[ offset : offset + len(code) ]: + for char in buffer[offset : offset + len(code)]: char = "%.2X" % ord(char) - result.append(( - Instruction.VirtualAddr, - 1, - "db %sh" % char, - char, - )) + result.append( + ( + Instruction.VirtualAddr, + 1, + "db %sh" % char, + char, + ) + ) Instruction.VirtualAddr += 1 Instruction.EIP += 1 # The instruction was decoded correctly. else: - # Output the decoded instruction. - append(( - Instruction.VirtualAddr, - InstrLength, - Instruction.CompleteInstr.strip(), - hexdump(buffer.raw[offset:offset+InstrLength]), - )) + append( + ( + Instruction.VirtualAddr, + InstrLength, + Instruction.CompleteInstr.strip(), + hexdump(buffer.raw[offset : offset + InstrLength]), + ) + ) Instruction.VirtualAddr += InstrLength Instruction.EIP += InstrLength # Return the list of decoded instructions. return result -#============================================================================== -class DistormEngine (Engine): +# ============================================================================== + + +class DistormEngine(Engine): """ Integration with the diStorm disassembler by Gil Dabah. @@ -301,15 +308,16 @@ class DistormEngine (Engine): name = "diStorm" desc = "diStorm disassembler by Gil Dabah" - url = "https://code.google.com/p/distorm3" + url = "https://code.google.com/p/distorm3" - supported = set(( - win32.ARCH_I386, - win32.ARCH_AMD64, - )) + supported = set( + ( + win32.ARCH_I386, + win32.ARCH_AMD64, + ) + ) def _import_dependencies(self): - # Load the distorm bindings. global distorm3 if distorm3 is None: @@ -323,16 +331,18 @@ def _import_dependencies(self): # Load the bits flag. self.__flag = { - win32.ARCH_I386: distorm3.Decode32Bits, + win32.ARCH_I386: distorm3.Decode32Bits, win32.ARCH_AMD64: distorm3.Decode64Bits, }[self.arch] def decode(self, address, code): return self.__decode(address, code, self.__flag) -#============================================================================== -class PyDasmEngine (Engine): +# ============================================================================== + + +class PyDasmEngine(Engine): """ Integration with PyDasm: Python bindings to libdasm. @@ -341,54 +351,48 @@ class PyDasmEngine (Engine): name = "PyDasm" desc = "PyDasm: Python bindings to libdasm" - url = "https://code.google.com/p/libdasm/" + url = "https://code.google.com/p/libdasm/" - supported = set(( - win32.ARCH_I386, - )) + supported = set((win32.ARCH_I386,)) def _import_dependencies(self): - # Load the libdasm bindings. global pydasm if pydasm is None: import pydasm def decode(self, address, code): - # Decode each instruction in the buffer. result = [] offset = 0 while offset < len(code): - # Try to decode the current instruction. - instruction = pydasm.get_instruction(code[offset:offset+32], - pydasm.MODE_32) + instruction = pydasm.get_instruction(code[offset : offset + 32], pydasm.MODE_32) # Get the memory address of the current instruction. current = address + offset # Illegal opcode or opcode longer than remaining buffer. if not instruction or instruction.length + offset > len(code): - hexdump = '%.2X' % ord(code[offset]) - disasm = 'db 0x%s' % hexdump - ilen = 1 + hexdump = "%.2X" % ord(code[offset]) + disasm = "db 0x%s" % hexdump + ilen = 1 # Correctly decoded instruction. else: - disasm = pydasm.get_instruction_string(instruction, - pydasm.FORMAT_INTEL, - current) - ilen = instruction.length - hexdump = HexDump.hexadecimal(code[offset:offset+ilen]) + disasm = pydasm.get_instruction_string(instruction, pydasm.FORMAT_INTEL, current) + ilen = instruction.length + hexdump = HexDump.hexadecimal(code[offset : offset + ilen]) # Add the decoded instruction to the list. - result.append(( - current, - ilen, - disasm, - hexdump, - )) + result.append( + ( + current, + ilen, + disasm, + hexdump, + ) + ) # Move to the next instruction. offset += ilen @@ -396,9 +400,11 @@ def decode(self, address, code): # Return the list of decoded instructions. return result -#============================================================================== -class LibdisassembleEngine (Engine): +# ============================================================================== + + +class LibdisassembleEngine(Engine): """ Integration with Immunity libdisassemble. @@ -407,14 +413,11 @@ class LibdisassembleEngine (Engine): name = "Libdisassemble" desc = "Immunity libdisassemble" - url = "http://www.immunitysec.com/resources-freesoftware.shtml" + url = "http://www.immunitysec.com/resources-freesoftware.shtml" - supported = set(( - win32.ARCH_I386, - )) + supported = set((win32.ARCH_I386,)) def _import_dependencies(self): - # Load the libdisassemble module. # Since it doesn't come with an installer or an __init__.py file # users can only install it manually however they feel like it, @@ -423,35 +426,33 @@ def _import_dependencies(self): global libdisassemble if libdisassemble is None: try: - # If installed properly with __init__.py import libdisassemble.disassemble as libdisassemble except ImportError: - # If installed by just copying and pasting the files import disassemble as libdisassemble def decode(self, address, code): - # Decode each instruction in the buffer. result = [] offset = 0 while offset < len(code): - # Decode the current instruction. - opcode = libdisassemble.Opcode( code[offset:offset+32] ) - length = opcode.getSize() - disasm = opcode.printOpcode('INTEL') - hexdump = HexDump.hexadecimal( code[offset:offset+length] ) + opcode = libdisassemble.Opcode(code[offset : offset + 32]) + length = opcode.getSize() + disasm = opcode.printOpcode("INTEL") + hexdump = HexDump.hexadecimal(code[offset : offset + length]) # Add the decoded instruction to the list. - result.append(( - address + offset, - length, - disasm, - hexdump, - )) + result.append( + ( + address + offset, + length, + disasm, + hexdump, + ) + ) # Move to the next instruction. offset += length @@ -459,9 +460,11 @@ def decode(self, address, code): # Return the list of decoded instructions. return result -#============================================================================== -class CapstoneEngine (Engine): +# ============================================================================== + + +class CapstoneEngine(Engine): """ Integration with the Capstone disassembler by Nguyen Anh Quynh. @@ -470,18 +473,19 @@ class CapstoneEngine (Engine): name = "Capstone" desc = "Capstone disassembler by Nguyen Anh Quynh" - url = "http://www.capstone-engine.org/" - - supported = set(( - win32.ARCH_I386, - win32.ARCH_AMD64, - win32.ARCH_THUMB, - win32.ARCH_ARM, - win32.ARCH_ARM64, - )) + url = "http://www.capstone-engine.org/" + + supported = set( + ( + win32.ARCH_I386, + win32.ARCH_AMD64, + win32.ARCH_THUMB, + win32.ARCH_ARM, + win32.ARCH_ARM64, + ) + ) def _import_dependencies(self): - # Load the Capstone bindings. global capstone if capstone is None: @@ -489,36 +493,27 @@ def _import_dependencies(self): # Load the constants for the requested architecture. self.__constants = { - win32.ARCH_I386: - (capstone.CS_ARCH_X86, capstone.CS_MODE_32), - win32.ARCH_AMD64: - (capstone.CS_ARCH_X86, capstone.CS_MODE_64), - win32.ARCH_THUMB: - (capstone.CS_ARCH_ARM, capstone.CS_MODE_THUMB), - win32.ARCH_ARM: - (capstone.CS_ARCH_ARM, capstone.CS_MODE_ARM), - win32.ARCH_ARM64: - (capstone.CS_ARCH_ARM64, capstone.CS_MODE_ARM), + win32.ARCH_I386: (capstone.CS_ARCH_X86, capstone.CS_MODE_32), + win32.ARCH_AMD64: (capstone.CS_ARCH_X86, capstone.CS_MODE_64), + win32.ARCH_THUMB: (capstone.CS_ARCH_ARM, capstone.CS_MODE_THUMB), + win32.ARCH_ARM: (capstone.CS_ARCH_ARM, capstone.CS_MODE_ARM), + win32.ARCH_ARM64: (capstone.CS_ARCH_ARM64, capstone.CS_MODE_ARM), } # Test for the bug in early versions of Capstone. # If found, warn the user about it. try: self.__bug = not isinstance( - capstone.cs_disasm_quick( - capstone.CS_ARCH_X86, capstone.CS_MODE_32, "\x90", 1)[0], - capstone.capstone.CsInsn) + capstone.cs_disasm_quick(capstone.CS_ARCH_X86, capstone.CS_MODE_32, "\x90", 1)[0], capstone.capstone.CsInsn + ) except AttributeError: self.__bug = False if self.__bug: warnings.warn( - "This version of the Capstone bindings is unstable," - " please upgrade to a newer one!", - RuntimeWarning, stacklevel=4) - + "This version of the Capstone bindings is unstable," " please upgrade to a newer one!", RuntimeWarning, stacklevel=4 + ) def decode(self, address, code): - # Get the constants for the requested architecture. arch, mode = self.__constants[self.arch] @@ -543,29 +538,26 @@ def decode(self, address, code): result = [] offset = 0 while offset < len(code): - # Disassemble a single instruction, because disassembling multiple # instructions may cause excessive memory usage (Capstone allocates # approximately 1K of metadata per each decoded instruction). instr = None try: - instr = decoder( - arch, mode, code[offset:offset+16], address+offset, 1)[0] + instr = decoder(arch, mode, code[offset : offset + 16], address + offset, 1)[0] except IndexError: - pass # No instructions decoded. + pass # No instructions decoded. except CsError: - pass # Any other error. + pass # Any other error. # On success add the decoded instruction. if instr is not None: - # Get the instruction length, mnemonic and operands. # Copy the values quickly before someone overwrites them, # if using the buggy version of the bindings (otherwise it's # irrelevant in which order we access the properties). - length = instr.size + length = instr.size mnemonic = instr.mnemonic - op_str = instr.op_str + op_str = instr.op_str # Concatenate the mnemonic and the operands. if op_str: @@ -574,12 +566,11 @@ def decode(self, address, code): disasm = mnemonic # Get the instruction bytes as a hexadecimal dump. - hexdump = HexDump.hexadecimal( code[offset:offset+length] ) + hexdump = HexDump.hexadecimal(code[offset : offset + length]) # On error add a "define constant" instruction. # The exact instruction depends on the architecture. else: - # The number of bytes to skip depends on the architecture. # On Intel processors we'll skip one byte, since we can't # really know the instruction length. On the rest of the @@ -590,7 +581,7 @@ def decode(self, address, code): length = 4 # Get the skipped bytes as a hexadecimal dump. - skipped = code[offset:offset+length] + skipped = code[offset : offset + length] hexdump = HexDump.hexadecimal(skipped) # Build the "define constant" instruction. @@ -610,12 +601,14 @@ def decode(self, address, code): disasm = mnemonic + op_str # Add the decoded instruction to the list. - result.append(( - address + offset, - length, - disasm, - hexdump, - )) + result.append( + ( + address + offset, + length, + disasm, + hexdump, + ) + ) # Update the offset. offset += length @@ -623,12 +616,14 @@ def decode(self, address, code): # Return the list of decoded instructions. return result -#============================================================================== + +# ============================================================================== # TODO: use a lock to access __decoder # TODO: look in sys.modules for whichever disassembler is already loaded -class Disassembler (object): + +class Disassembler(object): """ Generic disassembler. Uses a set of adapters to decide which library to load for which supported platform. @@ -656,7 +651,7 @@ class Disassembler (object): # Cache of already loaded disassemblers. __decoder = {} - def __new__(cls, arch = None, engine = None): + def __new__(cls, arch=None, engine=None): """ Factory class. You can't really instance a L{Disassembler} object, instead one of the adapter L{Engine} subclasses is returned. diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py index af64727be..57e9a3751 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/event.py @@ -58,38 +58,32 @@ __revision__ = "$Id$" __all__ = [ - # Factory of Event objects and all of it's subclasses. - # Users should not need to instance Event objects directly. - 'EventFactory', - - # Event dispatcher used internally by the Debug class. - 'EventDispatcher', - - # Base classes for user-defined event handlers. - 'EventHandler', - 'EventSift', - - # Warning for uncaught exceptions on event callbacks. - 'EventCallbackWarning', - - # Dummy event object that can be used as a placeholder. - # It's never returned by the EventFactory. - 'NoEvent', - - # Base class for event objects. - 'Event', - - # Event objects. - 'CreateProcessEvent', - 'CreateThreadEvent', - 'ExitProcessEvent', - 'ExitThreadEvent', - 'LoadDLLEvent', - 'UnloadDLLEvent', - 'OutputDebugStringEvent', - 'RIPEvent', - 'ExceptionEvent' - ] + # Factory of Event objects and all of it's subclasses. + # Users should not need to instance Event objects directly. + "EventFactory", + # Event dispatcher used internally by the Debug class. + "EventDispatcher", + # Base classes for user-defined event handlers. + "EventHandler", + "EventSift", + # Warning for uncaught exceptions on event callbacks. + "EventCallbackWarning", + # Dummy event object that can be used as a placeholder. + # It's never returned by the EventFactory. + "NoEvent", + # Base class for event objects. + "Event", + # Event objects. + "CreateProcessEvent", + "CreateThreadEvent", + "ExitProcessEvent", + "ExitThreadEvent", + "LoadDLLEvent", + "UnloadDLLEvent", + "OutputDebugStringEvent", + "RIPEvent", + "ExceptionEvent", +] from winappdbg import win32 from winappdbg import compat @@ -106,17 +100,20 @@ import warnings import traceback -#============================================================================== +# ============================================================================== -class EventCallbackWarning (RuntimeWarning): + +class EventCallbackWarning(RuntimeWarning): """ This warning is issued when an uncaught exception was raised by a user-defined event handler. """ -#============================================================================== -class Event (object): +# ============================================================================== + + +class Event(object): """ Event object. @@ -146,9 +143,9 @@ class Event (object): Continue status to pass to L{win32.ContinueDebugEvent}. """ - eventMethod = 'unknown_event' - eventName = 'Unknown event' - eventDescription = 'A debug event of an unknown type has occured.' + eventMethod = "unknown_event" + eventName = "Unknown event" + eventDescription = "A debug event of an unknown type has occured." def __init__(self, debug, raw): """ @@ -158,18 +155,18 @@ def __init__(self, debug, raw): @type raw: L{DEBUG_EVENT} @param raw: Raw DEBUG_EVENT structure as used by the Win32 API. """ - self.debug = debug - self.raw = raw + self.debug = debug + self.raw = raw self.continueStatus = win32.DBG_EXCEPTION_NOT_HANDLED -## @property -## def debug(self): -## """ -## @rtype debug: L{Debug} -## @return debug: -## Debug object that received the event. -## """ -## return self.__debug() + ## @property + ## def debug(self): + ## """ + ## @rtype debug: L{Debug} + ## @return debug: + ## Debug object that received the event. + ## """ + ## return self.__debug() def get_event_name(self): """ @@ -192,18 +189,18 @@ def get_event_code(self): """ return self.raw.dwDebugEventCode -## # Compatibility with version 1.0 -## # XXX to be removed in version 1.4 -## def get_code(self): -## """ -## Alias of L{get_event_code} for backwards compatibility -## with WinAppDbg version 1.0. -## Will be phased out in the next version. -## -## @rtype: int -## @return: Debug event code as defined in the Win32 API. -## """ -## return self.get_event_code() + ## # Compatibility with version 1.0 + ## # XXX to be removed in version 1.4 + ## def get_code(self): + ## """ + ## Alias of L{get_event_code} for backwards compatibility + ## with WinAppDbg version 1.0. + ## Will be phased out in the next version. + ## + ## @rtype: int + ## @return: Debug event code as defined in the Win32 API. + ## """ + ## return self.get_event_code() def get_pid(self): """ @@ -230,8 +227,8 @@ def get_process(self): @rtype: L{Process} @return: Process where the event occured. """ - pid = self.get_pid() - system = self.debug.system + pid = self.get_pid() + system = self.debug.system if system.has_process(pid): process = system.get_process(pid) else: @@ -239,7 +236,7 @@ def get_process(self): # The process object was missing for some reason, so make a new one. process = Process(pid) system._add_process(process) -## process.scan_threads() # not needed + ## process.scan_threads() # not needed process.scan_modules() return process @@ -250,7 +247,7 @@ def get_thread(self): @rtype: L{Thread} @return: Thread where the event occured. """ - tid = self.get_tid() + tid = self.get_tid() process = self.get_process() if process.has_thread(tid): thread = process.get_thread(tid) @@ -261,9 +258,11 @@ def get_thread(self): process._add_thread(thread) return thread -#============================================================================== -class NoEvent (Event): +# ============================================================================== + + +class NoEvent(Event): """ No event. @@ -271,11 +270,11 @@ class NoEvent (Event): event has occured yet. It's never returned by the L{EventFactory}. """ - eventMethod = 'no_event' - eventName = 'No event' - eventDescription = 'No debug event has occured.' + eventMethod = "no_event" + eventName = "No event" + eventDescription = "No debug event has occured." - def __init__(self, debug, raw = None): + def __init__(self, debug, raw=None): Event.__init__(self, debug, raw) def __len__(self): @@ -301,9 +300,11 @@ def get_process(self): def get_thread(self): return Thread(self.get_tid()) -#============================================================================== -class ExceptionEvent (Event): +# ============================================================================== + + +class ExceptionEvent(Event): """ Exception event. @@ -330,103 +331,102 @@ class ExceptionEvent (Event): handler. """ - eventName = 'Exception event' - eventDescription = 'An exception was raised by the debugee.' + eventName = "Exception event" + eventDescription = "An exception was raised by the debugee." __exceptionMethod = { - win32.EXCEPTION_ACCESS_VIOLATION : 'access_violation', - win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED : 'array_bounds_exceeded', - win32.EXCEPTION_BREAKPOINT : 'breakpoint', - win32.EXCEPTION_DATATYPE_MISALIGNMENT : 'datatype_misalignment', - win32.EXCEPTION_FLT_DENORMAL_OPERAND : 'float_denormal_operand', - win32.EXCEPTION_FLT_DIVIDE_BY_ZERO : 'float_divide_by_zero', - win32.EXCEPTION_FLT_INEXACT_RESULT : 'float_inexact_result', - win32.EXCEPTION_FLT_INVALID_OPERATION : 'float_invalid_operation', - win32.EXCEPTION_FLT_OVERFLOW : 'float_overflow', - win32.EXCEPTION_FLT_STACK_CHECK : 'float_stack_check', - win32.EXCEPTION_FLT_UNDERFLOW : 'float_underflow', - win32.EXCEPTION_ILLEGAL_INSTRUCTION : 'illegal_instruction', - win32.EXCEPTION_IN_PAGE_ERROR : 'in_page_error', - win32.EXCEPTION_INT_DIVIDE_BY_ZERO : 'integer_divide_by_zero', - win32.EXCEPTION_INT_OVERFLOW : 'integer_overflow', - win32.EXCEPTION_INVALID_DISPOSITION : 'invalid_disposition', - win32.EXCEPTION_NONCONTINUABLE_EXCEPTION : 'noncontinuable_exception', - win32.EXCEPTION_PRIV_INSTRUCTION : 'privileged_instruction', - win32.EXCEPTION_SINGLE_STEP : 'single_step', - win32.EXCEPTION_STACK_OVERFLOW : 'stack_overflow', - win32.EXCEPTION_GUARD_PAGE : 'guard_page', - win32.EXCEPTION_INVALID_HANDLE : 'invalid_handle', - win32.EXCEPTION_POSSIBLE_DEADLOCK : 'possible_deadlock', - win32.EXCEPTION_WX86_BREAKPOINT : 'wow64_breakpoint', - win32.CONTROL_C_EXIT : 'control_c_exit', - win32.DBG_CONTROL_C : 'debug_control_c', - win32.MS_VC_EXCEPTION : 'ms_vc_exception', + win32.EXCEPTION_ACCESS_VIOLATION: "access_violation", + win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "array_bounds_exceeded", + win32.EXCEPTION_BREAKPOINT: "breakpoint", + win32.EXCEPTION_DATATYPE_MISALIGNMENT: "datatype_misalignment", + win32.EXCEPTION_FLT_DENORMAL_OPERAND: "float_denormal_operand", + win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "float_divide_by_zero", + win32.EXCEPTION_FLT_INEXACT_RESULT: "float_inexact_result", + win32.EXCEPTION_FLT_INVALID_OPERATION: "float_invalid_operation", + win32.EXCEPTION_FLT_OVERFLOW: "float_overflow", + win32.EXCEPTION_FLT_STACK_CHECK: "float_stack_check", + win32.EXCEPTION_FLT_UNDERFLOW: "float_underflow", + win32.EXCEPTION_ILLEGAL_INSTRUCTION: "illegal_instruction", + win32.EXCEPTION_IN_PAGE_ERROR: "in_page_error", + win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "integer_divide_by_zero", + win32.EXCEPTION_INT_OVERFLOW: "integer_overflow", + win32.EXCEPTION_INVALID_DISPOSITION: "invalid_disposition", + win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "noncontinuable_exception", + win32.EXCEPTION_PRIV_INSTRUCTION: "privileged_instruction", + win32.EXCEPTION_SINGLE_STEP: "single_step", + win32.EXCEPTION_STACK_OVERFLOW: "stack_overflow", + win32.EXCEPTION_GUARD_PAGE: "guard_page", + win32.EXCEPTION_INVALID_HANDLE: "invalid_handle", + win32.EXCEPTION_POSSIBLE_DEADLOCK: "possible_deadlock", + win32.EXCEPTION_WX86_BREAKPOINT: "wow64_breakpoint", + win32.CONTROL_C_EXIT: "control_c_exit", + win32.DBG_CONTROL_C: "debug_control_c", + win32.MS_VC_EXCEPTION: "ms_vc_exception", } __exceptionName = { - win32.EXCEPTION_ACCESS_VIOLATION : 'EXCEPTION_ACCESS_VIOLATION', - win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED : 'EXCEPTION_ARRAY_BOUNDS_EXCEEDED', - win32.EXCEPTION_BREAKPOINT : 'EXCEPTION_BREAKPOINT', - win32.EXCEPTION_DATATYPE_MISALIGNMENT : 'EXCEPTION_DATATYPE_MISALIGNMENT', - win32.EXCEPTION_FLT_DENORMAL_OPERAND : 'EXCEPTION_FLT_DENORMAL_OPERAND', - win32.EXCEPTION_FLT_DIVIDE_BY_ZERO : 'EXCEPTION_FLT_DIVIDE_BY_ZERO', - win32.EXCEPTION_FLT_INEXACT_RESULT : 'EXCEPTION_FLT_INEXACT_RESULT', - win32.EXCEPTION_FLT_INVALID_OPERATION : 'EXCEPTION_FLT_INVALID_OPERATION', - win32.EXCEPTION_FLT_OVERFLOW : 'EXCEPTION_FLT_OVERFLOW', - win32.EXCEPTION_FLT_STACK_CHECK : 'EXCEPTION_FLT_STACK_CHECK', - win32.EXCEPTION_FLT_UNDERFLOW : 'EXCEPTION_FLT_UNDERFLOW', - win32.EXCEPTION_ILLEGAL_INSTRUCTION : 'EXCEPTION_ILLEGAL_INSTRUCTION', - win32.EXCEPTION_IN_PAGE_ERROR : 'EXCEPTION_IN_PAGE_ERROR', - win32.EXCEPTION_INT_DIVIDE_BY_ZERO : 'EXCEPTION_INT_DIVIDE_BY_ZERO', - win32.EXCEPTION_INT_OVERFLOW : 'EXCEPTION_INT_OVERFLOW', - win32.EXCEPTION_INVALID_DISPOSITION : 'EXCEPTION_INVALID_DISPOSITION', - win32.EXCEPTION_NONCONTINUABLE_EXCEPTION : 'EXCEPTION_NONCONTINUABLE_EXCEPTION', - win32.EXCEPTION_PRIV_INSTRUCTION : 'EXCEPTION_PRIV_INSTRUCTION', - win32.EXCEPTION_SINGLE_STEP : 'EXCEPTION_SINGLE_STEP', - win32.EXCEPTION_STACK_OVERFLOW : 'EXCEPTION_STACK_OVERFLOW', - win32.EXCEPTION_GUARD_PAGE : 'EXCEPTION_GUARD_PAGE', - win32.EXCEPTION_INVALID_HANDLE : 'EXCEPTION_INVALID_HANDLE', - win32.EXCEPTION_POSSIBLE_DEADLOCK : 'EXCEPTION_POSSIBLE_DEADLOCK', - win32.EXCEPTION_WX86_BREAKPOINT : 'EXCEPTION_WX86_BREAKPOINT', - win32.CONTROL_C_EXIT : 'CONTROL_C_EXIT', - win32.DBG_CONTROL_C : 'DBG_CONTROL_C', - win32.MS_VC_EXCEPTION : 'MS_VC_EXCEPTION', + win32.EXCEPTION_ACCESS_VIOLATION: "EXCEPTION_ACCESS_VIOLATION", + win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "EXCEPTION_ARRAY_BOUNDS_EXCEEDED", + win32.EXCEPTION_BREAKPOINT: "EXCEPTION_BREAKPOINT", + win32.EXCEPTION_DATATYPE_MISALIGNMENT: "EXCEPTION_DATATYPE_MISALIGNMENT", + win32.EXCEPTION_FLT_DENORMAL_OPERAND: "EXCEPTION_FLT_DENORMAL_OPERAND", + win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "EXCEPTION_FLT_DIVIDE_BY_ZERO", + win32.EXCEPTION_FLT_INEXACT_RESULT: "EXCEPTION_FLT_INEXACT_RESULT", + win32.EXCEPTION_FLT_INVALID_OPERATION: "EXCEPTION_FLT_INVALID_OPERATION", + win32.EXCEPTION_FLT_OVERFLOW: "EXCEPTION_FLT_OVERFLOW", + win32.EXCEPTION_FLT_STACK_CHECK: "EXCEPTION_FLT_STACK_CHECK", + win32.EXCEPTION_FLT_UNDERFLOW: "EXCEPTION_FLT_UNDERFLOW", + win32.EXCEPTION_ILLEGAL_INSTRUCTION: "EXCEPTION_ILLEGAL_INSTRUCTION", + win32.EXCEPTION_IN_PAGE_ERROR: "EXCEPTION_IN_PAGE_ERROR", + win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "EXCEPTION_INT_DIVIDE_BY_ZERO", + win32.EXCEPTION_INT_OVERFLOW: "EXCEPTION_INT_OVERFLOW", + win32.EXCEPTION_INVALID_DISPOSITION: "EXCEPTION_INVALID_DISPOSITION", + win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "EXCEPTION_NONCONTINUABLE_EXCEPTION", + win32.EXCEPTION_PRIV_INSTRUCTION: "EXCEPTION_PRIV_INSTRUCTION", + win32.EXCEPTION_SINGLE_STEP: "EXCEPTION_SINGLE_STEP", + win32.EXCEPTION_STACK_OVERFLOW: "EXCEPTION_STACK_OVERFLOW", + win32.EXCEPTION_GUARD_PAGE: "EXCEPTION_GUARD_PAGE", + win32.EXCEPTION_INVALID_HANDLE: "EXCEPTION_INVALID_HANDLE", + win32.EXCEPTION_POSSIBLE_DEADLOCK: "EXCEPTION_POSSIBLE_DEADLOCK", + win32.EXCEPTION_WX86_BREAKPOINT: "EXCEPTION_WX86_BREAKPOINT", + win32.CONTROL_C_EXIT: "CONTROL_C_EXIT", + win32.DBG_CONTROL_C: "DBG_CONTROL_C", + win32.MS_VC_EXCEPTION: "MS_VC_EXCEPTION", } __exceptionDescription = { - win32.EXCEPTION_ACCESS_VIOLATION : 'Access violation', - win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED : 'Array bounds exceeded', - win32.EXCEPTION_BREAKPOINT : 'Breakpoint', - win32.EXCEPTION_DATATYPE_MISALIGNMENT : 'Datatype misalignment', - win32.EXCEPTION_FLT_DENORMAL_OPERAND : 'Float denormal operand', - win32.EXCEPTION_FLT_DIVIDE_BY_ZERO : 'Float divide by zero', - win32.EXCEPTION_FLT_INEXACT_RESULT : 'Float inexact result', - win32.EXCEPTION_FLT_INVALID_OPERATION : 'Float invalid operation', - win32.EXCEPTION_FLT_OVERFLOW : 'Float overflow', - win32.EXCEPTION_FLT_STACK_CHECK : 'Float stack check', - win32.EXCEPTION_FLT_UNDERFLOW : 'Float underflow', - win32.EXCEPTION_ILLEGAL_INSTRUCTION : 'Illegal instruction', - win32.EXCEPTION_IN_PAGE_ERROR : 'In-page error', - win32.EXCEPTION_INT_DIVIDE_BY_ZERO : 'Integer divide by zero', - win32.EXCEPTION_INT_OVERFLOW : 'Integer overflow', - win32.EXCEPTION_INVALID_DISPOSITION : 'Invalid disposition', - win32.EXCEPTION_NONCONTINUABLE_EXCEPTION : 'Noncontinuable exception', - win32.EXCEPTION_PRIV_INSTRUCTION : 'Privileged instruction', - win32.EXCEPTION_SINGLE_STEP : 'Single step event', - win32.EXCEPTION_STACK_OVERFLOW : 'Stack limits overflow', - win32.EXCEPTION_GUARD_PAGE : 'Guard page hit', - win32.EXCEPTION_INVALID_HANDLE : 'Invalid handle', - win32.EXCEPTION_POSSIBLE_DEADLOCK : 'Possible deadlock', - win32.EXCEPTION_WX86_BREAKPOINT : 'WOW64 breakpoint', - win32.CONTROL_C_EXIT : 'Control-C exit', - win32.DBG_CONTROL_C : 'Debug Control-C', - win32.MS_VC_EXCEPTION : 'Microsoft Visual C++ exception', + win32.EXCEPTION_ACCESS_VIOLATION: "Access violation", + win32.EXCEPTION_ARRAY_BOUNDS_EXCEEDED: "Array bounds exceeded", + win32.EXCEPTION_BREAKPOINT: "Breakpoint", + win32.EXCEPTION_DATATYPE_MISALIGNMENT: "Datatype misalignment", + win32.EXCEPTION_FLT_DENORMAL_OPERAND: "Float denormal operand", + win32.EXCEPTION_FLT_DIVIDE_BY_ZERO: "Float divide by zero", + win32.EXCEPTION_FLT_INEXACT_RESULT: "Float inexact result", + win32.EXCEPTION_FLT_INVALID_OPERATION: "Float invalid operation", + win32.EXCEPTION_FLT_OVERFLOW: "Float overflow", + win32.EXCEPTION_FLT_STACK_CHECK: "Float stack check", + win32.EXCEPTION_FLT_UNDERFLOW: "Float underflow", + win32.EXCEPTION_ILLEGAL_INSTRUCTION: "Illegal instruction", + win32.EXCEPTION_IN_PAGE_ERROR: "In-page error", + win32.EXCEPTION_INT_DIVIDE_BY_ZERO: "Integer divide by zero", + win32.EXCEPTION_INT_OVERFLOW: "Integer overflow", + win32.EXCEPTION_INVALID_DISPOSITION: "Invalid disposition", + win32.EXCEPTION_NONCONTINUABLE_EXCEPTION: "Noncontinuable exception", + win32.EXCEPTION_PRIV_INSTRUCTION: "Privileged instruction", + win32.EXCEPTION_SINGLE_STEP: "Single step event", + win32.EXCEPTION_STACK_OVERFLOW: "Stack limits overflow", + win32.EXCEPTION_GUARD_PAGE: "Guard page hit", + win32.EXCEPTION_INVALID_HANDLE: "Invalid handle", + win32.EXCEPTION_POSSIBLE_DEADLOCK: "Possible deadlock", + win32.EXCEPTION_WX86_BREAKPOINT: "WOW64 breakpoint", + win32.CONTROL_C_EXIT: "Control-C exit", + win32.DBG_CONTROL_C: "Debug Control-C", + win32.MS_VC_EXCEPTION: "Microsoft Visual C++ exception", } @property def eventMethod(self): - return self.__exceptionMethod.get( - self.get_exception_code(), 'unknown_exception') + return self.__exceptionMethod.get(self.get_exception_code(), "unknown_exception") def get_exception_name(self): """ @@ -434,7 +434,7 @@ def get_exception_name(self): @return: Name of the exception as defined by the Win32 API. """ code = self.get_exception_code() - unk = HexDump.integer(code) + unk = HexDump.integer(code) return self.__exceptionName.get(code, unk) def get_exception_description(self): @@ -446,11 +446,10 @@ def get_exception_description(self): description = self.__exceptionDescription.get(code, None) if description is None: try: - description = 'Exception code %s (%s)' - description = description % (HexDump.integer(code), - ctypes.FormatError(code)) + description = "Exception code %s (%s)" + description = description % (HexDump.integer(code), ctypes.FormatError(code)) except OverflowError: - description = 'Exception code %s' % HexDump.integer(code) + description = "Exception code %s" % HexDump.integer(code) return description def is_first_chance(self): @@ -478,8 +477,7 @@ def is_noncontinuable(self): Attempting to continue a noncontinuable exception results in an EXCEPTION_NONCONTINUABLE_EXCEPTION exception to be raised. """ - return bool( self.raw.u.Exception.ExceptionRecord.ExceptionFlags & \ - win32.EXCEPTION_NONCONTINUABLE ) + return bool(self.raw.u.Exception.ExceptionRecord.ExceptionFlags & win32.EXCEPTION_NONCONTINUABLE) def is_continuable(self): """ @@ -570,8 +568,7 @@ def get_fault_type(self): @raise NotImplementedError: Wrong kind of exception. """ - if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, - win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE): + if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE): msg = "This method is not meaningful for %s." raise NotImplementedError(msg % self.get_exception_name()) return self.get_exception_information(0) @@ -586,8 +583,7 @@ def get_fault_address(self): @raise NotImplementedError: Wrong kind of exception. """ - if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, - win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE): + if self.get_exception_code() not in (win32.EXCEPTION_ACCESS_VIOLATION, win32.EXCEPTION_IN_PAGE_ERROR, win32.EXCEPTION_GUARD_PAGE): msg = "This method is not meaningful for %s." raise NotImplementedError(msg % self.get_exception_name()) return self.get_exception_information(1) @@ -603,8 +599,7 @@ def get_ntstatus_code(self): @raise NotImplementedError: Not an in-page memory error. """ if self.get_exception_code() != win32.EXCEPTION_IN_PAGE_ERROR: - msg = "This method is only meaningful "\ - "for in-page memory error exceptions." + msg = "This method is only meaningful " "for in-page memory error exceptions." raise NotImplementedError(msg) return self.get_exception_information(2) @@ -665,37 +660,39 @@ def get_nested_exceptions(self): # The list always begins with ourselves. # Just put a reference to "self" as the first element, # and start looping from the second exception record. - nested = [ self ] + nested = [self] raw = self.raw dwDebugEventCode = raw.dwDebugEventCode - dwProcessId = raw.dwProcessId - dwThreadId = raw.dwThreadId - dwFirstChance = raw.u.Exception.dwFirstChance - record = raw.u.Exception.ExceptionRecord + dwProcessId = raw.dwProcessId + dwThreadId = raw.dwThreadId + dwFirstChance = raw.u.Exception.dwFirstChance + record = raw.u.Exception.ExceptionRecord while True: record = record.ExceptionRecord if not record: break raw = win32.DEBUG_EVENT() - raw.dwDebugEventCode = dwDebugEventCode - raw.dwProcessId = dwProcessId - raw.dwThreadId = dwThreadId + raw.dwDebugEventCode = dwDebugEventCode + raw.dwProcessId = dwProcessId + raw.dwThreadId = dwThreadId raw.u.Exception.ExceptionRecord = record - raw.u.Exception.dwFirstChance = dwFirstChance + raw.u.Exception.dwFirstChance = dwFirstChance event = EventFactory.get(self.debug, raw) nested.append(event) return nested -#============================================================================== -class CreateThreadEvent (Event): +# ============================================================================== + + +class CreateThreadEvent(Event): """ Thread creation event. """ - eventMethod = 'create_thread' - eventName = 'Thread creation event' - eventDescription = 'A new thread has started.' + eventMethod = "create_thread" + eventName = "Thread creation event" + eventDescription = "A new thread has started." def get_thread_handle(self): """ @@ -731,16 +728,18 @@ def get_start_address(self): """ return self.raw.u.CreateThread.lpStartAddress -#============================================================================== -class CreateProcessEvent (Event): +# ============================================================================== + + +class CreateProcessEvent(Event): """ Process creation event. """ - eventMethod = 'create_process' - eventName = 'Process creation event' - eventDescription = 'A new process has started.' + eventMethod = "create_process" + eventName = "Process creation event" + eventDescription = "A new process has started." def get_file_handle(self): """ @@ -825,8 +824,8 @@ def get_debug_info(self): @rtype: str @return: Debugging information. """ - raw = self.raw.u.CreateProcessInfo - ptr = raw.lpBaseOfImage + raw.dwDebugInfoFileOffset + raw = self.raw.u.CreateProcessInfo + ptr = raw.lpBaseOfImage + raw.dwDebugInfoFileOffset size = raw.nDebugInfoSize data = self.get_process().peek(ptr, size) if len(data) == size: @@ -847,16 +846,15 @@ def get_filename(self): if hFile: szFilename = hFile.get_filename() if not szFilename: - # Try to get it from CREATE_PROCESS_DEBUG_INFO.lpImageName # It's NULL or *NULL most of the times, see MSDN: # http://msdn.microsoft.com/en-us/library/ms679286(VS.85).aspx aProcess = self.get_process() lpRemoteFilenamePtr = self.raw.u.CreateProcessInfo.lpImageName if lpRemoteFilenamePtr: - lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr) - fUnicode = bool( self.raw.u.CreateProcessInfo.fUnicode ) - szFilename = aProcess.peek_string(lpFilename, fUnicode) + lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr) + fUnicode = bool(self.raw.u.CreateProcessInfo.fUnicode) + szFilename = aProcess.peek_string(lpFilename, fUnicode) # XXX TODO # Sometimes the filename is relative (ntdll.dll, kernel32.dll). @@ -881,18 +879,20 @@ def get_module(self): @rtype: L{Module} @return: Main module of the process. """ - return self.get_process().get_module( self.get_module_base() ) + return self.get_process().get_module(self.get_module_base()) + -#============================================================================== +# ============================================================================== -class ExitThreadEvent (Event): + +class ExitThreadEvent(Event): """ Thread termination event. """ - eventMethod = 'exit_thread' - eventName = 'Thread termination event' - eventDescription = 'A thread has finished executing.' + eventMethod = "exit_thread" + eventName = "Thread termination event" + eventDescription = "A thread has finished executing." def get_exit_code(self): """ @@ -901,16 +901,18 @@ def get_exit_code(self): """ return self.raw.u.ExitThread.dwExitCode -#============================================================================== -class ExitProcessEvent (Event): +# ============================================================================== + + +class ExitProcessEvent(Event): """ Process termination event. """ - eventMethod = 'exit_process' - eventName = 'Process termination event' - eventDescription = 'A process has finished executing.' + eventMethod = "exit_process" + eventName = "Process termination event" + eventDescription = "A process has finished executing." def get_exit_code(self): """ @@ -948,16 +950,18 @@ def get_module(self): """ return self.get_process().get_main_module() -#============================================================================== -class LoadDLLEvent (Event): +# ============================================================================== + + +class LoadDLLEvent(Event): """ Module load event. """ - eventMethod = 'load_dll' - eventName = 'Module load event' - eventDescription = 'A new DLL library was loaded by the debugee.' + eventMethod = "load_dll" + eventName = "Module load event" + eventDescription = "A new DLL library was loaded by the debugee." def get_module_base(self): """ @@ -972,16 +976,13 @@ def get_module(self): @return: Module object for the newly loaded DLL. """ lpBaseOfDll = self.get_module_base() - aProcess = self.get_process() + aProcess = self.get_process() if aProcess.has_module(lpBaseOfDll): aModule = aProcess.get_module(lpBaseOfDll) else: # XXX HACK # For some reason the module object is missing, so make a new one. - aModule = Module(lpBaseOfDll, - hFile = self.get_file_handle(), - fileName = self.get_filename(), - process = aProcess) + aModule = Module(lpBaseOfDll, hFile=self.get_file_handle(), fileName=self.get_filename(), process=aProcess) aProcess._add_module(aModule) return aModule @@ -1020,9 +1021,9 @@ def get_filename(self): aProcess = self.get_process() lpRemoteFilenamePtr = self.raw.u.LoadDll.lpImageName if lpRemoteFilenamePtr: - lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr) - fUnicode = bool( self.raw.u.LoadDll.fUnicode ) - szFilename = aProcess.peek_string(lpFilename, fUnicode) + lpFilename = aProcess.peek_uint(lpRemoteFilenamePtr) + fUnicode = bool(self.raw.u.LoadDll.fUnicode) + szFilename = aProcess.peek_string(lpFilename, fUnicode) if not szFilename: szFilename = None @@ -1035,16 +1036,18 @@ def get_filename(self): # Return the filename, or None on error. return szFilename -#============================================================================== -class UnloadDLLEvent (Event): +# ============================================================================== + + +class UnloadDLLEvent(Event): """ Module unload event. """ - eventMethod = 'unload_dll' - eventName = 'Module unload event' - eventDescription = 'A DLL library was unloaded by the debugee.' + eventMethod = "unload_dll" + eventName = "Module unload event" + eventDescription = "A DLL library was unloaded by the debugee." def get_module_base(self): """ @@ -1059,11 +1062,11 @@ def get_module(self): @return: Module object for the recently unloaded DLL. """ lpBaseOfDll = self.get_module_base() - aProcess = self.get_process() + aProcess = self.get_process() if aProcess.has_module(lpBaseOfDll): aModule = aProcess.get_module(lpBaseOfDll) else: - aModule = Module(lpBaseOfDll, process = aProcess) + aModule = Module(lpBaseOfDll, process=aProcess) aProcess._add_module(aModule) return aModule @@ -1086,16 +1089,18 @@ def get_filename(self): """ return self.get_module().get_filename() -#============================================================================== -class OutputDebugStringEvent (Event): +# ============================================================================== + + +class OutputDebugStringEvent(Event): """ Debug string output event. """ - eventMethod = 'output_string' - eventName = 'Debug string output event' - eventDescription = 'The debugee sent a message to the debugger.' + eventMethod = "output_string" + eventName = "Debug string output event" + eventDescription = "The debugee sent a message to the debugger." def get_debug_string(self): """ @@ -1104,21 +1109,21 @@ def get_debug_string(self): It may be ANSI or Unicode and may end with a null character. """ return self.get_process().peek_string( - self.raw.u.DebugString.lpDebugStringData, - bool( self.raw.u.DebugString.fUnicode ), - self.raw.u.DebugString.nDebugStringLength) + self.raw.u.DebugString.lpDebugStringData, bool(self.raw.u.DebugString.fUnicode), self.raw.u.DebugString.nDebugStringLength + ) -#============================================================================== -class RIPEvent (Event): +# ============================================================================== + + +class RIPEvent(Event): """ RIP event. """ - eventMethod = 'rip' - eventName = 'RIP event' - eventDescription = 'An error has occured and the process ' \ - 'can no longer be debugged.' + eventMethod = "rip" + eventName = "RIP event" + eventDescription = "An error has occured and the process " "can no longer be debugged." def get_rip_error(self): """ @@ -1138,9 +1143,11 @@ def get_rip_type(self): """ return self.raw.u.RipInfo.dwType -#============================================================================== -class EventFactory (StaticClass): +# ============================================================================== + + +class EventFactory(StaticClass): """ Factory of L{Event} objects. @@ -1154,17 +1161,17 @@ class EventFactory (StaticClass): Dictionary that maps event codes to L{Event} subclasses. """ - baseEvent = Event + baseEvent = Event eventClasses = { - win32.EXCEPTION_DEBUG_EVENT : ExceptionEvent, # 1 - win32.CREATE_THREAD_DEBUG_EVENT : CreateThreadEvent, # 2 - win32.CREATE_PROCESS_DEBUG_EVENT : CreateProcessEvent, # 3 - win32.EXIT_THREAD_DEBUG_EVENT : ExitThreadEvent, # 4 - win32.EXIT_PROCESS_DEBUG_EVENT : ExitProcessEvent, # 5 - win32.LOAD_DLL_DEBUG_EVENT : LoadDLLEvent, # 6 - win32.UNLOAD_DLL_DEBUG_EVENT : UnloadDLLEvent, # 7 - win32.OUTPUT_DEBUG_STRING_EVENT : OutputDebugStringEvent, # 8 - win32.RIP_EVENT : RIPEvent, # 9 + win32.EXCEPTION_DEBUG_EVENT: ExceptionEvent, # 1 + win32.CREATE_THREAD_DEBUG_EVENT: CreateThreadEvent, # 2 + win32.CREATE_PROCESS_DEBUG_EVENT: CreateProcessEvent, # 3 + win32.EXIT_THREAD_DEBUG_EVENT: ExitThreadEvent, # 4 + win32.EXIT_PROCESS_DEBUG_EVENT: ExitProcessEvent, # 5 + win32.LOAD_DLL_DEBUG_EVENT: LoadDLLEvent, # 6 + win32.UNLOAD_DLL_DEBUG_EVENT: UnloadDLLEvent, # 7 + win32.OUTPUT_DEBUG_STRING_EVENT: OutputDebugStringEvent, # 8 + win32.RIP_EVENT: RIPEvent, # 9 } @classmethod @@ -1183,9 +1190,11 @@ def get(cls, debug, raw): eventClass = cls.eventClasses.get(raw.dwDebugEventCode, cls.baseEvent) return eventClass(debug, raw) -#============================================================================== -class EventHandler (object): +# ============================================================================== + + +class EventHandler(object): """ Base class for debug event handlers. @@ -1360,7 +1369,7 @@ def post_LoadLibraryEx(self, event, retval): return value from the hooked function. """ -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Default (empty) API hooks dictionary. apiHooks = {} @@ -1403,9 +1412,9 @@ def __init__(self, myArgument): hook_objs = [] for proc, args in hooks: if type(args) in (int, long): - h = ApiHook(self, lib, proc, paramCount = args) + h = ApiHook(self, lib, proc, paramCount=args) else: - h = ApiHook(self, lib, proc, signature = args) + h = ApiHook(self, lib, proc, signature=args) hook_objs.append(h) apiHooks[lib] = hook_objs self.__apiHooks = apiHooks @@ -1433,7 +1442,7 @@ def __hook_dll(self, event): This method is called automatically whenever a DLL is loaded. """ debug = event.debug - pid = event.get_pid() + pid = event.get_pid() for hook_api_stub in self.__get_hooks_for_dll(event): hook_api_stub.hook(debug, pid) @@ -1444,7 +1453,7 @@ def __unhook_dll(self, event): This method is called automatically whenever a DLL is unloaded. """ debug = event.debug - pid = event.get_pid() + pid = event.get_pid() for hook_api_stub in self.__get_hooks_for_dll(event): hook_api_stub.unhook(debug, pid) @@ -1468,7 +1477,8 @@ def __call__(self, event): if method is not None: return method(event) -#============================================================================== + +# ============================================================================== # TODO # * Make it more generic by adding a few more callbacks. @@ -1476,6 +1486,7 @@ def __call__(self, event): # * This interface feels too much like an antipattern. # When apiHooks is deprecated this will have to be reviewed. + class EventSift(EventHandler): """ Event handler that allows you to use customized event handlers for each @@ -1598,9 +1609,9 @@ def __init__(self, cls, *argv, **argd): the event forwarder will be passed on to the constructor of this class as well. """ - self.cls = cls - self.argv = argv - self.argd = argd + self.cls = cls + self.argv = argv + self.argd = argd self.forward = dict() super(EventSift, self).__init__() @@ -1609,8 +1620,7 @@ class as well. def __call__(self, event): try: eventCode = event.get_event_code() - if eventCode in (win32.LOAD_DLL_DEBUG_EVENT, - win32.LOAD_DLL_DEBUG_EVENT): + if eventCode in (win32.LOAD_DLL_DEBUG_EVENT, win32.LOAD_DLL_DEBUG_EVENT): pid = event.get_pid() handler = self.forward.get(pid, None) if handler is None: @@ -1646,9 +1656,11 @@ def event(self, event): del self.forward[pid] return handler(event) -#============================================================================== -class EventDispatcher (object): +# ============================================================================== + + +class EventDispatcher(object): """ Implements debug event dispatching capabilities. @@ -1660,40 +1672,39 @@ class EventDispatcher (object): # These routines are called BEFORE the user-defined handlers. # Unknown codes are ignored. __preEventNotifyCallbackName = { - win32.CREATE_THREAD_DEBUG_EVENT : '_notify_create_thread', - win32.CREATE_PROCESS_DEBUG_EVENT : '_notify_create_process', - win32.LOAD_DLL_DEBUG_EVENT : '_notify_load_dll', + win32.CREATE_THREAD_DEBUG_EVENT: "_notify_create_thread", + win32.CREATE_PROCESS_DEBUG_EVENT: "_notify_create_process", + win32.LOAD_DLL_DEBUG_EVENT: "_notify_load_dll", } # Maps event code constants to the names of the post-notify routines. # These routines are called AFTER the user-defined handlers. # Unknown codes are ignored. __postEventNotifyCallbackName = { - win32.EXIT_THREAD_DEBUG_EVENT : '_notify_exit_thread', - win32.EXIT_PROCESS_DEBUG_EVENT : '_notify_exit_process', - win32.UNLOAD_DLL_DEBUG_EVENT : '_notify_unload_dll', - win32.RIP_EVENT : '_notify_rip', + win32.EXIT_THREAD_DEBUG_EVENT: "_notify_exit_thread", + win32.EXIT_PROCESS_DEBUG_EVENT: "_notify_exit_process", + win32.UNLOAD_DLL_DEBUG_EVENT: "_notify_unload_dll", + win32.RIP_EVENT: "_notify_rip", } # Maps exception code constants to the names of the pre-notify routines. # These routines are called BEFORE the user-defined handlers. # Unknown codes are ignored. __preExceptionNotifyCallbackName = { - win32.EXCEPTION_BREAKPOINT : '_notify_breakpoint', - win32.EXCEPTION_WX86_BREAKPOINT : '_notify_breakpoint', - win32.EXCEPTION_SINGLE_STEP : '_notify_single_step', - win32.EXCEPTION_GUARD_PAGE : '_notify_guard_page', - win32.DBG_CONTROL_C : '_notify_debug_control_c', - win32.MS_VC_EXCEPTION : '_notify_ms_vc_exception', + win32.EXCEPTION_BREAKPOINT: "_notify_breakpoint", + win32.EXCEPTION_WX86_BREAKPOINT: "_notify_breakpoint", + win32.EXCEPTION_SINGLE_STEP: "_notify_single_step", + win32.EXCEPTION_GUARD_PAGE: "_notify_guard_page", + win32.DBG_CONTROL_C: "_notify_debug_control_c", + win32.MS_VC_EXCEPTION: "_notify_ms_vc_exception", } # Maps exception code constants to the names of the post-notify routines. # These routines are called AFTER the user-defined handlers. # Unknown codes are ignored. - __postExceptionNotifyCallbackName = { - } + __postExceptionNotifyCallbackName = {} - def __init__(self, eventHandler = None): + def __init__(self, eventHandler=None): """ Event dispatcher. @@ -1747,9 +1758,9 @@ def set_event_handler(self, eventHandler): wrong_type = False if wrong_type: classname = str(eventHandler) - msg = "Event handler must be an instance of class %s" + msg = "Event handler must be an instance of class %s" msg += "rather than the %s class itself. (Missing parens?)" - msg = msg % (classname, classname) + msg = msg % (classname, classname) raise TypeError(msg) try: previous = self.__eventHandler @@ -1780,9 +1791,9 @@ def get_handler_method(eventHandler, event, fallback=None): Returns C{None} if no such method is defined. """ eventCode = event.get_event_code() - method = getattr(eventHandler, 'event', fallback) + method = getattr(eventHandler, "event", fallback) if eventCode == win32.EXCEPTION_DEBUG_EVENT: - method = getattr(eventHandler, 'exception', method) + method = getattr(eventHandler, "exception", method) method = getattr(eventHandler, event.eventMethod, method) return method @@ -1804,23 +1815,21 @@ def dispatch(self, event): @raise WindowsError: Raises an exception on error. """ - returnValue = None + returnValue = None bCallHandler = True - pre_handler = None + pre_handler = None post_handler = None - eventCode = event.get_event_code() + eventCode = event.get_event_code() # Get the pre and post notification methods for exceptions. # If not found, the following steps take care of that. if eventCode == win32.EXCEPTION_DEBUG_EVENT: exceptionCode = event.get_exception_code() - pre_name = self.__preExceptionNotifyCallbackName.get( - exceptionCode, None) - post_name = self.__postExceptionNotifyCallbackName.get( - exceptionCode, None) - if pre_name is not None: - pre_handler = getattr(self, pre_name, None) - if post_name is not None: + pre_name = self.__preExceptionNotifyCallbackName.get(exceptionCode, None) + post_name = self.__postExceptionNotifyCallbackName.get(exceptionCode, None) + if pre_name is not None: + pre_handler = getattr(self, pre_name, None) + if post_name is not None: post_handler = getattr(self, post_name, None) # Get the pre notification method for all other events. @@ -1828,7 +1837,7 @@ def dispatch(self, event): # for this exception code. if pre_handler is None: pre_name = self.__preEventNotifyCallbackName.get(eventCode, None) - if pre_name is not None: + if pre_name is not None: pre_handler = getattr(self, pre_name, pre_handler) # Get the post notification method for all other events. @@ -1836,7 +1845,7 @@ def dispatch(self, event): # for this exception code. if post_handler is None: post_name = self.__postEventNotifyCallbackName.get(eventCode, None) - if post_name is not None: + if post_name is not None: post_handler = getattr(self, post_name, post_handler) # Call the pre-notify method only if it was defined. @@ -1852,8 +1861,7 @@ def dispatch(self, event): returnValue = self.__eventHandler(event) except Exception: e = sys.exc_info()[1] - msg = ("Event handler pre-callback %r" - " raised an exception: %s") + msg = "Event handler pre-callback %r" " raised an exception: %s" msg = msg % (self.__eventHandler, traceback.format_exc(e)) warnings.warn(msg, EventCallbackWarning) returnValue = None diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py index b9d842f6f..bf8253f72 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/interactive.py @@ -46,7 +46,7 @@ __revision__ = "$Id$" -__all__ = [ 'ConsoleDebugger', 'CmdError' ] +__all__ = ["ConsoleDebugger", "CmdError"] # TODO document this module with docstrings. # TODO command to set a last error breakpoint. @@ -72,10 +72,10 @@ # lazy imports readline = None -#============================================================================== +# ============================================================================== -class DummyEvent (NoEvent): +class DummyEvent(NoEvent): "Dummy event object used internally by L{ConsoleDebugger}." def get_pid(self): @@ -90,27 +90,29 @@ def get_process(self): def get_thread(self): return self._thread -#============================================================================== +# ============================================================================== -class CmdError (Exception): + +class CmdError(Exception): """ Exception raised when a command parsing error occurs. Used internally by L{ConsoleDebugger}. """ -#============================================================================== + +# ============================================================================== -class ConsoleDebugger (Cmd, EventHandler): +class ConsoleDebugger(Cmd, EventHandler): """ Interactive console debugger. @see: L{Debug.interactive} """ -#------------------------------------------------------------------------------ -# Class variables + # ------------------------------------------------------------------------------ + # Class variables # Exception to raise when an error occurs executing a command. command_error_exception = CmdError @@ -119,30 +121,34 @@ class ConsoleDebugger (Cmd, EventHandler): dwMilliseconds = 100 # History file name. - history_file = '.winappdbg_history' + history_file = ".winappdbg_history" # Confirm before quitting? confirm_quit = True # Valid plugin name characters. - valid_plugin_name_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXY' \ - 'abcdefghijklmnopqrstuvwxy' \ - '012345678' \ - '_' + valid_plugin_name_chars = "ABCDEFGHIJKLMNOPQRSTUVWXY" "abcdefghijklmnopqrstuvwxy" "012345678" "_" # Names of the registers. - segment_names = ('cs', 'ds', 'es', 'fs', 'gs') + segment_names = ("cs", "ds", "es", "fs", "gs") register_alias_64_to_32 = { - 'eax':'Rax', 'ebx':'Rbx', 'ecx':'Rcx', 'edx':'Rdx', - 'eip':'Rip', 'ebp':'Rbp', 'esp':'Rsp', 'esi':'Rsi', 'edi':'Rdi' + "eax": "Rax", + "ebx": "Rbx", + "ecx": "Rcx", + "edx": "Rdx", + "eip": "Rip", + "ebp": "Rbp", + "esp": "Rsp", + "esi": "Rsi", + "edi": "Rdi", } - register_alias_64_to_16 = { 'ax':'Rax', 'bx':'Rbx', 'cx':'Rcx', 'dx':'Rdx' } - register_alias_64_to_8_low = { 'al':'Rax', 'bl':'Rbx', 'cl':'Rcx', 'dl':'Rdx' } - register_alias_64_to_8_high = { 'ah':'Rax', 'bh':'Rbx', 'ch':'Rcx', 'dh':'Rdx' } - register_alias_32_to_16 = { 'ax':'Eax', 'bx':'Ebx', 'cx':'Ecx', 'dx':'Edx' } - register_alias_32_to_8_low = { 'al':'Eax', 'bl':'Ebx', 'cl':'Ecx', 'dl':'Edx' } - register_alias_32_to_8_high = { 'ah':'Eax', 'bh':'Ebx', 'ch':'Ecx', 'dh':'Edx' } + register_alias_64_to_16 = {"ax": "Rax", "bx": "Rbx", "cx": "Rcx", "dx": "Rdx"} + register_alias_64_to_8_low = {"al": "Rax", "bl": "Rbx", "cl": "Rcx", "dl": "Rdx"} + register_alias_64_to_8_high = {"ah": "Rax", "bh": "Rbx", "ch": "Rcx", "dh": "Rdx"} + register_alias_32_to_16 = {"ax": "Eax", "bx": "Ebx", "cx": "Ecx", "dx": "Edx"} + register_alias_32_to_8_low = {"al": "Eax", "bl": "Ebx", "cl": "Ecx", "dl": "Edx"} + register_alias_32_to_8_high = {"ah": "Eax", "bh": "Ebx", "ch": "Ecx", "dh": "Edx"} register_aliases_full_32 = list(segment_names) register_aliases_full_32.extend(compat.iterkeys(register_alias_32_to_16)) @@ -159,18 +165,46 @@ class ConsoleDebugger (Cmd, EventHandler): # Names of the control flow instructions. jump_instructions = ( - 'jmp', 'jecxz', 'jcxz', - 'ja', 'jnbe', 'jae', 'jnb', 'jb', 'jnae', 'jbe', 'jna', 'jc', 'je', - 'jz', 'jnc', 'jne', 'jnz', 'jnp', 'jpo', 'jp', 'jpe', 'jg', 'jnle', - 'jge', 'jnl', 'jl', 'jnge', 'jle', 'jng', 'jno', 'jns', 'jo', 'js' + "jmp", + "jecxz", + "jcxz", + "ja", + "jnbe", + "jae", + "jnb", + "jb", + "jnae", + "jbe", + "jna", + "jc", + "je", + "jz", + "jnc", + "jne", + "jnz", + "jnp", + "jpo", + "jp", + "jpe", + "jg", + "jnle", + "jge", + "jnl", + "jl", + "jnge", + "jle", + "jng", + "jno", + "jns", + "jo", + "js", ) - call_instructions = ('call', 'ret', 'retn') - loop_instructions = ('loop', 'loopz', 'loopnz', 'loope', 'loopne') - control_flow_instructions = call_instructions + loop_instructions + \ - jump_instructions + call_instructions = ("call", "ret", "retn") + loop_instructions = ("loop", "loopz", "loopnz", "loope", "loopne") + control_flow_instructions = call_instructions + loop_instructions + jump_instructions -#------------------------------------------------------------------------------ -# Instance variables + # ------------------------------------------------------------------------------ + # Instance variables def __init__(self): """ @@ -190,12 +224,11 @@ def __init__(self): # Last executed command. self.__lastcmd = "" -#------------------------------------------------------------------------------ -# Debugger + # ------------------------------------------------------------------------------ + # Debugger # Use this Debug object. def start_using_debugger(self, debug): - # Clear the previous Debug object. self.stop_using_debugger() @@ -208,7 +241,7 @@ def start_using_debugger(self, debug): # Stop using the Debug object given by start_using_debugger(). # Circular references must be removed, or the destructors never get called. def stop_using_debugger(self): - if hasattr(self, 'debug'): + if hasattr(self, "debug"): debug = self.debug debug.set_event_handler(self.prevHandler) del self.prevHandler @@ -234,21 +267,20 @@ def set_fake_last_event(self, process): if self.lastEvent is None: self.debug.lastEvent = DummyEvent(self.debug) self.debug.lastEvent._process = process - self.debug.lastEvent._thread = process.get_thread( - process.get_thread_ids()[0]) + self.debug.lastEvent._thread = process.get_thread(process.get_thread_ids()[0]) self.debug.lastEvent._pid = process.get_pid() self.debug.lastEvent._tid = self.lastEvent._thread.get_tid() -#------------------------------------------------------------------------------ -# Input + # ------------------------------------------------------------------------------ + # Input -# TODO -# * try to guess breakpoints when insufficient data is given -# * child Cmd instances will have to be used for other prompts, for example -# when assembling or editing memory - it may also be a good idea to think -# if it's possible to make the main Cmd instance also a child, instead of -# the debugger itself - probably the same goes for the EventHandler, maybe -# it can be used as a contained object rather than a parent class. + # TODO + # * try to guess breakpoints when insufficient data is given + # * child Cmd instances will have to be used for other prompts, for example + # when assembling or editing memory - it may also be a good idea to think + # if it's possible to make the main Cmd instance also a child, instead of + # the debugger itself - probably the same goes for the EventHandler, maybe + # it can be used as a contained object rather than a parent class. # Join a token list into an argument string. def join_tokens(self, token_list): @@ -272,7 +304,7 @@ def input_thread(self, token): msg = "more than one thread with that name:\n" for tid in targets: msg += "\t%d\n" % tid - msg = msg[:-len("\n")] + msg = msg[: -len("\n")] raise CmdError(msg) return targets[0] @@ -307,7 +339,7 @@ def input_process(self, token): msg = "more than one process with that name:\n" for pid in targets: msg += "\t%d\n" % pid - msg = msg[:-len("\n")] + msg = msg[: -len("\n")] raise CmdError(msg) return targets[0] @@ -325,7 +357,7 @@ def input_process_list(self, token_list): found = system.find_processes_by_filename(token) if not found: raise CmdError("process not found (%s)" % token) - for (process, _) in found: + for process, _ in found: targets.add(process.get_pid()) targets = list(targets) targets.sort() @@ -339,7 +371,7 @@ def input_command_line(self, command_line): fname = argv[0] if not os.path.exists(fname): try: - fname, _ = win32.SearchPath(None, fname, '.exe') + fname, _ = win32.SearchPath(None, fname, ".exe") except WindowsError: raise CmdError("file not found: %s" % fname) argv[0] = fname @@ -355,7 +387,8 @@ def input_hexadecimal_integer(self, token): # It can be in any supported format. def input_integer(self, token): return HexInput.integer(token) -# # input_integer = input_hexadecimal_integer + + # # input_integer = input_hexadecimal_integer # Token is an address. # The address can be a integer, a label or a register. @@ -401,9 +434,9 @@ def input_address_range(self, token_list, pid=None, tid=None): raise CmdError("bad address range: %s %s" % (token_1, token_2)) elif len(token_list) == 1: token = token_list[0] - if '-' in token: + if "-" in token: try: - token_1, token_2 = token.split('-') + token_1, token_2 = token.split("-") except Exception: raise CmdError("bad address range: %s" % token) address = self.input_address(token_1, pid, tid) @@ -416,18 +449,18 @@ def input_address_range(self, token_list, pid=None, tid=None): # XXX TODO # Support non-integer registers here. def is_register(self, token): - if win32.arch == 'i386': + if win32.arch == "i386": if token in self.register_aliases_full_32: return True token = token.title() - for (name, typ) in win32.CONTEXT._fields_: + for name, typ in win32.CONTEXT._fields_: if name == token: return win32.sizeof(typ) == win32.sizeof(win32.DWORD) - elif win32.arch == 'amd64': + elif win32.arch == "amd64": if token in self.register_aliases_full_64: return True token = token.title() - for (name, typ) in win32.CONTEXT._fields_: + for name, typ in win32.CONTEXT._fields_: if name == token: return win32.sizeof(typ) == win32.sizeof(win32.DWORD64) return False @@ -449,10 +482,9 @@ def input_register(self, token, tid=None): if title in ctx: return ctx.get(title) # eax -> Eax - if ctx.arch == 'i386': - + if ctx.arch == "i386": if token in self.segment_names: - return ctx.get('Seg%s' % title) # cs -> SegCs + return ctx.get("Seg%s" % title) # cs -> SegCs if token in self.register_alias_32_to_16: return ctx.get(self.register_alias_32_to_16[token]) & 0xFFFF @@ -463,10 +495,9 @@ def input_register(self, token, tid=None): if token in self.register_alias_32_to_8_high: return (ctx.get(self.register_alias_32_to_8_high[token]) & 0xFF00) >> 8 - elif ctx.arch == 'amd64': - + elif ctx.arch == "amd64": if token in self.segment_names: - return ctx.get('Seg%s' % title) # cs -> SegCs + return ctx.get("Seg%s" % title) # cs -> SegCs if token in self.register_alias_64_to_32: return ctx.get(self.register_alias_64_to_32[token]) & 0xFFFFFFFF @@ -506,8 +537,8 @@ def input_display(self, token_list, default_size=64): self.default_display_target = next_address return pid, tid, address, size -#------------------------------------------------------------------------------ -# Output + # ------------------------------------------------------------------------------ + # Output # Tell the user a module was loaded. def print_module_load(self, event): @@ -515,7 +546,7 @@ def print_module_load(self, event): base = mod.get_base() name = mod.get_filename() if not name: - name = '' + name = "" msg = "Loaded module (%s) %s" msg = msg % (HexDump.address(base), name) print(msg) @@ -526,7 +557,7 @@ def print_module_unload(self, event): base = mod.get_base() name = mod.get_filename() if not name: - name = '' + name = "" msg = "Unloaded module (%s) %s" msg = msg % (HexDump.address(base), name) print(msg) @@ -577,10 +608,10 @@ def print_event(self, event): name = event.get_event_name() desc = event.get_event_description() if code in desc: - print('') + print("") print("%s: %s" % (name, desc)) else: - print('') + print("") print("%s (%s): %s" % (name, code, desc)) self.print_event_location(event) @@ -590,14 +621,14 @@ def print_exception(self, event): code = HexDump.integer(event.get_exception_code()) desc = event.get_exception_description() if event.is_first_chance(): - chance = 'first' + chance = "first" else: - chance = 'second' + chance = "second" if code in desc: msg = "%s at address %s (%s chance)" % (desc, address, chance) else: msg = "%s (%s) at address %s (%s chance)" % (desc, code, address, chance) - print('') + print("") print(msg) self.print_event_location(event) @@ -638,8 +669,10 @@ def print_current_location(self, process=None, thread=None, pc=None): disasm = None except NotImplementedError: disasm = None - print('') - print(CrashDump.dump_registers(ctx),) + print("") + print( + CrashDump.dump_registers(ctx), + ) print("%s:" % label) if disasm: print(CrashDump.dump_code_line(disasm[0], pc, bShowDump=True)) @@ -649,9 +682,9 @@ def print_current_location(self, process=None, thread=None, pc=None): except Exception: data = None if data: - print('%s: %s' % (HexDump.address(pc), HexDump.hexblock_byte(data))) + print("%s: %s" % (HexDump.address(pc), HexDump.hexblock_byte(data))) else: - print('%s: ???' % HexDump.address(pc)) + print("%s: ???" % HexDump.address(pc)) # Display memory contents using a given method. def print_memory_display(self, arg, method): @@ -663,10 +696,12 @@ def print_memory_display(self, arg, method): data = self.read_memory(address, size, pid) if data: print("%s:" % label) - print(method(data, address),) + print( + method(data, address), + ) -#------------------------------------------------------------------------------ -# Debugging + # ------------------------------------------------------------------------------ + # Debugging # Get the process ID from the prefix or the last event. def get_process_id_from_prefix(self): @@ -783,7 +818,6 @@ def write_memory(self, address, data, pid=None): # Change a register value. def change_register(self, register, value, tid=None): - # Get the thread. if tid is None: if self.lastEvent is None: @@ -806,7 +840,6 @@ def change_register(self, register, value, tid=None): # The finally clause ensures the thread is resumed before returning. thread.suspend() try: - # Get the current context. ctx = thread.get_context() @@ -819,7 +852,7 @@ def change_register(self, register, value, tid=None): # Segment (16 bit) registers. if register in self.segment_names: - register = 'Seg%s' % register.title() # cs -> SegCs + register = "Seg%s" % register.title() # cs -> SegCs value = value & 0x0000FFFF # Integer 16 bits registers. @@ -866,7 +899,7 @@ def find_in_memory(self, query, process): p = data.find(query) while p >= 0: q = p + len(query) - d = data[ p: min(q, p + width) ] + d = data[p : min(q, p + width)] h = HexDump.hexline(d, width=width) a = HexDump.address(address + p) print("%s: %s" % (a, h)) @@ -896,8 +929,8 @@ def kill_thread(self, tid): except Exception: print("Error trying to kill thread (%d)" % tid) -#------------------------------------------------------------------------------ -# Command prompt input + # ------------------------------------------------------------------------------ + # Command prompt input # Prompt the user for commands. def prompt_user(self): @@ -910,14 +943,15 @@ def prompt_user(self): print("*** Error: %s" % str(e)) except Exception: traceback.print_exc() -# # self.debuggerExit = True + + # # self.debuggerExit = True # Prompt the user for a YES/NO kind of question. def ask_user(self, msg, prompt="Are you sure? (y/N): "): print(msg) answer = raw_input(prompt) answer = answer.strip()[:1].lower() - return answer == 'y' + return answer == "y" # Autocomplete the given command when not ambiguous. # Convert it to lowercase (so commands are seen as case insensitive). @@ -936,42 +970,41 @@ def autocomplete(self, cmd): def get_help(self, commands): msg = set() for name in commands: - if name != 'do_help': + if name != "do_help": try: - doc = getattr(self, name).__doc__.split('\n') + doc = getattr(self, name).__doc__.split("\n") except Exception: - return ("No help available when Python" - " is run with the -OO switch.") + return "No help available when Python" " is run with the -OO switch." for x in doc: x = x.strip() if x: - msg.add(' %s' % x) + msg.add(" %s" % x) msg = list(msg) msg.sort() - msg = '\n'.join(msg) + msg = "\n".join(msg) return msg # Parse the prefix and remove it from the command line. def split_prefix(self, line): prefix = None - if line.startswith('~'): - pos = line.find(' ') + if line.startswith("~"): + pos = line.find(" ") if pos == 1: - pos = line.find(' ', pos + 1) + pos = line.find(" ", pos + 1) if not pos < 0: - prefix = line[ 1: pos ].strip() - line = line[ pos: ].strip() + prefix = line[1:pos].strip() + line = line[pos:].strip() return prefix, line -#------------------------------------------------------------------------------ -# Cmd() hacks + # ------------------------------------------------------------------------------ + # Cmd() hacks # Header for help page. - doc_header = 'Available commands (type help * or help )' + doc_header = "Available commands (type help * or help )" -# # # Read and write directly to stdin and stdout. -# # # This prevents the use of raw_input and print. -# # use_rawinput = False + # # # Read and write directly to stdin and stdout. + # # # This prevents the use of raw_input and print. + # # use_rawinput = False @property def prompt(self): @@ -979,15 +1012,15 @@ def prompt(self): pid = self.lastEvent.get_pid() tid = self.lastEvent.get_tid() if self.debug.is_debugee(pid): -# # return '~%d(%d)> ' % (tid, pid) - return '%d:%d> ' % (pid, tid) - return '> ' + # # return '~%d(%d)> ' % (tid, pid) + return "%d:%d> " % (pid, tid) + return "> " # Return a sorted list of method names. # Only returns the methods that implement commands. def get_names(self): names = Cmd.get_names(self) - names = [ x for x in set(names) if x.startswith('do_') ] + names = [x for x in set(names) if x.startswith("do_")] names.sort() return names @@ -998,23 +1031,23 @@ def parseline(self, line): self.cmdprefix, line = self.split_prefix(line) line = line.strip() if line: - if line[0] == '.': - line = 'plugin ' + line[1:] - elif line[0] == '#': - line = 'python ' + line[1:] + if line[0] == ".": + line = "plugin " + line[1:] + elif line[0] == "#": + line = "python " + line[1:] cmd, arg, line = Cmd.parseline(self, line) if cmd: cmd = self.autocomplete(cmd) return cmd, arg, line -# # # Don't repeat the last executed command. -# # def emptyline(self): -# # pass + # # # Don't repeat the last executed command. + # # def emptyline(self): + # # pass # Reset the defaults for some commands. def preloop(self): - self.default_disasm_target = 'eip' - self.default_display_target = 'eip' + self.default_disasm_target = "eip" + self.default_display_target = "eip" self.last_display_command = self.do_db # Put the prefix back in the command line. @@ -1023,7 +1056,7 @@ def get_lastcmd(self): def set_lastcmd(self, lastcmd): if self.cmdprefix: - lastcmd = '~%s %s' % (self.cmdprefix, lastcmd) + lastcmd = "~%s %s" % (self.cmdprefix, lastcmd) self.__lastcmd = lastcmd lastcmd = property(get_lastcmd, set_lastcmd) @@ -1032,8 +1065,8 @@ def set_lastcmd(self, lastcmd): def postcmd(self, stop, line): return stop or self.debuggerExit -#------------------------------------------------------------------------------ -# Commands + # ------------------------------------------------------------------------------ + # Commands # Each command contains a docstring with it's help text. # The help text consist of independent text lines, @@ -1055,23 +1088,23 @@ def do_help(self, arg): """ if not arg: Cmd.do_help(self, arg) - elif arg in ('?', 'help'): + elif arg in ("?", "help"): # An easter egg :) print(" Help! I need somebody...") print(" Help! Not just anybody...") print(" Help! You know, I need someone...") print(" Heeelp!") else: - if arg == '*': + if arg == "*": commands = self.get_names() - commands = [ x for x in commands if x.startswith('do_') ] + commands = [x for x in commands if x.startswith("do_")] else: commands = set() - for x in arg.split(' '): + for x in arg.split(" "): x = x.strip() if x: for n in self.completenames(x): - commands.add('do_%s' % n) + commands.add("do_%s" % n) commands = list(commands) commands.sort() print(self.get_help(commands)) @@ -1090,12 +1123,12 @@ def do_shell(self, arg): # If not found, it's usually OK to just use the filename, # since cmd.exe is one of those "magic" programs that # can be automatically found by CreateProcess. - shell = os.getenv('ComSpec', 'cmd.exe') + shell = os.getenv("ComSpec", "cmd.exe") # When given a command, run it and return. # When no command is given, spawn a shell. if arg: - arg = '%s /c %s' % (shell, arg) + arg = "%s /c %s" % (shell, arg) else: arg = shell process = self.debug.system.start_process(arg, bConsole=True) @@ -1104,7 +1137,6 @@ def do_shell(self, arg): # This hack fixes a bug in Python, the interpreter console is closing the # stdin pipe when calling the exit() function (Ctrl+Z seems to work fine). class _PythonExit(object): - def __repr__(self): return "Use exit() or Ctrl-Z plus Return to exit" @@ -1117,21 +1149,23 @@ def __call__(self): # module already imported. Also the console banner is improved. def _spawn_python_shell(self, arg): import winappdbg - banner = ('Python %s on %s\nType "help", "copyright", ' - '"credits" or "license" for more information.\n') + + banner = 'Python %s on %s\nType "help", "copyright", ' '"credits" or "license" for more information.\n' platform = winappdbg.version.lower() - platform = 'WinAppDbg %s' % platform + platform = "WinAppDbg %s" % platform banner = banner % (sys.version, platform) local = {} local.update(__builtins__) - local.update({ - '__name__': '__console__', - '__doc__': None, - 'exit': self._python_exit, - 'self': self, - 'arg': arg, - 'winappdbg': winappdbg, - }) + local.update( + { + "__name__": "__console__", + "__doc__": None, + "exit": self._python_exit, + "self": self, + "arg": arg, + "winappdbg": winappdbg, + } + ) try: code.interact(banner=banner, local=local) except SystemExit: @@ -1161,8 +1195,7 @@ def do_python(self, arg): self._spawn_python_shell(arg) except Exception: e = sys.exc_info()[1] - raise CmdError( - "unhandled exception when running Python console: %s" % e) + raise CmdError("unhandled exception when running Python console: %s" % e) def do_quit(self, arg): """ @@ -1219,7 +1252,7 @@ def do_detach(self, arg): if not targets: if self.lastEvent is None: raise CmdError("no current process set") - targets = [ self.lastEvent.get_pid() ] + targets = [self.lastEvent.get_pid()] for pid in targets: try: debug.detach(pid) @@ -1235,9 +1268,7 @@ def do_windowed(self, arg): raise CmdError("prefix not allowed") cmdline = self.input_command_line(arg) try: - process = self.debug.execl(arg, - bConsole=False, - bFollow=self.options.follow) + process = self.debug.execl(arg, bConsole=False, bFollow=self.options.follow) print("Spawned process (%d)" % process.get_pid()) except Exception: raise CmdError("can't execute") @@ -1251,9 +1282,7 @@ def do_console(self, arg): raise CmdError("prefix not allowed") cmdline = self.input_command_line(arg) try: - process = self.debug.execl(arg, - bConsole=True, - bFollow=self.options.follow) + process = self.debug.execl(arg, bConsole=True, bFollow=self.options.follow) print("Spawned process (%d)" % process.get_pid()) except Exception: raise CmdError("can't execute") @@ -1326,7 +1355,7 @@ def do_processlist(self, arg): if pid_list: print("Process ID File name") for pid in pid_list: - if pid == 0: + if pid == 0: filename = "System Idle Process" elif pid == 4: filename = "System" @@ -1373,7 +1402,7 @@ def do_kill(self, arg): kill - kill the given processes and threads """ if arg: - if arg == '*': + if arg == "*": target_pids = self.debug.get_debugee_pids() target_tids = list() else: @@ -1458,7 +1487,9 @@ def do_stack(self, arg): try: stack_trace = thread.get_stack_trace_with_labels() if stack_trace: - print(CrashDump.dump_stack_trace_with_labels(stack_trace),) + print( + CrashDump.dump_stack_trace_with_labels(stack_trace), + ) else: print("No stack trace available for thread (%d)" % tid) except WindowsError: @@ -1507,12 +1538,12 @@ def do_step(self, arg): code = thread.disassemble(pc, 16)[0] size = code[1] opcode = code[2].lower() - if ' ' in opcode: - opcode = opcode[: opcode.find(' ') ] - if opcode in self.jump_instructions or opcode in ('int', 'ret', 'retn'): + if " " in opcode: + opcode = opcode[: opcode.find(" ")] + if opcode in self.jump_instructions or opcode in ("int", "ret", "retn"): return self.do_trace(arg) address = pc + size -# # print(hex(pc), hex(address), size # XXX DEBUG + # # print(hex(pc), hex(address), size # XXX DEBUG self.debug.stalk_at(pid, address) return True @@ -1571,21 +1602,21 @@ def do_ba(self, arg): access = token_list[0].lower() size = token_list[1] address = token_list[2] - if access == 'a': + if access == "a": access = debug.BP_BREAK_ON_ACCESS - elif access == 'w': + elif access == "w": access = debug.BP_BREAK_ON_WRITE - elif access == 'e': + elif access == "e": access = debug.BP_BREAK_ON_EXECUTION else: raise CmdError("bad access type: %s" % token_list[0]) - if size == '1': + if size == "1": size = debug.BP_WATCH_BYTE - elif size == '2': + elif size == "2": size = debug.BP_WATCH_WORD - elif size == '4': + elif size == "4": size = debug.BP_WATCH_DWORD - elif size == '8': + elif size == "8": size = debug.BP_WATCH_QWORD else: raise CmdError("bad breakpoint size: %s" % size) @@ -1620,7 +1651,7 @@ def do_bl(self, arg): bl [process...] - list the breakpoints for each given process """ debug = self.debug - if arg == '*': + if arg == "*": if self.cmdprefix: raise CmdError("prefix not supported") breakpoints = debug.get_debugee_pids() @@ -1631,7 +1662,7 @@ def do_bl(self, arg): if not targets: if self.lastEvent is None: raise CmdError("no current process is set") - targets = [ self.lastEvent.get_pid() ] + targets = [self.lastEvent.get_pid()] for pid in targets: bplist = debug.get_process_code_breakpoints(pid) printed_process_banner = False @@ -1640,20 +1671,18 @@ def do_bl(self, arg): print("Process %d:" % pid) printed_process_banner = True for bp in bplist: - address = repr(bp)[1:-1].replace('remote address ', '') + address = repr(bp)[1:-1].replace("remote address ", "") print(" %s" % address) dbplist = debug.get_process_deferred_code_breakpoints(pid) if dbplist: if not printed_process_banner: print("Process %d:" % pid) printed_process_banner = True - for (label, action, oneshot) in dbplist: + for label, action, oneshot in dbplist: if oneshot: - address = " Deferred unconditional one-shot" \ - " code breakpoint at %s" + address = " Deferred unconditional one-shot" " code breakpoint at %s" else: - address = " Deferred unconditional" \ - " code breakpoint at %s" + address = " Deferred unconditional" " code breakpoint at %s" address = address % label print(" %s" % address) bplist = debug.get_process_page_breakpoints(pid) @@ -1662,14 +1691,14 @@ def do_bl(self, arg): print("Process %d:" % pid) printed_process_banner = True for bp in bplist: - address = repr(bp)[1:-1].replace('remote address ', '') + address = repr(bp)[1:-1].replace("remote address ", "") print(" %s" % address) for tid in debug.system.get_process(pid).iter_thread_ids(): bplist = debug.get_thread_hardware_breakpoints(tid) if bplist: print("Thread %d:" % tid) for bp in bplist: - address = repr(bp)[1:-1].replace('remote address ', '') + address = repr(bp)[1:-1].replace("remote address ", "") print(" %s" % address) def do_bo(self, arg): @@ -1806,7 +1835,7 @@ def do_disassemble(self, arg): next_address = HexOutput.integer(next_address) self.default_disasm_target = next_address print("%s:" % label) -# # print(CrashDump.dump_code(code)) + # # print(CrashDump.dump_code(code)) for line in code: print(CrashDump.dump_code_line(line, bShowDump=False)) @@ -1863,20 +1892,22 @@ def do_searchhex(self, arg): else: addr_width = 16 for addr, bytes in iter: - print(HexDump.hexblock(bytes, addr, addr_width),) + print( + HexDump.hexblock(bytes, addr, addr_width), + ) do_sh = do_searchhex -# # def do_strings(self, arg): -# # """ -# # [~process] strings - extract ASCII strings from memory -# # """ -# # if arg: -# # raise CmdError("too many arguments") -# # pid, tid = self.get_process_and_thread_ids_from_prefix() -# # process = self.get_process(pid) -# # for addr, size, data in process.strings(): -# # print("%s: %r" % (HexDump.address(addr), data) + # # def do_strings(self, arg): + # # """ + # # [~process] strings - extract ASCII strings from memory + # # """ + # # if arg: + # # raise CmdError("too many arguments") + # # pid, tid = self.get_process_and_thread_ids_from_prefix() + # # process = self.get_process(pid) + # # for addr, size, data in process.strings(): + # # print("%s: %r" % (HexDump.address(addr), data) def do_d(self, arg): """ @@ -1983,12 +2014,12 @@ def do_register(self, arg): if not arg: self.print_current_location() else: - equ = arg.find('=') + equ = arg.find("=") if equ >= 0: register = arg[:equ].strip() - value = arg[equ + 1:].strip() + value = arg[equ + 1 :].strip() if not value: - value = '0' + value = "0" self.change_register(register, value) else: value = self.input_register(arg) @@ -2021,7 +2052,7 @@ def do_eb(self, arg): pid = self.get_process_id_from_prefix() token_list = self.split_tokens(arg, 2) address = self.input_address(token_list[0], pid) - data = HexInput.hexadecimal(' '.join(token_list[1:])) + data = HexInput.hexadecimal(" ".join(token_list[1:])) self.write_memory(address, data, pid) # XXX TODO @@ -2050,7 +2081,7 @@ def do_memory(self, arg): try: memoryMap = process.get_memory_map() mappedFilenames = process.get_mapped_filenames() - print('') + print("") print(CrashDump.dump_memory_map(memoryMap, mappedFilenames)) except WindowsError: msg = "can't get memory information for process (%d)" @@ -2058,11 +2089,11 @@ def do_memory(self, arg): do_m = do_memory -#------------------------------------------------------------------------------ -# Event handling + # ------------------------------------------------------------------------------ + # Event handling -# TODO -# * add configurable stop/don't stop behavior on events and exceptions + # TODO + # * add configurable stop/don't stop behavior on events and exceptions # Stop for all events, unless stated otherwise. def event(self, event): @@ -2076,7 +2107,7 @@ def exception(self, event): # Stop for breakpoint exceptions. def breakpoint(self, event): - if hasattr(event, 'breakpoint') and event.breakpoint: + if hasattr(event, "breakpoint") and event.breakpoint: self.print_breakpoint_location(event) else: self.print_exception(event) @@ -2130,8 +2161,8 @@ def unload_dll(self, event): def output_string(self, event): self.print_debug_string(event) -#------------------------------------------------------------------------------ -# History file + # ------------------------------------------------------------------------------ + # History file def load_history(self): global readline @@ -2141,15 +2172,14 @@ def load_history(self): except ImportError: return if self.history_file_full_path is None: - folder = os.environ.get('USERPROFILE', '') + folder = os.environ.get("USERPROFILE", "") if not folder: - folder = os.environ.get('HOME', '') + folder = os.environ.get("HOME", "") if not folder: folder = os.path.split(sys.argv[0])[1] if not folder: folder = os.path.curdir - self.history_file_full_path = os.path.join(folder, - self.history_file) + self.history_file_full_path = os.path.join(folder, self.history_file) try: if os.path.exists(self.history_file_full_path): readline.read_history_file(self.history_file_full_path) @@ -2171,8 +2201,8 @@ def save_history(self): e = sys.exc_info()[1] warnings.warn("Cannot save history file, reason: %s" % str(e)) -#------------------------------------------------------------------------------ -# Main loop + # ------------------------------------------------------------------------------ + # Main loop # Debugging loop. def loop(self): @@ -2181,14 +2211,12 @@ def loop(self): # Stop on the initial event, if any. if self.lastEvent is not None: - self.cmdqueue.append('r') + self.cmdqueue.append("r") self.prompt_user() # Loop until the debugger is told to quit. while not self.debuggerExit: - try: - # If for some reason the last event wasn't continued, # continue it here. This won't be done more than once # for a given Event instance, though. @@ -2203,7 +2231,6 @@ def loop(self): # Some debug events may cause the command prompt to be shown. if self.debug.get_debugee_count() > 0: try: - # Get the next debug event. debug.wait() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py index 6ae01831b..223524ebe 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/module.py @@ -42,7 +42,7 @@ __revision__ = "$Id$" -__all__ = ['Module', 'DebugSymbolsWarning'] +__all__ = ["Module", "DebugSymbolsWarning"] import sys from winappdbg import win32 @@ -57,17 +57,20 @@ import warnings import traceback -#============================================================================== +# ============================================================================== -class DebugSymbolsWarning (UserWarning): + +class DebugSymbolsWarning(UserWarning): """ This warning is issued if the support for debug symbols isn't working properly. """ -#============================================================================== -class Module (object): +# ============================================================================== + + +class Module(object): """ Interface to a DLL library loaded in the context of another process. @@ -115,14 +118,14 @@ class Module (object): Use the L{get_process} method instead. """ - unknown = '' + unknown = "" - class _SymbolEnumerator (object): + class _SymbolEnumerator(object): """ Internally used by L{Module} to enumerate symbols in a module. """ - def __init__(self, undecorate = False): + def __init__(self, undecorate=False): self.symbols = list() self.undecorate = undecorate @@ -134,14 +137,11 @@ def __call__(self, SymbolName, SymbolAddress, SymbolSize, UserContext): try: SymbolName = win32.UnDecorateSymbolName(SymbolName) except Exception: - pass # not all symbols are decorated! - self.symbols.append( (SymbolName, SymbolAddress, SymbolSize) ) + pass # not all symbols are decorated! + self.symbols.append((SymbolName, SymbolAddress, SymbolSize)) return win32.TRUE - def __init__(self, lpBaseOfDll, hFile = None, fileName = None, - SizeOfImage = None, - EntryPoint = None, - process = None): + def __init__(self, lpBaseOfDll, hFile=None, fileName=None, SizeOfImage=None, EntryPoint=None, process=None): """ @type lpBaseOfDll: str @param lpBaseOfDll: Base address of the module. @@ -161,10 +161,10 @@ def __init__(self, lpBaseOfDll, hFile = None, fileName = None, @type process: L{Process} @param process: (Optional) Process where the module is loaded. """ - self.lpBaseOfDll = lpBaseOfDll - self.fileName = fileName - self.SizeOfImage = SizeOfImage - self.EntryPoint = EntryPoint + self.lpBaseOfDll = lpBaseOfDll + self.fileName = fileName + self.SizeOfImage = SizeOfImage + self.EntryPoint = EntryPoint self.__symbols = list() @@ -172,21 +172,21 @@ def __init__(self, lpBaseOfDll, hFile = None, fileName = None, self.set_process(process) # Not really sure if it's a good idea... -## def __eq__(self, aModule): -## """ -## Compare two Module objects. The comparison is made using the process -## IDs and the module bases. -## -## @type aModule: L{Module} -## @param aModule: Another Module object. -## -## @rtype: bool -## @return: C{True} if the two process IDs and module bases are equal, -## C{False} otherwise. -## """ -## return isinstance(aModule, Module) and \ -## self.get_pid() == aModule.get_pid() and \ -## self.get_base() == aModule.get_base() + ## def __eq__(self, aModule): + ## """ + ## Compare two Module objects. The comparison is made using the process + ## IDs and the module bases. + ## + ## @type aModule: L{Module} + ## @param aModule: Another Module object. + ## + ## @rtype: bool + ## @return: C{True} if the two process IDs and module bases are equal, + ## C{False} otherwise. + ## """ + ## return isinstance(aModule, Module) and \ + ## self.get_pid() == aModule.get_pid() and \ + ## self.get_base() == aModule.get_base() def get_handle(self): """ @@ -217,7 +217,7 @@ def get_process(self): # no way to guess! return self.__process - def set_process(self, process = None): + def set_process(self, process=None): """ Manually set the parent process. Use with care! @@ -227,11 +227,11 @@ def set_process(self, process = None): if process is None: self.__process = None else: - global Process # delayed import + global Process # delayed import if Process is None: from winappdbg.process import Process if not isinstance(process, Process): - msg = "Parent process must be a Process instance, " + msg = "Parent process must be a Process instance, " msg += "got %s instead" % type(process) raise TypeError(msg) self.__process = process @@ -281,17 +281,14 @@ def __get_size_and_entry_point(self): process = self.get_process() if process: try: - handle = process.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) - base = self.get_base() - mi = win32.GetModuleInformation(handle, base) + handle = process.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) + base = self.get_base() + mi = win32.GetModuleInformation(handle, base) self.SizeOfImage = mi.SizeOfImage - self.EntryPoint = mi.EntryPoint + self.EntryPoint = mi.EntryPoint except WindowsError: e = sys.exc_info()[1] - warnings.warn( - "Cannot get size and entry point of module %s, reason: %s"\ - % (self.get_name(), e.strerror), RuntimeWarning) + warnings.warn("Cannot get size and entry point of module %s, reason: %s" % (self.get_name(), e.strerror), RuntimeWarning) def get_filename(self): """ @@ -344,7 +341,7 @@ def get_name(self): modName = self.__filename_to_modname(pathname) if isinstance(modName, compat.unicode): try: - modName = modName.encode('cp1252') + modName = modName.encode("cp1252") except UnicodeEncodeError: e = sys.exc_info()[1] warnings.warn(str(e)) @@ -383,7 +380,7 @@ def match_name(self, name): # No match. return False -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def open_handle(self): """ @@ -394,16 +391,14 @@ def open_handle(self): if not self.get_filename(): msg = "Cannot retrieve filename for module at %s" - msg = msg % HexDump.address( self.get_base() ) + msg = msg % HexDump.address(self.get_base()) raise Exception(msg) - hFile = win32.CreateFile(self.get_filename(), - dwShareMode = win32.FILE_SHARE_READ, - dwCreationDisposition = win32.OPEN_EXISTING) + hFile = win32.CreateFile(self.get_filename(), dwShareMode=win32.FILE_SHARE_READ, dwCreationDisposition=win32.OPEN_EXISTING) # In case hFile was set to an actual handle value instead of a Handle # object. This shouldn't happen unless the user tinkered with hFile. - if not hasattr(self.hFile, '__del__'): + if not hasattr(self.hFile, "__del__"): self.close_handle() self.hFile = hFile @@ -418,7 +413,7 @@ def close_handle(self): setting L{hFile} to C{None} should be enough. """ try: - if hasattr(self.hFile, 'close'): + if hasattr(self.hFile, "close"): self.hFile.close() elif self.hFile not in (None, win32.INVALID_HANDLE_VALUE): win32.CloseHandle(self.hFile) @@ -443,7 +438,7 @@ def clear(self): finally: self.close_handle() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX FIXME # I've been told sometimes the debugging symbols APIs don't correctly @@ -458,47 +453,38 @@ def load_symbols(self): dwAccess = win32.PROCESS_QUERY_LIMITED_INFORMATION else: dwAccess = win32.PROCESS_QUERY_INFORMATION - hProcess = self.get_process().get_handle(dwAccess) - hFile = self.hFile - BaseOfDll = self.get_base() - SizeOfDll = self.get_size() - Enumerator = self._SymbolEnumerator() + hProcess = self.get_process().get_handle(dwAccess) + hFile = self.hFile + BaseOfDll = self.get_base() + SizeOfDll = self.get_size() + Enumerator = self._SymbolEnumerator() try: win32.SymInitialize(hProcess) SymOptions = win32.SymGetOptions() SymOptions |= ( - win32.SYMOPT_ALLOW_ZERO_ADDRESS | - win32.SYMOPT_CASE_INSENSITIVE | - win32.SYMOPT_FAVOR_COMPRESSED | - win32.SYMOPT_INCLUDE_32BIT_MODULES | - win32.SYMOPT_UNDNAME - ) - SymOptions &= ~( - win32.SYMOPT_LOAD_LINES | - win32.SYMOPT_NO_IMAGE_SEARCH | - win32.SYMOPT_NO_CPP | - win32.SYMOPT_IGNORE_NT_SYMPATH + win32.SYMOPT_ALLOW_ZERO_ADDRESS + | win32.SYMOPT_CASE_INSENSITIVE + | win32.SYMOPT_FAVOR_COMPRESSED + | win32.SYMOPT_INCLUDE_32BIT_MODULES + | win32.SYMOPT_UNDNAME ) + SymOptions &= ~(win32.SYMOPT_LOAD_LINES | win32.SYMOPT_NO_IMAGE_SEARCH | win32.SYMOPT_NO_CPP | win32.SYMOPT_IGNORE_NT_SYMPATH) win32.SymSetOptions(SymOptions) try: - win32.SymSetOptions( - SymOptions | win32.SYMOPT_ALLOW_ABSOLUTE_SYMBOLS) + win32.SymSetOptions(SymOptions | win32.SYMOPT_ALLOW_ABSOLUTE_SYMBOLS) except WindowsError: pass try: try: - success = win32.SymLoadModule64( - hProcess, hFile, None, None, BaseOfDll, SizeOfDll) + success = win32.SymLoadModule64(hProcess, hFile, None, None, BaseOfDll, SizeOfDll) except WindowsError: success = 0 if not success: ImageName = self.get_filename() - success = win32.SymLoadModule64( - hProcess, None, ImageName, None, BaseOfDll, SizeOfDll) + success = win32.SymLoadModule64(hProcess, None, ImageName, None, BaseOfDll, SizeOfDll) if success: try: - win32.SymEnumerateSymbols64( - hProcess, BaseOfDll, Enumerator) + win32.SymEnumerateSymbols64(hProcess, BaseOfDll, Enumerator) finally: win32.SymUnloadModule64(hProcess, BaseOfDll) finally: @@ -549,7 +535,7 @@ def iter_symbols(self): self.load_symbols() return self.__symbols.__iter__() - def resolve_symbol(self, symbol, bCaseSensitive = False): + def resolve_symbol(self, symbol, bCaseSensitive=False): """ Resolves a debugging symbol's address. @@ -564,10 +550,10 @@ def resolve_symbol(self, symbol, bCaseSensitive = False): @return: Memory address of symbol. C{None} if not found. """ if bCaseSensitive: - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if symbol == SymbolName: return SymbolAddress - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): try: SymbolName = win32.UnDecorateSymbolName(SymbolName) except Exception: @@ -576,10 +562,10 @@ def resolve_symbol(self, symbol, bCaseSensitive = False): return SymbolAddress else: symbol = symbol.lower() - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if symbol == SymbolName.lower(): return SymbolAddress - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): try: SymbolName = win32.UnDecorateSymbolName(SymbolName) except Exception: @@ -602,7 +588,7 @@ def get_symbol_at_address(self, address): Returns C{None} if no symbol could be matched. """ found = None - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if SymbolAddress > address: continue if SymbolAddress + SymbolSize > address: @@ -610,9 +596,9 @@ def get_symbol_at_address(self, address): found = (SymbolName, SymbolAddress, SymbolSize) return found -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def get_label(self, function = None, offset = None): + def get_label(self, function=None, offset=None): """ Retrieves the label for the given function of this module or the module base address if no function name is given. @@ -628,7 +614,7 @@ def get_label(self, function = None, offset = None): """ return _ModuleContainer.parse_label(self.get_name(), function, offset) - def get_label_at_address(self, address, offset = None): + def get_label_at_address(self, address, offset=None): """ Creates a label from the given memory address. @@ -650,16 +636,16 @@ def get_label_at_address(self, address, offset = None): address = address + offset # Make the label relative to the base address if no match is found. - module = self.get_name() - function = None - offset = address - self.get_base() + module = self.get_name() + function = None + offset = address - self.get_base() # Make the label relative to the entrypoint if no other match is found. # Skip if the entry point is unknown. start = self.get_entry_point() if start and start <= address: - function = "start" - offset = address - start + function = "start" + offset = address - start # Enumerate exported functions and debug symbols, # then find the closest match, if possible. @@ -669,8 +655,8 @@ def get_label_at_address(self, address, offset = None): (SymbolName, SymbolAddress, SymbolSize) = symbol new_offset = address - SymbolAddress if new_offset <= offset: - function = SymbolName - offset = new_offset + function = SymbolName + offset = new_offset except WindowsError: pass @@ -716,14 +702,12 @@ def resolve(self, function): # If the DLL is already mapped locally, resolve the function. try: - hlib = win32.GetModuleHandle(filename) + hlib = win32.GetModuleHandle(filename) address = win32.GetProcAddress(hlib, function) except WindowsError: - # Load the DLL locally, resolve the function and unload it. try: - hlib = win32.LoadLibraryEx(filename, - win32.DONT_RESOLVE_DLL_REFERENCES) + hlib = win32.LoadLibraryEx(filename, win32.DONT_RESOLVE_DLL_REFERENCES) try: address = win32.GetProcAddress(hlib, function) finally: @@ -770,7 +754,6 @@ def resolve_label(self, label): if procedure: address = self.resolve(procedure) if address is None: - # If it's a debug symbol, use the symbol. address = self.resolve_symbol(procedure) @@ -794,7 +777,8 @@ def resolve_label(self, label): address = address + offset return address -#============================================================================== + +# ============================================================================== # TODO # An alternative approach to the toolhelp32 snapshots: parsing the PEB and @@ -802,7 +786,8 @@ def resolve_label(self, label): # of toolhelp32 not working when the process hasn't finished initializing. # See: http://pferrie.host22.com/misc/lowlevel3.htm -class _ModuleContainer (object): + +class _ModuleContainer(object): """ Encapsulates the capability to contain Module objects. @@ -947,7 +932,7 @@ def get_module_count(self): self.__initialize_snapshot() return len(self.__moduleDict) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_module_by_name(self, modName): """ @@ -975,12 +960,12 @@ def get_module_by_name(self, modName): for lib in self.iter_modules(): if modName == lib.get_filename().lower(): return lib - return None # Stop trying to match the name. + return None # Stop trying to match the name. # Get all the module names. # This prevents having to iterate through the module list # more than once. - modDict = [ ( lib.get_name(), lib ) for lib in self.iter_modules() ] + modDict = [(lib.get_name(), lib) for lib in self.iter_modules()] modDict = dict(modDict) # modName is a base filename. @@ -1020,13 +1005,13 @@ def get_module_at_address(self, address): i = 0 max_i = len(bases) - 1 while i < max_i: - begin, end = bases[i:i+2] + begin, end = bases[i : i + 2] if begin <= address < end: module = self.get_module(begin) - here = module.is_address_here(address) + here = module.is_address_here(address) if here is False: break - else: # True or None + else: # True or None return module i = i + 1 return None @@ -1057,35 +1042,32 @@ def scan_modules(self): # It would seem easier to clear the snapshot first. # But then all open handles would be closed. found_bases = set() - with win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPMODULE, - dwProcessId) as hSnapshot: + with win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPMODULE, dwProcessId) as hSnapshot: me = win32.Module32First(hSnapshot) while me is not None: lpBaseAddress = me.modBaseAddr - fileName = me.szExePath # full pathname + fileName = me.szExePath # full pathname if not fileName: - fileName = me.szModule # filename only + fileName = me.szModule # filename only if not fileName: fileName = None else: fileName = PathOperations.native_to_win32_pathname(fileName) found_bases.add(lpBaseAddress) -## if not self.has_module(lpBaseAddress): # XXX triggers a scan + ## if not self.has_module(lpBaseAddress): # XXX triggers a scan if lpBaseAddress not in self.__moduleDict: - aModule = Module(lpBaseAddress, fileName = fileName, - SizeOfImage = me.modBaseSize, - process = self) + aModule = Module(lpBaseAddress, fileName=fileName, SizeOfImage=me.modBaseSize, process=self) self._add_module(aModule) else: aModule = self.get_module(lpBaseAddress) if not aModule.fileName: - aModule.fileName = fileName + aModule.fileName = fileName if not aModule.SizeOfImage: aModule.SizeOfImage = me.modBaseSize if not aModule.process: - aModule.process = self + aModule.process = self me = win32.Module32Next(hSnapshot) -## for base in self.get_module_bases(): # XXX triggers a scan + ## for base in self.get_module_bases(): # XXX triggers a scan for base in compat.keys(self.__moduleDict): if base not in found_bases: self._del_module(base) @@ -1098,10 +1080,10 @@ def clear_modules(self): aModule.clear() self.__moduleDict = dict() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @staticmethod - def parse_label(module = None, function = None, offset = None): + def parse_label(module=None, function=None, offset=None): """ Creates a label from a module and a function name, plus an offset. @@ -1139,9 +1121,9 @@ def parse_label(module = None, function = None, offset = None): pass # Validate the parameters. - if module is not None and ('!' in module or '+' in module): + if module is not None and ("!" in module or "+" in module): raise ValueError("Invalid module name: %s" % module) - if function is not None and ('!' in function or '+' in function): + if function is not None and ("!" in function or "+" in function): raise ValueError("Invalid function name: %s" % function) # Parse the label. @@ -1153,7 +1135,7 @@ def parse_label(module = None, function = None, offset = None): label = "%s!%s" % (module, function) else: if offset: -## label = "%s+0x%x!" % (module, offset) + ## label = "%s+0x%x!" % (module, offset) label = "%s!0x%x" % (module, offset) else: label = "%s!" % module @@ -1207,33 +1189,32 @@ def split_label_strict(label): if not label: label = "0x0" else: - # Remove all blanks. - label = label.replace(' ', '') - label = label.replace('\t', '') - label = label.replace('\r', '') - label = label.replace('\n', '') + label = label.replace(" ", "") + label = label.replace("\t", "") + label = label.replace("\r", "") + label = label.replace("\n", "") # Special case: empty label. if not label: label = "0x0" # * ! * - if '!' in label: + if "!" in label: try: - module, function = label.split('!') + module, function = label.split("!") except ValueError: raise ValueError("Malformed label: %s" % label) # module ! function if function: - if '+' in module: + if "+" in module: raise ValueError("Malformed label: %s" % label) # module ! function + offset - if '+' in function: + if "+" in function: try: - function, offset = function.split('+') + function, offset = function.split("+") except ValueError: raise ValueError("Malformed label: %s" % label) try: @@ -1241,19 +1222,17 @@ def split_label_strict(label): except ValueError: raise ValueError("Malformed label: %s" % label) else: - # module ! offset try: - offset = HexInput.integer(function) + offset = HexInput.integer(function) function = None except ValueError: pass else: - # module + offset ! - if '+' in module: + if "+" in module: try: - module, offset = module.split('+') + module, offset = module.split("+") except ValueError: raise ValueError("Malformed label: %s" % label) try: @@ -1262,7 +1241,6 @@ def split_label_strict(label): raise ValueError("Malformed label: %s" % label) else: - # module ! try: offset = HexInput.integer(module) @@ -1273,20 +1251,19 @@ def split_label_strict(label): pass if not module: - module = None + module = None if not function: function = None # * else: - # offset try: offset = HexInput.integer(label) # # ordinal except ValueError: - if label.startswith('#'): + if label.startswith("#"): function = label try: HexInput.integer(function[1:]) @@ -1302,7 +1279,7 @@ def split_label_strict(label): raise ValueError("Ambiguous label: %s" % label) # Convert function ordinal strings into integers. - if function and function.startswith('#'): + if function and function.startswith("#"): try: function = HexInput.integer(function[1:]) except ValueError: @@ -1352,31 +1329,30 @@ def split_label_fuzzy(self, label): if not label: label = compat.b("0x0") else: - # Remove all blanks. - label = label.replace(compat.b(' '), compat.b('')) - label = label.replace(compat.b('\t'), compat.b('')) - label = label.replace(compat.b('\r'), compat.b('')) - label = label.replace(compat.b('\n'), compat.b('')) + label = label.replace(compat.b(" "), compat.b("")) + label = label.replace(compat.b("\t"), compat.b("")) + label = label.replace(compat.b("\r"), compat.b("")) + label = label.replace(compat.b("\n"), compat.b("")) # Special case: empty label. if not label: label = compat.b("0x0") # If an exclamation sign is present, we know we can parse it strictly. - if compat.b('!') in label: + if compat.b("!") in label: return self.split_label_strict(label) -## # Try to parse it strictly, on error do it the fuzzy way. -## try: -## return self.split_label(label) -## except ValueError: -## pass + ## # Try to parse it strictly, on error do it the fuzzy way. + ## try: + ## return self.split_label(label) + ## except ValueError: + ## pass # * + offset - if compat.b('+') in label: + if compat.b("+") in label: try: - prefix, offset = label.split(compat.b('+')) + prefix, offset = label.split(compat.b("+")) except ValueError: raise ValueError("Malformed label: %s" % label) try: @@ -1388,13 +1364,11 @@ def split_label_fuzzy(self, label): # This parses both filenames and base addresses. modobj = self.get_module_by_name(label) if modobj: - # module # module + offset module = modobj.get_name() else: - # TODO # If 0xAAAAAAAA + 0xBBBBBBBB is given, # A is interpreted as a module base address, @@ -1426,8 +1400,7 @@ def split_label_fuzzy(self, label): # to prevent an infinite recursion if there's a bug here. try: new_label = self.get_label_at_address(offset) - module, function, offset = \ - self.split_label_strict(new_label) + module, function, offset = self.split_label_strict(new_label) except ValueError: pass @@ -1437,7 +1410,7 @@ def split_label_fuzzy(self, label): function = label # Convert function ordinal strings into integers. - if function and function.startswith(compat.b('#')): + if function and function.startswith(compat.b("#")): try: function = HexInput.integer(function[1:]) except ValueError: @@ -1452,37 +1425,37 @@ def split_label_fuzzy(self, label): @classmethod def split_label(cls, label): """ -Splits a label into it's C{module}, C{function} and C{offset} -components, as used in L{parse_label}. + Splits a label into it's C{module}, C{function} and C{offset} + components, as used in L{parse_label}. -When called as a static method, the strict syntax mode is used:: + When called as a static method, the strict syntax mode is used:: - winappdbg.Process.split_label( "kernel32!CreateFileA" ) + winappdbg.Process.split_label( "kernel32!CreateFileA" ) -When called as an instance method, the fuzzy syntax mode is used:: + When called as an instance method, the fuzzy syntax mode is used:: - aProcessInstance.split_label( "CreateFileA" ) + aProcessInstance.split_label( "CreateFileA" ) -@see: L{split_label_strict}, L{split_label_fuzzy} + @see: L{split_label_strict}, L{split_label_fuzzy} -@type label: str -@param label: Label to split. + @type label: str + @param label: Label to split. -@rtype: tuple( str or None, str or int or None, int or None ) -@return: - Tuple containing the C{module} name, - the C{function} name or ordinal, and the C{offset} value. + @rtype: tuple( str or None, str or int or None, int or None ) + @return: + Tuple containing the C{module} name, + the C{function} name or ordinal, and the C{offset} value. - If the label doesn't specify a module, - then C{module} is C{None}. + If the label doesn't specify a module, + then C{module} is C{None}. - If the label doesn't specify a function, - then C{function} is C{None}. + If the label doesn't specify a function, + then C{function} is C{None}. - If the label doesn't specify an offset, - then C{offset} is C{0}. + If the label doesn't specify an offset, + then C{offset} is C{0}. -@raise ValueError: The label is malformed. + @raise ValueError: The label is malformed. """ # XXX @@ -1497,7 +1470,8 @@ def split_label(cls, label): def __use_fuzzy_mode(self, label): "@see: L{split_label}" return self.split_label_fuzzy(label) -## __use_fuzzy_mode.__doc__ = split_label.__doc__ + + ## __use_fuzzy_mode.__doc__ = split_label.__doc__ def sanitize_label(self, label): """ @@ -1548,9 +1522,7 @@ def resolve_label(self, label): # Return the memory address. return address - def resolve_label_components(self, module = None, - function = None, - offset = None): + def resolve_label_components(self, module=None, function=None, offset=None): """ Resolve the memory address of the given module, function and/or offset. @@ -1639,7 +1611,7 @@ def resolve_label_components(self, module = None, address = address + offset return address - def get_label_at_address(self, address, offset = None): + def get_label_at_address(self, address, offset=None): """ Creates a label from the given memory address. @@ -1665,7 +1637,7 @@ def get_label_at_address(self, address, offset = None): label = self.parse_label(None, None, address) return label -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # The memory addresses of system breakpoints are be cached, since they're # all in system libraries it's not likely they'll ever change their address @@ -1693,8 +1665,7 @@ def get_break_on_error_ptr(self): """ address = self.__get_system_breakpoint("ntdll!g_dwLastErrorToBreakOn") if not address: - address = self.__get_system_breakpoint( - "kernel32!g_dwLastErrorToBreakOn") + address = self.__get_system_breakpoint("kernel32!g_dwLastErrorToBreakOn") # cheat a little :) self.__system_breakpoints["ntdll!g_dwLastErrorToBreakOn"] = address return address @@ -1712,8 +1683,7 @@ def is_system_defined_breakpoint(self, address): if address: module = self.get_module_at_address(address) if module: - return module.match_name("ntdll") or \ - module.match_name("kernel32") + return module.match_name("ntdll") or module.match_name("kernel32") return False # FIXME @@ -1778,7 +1748,7 @@ def get_wow64_breakin_breakpoint(self): """ return self.__get_system_breakpoint("ntdll32!DbgUiRemoteBreakin") -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def load_symbols(self): """ @@ -1830,7 +1800,7 @@ def iter_symbols(self): for symbol in aModule.iter_symbols(): yield symbol - def resolve_symbol(self, symbol, bCaseSensitive = False): + def resolve_symbol(self, symbol, bCaseSensitive=False): """ Resolves a debugging symbol's address. @@ -1845,12 +1815,12 @@ def resolve_symbol(self, symbol, bCaseSensitive = False): @return: Memory address of symbol. C{None} if not found. """ if bCaseSensitive: - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if symbol == SymbolName: return SymbolAddress else: symbol = symbol.lower() - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if symbol == SymbolName.lower(): return SymbolAddress @@ -1871,7 +1841,7 @@ def get_symbol_at_address(self, address): # Any module may have symbols pointing anywhere in memory, so there's # no easy way to optimize this. I guess we're stuck with brute force. found = None - for (SymbolName, SymbolAddress, SymbolSize) in self.iter_symbols(): + for SymbolName, SymbolAddress, SymbolSize in self.iter_symbols(): if SymbolAddress > address: continue @@ -1885,7 +1855,8 @@ def get_symbol_at_address(self, address): else: found = (SymbolName, SymbolAddress, SymbolSize) return found -#------------------------------------------------------------------------------ + + # ------------------------------------------------------------------------------ # XXX _notify_* methods should not trigger a scan @@ -1896,17 +1867,17 @@ def _add_module(self, aModule): @type aModule: L{Module} @param aModule: Module object. """ -## if not isinstance(aModule, Module): -## if hasattr(aModule, '__class__'): -## typename = aModule.__class__.__name__ -## else: -## typename = str(type(aModule)) -## msg = "Expected Module, got %s instead" % typename -## raise TypeError(msg) + ## if not isinstance(aModule, Module): + ## if hasattr(aModule, '__class__'): + ## typename = aModule.__class__.__name__ + ## else: + ## typename = str(type(aModule)) + ## msg = "Expected Module, got %s instead" % typename + ## raise TypeError(msg) lpBaseOfDll = aModule.get_base() -## if lpBaseOfDll in self.__moduleDict: -## msg = "Module already exists: %d" % lpBaseOfDll -## raise KeyError(msg) + ## if lpBaseOfDll in self.__moduleDict: + ## msg = "Module already exists: %d" % lpBaseOfDll + ## raise KeyError(msg) aModule.set_process(self) self.__moduleDict[lpBaseOfDll] = aModule @@ -1925,7 +1896,7 @@ def _del_module(self, lpBaseOfDll): msg = "Unknown base address %d" % HexDump.address(lpBaseOfDll) warnings.warn(msg, RuntimeWarning) if aModule: - aModule.clear() # remove circular references + aModule.clear() # remove circular references def __add_loaded_module(self, event): """ @@ -1935,29 +1906,25 @@ def __add_loaded_module(self, event): @param event: Event object. """ lpBaseOfDll = event.get_module_base() - hFile = event.get_file_handle() -## if not self.has_module(lpBaseOfDll): # XXX this would trigger a scan + hFile = event.get_file_handle() + ## if not self.has_module(lpBaseOfDll): # XXX this would trigger a scan if lpBaseOfDll not in self.__moduleDict: fileName = event.get_filename() if not fileName: fileName = None - if hasattr(event, 'get_start_address'): + if hasattr(event, "get_start_address"): EntryPoint = event.get_start_address() else: EntryPoint = None - aModule = Module(lpBaseOfDll, hFile, fileName = fileName, - EntryPoint = EntryPoint, - process = self) + aModule = Module(lpBaseOfDll, hFile, fileName=fileName, EntryPoint=EntryPoint, process=self) self._add_module(aModule) else: aModule = self.get_module(lpBaseOfDll) - if not aModule.hFile and hFile not in (None, 0, - win32.INVALID_HANDLE_VALUE): + if not aModule.hFile and hFile not in (None, 0, win32.INVALID_HANDLE_VALUE): aModule.hFile = hFile if not aModule.process: aModule.process = self - if aModule.EntryPoint is None and \ - hasattr(event, 'get_start_address'): + if aModule.EntryPoint is None and hasattr(event, "get_start_address"): aModule.EntryPoint = event.get_start_address() if not aModule.fileName: fileName = event.get_filename() @@ -2010,7 +1977,7 @@ def _notify_unload_dll(self, event): @return: C{True} to call the user-defined handle, C{False} otherwise. """ lpBaseOfDll = event.get_module_base() -## if self.has_module(lpBaseOfDll): # XXX this would trigger a scan + ## if self.has_module(lpBaseOfDll): # XXX this would trigger a scan if lpBaseOfDll in self.__moduleDict: self._del_module(lpBaseOfDll) return True diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py index 5d2ae3c17..c27495876 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/process.py @@ -45,7 +45,7 @@ __revision__ = "$Id$" -__all__ = ['Process'] +__all__ = ["Process"] import sys from winappdbg import win32 @@ -55,8 +55,7 @@ from winappdbg.module import Module, _ModuleContainer from winappdbg.thread import Thread, _ThreadContainer from winappdbg.window import Window -from winappdbg.search import Search, \ - Pattern, BytePattern, TextPattern, RegExpPattern, HexPattern +from winappdbg.search import Search, Pattern, BytePattern, TextPattern, RegExpPattern, HexPattern from winappdbg.disasm import Disassembler import re @@ -70,7 +69,7 @@ # delayed import System = None -#============================================================================== +# ============================================================================== # TODO # * Remote GetLastError() @@ -79,7 +78,8 @@ # retrieve the original memory contents where code breakpoints are enabled. # * A memory cache could be implemented here. -class Process (_ThreadContainer, _ModuleContainer): + +class Process(_ThreadContainer, _ModuleContainer): """ Interface to a process. Contains threads and modules snapshots. @@ -150,7 +150,7 @@ class Process (_ThreadContainer, _ModuleContainer): @ivar fileName: Filename of the main module. Use L{get_filename} instead. """ - def __init__(self, dwProcessId, hProcess = None, fileName = None): + def __init__(self, dwProcessId, hProcess=None, fileName=None): """ @type dwProcessId: int @param dwProcessId: Global process ID. @@ -165,8 +165,8 @@ def __init__(self, dwProcessId, hProcess = None, fileName = None): _ModuleContainer.__init__(self) self.dwProcessId = dwProcessId - self.hProcess = hProcess - self.fileName = fileName + self.hProcess = hProcess + self.fileName = fileName def get_pid(self): """ @@ -184,7 +184,7 @@ def get_filename(self): self.fileName = self.get_image_name() return self.fileName - def open_handle(self, dwDesiredAccess = win32.PROCESS_ALL_ACCESS): + def open_handle(self, dwDesiredAccess=win32.PROCESS_ALL_ACCESS): """ Opens a new handle to the process. @@ -208,8 +208,7 @@ def open_handle(self, dwDesiredAccess = win32.PROCESS_ALL_ACCESS): try: self.close_handle() except Exception: - warnings.warn( - "Failed to close process handle: %s" % traceback.format_exc()) + warnings.warn("Failed to close process handle: %s" % traceback.format_exc()) self.hProcess = hProcess @@ -223,14 +222,14 @@ def close_handle(self): setting L{hProcess} to C{None} should be enough. """ try: - if hasattr(self.hProcess, 'close'): + if hasattr(self.hProcess, "close"): self.hProcess.close() elif self.hProcess not in (None, win32.INVALID_HANDLE_VALUE): win32.CloseHandle(self.hProcess) finally: self.hProcess = None - def get_handle(self, dwDesiredAccess = win32.PROCESS_ALL_ACCESS): + def get_handle(self, dwDesiredAccess=win32.PROCESS_ALL_ACCESS): """ Returns a handle to the process with I{at least} the access rights requested. @@ -261,26 +260,26 @@ def get_handle(self, dwDesiredAccess = win32.PROCESS_ALL_ACCESS): self.open_handle(dwAccess | dwDesiredAccess) return self.hProcess -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Not really sure if it's a good idea... -## def __eq__(self, aProcess): -## """ -## Compare two Process objects. The comparison is made using the IDs. -## -## @warning: -## If you have two Process instances with different handles the -## equality operator still returns C{True}, so be careful! -## -## @type aProcess: L{Process} -## @param aProcess: Another Process object. -## -## @rtype: bool -## @return: C{True} if the two process IDs are equal, -## C{False} otherwise. -## """ -## return isinstance(aProcess, Process) and \ -## self.get_pid() == aProcess.get_pid() + ## def __eq__(self, aProcess): + ## """ + ## Compare two Process objects. The comparison is made using the IDs. + ## + ## @warning: + ## If you have two Process instances with different handles the + ## equality operator still returns C{True}, so be careful! + ## + ## @type aProcess: L{Process} + ## @param aProcess: Another Process object. + ## + ## @rtype: bool + ## @return: C{True} if the two process IDs are equal, + ## C{False} otherwise. + ## """ + ## return isinstance(aProcess, Process) and \ + ## self.get_pid() == aProcess.get_pid() def __contains__(self, anObject): """ @@ -293,8 +292,7 @@ def __contains__(self, anObject): @rtype: bool @return: C{True} if the requested object was found in the snapshot. """ - return _ThreadContainer.__contains__(self, anObject) or \ - _ModuleContainer.__contains__(self, anObject) + return _ThreadContainer.__contains__(self, anObject) or _ModuleContainer.__contains__(self, anObject) def __len__(self): """ @@ -302,10 +300,9 @@ def __len__(self): @rtype: int @return: Count of L{Thread} and L{Module} objects in this snapshot. """ - return _ThreadContainer.__len__(self) + \ - _ModuleContainer.__len__(self) + return _ThreadContainer.__len__(self) + _ModuleContainer.__len__(self) - class __ThreadsAndModulesIterator (object): + class __ThreadsAndModulesIterator(object): """ Iterator object for L{Process} objects. Iterates through L{Thread} objects first, L{Module} objects next. @@ -317,30 +314,30 @@ def __init__(self, container): @param container: L{Thread} and L{Module} container. """ self.__container = container - self.__iterator = None - self.__state = 0 + self.__iterator = None + self.__state = 0 def __iter__(self): - 'x.__iter__() <==> iter(x)' + "x.__iter__() <==> iter(x)" return self def next(self): - 'x.next() -> the next value, or raise StopIteration' + "x.next() -> the next value, or raise StopIteration" if self.__state == 0: self.__iterator = self.__container.iter_threads() - self.__state = 1 + self.__state = 1 if self.__state == 1: try: return self.__iterator.next() except StopIteration: self.__iterator = self.__container.iter_modules() - self.__state = 2 + self.__state = 2 if self.__state == 2: try: return self.__iterator.next() except StopIteration: self.__iterator = None - self.__state = 3 + self.__state = 3 raise StopIteration def __iter__(self): @@ -352,9 +349,9 @@ def __iter__(self): """ return self.__ThreadsAndModulesIterator(self) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def wait(self, dwTimeout = None): + def wait(self, dwTimeout=None): """ Waits for the process to finish executing. @@ -362,7 +359,7 @@ def wait(self, dwTimeout = None): """ self.get_handle(win32.SYNCHRONIZE).wait(dwTimeout) - def kill(self, dwExitCode = 0): + def kill(self, dwExitCode=0): """ Terminates the execution of the process. @@ -377,7 +374,7 @@ def suspend(self): @raise WindowsError: On error an exception is raised. """ - self.scan_threads() # force refresh the snapshot + self.scan_threads() # force refresh the snapshot suspended = list() try: for aThread in self.iter_threads(): @@ -398,7 +395,7 @@ def resume(self): @raise WindowsError: On error an exception is raised. """ if self.get_thread_count() == 0: - self.scan_threads() # only refresh the snapshot if empty + self.scan_threads() # only refresh the snapshot if empty resumed = list() try: for aThread in self.iter_threads(): @@ -459,9 +456,9 @@ def get_exit_code(self): dwAccess = win32.PROCESS_QUERY_LIMITED_INFORMATION else: dwAccess = win32.PROCESS_QUERY_INFORMATION - return win32.GetExitCodeProcess( self.get_handle(dwAccess) ) + return win32.GetExitCodeProcess(self.get_handle(dwAccess)) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def scan(self): """ @@ -482,10 +479,10 @@ def clear(self): finally: self.close_handle() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Regular expression to find hexadecimal values of any size. - __hexa_parameter = re.compile('0x[0-9A-Fa-f]+') + __hexa_parameter = re.compile("0x[0-9A-Fa-f]+") def __fixup_labels(self, disasm): """ @@ -504,7 +501,7 @@ def __fixup_labels(self, disasm): s, e = m.span() value = text[s:e] try: - label = self.get_label_at_address( int(value, 0x10) ) + label = self.get_label_at_address(int(value, 0x10)) except Exception: label = None if label: @@ -537,7 +534,7 @@ def disassemble_string(self, lpAddress, code): try: disasm = self.__disasm except AttributeError: - disasm = self.__disasm = Disassembler( self.get_arch() ) + disasm = self.__disasm = Disassembler(self.get_arch()) return disasm.decode(lpAddress, code) def disassemble(self, lpAddress, dwSize): @@ -558,14 +555,14 @@ def disassemble(self, lpAddress, dwSize): - Disassembly line of instruction. - Hexadecimal dump of instruction. """ - data = self.read(lpAddress, dwSize) + data = self.read(lpAddress, dwSize) disasm = self.disassemble_string(lpAddress, data) self.__fixup_labels(disasm) return disasm # FIXME # This algorithm really bad, I've got to write a better one :P - def disassemble_around(self, lpAddress, dwSize = 64): + def disassemble_around(self, lpAddress, dwSize=64): """ Disassemble around the given address. @@ -584,21 +581,21 @@ def disassemble_around(self, lpAddress, dwSize = 64): - Disassembly line of instruction. - Hexadecimal dump of instruction. """ - dwDelta = int(float(dwSize) / 2.0) - addr_1 = lpAddress - dwDelta - addr_2 = lpAddress - size_1 = dwDelta - size_2 = dwSize - dwDelta - data = self.read(addr_1, dwSize) - data_1 = data[:size_1] - data_2 = data[size_1:] + dwDelta = int(float(dwSize) / 2.0) + addr_1 = lpAddress - dwDelta + addr_2 = lpAddress + size_1 = dwDelta + size_2 = dwSize - dwDelta + data = self.read(addr_1, dwSize) + data_1 = data[:size_1] + data_2 = data[size_1:] disasm_1 = self.disassemble_string(addr_1, data_1) disasm_2 = self.disassemble_string(addr_2, data_2) - disasm = disasm_1 + disasm_2 + disasm = disasm_1 + disasm_2 self.__fixup_labels(disasm) return disasm - def disassemble_around_pc(self, dwThreadId, dwSize = 64): + def disassemble_around_pc(self, dwThreadId, dwSize=64): """ Disassemble around the program counter of the given thread. @@ -659,7 +656,7 @@ def disassemble_current(self, dwThreadId): aThread = self.get_thread(dwThreadId) return self.disassemble_instruction(aThread.get_pc()) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def flush_instruction_cache(self): """ @@ -676,7 +673,7 @@ def flush_instruction_cache(self): # Maybe PROCESS_VM_OPERATION ??? # In any case we're only calling this from the debugger, # so it should be fine (we already have PROCESS_ALL_ACCESS). - win32.FlushInstructionCache( self.get_handle() ) + win32.FlushInstructionCache(self.get_handle()) def debug_break(self): """ @@ -687,7 +684,7 @@ def debug_break(self): # The exception is raised by a new thread. # When continuing the exception, the thread dies by itself. # This thread is hidden from the debugger. - win32.DebugBreakProcess( self.get_handle() ) + win32.DebugBreakProcess(self.get_handle()) def is_wow64(self): """ @@ -709,7 +706,7 @@ def is_wow64(self): try: wow64 = self.__wow64 except AttributeError: - if (win32.bits == 32 and not win32.wow64): + if win32.bits == 32 and not win32.wow64: wow64 = False else: if win32.PROCESS_ALL_ACCESS == win32.PROCESS_ALL_ACCESS_VISTA: @@ -759,13 +756,11 @@ def get_bits(self): # Are we in a 32 bit machine? if win32.bits == 32 and not win32.wow64: - # All processes are 32 bits. return 32 # Is the process inside WOW64? if self.is_wow64(): - # The process is 32 bits. return 32 @@ -775,7 +770,7 @@ def get_bits(self): # TODO: get_os, to test compatibility run # See: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683224(v=vs.85).aspx -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_start_time(self): """ @@ -827,14 +822,14 @@ def get_running_time(self): if self.is_alive(): ExitTime = win32.GetSystemTimeAsFileTime() CreationTime = CreationTime.dwLowDateTime + (CreationTime.dwHighDateTime << 32) - ExitTime = ExitTime.dwLowDateTime + ( ExitTime.dwHighDateTime << 32) - RunningTime = ExitTime - CreationTime - return RunningTime / 10000 # 100 nanoseconds steps => milliseconds + ExitTime = ExitTime.dwLowDateTime + (ExitTime.dwHighDateTime << 32) + RunningTime = ExitTime - CreationTime + return RunningTime / 10000 # 100 nanoseconds steps => milliseconds -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def __load_System_class(self): - global System # delayed import + global System # delayed import if System is None: from system import System @@ -852,7 +847,7 @@ def get_services(self): pid = self.get_pid() return [d for d in System.get_active_services() if d.ProcessId == pid] -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_dep_policy(self): """ @@ -884,7 +879,7 @@ def get_dep_policy(self): msg = "This method is only available in Windows XP SP3 and above." raise NotImplementedError(msg) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_peb(self): """ @@ -895,8 +890,7 @@ def get_peb(self): @return: PEB structure. @raise WindowsError: An exception is raised on error. """ - self.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) + self.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) return self.read_structure(self.get_peb_address(), win32.PEB) def get_peb_address(self): @@ -911,8 +905,7 @@ def get_peb_address(self): return self._peb_ptr except AttributeError: hProcess = self.get_handle(win32.PROCESS_QUERY_INFORMATION) - pbi = win32.NtQueryInformationProcess(hProcess, - win32.ProcessBasicInformation) + pbi = win32.NtQueryInformationProcess(hProcess, win32.ProcessBasicInformation) address = pbi.PebBaseAddress self._peb_ptr = address return address @@ -961,18 +954,17 @@ def get_image_name(self): if not name: name = None except (KeyError, AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG name = None # Method 2: QueryFullProcessImageName() # Not implemented until Windows Vista. if not name: try: - hProcess = self.get_handle( - win32.PROCESS_QUERY_LIMITED_INFORMATION) + hProcess = self.get_handle(win32.PROCESS_QUERY_LIMITED_INFORMATION) name = win32.QueryFullProcessImageName(hProcess) except (AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG name = None # Method 3: GetProcessImageFileName() @@ -989,7 +981,7 @@ def get_image_name(self): else: name = None except (AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG if not name: name = None @@ -1000,20 +992,18 @@ def get_image_name(self): # in usermode space (see http://www.ragestorm.net/blogs/?p=163). if not name: try: - hProcess = self.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) + hProcess = self.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) try: name = win32.GetModuleFileNameEx(hProcess) except WindowsError: -## traceback.print_exc() # XXX DEBUG - name = win32.GetModuleFileNameEx( - hProcess, self.get_image_base()) + ## traceback.print_exc() # XXX DEBUG + name = win32.GetModuleFileNameEx(hProcess, self.get_image_base()) if name: name = PathOperations.native_to_win32_pathname(name) else: name = None except (AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG if not name: name = None @@ -1026,17 +1016,15 @@ def get_image_name(self): if not name: try: peb = self.get_peb() - pp = self.read_structure(peb.ProcessParameters, - win32.RTL_USER_PROCESS_PARAMETERS) + pp = self.read_structure(peb.ProcessParameters, win32.RTL_USER_PROCESS_PARAMETERS) s = pp.ImagePathName - name = self.peek_string(s.Buffer, - dwMaxSize=s.MaximumLength, fUnicode=True) + name = self.peek_string(s.Buffer, dwMaxSize=s.MaximumLength, fUnicode=True) if name: name = PathOperations.native_to_win32_pathname(name) else: name = None except (AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG name = None # Method 6: Module.get_filename() @@ -1051,7 +1039,7 @@ def get_image_name(self): if not name: name = None except (AttributeError, WindowsError): -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG name = None # Remember the filename. @@ -1072,8 +1060,7 @@ def get_command_line_block(self): @raise WindowsError: On error an exception is raised. """ peb = self.get_peb() - pp = self.read_structure(peb.ProcessParameters, - win32.RTL_USER_PROCESS_PARAMETERS) + pp = self.read_structure(peb.ProcessParameters, win32.RTL_USER_PROCESS_PARAMETERS) s = pp.CommandLine return (s.Buffer, s.MaximumLength) @@ -1092,8 +1079,7 @@ def get_environment_block(self): @raise WindowsError: On error an exception is raised. """ peb = self.get_peb() - pp = self.read_structure(peb.ProcessParameters, - win32.RTL_USER_PROCESS_PARAMETERS) + pp = self.read_structure(peb.ProcessParameters, win32.RTL_USER_PROCESS_PARAMETERS) Environment = pp.Environment try: EnvironmentSize = pp.EnvironmentSize @@ -1112,11 +1098,10 @@ def get_command_line(self): @raise WindowsError: On error an exception is raised. """ (Buffer, MaximumLength) = self.get_command_line_block() - CommandLine = self.peek_string(Buffer, dwMaxSize=MaximumLength, - fUnicode=True) + CommandLine = self.peek_string(Buffer, dwMaxSize=MaximumLength, fUnicode=True) gst = win32.GuessStringType if gst.t_default == gst.t_ansi: - CommandLine = CommandLine.encode('cp1252') + CommandLine = CommandLine.encode("cp1252") return CommandLine def get_environment_variables(self): @@ -1140,7 +1125,7 @@ def get_environment_variables(self): # renders garbage. # Read the environment block contents. - data = self.peek( *self.get_environment_block() ) + data = self.peek(*self.get_environment_block()) # Put them into a Unicode buffer. tmp = ctypes.create_string_buffer(data) @@ -1150,26 +1135,23 @@ def get_environment_variables(self): # Skip until the first Unicode null char is found. pos = 0 - while buffer[pos] != u'\0': + while buffer[pos] != "\0": pos += 1 pos += 1 # Loop for each environment variable... environment = [] - while buffer[pos] != u'\0': - + while buffer[pos] != "\0": # Until we find a null char... env_name_pos = pos - env_name = u'' + env_name = "" found_name = False - while buffer[pos] != u'\0': - + while buffer[pos] != "\0": # Get the current char. char = buffer[pos] # Is it an equal sign? - if char == u'=': - + if char == "=": # Skip leading equal signs. if env_name_pos == pos: env_name_pos += 1 @@ -1192,8 +1174,8 @@ def get_environment_variables(self): break # Read the variable value until we find a null char. - env_value = u'' - while buffer[pos] != u'\0': + env_value = "" + while buffer[pos] != "\0": env_value += buffer[pos] pos += 1 @@ -1201,7 +1183,7 @@ def get_environment_variables(self): pos += 1 # Add to the list of environment variables found. - environment.append( (env_name, env_value) ) + environment.append((env_name, env_value)) # Remove the last entry, it's garbage. if environment: @@ -1210,7 +1192,7 @@ def get_environment_variables(self): # Return the environment variables. return environment - def get_environment_data(self, fUnicode = None): + def get_environment_data(self, fUnicode=None): """ Retrieves the environment block data with wich the program is running. @@ -1231,21 +1213,17 @@ def get_environment_data(self, fUnicode = None): """ # Issue a deprecation warning. - warnings.warn( - "Process.get_environment_data() is deprecated" \ - " since WinAppDbg 1.5.", - DeprecationWarning) + warnings.warn("Process.get_environment_data() is deprecated" " since WinAppDbg 1.5.", DeprecationWarning) # Get the environment variables. - block = [ key + u'=' + value for (key, value) \ - in self.get_environment_variables() ] + block = [key + "=" + value for (key, value) in self.get_environment_variables()] # Convert the data to ANSI if requested. if fUnicode is None: gst = win32.GuessStringType fUnicode = gst.t_default == gst.t_unicode if not fUnicode: - block = [x.encode('cp1252') for x in block] + block = [x.encode("cp1252") for x in block] # Return the environment data. return block @@ -1267,10 +1245,7 @@ def parse_environment_data(block): """ # Issue a deprecation warning. - warnings.warn( - "Process.parse_environment_data() is deprecated" \ - " since WinAppDbg 1.5.", - DeprecationWarning) + warnings.warn("Process.parse_environment_data() is deprecated" " since WinAppDbg 1.5.", DeprecationWarning) # Create an empty environment dictionary. environment = dict() @@ -1282,19 +1257,19 @@ def parse_environment_data(block): # Prepare the tokens (ANSI or Unicode). gst = win32.GuessStringType if type(block[0]) == gst.t_ansi: - equals = '=' - terminator = '\0' + equals = "=" + terminator = "\0" else: - equals = u'=' - terminator = u'\0' + equals = "=" + terminator = "\0" # Split the blocks into key/value pairs. for chunk in block: sep = chunk.find(equals, 1) if sep < 0: -## raise Exception() - continue # corrupted environment block? - key, value = chunk[:sep], chunk[sep+1:] + ## raise Exception() + continue # corrupted environment block? + key, value = chunk[:sep], chunk[sep + 1 :] # For duplicated keys, append the value. # Values are separated using null terminators. @@ -1306,7 +1281,7 @@ def parse_environment_data(block): # Return the environment dictionary. return environment - def get_environment(self, fUnicode = None): + def get_environment(self, fUnicode=None): """ Retrieves the environment with wich the program is running. @@ -1336,23 +1311,22 @@ def get_environment(self, fUnicode = None): gst = win32.GuessStringType fUnicode = gst.t_default == gst.t_unicode if not fUnicode: - variables = [ ( key.encode('cp1252'), value.encode('cp1252') ) \ - for (key, value) in variables ] + variables = [(key.encode("cp1252"), value.encode("cp1252")) for (key, value) in variables] # Add the variables to a dictionary, concatenating duplicates. environment = dict() for key, value in variables: if key in environment: - environment[key] = environment[key] + u'\0' + value + environment[key] = environment[key] + "\0" + value else: environment[key] = value # Return the dictionary. return environment -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def search(self, pattern, minAddr = None, maxAddr = None): + def search(self, pattern, minAddr=None, maxAddr=None): """ Search for the given pattern within the process memory. @@ -1388,13 +1362,12 @@ def search(self, pattern, minAddr = None, maxAddr = None): if isinstance(pattern, str): return self.search_bytes(pattern, minAddr, maxAddr) if isinstance(pattern, compat.unicode): - return self.search_bytes(pattern.encode("utf-16le"), - minAddr, maxAddr) + return self.search_bytes(pattern.encode("utf-16le"), minAddr, maxAddr) if isinstance(pattern, Pattern): return Search.search_process(self, pattern, minAddr, maxAddr) raise TypeError("Unknown pattern type: %r" % type(pattern)) - def search_bytes(self, bytes, minAddr = None, maxAddr = None): + def search_bytes(self, bytes, minAddr=None, maxAddr=None): """ Search for the given byte pattern within the process memory. @@ -1418,10 +1391,7 @@ def search_bytes(self, bytes, minAddr = None, maxAddr = None): for addr, size, data in matches: yield addr - def search_text(self, text, encoding = "utf-16le", - caseSensitive = False, - minAddr = None, - maxAddr = None): + def search_text(self, text, encoding="utf-16le", caseSensitive=False, minAddr=None, maxAddr=None): """ Search for the given text within the process memory. @@ -1456,10 +1426,7 @@ def search_text(self, text, encoding = "utf-16le", for addr, size, data in matches: yield addr, data - def search_regexp(self, regexp, flags = 0, - minAddr = None, - maxAddr = None, - bufferPages = -1): + def search_regexp(self, regexp, flags=0, minAddr=None, maxAddr=None, bufferPages=-1): """ Search for the given regular expression within the process memory. @@ -1500,11 +1467,9 @@ def search_regexp(self, regexp, flags = 0, process memory. """ pattern = RegExpPattern(regexp, flags) - return Search.search_process(self, pattern, - minAddr, maxAddr, - bufferPages) + return Search.search_process(self, pattern, minAddr, maxAddr, bufferPages) - def search_hexa(self, hexa, minAddr = None, maxAddr = None): + def search_hexa(self, hexa, minAddr=None, maxAddr=None): """ Search for the given hexadecimal pattern within the process memory. @@ -1541,7 +1506,7 @@ def search_hexa(self, hexa, minAddr = None, maxAddr = None): for addr, size, data in matches: yield addr, data - def strings(self, minSize = 4, maxSize = 1024): + def strings(self, minSize=4, maxSize=1024): """ Extract ASCII strings from the process memory. @@ -1558,10 +1523,9 @@ def strings(self, minSize = 4, maxSize = 1024): - The size of the string. - The string. """ - return Search.extract_ascii_strings(self, minSize = minSize, - maxSize = maxSize) + return Search.extract_ascii_strings(self, minSize=minSize, maxSize=maxSize) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def __read_c_type(self, address, format, c_type): size = ctypes.sizeof(c_type) @@ -1571,7 +1535,7 @@ def __read_c_type(self, address, format, c_type): return struct.unpack(format, packed)[0] def __write_c_type(self, address, format, unpacked): - packed = struct.pack('@L', unpacked) + packed = struct.pack("@L", unpacked) self.write(address, packed) # XXX TODO @@ -1593,8 +1557,7 @@ def read(self, lpBaseAddress, nSize): @raise WindowsError: On error an exception is raised. """ - hProcess = self.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) + hProcess = self.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) if not self.is_buffer(lpBaseAddress, nSize): raise ctypes.WinError(win32.ERROR_INVALID_ADDRESS) data = win32.ReadProcessMemory(hProcess, lpBaseAddress, nSize) @@ -1636,7 +1599,7 @@ def read_char(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return ord( self.read(lpBaseAddress, 1) ) + return ord(self.read(lpBaseAddress, 1)) def write_char(self, lpBaseAddress, char): """ @@ -1670,7 +1633,7 @@ def read_int(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, compat.b('@l'), ctypes.c_int) + return self.__read_c_type(lpBaseAddress, compat.b("@l"), ctypes.c_int) def write_int(self, lpBaseAddress, unpackedValue): """ @@ -1688,7 +1651,7 @@ def write_int(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '@l', unpackedValue) + self.__write_c_type(lpBaseAddress, "@l", unpackedValue) def read_uint(self, lpBaseAddress): """ @@ -1704,7 +1667,7 @@ def read_uint(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '@L', ctypes.c_uint) + return self.__read_c_type(lpBaseAddress, "@L", ctypes.c_uint) def write_uint(self, lpBaseAddress, unpackedValue): """ @@ -1722,7 +1685,7 @@ def write_uint(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '@L', unpackedValue) + self.__write_c_type(lpBaseAddress, "@L", unpackedValue) def read_float(self, lpBaseAddress): """ @@ -1738,7 +1701,7 @@ def read_float(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '@f', ctypes.c_float) + return self.__read_c_type(lpBaseAddress, "@f", ctypes.c_float) def write_float(self, lpBaseAddress, unpackedValue): """ @@ -1756,7 +1719,7 @@ def write_float(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '@f', unpackedValue) + self.__write_c_type(lpBaseAddress, "@f", unpackedValue) def read_double(self, lpBaseAddress): """ @@ -1772,7 +1735,7 @@ def read_double(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '@d', ctypes.c_double) + return self.__read_c_type(lpBaseAddress, "@d", ctypes.c_double) def write_double(self, lpBaseAddress, unpackedValue): """ @@ -1790,7 +1753,7 @@ def write_double(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '@d', unpackedValue) + self.__write_c_type(lpBaseAddress, "@d", unpackedValue) def read_pointer(self, lpBaseAddress): """ @@ -1806,7 +1769,7 @@ def read_pointer(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '@P', ctypes.c_void_p) + return self.__read_c_type(lpBaseAddress, "@P", ctypes.c_void_p) def write_pointer(self, lpBaseAddress, unpackedValue): """ @@ -1824,7 +1787,7 @@ def write_pointer(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '@P', unpackedValue) + self.__write_c_type(lpBaseAddress, "@P", unpackedValue) def read_dword(self, lpBaseAddress): """ @@ -1840,7 +1803,7 @@ def read_dword(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '=L', win32.DWORD) + return self.__read_c_type(lpBaseAddress, "=L", win32.DWORD) def write_dword(self, lpBaseAddress, unpackedValue): """ @@ -1858,7 +1821,7 @@ def write_dword(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '=L', unpackedValue) + self.__write_c_type(lpBaseAddress, "=L", unpackedValue) def read_qword(self, lpBaseAddress): """ @@ -1874,7 +1837,7 @@ def read_qword(self, lpBaseAddress): @raise WindowsError: On error an exception is raised. """ - return self.__read_c_type(lpBaseAddress, '=Q', win32.QWORD) + return self.__read_c_type(lpBaseAddress, "=Q", win32.QWORD) def write_qword(self, lpBaseAddress, unpackedValue): """ @@ -1892,7 +1855,7 @@ def write_qword(self, lpBaseAddress, unpackedValue): @raise WindowsError: On error an exception is raised. """ - self.__write_c_type(lpBaseAddress, '=Q', unpackedValue) + self.__write_c_type(lpBaseAddress, "=Q", unpackedValue) def read_structure(self, lpBaseAddress, stype): """ @@ -1916,36 +1879,36 @@ def read_structure(self, lpBaseAddress, stype): lpBaseAddress = ctypes.cast(lpBaseAddress, ctypes.c_void_p) data = self.read(lpBaseAddress, ctypes.sizeof(stype)) buff = ctypes.create_string_buffer(data) - ptr = ctypes.cast(ctypes.pointer(buff), ctypes.POINTER(stype)) + ptr = ctypes.cast(ctypes.pointer(buff), ctypes.POINTER(stype)) return ptr.contents -# XXX TODO -## def write_structure(self, lpBaseAddress, sStructure): -## """ -## Writes a ctypes structure into the memory of the process. -## -## @note: Page permissions may be changed temporarily while writing. -## -## @see: L{write} -## -## @type lpBaseAddress: int -## @param lpBaseAddress: Memory address to begin writing. -## -## @type sStructure: ctypes.Structure or a subclass' instance. -## @param sStructure: Structure definition. -## -## @rtype: int -## @return: Structure instance filled in with data -## read from the process memory. -## -## @raise WindowsError: On error an exception is raised. -## """ -## size = ctypes.sizeof(sStructure) -## data = ctypes.create_string_buffer("", size = size) -## win32.CopyMemory(ctypes.byref(data), ctypes.byref(sStructure), size) -## self.write(lpBaseAddress, data.raw) - - def read_string(self, lpBaseAddress, nChars, fUnicode = False): + # XXX TODO + ## def write_structure(self, lpBaseAddress, sStructure): + ## """ + ## Writes a ctypes structure into the memory of the process. + ## + ## @note: Page permissions may be changed temporarily while writing. + ## + ## @see: L{write} + ## + ## @type lpBaseAddress: int + ## @param lpBaseAddress: Memory address to begin writing. + ## + ## @type sStructure: ctypes.Structure or a subclass' instance. + ## @param sStructure: Structure definition. + ## + ## @rtype: int + ## @return: Structure instance filled in with data + ## read from the process memory. + ## + ## @raise WindowsError: On error an exception is raised. + ## """ + ## size = ctypes.sizeof(sStructure) + ## data = ctypes.create_string_buffer("", size = size) + ## win32.CopyMemory(ctypes.byref(data), ctypes.byref(sStructure), size) + ## self.write(lpBaseAddress, data.raw) + + def read_string(self, lpBaseAddress, nChars, fUnicode=False): """ Reads an ASCII or Unicode string from the address space of the process. @@ -1972,23 +1935,23 @@ def read_string(self, lpBaseAddress, nChars, fUnicode = False): nChars = nChars * 2 szString = self.read(lpBaseAddress, nChars) if fUnicode: - szString = compat.unicode(szString, 'U16', 'ignore') + szString = compat.unicode(szString, "U16", "ignore") return szString -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # FIXME this won't work properly with a different endianness! def __peek_c_type(self, address, format, c_type): size = ctypes.sizeof(c_type) packed = self.peek(address, size) if len(packed) < size: - packed = '\0' * (size - len(packed)) + packed + packed = "\0" * (size - len(packed)) + packed elif len(packed) > size: packed = packed[:size] return struct.unpack(format, packed)[0] def __poke_c_type(self, address, format, unpacked): - packed = struct.pack('@L', unpacked) + packed = struct.pack("@L", unpacked) return self.poke(address, packed) def peek(self, lpBaseAddress, nSize): @@ -2011,25 +1974,20 @@ def peek(self, lpBaseAddress, nSize): # + Maybe change page permissions before trying to read? # + Maybe use mquery instead of get_memory_map? # (less syscalls if we break out of the loop earlier) - data = '' + data = "" if nSize > 0: try: - hProcess = self.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) - for mbi in self.get_memory_map(lpBaseAddress, - lpBaseAddress + nSize): + hProcess = self.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) + for mbi in self.get_memory_map(lpBaseAddress, lpBaseAddress + nSize): if not mbi.is_readable(): nSize = mbi.BaseAddress - lpBaseAddress break if nSize > 0: - data = win32.ReadProcessMemory( - hProcess, lpBaseAddress, nSize) + data = win32.ReadProcessMemory(hProcess, lpBaseAddress, nSize) except WindowsError: e = sys.exc_info()[1] msg = "Error reading process %d address %s: %s" - msg %= (self.get_pid(), - HexDump.address(lpBaseAddress), - e.strerror) + msg %= (self.get_pid(), HexDump.address(lpBaseAddress), e.strerror) warnings.warn(msg) return data @@ -2052,9 +2010,7 @@ def poke(self, lpBaseAddress, lpBuffer): May be less than the number of bytes to write. """ assert isinstance(lpBuffer, compat.bytes) - hProcess = self.get_handle( win32.PROCESS_VM_WRITE | - win32.PROCESS_VM_OPERATION | - win32.PROCESS_QUERY_INFORMATION ) + hProcess = self.get_handle(win32.PROCESS_VM_WRITE | win32.PROCESS_VM_OPERATION | win32.PROCESS_QUERY_INFORMATION) mbi = self.mquery(lpBaseAddress) if not mbi.has_content(): raise ctypes.WinError(win32.ERROR_INVALID_ADDRESS) @@ -2071,11 +2027,8 @@ def poke(self, lpBaseAddress, lpBuffer): self.mprotect(lpBaseAddress, len(lpBuffer), prot) except Exception: prot = None - msg = ("Failed to adjust page permissions" - " for process %s at address %s: %s") - msg = msg % (self.get_pid(), - HexDump.address(lpBaseAddress, self.get_bits()), - traceback.format_exc()) + msg = "Failed to adjust page permissions" " for process %s at address %s: %s" + msg = msg % (self.get_pid(), HexDump.address(lpBaseAddress, self.get_bits()), traceback.format_exc()) warnings.warn(msg, RuntimeWarning) try: r = win32.WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer) @@ -2135,7 +2088,7 @@ def peek_int(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '@l', ctypes.c_int) + return self.__peek_c_type(lpBaseAddress, "@l", ctypes.c_int) def poke_int(self, lpBaseAddress, unpackedValue): """ @@ -2155,7 +2108,7 @@ def poke_int(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '@l', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "@l", unpackedValue) def peek_uint(self, lpBaseAddress): """ @@ -2170,7 +2123,7 @@ def peek_uint(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '@L', ctypes.c_uint) + return self.__peek_c_type(lpBaseAddress, "@L", ctypes.c_uint) def poke_uint(self, lpBaseAddress, unpackedValue): """ @@ -2190,7 +2143,7 @@ def poke_uint(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '@L', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "@L", unpackedValue) def peek_float(self, lpBaseAddress): """ @@ -2205,7 +2158,7 @@ def peek_float(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '@f', ctypes.c_float) + return self.__peek_c_type(lpBaseAddress, "@f", ctypes.c_float) def poke_float(self, lpBaseAddress, unpackedValue): """ @@ -2225,7 +2178,7 @@ def poke_float(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '@f', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "@f", unpackedValue) def peek_double(self, lpBaseAddress): """ @@ -2240,7 +2193,7 @@ def peek_double(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '@d', ctypes.c_double) + return self.__peek_c_type(lpBaseAddress, "@d", ctypes.c_double) def poke_double(self, lpBaseAddress, unpackedValue): """ @@ -2260,7 +2213,7 @@ def poke_double(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '@d', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "@d", unpackedValue) def peek_dword(self, lpBaseAddress): """ @@ -2275,7 +2228,7 @@ def peek_dword(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '=L', win32.DWORD) + return self.__peek_c_type(lpBaseAddress, "=L", win32.DWORD) def poke_dword(self, lpBaseAddress, unpackedValue): """ @@ -2295,7 +2248,7 @@ def poke_dword(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '=L', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "=L", unpackedValue) def peek_qword(self, lpBaseAddress): """ @@ -2310,7 +2263,7 @@ def peek_qword(self, lpBaseAddress): @return: Integer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '=Q', win32.QWORD) + return self.__peek_c_type(lpBaseAddress, "=Q", win32.QWORD) def poke_qword(self, lpBaseAddress, unpackedValue): """ @@ -2330,7 +2283,7 @@ def poke_qword(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '=Q', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "=Q", unpackedValue) def peek_pointer(self, lpBaseAddress): """ @@ -2345,7 +2298,7 @@ def peek_pointer(self, lpBaseAddress): @return: Pointer value read from the process memory. Returns zero on error. """ - return self.__peek_c_type(lpBaseAddress, '@P', ctypes.c_void_p) + return self.__peek_c_type(lpBaseAddress, "@P", ctypes.c_void_p) def poke_pointer(self, lpBaseAddress, unpackedValue): """ @@ -2365,9 +2318,9 @@ def poke_pointer(self, lpBaseAddress, unpackedValue): @return: Number of bytes written. May be less than the number of bytes to write. """ - return self.__poke_c_type(lpBaseAddress, '@P', unpackedValue) + return self.__poke_c_type(lpBaseAddress, "@P", unpackedValue) - def peek_string(self, lpBaseAddress, fUnicode = False, dwMaxSize = 0x1000): + def peek_string(self, lpBaseAddress, fUnicode=False, dwMaxSize=0x1000): """ Tries to read an ASCII or Unicode string from the address space of the process. @@ -2393,8 +2346,8 @@ def peek_string(self, lpBaseAddress, fUnicode = False, dwMaxSize = 0x1000): # Validate the parameters. if not lpBaseAddress or dwMaxSize == 0: if fUnicode: - return u'' - return '' + return "" + return "" if not dwMaxSize: dwMaxSize = 0x1000 @@ -2403,31 +2356,29 @@ def peek_string(self, lpBaseAddress, fUnicode = False, dwMaxSize = 0x1000): # If the string is Unicode... if fUnicode: - # Decode the string. - szString = compat.unicode(szString, 'U16', 'replace') -## try: -## szString = compat.unicode(szString, 'U16') -## except UnicodeDecodeError: -## szString = struct.unpack('H' * (len(szString) / 2), szString) -## szString = [ unichr(c) for c in szString ] -## szString = u''.join(szString) + szString = compat.unicode(szString, "U16", "replace") + ## try: + ## szString = compat.unicode(szString, 'U16') + ## except UnicodeDecodeError: + ## szString = struct.unpack('H' * (len(szString) / 2), szString) + ## szString = [ unichr(c) for c in szString ] + ## szString = u''.join(szString) # Truncate the string when the first null char is found. - szString = szString[ : szString.find(u'\0') ] + szString = szString[: szString.find("\0")] # If the string is ANSI... else: - # Truncate the string when the first null char is found. - szString = szString[ : szString.find('\0') ] + szString = szString[: szString.find("\0")] # Return the decoded string. return szString # TODO # try to avoid reading the same page twice by caching it - def peek_pointers_in_data(self, data, peekSize = 16, peekStep = 1): + def peek_pointers_in_data(self, data, peekSize=16, peekStep=1): """ Tries to guess which values in the given data are valid pointers, and reads some data from them. @@ -2452,23 +2403,23 @@ def peek_pointers_in_data(self, data, peekSize = 16, peekStep = 1): result = dict() ptrSize = win32.sizeof(win32.LPVOID) if ptrSize == 4: - ptrFmt = ' 0: for i in compat.xrange(0, len(data), peekStep): - packed = data[i:i+ptrSize] + packed = data[i : i + ptrSize] if len(packed) == ptrSize: - address = struct.unpack(ptrFmt, packed)[0] -## if not address & (~0xFFFF): continue - peek_data = self.peek(address, peekSize) + address = struct.unpack(ptrFmt, packed)[0] + ## if not address & (~0xFFFF): continue + peek_data = self.peek(address, peekSize) if peek_data: result[i] = peek_data return result -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def malloc(self, dwSize, lpAddress = None): + def malloc(self, dwSize, lpAddress=None): """ Allocates memory into the address space of the process. @@ -2547,7 +2498,7 @@ def free(self, lpAddress): hProcess = self.get_handle(win32.PROCESS_VM_OPERATION) win32.VirtualFreeEx(hProcess, lpAddress) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_pointer(self, address): """ @@ -3031,7 +2982,7 @@ def is_buffer_executable_and_writeable(self, address, size): size = size - mbi.RegionSize return True - def get_memory_map(self, minAddr = None, maxAddr = None): + def get_memory_map(self, minAddr=None, maxAddr=None): """ Produces a memory map to the process address space. @@ -3050,7 +3001,7 @@ def get_memory_map(self, minAddr = None, maxAddr = None): """ return list(self.iter_memory_map(minAddr, maxAddr)) - def generate_memory_map(self, minAddr = None, maxAddr = None): + def generate_memory_map(self, minAddr=None, maxAddr=None): """ Returns a L{Regenerator} that can iterate indefinitely over the memory map to the process address space. @@ -3070,7 +3021,7 @@ def generate_memory_map(self, minAddr = None, maxAddr = None): """ return Regenerator(self.iter_memory_map, minAddr, maxAddr) - def iter_memory_map(self, minAddr = None, maxAddr = None): + def iter_memory_map(self, minAddr=None, maxAddr=None): """ Produces an iterator over the memory map to the process address space. @@ -3087,8 +3038,8 @@ def iter_memory_map(self, minAddr = None, maxAddr = None): @rtype: iterator of L{win32.MemoryBasicInformation} @return: List of memory region information objects. """ - minAddr, maxAddr = MemoryAddresses.align_address_range(minAddr,maxAddr) - prevAddr = minAddr - 1 + minAddr, maxAddr = MemoryAddresses.align_address_range(minAddr, maxAddr) + prevAddr = minAddr - 1 currentAddr = minAddr while prevAddr < currentAddr < maxAddr: try: @@ -3099,10 +3050,10 @@ def iter_memory_map(self, minAddr = None, maxAddr = None): break raise yield mbi - prevAddr = currentAddr + prevAddr = currentAddr currentAddr = mbi.BaseAddress + mbi.RegionSize - def get_mapped_filenames(self, memoryMap = None): + def get_mapped_filenames(self, memoryMap=None): """ Retrieves the filenames for memory mapped files in the debugee. @@ -3114,8 +3065,7 @@ def get_mapped_filenames(self, memoryMap = None): @return: Dictionary mapping memory addresses to file names. Native filenames are converted to Win32 filenames when possible. """ - hProcess = self.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) + hProcess = self.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) if not memoryMap: memoryMap = self.get_memory_map() mappedFilenames = dict() @@ -3123,24 +3073,24 @@ def get_mapped_filenames(self, memoryMap = None): if mbi.Type not in (win32.MEM_IMAGE, win32.MEM_MAPPED): continue baseAddress = mbi.BaseAddress - fileName = "" + fileName = "" try: fileName = win32.GetMappedFileName(hProcess, baseAddress) fileName = PathOperations.native_to_win32_pathname(fileName) except WindowsError: - #e = sys.exc_info()[1] - #try: + # e = sys.exc_info()[1] + # try: # msg = "Can't get mapped file name at address %s in process " \ # "%d, reason: %s" % (HexDump.address(baseAddress), # self.get_pid(), # e.strerror) # warnings.warn(msg, Warning) - #except Exception: + # except Exception: pass mappedFilenames[baseAddress] = fileName return mappedFilenames - def generate_memory_snapshot(self, minAddr = None, maxAddr = None): + def generate_memory_snapshot(self, minAddr=None, maxAddr=None): """ Returns a L{Regenerator} that allows you to iterate through the memory contents of a process indefinitely. @@ -3185,7 +3135,7 @@ def generate_memory_snapshot(self, minAddr = None, maxAddr = None): """ return Regenerator(self.iter_memory_snapshot, minAddr, maxAddr) - def iter_memory_snapshot(self, minAddr = None, maxAddr = None): + def iter_memory_snapshot(self, minAddr=None, maxAddr=None): """ Returns an iterator that allows you to go through the memory contents of a process. @@ -3257,7 +3207,7 @@ def iter_memory_snapshot(self, minAddr = None, maxAddr = None): minAddr = MemoryAddresses.align_address_to_page_start(minAddr) mbi = memory[0] if mbi.BaseAddress < minAddr: - mbi.RegionSize = mbi.BaseAddress + mbi.RegionSize - minAddr + mbi.RegionSize = mbi.BaseAddress + mbi.RegionSize - minAddr mbi.BaseAddress = minAddr # Trim the last memory information block if needed. @@ -3270,7 +3220,7 @@ def iter_memory_snapshot(self, minAddr = None, maxAddr = None): # Read the contents of each block and yield it. while memory: - mbi = memory.pop(0) # so the garbage collector can take it + mbi = memory.pop(0) # so the garbage collector can take it mbi.filename = filenames.get(mbi.BaseAddress, None) if mbi.has_content(): mbi.content = self.read(mbi.BaseAddress, mbi.RegionSize) @@ -3278,7 +3228,7 @@ def iter_memory_snapshot(self, minAddr = None, maxAddr = None): mbi.content = None yield mbi - def take_memory_snapshot(self, minAddr = None, maxAddr = None): + def take_memory_snapshot(self, minAddr=None, maxAddr=None): """ Takes a snapshot of the memory contents of the process. @@ -3316,11 +3266,9 @@ def take_memory_snapshot(self, minAddr = None, maxAddr = None): - C{filename}: Mapped filename, or C{None}. - C{content}: Memory contents, or C{None}. """ - return list( self.iter_memory_snapshot(minAddr, maxAddr) ) + return list(self.iter_memory_snapshot(minAddr, maxAddr)) - def restore_memory_snapshot(self, snapshot, - bSkipMappedFiles = True, - bSkipOnError = False): + def restore_memory_snapshot(self, snapshot, bSkipMappedFiles=True, bSkipOnError=False): """ Attempts to restore the memory state as it was when the given snapshot was taken. @@ -3352,42 +3300,34 @@ def restore_memory_snapshot(self, snapshot, @raise RuntimeError: An error occured while restoring the snapshot. @raise TypeError: A snapshot of the wrong type was passed. """ - if not snapshot or not isinstance(snapshot, list) \ - or not isinstance(snapshot[0], win32.MemoryBasicInformation): - raise TypeError( "Only snapshots returned by " \ - "take_memory_snapshot() can be used here." ) + if not snapshot or not isinstance(snapshot, list) or not isinstance(snapshot[0], win32.MemoryBasicInformation): + raise TypeError("Only snapshots returned by " "take_memory_snapshot() can be used here.") # Get the process handle. - hProcess = self.get_handle( win32.PROCESS_VM_WRITE | - win32.PROCESS_VM_OPERATION | - win32.PROCESS_SUSPEND_RESUME | - win32.PROCESS_QUERY_INFORMATION ) + hProcess = self.get_handle( + win32.PROCESS_VM_WRITE | win32.PROCESS_VM_OPERATION | win32.PROCESS_SUSPEND_RESUME | win32.PROCESS_QUERY_INFORMATION + ) # Freeze the process. self.suspend() try: - # For each memory region in the snapshot... for old_mbi in snapshot: - # If the region matches, restore it directly. new_mbi = self.mquery(old_mbi.BaseAddress) - if new_mbi.BaseAddress == old_mbi.BaseAddress and \ - new_mbi.RegionSize == old_mbi.RegionSize: - self.__restore_mbi(hProcess, new_mbi, old_mbi, - bSkipMappedFiles) + if new_mbi.BaseAddress == old_mbi.BaseAddress and new_mbi.RegionSize == old_mbi.RegionSize: + self.__restore_mbi(hProcess, new_mbi, old_mbi, bSkipMappedFiles) # If the region doesn't match, restore it page by page. else: - # We need a copy so we don't corrupt the snapshot. old_mbi = win32.MemoryBasicInformation(old_mbi) # Get the overlapping range of pages. old_start = old_mbi.BaseAddress - old_end = old_start + old_mbi.RegionSize + old_end = old_start + old_mbi.RegionSize new_start = new_mbi.BaseAddress - new_end = new_start + new_mbi.RegionSize + new_end = new_start + new_mbi.RegionSize if old_start > new_start: start = old_start else: @@ -3405,114 +3345,83 @@ def restore_memory_snapshot(self, snapshot, while address < end: old_mbi.BaseAddress = address new_mbi.BaseAddress = address - self.__restore_mbi(hProcess, new_mbi, old_mbi, - bSkipMappedFiles, bSkipOnError) + self.__restore_mbi(hProcess, new_mbi, old_mbi, bSkipMappedFiles, bSkipOnError) address = address + step # Resume execution. finally: self.resume() - def __restore_mbi(self, hProcess, new_mbi, old_mbi, bSkipMappedFiles, - bSkipOnError): + def __restore_mbi(self, hProcess, new_mbi, old_mbi, bSkipMappedFiles, bSkipOnError): """ Used internally by L{restore_memory_snapshot}. """ -## print "Restoring %s-%s" % ( -## HexDump.address(old_mbi.BaseAddress, self.get_bits()), -## HexDump.address(old_mbi.BaseAddress + old_mbi.RegionSize, -## self.get_bits())) + ## print "Restoring %s-%s" % ( + ## HexDump.address(old_mbi.BaseAddress, self.get_bits()), + ## HexDump.address(old_mbi.BaseAddress + old_mbi.RegionSize, + ## self.get_bits())) try: - # Restore the region state. if new_mbi.State != old_mbi.State: if new_mbi.is_free(): if old_mbi.is_reserved(): - # Free -> Reserved - address = win32.VirtualAllocEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_RESERVE, - old_mbi.Protect) + address = win32.VirtualAllocEx( + hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_RESERVE, old_mbi.Protect + ) if address != old_mbi.BaseAddress: self.free(address) msg = "Error restoring region at address %s" - msg = msg % HexDump(old_mbi.BaseAddress, - self.get_bits()) + msg = msg % HexDump(old_mbi.BaseAddress, self.get_bits()) raise RuntimeError(msg) # permissions already restored new_mbi.Protect = old_mbi.Protect - else: # elif old_mbi.is_commited(): - + else: # elif old_mbi.is_commited(): # Free -> Commited - address = win32.VirtualAllocEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_RESERVE | \ - win32.MEM_COMMIT, - old_mbi.Protect) + address = win32.VirtualAllocEx( + hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_RESERVE | win32.MEM_COMMIT, old_mbi.Protect + ) if address != old_mbi.BaseAddress: self.free(address) msg = "Error restoring region at address %s" - msg = msg % HexDump(old_mbi.BaseAddress, - self.get_bits()) + msg = msg % HexDump(old_mbi.BaseAddress, self.get_bits()) raise RuntimeError(msg) # permissions already restored new_mbi.Protect = old_mbi.Protect elif new_mbi.is_reserved(): if old_mbi.is_commited(): - # Reserved -> Commited - address = win32.VirtualAllocEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_COMMIT, - old_mbi.Protect) + address = win32.VirtualAllocEx(hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_COMMIT, old_mbi.Protect) if address != old_mbi.BaseAddress: self.free(address) msg = "Error restoring region at address %s" - msg = msg % HexDump(old_mbi.BaseAddress, - self.get_bits()) + msg = msg % HexDump(old_mbi.BaseAddress, self.get_bits()) raise RuntimeError(msg) # permissions already restored new_mbi.Protect = old_mbi.Protect - else: # elif old_mbi.is_free(): - + else: # elif old_mbi.is_free(): # Reserved -> Free - win32.VirtualFreeEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_RELEASE) + win32.VirtualFreeEx(hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_RELEASE) - else: # elif new_mbi.is_commited(): + else: # elif new_mbi.is_commited(): if old_mbi.is_reserved(): - # Commited -> Reserved - win32.VirtualFreeEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_DECOMMIT) - - else: # elif old_mbi.is_free(): + win32.VirtualFreeEx(hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_DECOMMIT) + else: # elif old_mbi.is_free(): # Commited -> Free - win32.VirtualFreeEx(hProcess, - old_mbi.BaseAddress, - old_mbi.RegionSize, - win32.MEM_DECOMMIT | win32.MEM_RELEASE) + win32.VirtualFreeEx(hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, win32.MEM_DECOMMIT | win32.MEM_RELEASE) new_mbi.State = old_mbi.State # Restore the region permissions. if old_mbi.is_commited() and old_mbi.Protect != new_mbi.Protect: - win32.VirtualProtectEx(hProcess, old_mbi.BaseAddress, - old_mbi.RegionSize, old_mbi.Protect) + win32.VirtualProtectEx(hProcess, old_mbi.BaseAddress, old_mbi.RegionSize, old_mbi.Protect) new_mbi.Protect = old_mbi.Protect # Restore the region data. @@ -3530,14 +3439,12 @@ def __restore_mbi(self, hProcess, new_mbi, old_mbi, bSkipMappedFiles, if not bSkipOnError: raise msg = "Error restoring region at address %s: %s" - msg = msg % ( - HexDump(old_mbi.BaseAddress, self.get_bits()), - traceback.format_exc()) + msg = msg % (HexDump(old_mbi.BaseAddress, self.get_bits()), traceback.format_exc()) warnings.warn(msg, RuntimeWarning) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def inject_code(self, payload, lpParameter = 0): + def inject_code(self, payload, lpParameter=0): """ Injects relocatable code into the process memory and executes it. @@ -3560,20 +3467,18 @@ def inject_code(self, payload, lpParameter = 0): """ # Uncomment for debugging... -## payload = '\xCC' + payload + ## payload = '\xCC' + payload # Allocate the memory for the shellcode. lpStartAddress = self.malloc(len(payload)) # Catch exceptions so we can free the memory on error. try: - # Write the shellcode to our memory location. self.write(lpStartAddress, payload) # Start a new thread for the shellcode to run. - aThread = self.start_thread(lpStartAddress, lpParameter, - bSuspended = False) + aThread = self.start_thread(lpStartAddress, lpParameter, bSuspended=False) # Remember the shellcode address. # It will be freed ONLY by the Thread.kill() method @@ -3594,8 +3499,7 @@ def inject_code(self, payload, lpParameter = 0): # The shellcode should check for errors, otherwise it just crashes # when the DLL can't be loaded or the procedure can't be found. # On error the shellcode should execute an int3 instruction. - def inject_dll(self, dllname, procname = None, lpParameter = 0, - bWait = True, dwTimeout = None): + def inject_dll(self, dllname, procname=None, lpParameter=0, bWait=True, dwTimeout=None): """ Injects a DLL into the process memory. @@ -3652,13 +3556,12 @@ def inject_dll(self, dllname, procname = None, lpParameter = 0, """ # Resolve kernel32.dll - aModule = self.get_module_by_name(compat.b('kernel32.dll')) + aModule = self.get_module_by_name(compat.b("kernel32.dll")) if aModule is None: self.scan_modules() - aModule = self.get_module_by_name(compat.b('kernel32.dll')) + aModule = self.get_module_by_name(compat.b("kernel32.dll")) if aModule is None: - raise RuntimeError( - "Cannot resolve kernel32.dll in the remote process") + raise RuntimeError("Cannot resolve kernel32.dll in the remote process") # Old method, using shellcode. if procname: @@ -3667,88 +3570,81 @@ def inject_dll(self, dllname, procname = None, lpParameter = 0, dllname = compat.b(dllname) # Resolve kernel32.dll!LoadLibraryA - pllib = aModule.resolve(compat.b('LoadLibraryA')) + pllib = aModule.resolve(compat.b("LoadLibraryA")) if not pllib: - raise RuntimeError( - "Cannot resolve kernel32.dll!LoadLibraryA" - " in the remote process") + raise RuntimeError("Cannot resolve kernel32.dll!LoadLibraryA" " in the remote process") # Resolve kernel32.dll!GetProcAddress - pgpad = aModule.resolve(compat.b('GetProcAddress')) + pgpad = aModule.resolve(compat.b("GetProcAddress")) if not pgpad: - raise RuntimeError( - "Cannot resolve kernel32.dll!GetProcAddress" - " in the remote process") + raise RuntimeError("Cannot resolve kernel32.dll!GetProcAddress" " in the remote process") # Resolve kernel32.dll!VirtualFree - pvf = aModule.resolve(compat.b('VirtualFree')) + pvf = aModule.resolve(compat.b("VirtualFree")) if not pvf: - raise RuntimeError( - "Cannot resolve kernel32.dll!VirtualFree" - " in the remote process") + raise RuntimeError("Cannot resolve kernel32.dll!VirtualFree" " in the remote process") # Shellcode follows... - code = compat.b('') + code = compat.b("") # push dllname - code += compat.b('\xe8') + struct.pack('= 2 and bAllowElevation: - pi = win32.CreateProcess(None, lpCmdLine, - bInheritHandles = bInheritHandles, - dwCreationFlags = dwCreationFlags, - lpStartupInfo = lpStartupInfo) + pi = win32.CreateProcess( + None, lpCmdLine, bInheritHandles=bInheritHandles, dwCreationFlags=dwCreationFlags, lpStartupInfo=lpStartupInfo + ) # Create the process the hard way... else: - # If we allow elevation, use the current process token. # If not, get the token from the current shell process. hToken = None try: if not bAllowElevation: if bFollow: - msg = ( - "Child processes can't be autofollowed" - " when dropping UAC elevation.") + msg = "Child processes can't be autofollowed" " when dropping UAC elevation." raise NotImplementedError(msg) if bConsole: - msg = ( - "Child processes can't inherit the debugger's" - " console when dropping UAC elevation.") + msg = "Child processes can't inherit the debugger's" " console when dropping UAC elevation." raise NotImplementedError(msg) if bInheritHandles: - msg = ( - "Child processes can't inherit the debugger's" - " handles when dropping UAC elevation.") + msg = "Child processes can't inherit the debugger's" " handles when dropping UAC elevation." raise NotImplementedError(msg) try: hWnd = self.get_shell_window() @@ -4308,8 +4178,7 @@ def start_process(self, lpCmdLine, **kwargs): hWnd = self.get_desktop_window() shell = hWnd.get_process() try: - hShell = shell.get_handle( - win32.PROCESS_QUERY_INFORMATION) + hShell = shell.get_handle(win32.PROCESS_QUERY_INFORMATION) with win32.OpenProcessToken(hShell) as hShellToken: hToken = win32.DuplicateTokenEx(hShellToken) finally: @@ -4321,9 +4190,8 @@ def start_process(self, lpCmdLine, **kwargs): dwLevelId = win32.SAFER_LEVELID_NORMALUSER else: dwLevelId = win32.SAFER_LEVELID_UNTRUSTED - with win32.SaferCreateLevel(dwLevelId = dwLevelId) as hSafer: - hSaferToken = win32.SaferComputeTokenFromLevel( - hSafer, hToken)[0] + with win32.SaferCreateLevel(dwLevelId=dwLevelId) as hSafer: + hSaferToken = win32.SaferComputeTokenFromLevel(hSafer, hToken)[0] try: if hToken is not None: hToken.close() @@ -4335,11 +4203,12 @@ def start_process(self, lpCmdLine, **kwargs): # If we have a computed token, call CreateProcessAsUser(). if bAllowElevation: pi = win32.CreateProcessAsUser( - hToken = hToken, - lpCommandLine = lpCmdLine, - bInheritHandles = bInheritHandles, - dwCreationFlags = dwCreationFlags, - lpStartupInfo = lpStartupInfo) + hToken=hToken, + lpCommandLine=lpCmdLine, + bInheritHandles=bInheritHandles, + dwCreationFlags=dwCreationFlags, + lpStartupInfo=lpStartupInfo, + ) # If we have a primary token call CreateProcessWithToken(). # The problem is, there are many flags CreateProcess() and @@ -4347,7 +4216,6 @@ def start_process(self, lpCmdLine, **kwargs): # and CreateProcessWithLogonW() don't, so we need to work # around them. else: - # Remove the debug flags. dwCreationFlags &= ~win32.DEBUG_PROCESS dwCreationFlags &= ~win32.DEBUG_ONLY_THIS_PROCESS @@ -4360,11 +4228,12 @@ def start_process(self, lpCmdLine, **kwargs): # Create the process using the new primary token. pi = win32.CreateProcessWithToken( - hToken = hToken, - dwLogonFlags = win32.LOGON_WITH_PROFILE, - lpCommandLine = lpCmdLine, - dwCreationFlags = dwCreationFlags, - lpStartupInfo = lpStartupInfo) + hToken=hToken, + dwLogonFlags=win32.LOGON_WITH_PROFILE, + lpCommandLine=lpCmdLine, + dwCreationFlags=dwCreationFlags, + lpStartupInfo=lpStartupInfo, + ) # Attach as a debugger, if requested. if bDebug: @@ -4382,7 +4251,7 @@ def start_process(self, lpCmdLine, **kwargs): # Wrap the new process and thread in Process and Thread objects, # and add them to the corresponding snapshots. aProcess = Process(pi.dwProcessId, pi.hProcess) - aThread = Thread (pi.dwThreadId, pi.hThread) + aThread = Thread(pi.dwThreadId, pi.hThread) aProcess._add_thread(aThread) self._add_process(aProcess) @@ -4412,15 +4281,15 @@ def get_explorer_pid(self): except Exception: exp = None if not exp: - exp = os.getenv('SystemRoot') + exp = os.getenv("SystemRoot") if exp: - exp = os.path.join(exp, 'explorer.exe') + exp = os.path.join(exp, "explorer.exe") exp_list = self.find_processes_by_filename(exp) if exp_list: return exp_list[0][0].get_pid() return None -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX this methods musn't end up calling __initialize_snapshot by accident! @@ -4441,13 +4310,11 @@ def scan(self): has_threads = True try: try: - # Try using the Toolhelp API # to scan for processes and threads. self.scan_processes_and_threads() except Exception: - # On error, try using the PSAPI to scan for process IDs only. self.scan_processes_fast() @@ -4460,7 +4327,6 @@ def scan(self): has_threads = False finally: - # Try using the Remote Desktop API to scan for processes only. # This will update the filenames when it's not possible # to obtain them from the Toolhelp API. @@ -4494,8 +4360,8 @@ def scan_processes_and_threads(self): # since this information resides in usermode space. # See: http://www.ragestorm.net/blogs/?p=163 - our_pid = win32.GetCurrentProcessId() - dead_pids = set( compat.iterkeys(self.__processDict) ) + our_pid = win32.GetCurrentProcessId() + dead_pids = set(compat.iterkeys(self.__processDict)) found_tids = set() # Ignore our own process if it's in the snapshot for some reason @@ -4503,9 +4369,8 @@ def scan_processes_and_threads(self): dead_pids.remove(our_pid) # Take a snapshot of all processes and threads - dwFlags = win32.TH32CS_SNAPPROCESS | win32.TH32CS_SNAPTHREAD + dwFlags = win32.TH32CS_SNAPPROCESS | win32.TH32CS_SNAPTHREAD with win32.CreateToolhelp32Snapshot(dwFlags) as hSnapshot: - # Add all the processes (excluding our own) pe = win32.Process32First(hSnapshot) while pe is not None: @@ -4537,7 +4402,7 @@ def scan_processes_and_threads(self): dwThreadId = te.th32ThreadID found_tids.add(dwThreadId) if not aProcess._has_thread_id(dwThreadId): - aThread = Thread(dwThreadId, process = aProcess) + aThread = Thread(dwThreadId, process=aProcess) aProcess._add_thread(aThread) te = win32.Thread32Next(hSnapshot) @@ -4547,7 +4412,7 @@ def scan_processes_and_threads(self): # Remove dead threads for aProcess in compat.itervalues(self.__processDict): - dead_tids = set( aProcess._get_thread_ids() ) + dead_tids = set(aProcess._get_thread_ids()) dead_tids.difference_update(found_tids) for tid in dead_tids: aProcess._del_thread(tid) @@ -4597,8 +4462,8 @@ def scan_processes(self): # Get the previous list of PIDs. # We'll be removing live PIDs from it as we find them. - our_pid = win32.GetCurrentProcessId() - dead_pids = set( compat.iterkeys(self.__processDict) ) + our_pid = win32.GetCurrentProcessId() + dead_pids = set(compat.iterkeys(self.__processDict)) # Ignore our own PID. if our_pid in dead_pids: @@ -4607,16 +4472,15 @@ def scan_processes(self): # Get the list of processes from the Remote Desktop API. pProcessInfo = None try: - pProcessInfo, dwCount = win32.WTSEnumerateProcesses( - win32.WTS_CURRENT_SERVER_HANDLE) + pProcessInfo, dwCount = win32.WTSEnumerateProcesses(win32.WTS_CURRENT_SERVER_HANDLE) # For each process found... for index in compat.xrange(dwCount): sProcessInfo = pProcessInfo[index] -## # Ignore processes belonging to other sessions. -## if sProcessInfo.SessionId != win32.WTS_CURRENT_SESSION: -## continue + ## # Ignore processes belonging to other sessions. + ## if sProcessInfo.SessionId != win32.WTS_CURRENT_SESSION: + ## continue # Ignore our own PID. pid = sProcessInfo.ProcessId @@ -4634,7 +4498,7 @@ def scan_processes(self): # If the process is new, add a new Process object. if pid not in self.__processDict: - aProcess = Process(pid, fileName = fileName) + aProcess = Process(pid, fileName=fileName) self._add_process(aProcess) # If the process was already in the snapshot, and the @@ -4674,11 +4538,11 @@ def scan_processes_fast(self): """ # Get the new and old list of pids - new_pids = set( win32.EnumProcesses() ) - old_pids = set( compat.iterkeys(self.__processDict) ) + new_pids = set(win32.EnumProcesses()) + old_pids = set(compat.iterkeys(self.__processDict)) # Ignore our own pid - our_pid = win32.GetCurrentProcessId() + our_pid = win32.GetCurrentProcessId() if our_pid in new_pids: new_pids.remove(our_pid) if our_pid in old_pids: @@ -4686,7 +4550,7 @@ def scan_processes_fast(self): # Add newly found pids for pid in new_pids.difference(old_pids): - self._add_process( Process(pid) ) + self._add_process(Process(pid)) # Remove missing pids for pid in old_pids.difference(new_pids): @@ -4727,7 +4591,7 @@ def scan_process_filenames(self): complete = False return complete -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def clear_dead_processes(self): """ @@ -4787,7 +4651,7 @@ def clear_processes(self): """ Removes all L{Process}, L{Thread} and L{Module} objects in this snapshot. """ - #self.close_process_and_thread_handles() + # self.close_process_and_thread_handles() for aProcess in self.iter_processes(): aProcess.clear() self.__processDict = dict() @@ -4800,7 +4664,7 @@ def clear(self): """ self.clear_processes() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Docs for these methods are taken from the _ThreadContainer class. @@ -4829,12 +4693,12 @@ def get_thread_count(self): count += aProcess.get_thread_count() return count - has_thread.__doc__ = _ThreadContainer.has_thread.__doc__ - get_thread.__doc__ = _ThreadContainer.get_thread.__doc__ - get_thread_ids.__doc__ = _ThreadContainer.get_thread_ids.__doc__ + has_thread.__doc__ = _ThreadContainer.has_thread.__doc__ + get_thread.__doc__ = _ThreadContainer.get_thread.__doc__ + get_thread_ids.__doc__ = _ThreadContainer.get_thread_ids.__doc__ get_thread_count.__doc__ = _ThreadContainer.get_thread_count.__doc__ -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Docs for these methods are taken from the _ModuleContainer class. @@ -4846,7 +4710,7 @@ def get_module_count(self): get_module_count.__doc__ = _ModuleContainer.get_module_count.__doc__ -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def find_modules_by_base(self, lpBaseOfDll): """ @@ -4857,7 +4721,7 @@ def find_modules_by_base(self, lpBaseOfDll): for aProcess in self.iter_processes(): if aProcess.has_module(lpBaseOfDll): aModule = aProcess.get_module(lpBaseOfDll) - found.append( (aProcess, aModule) ) + found.append((aProcess, aModule)) return found def find_modules_by_name(self, fileName): @@ -4869,7 +4733,7 @@ def find_modules_by_name(self, fileName): for aProcess in self.iter_processes(): aModule = aProcess.get_module_by_name(fileName) if aModule is not None: - found.append( (aProcess, aModule) ) + found.append((aProcess, aModule)) return found def find_modules_by_address(self, address): @@ -4881,27 +4745,27 @@ def find_modules_by_address(self, address): for aProcess in self.iter_processes(): aModule = aProcess.get_module_at_address(address) if aModule is not None: - found.append( (aProcess, aModule) ) + found.append((aProcess, aModule)) return found def __find_processes_by_filename(self, filename): """ Internally used by L{find_processes_by_filename}. """ - found = list() + found = list() filename = filename.lower() if PathOperations.path_is_absolute(filename): for aProcess in self.iter_processes(): imagename = aProcess.get_filename() if imagename and imagename.lower() == filename: - found.append( (aProcess, imagename) ) + found.append((aProcess, imagename)) else: for aProcess in self.iter_processes(): imagename = aProcess.get_filename() if imagename: imagename = PathOperations.pathname_to_filename(imagename) if imagename.lower() == filename: - found.append( (aProcess, imagename) ) + found.append((aProcess, imagename)) return found def find_processes_by_filename(self, fileName): @@ -4924,11 +4788,11 @@ def find_processes_by_filename(self, fileName): if not found: fn, ext = PathOperations.split_extension(fileName) if not ext: - fileName = '%s.exe' % fn - found = self.__find_processes_by_filename(fileName) + fileName = "%s.exe" % fn + found = self.__find_processes_by_filename(fileName) return found -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX _notify_* methods should not trigger a scan @@ -4939,17 +4803,17 @@ def _add_process(self, aProcess): @type aProcess: L{Process} @param aProcess: Process object. """ -## if not isinstance(aProcess, Process): -## if hasattr(aProcess, '__class__'): -## typename = aProcess.__class__.__name__ -## else: -## typename = str(type(aProcess)) -## msg = "Expected Process, got %s instead" % typename -## raise TypeError(msg) + ## if not isinstance(aProcess, Process): + ## if hasattr(aProcess, '__class__'): + ## typename = aProcess.__class__.__name__ + ## else: + ## typename = str(type(aProcess)) + ## msg = "Expected Process, got %s instead" % typename + ## raise TypeError(msg) dwProcessId = aProcess.dwProcessId -## if dwProcessId in self.__processDict: -## msg = "Process already exists: %d" % dwProcessId -## raise KeyError(msg) + ## if dwProcessId in self.__processDict: + ## msg = "Process already exists: %d" % dwProcessId + ## raise KeyError(msg) self.__processDict[dwProcessId] = aProcess def _del_process(self, dwProcessId): @@ -4967,7 +4831,7 @@ def _del_process(self, dwProcessId): msg = "Unknown process ID %d" % dwProcessId warnings.warn(msg, RuntimeWarning) if aProcess: - aProcess.clear() # remove circular references + aProcess.clear() # remove circular references # Notify the creation of a new process. def _notify_create_process(self, event): @@ -4984,16 +4848,16 @@ def _notify_create_process(self, event): @return: C{True} to call the user-defined handle, C{False} otherwise. """ dwProcessId = event.get_pid() - dwThreadId = event.get_tid() - hProcess = event.get_process_handle() -## if not self.has_process(dwProcessId): # XXX this would trigger a scan + dwThreadId = event.get_tid() + hProcess = event.get_process_handle() + ## if not self.has_process(dwProcessId): # XXX this would trigger a scan if dwProcessId not in self.__processDict: aProcess = Process(dwProcessId, hProcess) self._add_process(aProcess) aProcess.fileName = event.get_filename() else: aProcess = self.get_process(dwProcessId) - #if hProcess != win32.INVALID_HANDLE_VALUE: + # if hProcess != win32.INVALID_HANDLE_VALUE: # aProcess.hProcess = hProcess # may have more privileges if not aProcess.fileName: fileName = event.get_filename() @@ -5015,7 +4879,7 @@ def _notify_exit_process(self, event): @return: C{True} to call the user-defined handle, C{False} otherwise. """ dwProcessId = event.get_pid() -## if self.has_process(dwProcessId): # XXX this would trigger a scan + ## if self.has_process(dwProcessId): # XXX this would trigger a scan if dwProcessId in self.__processDict: self._del_process(dwProcessId) return True diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py index 5623b80ad..7a8b38eb3 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/registry.py @@ -39,7 +39,7 @@ __revision__ = "$Id$" -__all__ = ['Registry'] +__all__ = ["Registry"] import sys from winappdbg import win32 @@ -47,9 +47,10 @@ import collections import warnings -#============================================================================== +# ============================================================================== -class _RegistryContainer (object): + +class _RegistryContainer(object): """ Base class for L{Registry} and L{RegistryKey}. """ @@ -57,6 +58,7 @@ class _RegistryContainer (object): # Dummy object to detect empty arguments. class __EmptyArgument: pass + __emptyArgument = __EmptyArgument() def __init__(self): @@ -79,9 +81,11 @@ def setdefault(self, default): def __iter__(self): return compat.iterkeys(self) -#============================================================================== -class RegistryKey (_RegistryContainer): +# ============================================================================== + + +class RegistryKey(_RegistryContainer): """ Exposes a single Windows Registry key as a dictionary-like object. @@ -103,9 +107,9 @@ def __init__(self, path, handle): @param handle: Registry key handle. """ super(RegistryKey, self).__init__() - if path.endswith('\\'): + if path.endswith("\\"): path = path[:-1] - self._path = path + self._path = path self._handle = handle @property @@ -114,12 +118,12 @@ def path(self): @property def handle(self): - #if not self._handle: + # if not self._handle: # msg = "This Registry key handle has already been closed." # raise RuntimeError(msg) return self._handle - #def close(self): + # def close(self): # """ # Close the Registry key handle, freeing its resources. It cannot be # used again after calling this method. @@ -131,13 +135,13 @@ def handle(self): # """ # self.handle.close() # - #def __enter__(self): + # def __enter__(self): # """ # Compatibility with the "C{with}" Python statement. # """ # return self # - #def __exit__(self, type, value, traceback): + # def __exit__(self, type, value, traceback): # """ # Compatibility with the "C{with}" Python statement. # """ @@ -236,7 +240,7 @@ def items(self): resp = win32.RegEnumValue(handle, index) if resp is None: break - items.append( (resp[0], resp[2]) ) + items.append((resp[0], resp[2])) index += 1 return items @@ -281,11 +285,11 @@ def clear(self): win32.RegDeleteValue(handle, resp[0]) def __str__(self): - default = self[''] + default = self[""] return str(default) def __unicode__(self): - default = self[u''] + default = self[""] return compat.unicode(default) def __repr__(self): @@ -322,7 +326,7 @@ def children(self): subkey = win32.RegEnumKey(handle, index) if subkey is None: break - result.append( self.child(subkey) ) + result.append(self.child(subkey)) index += 1 return result @@ -336,7 +340,7 @@ def child(self, subkey): @rtype: L{RegistryKey} @return: Subkey. """ - path = self._path + '\\' + subkey + path = self._path + "\\" + subkey handle = win32.RegOpenKey(self.handle, subkey) return RegistryKey(path, handle) @@ -352,7 +356,8 @@ def flush(self): """ win32.RegFlushKey(self.handle) -#============================================================================== + +# ============================================================================== # TODO: possibly cache the RegistryKey objects # to avoid opening and closing handles many times on code sequences like this: @@ -372,7 +377,8 @@ def flush(self): # Apparently RegDeleteTree won't work remotely from Win7 to WinXP, and the only # solution is to recursively call RegDeleteKey. -class Registry (_RegistryContainer): + +class Registry(_RegistryContainer): """ Exposes the Windows Registry as a Python container. @@ -382,36 +388,34 @@ class Registry (_RegistryContainer): """ _hives_by_name = { - # Short names - 'HKCR' : win32.HKEY_CLASSES_ROOT, - 'HKCU' : win32.HKEY_CURRENT_USER, - 'HKLM' : win32.HKEY_LOCAL_MACHINE, - 'HKU' : win32.HKEY_USERS, - 'HKPD' : win32.HKEY_PERFORMANCE_DATA, - 'HKCC' : win32.HKEY_CURRENT_CONFIG, - + "HKCR": win32.HKEY_CLASSES_ROOT, + "HKCU": win32.HKEY_CURRENT_USER, + "HKLM": win32.HKEY_LOCAL_MACHINE, + "HKU": win32.HKEY_USERS, + "HKPD": win32.HKEY_PERFORMANCE_DATA, + "HKCC": win32.HKEY_CURRENT_CONFIG, # Long names - 'HKEY_CLASSES_ROOT' : win32.HKEY_CLASSES_ROOT, - 'HKEY_CURRENT_USER' : win32.HKEY_CURRENT_USER, - 'HKEY_LOCAL_MACHINE' : win32.HKEY_LOCAL_MACHINE, - 'HKEY_USERS' : win32.HKEY_USERS, - 'HKEY_PERFORMANCE_DATA' : win32.HKEY_PERFORMANCE_DATA, - 'HKEY_CURRENT_CONFIG' : win32.HKEY_CURRENT_CONFIG, + "HKEY_CLASSES_ROOT": win32.HKEY_CLASSES_ROOT, + "HKEY_CURRENT_USER": win32.HKEY_CURRENT_USER, + "HKEY_LOCAL_MACHINE": win32.HKEY_LOCAL_MACHINE, + "HKEY_USERS": win32.HKEY_USERS, + "HKEY_PERFORMANCE_DATA": win32.HKEY_PERFORMANCE_DATA, + "HKEY_CURRENT_CONFIG": win32.HKEY_CURRENT_CONFIG, } _hives_by_value = { - win32.HKEY_CLASSES_ROOT : 'HKEY_CLASSES_ROOT', - win32.HKEY_CURRENT_USER : 'HKEY_CURRENT_USER', - win32.HKEY_LOCAL_MACHINE : 'HKEY_LOCAL_MACHINE', - win32.HKEY_USERS : 'HKEY_USERS', - win32.HKEY_PERFORMANCE_DATA : 'HKEY_PERFORMANCE_DATA', - win32.HKEY_CURRENT_CONFIG : 'HKEY_CURRENT_CONFIG', + win32.HKEY_CLASSES_ROOT: "HKEY_CLASSES_ROOT", + win32.HKEY_CURRENT_USER: "HKEY_CURRENT_USER", + win32.HKEY_LOCAL_MACHINE: "HKEY_LOCAL_MACHINE", + win32.HKEY_USERS: "HKEY_USERS", + win32.HKEY_PERFORMANCE_DATA: "HKEY_PERFORMANCE_DATA", + win32.HKEY_CURRENT_CONFIG: "HKEY_CURRENT_CONFIG", } _hives = sorted(compat.itervalues(_hives_by_value)) - def __init__(self, machine = None): + def __init__(self, machine=None): """ Opens a local or remote registry. @@ -443,14 +447,14 @@ def _split_path(self, path): - L{win32.HKEY_PERFORMANCE_DATA} - L{win32.HKEY_CURRENT_CONFIG} """ - if '\\' in path: - p = path.find('\\') + if "\\" in path: + p = path.find("\\") hive = path[:p] - path = path[p+1:] + path = path[p + 1 :] else: hive = path path = None - handle = self._hives_by_name[ hive.upper() ] + handle = self._hives_by_name[hive.upper()] return handle, path def _parse_path(self, path): @@ -492,7 +496,7 @@ def _join_path(self, hive, subkey): """ path = self._hives_by_value[hive] if subkey: - path = path + '\\' + subkey + path = path + "\\" + subkey return path def _sanitize_path(self, path): @@ -505,7 +509,7 @@ def _sanitize_path(self, path): @rtype: str @return: Registry path. """ - return self._join_path( *self._split_path(path) ) + return self._join_path(*self._split_path(path)) def _connect_hive(self, hive): """ @@ -560,7 +564,7 @@ def __exit__(self, exc_type, exc_value, traceback): def __repr__(self): if self._machine: return '' % self._machine - return '' + return "" def __contains__(self, path): hive, subpath = self._parse_path(path) @@ -587,8 +591,7 @@ def __getitem__(self, path): def __setitem__(self, path, value): do_copy = isinstance(value, RegistryKey) - if not do_copy and not isinstance(value, str) \ - and not isinstance(value, compat.unicode): + if not do_copy and not isinstance(value, str) and not isinstance(value, compat.unicode): if isinstance(value, object): t = value.__class__.__name__ else: @@ -606,9 +609,7 @@ def __setitem__(self, path, value): def __delitem__(self, path): hive, subpath = self._parse_path(path) if not subpath: - raise TypeError( - "Are you SURE you want to wipe out an entire hive?!" - " Call win32.RegDeleteTree() directly if you must...") + raise TypeError("Are you SURE you want to wipe out an entire hive?!" " Call win32.RegDeleteTree() directly if you must...") try: win32.RegDeleteTree(hive, subpath) except WindowsError: @@ -666,7 +667,7 @@ def iterate(self, path): @raise KeyError: The specified path does not exist. """ - if path.endswith('\\'): + if path.endswith("\\"): path = path[:-1] if not self.has_key(path): raise KeyError(path) @@ -690,6 +691,6 @@ def __iterate(self, stack): subkeys = self.subkeys(path) except WindowsError: continue - prefix = path + '\\' + prefix = path + "\\" subkeys = [prefix + name for name in subkeys] stack.extendleft(subkeys) diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py index 6efaea6df..de1ddebd4 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/search.py @@ -43,14 +43,14 @@ __revision__ = "$Id$" -__all__ = [ - 'Search', - 'Pattern', - 'BytePattern', - 'TextPattern', - 'RegExpPattern', - 'HexPattern', - ] +__all__ = [ + "Search", + "Pattern", + "BytePattern", + "TextPattern", + "RegExpPattern", + "HexPattern", +] from winappdbg.textio import HexInput from winappdbg.util import StaticClass, MemoryAddresses @@ -64,9 +64,10 @@ except ImportError: import re -#============================================================================== +# ============================================================================== -class Pattern (object): + +class Pattern(object): """ Base class for search patterns. @@ -116,7 +117,7 @@ def read(self, process, address, size): """ return process.read(address, size) - def find(self, buffer, pos = None): + def find(self, buffer, pos=None): """ Searches for the pattern in the given buffer, optionally starting at the given position within the buffer. @@ -169,9 +170,11 @@ def found(self, address, size, data): """ return (address, size, data) -#------------------------------------------------------------------------------ -class BytePattern (Pattern): +# ------------------------------------------------------------------------------ + + +class BytePattern(Pattern): """ Fixed byte pattern. @@ -188,7 +191,7 @@ def __init__(self, pattern): @param pattern: Byte string to search for. """ self.pattern = str(pattern) - self.length = len(pattern) + self.length = len(pattern) def __len__(self): """ @@ -198,14 +201,16 @@ def __len__(self): """ return self.length - def find(self, buffer, pos = None): + def find(self, buffer, pos=None): return buffer.find(self.pattern, pos), self.length -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # FIXME: case insensitive compat.unicode searches are probably buggy! -class TextPattern (BytePattern): + +class TextPattern(BytePattern): """ Text pattern. @@ -223,7 +228,7 @@ class TextPattern (BytePattern): C{False} otherwise. """ - def __init__(self, text, encoding = "utf-16le", caseSensitive = False): + def __init__(self, text, encoding="utf-16le", caseSensitive=False): """ @type text: str or compat.unicode @param text: Text to search for. @@ -270,13 +275,15 @@ def found(self, address, size, data): try: data = compat.unicode(data, self.encoding) except Exception: -## traceback.print_exc() # XXX DEBUG + ## traceback.print_exc() # XXX DEBUG return None return (address, size, data) -#------------------------------------------------------------------------------ -class RegExpPattern (Pattern): +# ------------------------------------------------------------------------------ + + +class RegExpPattern(Pattern): """ Regular expression pattern. @@ -305,7 +312,7 @@ class RegExpPattern (Pattern): buffered search. """ - def __init__(self, regexp, flags = 0, maxLength = None): + def __init__(self, regexp, flags=0, maxLength=None): """ @type regexp: str @param regexp: Regular expression string. @@ -327,9 +334,9 @@ def __init__(self, regexp, flags = 0, maxLength = None): cause an exception to be raised if this pattern is used in a buffered search. """ - self.pattern = regexp - self.flags = flags - self.regexp = re.compile(regexp, flags) + self.pattern = regexp + self.flags = flags + self.regexp = re.compile(regexp, flags) self.maxLength = maxLength def __len__(self): @@ -350,8 +357,8 @@ def __len__(self): raise NotImplementedError() return self.maxLength - def find(self, buffer, pos = None): - if not pos: # make sure pos is an int + def find(self, buffer, pos=None): + if not pos: # make sure pos is an int pos = 0 match = self.regexp.search(buffer, pos) if match: @@ -359,9 +366,11 @@ def find(self, buffer, pos = None): return start, end - start return -1, 0 -#------------------------------------------------------------------------------ -class HexPattern (RegExpPattern): +# ------------------------------------------------------------------------------ + + +class HexPattern(RegExpPattern): """ Hexadecimal pattern. @@ -386,8 +395,8 @@ def __new__(cls, pattern): L{BytePattern} is created instead. That's because searching for a fixed byte pattern is faster than searching for a regular expression. """ - if '?' not in pattern: - return BytePattern( HexInput.hexadecimal(pattern) ) + if "?" not in pattern: + return BytePattern(HexInput.hexadecimal(pattern)) return object.__new__(cls, pattern) def __init__(self, hexa): @@ -406,14 +415,14 @@ def __init__(self, hexa): @type hexa: str @param hexa: Pattern to search for. """ - maxLength = len([x for x in hexa - if x in "?0123456789ABCDEFabcdef"]) / 2 - super(HexPattern, self).__init__(HexInput.pattern(hexa), - maxLength = maxLength) + maxLength = len([x for x in hexa if x in "?0123456789ABCDEFabcdef"]) / 2 + super(HexPattern, self).__init__(HexInput.pattern(hexa), maxLength=maxLength) -#============================================================================== -class Search (StaticClass): +# ============================================================================== + + +class Search(StaticClass): """ Static class to group the search functionality. @@ -426,10 +435,7 @@ class Search (StaticClass): # TODO: search non-ascii C strings @staticmethod - def search_process(process, pattern, minAddr = None, - maxAddr = None, - bufferPages = None, - overlapping = False): + def search_process(process, pattern, minAddr=None, maxAddr=None, bufferPages=None, overlapping=False): """ Search for the given pattern within the process memory. @@ -517,38 +523,35 @@ def search_process(process, pattern, minAddr = None, # Calculate the buffer size from the number of pages. if bufferPages is None: try: - size = MemoryAddresses.\ - align_address_to_page_end(len(pattern)) + page + size = MemoryAddresses.align_address_to_page_end(len(pattern)) + page except NotImplementedError: size = None elif bufferPages > 0: - size = page * (bufferPages + 1) + size = page * (bufferPages + 1) else: - size = None + size = None # Get the memory map of the process. memory_map = process.iter_memory_map(minAddr, maxAddr) # Perform search with buffering enabled. if size: - # Loop through all memory blocks containing data. - buffer = "" # buffer to hold the memory data - prev_addr = 0 # previous memory block address - last = 0 # position of the last match - delta = 0 # delta of last read address and start of buffer + buffer = "" # buffer to hold the memory data + prev_addr = 0 # previous memory block address + last = 0 # position of the last match + delta = 0 # delta of last read address and start of buffer for mbi in memory_map: - # Skip blocks with no data to search on. if not mbi.has_content(): continue # Get the address and size of this block. - address = mbi.BaseAddress # current address to search on - block_size = mbi.RegionSize # total size of the block + address = mbi.BaseAddress # current address to search on + block_size = mbi.RegionSize # total size of the block if address >= maxAddr: break - end = address + block_size # end address of the block + end = address + block_size # end address of the block # If the block is contiguous to the previous block, # coalesce the new data in the buffer. @@ -558,20 +561,17 @@ def search_process(process, pattern, minAddr = None, # If not, clear the buffer and read new data. else: buffer = read(process, address, min(size, block_size)) - last = 0 - delta = 0 + last = 0 + delta = 0 # Search for the pattern in this block. while 1: - # Yield each match of the pattern in the buffer. pos, length = find(buffer, last) while pos >= last: match_addr = address + pos - delta if minAddr <= match_addr < maxAddr: - result = pattern.found( - match_addr, length, - buffer [ pos : pos + length ] ) + result = pattern.found(match_addr, length, buffer[pos : pos + length]) if result is not None: yield result if overlapping: @@ -581,9 +581,9 @@ def search_process(process, pattern, minAddr = None, pos, length = find(buffer, last) # Advance to the next page. - address = address + page + address = address + page block_size = block_size - page - prev_addr = address + prev_addr = address # Fix the position of the last match. last = last - page @@ -591,8 +591,8 @@ def search_process(process, pattern, minAddr = None, last = 0 # Remove the first page in the buffer. - buffer = buffer[ page : ] - delta = page + buffer = buffer[page:] + delta = page # If we haven't reached the end of the block yet, # read the next page in the block and keep seaching. @@ -605,19 +605,17 @@ def search_process(process, pattern, minAddr = None, # Perform search with buffering disabled. else: - # Loop through all memory blocks containing data. for mbi in memory_map: - # Skip blocks with no data to search on. if not mbi.has_content(): continue # Get the address and size of this block. - address = mbi.BaseAddress + address = mbi.BaseAddress block_size = mbi.RegionSize if address >= maxAddr: - break; + break # Read the whole memory region. buffer = process.read(address, block_size) @@ -628,9 +626,7 @@ def search_process(process, pattern, minAddr = None, while pos >= last: match_addr = address + pos if minAddr <= match_addr < maxAddr: - result = pattern.found( - match_addr, length, - buffer [ pos : pos + length ] ) + result = pattern.found(match_addr, length, buffer[pos : pos + length]) if result is not None: yield result if overlapping: @@ -640,7 +636,7 @@ def search_process(process, pattern, minAddr = None, pos, length = find(buffer, last) @classmethod - def extract_ascii_strings(cls, process, minSize = 4, maxSize = 1024): + def extract_ascii_strings(cls, process, minSize=4, maxSize=1024): """ Extract ASCII strings from the process memory. @@ -662,4 +658,4 @@ def extract_ascii_strings(cls, process, minSize = 4, maxSize = 1024): """ regexp = r"[\s\w\!\@\#\$\%%\^\&\*\(\)\{\}\[\]\~\`\'\"\:\;\.\,\\\/\-\+\=\_\<\>]{%d,%d}\0" % (minSize, maxSize) pattern = RegExpPattern(regexp, 0, maxSize) - return cls.search_process(process, pattern, overlapping = False) + return cls.search_process(process, pattern, overlapping=False) diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py index d97411059..50d7455aa 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/sql.py @@ -37,7 +37,7 @@ __revision__ = "$Id$" -__all__ = ['CrashDAO'] +__all__ = ["CrashDAO"] import sqlite3 import datetime @@ -50,46 +50,52 @@ from sqlalchemy.interfaces import PoolListener from sqlalchemy.orm import sessionmaker, deferred from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound -from sqlalchemy.types import Integer, BigInteger, Boolean, DateTime, String, \ - LargeBinary, Enum, VARCHAR +from sqlalchemy.types import Integer, BigInteger, Boolean, DateTime, String, LargeBinary, Enum, VARCHAR from sqlalchemy.sql.expression import asc, desc from crash import Crash, Marshaller, pickle, HIGHEST_PROTOCOL from textio import CrashDump import win32 -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ try: from decorator import decorator except ImportError: import functools + def decorator(w): """ The C{decorator} module was not found. You can install it from: U{http://pypi.python.org/pypi/decorator/} """ + def d(fn): @functools.wraps(fn) def x(*argv, **argd): return w(fn, *argv, **argd) + return x + return d -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ -@compiles(String, 'mysql') -@compiles(VARCHAR, 'mysql') + +@compiles(String, "mysql") +@compiles(VARCHAR, "mysql") def _compile_varchar_mysql(element, compiler, **kw): """MySQL hack to avoid the "VARCHAR requires a length" error.""" - if not element.length or element.length == 'max': + if not element.length or element.length == "max": return "TEXT" else: return compiler.visit_VARCHAR(element, **kw) -#------------------------------------------------------------------------------ -class _SQLitePatch (PoolListener): +# ------------------------------------------------------------------------------ + + +class _SQLitePatch(PoolListener): """ Used internally by L{BaseDAO}. @@ -98,6 +104,7 @@ class _SQLitePatch (PoolListener): @see: U{http://sqlite.org/foreignkeys.html} """ + def connect(dbapi_connection, connection_record): """ Called once by SQLAlchemy for each new SQLite DB-API connection. @@ -124,29 +131,28 @@ def connect(dbapi_connection, connection_record): dbapi_connection.close() raise sqlite3.Error() -#------------------------------------------------------------------------------ -class BaseDTO (object): +# ------------------------------------------------------------------------------ + + +class BaseDTO(object): """ Customized declarative base for SQLAlchemy. """ __table_args__ = { - # Don't use MyISAM in MySQL. It doesn't support ON DELETE CASCADE. - 'mysql_engine': 'InnoDB', - + "mysql_engine": "InnoDB", # Don't use BlitzDB in Drizzle. It doesn't support foreign keys. - 'drizzle_engine': 'InnoDB', - + "drizzle_engine": "InnoDB", # Collate to UTF-8. - 'mysql_charset': 'utf8', + "mysql_charset": "utf8", + } - } -BaseDTO = declarative_base(cls = BaseDTO) +BaseDTO = declarative_base(cls=BaseDTO) -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # TODO: if using mssql, check it's at least SQL Server 2005 # (LIMIT and OFFSET support is required). @@ -160,7 +166,8 @@ class BaseDTO (object): # http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html # http://msdn.microsoft.com/en-us/library/ms174459(v=sql.90).aspx -class BaseDAO (object): + +class BaseDAO(object): """ Data Access Object base class. @@ -187,12 +194,9 @@ class BaseDAO (object): _echo = False - _new_session = sessionmaker(autoflush = True, - autocommit = True, - expire_on_commit = True, - weak_identity_map = True) + _new_session = sessionmaker(autoflush=True, autocommit=True, expire_on_commit=True, weak_identity_map=True) - def __init__(self, url, creator = None): + def __init__(self, url, creator=None): """ Connect to the database using the given connection URL. @@ -252,34 +256,34 @@ def __init__(self, url, creator = None): # Parse the connection URL. parsed_url = URL(url) schema = parsed_url.drivername - if '+' in schema: - dialect, driver = schema.split('+') + if "+" in schema: + dialect, driver = schema.split("+") else: - dialect, driver = schema, 'base' + dialect, driver = schema, "base" dialect = dialect.strip().lower() driver = driver.strip() # Prepare the database engine arguments. - arguments = {'echo' : self._echo} - if dialect == 'sqlite': - arguments['module'] = sqlite3.dbapi2 - arguments['listeners'] = [_SQLitePatch()] + arguments = {"echo": self._echo} + if dialect == "sqlite": + arguments["module"] = sqlite3.dbapi2 + arguments["listeners"] = [_SQLitePatch()] if creator is not None: - arguments['creator'] = creator + arguments["creator"] = creator # Load the database engine. engine = create_engine(url, **arguments) # Create a new session. - session = self._new_session(bind = engine) + session = self._new_session(bind=engine) # Create the required tables if they don't exist. BaseDTO.metadata.create_all(engine) # TODO: create a dialect specific index on the "signature" column. # Set the instance properties. - self._url = parsed_url - self._driver = driver + self._url = parsed_url + self._driver = driver self._dialect = dialect self._session = session @@ -299,7 +303,7 @@ def _transactional(self, method, *argv, **argd): @raise Exception: Any exception raised by the method. """ - self._session.begin(subtransactions = True) + self._session.begin(subtransactions=True) try: result = method(self, *argv, **argd) self._session.commit() @@ -308,7 +312,9 @@ def _transactional(self, method, *argv, **argd): self._session.rollback() raise -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ + @decorator def Transactional(fn, self, *argv, **argd): @@ -319,7 +325,9 @@ def Transactional(fn, self, *argv, **argd): """ return self._transactional(fn, *argv, **argd) -#============================================================================== + +# ============================================================================== + # Generates all possible memory access flags. def _gen_valid_access_flags(): @@ -330,19 +338,17 @@ def _gen_valid_access_flags(): for a4 in ("W", "-"): f.append("%s %s%s%s" % (a1, a2, a3, a4)) return tuple(f) + + _valid_access_flags = _gen_valid_access_flags() # Enumerated types for the memory table. -n_MEM_ACCESS_ENUM = {"name" : "MEM_ACCESS_ENUM"} -n_MEM_ALLOC_ACCESS_ENUM = {"name" : "MEM_ALLOC_ACCESS_ENUM"} -MEM_ACCESS_ENUM = Enum(*_valid_access_flags, - **n_MEM_ACCESS_ENUM) -MEM_ALLOC_ACCESS_ENUM = Enum(*_valid_access_flags, - **n_MEM_ALLOC_ACCESS_ENUM) -MEM_STATE_ENUM = Enum("Reserved", "Commited", "Free", "Unknown", - name = "MEM_STATE_ENUM") -MEM_TYPE_ENUM = Enum("Image", "Mapped", "Private", "Unknown", - name = "MEM_TYPE_ENUM") +n_MEM_ACCESS_ENUM = {"name": "MEM_ACCESS_ENUM"} +n_MEM_ALLOC_ACCESS_ENUM = {"name": "MEM_ALLOC_ACCESS_ENUM"} +MEM_ACCESS_ENUM = Enum(*_valid_access_flags, **n_MEM_ACCESS_ENUM) +MEM_ALLOC_ACCESS_ENUM = Enum(*_valid_access_flags, **n_MEM_ALLOC_ACCESS_ENUM) +MEM_STATE_ENUM = Enum("Reserved", "Commited", "Free", "Unknown", name="MEM_STATE_ENUM") +MEM_TYPE_ENUM = Enum("Image", "Mapped", "Private", "Unknown", name="MEM_TYPE_ENUM") # Cleanup the namespace. del _gen_valid_access_flags @@ -350,30 +356,27 @@ def _gen_valid_access_flags(): del n_MEM_ACCESS_ENUM del n_MEM_ALLOC_ACCESS_ENUM -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + -class MemoryDTO (BaseDTO): +class MemoryDTO(BaseDTO): """ Database mapping for memory dumps. """ # Declare the table mapping. - __tablename__ = 'memory' - id = Column(Integer, Sequence(__tablename__ + '_seq'), - primary_key = True, autoincrement = True) - crash_id = Column(Integer, ForeignKey('crashes.id', - ondelete = 'CASCADE', - onupdate = 'CASCADE'), - nullable = False) - address = Column(BigInteger, nullable = False, index = True) - size = Column(BigInteger, nullable = False) - state = Column(MEM_STATE_ENUM, nullable = False) - access = Column(MEM_ACCESS_ENUM) - type = Column(MEM_TYPE_ENUM) - alloc_base = Column(BigInteger) - alloc_access = Column(MEM_ALLOC_ACCESS_ENUM) - filename = Column(String) - content = deferred(Column(LargeBinary)) + __tablename__ = "memory" + id = Column(Integer, Sequence(__tablename__ + "_seq"), primary_key=True, autoincrement=True) + crash_id = Column(Integer, ForeignKey("crashes.id", ondelete="CASCADE", onupdate="CASCADE"), nullable=False) + address = Column(BigInteger, nullable=False, index=True) + size = Column(BigInteger, nullable=False) + state = Column(MEM_STATE_ENUM, nullable=False) + access = Column(MEM_ACCESS_ENUM) + type = Column(MEM_TYPE_ENUM) + alloc_base = Column(BigInteger) + alloc_access = Column(MEM_ALLOC_ACCESS_ENUM) + filename = Column(String) + content = deferred(Column(LargeBinary)) def __init__(self, crash_id, mbi): """ @@ -390,7 +393,7 @@ def __init__(self, crash_id, mbi): self.size = mbi.RegionSize # State (free or allocated). - if mbi.State == win32.MEM_RESERVE: + if mbi.State == win32.MEM_RESERVE: self.state = "Reserved" elif mbi.State == win32.MEM_COMMIT: self.state = "Commited" @@ -406,7 +409,7 @@ def __init__(self, crash_id, mbi): self.access = self._to_access(mbi.Protect) # Type (file mapping, executable image, or private memory). - if mbi.Type == win32.MEM_IMAGE: + if mbi.Type == win32.MEM_IMAGE: self.type = "Image" elif mbi.Type == win32.MEM_MAPPED: self.type = "Mapped" @@ -418,7 +421,7 @@ def __init__(self, crash_id, mbi): self.type = "Unknown" # Allocation info. - self.alloc_base = mbi.AllocationBase + self.alloc_base = mbi.AllocationBase if not mbi.AllocationProtect: self.alloc_access = None else: @@ -437,7 +440,7 @@ def __init__(self, crash_id, mbi): self.content = None def _to_access(self, protect): - if protect & win32.PAGE_NOACCESS: + if protect & win32.PAGE_NOACCESS: access = "--- " elif protect & win32.PAGE_READONLY: access = "R-- " @@ -455,21 +458,21 @@ def _to_access(self, protect): access = "RCX " else: access = "??? " - if protect & win32.PAGE_GUARD: + if protect & win32.PAGE_GUARD: access += "G" else: access += "-" - if protect & win32.PAGE_NOCACHE: + if protect & win32.PAGE_NOCACHE: access += "N" else: access += "-" - if protect & win32.PAGE_WRITECOMBINE: + if protect & win32.PAGE_WRITECOMBINE: access += "W" else: access += "-" return access - def toMBI(self, getMemoryDump = False): + def toMBI(self, getMemoryDump=False): """ Returns a L{win32.MemoryBasicInformation} object using the data retrieved from the database. @@ -483,10 +486,10 @@ def toMBI(self, getMemoryDump = False): """ mbi = win32.MemoryBasicInformation() mbi.BaseAddress = self.address - mbi.RegionSize = self.size - mbi.State = self._parse_state(self.state) - mbi.Protect = self._parse_access(self.access) - mbi.Type = self._parse_type(self.type) + mbi.RegionSize = self.size + mbi.State = self._parse_state(self.state) + mbi.Protect = self._parse_access(self.access) + mbi.Type = self._parse_type(self.type) if self.alloc_base is not None: mbi.AllocationBase = self.alloc_base else: @@ -498,7 +501,7 @@ def toMBI(self, getMemoryDump = False): if self.filename is not None: mbi.filename = self.filename if getMemoryDump and self.content is not None: - mbi.content = self.content + mbi.content = self.content return mbi @staticmethod @@ -529,7 +532,7 @@ def _parse_access(access): if not access: return 0 perm = access[:3] - if perm == "R--": + if perm == "R--": protect = win32.PAGE_READONLY elif perm == "RW-": protect = win32.PAGE_READWRITE @@ -553,9 +556,11 @@ def _parse_access(access): protect = protect | win32.PAGE_WRITECOMBINE return protect -#------------------------------------------------------------------------------ -class CrashDTO (BaseDTO): +# ------------------------------------------------------------------------------ + + +class CrashDTO(BaseDTO): """ Database mapping for crash dumps. """ @@ -564,31 +569,30 @@ class CrashDTO (BaseDTO): __tablename__ = "crashes" # Primary key. - id = Column(Integer, Sequence(__tablename__ + '_seq'), - primary_key = True, autoincrement = True) + id = Column(Integer, Sequence(__tablename__ + "_seq"), primary_key=True, autoincrement=True) # Timestamp. - timestamp = Column(DateTime, nullable = False, index = True) + timestamp = Column(DateTime, nullable=False, index=True) # Exploitability test. - exploitable = Column(Integer, nullable = False) - exploitability_rule = Column(String(32), nullable = False) - exploitability_rating = Column(String(32), nullable = False) - exploitability_desc = Column(String, nullable = False) + exploitable = Column(Integer, nullable=False) + exploitability_rule = Column(String(32), nullable=False) + exploitability_rating = Column(String(32), nullable=False) + exploitability_desc = Column(String, nullable=False) # Platform description. - os = Column(String(32), nullable = False) - arch = Column(String(16), nullable = False) - bits = Column(Integer, nullable = False) # Integer(4) is deprecated :( + os = Column(String(32), nullable=False) + arch = Column(String(16), nullable=False) + bits = Column(Integer, nullable=False) # Integer(4) is deprecated :( # Event description. - event = Column(String, nullable = False) - pid = Column(Integer, nullable = False) - tid = Column(Integer, nullable = False) - pc = Column(BigInteger, nullable = False) - sp = Column(BigInteger, nullable = False) - fp = Column(BigInteger, nullable = False) - pc_label = Column(String, nullable = False) + event = Column(String, nullable=False) + pid = Column(Integer, nullable=False) + tid = Column(Integer, nullable=False) + pc = Column(BigInteger, nullable=False) + sp = Column(BigInteger, nullable=False) + fp = Column(BigInteger, nullable=False) + pc_label = Column(String, nullable=False) # Exception description. exception = Column(String(64)) @@ -613,10 +617,10 @@ class CrashDTO (BaseDTO): notes = Column(String) # Heuristic signature. - signature = Column(String, nullable = False) + signature = Column(String, nullable=False) # Pickled Crash object, minus the memory dump. - data = deferred(Column(LargeBinary, nullable = False)) + data = deferred(Column(LargeBinary, nullable=False)) def __init__(self, crash): """ @@ -625,60 +629,56 @@ def __init__(self, crash): """ # Timestamp and signature. - self.timestamp = datetime.datetime.fromtimestamp( crash.timeStamp ) - self.signature = pickle.dumps(crash.signature, protocol = 0) + self.timestamp = datetime.datetime.fromtimestamp(crash.timeStamp) + self.signature = pickle.dumps(crash.signature, protocol=0) # Marshalled Crash object, minus the memory dump. # This code is *not* thread safe! memoryMap = crash.memoryMap try: crash.memoryMap = None - self.data = buffer( Marshaller.dumps(crash) ) + self.data = buffer(Marshaller.dumps(crash)) finally: crash.memoryMap = memoryMap # Exploitability test. - self.exploitability_rating, \ - self.exploitability_rule, \ - self.exploitability_desc = crash.isExploitable() + self.exploitability_rating, self.exploitability_rule, self.exploitability_desc = crash.isExploitable() # Exploitability test as an integer result (for sorting). self.exploitable = [ - "Not an exception", - "Not exploitable", - "Not likely exploitable", - "Unknown", - "Probably exploitable", - "Exploitable", - ].index(self.exploitability_rating) + "Not an exception", + "Not exploitable", + "Not likely exploitable", + "Unknown", + "Probably exploitable", + "Exploitable", + ].index(self.exploitability_rating) # Platform description. - self.os = crash.os + self.os = crash.os self.arch = crash.arch self.bits = crash.bits # Event description. - self.event = crash.eventName - self.pid = crash.pid - self.tid = crash.tid - self.pc = crash.pc - self.sp = crash.sp - self.fp = crash.fp + self.event = crash.eventName + self.pid = crash.pid + self.tid = crash.tid + self.pc = crash.pc + self.sp = crash.sp + self.fp = crash.fp self.pc_label = crash.labelPC # Exception description. - self.exception = crash.exceptionName - self.exception_text = crash.exceptionDescription + self.exception = crash.exceptionName + self.exception_text = crash.exceptionDescription self.exception_address = crash.exceptionAddress - self.exception_label = crash.exceptionLabel - self.first_chance = crash.firstChance - self.fault_type = crash.faultType - self.fault_address = crash.faultAddress - self.fault_label = crash.faultLabel - self.fault_disasm = CrashDump.dump_code( crash.faultDisasm, - crash.pc ) - self.stack_trace = CrashDump.dump_stack_trace_with_labels( - crash.stackTracePretty ) + self.exception_label = crash.exceptionLabel + self.first_chance = crash.firstChance + self.fault_type = crash.faultType + self.fault_address = crash.faultAddress + self.fault_label = crash.faultLabel + self.fault_disasm = CrashDump.dump_code(crash.faultDisasm, crash.pc) + self.stack_trace = CrashDump.dump_stack_trace_with_labels(crash.stackTracePretty) # Command line. self.command_line = crash.commandLine @@ -687,11 +687,11 @@ def __init__(self, crash): if crash.environment: envList = crash.environment.items() envList.sort() - environment = '' + environment = "" for envKey, envVal in envList: # Must concatenate here instead of using a substitution, # so strings can be automatically promoted to Unicode. - environment += envKey + '=' + envVal + '\n' + environment += envKey + "=" + envVal + "\n" if environment: self.environment = environment @@ -701,7 +701,7 @@ def __init__(self, crash): # Notes. self.notes = crash.notesReport() - def toCrash(self, getMemoryDump = False): + def toCrash(self, getMemoryDump=False): """ Returns a L{Crash} object using the data retrieved from the database. @@ -714,8 +714,7 @@ def toCrash(self, getMemoryDump = False): """ crash = Marshaller.loads(str(self.data)) if not isinstance(crash, Crash): - raise TypeError( - "Expected Crash instance, got %s instead" % type(crash)) + raise TypeError("Expected Crash instance, got %s instead" % type(crash)) crash._rowid = self.id if not crash.memoryMap: memory = getattr(self, "memory", []) @@ -723,18 +722,20 @@ def toCrash(self, getMemoryDump = False): crash.memoryMap = [dto.toMBI(getMemoryDump) for dto in memory] return crash -#============================================================================== + +# ============================================================================== # TODO: add a method to modify already stored crash dumps. -class CrashDAO (BaseDAO): + +class CrashDAO(BaseDAO): """ Data Access Object to read, write and search for L{Crash} objects in a database. """ @Transactional - def add(self, crash, allow_duplicates = True): + def add(self, crash, allow_duplicates=True): """ Add a new crash dump to the database, optionally filtering them by signature to avoid duplicates. @@ -757,10 +758,8 @@ def add(self, crash, allow_duplicates = True): # Filter out duplicated crashes, if requested. if not allow_duplicates: - signature = pickle.dumps(crash.signature, protocol = 0) - if self._session.query(CrashDTO.id) \ - .filter_by(signature = signature) \ - .count() > 0: + signature = pickle.dumps(crash.signature, protocol=0) + if self._session.query(CrashDTO.id).filter_by(signature=signature).count() > 0: return # Fill out a new row for the crashes table. @@ -779,7 +778,6 @@ def __add_crash(self, crash): session = self._session r_crash = None try: - # Fill out a new row for the crashes table. r_crash = CrashDTO(crash) session.add(r_crash) @@ -790,13 +788,11 @@ def __add_crash(self, crash): finally: try: - # Make the ORM forget the CrashDTO object. if r_crash is not None: session.expire(r_crash) finally: - # Delete the last reference to the CrashDTO # object, so the Python garbage collector claims it. del r_crash @@ -814,10 +810,7 @@ def __add_memory(self, crash_id, memoryMap): session.flush() @Transactional - def find(self, - signature = None, order = 0, - since = None, until = None, - offset = None, limit = None): + def find(self, signature=None, order=0, since=None, until=None, offset=None, limit=None): """ Retrieve all crash dumps in the database, optionally filtering them by signature and timestamp, and/or sorting them by timestamp. @@ -857,18 +850,16 @@ def find(self, # Validate the parameters. if since and until and since > until: - warnings.warn("CrashDAO.find() got the 'since' and 'until'" - " arguments reversed, corrected automatically.") + warnings.warn("CrashDAO.find() got the 'since' and 'until'" " arguments reversed, corrected automatically.") since, until = until, since if limit is not None and not limit: - warnings.warn("CrashDAO.find() was set a limit of 0 results," - " returning without executing a query.") + warnings.warn("CrashDAO.find() was set a limit of 0 results," " returning without executing a query.") return [] # Build the SQL query. query = self._session.query(CrashDTO) if signature is not None: - sig_pickled = pickle.dumps(signature, protocol = 0) + sig_pickled = pickle.dumps(signature, protocol=0) query = query.filter(CrashDTO.signature == sig_pickled) if since: query = query.filter(CrashDTO.timestamp >= since) @@ -895,7 +886,7 @@ def find(self, return [] @Transactional - def find_by_example(self, crash, offset = None, limit = None): + def find_by_example(self, crash, offset=None, limit=None): """ Find all crash dumps that have common properties with the crash dump provided. @@ -924,8 +915,7 @@ def find_by_example(self, crash, offset = None, limit = None): # Validate the parameters. if limit is not None and not limit: - warnings.warn("CrashDAO.find_by_example() was set a limit of 0" - " results, returning without executing a query.") + warnings.warn("CrashDAO.find_by_example() was set a limit of 0" " results, returning without executing a query.") return [] # Build the query. @@ -941,9 +931,7 @@ def find_by_example(self, crash, offset = None, limit = None): # Filter all the fields in the crashes table that are present in the # CrashDTO object and not set to None, except for the row ID. for name, column in compat.iteritems(CrashDTO.__dict__): - if not name.startswith('__') and name not in ('id', - 'signature', - 'data'): + if not name.startswith("__") and name not in ("id", "signature", "data"): if isinstance(column, Column): value = getattr(dto, name, None) if value is not None: @@ -962,7 +950,7 @@ def find_by_example(self, crash, offset = None, limit = None): return [] @Transactional - def count(self, signature = None): + def count(self, signature=None): """ Counts how many crash dumps have been stored in this database. Optionally filters the count by heuristic signature. @@ -976,8 +964,8 @@ def count(self, signature = None): """ query = self._session.query(CrashDTO.id) if signature: - sig_pickled = pickle.dumps(signature, protocol = 0) - query = query.filter_by(signature = sig_pickled) + sig_pickled = pickle.dumps(signature, protocol=0) + query = query.filter_by(signature=sig_pickled) return query.count() @Transactional @@ -988,6 +976,6 @@ def delete(self, crash): @type crash: L{Crash} @param crash: Crash dump to remove. """ - query = self._session.query(CrashDTO).filter_by(id = crash._rowid) - query.delete(synchronize_session = False) + query = self._session.query(CrashDTO).filter_by(id=crash._rowid) + query.delete(synchronize_session=False) del crash._rowid diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py index 9ee320012..11eea80c5 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/system.py @@ -39,13 +39,12 @@ __revision__ = "$Id$" -__all__ = ['System'] +__all__ = ["System"] from winappdbg import win32 from winappdbg.registry import Registry from winappdbg.textio import HexInput, HexDump -from winappdbg.util import Regenerator, PathOperations, MemoryAddresses, DebugRegister, \ - classproperty +from winappdbg.util import Regenerator, PathOperations, MemoryAddresses, DebugRegister, classproperty from winappdbg.process import _ProcessContainer from winappdbg.window import Window @@ -56,9 +55,10 @@ from os import path, getenv -#============================================================================== +# ============================================================================== -class System (_ProcessContainer): + +class System(_ProcessContainer): """ Interface to a batch of processes, plus some system wide settings. Contains a snapshot of processes. @@ -116,9 +116,9 @@ class System (_ProcessContainer): @cvar registry: Windows Registry for this machine. """ - arch = win32.arch - bits = win32.bits - os = win32.os + arch = win32.arch + bits = win32.bits + os = win32.os wow64 = win32.wow64 @classproperty @@ -129,10 +129,10 @@ def pageSize(cls): registry = Registry() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @staticmethod - def find_window(className = None, windowName = None): + def find_window(className=None, windowName=None): """ Find the first top-level window in the current desktop to match the given class name and/or window name. If neither are provided any @@ -180,7 +180,7 @@ def get_window_at(x, y): @raise WindowsError: An error occured while processing this request. """ - return Window( win32.WindowFromPoint( (x, y) ) ) + return Window(win32.WindowFromPoint((x, y))) @staticmethod def get_foreground_window(): @@ -189,7 +189,7 @@ def get_foreground_window(): @return: Returns the foreground window. @raise WindowsError: An error occured while processing this request. """ - return Window( win32.GetForegroundWindow() ) + return Window(win32.GetForegroundWindow()) @staticmethod def get_desktop_window(): @@ -198,7 +198,7 @@ def get_desktop_window(): @return: Returns the desktop window. @raise WindowsError: An error occured while processing this request. """ - return Window( win32.GetDesktopWindow() ) + return Window(win32.GetDesktopWindow()) @staticmethod def get_shell_window(): @@ -207,12 +207,12 @@ def get_shell_window(): @return: Returns the shell window. @raise WindowsError: An error occured while processing this request. """ - return Window( win32.GetShellWindow() ) + return Window(win32.GetShellWindow()) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @classmethod - def request_debug_privileges(cls, bIgnoreExceptions = False): + def request_debug_privileges(cls, bIgnoreExceptions=False): """ Requests debug privileges. @@ -238,7 +238,7 @@ def request_debug_privileges(cls, bIgnoreExceptions = False): return False @classmethod - def drop_debug_privileges(cls, bIgnoreExceptions = False): + def drop_debug_privileges(cls, bIgnoreExceptions=False): """ Drops debug privileges. @@ -300,9 +300,8 @@ def adjust_privileges(state, privileges): @raise WindowsError: Raises an exception on error. """ - with win32.OpenProcessToken(win32.GetCurrentProcess(), - win32.TOKEN_ADJUST_PRIVILEGES) as hToken: - NewState = ( (priv, state) for priv in privileges ) + with win32.OpenProcessToken(win32.GetCurrentProcess(), win32.TOKEN_ADJUST_PRIVILEGES) as hToken: + NewState = ((priv, state) for priv in privileges) win32.AdjustTokenPrivileges(hToken, NewState) @staticmethod @@ -315,35 +314,35 @@ def is_admin(): """ return win32.IsUserAnAdmin() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ __binary_types = { - win32.VFT_APP: "application", - win32.VFT_DLL: "dynamic link library", + win32.VFT_APP: "application", + win32.VFT_DLL: "dynamic link library", win32.VFT_STATIC_LIB: "static link library", - win32.VFT_FONT: "font", - win32.VFT_DRV: "driver", - win32.VFT_VXD: "legacy driver", + win32.VFT_FONT: "font", + win32.VFT_DRV: "driver", + win32.VFT_VXD: "legacy driver", } __driver_types = { - win32.VFT2_DRV_COMM: "communications driver", - win32.VFT2_DRV_DISPLAY: "display driver", - win32.VFT2_DRV_INSTALLABLE: "installable driver", - win32.VFT2_DRV_KEYBOARD: "keyboard driver", - win32.VFT2_DRV_LANGUAGE: "language driver", - win32.VFT2_DRV_MOUSE: "mouse driver", - win32.VFT2_DRV_NETWORK: "network driver", - win32.VFT2_DRV_PRINTER: "printer driver", - win32.VFT2_DRV_SOUND: "sound driver", - win32.VFT2_DRV_SYSTEM: "system driver", - win32.VFT2_DRV_VERSIONED_PRINTER: "versioned printer driver", + win32.VFT2_DRV_COMM: "communications driver", + win32.VFT2_DRV_DISPLAY: "display driver", + win32.VFT2_DRV_INSTALLABLE: "installable driver", + win32.VFT2_DRV_KEYBOARD: "keyboard driver", + win32.VFT2_DRV_LANGUAGE: "language driver", + win32.VFT2_DRV_MOUSE: "mouse driver", + win32.VFT2_DRV_NETWORK: "network driver", + win32.VFT2_DRV_PRINTER: "printer driver", + win32.VFT2_DRV_SOUND: "sound driver", + win32.VFT2_DRV_SYSTEM: "system driver", + win32.VFT2_DRV_VERSIONED_PRINTER: "versioned printer driver", } __font_types = { - win32.VFT2_FONT_RASTER: "raster font", + win32.VFT2_FONT_RASTER: "raster font", win32.VFT2_FONT_TRUETYPE: "TrueType font", - win32.VFT2_FONT_VECTOR: "vector font", + win32.VFT2_FONT_VECTOR: "vector font", } __months = ( @@ -420,17 +419,14 @@ def get_file_version_info(cls, filename): pBuffer, dwLen = win32.VerQueryValue(pBlock, "\\") if dwLen != ctypes.sizeof(win32.VS_FIXEDFILEINFO): raise ctypes.WinError(win32.ERROR_BAD_LENGTH) - pVersionInfo = ctypes.cast(pBuffer, - ctypes.POINTER(win32.VS_FIXEDFILEINFO)) + pVersionInfo = ctypes.cast(pBuffer, ctypes.POINTER(win32.VS_FIXEDFILEINFO)) VersionInfo = pVersionInfo.contents if VersionInfo.dwSignature != 0xFEEF04BD: raise ctypes.WinError(win32.ERROR_BAD_ARGUMENTS) # File and product versions. - FileVersion = "%d.%d" % (VersionInfo.dwFileVersionMS, - VersionInfo.dwFileVersionLS) - ProductVersion = "%d.%d" % (VersionInfo.dwProductVersionMS, - VersionInfo.dwProductVersionLS) + FileVersion = "%d.%d" % (VersionInfo.dwFileVersionMS, VersionInfo.dwFileVersionLS) + ProductVersion = "%d.%d" % (VersionInfo.dwProductVersionMS, VersionInfo.dwProductVersionLS) # Debug build? if VersionInfo.dwFileFlagsMask & win32.VS_FF_DEBUG: @@ -439,7 +435,7 @@ def get_file_version_info(cls, filename): DebugBuild = None # Legacy OS build? - LegacyBuild = (VersionInfo.dwFileOS != win32.VOS_NT_WINDOWS32) + LegacyBuild = VersionInfo.dwFileOS != win32.VOS_NT_WINDOWS32 # File type. FileType = cls.__binary_types.get(VersionInfo.dwFileType) @@ -476,77 +472,53 @@ def get_file_version_info(cls, filename): CreationTimestamp, ) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # Locations for dbghelp.dll. # Unfortunately, Microsoft started bundling WinDbg with the # platform SDK, so the install directories may vary across # versions and platforms. __dbghelp_locations = { - # Intel 64 bits. - win32.ARCH_AMD64: set([ - - # WinDbg bundled with the SDK, version 8.0. - path.join( - getenv("ProgramFiles", "C:\\Program Files"), - "Windows Kits", - "8.0", - "Debuggers", - "x64", - "dbghelp.dll"), - path.join( - getenv("ProgramW6432", getenv("ProgramFiles", - "C:\\Program Files")), - "Windows Kits", - "8.0", - "Debuggers", - "x64", - "dbghelp.dll"), - - # Old standalone versions of WinDbg. - path.join( - getenv("ProgramFiles", "C:\\Program Files"), - "Debugging Tools for Windows (x64)", - "dbghelp.dll"), - ]), - + win32.ARCH_AMD64: set( + [ + # WinDbg bundled with the SDK, version 8.0. + path.join(getenv("ProgramFiles", "C:\\Program Files"), "Windows Kits", "8.0", "Debuggers", "x64", "dbghelp.dll"), + path.join( + getenv("ProgramW6432", getenv("ProgramFiles", "C:\\Program Files")), + "Windows Kits", + "8.0", + "Debuggers", + "x64", + "dbghelp.dll", + ), + # Old standalone versions of WinDbg. + path.join(getenv("ProgramFiles", "C:\\Program Files"), "Debugging Tools for Windows (x64)", "dbghelp.dll"), + ] + ), # Intel 32 bits. - win32.ARCH_I386 : set([ - - # WinDbg bundled with the SDK, version 8.0. - path.join( - getenv("ProgramFiles", "C:\\Program Files"), - "Windows Kits", - "8.0", - "Debuggers", - "x86", - "dbghelp.dll"), - path.join( - getenv("ProgramW6432", getenv("ProgramFiles", - "C:\\Program Files")), - "Windows Kits", - "8.0", - "Debuggers", - "x86", - "dbghelp.dll"), - - # Old standalone versions of WinDbg. - path.join( - getenv("ProgramFiles", "C:\\Program Files"), - "Debugging Tools for Windows (x86)", - "dbghelp.dll"), - - # Version shipped with Windows. - path.join( - getenv("ProgramFiles", "C:\\Program Files"), - "Debugging Tools for Windows (x86)", - "dbghelp.dll"), - ]), + win32.ARCH_I386: set( + [ + # WinDbg bundled with the SDK, version 8.0. + path.join(getenv("ProgramFiles", "C:\\Program Files"), "Windows Kits", "8.0", "Debuggers", "x86", "dbghelp.dll"), + path.join( + getenv("ProgramW6432", getenv("ProgramFiles", "C:\\Program Files")), + "Windows Kits", + "8.0", + "Debuggers", + "x86", + "dbghelp.dll", + ), + # Old standalone versions of WinDbg. + path.join(getenv("ProgramFiles", "C:\\Program Files"), "Debugging Tools for Windows (x86)", "dbghelp.dll"), + # Version shipped with Windows. + path.join(getenv("ProgramFiles", "C:\\Program Files"), "Debugging Tools for Windows (x86)", "dbghelp.dll"), + ] + ), } @classmethod - def load_dbghelp(cls, pathname = None): + def load_dbghelp(cls, pathname=None): """ Load the specified version of the C{dbghelp.dll} library. @@ -597,7 +569,6 @@ def simple_debugger( argv ): # If an explicit pathname was not given, search for the library. if not pathname: - # Under WOW64 we'll treat AMD64 as I386. arch = win32.arch if arch == win32.ARCH_AMD64 and win32.bits == 32: @@ -606,7 +577,7 @@ def simple_debugger( argv ): # Check if the architecture is supported. if not arch in cls.__dbghelp_locations: msg = "Architecture %s is not currently supported." - raise NotImplementedError(msg % arch) + raise NotImplementedError(msg % arch) # Grab all versions of the library we can find. found = [] @@ -621,7 +592,7 @@ def simple_debugger( argv ): f_ver = p_ver elif p_ver and p_ver > f_ver: f_ver = p_ver - found.append( (f_ver, pathname) ) + found.append((f_ver, pathname)) # If we found any, use the newest version. if found: @@ -642,9 +613,7 @@ def simple_debugger( argv ): return dbghelp @staticmethod - def fix_symbol_store_path(symbol_store_path = None, - remote = True, - force = False): + def fix_symbol_store_path(symbol_store_path=None, remote=True, force=False): """ Fix the symbol store path. Equivalent to the C{.symfix} command in Microsoft WinDbg. @@ -716,12 +685,7 @@ def simple_debugger( argv ): if not path.isdir(local_path): local_path = path.abspath(".") if remote: - symbol_store_path = ( - "cache*;SRV*" - + local_path + - "*" - "http://msdl.microsoft.com/download/symbols" - ) + symbol_store_path = "cache*;SRV*" + local_path + "*" "http://msdl.microsoft.com/download/symbols" else: symbol_store_path = "cache*;SRV*" + local_path previous = os.environ.get("_NT_SYMBOL_PATH", None) @@ -730,13 +694,12 @@ def simple_debugger( argv ): return previous except Exception: e = sys.exc_info()[1] - warnings.warn("Cannot fix symbol path, reason: %s" % str(e), - RuntimeWarning) + warnings.warn("Cannot fix symbol path, reason: %s" % str(e), RuntimeWarning) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @staticmethod - def set_kill_on_exit_mode(bKillOnExit = False): + def set_kill_on_exit_mode(bKillOnExit=False): """ Defines the behavior of the debugged processes when the debugging thread dies. This method only affects the calling thread. @@ -793,14 +756,11 @@ def read_msr(address): It works on my machine, but your mileage may vary. """ if win32.arch not in (win32.ARCH_I386, win32.ARCH_AMD64): - raise NotImplementedError( - "MSR reading is only supported on i386 or amd64 processors.") - msr = win32.SYSDBG_MSR() + raise NotImplementedError("MSR reading is only supported on i386 or amd64 processors.") + msr = win32.SYSDBG_MSR() msr.Address = address - msr.Data = 0 - win32.NtSystemDebugControl(win32.SysDbgReadMsr, - InputBuffer = msr, - OutputBuffer = msr) + msr.Data = 0 + win32.NtSystemDebugControl(win32.SysDbgReadMsr, InputBuffer=msr, OutputBuffer=msr) return msr.Data @staticmethod @@ -825,12 +785,11 @@ def write_msr(address, value): It works on my machine, but your mileage may vary. """ if win32.arch not in (win32.ARCH_I386, win32.ARCH_AMD64): - raise NotImplementedError( - "MSR writing is only supported on i386 or amd64 processors.") - msr = win32.SYSDBG_MSR() + raise NotImplementedError("MSR writing is only supported on i386 or amd64 processors.") + msr = win32.SYSDBG_MSR() msr.Address = address - msr.Data = value - win32.NtSystemDebugControl(win32.SysDbgWriteMsr, InputBuffer = msr) + msr.Data = value + win32.NtSystemDebugControl(win32.SysDbgWriteMsr, InputBuffer=msr) @classmethod def enable_step_on_branch_mode(cls): @@ -855,8 +814,7 @@ def enable_step_on_branch_mode(cls): Maybe it fails in other virtualization/emulation environments, no extensive testing was made so far. """ - cls.write_msr(DebugRegister.DebugCtlMSR, - DebugRegister.BranchTrapFlag | DebugRegister.LastBranchRecord) + cls.write_msr(DebugRegister.DebugCtlMSR, DebugRegister.BranchTrapFlag | DebugRegister.LastBranchRecord) @classmethod def get_last_branch_location(cls): @@ -883,13 +841,13 @@ def get_last_branch_location(cls): no extensive testing was made so far. """ LastBranchFromIP = cls.read_msr(DebugRegister.LastBranchFromIP) - LastBranchToIP = cls.read_msr(DebugRegister.LastBranchToIP) - return ( LastBranchFromIP, LastBranchToIP ) + LastBranchToIP = cls.read_msr(DebugRegister.LastBranchToIP) + return (LastBranchFromIP, LastBranchToIP) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @classmethod - def get_postmortem_debugger(cls, bits = None): + def get_postmortem_debugger(cls, bits=None): """ Returns the postmortem debugging settings from the Registry. @@ -915,15 +873,15 @@ def get_postmortem_debugger(cls, bits = None): raise NotImplementedError("Unknown architecture (%r bits)" % bits) if bits == 32 and cls.bits == 64: - keyname = 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug' + keyname = "HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug" else: - keyname = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug' + keyname = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug" key = cls.registry[keyname] - debugger = key.get('Debugger') - auto = key.get('Auto') - hotkey = key.get('UserDebuggerHotkey') + debugger = key.get("Debugger") + auto = key.get("Auto") + hotkey = key.get("UserDebuggerHotkey") if auto is not None: auto = bool(auto) @@ -931,7 +889,7 @@ def get_postmortem_debugger(cls, bits = None): return (debugger, auto, hotkey) @classmethod - def get_postmortem_exclusion_list(cls, bits = None): + def get_postmortem_exclusion_list(cls, bits=None): """ Returns the exclusion list for the postmortem debugger. @@ -953,9 +911,9 @@ def get_postmortem_exclusion_list(cls, bits = None): raise NotImplementedError("Unknown architecture (%r bits)" % bits) if bits == 32 and cls.bits == 64: - keyname = 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" else: - keyname = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" try: key = cls.registry[keyname] @@ -965,8 +923,7 @@ def get_postmortem_exclusion_list(cls, bits = None): return [name for (name, enabled) in key.items() if enabled] @classmethod - def set_postmortem_debugger(cls, cmdline, - auto = None, hotkey = None, bits = None): + def set_postmortem_debugger(cls, cmdline, auto=None, hotkey=None, bits=None): """ Sets the postmortem debugging settings in the Registry. @@ -1007,21 +964,21 @@ def set_postmortem_debugger(cls, cmdline, raise NotImplementedError("Unknown architecture (%r bits)" % bits) if bits == 32 and cls.bits == 64: - keyname = 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug' + keyname = "HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug" else: - keyname = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug' + keyname = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug" key = cls.registry[keyname] if cmdline is not None: - key['Debugger'] = cmdline + key["Debugger"] = cmdline if auto is not None: - key['Auto'] = int(bool(auto)) + key["Auto"] = int(bool(auto)) if hotkey is not None: - key['UserDebuggerHotkey'] = int(hotkey) + key["UserDebuggerHotkey"] = int(hotkey) @classmethod - def add_to_postmortem_exclusion_list(cls, pathname, bits = None): + def add_to_postmortem_exclusion_list(cls, pathname, bits=None): """ Adds the given filename to the exclusion list for postmortem debugging. @@ -1046,9 +1003,9 @@ def add_to_postmortem_exclusion_list(cls, pathname, bits = None): raise NotImplementedError("Unknown architecture (%r bits)" % bits) if bits == 32 and cls.bits == 64: - keyname = 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" else: - keyname = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" try: key = cls.registry[keyname] @@ -1058,7 +1015,7 @@ def add_to_postmortem_exclusion_list(cls, pathname, bits = None): key[pathname] = 1 @classmethod - def remove_from_postmortem_exclusion_list(cls, pathname, bits = None): + def remove_from_postmortem_exclusion_list(cls, pathname, bits=None): """ Removes the given filename to the exclusion list for postmortem debugging from the Registry. @@ -1091,9 +1048,9 @@ def remove_from_postmortem_exclusion_list(cls, pathname, bits = None): raise NotImplementedError("Unknown architecture (%r bits)" % bits) if bits == 32 and cls.bits == 64: - keyname = 'HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" else: - keyname = 'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList' + keyname = "HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug\\AutoExclusionList" try: key = cls.registry[keyname] @@ -1105,7 +1062,7 @@ def remove_from_postmortem_exclusion_list(cls, pathname, bits = None): except KeyError: return -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @staticmethod def get_services(): @@ -1119,13 +1076,11 @@ def get_services(): @rtype: list( L{win32.ServiceStatusProcessEntry} ) @return: List of service status descriptors. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_ENUMERATE_SERVICE - ) as hSCManager: - try: - return win32.EnumServicesStatusEx(hSCManager) - except AttributeError: - return win32.EnumServicesStatus(hSCManager) + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_ENUMERATE_SERVICE) as hSCManager: + try: + return win32.EnumServicesStatusEx(hSCManager) + except AttributeError: + return win32.EnumServicesStatus(hSCManager) @staticmethod def get_active_services(): @@ -1139,13 +1094,12 @@ def get_active_services(): @rtype: list( L{win32.ServiceStatusProcessEntry} ) @return: List of service status descriptors. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_ENUMERATE_SERVICE - ) as hSCManager: - return [ entry for entry in win32.EnumServicesStatusEx(hSCManager, - dwServiceType = win32.SERVICE_WIN32, - dwServiceState = win32.SERVICE_ACTIVE) \ - if entry.ProcessId ] + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_ENUMERATE_SERVICE) as hSCManager: + return [ + entry + for entry in win32.EnumServicesStatusEx(hSCManager, dwServiceType=win32.SERVICE_WIN32, dwServiceState=win32.SERVICE_ACTIVE) + if entry.ProcessId + ] @staticmethod def get_service(name): @@ -1163,12 +1117,8 @@ def get_service(name): @rtype: L{win32.ServiceStatusProcess} @return: Service status descriptor. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_ENUMERATE_SERVICE - ) as hSCManager: - with win32.OpenService(hSCManager, name, - dwDesiredAccess = win32.SERVICE_QUERY_STATUS - ) as hService: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_ENUMERATE_SERVICE) as hSCManager: + with win32.OpenService(hSCManager, name, dwDesiredAccess=win32.SERVICE_QUERY_STATUS) as hService: try: return win32.QueryServiceStatusEx(hService) except AttributeError: @@ -1189,9 +1139,7 @@ def get_service_display_name(name): @rtype: str @return: Service display name. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_ENUMERATE_SERVICE - ) as hSCManager: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_ENUMERATE_SERVICE) as hSCManager: return win32.GetServiceDisplayName(hSCManager, name) @staticmethod @@ -1209,13 +1157,11 @@ def get_service_from_display_name(displayName): @rtype: str @return: Service unique name. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_ENUMERATE_SERVICE - ) as hSCManager: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_ENUMERATE_SERVICE) as hSCManager: return win32.GetServiceKeyName(hSCManager, displayName) @staticmethod - def start_service(name, argv = None): + def start_service(name, argv=None): """ Start the service given by name. @@ -1228,12 +1174,8 @@ def start_service(name, argv = None): C{ServiceName} member of the service descriptors returned by L{get_services} or L{get_active_services}. """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_CONNECT - ) as hSCManager: - with win32.OpenService(hSCManager, name, - dwDesiredAccess = win32.SERVICE_START - ) as hService: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_CONNECT) as hSCManager: + with win32.OpenService(hSCManager, name, dwDesiredAccess=win32.SERVICE_START) as hService: win32.StartService(hService) @staticmethod @@ -1246,12 +1188,8 @@ def stop_service(name): @see: L{get_services}, L{get_active_services}, L{start_service}, L{pause_service}, L{resume_service} """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_CONNECT - ) as hSCManager: - with win32.OpenService(hSCManager, name, - dwDesiredAccess = win32.SERVICE_STOP - ) as hService: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_CONNECT) as hSCManager: + with win32.OpenService(hSCManager, name, dwDesiredAccess=win32.SERVICE_STOP) as hService: win32.ControlService(hService, win32.SERVICE_CONTROL_STOP) @staticmethod @@ -1266,12 +1204,8 @@ def pause_service(name): @see: L{get_services}, L{get_active_services}, L{start_service}, L{stop_service}, L{resume_service} """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_CONNECT - ) as hSCManager: - with win32.OpenService(hSCManager, name, - dwDesiredAccess = win32.SERVICE_PAUSE_CONTINUE - ) as hService: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_CONNECT) as hSCManager: + with win32.OpenService(hSCManager, name, dwDesiredAccess=win32.SERVICE_PAUSE_CONTINUE) as hService: win32.ControlService(hService, win32.SERVICE_CONTROL_PAUSE) @staticmethod @@ -1286,12 +1220,8 @@ def resume_service(name): @see: L{get_services}, L{get_active_services}, L{start_service}, L{stop_service}, L{pause_service} """ - with win32.OpenSCManager( - dwDesiredAccess = win32.SC_MANAGER_CONNECT - ) as hSCManager: - with win32.OpenService(hSCManager, name, - dwDesiredAccess = win32.SERVICE_PAUSE_CONTINUE - ) as hService: + with win32.OpenSCManager(dwDesiredAccess=win32.SC_MANAGER_CONNECT) as hSCManager: + with win32.OpenService(hSCManager, name, dwDesiredAccess=win32.SERVICE_PAUSE_CONTINUE) as hService: win32.ControlService(hService, win32.SERVICE_CONTROL_CONTINUE) # TODO: create_service, delete_service diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py index 402f631d5..afb4de21e 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/textio.py @@ -44,16 +44,16 @@ __revision__ = "$Id$" -__all__ = [ - 'HexDump', - 'HexInput', - 'HexOutput', - 'Color', - 'Table', - 'CrashDump', - 'DebugLog', - 'Logger', - ] +__all__ = [ + "HexDump", + "HexInput", + "HexOutput", + "Color", + "Table", + "CrashDump", + "DebugLog", + "Logger", +] import sys from winappdbg import win32 @@ -65,9 +65,10 @@ import struct import traceback -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ -class HexInput (StaticClass): + +class HexInput(StaticClass): """ Static functions for user input parsing. The counterparts for each method are in the L{HexOutput} class. @@ -86,20 +87,20 @@ def integer(token): """ token = token.strip() neg = False - if token.startswith(compat.b('-')): + if token.startswith(compat.b("-")): token = token[1:] neg = True - if token.startswith(compat.b('0x')): - result = int(token, 16) # hexadecimal - elif token.startswith(compat.b('0b')): + if token.startswith(compat.b("0x")): + result = int(token, 16) # hexadecimal + elif token.startswith(compat.b("0b")): result = int(token[2:], 2) # binary - elif token.startswith(compat.b('0o')): - result = int(token, 8) # octal + elif token.startswith(compat.b("0o")): + result = int(token, 8) # octal else: try: - result = int(token) # decimal + result = int(token) # decimal except ValueError: - result = int(token, 16) # hexadecimal (no "0x" prefix) + result = int(token, 16) # hexadecimal (no "0x" prefix) if neg: result = -result return result @@ -128,14 +129,14 @@ def hexadecimal(token): @rtype: str @return: Parsed string value. """ - token = ''.join([ c for c in token if c.isalnum() ]) + token = "".join([c for c in token if c.isalnum()]) if len(token) % 2 != 0: raise ValueError("Missing characters in hex data") - data = '' + data = "" for i in compat.xrange(0, len(token), 2): - x = token[i:i+2] + x = token[i : i + 2] d = int(x, 16) - s = struct.pack('= 0: - return ('0x%%.%dx' % (integer_size - 2)) % integer - return ('-0x%%.%dx' % (integer_size - 2)) % -integer + return ("0x%%.%dx" % (integer_size - 2)) % integer + return ("-0x%%.%dx" % (integer_size - 2)) % -integer @classmethod - def address(cls, address, bits = None): + def address(cls, address, bits=None): """ @type address: int @param address: Memory address. @@ -364,8 +367,8 @@ def address(cls, address, bits = None): else: address_size = (bits / 4) + 2 if address < 0: - address = ((2 ** bits) - 1) ^ ~address - return ('0x%%.%dx' % (address_size - 2)) % address + address = ((2**bits) - 1) ^ ~address + return ("0x%%.%dx" % (address_size - 2)) % address @staticmethod def hexadecimal(data): @@ -378,10 +381,10 @@ def hexadecimal(data): @rtype: str @return: Hexadecimal representation. """ - return HexDump.hexadecimal(data, separator = '') + return HexDump.hexadecimal(data, separator="") @classmethod - def integer_list_file(cls, filename, values, bits = None): + def integer_list_file(cls, filename, values, bits=None): """ Write a list of integers to a file. If a file of the same name exists, it's contents are replaced. @@ -399,7 +402,7 @@ def integer_list_file(cls, filename, values, bits = None): (Optional) Number of bits of the target architecture. The default is platform dependent. See: L{HexOutput.integer_size} """ - fd = open(filename, 'w') + fd = open(filename, "w") for integer in values: print >> fd, cls.integer(integer, bits) fd.close() @@ -418,7 +421,7 @@ def string_list_file(cls, filename, values): @type values: list( int ) @param values: List of strings to write to the file. """ - fd = open(filename, 'w') + fd = open(filename, "w") for string in values: print >> fd, string fd.close() @@ -442,7 +445,7 @@ def mixed_list_file(cls, filename, values, bits): (Optional) Number of bits of the target architecture. The default is platform dependent. See: L{HexOutput.integer_size} """ - fd = open(filename, 'w') + fd = open(filename, "w") for original in values: try: parsed = cls.integer(original, bits) @@ -451,9 +454,11 @@ def mixed_list_file(cls, filename, values, bits): print >> fd, parsed fd.close() -#------------------------------------------------------------------------------ -class HexDump (StaticClass): +# ------------------------------------------------------------------------------ + + +class HexDump(StaticClass): """ Static functions for hexadecimal dumps. @@ -466,11 +471,11 @@ class HexDump (StaticClass): This value is platform dependent. """ - integer_size = (win32.SIZEOF(win32.DWORD) * 2) - address_size = (win32.SIZEOF(win32.SIZE_T) * 2) + integer_size = win32.SIZEOF(win32.DWORD) * 2 + address_size = win32.SIZEOF(win32.SIZE_T) * 2 @classmethod - def integer(cls, integer, bits = None): + def integer(cls, integer, bits=None): """ @type integer: int @param integer: Integer. @@ -487,10 +492,10 @@ def integer(cls, integer, bits = None): integer_size = cls.integer_size else: integer_size = bits / 4 - return ('%%.%dX' % integer_size) % integer + return ("%%.%dX" % integer_size) % integer @classmethod - def address(cls, address, bits = None): + def address(cls, address, bits=None): """ @type address: int @param address: Memory address. @@ -509,8 +514,8 @@ def address(cls, address, bits = None): else: address_size = bits / 4 if address < 0: - address = ((2 ** bits) - 1) ^ ~address - return ('%%.%dX' % address_size) % address + address = ((2**bits) - 1) ^ ~address + return ("%%.%dX" % address_size) % address @staticmethod def printable(data): @@ -523,16 +528,16 @@ def printable(data): @rtype: str @return: Printable text. """ - result = '' + result = "" for c in data: if 32 < ord(c) < 128: result += c else: - result += '.' + result += "." return result @staticmethod - def hexadecimal(data, separator = ''): + def hexadecimal(data, separator=""): """ Convert binary data to a string of hexadecimal numbers. @@ -546,10 +551,10 @@ def hexadecimal(data, separator = ''): @rtype: str @return: Hexadecimal representation. """ - return separator.join( [ '%.2x' % ord(c) for c in data ] ) + return separator.join(["%.2x" % ord(c) for c in data]) @staticmethod - def hexa_word(data, separator = ' '): + def hexa_word(data, separator=" "): """ Convert binary data to a string of hexadecimal WORDs. @@ -564,12 +569,11 @@ def hexa_word(data, separator = ' '): @return: Hexadecimal representation. """ if len(data) & 1 != 0: - data += '\0' - return separator.join( [ '%.4x' % struct.unpack(' 0: - width.extend( len_row[ -missing : ] ) + width.extend(len_row[-missing:]) elif missing < 0: - len_row.extend( [0] * (-missing) ) - self.__width = [ max( width[i], len_row[i] ) for i in compat.xrange(len(len_row)) ] + len_row.extend([0] * (-missing)) + self.__width = [max(width[i], len_row[i]) for i in compat.xrange(len(len_row))] self.__cols.append(row) def justify(self, column, direction): @@ -1148,9 +1121,9 @@ def justify(self, column, direction): @raise ValueError: Bad direction value. """ if direction == -1: - self.__width[column] = abs(self.__width[column]) + self.__width[column] = abs(self.__width[column]) elif direction == 1: - self.__width[column] = - abs(self.__width[column]) + self.__width[column] = -abs(self.__width[column]) else: raise ValueError("Bad direction value.") @@ -1164,7 +1137,7 @@ def getWidth(self): """ width = 0 if self.__width: - width = sum( abs(x) for x in self.__width ) + width = sum(abs(x) for x in self.__width) width = width + len(self.__width) * len(self.__sep) + 1 return width @@ -1175,7 +1148,7 @@ def getOutput(self): @rtype: str @return: Text output. """ - return '%s\n' % '\n'.join( self.yieldOutput() ) + return "%s\n" % "\n".join(self.yieldOutput()) def yieldOutput(self): """ @@ -1187,12 +1160,12 @@ def yieldOutput(self): width = self.__width if width: num_cols = len(width) - fmt = ['%%%ds' % -w for w in width] + fmt = ["%%%ds" % -w for w in width] if width[-1] > 0: - fmt[-1] = '%s' + fmt[-1] = "%s" fmt = self.__sep.join(fmt) for row in self.__cols: - row.extend( [''] * (num_cols - len(row)) ) + row.extend([""] * (num_cols - len(row))) yield fmt % tuple(row) def show(self): @@ -1201,9 +1174,11 @@ def show(self): """ print(self.getOutput()) -#------------------------------------------------------------------------------ -class CrashDump (StaticClass): +# ------------------------------------------------------------------------------ + + +class CrashDump(StaticClass): """ Static functions for crash dumps. @@ -1213,21 +1188,21 @@ class CrashDump (StaticClass): # Templates for the dump_registers method. reg_template = { - win32.ARCH_I386 : ( - 'eax=%(Eax).8x ebx=%(Ebx).8x ecx=%(Ecx).8x edx=%(Edx).8x esi=%(Esi).8x edi=%(Edi).8x\n' - 'eip=%(Eip).8x esp=%(Esp).8x ebp=%(Ebp).8x %(efl_dump)s\n' - 'cs=%(SegCs).4x ss=%(SegSs).4x ds=%(SegDs).4x es=%(SegEs).4x fs=%(SegFs).4x gs=%(SegGs).4x efl=%(EFlags).8x\n' - ), - win32.ARCH_AMD64 : ( - 'rax=%(Rax).16x rbx=%(Rbx).16x rcx=%(Rcx).16x\n' - 'rdx=%(Rdx).16x rsi=%(Rsi).16x rdi=%(Rdi).16x\n' - 'rip=%(Rip).16x rsp=%(Rsp).16x rbp=%(Rbp).16x\n' - ' r8=%(R8).16x r9=%(R9).16x r10=%(R10).16x\n' - 'r11=%(R11).16x r12=%(R12).16x r13=%(R13).16x\n' - 'r14=%(R14).16x r15=%(R15).16x\n' - '%(efl_dump)s\n' - 'cs=%(SegCs).4x ss=%(SegSs).4x ds=%(SegDs).4x es=%(SegEs).4x fs=%(SegFs).4x gs=%(SegGs).4x efl=%(EFlags).8x\n' - ), + win32.ARCH_I386: ( + "eax=%(Eax).8x ebx=%(Ebx).8x ecx=%(Ecx).8x edx=%(Edx).8x esi=%(Esi).8x edi=%(Edi).8x\n" + "eip=%(Eip).8x esp=%(Esp).8x ebp=%(Ebp).8x %(efl_dump)s\n" + "cs=%(SegCs).4x ss=%(SegSs).4x ds=%(SegDs).4x es=%(SegEs).4x fs=%(SegFs).4x gs=%(SegGs).4x efl=%(EFlags).8x\n" + ), + win32.ARCH_AMD64: ( + "rax=%(Rax).16x rbx=%(Rbx).16x rcx=%(Rcx).16x\n" + "rdx=%(Rdx).16x rsi=%(Rsi).16x rdi=%(Rdi).16x\n" + "rip=%(Rip).16x rsp=%(Rsp).16x rbp=%(Rbp).16x\n" + " r8=%(R8).16x r9=%(R9).16x r10=%(R10).16x\n" + "r11=%(R11).16x r12=%(R12).16x r13=%(R13).16x\n" + "r14=%(R14).16x r15=%(R15).16x\n" + "%(efl_dump)s\n" + "cs=%(SegCs).4x ss=%(SegSs).4x ds=%(SegDs).4x es=%(SegEs).4x fs=%(SegFs).4x gs=%(SegGs).4x efl=%(EFlags).8x\n" + ), } @staticmethod @@ -1244,56 +1219,56 @@ def dump_flags(efl): @return: Text suitable for logging. """ if efl is None: - return '' - efl_dump = 'iopl=%1d' % ((efl & 0x3000) >> 12) + return "" + efl_dump = "iopl=%1d" % ((efl & 0x3000) >> 12) if efl & 0x100000: - efl_dump += ' vip' + efl_dump += " vip" else: - efl_dump += ' ' + efl_dump += " " if efl & 0x80000: - efl_dump += ' vif' + efl_dump += " vif" else: - efl_dump += ' ' + efl_dump += " " # 0x20000 ??? if efl & 0x800: - efl_dump += ' ov' # Overflow + efl_dump += " ov" # Overflow else: - efl_dump += ' no' # No overflow + efl_dump += " no" # No overflow if efl & 0x400: - efl_dump += ' dn' # Downwards + efl_dump += " dn" # Downwards else: - efl_dump += ' up' # Upwards + efl_dump += " up" # Upwards if efl & 0x200: - efl_dump += ' ei' # Enable interrupts + efl_dump += " ei" # Enable interrupts else: - efl_dump += ' di' # Disable interrupts + efl_dump += " di" # Disable interrupts # 0x100 trap flag if efl & 0x80: - efl_dump += ' ng' # Negative + efl_dump += " ng" # Negative else: - efl_dump += ' pl' # Positive + efl_dump += " pl" # Positive if efl & 0x40: - efl_dump += ' zr' # Zero + efl_dump += " zr" # Zero else: - efl_dump += ' nz' # Nonzero + efl_dump += " nz" # Nonzero if efl & 0x10: - efl_dump += ' ac' # Auxiliary carry + efl_dump += " ac" # Auxiliary carry else: - efl_dump += ' na' # No auxiliary carry + efl_dump += " na" # No auxiliary carry # 0x8 ??? if efl & 0x4: - efl_dump += ' pe' # Parity odd + efl_dump += " pe" # Parity odd else: - efl_dump += ' po' # Parity even + efl_dump += " po" # Parity even # 0x2 ??? if efl & 0x1: - efl_dump += ' cy' # Carry + efl_dump += " cy" # Carry else: - efl_dump += ' nc' # No carry + efl_dump += " nc" # No carry return efl_dump @classmethod - def dump_registers(cls, registers, arch = None): + def dump_registers(cls, registers, arch=None): """ Dump the x86/x64 processor register values. The output mimics that of the WinDBG debugger. @@ -1312,23 +1287,23 @@ def dump_registers(cls, registers, arch = None): @return: Text suitable for logging. """ if registers is None: - return '' + return "" if arch is None: - if 'Eax' in registers: + if "Eax" in registers: arch = win32.ARCH_I386 - elif 'Rax' in registers: + elif "Rax" in registers: arch = win32.ARCH_AMD64 else: - arch = 'Unknown' + arch = "Unknown" if arch not in cls.reg_template: msg = "Don't know how to dump the registers for architecture: %s" raise NotImplementedError(msg % arch) registers = registers.copy() - registers['efl_dump'] = cls.dump_flags( registers['EFlags'] ) + registers["efl_dump"] = cls.dump_flags(registers["EFlags"]) return cls.reg_template[arch] % registers @staticmethod - def dump_registers_peek(registers, data, separator = ' ', width = 16): + def dump_registers_peek(registers, data, separator=" ", width=16): """ Dump data pointed to by the given registers, if any. @@ -1344,21 +1319,18 @@ def dump_registers_peek(registers, data, separator = ' ', width = 16): @return: Text suitable for logging. """ if None in (registers, data): - return '' + return "" names = compat.keys(data) names.sort() - result = '' + result = "" for reg_name in names: - tag = reg_name.lower() - dumped = HexDump.hexline(data[reg_name], separator, width) - result += '%s -> %s\n' % (tag, dumped) + tag = reg_name.lower() + dumped = HexDump.hexline(data[reg_name], separator, width) + result += "%s -> %s\n" % (tag, dumped) return result @staticmethod - def dump_data_peek(data, base = 0, - separator = ' ', - width = 16, - bits = None): + def dump_data_peek(data, base=0, separator=" ", width=16, bits=None): """ Dump data from pointers guessed within the given binary data. @@ -1377,18 +1349,18 @@ def dump_data_peek(data, base = 0, @return: Text suitable for logging. """ if data is None: - return '' + return "" pointers = compat.keys(data) pointers.sort() - result = '' + result = "" for offset in pointers: - dumped = HexDump.hexline(data[offset], separator, width) + dumped = HexDump.hexline(data[offset], separator, width) address = HexDump.address(base + offset, bits) - result += '%s -> %s\n' % (address, dumped) + result += "%s -> %s\n" % (address, dumped) return result @staticmethod - def dump_stack_peek(data, separator = ' ', width = 16, arch = None): + def dump_stack_peek(data, separator=" ", width=16, arch=None): """ Dump data from pointers guessed within the given stack dump. @@ -1412,28 +1384,28 @@ def dump_stack_peek(data, separator = ' ', width = 16, arch = None): @return: Text suitable for logging. """ if data is None: - return '' + return "" if arch is None: arch = win32.arch pointers = compat.keys(data) pointers.sort() - result = '' + result = "" if pointers: if arch == win32.ARCH_I386: - spreg = 'esp' + spreg = "esp" elif arch == win32.ARCH_AMD64: - spreg = 'rsp' + spreg = "rsp" else: - spreg = 'STACK' # just a generic tag - tag_fmt = '[%s+0x%%.%dx]' % (spreg, len( '%x' % pointers[-1] ) ) + spreg = "STACK" # just a generic tag + tag_fmt = "[%s+0x%%.%dx]" % (spreg, len("%x" % pointers[-1])) for offset in pointers: - dumped = HexDump.hexline(data[offset], separator, width) - tag = tag_fmt % offset - result += '%s -> %s\n' % (tag, dumped) + dumped = HexDump.hexline(data[offset], separator, width) + tag = tag_fmt % offset + result += "%s -> %s\n" % (tag, dumped) return result @staticmethod - def dump_stack_trace(stack_trace, bits = None): + def dump_stack_trace(stack_trace, bits=None): """ Dump a stack trace, as returned by L{Thread.get_stack_trace} with the C{bUseLabels} parameter set to C{False}. @@ -1451,17 +1423,17 @@ def dump_stack_trace(stack_trace, bits = None): @return: Text suitable for logging. """ if not stack_trace: - return '' + return "" table = Table() - table.addRow('Frame', 'Origin', 'Module') - for (fp, ra, mod) in stack_trace: + table.addRow("Frame", "Origin", "Module") + for fp, ra, mod in stack_trace: fp_d = HexDump.address(fp, bits) ra_d = HexDump.address(ra, bits) table.addRow(fp_d, ra_d, mod) return table.getOutput() @staticmethod - def dump_stack_trace_with_labels(stack_trace, bits = None): + def dump_stack_trace_with_labels(stack_trace, bits=None): """ Dump a stack trace, as returned by L{Thread.get_stack_trace_with_labels}. @@ -1479,11 +1451,11 @@ def dump_stack_trace_with_labels(stack_trace, bits = None): @return: Text suitable for logging. """ if not stack_trace: - return '' + return "" table = Table() - table.addRow('Frame', 'Origin') - for (fp, label) in stack_trace: - table.addRow( HexDump.address(fp, bits), label ) + table.addRow("Frame", "Origin") + for fp, label in stack_trace: + table.addRow(HexDump.address(fp, bits), label) return table.getOutput() # TODO @@ -1493,9 +1465,7 @@ def dump_stack_trace_with_labels(stack_trace, bits = None): # + It'd be very useful to show some labels here. # + It'd be very useful to show register contents for code at EIP @staticmethod - def dump_code(disassembly, pc = None, - bLowercase = True, - bits = None): + def dump_code(disassembly, pc=None, bLowercase=True, bits=None): """ Dump a disassembly. Optionally mark where the program counter is. @@ -1518,26 +1488,21 @@ def dump_code(disassembly, pc = None, @return: Text suitable for logging. """ if not disassembly: - return '' - table = Table(sep = ' | ') - for (addr, size, code, dump) in disassembly: + return "" + table = Table(sep=" | ") + for addr, size, code, dump in disassembly: if bLowercase: code = code.lower() if addr == pc: - addr = ' * %s' % HexDump.address(addr, bits) + addr = " * %s" % HexDump.address(addr, bits) else: - addr = ' %s' % HexDump.address(addr, bits) + addr = " %s" % HexDump.address(addr, bits) table.addRow(addr, dump, code) table.justify(1, 1) return table.getOutput() @staticmethod - def dump_code_line(disassembly_line, bShowAddress = True, - bShowDump = True, - bLowercase = True, - dwDumpWidth = None, - dwCodeWidth = None, - bits = None): + def dump_code_line(disassembly_line, bShowAddress=True, bShowDump=True, bLowercase=True, dwDumpWidth=None, dwCodeWidth=None, bits=None): """ Dump a single line of code. To dump a block of code use L{dump_code}. @@ -1573,29 +1538,29 @@ def dump_code_line(disassembly_line, bShowAddress = True, else: address_size = bits / 4 (addr, size, code, dump) = disassembly_line - dump = dump.replace(' ', '') + dump = dump.replace(" ", "") result = list() - fmt = '' + fmt = "" if bShowAddress: - result.append( HexDump.address(addr, bits) ) - fmt += '%%%ds:' % address_size + result.append(HexDump.address(addr, bits)) + fmt += "%%%ds:" % address_size if bShowDump: result.append(dump) if dwDumpWidth: - fmt += ' %%-%ds' % dwDumpWidth + fmt += " %%-%ds" % dwDumpWidth else: - fmt += ' %s' + fmt += " %s" if bLowercase: code = code.lower() result.append(code) if dwCodeWidth: - fmt += ' %%-%ds' % dwCodeWidth + fmt += " %%-%ds" % dwCodeWidth else: - fmt += ' %s' + fmt += " %s" return fmt % tuple(result) @staticmethod - def dump_memory_map(memoryMap, mappedFilenames = None, bits = None): + def dump_memory_map(memoryMap, mappedFilenames=None, bits=None): """ Dump the memory map of a process. Optionally show the filenames for memory mapped files as well. @@ -1616,7 +1581,7 @@ def dump_memory_map(memoryMap, mappedFilenames = None, bits = None): @return: Text suitable for logging. """ if not memoryMap: - return '' + return "" table = Table() if mappedFilenames: @@ -1626,28 +1591,27 @@ def dump_memory_map(memoryMap, mappedFilenames = None, bits = None): # For each memory block in the map... for mbi in memoryMap: - # Address and size of memory block. BaseAddress = HexDump.address(mbi.BaseAddress, bits) - RegionSize = HexDump.address(mbi.RegionSize, bits) + RegionSize = HexDump.address(mbi.RegionSize, bits) # State (free or allocated). mbiState = mbi.State - if mbiState == win32.MEM_RESERVE: - State = "Reserved" + if mbiState == win32.MEM_RESERVE: + State = "Reserved" elif mbiState == win32.MEM_COMMIT: - State = "Commited" + State = "Commited" elif mbiState == win32.MEM_FREE: - State = "Free" + State = "Free" else: - State = "Unknown" + State = "Unknown" # Page protection bits (R/W/X/G). if mbiState != win32.MEM_COMMIT: Protect = "" else: mbiProtect = mbi.Protect - if mbiProtect & win32.PAGE_NOACCESS: + if mbiProtect & win32.PAGE_NOACCESS: Protect = "--- " elif mbiProtect & win32.PAGE_READONLY: Protect = "R-- " @@ -1665,46 +1629,48 @@ def dump_memory_map(memoryMap, mappedFilenames = None, bits = None): Protect = "RCX " else: Protect = "??? " - if mbiProtect & win32.PAGE_GUARD: + if mbiProtect & win32.PAGE_GUARD: Protect += "G" else: Protect += "-" - if mbiProtect & win32.PAGE_NOCACHE: + if mbiProtect & win32.PAGE_NOCACHE: Protect += "N" else: Protect += "-" - if mbiProtect & win32.PAGE_WRITECOMBINE: + if mbiProtect & win32.PAGE_WRITECOMBINE: Protect += "W" else: Protect += "-" # Type (file mapping, executable image, or private memory). mbiType = mbi.Type - if mbiType == win32.MEM_IMAGE: - Type = "Image" + if mbiType == win32.MEM_IMAGE: + Type = "Image" elif mbiType == win32.MEM_MAPPED: - Type = "Mapped" + Type = "Mapped" elif mbiType == win32.MEM_PRIVATE: - Type = "Private" + Type = "Private" elif mbiType == 0: - Type = "" + Type = "" else: - Type = "Unknown" + Type = "Unknown" # Output a row in the table. if mappedFilenames: - FileName = mappedFilenames.get(mbi.BaseAddress, '') - table.addRow( BaseAddress, RegionSize, State, Protect, Type, FileName ) + FileName = mappedFilenames.get(mbi.BaseAddress, "") + table.addRow(BaseAddress, RegionSize, State, Protect, Type, FileName) else: - table.addRow( BaseAddress, RegionSize, State, Protect, Type ) + table.addRow(BaseAddress, RegionSize, State, Protect, Type) # Return the table output. return table.getOutput() -#------------------------------------------------------------------------------ -class DebugLog (StaticClass): - 'Static functions for debug logging.' +# ------------------------------------------------------------------------------ + + +class DebugLog(StaticClass): + "Static functions for debug logging." @staticmethod def log_text(text): @@ -1717,16 +1683,16 @@ def log_text(text): @rtype: str @return: Log line. """ - if text.endswith('\n'): - text = text[:-len('\n')] - #text = text.replace('\n', '\n\t\t') # text CSV + if text.endswith("\n"): + text = text[: -len("\n")] + # text = text.replace('\n', '\n\t\t') # text CSV ltime = time.strftime("%X") msecs = (time.time() % 1) * 1000 - return '[%s.%04d] %s' % (ltime, msecs, text) - #return '[%s.%04d]\t%s' % (ltime, msecs, text) # text CSV + return "[%s.%04d] %s" % (ltime, msecs, text) + # return '[%s.%04d]\t%s' % (ltime, msecs, text) # text CSV @classmethod - def log_event(cls, event, text = None): + def log_event(cls, event, text=None): """ Log lines of text associated with a debug event. @@ -1744,29 +1710,31 @@ def log_event(cls, event, text = None): if event.get_event_code() == win32.EXCEPTION_DEBUG_EVENT: what = event.get_exception_description() if event.is_first_chance(): - what = '%s (first chance)' % what + what = "%s (first chance)" % what else: - what = '%s (second chance)' % what + what = "%s (second chance)" % what try: address = event.get_fault_address() except NotImplementedError: address = event.get_exception_address() else: - what = event.get_event_name() + what = event.get_event_name() address = event.get_thread().get_pc() process = event.get_process() label = process.get_label_at_address(address) address = HexDump.address(address, process.get_bits()) if label: - where = '%s (%s)' % (address, label) + where = "%s (%s)" % (address, label) else: where = address - text = '%s at %s' % (what, where) - text = 'pid %d tid %d: %s' % (event.get_pid(), event.get_tid(), text) - #text = 'pid %d tid %d:\t%s' % (event.get_pid(), event.get_tid(), text) # text CSV + text = "%s at %s" % (what, where) + text = "pid %d tid %d: %s" % (event.get_pid(), event.get_tid(), text) + # text = 'pid %d tid %d:\t%s' % (event.get_pid(), event.get_tid(), text) # text CSV return cls.log_text(text) -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ + class Logger(object): """ @@ -1783,7 +1751,7 @@ class Logger(object): C{None} if no log file is used. """ - def __init__(self, logfile = None, verbose = True): + def __init__(self, logfile=None, verbose=True): """ @type logfile: str or None @param logfile: Append messages to this text file. @@ -1794,7 +1762,7 @@ def __init__(self, logfile = None, verbose = True): self.verbose = verbose self.logfile = logfile if self.logfile: - self.fd = open(self.logfile, 'a+') + self.fd = open(self.logfile, "a+") def __logfile_error(self, e): """ @@ -1807,11 +1775,12 @@ def __logfile_error(self, e): @param e: Exception raised when trying to write to the log file. """ from sys import stderr + msg = "Warning, error writing log file %s: %s\n" msg = msg % (self.logfile, str(e)) stderr.write(DebugLog.log_text(msg)) self.logfile = None - self.fd = None + self.fd = None def __do_log(self, text): """ @@ -1824,12 +1793,12 @@ def __do_log(self, text): @param text: Text to print. """ if isinstance(text, compat.unicode): - text = text.encode('cp1252') + text = text.encode("cp1252") if self.verbose: print(text) if self.logfile: try: - self.fd.writelines('%s\n' % text) + self.fd.writelines("%s\n" % text) except IOError: e = sys.exc_info()[1] self.__logfile_error(e) @@ -1841,9 +1810,9 @@ def log_text(self, text): @type text: str @param text: Text to log. """ - self.__do_log( DebugLog.log_text(text) ) + self.__do_log(DebugLog.log_text(text)) - def log_event(self, event, text = None): + def log_event(self, event, text=None): """ Log lines of text associated with a debug event. @@ -1854,13 +1823,13 @@ def log_event(self, event, text = None): @param text: (Optional) Text to log. If no text is provided the default is to show a description of the event itself. """ - self.__do_log( DebugLog.log_event(event, text) ) + self.__do_log(DebugLog.log_event(event, text)) def log_exc(self): """ Log lines of text associated with the last Python exception. """ - self.__do_log( 'Exception raised: %s' % traceback.format_exc() ) + self.__do_log("Exception raised: %s" % traceback.format_exc()) def is_enabled(self): """ diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py index 07313f225..91bc41332 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/thread.py @@ -39,7 +39,7 @@ __revision__ = "$Id$" -__all__ = ['Thread'] +__all__ = ["Thread"] from winappdbg import win32 from winappdbg import compat @@ -54,12 +54,13 @@ # delayed imports Process = None -#============================================================================== +# ============================================================================== # TODO # + fetch special registers (MMX, XMM, 3DNow!, etc) -class Thread (object): + +class Thread(object): """ Interface to a thread in another process. @@ -126,7 +127,7 @@ class Thread (object): when the injected thread is killed. """ - def __init__(self, dwThreadId, hThread = None, process = None): + def __init__(self, dwThreadId, hThread=None, process=None): """ @type dwThreadId: int @param dwThreadId: Global thread ID. @@ -137,34 +138,34 @@ def __init__(self, dwThreadId, hThread = None, process = None): @type process: L{Process} @param process: (Optional) Parent Process object. """ - self.dwProcessId = None - self.dwThreadId = dwThreadId - self.hThread = hThread + self.dwProcessId = None + self.dwThreadId = dwThreadId + self.hThread = hThread self.pInjectedMemory = None self.set_name(None) self.set_process(process) # Not really sure if it's a good idea... -## def __eq__(self, aThread): -## """ -## Compare two Thread objects. The comparison is made using the IDs. -## -## @warning: -## If you have two Thread instances with different handles the -## equality operator still returns C{True}, so be careful! -## -## @type aThread: L{Thread} -## @param aThread: Another Thread object. -## -## @rtype: bool -## @return: C{True} if the two thread IDs are equal, -## C{False} otherwise. -## """ -## return isinstance(aThread, Thread) and \ -## self.get_tid() == aThread.get_tid() + ## def __eq__(self, aThread): + ## """ + ## Compare two Thread objects. The comparison is made using the IDs. + ## + ## @warning: + ## If you have two Thread instances with different handles the + ## equality operator still returns C{True}, so be careful! + ## + ## @type aThread: L{Thread} + ## @param aThread: Another Thread object. + ## + ## @rtype: bool + ## @return: C{True} if the two thread IDs are equal, + ## C{False} otherwise. + ## """ + ## return isinstance(aThread, Thread) and \ + ## self.get_tid() == aThread.get_tid() def __load_Process_class(self): - global Process # delayed import + global Process # delayed import if Process is None: from winappdbg.process import Process @@ -180,7 +181,7 @@ def get_process(self): self.__process = Process(self.get_pid()) return self.__process - def set_process(self, process = None): + def set_process(self, process=None): """ Manually set the parent Process object. Use with care! @@ -189,11 +190,11 @@ def set_process(self, process = None): """ if process is None: self.dwProcessId = None - self.__process = None + self.__process = None else: self.__load_Process_class() if not isinstance(process, Process): - msg = "Parent process must be a Process instance, " + msg = "Parent process must be a Process instance, " msg += "got %s instead" % type(process) raise TypeError(msg) self.dwProcessId = process.get_pid() @@ -217,8 +218,7 @@ def get_pid(self): try: # I wish this had been implemented before Vista... # XXX TODO find the real ntdll call under this api - hThread = self.get_handle( - win32.THREAD_QUERY_LIMITED_INFORMATION) + hThread = self.get_handle(win32.THREAD_QUERY_LIMITED_INFORMATION) self.dwProcessId = win32.GetProcessIdOfThread(hThread) except AttributeError: # This method is really bad :P @@ -226,7 +226,7 @@ def get_pid(self): return self.dwProcessId def __get_pid_by_scanning(self): - 'Internally used by get_pid().' + "Internally used by get_pid()." dwProcessId = None dwThreadId = self.get_tid() with win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPTHREAD) as hSnapshot: @@ -255,7 +255,7 @@ def get_name(self): """ return self.name - def set_name(self, name = None): + def set_name(self, name=None): """ Sets the thread's name. @@ -264,9 +264,9 @@ def set_name(self, name = None): """ self.name = name -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def open_handle(self, dwDesiredAccess = win32.THREAD_ALL_ACCESS): + def open_handle(self, dwDesiredAccess=win32.THREAD_ALL_ACCESS): """ Opens a new handle to the thread, closing the previous one. @@ -289,7 +289,7 @@ def open_handle(self, dwDesiredAccess = win32.THREAD_ALL_ACCESS): # In case hThread was set to an actual handle value instead of a Handle # object. This shouldn't happen unless the user tinkered with it. - if not hasattr(self.hThread, '__del__'): + if not hasattr(self.hThread, "__del__"): self.close_handle() self.hThread = hThread @@ -303,14 +303,14 @@ def close_handle(self): collector claims them. """ try: - if hasattr(self.hThread, 'close'): + if hasattr(self.hThread, "close"): self.hThread.close() elif self.hThread not in (None, win32.INVALID_HANDLE_VALUE): win32.CloseHandle(self.hThread) finally: self.hThread = None - def get_handle(self, dwDesiredAccess = win32.THREAD_ALL_ACCESS): + def get_handle(self, dwDesiredAccess=win32.THREAD_ALL_ACCESS): """ Returns a handle to the thread with I{at least} the access rights requested. @@ -349,9 +349,9 @@ def clear(self): finally: self.close_handle() -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def wait(self, dwTimeout = None): + def wait(self, dwTimeout=None): """ Waits for the thread to finish executing. @@ -361,7 +361,7 @@ def wait(self, dwTimeout = None): """ self.get_handle(win32.SYNCHRONIZE).wait(dwTimeout) - def kill(self, dwExitCode = 0): + def kill(self, dwExitCode=0): """ Terminates the thread execution. @@ -381,7 +381,7 @@ def kill(self, dwExitCode = 0): self.get_process().free(self.pInjectedMemory) self.pInjectedMemory = None except Exception: -## raise # XXX DEBUG + ## raise # XXX DEBUG pass # XXX TODO @@ -441,9 +441,9 @@ def get_exit_code(self): dwAccess = win32.THREAD_QUERY_LIMITED_INFORMATION else: dwAccess = win32.THREAD_QUERY_INFORMATION - return win32.GetExitCodeThread( self.get_handle(dwAccess) ) + return win32.GetExitCodeThread(self.get_handle(dwAccess)) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX TODO # Support for string searches on the window captions. @@ -457,16 +457,13 @@ def get_windows(self): process = self.get_process() except Exception: process = None - return [ - Window( hWnd, process, self ) \ - for hWnd in win32.EnumThreadWindows( self.get_tid() ) - ] + return [Window(hWnd, process, self) for hWnd in win32.EnumThreadWindows(self.get_tid())] -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # TODO # A registers cache could be implemented here. - def get_context(self, ContextFlags = None, bSuspend = False): + def get_context(self, ContextFlags=None, bSuspend=False): """ Retrieves the execution context (i.e. the registers values) for this thread. @@ -523,37 +520,30 @@ def get_context(self, ContextFlags = None, bSuspend = False): # If an exception is raised, make sure the thread execution is resumed. try: - if win32.bits == self.get_bits(): - # 64 bit debugger attached to 64 bit process, or # 32 bit debugger attached to 32 bit process. - ctx = win32.GetThreadContext(hThread, - ContextFlags = ContextFlags) + ctx = win32.GetThreadContext(hThread, ContextFlags=ContextFlags) else: if self.is_wow64(): - # 64 bit debugger attached to 32 bit process. if ContextFlags is not None: ContextFlags &= ~win32.ContextArchMask - ContextFlags |= win32.WOW64_CONTEXT_i386 + ContextFlags |= win32.WOW64_CONTEXT_i386 ctx = win32.Wow64GetThreadContext(hThread, ContextFlags) else: - # 32 bit debugger attached to 64 bit process. # XXX only i386/AMD64 is supported in this particular case if win32.arch not in (win32.ARCH_I386, win32.ARCH_AMD64): raise NotImplementedError() if ContextFlags is not None: ContextFlags &= ~win32.ContextArchMask - ContextFlags |= win32.context_amd64.CONTEXT_AMD64 - ctx = win32.context_amd64.GetThreadContext(hThread, - ContextFlags = ContextFlags) + ContextFlags |= win32.context_amd64.CONTEXT_AMD64 + ctx = win32.context_amd64.GetThreadContext(hThread, ContextFlags=ContextFlags) finally: - # Resume the thread if we suspended it. if bSuspend: self.resume() @@ -561,7 +551,7 @@ def get_context(self, ContextFlags = None, bSuspend = False): # Return the context. return ctx - def set_context(self, context, bSuspend = False): + def set_context(self, context, bSuspend=False): """ Sets the values of the registers. @@ -614,7 +604,7 @@ def get_register(self, register): @rtype: int @return: Value of the requested register. """ - 'Returns the value of a specific register.' + "Returns the value of a specific register." context = self.get_context() return context[register] @@ -632,7 +622,7 @@ def set_register(self, register, value): context[register] = value self.set_context(context) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # TODO: a metaclass would do a better job instead of checking the platform # during module import, also would support mixing 32 and 64 bits @@ -698,26 +688,27 @@ def set_fp(self, fp): context.fp = fp self.set_context(context) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ if win32.arch in (win32.ARCH_I386, win32.ARCH_AMD64): - class Flags (object): - 'Commonly used processor flags' - Overflow = 0x800 - Direction = 0x400 - Interrupts = 0x200 - Trap = 0x100 - Sign = 0x80 - Zero = 0x40 + class Flags(object): + "Commonly used processor flags" + + Overflow = 0x800 + Direction = 0x400 + Interrupts = 0x200 + Trap = 0x100 + Sign = 0x80 + Zero = 0x40 # 0x20 ??? - Auxiliary = 0x10 + Auxiliary = 0x10 # 0x8 ??? - Parity = 0x4 + Parity = 0x4 # 0x2 ??? - Carry = 0x1 + Carry = 0x1 - def get_flags(self, FlagMask = 0xFFFFFFFF): + def get_flags(self, FlagMask=0xFFFFFFFF): """ @type FlagMask: int @param FlagMask: (Optional) Bitwise-AND mask. @@ -726,9 +717,9 @@ def get_flags(self, FlagMask = 0xFFFFFFFF): @return: Flags register contents, optionally masking out some bits. """ context = self.get_context(win32.CONTEXT_CONTROL) - return context['EFlags'] & FlagMask + return context["EFlags"] & FlagMask - def set_flags(self, eflags, FlagMask = 0xFFFFFFFF): + def set_flags(self, eflags, FlagMask=0xFFFFFFFF): """ Sets the flags register, optionally masking some bits. @@ -739,7 +730,7 @@ def set_flags(self, eflags, FlagMask = 0xFFFFFFFF): @param FlagMask: (Optional) Bitwise-AND mask. """ context = self.get_context(win32.CONTEXT_CONTROL) - context['EFlags'] = (context['EFlags'] & FlagMask) | eflags + context["EFlags"] = (context["EFlags"] & FlagMask) | eflags self.set_context(context) def get_flag_value(self, FlagBit): @@ -750,7 +741,7 @@ def get_flag_value(self, FlagBit): @rtype: bool @return: Boolean value of the requested flag. """ - return bool( self.get_flags(FlagBit) ) + return bool(self.get_flags(FlagBit)) def set_flag_value(self, FlagBit, FlagValue): """ @@ -805,46 +796,46 @@ def get_tf(self): return self.get_flag_value(self.Flags.Trap) def clear_zf(self): - 'Clears the Zero flag.' + "Clears the Zero flag." self.set_flag_value(self.Flags.Zero, False) def clear_cf(self): - 'Clears the Carry flag.' + "Clears the Carry flag." self.set_flag_value(self.Flags.Carry, False) def clear_sf(self): - 'Clears the Sign flag.' + "Clears the Sign flag." self.set_flag_value(self.Flags.Sign, False) def clear_df(self): - 'Clears the Direction flag.' + "Clears the Direction flag." self.set_flag_value(self.Flags.Direction, False) def clear_tf(self): - 'Clears the Trap flag.' + "Clears the Trap flag." self.set_flag_value(self.Flags.Trap, False) def set_zf(self): - 'Sets the Zero flag.' + "Sets the Zero flag." self.set_flag_value(self.Flags.Zero, True) def set_cf(self): - 'Sets the Carry flag.' + "Sets the Carry flag." self.set_flag_value(self.Flags.Carry, True) def set_sf(self): - 'Sets the Sign flag.' + "Sets the Sign flag." self.set_flag_value(self.Flags.Sign, True) def set_df(self): - 'Sets the Direction flag.' + "Sets the Direction flag." self.set_flag_value(self.Flags.Direction, True) def set_tf(self): - 'Sets the Trap flag.' + "Sets the Trap flag." self.set_flag_value(self.Flags.Trap, True) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_wow64(self): """ @@ -866,7 +857,7 @@ def is_wow64(self): try: wow64 = self.__wow64 except AttributeError: - if (win32.bits == 32 and not win32.wow64): + if win32.bits == 32 and not win32.wow64: wow64 = False else: wow64 = self.get_process().is_wow64() @@ -909,8 +900,9 @@ def is_hidden(self): events, and thus said events won't be sent to the debugger. """ return win32.NtQueryInformationThread( - self.get_handle(), # XXX what permissions do I need? - win32.ThreadHideFromDebugger) + self.get_handle(), # XXX what permissions do I need? + win32.ThreadHideFromDebugger, + ) def get_teb(self): """ @@ -921,8 +913,7 @@ def get_teb(self): @return: TEB structure. @raise WindowsError: An exception is raised on error. """ - return self.get_process().read_structure( self.get_teb_address(), - win32.TEB ) + return self.get_process().read_structure(self.get_teb_address(), win32.TEB) def get_teb_address(self): """ @@ -937,11 +928,10 @@ def get_teb_address(self): except AttributeError: try: hThread = self.get_handle(win32.THREAD_QUERY_INFORMATION) - tbi = win32.NtQueryInformationThread( hThread, - win32.ThreadBasicInformation) + tbi = win32.NtQueryInformationThread(hThread, win32.ThreadBasicInformation) address = tbi.TebBaseAddress except WindowsError: - address = self.get_linear_address('SegFs', 0) # fs:[0] + address = self.get_linear_address("SegFs", 0) # fs:[0] if not address: raise self._teb_ptr = address @@ -969,20 +959,19 @@ def get_linear_address(self, segment, address): The current architecture does not support selectors. Selectors only exist in x86-based systems. """ - hThread = self.get_handle(win32.THREAD_QUERY_INFORMATION) + hThread = self.get_handle(win32.THREAD_QUERY_INFORMATION) selector = self.get_register(segment) - ldt = win32.GetThreadSelectorEntry(hThread, selector) - BaseLow = ldt.BaseLow - BaseMid = ldt.HighWord.Bytes.BaseMid << 16 - BaseHi = ldt.HighWord.Bytes.BaseHi << 24 - Base = BaseLow | BaseMid | BaseHi + ldt = win32.GetThreadSelectorEntry(hThread, selector) + BaseLow = ldt.BaseLow + BaseMid = ldt.HighWord.Bytes.BaseMid << 16 + BaseHi = ldt.HighWord.Bytes.BaseHi << 24 + Base = BaseLow | BaseMid | BaseHi LimitLow = ldt.LimitLow - LimitHi = ldt.HighWord.Bits.LimitHi << 16 - Limit = LimitLow | LimitHi + LimitHi = ldt.HighWord.Bits.LimitHi << 16 + Limit = LimitLow | LimitHi if address > Limit: msg = "Address %s too large for segment %s (selector %d)" - msg = msg % (HexDump.address(address, self.get_bits()), - segment, selector) + msg = msg % (HexDump.address(address, self.get_bits()), segment, selector) raise ValueError(msg) return Base + address @@ -991,7 +980,7 @@ def get_label_at_pc(self): @rtype: str @return: Label that points to the instruction currently being executed. """ - return self.get_process().get_label_at_address( self.get_pc() ) + return self.get_process().get_label_at_address(self.get_pc()) def get_seh_chain_pointer(self): """ @@ -1006,12 +995,11 @@ def get_seh_chain_pointer(self): This method is only supported in 32 bits versions of Windows. """ if win32.arch != win32.ARCH_I386: - raise NotImplementedError( - "SEH chain parsing is only supported in 32-bit Windows.") + raise NotImplementedError("SEH chain parsing is only supported in 32-bit Windows.") process = self.get_process() - address = self.get_linear_address( 'SegFs', 0 ) - return process.read_pointer( address ) + address = self.get_linear_address("SegFs", 0) + return process.read_pointer(address) def set_seh_chain_pointer(self, value): """ @@ -1026,12 +1014,11 @@ def set_seh_chain_pointer(self, value): This method is only supported in 32 bits versions of Windows. """ if win32.arch != win32.ARCH_I386: - raise NotImplementedError( - "SEH chain parsing is only supported in 32-bit Windows.") + raise NotImplementedError("SEH chain parsing is only supported in 32-bit Windows.") process = self.get_process() - address = self.get_linear_address( 'SegFs', 0 ) - process.write_pointer( address, value ) + address = self.get_linear_address("SegFs", 0) + process.write_pointer(address, value) def get_seh_chain(self): """ @@ -1051,11 +1038,11 @@ def get_seh_chain(self): process = self.get_process() seh = self.get_seh_chain_pointer() while seh != 0xFFFFFFFF: - seh_func = process.read_pointer( seh + 4 ) - seh_chain.append( (seh, seh_func) ) - seh = process.read_pointer( seh ) + seh_func = process.read_pointer(seh + 4) + seh_chain.append((seh, seh_func)) + seh = process.read_pointer(seh) except WindowsError: - seh_chain.append( (seh, None) ) + seh_chain.append((seh, None)) return seh_chain def get_wait_chain(self): @@ -1073,7 +1060,7 @@ def get_wait_chain(self): U{http://msdn.microsoft.com/en-us/library/ms681622%28VS.85%29.aspx} """ with win32.OpenThreadWaitChainSession() as hWct: - return win32.GetThreadWaitChain(hWct, ThreadId = self.get_tid()) + return win32.GetThreadWaitChain(hWct, ThreadId=self.get_tid()) def get_stack_range(self): """ @@ -1087,10 +1074,9 @@ def get_stack_range(self): # TODO use teb.DeallocationStack too (max. possible stack size) teb = self.get_teb() tib = teb.NtTib - return ( tib.StackLimit, tib.StackBase ) # top, bottom + return (tib.StackLimit, tib.StackBase) # top, bottom - def __get_stack_trace(self, depth = 16, bUseLabels = True, - bMakePretty = True): + def __get_stack_trace(self, depth=16, bUseLabels=True, bMakePretty=True): """ Tries to get a stack trace for the current function using the debug helper API (dbghelp.dll). @@ -1133,15 +1119,13 @@ def __get_stack_trace(self, depth = 16, bUseLabels = True, msg = "Stack walking is not available for this architecture: %s" raise NotImplementedError(msg % arch) - hProcess = aProcess.get_handle( win32.PROCESS_VM_READ | - win32.PROCESS_QUERY_INFORMATION ) - hThread = self.get_handle( win32.THREAD_GET_CONTEXT | - win32.THREAD_QUERY_INFORMATION ) + hProcess = aProcess.get_handle(win32.PROCESS_VM_READ | win32.PROCESS_QUERY_INFORMATION) + hThread = self.get_handle(win32.THREAD_GET_CONTEXT | win32.THREAD_QUERY_INFORMATION) StackFrame = win32.STACKFRAME64() - StackFrame.AddrPC = win32.ADDRESS64( self.get_pc() ) - StackFrame.AddrFrame = win32.ADDRESS64( self.get_fp() ) - StackFrame.AddrStack = win32.ADDRESS64( self.get_sp() ) + StackFrame.AddrPC = win32.ADDRESS64(self.get_pc()) + StackFrame.AddrFrame = win32.ADDRESS64(self.get_fp()) + StackFrame.AddrStack = win32.ADDRESS64(self.get_sp()) trace = list() while win32.StackWalk64(MachineType, hProcess, hThread, StackFrame): @@ -1162,15 +1146,14 @@ def __get_stack_trace(self, depth = 16, bUseLabels = True, if bUseLabels: label = aProcess.get_label_at_address(ra) if bMakePretty: - label = '%s (%s)' % (HexDump.address(ra, bits), label) - trace.append( (fp, label) ) + label = "%s (%s)" % (HexDump.address(ra, bits), label) + trace.append((fp, label)) else: - trace.append( (fp, ra, lib) ) + trace.append((fp, ra, lib)) fp = aProcess.peek_pointer(fp) return tuple(trace) - def __get_stack_trace_manually(self, depth = 16, bUseLabels = True, - bMakePretty = True): + def __get_stack_trace_manually(self, depth=16, bUseLabels=True, bMakePretty=True): """ Tries to get a stack trace for the current function. Only works for functions with standard prologue and epilogue. @@ -1199,9 +1182,9 @@ def __get_stack_trace_manually(self, depth = 16, bUseLabels = True, @raise WindowsError: Raises an exception on error. """ aProcess = self.get_process() - st, sb = self.get_stack_range() # top, bottom - fp = self.get_fp() - trace = list() + st, sb = self.get_stack_range() # top, bottom + fp = self.get_fp() + trace = list() if aProcess.get_module_count() == 0: aProcess.scan_modules() bits = aProcess.get_bits() @@ -1210,7 +1193,7 @@ def __get_stack_trace_manually(self, depth = 16, bUseLabels = True, break if not st <= fp < sb: break - ra = aProcess.peek_pointer(fp + 4) + ra = aProcess.peek_pointer(fp + 4) if ra == 0: break lib = aProcess.get_module_at_address(ra) @@ -1224,14 +1207,14 @@ def __get_stack_trace_manually(self, depth = 16, bUseLabels = True, if bUseLabels: label = aProcess.get_label_at_address(ra) if bMakePretty: - label = '%s (%s)' % (HexDump.address(ra, bits), label) - trace.append( (fp, label) ) + label = "%s (%s)" % (HexDump.address(ra, bits), label) + trace.append((fp, label)) else: - trace.append( (fp, ra, lib) ) + trace.append((fp, ra, lib)) fp = aProcess.peek_pointer(fp) return tuple(trace) - def get_stack_trace(self, depth = 16): + def get_stack_trace(self, depth=16): """ Tries to get a stack trace for the current function. Only works for functions with standard prologue and epilogue. @@ -1249,13 +1232,14 @@ def get_stack_trace(self, depth = 16): trace = self.__get_stack_trace(depth, False) except Exception: import traceback + traceback.print_exc() trace = () if not trace: trace = self.__get_stack_trace_manually(depth, False) return trace - def get_stack_trace_with_labels(self, depth = 16, bMakePretty = True): + def get_stack_trace_with_labels(self, depth=16, bMakePretty=True): """ Tries to get a stack trace for the current function. Only works for functions with standard prologue and epilogue. @@ -1300,19 +1284,19 @@ def get_stack_frame_range(self): @raise WindowsError: An error occured when getting the thread context. """ - st, sb = self.get_stack_range() # top, bottom - sp = self.get_sp() - fp = self.get_fp() - size = fp - sp + st, sb = self.get_stack_range() # top, bottom + sp = self.get_sp() + fp = self.get_fp() + size = fp - sp if not st <= sp < sb: - raise RuntimeError('Stack pointer lies outside the stack') + raise RuntimeError("Stack pointer lies outside the stack") if not st <= fp < sb: - raise RuntimeError('Frame pointer lies outside the stack') + raise RuntimeError("Frame pointer lies outside the stack") if sp > fp: - raise RuntimeError('No valid stack frame found') + raise RuntimeError("No valid stack frame found") return (sp, fp) - def get_stack_frame(self, max_size = None): + def get_stack_frame(self, max_size=None): """ Reads the contents of the current stack frame. Only works for functions with standard prologue and epilogue. @@ -1332,13 +1316,13 @@ def get_stack_frame(self, max_size = None): @raise WindowsError: An error occured when getting the thread context or reading data from the process memory. """ - sp, fp = self.get_stack_frame_range() - size = fp - sp + sp, fp = self.get_stack_frame_range() + size = fp - sp if max_size and size > max_size: size = max_size return self.get_process().peek(sp, size) - def read_stack_data(self, size = 128, offset = 0): + def read_stack_data(self, size=128, offset=0): """ Reads the contents of the top of the stack. @@ -1356,7 +1340,7 @@ def read_stack_data(self, size = 128, offset = 0): aProcess = self.get_process() return aProcess.read(self.get_sp() + offset, size) - def peek_stack_data(self, size = 128, offset = 0): + def peek_stack_data(self, size=128, offset=0): """ Tries to read the contents of the top of the stack. @@ -1373,7 +1357,7 @@ def peek_stack_data(self, size = 128, offset = 0): aProcess = self.get_process() return aProcess.peek(self.get_sp() + offset, size) - def read_stack_dwords(self, count, offset = 0): + def read_stack_dwords(self, count, offset=0): """ Reads DWORDs from the top of the stack. @@ -1390,10 +1374,10 @@ def read_stack_dwords(self, count, offset = 0): """ if count > 0: stackData = self.read_stack_data(count * 4, offset) - return struct.unpack('<'+('L'*count), stackData) + return struct.unpack("<" + ("L" * count), stackData) return () - def peek_stack_dwords(self, count, offset = 0): + def peek_stack_dwords(self, count, offset=0): """ Tries to read DWORDs from the top of the stack. @@ -1409,12 +1393,12 @@ def peek_stack_dwords(self, count, offset = 0): """ stackData = self.peek_stack_data(count * 4, offset) if len(stackData) & 3: - stackData = stackData[:-len(stackData) & 3] + stackData = stackData[: -len(stackData) & 3] if not stackData: return () - return struct.unpack('<'+('L'*count), stackData) + return struct.unpack("<" + ("L" * count), stackData) - def read_stack_qwords(self, count, offset = 0): + def read_stack_qwords(self, count, offset=0): """ Reads QWORDs from the top of the stack. @@ -1430,9 +1414,9 @@ def read_stack_qwords(self, count, offset = 0): @raise WindowsError: Could not read the requested data. """ stackData = self.read_stack_data(count * 8, offset) - return struct.unpack('<'+('Q'*count), stackData) + return struct.unpack("<" + ("Q" * count), stackData) - def peek_stack_qwords(self, count, offset = 0): + def peek_stack_qwords(self, count, offset=0): """ Tries to read QWORDs from the top of the stack. @@ -1448,12 +1432,12 @@ def peek_stack_qwords(self, count, offset = 0): """ stackData = self.peek_stack_data(count * 8, offset) if len(stackData) & 7: - stackData = stackData[:-len(stackData) & 7] + stackData = stackData[: -len(stackData) & 7] if not stackData: return () - return struct.unpack('<'+('Q'*count), stackData) + return struct.unpack("<" + ("Q" * count), stackData) - def read_stack_structure(self, structure, offset = 0): + def read_stack_structure(self, structure, offset=0): """ Reads the given structure at the top of the stack. @@ -1468,12 +1452,11 @@ def read_stack_structure(self, structure, offset = 0): @return: Tuple of elements read from the stack. The type of each element matches the types in the stack frame structure. """ - aProcess = self.get_process() + aProcess = self.get_process() stackData = aProcess.read_structure(self.get_sp() + offset, structure) - return tuple([ stackData.__getattribute__(name) - for (name, type) in stackData._fields_ ]) + return tuple([stackData.__getattribute__(name) for (name, type) in stackData._fields_]) - def read_stack_frame(self, structure, offset = 0): + def read_stack_frame(self, structure, offset=0): """ Reads the stack frame of the thread. @@ -1488,12 +1471,11 @@ def read_stack_frame(self, structure, offset = 0): @return: Tuple of elements read from the stack frame. The type of each element matches the types in the stack frame structure. """ - aProcess = self.get_process() + aProcess = self.get_process() stackData = aProcess.read_structure(self.get_fp() + offset, structure) - return tuple([ stackData.__getattribute__(name) - for (name, type) in stackData._fields_ ]) + return tuple([stackData.__getattribute__(name) for (name, type) in stackData._fields_]) - def read_code_bytes(self, size = 128, offset = 0): + def read_code_bytes(self, size=128, offset=0): """ Tries to read some bytes of the code currently being executed. @@ -1510,7 +1492,7 @@ def read_code_bytes(self, size = 128, offset = 0): """ return self.get_process().read(self.get_pc() + offset, size) - def peek_code_bytes(self, size = 128, offset = 0): + def peek_code_bytes(self, size=128, offset=0): """ Tries to read some bytes of the code currently being executed. @@ -1526,7 +1508,7 @@ def peek_code_bytes(self, size = 128, offset = 0): """ return self.get_process().peek(self.get_pc() + offset, size) - def peek_pointers_in_registers(self, peekSize = 16, context = None): + def peek_pointers_in_registers(self, peekSize=16, context=None): """ Tries to guess which values in the registers are valid pointers, and reads some data from them. @@ -1542,23 +1524,20 @@ def peek_pointers_in_registers(self, peekSize = 16, context = None): @rtype: dict( str S{->} str ) @return: Dictionary mapping register names to the data they point to. """ - peekable_registers = ( - 'Eax', 'Ebx', 'Ecx', 'Edx', 'Esi', 'Edi', 'Ebp' - ) + peekable_registers = ("Eax", "Ebx", "Ecx", "Edx", "Esi", "Edi", "Ebp") if not context: - context = self.get_context(win32.CONTEXT_CONTROL | \ - win32.CONTEXT_INTEGER) - aProcess = self.get_process() - data = dict() - for (reg_name, reg_value) in compat.iteritems(context): + context = self.get_context(win32.CONTEXT_CONTROL | win32.CONTEXT_INTEGER) + aProcess = self.get_process() + data = dict() + for reg_name, reg_value in compat.iteritems(context): if reg_name not in peekable_registers: continue -## if reg_name == 'Ebp': -## stack_begin, stack_end = self.get_stack_range() -## print hex(stack_end), hex(reg_value), hex(stack_begin) -## if stack_begin and stack_end and stack_end < stack_begin and \ -## stack_begin <= reg_value <= stack_end: -## continue + ## if reg_name == 'Ebp': + ## stack_begin, stack_end = self.get_stack_range() + ## print hex(stack_end), hex(reg_value), hex(stack_begin) + ## if stack_begin and stack_end and stack_end < stack_begin and \ + ## stack_begin <= reg_value <= stack_end: + ## continue reg_data = aProcess.peek(reg_value, peekSize) if reg_data: data[reg_name] = reg_data @@ -1566,7 +1545,7 @@ def peek_pointers_in_registers(self, peekSize = 16, context = None): # TODO # try to avoid reading the same page twice by caching it - def peek_pointers_in_data(self, data, peekSize = 16, peekStep = 1): + def peek_pointers_in_data(self, data, peekSize=16, peekStep=1): """ Tries to guess which values in the given data are valid pointers, and reads some data from them. @@ -1589,7 +1568,7 @@ def peek_pointers_in_data(self, data, peekSize = 16, peekStep = 1): aProcess = self.get_process() return aProcess.peek_pointers_in_data(data, peekSize, peekStep) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # TODO # The disassemble_around and disassemble_around_pc methods @@ -1637,7 +1616,7 @@ def disassemble(self, lpAddress, dwSize): aProcess = self.get_process() return aProcess.disassemble(lpAddress, dwSize) - def disassemble_around(self, lpAddress, dwSize = 64): + def disassemble_around(self, lpAddress, dwSize=64): """ Disassemble around the given address. @@ -1659,7 +1638,7 @@ def disassemble_around(self, lpAddress, dwSize = 64): aProcess = self.get_process() return aProcess.disassemble_around(lpAddress, dwSize) - def disassemble_around_pc(self, dwSize = 64): + def disassemble_around_pc(self, dwSize=64): """ Disassemble around the program counter of the given thread. @@ -1708,11 +1687,13 @@ def disassemble_current(self): - Disassembly line of instruction. - Hexadecimal dump of instruction. """ - return self.disassemble_instruction( self.get_pc() ) + return self.disassemble_instruction(self.get_pc()) + + +# ============================================================================== -#============================================================================== -class _ThreadContainer (object): +class _ThreadContainer(object): """ Encapsulates the capability to contain Thread objects. @@ -1830,9 +1811,9 @@ def get_thread_count(self): self.__initialize_snapshot() return len(self.__threadDict) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def find_threads_by_name(self, name, bExactMatch = True): + def find_threads_by_name(self, name, bExactMatch=True): """ Find threads by name, using different search methods. @@ -1872,7 +1853,7 @@ def find_threads_by_name(self, name, bExactMatch = True): return found_threads -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX TODO # Support for string searches on the window captions. @@ -1884,12 +1865,12 @@ def get_windows(self): """ window_list = list() for thread in self.iter_threads(): - window_list.extend( thread.get_windows() ) + window_list.extend(thread.get_windows()) return window_list -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ - def start_thread(self, lpStartAddress, lpParameter=0, bSuspended = False): + def start_thread(self, lpStartAddress, lpParameter=0, bSuspended=False): """ Remotely creates a new thread in the process. @@ -1907,18 +1888,19 @@ def start_thread(self, lpStartAddress, lpParameter=0, bSuspended = False): dwCreationFlags = win32.CREATE_SUSPENDED else: dwCreationFlags = 0 - hProcess = self.get_handle( win32.PROCESS_CREATE_THREAD | - win32.PROCESS_QUERY_INFORMATION | - win32.PROCESS_VM_OPERATION | - win32.PROCESS_VM_WRITE | - win32.PROCESS_VM_READ ) - hThread, dwThreadId = win32.CreateRemoteThread( - hProcess, 0, 0, lpStartAddress, lpParameter, dwCreationFlags) + hProcess = self.get_handle( + win32.PROCESS_CREATE_THREAD + | win32.PROCESS_QUERY_INFORMATION + | win32.PROCESS_VM_OPERATION + | win32.PROCESS_VM_WRITE + | win32.PROCESS_VM_READ + ) + hThread, dwThreadId = win32.CreateRemoteThread(hProcess, 0, 0, lpStartAddress, lpParameter, dwCreationFlags) aThread = Thread(dwThreadId, hThread, self) self._add_thread(aThread) return aThread -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # TODO # maybe put all the toolhelp code into their own set of classes? @@ -1942,11 +1924,10 @@ def scan_threads(self): if dwProcessId in (0, 4, 8): return -## dead_tids = set( self.get_thread_ids() ) # XXX triggers a scan - dead_tids = self._get_thread_ids() + ## dead_tids = set( self.get_thread_ids() ) # XXX triggers a scan + dead_tids = self._get_thread_ids() dwProcessId = self.get_pid() - hSnapshot = win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPTHREAD, - dwProcessId) + hSnapshot = win32.CreateToolhelp32Snapshot(win32.TH32CS_SNAPTHREAD, dwProcessId) try: te = win32.Thread32First(hSnapshot) while te is not None: @@ -1954,9 +1935,9 @@ def scan_threads(self): dwThreadId = te.th32ThreadID if dwThreadId in dead_tids: dead_tids.remove(dwThreadId) -## if not self.has_thread(dwThreadId): # XXX triggers a scan + ## if not self.has_thread(dwThreadId): # XXX triggers a scan if not self._has_thread_id(dwThreadId): - aThread = Thread(dwThreadId, process = self) + aThread = Thread(dwThreadId, process=self) self._add_thread(aThread) te = win32.Thread32Next(hSnapshot) finally: @@ -1998,7 +1979,7 @@ def close_thread_handles(self): except Exception: pass -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ # XXX _notify_* methods should not trigger a scan @@ -2009,17 +1990,17 @@ def _add_thread(self, aThread): @type aThread: L{Thread} @param aThread: Thread object. """ -## if not isinstance(aThread, Thread): -## if hasattr(aThread, '__class__'): -## typename = aThread.__class__.__name__ -## else: -## typename = str(type(aThread)) -## msg = "Expected Thread, got %s instead" % typename -## raise TypeError(msg) + ## if not isinstance(aThread, Thread): + ## if hasattr(aThread, '__class__'): + ## typename = aThread.__class__.__name__ + ## else: + ## typename = str(type(aThread)) + ## msg = "Expected Thread, got %s instead" % typename + ## raise TypeError(msg) dwThreadId = aThread.dwThreadId -## if dwThreadId in self.__threadDict: -## msg = "Already have a Thread object with ID %d" % dwThreadId -## raise KeyError(msg) + ## if dwThreadId in self.__threadDict: + ## msg = "Already have a Thread object with ID %d" % dwThreadId + ## raise KeyError(msg) aThread.set_process(self) self.__threadDict[dwThreadId] = aThread @@ -2038,7 +2019,7 @@ def _del_thread(self, dwThreadId): msg = "Unknown thread ID %d" % dwThreadId warnings.warn(msg, RuntimeWarning) if aThread: - aThread.clear() # remove circular references + aThread.clear() # remove circular references def _has_thread_id(self, dwThreadId): """ @@ -2061,16 +2042,16 @@ def __add_created_thread(self, event): @type event: L{Event} @param event: Event object. """ - dwThreadId = event.get_tid() - hThread = event.get_thread_handle() -## if not self.has_thread(dwThreadId): # XXX this would trigger a scan + dwThreadId = event.get_tid() + hThread = event.get_thread_handle() + ## if not self.has_thread(dwThreadId): # XXX this would trigger a scan if not self._has_thread_id(dwThreadId): aThread = Thread(dwThreadId, hThread, self) - teb_ptr = event.get_teb() # remember the TEB pointer + teb_ptr = event.get_teb() # remember the TEB pointer if teb_ptr: aThread._teb_ptr = teb_ptr self._add_thread(aThread) - #else: + # else: # aThread = self.get_thread(dwThreadId) # if hThread != win32.INVALID_HANDLE_VALUE: # aThread.hThread = hThread # may have more privileges @@ -2121,7 +2102,7 @@ def _notify_exit_thread(self, event): @return: C{True} to call the user-defined handle, C{False} otherwise. """ dwThreadId = event.get_tid() -## if self.has_thread(dwThreadId): # XXX this would trigger a scan + ## if self.has_thread(dwThreadId): # XXX this would trigger a scan if self._has_thread_id(dwThreadId): self._del_thread(dwThreadId) return True diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py index 4a9a9842a..7036c6619 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/util.py @@ -52,27 +52,23 @@ __revision__ = "$Id$" __all__ = [ - # Filename and pathname manipulation - 'PathOperations', - + "PathOperations", # Memory address operations - 'MemoryAddresses', - 'CustomAddressIterator', - 'DataAddressIterator', - 'ImageAddressIterator', - 'MappedAddressIterator', - 'ExecutableAddressIterator', - 'ReadableAddressIterator', - 'WriteableAddressIterator', - 'ExecutableAndWriteableAddressIterator', - + "MemoryAddresses", + "CustomAddressIterator", + "DataAddressIterator", + "ImageAddressIterator", + "MappedAddressIterator", + "ExecutableAddressIterator", + "ReadableAddressIterator", + "WriteableAddressIterator", + "ExecutableAndWriteableAddressIterator", # Debug registers manipulation - 'DebugRegister', - + "DebugRegister", # Miscellaneous - 'Regenerator', - ] + "Regenerator", +] import sys import os @@ -82,7 +78,8 @@ from winappdbg import win32 from winappdbg import compat -#============================================================================== +# ============================================================================== + class classproperty(property): """ @@ -93,21 +90,27 @@ class classproperty(property): Inspired on: U{http://stackoverflow.com/a/7864317/426293} """ + def __init__(self, fget=None, fset=None, fdel=None, doc=""): if fset is not None or fdel is not None: raise NotImplementedError() super(classproperty, self).__init__(fget=classmethod(fget), doc=doc) + def __get__(self, cls, owner): return self.fget.__get__(None, owner)() + class BannerHelpFormatter(optparse.IndentedHelpFormatter): "Just a small tweak to optparse to be able to print a banner." + def __init__(self, banner, *argv, **argd): self.banner = banner optparse.IndentedHelpFormatter.__init__(self, *argv, **argd) + def format_usage(self, usage): msg = optparse.IndentedHelpFormatter.format_usage(self, usage) - return '%s\n%s' % (self.banner, msg) + return "%s\n%s" % (self.banner, msg) + # See Process.generate_memory_snapshot() class Regenerator(object): @@ -129,33 +132,35 @@ def __init__(self, g_function, *v_args, **d_args): @param d_args: Variable arguments to pass to the generator function. """ self.__g_function = g_function - self.__v_args = v_args - self.__d_args = d_args - self.__g_object = None + self.__v_args = v_args + self.__d_args = d_args + self.__g_object = None def __iter__(self): - 'x.__iter__() <==> iter(x)' + "x.__iter__() <==> iter(x)" return self def next(self): - 'x.next() -> the next value, or raise StopIteration' + "x.next() -> the next value, or raise StopIteration" if self.__g_object is None: - self.__g_object = self.__g_function( *self.__v_args, **self.__d_args ) + self.__g_object = self.__g_function(*self.__v_args, **self.__d_args) try: return self.__g_object.next() except StopIteration: self.__g_object = None raise -class StaticClass (object): + +class StaticClass(object): def __new__(cls, *argv, **argd): "Don't try to instance this class, just use the static methods." - raise NotImplementedError( - "Cannot instance static class %s" % cls.__name__) + raise NotImplementedError("Cannot instance static class %s" % cls.__name__) + + +# ============================================================================== -#============================================================================== -class PathOperations (StaticClass): +class PathOperations(StaticClass): """ Static methods for filename and pathname manipulation. """ @@ -187,7 +192,7 @@ def path_is_absolute(path): return not win32.PathIsRelative(path) @staticmethod - def make_relative(path, current = None): + def make_relative(path, current=None): """ @type path: str @param path: Absolute path. @@ -202,7 +207,7 @@ def make_relative(path, current = None): This happens when the path and the current path are not on the same disk drive or network share. """ - return win32.PathRelativePathTo(pszFrom = current, pszTo = path) + return win32.PathRelativePathTo(pszFrom=current, pszTo=path) @staticmethod def make_absolute(path): @@ -226,7 +231,7 @@ def split_extension(pathname): Tuple containing the file and extension components of the filename. """ filepart = win32.PathRemoveExtension(pathname) - extpart = win32.PathFindExtension(pathname) + extpart = win32.PathFindExtension(pathname) return (filepart, extpart) @staticmethod @@ -257,7 +262,7 @@ def split_path(path): while path: next = win32.PathFindNextComponent(path) if next: - prev = path[ : -len(next) ] + prev = path[: -len(next)] components.append(prev) path = next return components @@ -293,30 +298,28 @@ def native_to_win32_pathname(name): # XXX TODO # There are probably some native paths that # won't be converted by this naive approach. - if name.startswith(compat.b("\\")): - if name.startswith(compat.b("\\??\\")): + if name.startswith("\\"): + if name.startswith("\\??\\"): name = name[4:] - elif name.startswith(compat.b("\\SystemRoot\\")): - system_root_path = os.environ['SYSTEMROOT'] - if system_root_path.endswith('\\'): + elif name.startswith("\\SystemRoot\\"): + system_root_path = os.environ["SYSTEMROOT"] + if system_root_path.endswith("\\"): system_root_path = system_root_path[:-1] name = system_root_path + name[11:] else: - for drive_number in compat.xrange(ord('A'), ord('Z') + 1): - drive_letter = '%c:' % drive_number + for drive_number in compat.xrange(ord("A"), ord("Z") + 1): + drive_letter = "%c:" % drive_number try: device_native_path = win32.QueryDosDevice(drive_letter) except WindowsError: e = sys.exc_info()[1] - if e.winerror in (win32.ERROR_FILE_NOT_FOUND, \ - win32.ERROR_PATH_NOT_FOUND): + if e.winerror in (win32.ERROR_FILE_NOT_FOUND, win32.ERROR_PATH_NOT_FOUND): continue raise - if not device_native_path.endswith(compat.b('\\')): - device_native_path += compat.b('\\') + if not device_native_path.endswith("\\"): + device_native_path += "\\" if name.startswith(device_native_path): - name = drive_letter + compat.b('\\') + \ - name[ len(device_native_path) : ] + name = drive_letter + "\\" + name[len(device_native_path) :] break return name @@ -336,9 +339,11 @@ def pathname_to_filename(pathname): """ return win32.PathFindFileName(pathname) -#============================================================================== -class MemoryAddresses (StaticClass): +# ============================================================================== + + +class MemoryAddresses(StaticClass): """ Class to manipulate memory addresses. @@ -359,7 +364,7 @@ def pageSize(cls): pageSize = 0x1000 except NameError: pageSize = 0x1000 - cls.pageSize = pageSize # now this function won't be called again + cls.pageSize = pageSize # now this function won't be called again return pageSize @classmethod @@ -373,7 +378,7 @@ def align_address_to_page_start(cls, address): @rtype: int @return: Aligned memory address. """ - return address - ( address % cls.pageSize ) + return address - (address % cls.pageSize) @classmethod def align_address_to_page_end(cls, address): @@ -387,7 +392,7 @@ def align_address_to_page_end(cls, address): @rtype: int @return: Aligned memory address. """ - return address + cls.pageSize - ( address % cls.pageSize ) + return address + cls.pageSize - (address % cls.pageSize) @classmethod def align_address_range(cls, begin, end): @@ -431,7 +436,7 @@ def get_buffer_size_in_pages(cls, address, size): @return: Buffer size in number of pages. """ if size < 0: - size = -size + size = -size address = address - size begin, end = cls.align_address_range(address, address + size) # XXX FIXME @@ -458,12 +463,11 @@ def do_ranges_intersect(begin, end, old_begin, old_end): @rtype: bool @return: C{True} if the two ranges intersect, C{False} otherwise. """ - return (old_begin <= begin < old_end) or \ - (old_begin < end <= old_end) or \ - (begin <= old_begin < end) or \ - (begin < old_end <= end) + return (old_begin <= begin < old_end) or (old_begin < end <= old_end) or (begin <= old_begin < end) or (begin < old_end <= end) + + +# ============================================================================== -#============================================================================== def CustomAddressIterator(memory_map, condition): """ @@ -483,12 +487,13 @@ def CustomAddressIterator(memory_map, condition): """ for mbi in memory_map: if condition(mbi): - address = mbi.BaseAddress + address = mbi.BaseAddress max_addr = address + mbi.RegionSize while address < max_addr: yield address address = address + 1 + def DataAddressIterator(memory_map): """ Generator function that iterates through a memory map, returning only those @@ -501,8 +506,8 @@ def DataAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.has_content) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.has_content) + def ImageAddressIterator(memory_map): """ @@ -516,8 +521,8 @@ def ImageAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_image) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_image) + def MappedAddressIterator(memory_map): """ @@ -531,8 +536,8 @@ def MappedAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_mapped) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_mapped) + def ReadableAddressIterator(memory_map): """ @@ -546,8 +551,8 @@ def ReadableAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_readable) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_readable) + def WriteableAddressIterator(memory_map): """ @@ -563,8 +568,8 @@ def WriteableAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_writeable) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_writeable) + def ExecutableAddressIterator(memory_map): """ @@ -580,8 +585,8 @@ def ExecutableAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_executable) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_executable) + def ExecutableAndWriteableAddressIterator(memory_map): """ @@ -598,10 +603,10 @@ def ExecutableAndWriteableAddressIterator(memory_map): @rtype: generator of L{win32.MemoryBasicInformation} @return: Generator object to iterate memory blocks. """ - return CustomAddressIterator(memory_map, - win32.MemoryBasicInformation.is_executable_and_writeable) + return CustomAddressIterator(memory_map, win32.MemoryBasicInformation.is_executable_and_writeable) -#============================================================================== + +# ============================================================================== try: _registerMask = win32.SIZE_T(-1).value except TypeError: @@ -612,7 +617,8 @@ def ExecutableAndWriteableAddressIterator(memory_map): else: raise -class DebugRegister (StaticClass): + +class DebugRegister(StaticClass): """ Class to manipulate debug registers. Used by L{HardwareBreakpoint}. @@ -720,19 +726,19 @@ class DebugRegister (StaticClass): Bitmask to clear all meaningful bits in C{Dr6}. """ - BREAK_ON_EXECUTION = 0 - BREAK_ON_WRITE = 1 - BREAK_ON_ACCESS = 3 - BREAK_ON_IO_ACCESS = 2 + BREAK_ON_EXECUTION = 0 + BREAK_ON_WRITE = 1 + BREAK_ON_ACCESS = 3 + BREAK_ON_IO_ACCESS = 2 - WATCH_BYTE = 0 - WATCH_WORD = 1 + WATCH_BYTE = 0 + WATCH_WORD = 1 WATCH_DWORD = 3 WATCH_QWORD = 2 registerMask = _registerMask -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ ########################################################################### # http://en.wikipedia.org/wiki/Debug_register @@ -759,16 +765,16 @@ class DebugRegister (StaticClass): # Dr7 |= enableMask[register] enableMask = ( - 1 << 0, # Dr0 (bit 0) - 1 << 2, # Dr1 (bit 2) - 1 << 4, # Dr2 (bit 4) - 1 << 6, # Dr3 (bit 6) + 1 << 0, # Dr0 (bit 0) + 1 << 2, # Dr1 (bit 2) + 1 << 4, # Dr2 (bit 4) + 1 << 6, # Dr3 (bit 6) ) # Dr7 &= disableMask[register] - disableMask = tuple( [_registerMask ^ x for x in enableMask] ) # The registerMask from the class is not there in py3 + disableMask = tuple([_registerMask ^ x for x in enableMask]) # The registerMask from the class is not there in py3 try: - del x # It's not there in py3 + del x # It's not there in py3 except: pass @@ -842,14 +848,14 @@ class DebugRegister (StaticClass): # Dr7 = Dr7 & clearMask[register] clearMask = ( - registerMask ^ ( (1 << 0) + (3 << 16) + (3 << 18) ), # Dr0 - registerMask ^ ( (1 << 2) + (3 << 20) + (3 << 22) ), # Dr1 - registerMask ^ ( (1 << 4) + (3 << 24) + (3 << 26) ), # Dr2 - registerMask ^ ( (1 << 6) + (3 << 28) + (3 << 30) ), # Dr3 + registerMask ^ ((1 << 0) + (3 << 16) + (3 << 18)), # Dr0 + registerMask ^ ((1 << 2) + (3 << 20) + (3 << 22)), # Dr1 + registerMask ^ ((1 << 4) + (3 << 24) + (3 << 26)), # Dr2 + registerMask ^ ((1 << 6) + (3 << 28) + (3 << 30)), # Dr3 ) # Dr7 = Dr7 | generalDetectMask - generalDetectMask = (1 << 13) + generalDetectMask = 1 << 13 ########################################################################### # http://en.wikipedia.org/wiki/Debug_register @@ -868,10 +874,18 @@ class DebugRegister (StaticClass): # bool(Dr6 & hitMask[register]) hitMask = ( - (1 << 0), # Dr0 - (1 << 1), # Dr1 - (1 << 2), # Dr2 - (1 << 3), # Dr3 + ( + 1 << 0 # Dr0 + ), + ( + 1 << 1 # Dr1 + ), + ( + 1 << 2 # Dr2 + ), + ( + 1 << 3 # Dr3 + ), ) # bool(Dr6 & anyHitMask) @@ -881,91 +895,98 @@ class DebugRegister (StaticClass): clearHitMask = registerMask ^ hitMaskAll # bool(Dr6 & debugAccessMask) - debugAccessMask = (1 << 13) + debugAccessMask = 1 << 13 # bool(Dr6 & singleStepMask) - singleStepMask = (1 << 14) + singleStepMask = 1 << 14 # bool(Dr6 & taskSwitchMask) - taskSwitchMask = (1 << 15) + taskSwitchMask = 1 << 15 # Dr6 = Dr6 & clearDr6Mask - clearDr6Mask = registerMask ^ (hitMaskAll | \ - debugAccessMask | singleStepMask | taskSwitchMask) + clearDr6Mask = registerMask ^ (hitMaskAll | debugAccessMask | singleStepMask | taskSwitchMask) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ -############################################################################### -# -# (from the AMD64 manuals) -# -# The fields within the DebugCtlMSR register are: -# -# Last-Branch Record (LBR) - Bit 0, read/write. Software sets this bit to 1 -# to cause the processor to record the source and target addresses of the -# last control transfer taken before a debug exception occurs. The recorded -# control transfers include branch instructions, interrupts, and exceptions. -# -# Branch Single Step (BTF) - Bit 1, read/write. Software uses this bit to -# change the behavior of the rFLAGS.TF bit. When this bit is cleared to 0, -# the rFLAGS.TF bit controls instruction single stepping, (normal behavior). -# When this bit is set to 1, the rFLAGS.TF bit controls single stepping on -# control transfers. The single-stepped control transfers include branch -# instructions, interrupts, and exceptions. Control-transfer single stepping -# requires both BTF=1 and rFLAGS.TF=1. -# -# Performance-Monitoring/Breakpoint Pin-Control (PBi) - Bits 5-2, read/write. -# Software uses these bits to control the type of information reported by -# the four external performance-monitoring/breakpoint pins on the processor. -# When a PBi bit is cleared to 0, the corresponding external pin (BPi) -# reports performance-monitor information. When a PBi bit is set to 1, the -# corresponding external pin (BPi) reports breakpoint information. -# -# All remaining bits in the DebugCtlMSR register are reserved. -# -# Software can enable control-transfer single stepping by setting -# DebugCtlMSR.BTF to 1 and rFLAGS.TF to 1. The processor automatically -# disables control-transfer single stepping when a debug exception (#DB) -# occurs by clearing DebugCtlMSR.BTF to 0. rFLAGS.TF is also cleared when a -# #DB exception occurs. Before exiting the debug-exception handler, software -# must set both DebugCtlMSR.BTF and rFLAGS.TF to 1 to restart single -# stepping. -# -############################################################################### - - DebugCtlMSR = 0x1D9 - LastBranchRecord = (1 << 0) - BranchTrapFlag = (1 << 1) - PinControl = ( - (1 << 2), # PB1 - (1 << 3), # PB2 - (1 << 4), # PB3 - (1 << 5), # PB4 - ) - -############################################################################### -# -# (from the AMD64 manuals) -# -# Control-transfer recording MSRs: LastBranchToIP, LastBranchFromIP, -# LastExceptionToIP, and LastExceptionFromIP. These registers are loaded -# automatically by the processor when the DebugCtlMSR.LBR bit is set to 1. -# These MSRs are read-only. -# -# The processor automatically disables control-transfer recording when a -# debug exception (#DB) occurs by clearing DebugCtlMSR.LBR to 0. The -# contents of the control-transfer recording MSRs are not altered by the -# processor when the #DB occurs. Before exiting the debug-exception handler, -# software can set DebugCtlMSR.LBR to 1 to re-enable the recording mechanism. -# -############################################################################### + ############################################################################### + # + # (from the AMD64 manuals) + # + # The fields within the DebugCtlMSR register are: + # + # Last-Branch Record (LBR) - Bit 0, read/write. Software sets this bit to 1 + # to cause the processor to record the source and target addresses of the + # last control transfer taken before a debug exception occurs. The recorded + # control transfers include branch instructions, interrupts, and exceptions. + # + # Branch Single Step (BTF) - Bit 1, read/write. Software uses this bit to + # change the behavior of the rFLAGS.TF bit. When this bit is cleared to 0, + # the rFLAGS.TF bit controls instruction single stepping, (normal behavior). + # When this bit is set to 1, the rFLAGS.TF bit controls single stepping on + # control transfers. The single-stepped control transfers include branch + # instructions, interrupts, and exceptions. Control-transfer single stepping + # requires both BTF=1 and rFLAGS.TF=1. + # + # Performance-Monitoring/Breakpoint Pin-Control (PBi) - Bits 5-2, read/write. + # Software uses these bits to control the type of information reported by + # the four external performance-monitoring/breakpoint pins on the processor. + # When a PBi bit is cleared to 0, the corresponding external pin (BPi) + # reports performance-monitor information. When a PBi bit is set to 1, the + # corresponding external pin (BPi) reports breakpoint information. + # + # All remaining bits in the DebugCtlMSR register are reserved. + # + # Software can enable control-transfer single stepping by setting + # DebugCtlMSR.BTF to 1 and rFLAGS.TF to 1. The processor automatically + # disables control-transfer single stepping when a debug exception (#DB) + # occurs by clearing DebugCtlMSR.BTF to 0. rFLAGS.TF is also cleared when a + # #DB exception occurs. Before exiting the debug-exception handler, software + # must set both DebugCtlMSR.BTF and rFLAGS.TF to 1 to restart single + # stepping. + # + ############################################################################### + + DebugCtlMSR = 0x1D9 + LastBranchRecord = 1 << 0 + BranchTrapFlag = 1 << 1 + PinControl = ( + ( + 1 << 2 # PB1 + ), + ( + 1 << 3 # PB2 + ), + ( + 1 << 4 # PB3 + ), + ( + 1 << 5 # PB4 + ), + ) + + ############################################################################### + # + # (from the AMD64 manuals) + # + # Control-transfer recording MSRs: LastBranchToIP, LastBranchFromIP, + # LastExceptionToIP, and LastExceptionFromIP. These registers are loaded + # automatically by the processor when the DebugCtlMSR.LBR bit is set to 1. + # These MSRs are read-only. + # + # The processor automatically disables control-transfer recording when a + # debug exception (#DB) occurs by clearing DebugCtlMSR.LBR to 0. The + # contents of the control-transfer recording MSRs are not altered by the + # processor when the #DB occurs. Before exiting the debug-exception handler, + # software can set DebugCtlMSR.LBR to 1 to re-enable the recording mechanism. + # + ############################################################################### - LastBranchToIP = 0x1DC - LastBranchFromIP = 0x1DB - LastExceptionToIP = 0x1DE + LastBranchToIP = 0x1DC + LastBranchFromIP = 0x1DB + LastExceptionToIP = 0x1DE LastExceptionFromIP = 0x1DD -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ @classmethod def clear_bp(cls, ctx, register): @@ -980,8 +1001,8 @@ def clear_bp(cls, ctx, register): @type register: int @param register: Slot (debug register) for hardware breakpoint. """ - ctx['Dr7'] &= cls.clearMask[register] - ctx['Dr%d' % register] = 0 + ctx["Dr7"] &= cls.clearMask[register] + ctx["Dr%d" % register] = 0 @classmethod def set_bp(cls, ctx, register, address, trigger, watch): @@ -1005,7 +1026,7 @@ def set_bp(cls, ctx, register, address, trigger, watch): @type watch: int @param watch: Watch flag. See L{HardwareBreakpoint.validWatchSizes}. """ - Dr7 = ctx['Dr7'] + Dr7 = ctx["Dr7"] Dr7 |= cls.enableMask[register] orMask, andMask = cls.triggerMask[register][trigger] Dr7 &= andMask @@ -1013,8 +1034,8 @@ def set_bp(cls, ctx, register, address, trigger, watch): orMask, andMask = cls.watchMask[register][watch] Dr7 &= andMask Dr7 |= orMask - ctx['Dr7'] = Dr7 - ctx['Dr%d' % register] = address + ctx["Dr7"] = Dr7 + ctx["Dr%d" % register] = address @classmethod def find_slot(cls, ctx): @@ -1029,7 +1050,7 @@ def find_slot(cls, ctx): @rtype: int @return: Slot (debug register) for hardware breakpoint. """ - Dr7 = ctx['Dr7'] + Dr7 = ctx["Dr7"] slot = 0 for m in cls.enableMask: if (Dr7 & m) == 0: diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py index b5536c176..a46153b42 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/__init__.py @@ -45,16 +45,16 @@ from winappdbg.win32 import dbghelp from winappdbg.win32 import ntdll -from winappdbg.win32.defines import * -from winappdbg.win32.kernel32 import * -from winappdbg.win32.user32 import * -from winappdbg.win32.advapi32 import * -from winappdbg.win32.wtsapi32 import * -from winappdbg.win32.shell32 import * -from winappdbg.win32.shlwapi import * -from winappdbg.win32.psapi import * -from winappdbg.win32.dbghelp import * -from winappdbg.win32.ntdll import * +from winappdbg.win32.defines import * +from winappdbg.win32.kernel32 import * +from winappdbg.win32.user32 import * +from winappdbg.win32.advapi32 import * +from winappdbg.win32.wtsapi32 import * +from winappdbg.win32.shell32 import * +from winappdbg.win32.shlwapi import * +from winappdbg.win32.psapi import * +from winappdbg.win32.dbghelp import * +from winappdbg.win32.ntdll import * # This calculates the list of exported symbols. _all = set() @@ -68,5 +68,5 @@ _all.update(psapi._all) _all.update(dbghelp._all) _all.update(ntdll._all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py index 4e49889ee..12a6f261a 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/advapi32.py @@ -40,116 +40,125 @@ # XXX TODO # + add transacted registry operations -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- # Privilege constants -SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" -SE_AUDIT_NAME = "SeAuditPrivilege" -SE_BACKUP_NAME = "SeBackupPrivilege" -SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" -SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege" -SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" -SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" -SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege" -SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" -SE_DEBUG_NAME = "SeDebugPrivilege" -SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege" -SE_IMPERSONATE_NAME = "SeImpersonatePrivilege" -SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege" -SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" -SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege" -SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" -SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" -SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" -SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege" -SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" -SE_RELABEL_NAME = "SeRelabelPrivilege" -SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" -SE_RESTORE_NAME = "SeRestorePrivilege" -SE_SECURITY_NAME = "SeSecurityPrivilege" -SE_SHUTDOWN_NAME = "SeShutdownPrivilege" -SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege" -SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege" -SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" -SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" -SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" -SE_TCB_NAME = "SeTcbPrivilege" -SE_TIME_ZONE_NAME = "SeTimeZonePrivilege" -SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege" -SE_UNDOCK_NAME = "SeUndockPrivilege" -SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege" +SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" +SE_AUDIT_NAME = "SeAuditPrivilege" +SE_BACKUP_NAME = "SeBackupPrivilege" +SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" +SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege" +SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" +SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" +SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege" +SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" +SE_DEBUG_NAME = "SeDebugPrivilege" +SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege" +SE_IMPERSONATE_NAME = "SeImpersonatePrivilege" +SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege" +SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" +SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege" +SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" +SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" +SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" +SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege" +SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" +SE_RELABEL_NAME = "SeRelabelPrivilege" +SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" +SE_RESTORE_NAME = "SeRestorePrivilege" +SE_SECURITY_NAME = "SeSecurityPrivilege" +SE_SHUTDOWN_NAME = "SeShutdownPrivilege" +SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege" +SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege" +SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" +SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" +SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" +SE_TCB_NAME = "SeTcbPrivilege" +SE_TIME_ZONE_NAME = "SeTimeZonePrivilege" +SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege" +SE_UNDOCK_NAME = "SeUndockPrivilege" +SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege" SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001 -SE_PRIVILEGE_ENABLED = 0x00000002 -SE_PRIVILEGE_REMOVED = 0x00000004 -SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000 +SE_PRIVILEGE_ENABLED = 0x00000002 +SE_PRIVILEGE_REMOVED = 0x00000004 +SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000 -TOKEN_ADJUST_PRIVILEGES = 0x00000020 +TOKEN_ADJUST_PRIVILEGES = 0x00000020 -LOGON_WITH_PROFILE = 0x00000001 -LOGON_NETCREDENTIALS_ONLY = 0x00000002 +LOGON_WITH_PROFILE = 0x00000001 +LOGON_NETCREDENTIALS_ONLY = 0x00000002 # Token access rights -TOKEN_ASSIGN_PRIMARY = 0x0001 -TOKEN_DUPLICATE = 0x0002 -TOKEN_IMPERSONATE = 0x0004 -TOKEN_QUERY = 0x0008 -TOKEN_QUERY_SOURCE = 0x0010 +TOKEN_ASSIGN_PRIMARY = 0x0001 +TOKEN_DUPLICATE = 0x0002 +TOKEN_IMPERSONATE = 0x0004 +TOKEN_QUERY = 0x0008 +TOKEN_QUERY_SOURCE = 0x0010 TOKEN_ADJUST_PRIVILEGES = 0x0020 -TOKEN_ADJUST_GROUPS = 0x0040 -TOKEN_ADJUST_DEFAULT = 0x0080 -TOKEN_ADJUST_SESSIONID = 0x0100 -TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY) -TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | - TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | - TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT | - TOKEN_ADJUST_SESSIONID) +TOKEN_ADJUST_GROUPS = 0x0040 +TOKEN_ADJUST_DEFAULT = 0x0080 +TOKEN_ADJUST_SESSIONID = 0x0100 +TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY +TOKEN_ALL_ACCESS = ( + STANDARD_RIGHTS_REQUIRED + | TOKEN_ASSIGN_PRIMARY + | TOKEN_DUPLICATE + | TOKEN_IMPERSONATE + | TOKEN_QUERY + | TOKEN_QUERY_SOURCE + | TOKEN_ADJUST_PRIVILEGES + | TOKEN_ADJUST_GROUPS + | TOKEN_ADJUST_DEFAULT + | TOKEN_ADJUST_SESSIONID +) # Predefined HKEY values -HKEY_CLASSES_ROOT = 0x80000000 -HKEY_CURRENT_USER = 0x80000001 -HKEY_LOCAL_MACHINE = 0x80000002 -HKEY_USERS = 0x80000003 -HKEY_PERFORMANCE_DATA = 0x80000004 -HKEY_CURRENT_CONFIG = 0x80000005 +HKEY_CLASSES_ROOT = 0x80000000 +HKEY_CURRENT_USER = 0x80000001 +HKEY_LOCAL_MACHINE = 0x80000002 +HKEY_USERS = 0x80000003 +HKEY_PERFORMANCE_DATA = 0x80000004 +HKEY_CURRENT_CONFIG = 0x80000005 # Registry access rights -KEY_ALL_ACCESS = 0xF003F -KEY_CREATE_LINK = 0x0020 -KEY_CREATE_SUB_KEY = 0x0004 -KEY_ENUMERATE_SUB_KEYS = 0x0008 -KEY_EXECUTE = 0x20019 -KEY_NOTIFY = 0x0010 -KEY_QUERY_VALUE = 0x0001 -KEY_READ = 0x20019 -KEY_SET_VALUE = 0x0002 -KEY_WOW64_32KEY = 0x0200 -KEY_WOW64_64KEY = 0x0100 -KEY_WRITE = 0x20006 +KEY_ALL_ACCESS = 0xF003F +KEY_CREATE_LINK = 0x0020 +KEY_CREATE_SUB_KEY = 0x0004 +KEY_ENUMERATE_SUB_KEYS = 0x0008 +KEY_EXECUTE = 0x20019 +KEY_NOTIFY = 0x0010 +KEY_QUERY_VALUE = 0x0001 +KEY_READ = 0x20019 +KEY_SET_VALUE = 0x0002 +KEY_WOW64_32KEY = 0x0200 +KEY_WOW64_64KEY = 0x0100 +KEY_WRITE = 0x20006 # Registry value types -REG_NONE = 0 -REG_SZ = 1 -REG_EXPAND_SZ = 2 -REG_BINARY = 3 -REG_DWORD = 4 -REG_DWORD_LITTLE_ENDIAN = REG_DWORD -REG_DWORD_BIG_ENDIAN = 5 -REG_LINK = 6 -REG_MULTI_SZ = 7 -REG_RESOURCE_LIST = 8 -REG_FULL_RESOURCE_DESCRIPTOR = 9 -REG_RESOURCE_REQUIREMENTS_LIST = 10 -REG_QWORD = 11 -REG_QWORD_LITTLE_ENDIAN = REG_QWORD - -#--- TOKEN_PRIVILEGE structure ------------------------------------------------ +REG_NONE = 0 +REG_SZ = 1 +REG_EXPAND_SZ = 2 +REG_BINARY = 3 +REG_DWORD = 4 +REG_DWORD_LITTLE_ENDIAN = REG_DWORD +REG_DWORD_BIG_ENDIAN = 5 +REG_LINK = 6 +REG_MULTI_SZ = 7 +REG_RESOURCE_LIST = 8 +REG_FULL_RESOURCE_DESCRIPTOR = 9 +REG_RESOURCE_REQUIREMENTS_LIST = 10 +REG_QWORD = 11 +REG_QWORD_LITTLE_ENDIAN = REG_QWORD + +# --- TOKEN_PRIVILEGE structure ------------------------------------------------ + # typedef struct _LUID { # DWORD LowPart; @@ -158,12 +167,14 @@ # *PLUID; class LUID(Structure): _fields_ = [ - ("LowPart", DWORD), - ("HighPart", LONG), + ("LowPart", DWORD), + ("HighPart", LONG), ] + PLUID = POINTER(LUID) + # typedef struct _LUID_AND_ATTRIBUTES { # LUID Luid; # DWORD Attributes; @@ -171,10 +182,11 @@ class LUID(Structure): # *PLUID_AND_ATTRIBUTES; class LUID_AND_ATTRIBUTES(Structure): _fields_ = [ - ("Luid", LUID), - ("Attributes", DWORD), + ("Luid", LUID), + ("Attributes", DWORD), ] + # typedef struct _TOKEN_PRIVILEGES { # DWORD PrivilegeCount; # LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; @@ -182,15 +194,16 @@ class LUID_AND_ATTRIBUTES(Structure): # *PTOKEN_PRIVILEGES; class TOKEN_PRIVILEGES(Structure): _fields_ = [ - ("PrivilegeCount", DWORD), -## ("Privileges", LUID_AND_ATTRIBUTES * ANYSIZE_ARRAY), - ("Privileges", LUID_AND_ATTRIBUTES), + ("PrivilegeCount", DWORD), + ## ("Privileges", LUID_AND_ATTRIBUTES * ANYSIZE_ARRAY), + ("Privileges", LUID_AND_ATTRIBUTES), ] # See comments on AdjustTokenPrivileges about this structure + PTOKEN_PRIVILEGES = POINTER(TOKEN_PRIVILEGES) -#--- GetTokenInformation enums and structures --------------------------------- +# --- GetTokenInformation enums and structures --------------------------------- # typedef enum _TOKEN_INFORMATION_CLASS { # TokenUser = 1, @@ -238,47 +251,47 @@ class TOKEN_PRIVILEGES(Structure): TOKEN_INFORMATION_CLASS = ctypes.c_int -TokenUser = 1 -TokenGroups = 2 -TokenPrivileges = 3 -TokenOwner = 4 -TokenPrimaryGroup = 5 -TokenDefaultDacl = 6 -TokenSource = 7 -TokenType = 8 -TokenImpersonationLevel = 9 -TokenStatistics = 10 -TokenRestrictedSids = 11 -TokenSessionId = 12 -TokenGroupsAndPrivileges = 13 -TokenSessionReference = 14 -TokenSandBoxInert = 15 -TokenAuditPolicy = 16 -TokenOrigin = 17 -TokenElevationType = 18 -TokenLinkedToken = 19 -TokenElevation = 20 -TokenHasRestrictions = 21 -TokenAccessInformation = 22 -TokenVirtualizationAllowed = 23 -TokenVirtualizationEnabled = 24 -TokenIntegrityLevel = 25 -TokenUIAccess = 26 -TokenMandatoryPolicy = 27 -TokenLogonSid = 28 -TokenIsAppContainer = 29 -TokenCapabilities = 30 -TokenAppContainerSid = 31 -TokenAppContainerNumber = 32 -TokenUserClaimAttributes = 33 -TokenDeviceClaimAttributes = 34 -TokenRestrictedUserClaimAttributes = 35 -TokenRestrictedDeviceClaimAttributes = 36 -TokenDeviceGroups = 37 -TokenRestrictedDeviceGroups = 38 -TokenSecurityAttributes = 39 -TokenIsRestricted = 40 -MaxTokenInfoClass = 41 +TokenUser = 1 +TokenGroups = 2 +TokenPrivileges = 3 +TokenOwner = 4 +TokenPrimaryGroup = 5 +TokenDefaultDacl = 6 +TokenSource = 7 +TokenType = 8 +TokenImpersonationLevel = 9 +TokenStatistics = 10 +TokenRestrictedSids = 11 +TokenSessionId = 12 +TokenGroupsAndPrivileges = 13 +TokenSessionReference = 14 +TokenSandBoxInert = 15 +TokenAuditPolicy = 16 +TokenOrigin = 17 +TokenElevationType = 18 +TokenLinkedToken = 19 +TokenElevation = 20 +TokenHasRestrictions = 21 +TokenAccessInformation = 22 +TokenVirtualizationAllowed = 23 +TokenVirtualizationEnabled = 24 +TokenIntegrityLevel = 25 +TokenUIAccess = 26 +TokenMandatoryPolicy = 27 +TokenLogonSid = 28 +TokenIsAppContainer = 29 +TokenCapabilities = 30 +TokenAppContainerSid = 31 +TokenAppContainerNumber = 32 +TokenUserClaimAttributes = 33 +TokenDeviceClaimAttributes = 34 +TokenRestrictedUserClaimAttributes = 35 +TokenRestrictedDeviceClaimAttributes = 36 +TokenDeviceGroups = 37 +TokenRestrictedDeviceGroups = 38 +TokenSecurityAttributes = 39 +TokenIsRestricted = 40 +MaxTokenInfoClass = 41 # typedef enum tagTOKEN_TYPE { # TokenPrimary = 1, @@ -288,8 +301,8 @@ class TOKEN_PRIVILEGES(Structure): TOKEN_TYPE = ctypes.c_int PTOKEN_TYPE = POINTER(TOKEN_TYPE) -TokenPrimary = 1 -TokenImpersonation = 2 +TokenPrimary = 1 +TokenImpersonation = 2 # typedef enum { # TokenElevationTypeDefault = 1, @@ -297,9 +310,9 @@ class TOKEN_PRIVILEGES(Structure): # TokenElevationTypeLimited # } TOKEN_ELEVATION_TYPE , *PTOKEN_ELEVATION_TYPE; -TokenElevationTypeDefault = 1 -TokenElevationTypeFull = 2 -TokenElevationTypeLimited = 3 +TokenElevationTypeDefault = 1 +TokenElevationTypeFull = 2 +TokenElevationTypeLimited = 3 TOKEN_ELEVATION_TYPE = ctypes.c_int PTOKEN_ELEVATION_TYPE = POINTER(TOKEN_ELEVATION_TYPE) @@ -311,25 +324,29 @@ class TOKEN_PRIVILEGES(Structure): # SecurityDelegation # } SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL; -SecurityAnonymous = 0 -SecurityIdentification = 1 -SecurityImpersonation = 2 -SecurityDelegation = 3 +SecurityAnonymous = 0 +SecurityIdentification = 1 +SecurityImpersonation = 2 +SecurityDelegation = 3 SECURITY_IMPERSONATION_LEVEL = ctypes.c_int PSECURITY_IMPERSONATION_LEVEL = POINTER(SECURITY_IMPERSONATION_LEVEL) + # typedef struct _SID_AND_ATTRIBUTES { # PSID Sid; # DWORD Attributes; # } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; class SID_AND_ATTRIBUTES(Structure): _fields_ = [ - ("Sid", PSID), - ("Attributes", DWORD), + ("Sid", PSID), + ("Attributes", DWORD), ] + + PSID_AND_ATTRIBUTES = POINTER(SID_AND_ATTRIBUTES) + # typedef struct _TOKEN_USER { # SID_AND_ATTRIBUTES User; # } TOKEN_USER, *PTOKEN_USER; @@ -337,8 +354,11 @@ class TOKEN_USER(Structure): _fields_ = [ ("User", SID_AND_ATTRIBUTES), ] + + PTOKEN_USER = POINTER(TOKEN_USER) + # typedef struct _TOKEN_MANDATORY_LABEL { # SID_AND_ATTRIBUTES Label; # } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL; @@ -346,8 +366,11 @@ class TOKEN_MANDATORY_LABEL(Structure): _fields_ = [ ("Label", SID_AND_ATTRIBUTES), ] + + PTOKEN_MANDATORY_LABEL = POINTER(TOKEN_MANDATORY_LABEL) + # typedef struct _TOKEN_OWNER { # PSID Owner; # } TOKEN_OWNER, *PTOKEN_OWNER; @@ -355,8 +378,11 @@ class TOKEN_OWNER(Structure): _fields_ = [ ("Owner", PSID), ] + + PTOKEN_OWNER = POINTER(TOKEN_OWNER) + # typedef struct _TOKEN_PRIMARY_GROUP { # PSID PrimaryGroup; # } TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; @@ -364,8 +390,11 @@ class TOKEN_PRIMARY_GROUP(Structure): _fields_ = [ ("PrimaryGroup", PSID), ] + + PTOKEN_PRIMARY_GROUP = POINTER(TOKEN_PRIMARY_GROUP) + # typedef struct _TOKEN_APPCONTAINER_INFORMATION { # PSID TokenAppContainer; # } TOKEN_APPCONTAINER_INFORMATION, *PTOKEN_APPCONTAINER_INFORMATION; @@ -373,8 +402,11 @@ class TOKEN_APPCONTAINER_INFORMATION(Structure): _fields_ = [ ("TokenAppContainer", PSID), ] + + PTOKEN_APPCONTAINER_INFORMATION = POINTER(TOKEN_APPCONTAINER_INFORMATION) + # typedef struct _TOKEN_ORIGIN { # LUID OriginatingLogonSession; # } TOKEN_ORIGIN, *PTOKEN_ORIGIN; @@ -382,8 +414,11 @@ class TOKEN_ORIGIN(Structure): _fields_ = [ ("OriginatingLogonSession", LUID), ] + + PTOKEN_ORIGIN = POINTER(TOKEN_ORIGIN) + # typedef struct _TOKEN_LINKED_TOKEN { # HANDLE LinkedToken; # } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN; @@ -391,8 +426,11 @@ class TOKEN_LINKED_TOKEN(Structure): _fields_ = [ ("LinkedToken", HANDLE), ] + + PTOKEN_LINKED_TOKEN = POINTER(TOKEN_LINKED_TOKEN) + # typedef struct _TOKEN_STATISTICS { # LUID TokenId; # LUID AuthenticationId; @@ -407,20 +445,22 @@ class TOKEN_LINKED_TOKEN(Structure): # } TOKEN_STATISTICS, *PTOKEN_STATISTICS; class TOKEN_STATISTICS(Structure): _fields_ = [ - ("TokenId", LUID), - ("AuthenticationId", LUID), - ("ExpirationTime", LONGLONG), # LARGE_INTEGER - ("TokenType", TOKEN_TYPE), - ("ImpersonationLevel", SECURITY_IMPERSONATION_LEVEL), - ("DynamicCharged", DWORD), - ("DynamicAvailable", DWORD), - ("GroupCount", DWORD), - ("PrivilegeCount", DWORD), - ("ModifiedId", LUID), + ("TokenId", LUID), + ("AuthenticationId", LUID), + ("ExpirationTime", LONGLONG), # LARGE_INTEGER + ("TokenType", TOKEN_TYPE), + ("ImpersonationLevel", SECURITY_IMPERSONATION_LEVEL), + ("DynamicCharged", DWORD), + ("DynamicAvailable", DWORD), + ("GroupCount", DWORD), + ("PrivilegeCount", DWORD), + ("ModifiedId", LUID), ] + + PTOKEN_STATISTICS = POINTER(TOKEN_STATISTICS) -#--- SID_NAME_USE enum -------------------------------------------------------- +# --- SID_NAME_USE enum -------------------------------------------------------- # typedef enum _SID_NAME_USE { # SidTypeUser = 1, @@ -435,27 +475,27 @@ class TOKEN_STATISTICS(Structure): # SidTypeLabel # } SID_NAME_USE, *PSID_NAME_USE; -SidTypeUser = 1 -SidTypeGroup = 2 -SidTypeDomain = 3 -SidTypeAlias = 4 -SidTypeWellKnownGroup = 5 -SidTypeDeletedAccount = 6 -SidTypeInvalid = 7 -SidTypeUnknown = 8 -SidTypeComputer = 9 -SidTypeLabel = 10 - -#--- WAITCHAIN_NODE_INFO structure and types ---------------------------------- - -WCT_MAX_NODE_COUNT = 16 -WCT_OBJNAME_LENGTH = 128 -WCT_ASYNC_OPEN_FLAG = 1 -WCTP_OPEN_ALL_FLAGS = WCT_ASYNC_OPEN_FLAG -WCT_OUT_OF_PROC_FLAG = 1 +SidTypeUser = 1 +SidTypeGroup = 2 +SidTypeDomain = 3 +SidTypeAlias = 4 +SidTypeWellKnownGroup = 5 +SidTypeDeletedAccount = 6 +SidTypeInvalid = 7 +SidTypeUnknown = 8 +SidTypeComputer = 9 +SidTypeLabel = 10 + +# --- WAITCHAIN_NODE_INFO structure and types ---------------------------------- + +WCT_MAX_NODE_COUNT = 16 +WCT_OBJNAME_LENGTH = 128 +WCT_ASYNC_OPEN_FLAG = 1 +WCTP_OPEN_ALL_FLAGS = WCT_ASYNC_OPEN_FLAG +WCT_OUT_OF_PROC_FLAG = 1 WCT_OUT_OF_PROC_COM_FLAG = 2 -WCT_OUT_OF_PROC_CS_FLAG = 4 -WCTP_GETINFO_ALL_FLAGS = WCT_OUT_OF_PROC_FLAG | WCT_OUT_OF_PROC_COM_FLAG | WCT_OUT_OF_PROC_CS_FLAG +WCT_OUT_OF_PROC_CS_FLAG = 4 +WCTP_GETINFO_ALL_FLAGS = WCT_OUT_OF_PROC_FLAG | WCT_OUT_OF_PROC_COM_FLAG | WCT_OUT_OF_PROC_CS_FLAG HWCT = LPVOID @@ -474,19 +514,19 @@ class TOKEN_STATISTICS(Structure): # WctMaxType # } WCT_OBJECT_TYPE; -WCT_OBJECT_TYPE = DWORD +WCT_OBJECT_TYPE = DWORD -WctCriticalSectionType = 1 -WctSendMessageType = 2 -WctMutexType = 3 -WctAlpcType = 4 -WctComType = 5 -WctThreadWaitType = 6 -WctProcessWaitType = 7 -WctThreadType = 8 -WctComActivationType = 9 -WctUnknownType = 10 -WctMaxType = 11 +WctCriticalSectionType = 1 +WctSendMessageType = 2 +WctMutexType = 3 +WctAlpcType = 4 +WctComType = 5 +WctThreadWaitType = 6 +WctProcessWaitType = 7 +WctThreadType = 8 +WctComActivationType = 9 +WctUnknownType = 10 +WctMaxType = 11 # typedef enum _WCT_OBJECT_STATUS # { @@ -503,19 +543,19 @@ class TOKEN_STATISTICS(Structure): # WctStatusMax # } WCT_OBJECT_STATUS; -WCT_OBJECT_STATUS = DWORD +WCT_OBJECT_STATUS = DWORD -WctStatusNoAccess = 1 # ACCESS_DENIED for this object -WctStatusRunning = 2 # Thread status -WctStatusBlocked = 3 # Thread status -WctStatusPidOnly = 4 # Thread status -WctStatusPidOnlyRpcss = 5 # Thread status -WctStatusOwned = 6 # Dispatcher object status -WctStatusNotOwned = 7 # Dispatcher object status -WctStatusAbandoned = 8 # Dispatcher object status -WctStatusUnknown = 9 # All objects -WctStatusError = 10 # All objects -WctStatusMax = 11 +WctStatusNoAccess = 1 # ACCESS_DENIED for this object +WctStatusRunning = 2 # Thread status +WctStatusBlocked = 3 # Thread status +WctStatusPidOnly = 4 # Thread status +WctStatusPidOnlyRpcss = 5 # Thread status +WctStatusOwned = 6 # Dispatcher object status +WctStatusNotOwned = 7 # Dispatcher object status +WctStatusAbandoned = 8 # Dispatcher object status +WctStatusUnknown = 9 # All objects +WctStatusError = 10 # All objects +WctStatusMax = 11 # typedef struct _WAITCHAIN_NODE_INFO { # WCT_OBJECT_TYPE ObjectType; @@ -535,37 +575,43 @@ class TOKEN_STATISTICS(Structure): # } ; # }WAITCHAIN_NODE_INFO, *PWAITCHAIN_NODE_INFO; + class _WAITCHAIN_NODE_INFO_STRUCT_1(Structure): _fields_ = [ - ("ObjectName", WCHAR * WCT_OBJNAME_LENGTH), - ("Timeout", LONGLONG), # LARGE_INTEGER - ("Alertable", BOOL), + ("ObjectName", WCHAR * WCT_OBJNAME_LENGTH), + ("Timeout", LONGLONG), # LARGE_INTEGER + ("Alertable", BOOL), ] + class _WAITCHAIN_NODE_INFO_STRUCT_2(Structure): _fields_ = [ - ("ProcessId", DWORD), - ("ThreadId", DWORD), - ("WaitTime", DWORD), + ("ProcessId", DWORD), + ("ThreadId", DWORD), + ("WaitTime", DWORD), ("ContextSwitches", DWORD), ] + class _WAITCHAIN_NODE_INFO_UNION(Union): _fields_ = [ - ("LockObject", _WAITCHAIN_NODE_INFO_STRUCT_1), - ("ThreadObject", _WAITCHAIN_NODE_INFO_STRUCT_2), + ("LockObject", _WAITCHAIN_NODE_INFO_STRUCT_1), + ("ThreadObject", _WAITCHAIN_NODE_INFO_STRUCT_2), ] + class WAITCHAIN_NODE_INFO(Structure): _fields_ = [ - ("ObjectType", WCT_OBJECT_TYPE), - ("ObjectStatus", WCT_OBJECT_STATUS), - ("u", _WAITCHAIN_NODE_INFO_UNION), + ("ObjectType", WCT_OBJECT_TYPE), + ("ObjectStatus", WCT_OBJECT_STATUS), + ("u", _WAITCHAIN_NODE_INFO_UNION), ] + PWAITCHAIN_NODE_INFO = POINTER(WAITCHAIN_NODE_INFO) -class WaitChainNodeInfo (object): + +class WaitChainNodeInfo(object): """ Represents a node in the wait chain. @@ -624,11 +670,11 @@ class WaitChainNodeInfo (object): @ivar ContextSwitches: Number of context switches. """ - #@type Timeout: int - #@ivar Timeout: Currently not documented in MSDN. + # @type Timeout: int + # @ivar Timeout: Currently not documented in MSDN. # - #@type Alertable: bool - #@ivar Alertable: Currently not documented in MSDN. + # @type Alertable: bool + # @ivar Alertable: Currently not documented in MSDN. # TODO: __repr__ @@ -640,13 +686,14 @@ def __init__(self, aStructure): self.ThreadId = aStructure.u.ThreadObject.ThreadId self.WaitTime = aStructure.u.ThreadObject.WaitTime self.ContextSwitches = aStructure.u.ThreadObject.ContextSwitches - self.ObjectName = u'' + self.ObjectName = "" else: self.ObjectName = aStructure.u.LockObject.ObjectName.value - #self.Timeout = aStructure.u.LockObject.Timeout - #self.Alertable = bool(aStructure.u.LockObject.Alertable) + # self.Timeout = aStructure.u.LockObject.Timeout + # self.Alertable = bool(aStructure.u.LockObject.Alertable) -class ThreadWaitChainSessionHandle (Handle): + +class ThreadWaitChainSessionHandle(Handle): """ Thread wait chain session handle. @@ -655,13 +702,12 @@ class ThreadWaitChainSessionHandle (Handle): @see: L{Handle} """ - def __init__(self, aHandle = None): + def __init__(self, aHandle=None): """ @type aHandle: int @param aHandle: Win32 handle value. """ - super(ThreadWaitChainSessionHandle, self).__init__(aHandle, - bOwnership = True) + super(ThreadWaitChainSessionHandle, self).__init__(aHandle, bOwnership=True) def _close(self): if self.value is None: @@ -671,7 +717,7 @@ def _close(self): def dup(self): raise NotImplementedError() - def wait(self, dwMilliseconds = None): + def wait(self, dwMilliseconds=None): raise NotImplementedError() @property @@ -682,19 +728,20 @@ def inherit(self): def protectFromClose(self): return False -#--- Privilege dropping ------------------------------------------------------- + +# --- Privilege dropping ------------------------------------------------------- SAFER_LEVEL_HANDLE = HANDLE SAFER_SCOPEID_MACHINE = 1 -SAFER_SCOPEID_USER = 2 +SAFER_SCOPEID_USER = 2 SAFER_LEVEL_OPEN = 1 -SAFER_LEVELID_DISALLOWED = 0x00000 -SAFER_LEVELID_UNTRUSTED = 0x01000 -SAFER_LEVELID_CONSTRAINED = 0x10000 -SAFER_LEVELID_NORMALUSER = 0x20000 +SAFER_LEVELID_DISALLOWED = 0x00000 +SAFER_LEVELID_UNTRUSTED = 0x01000 +SAFER_LEVELID_CONSTRAINED = 0x10000 +SAFER_LEVELID_NORMALUSER = 0x20000 SAFER_LEVELID_FULLYTRUSTED = 0x40000 SAFER_POLICY_INFO_CLASS = DWORD @@ -705,150 +752,151 @@ def protectFromClose(self): SaferPolicyScopeFlags = 5 SAFER_TOKEN_NULL_IF_EQUAL = 1 -SAFER_TOKEN_COMPARE_ONLY = 2 -SAFER_TOKEN_MAKE_INERT = 4 -SAFER_TOKEN_WANT_FLAGS = 8 -SAFER_TOKEN_MASK = 15 +SAFER_TOKEN_COMPARE_ONLY = 2 +SAFER_TOKEN_MAKE_INERT = 4 +SAFER_TOKEN_WANT_FLAGS = 8 +SAFER_TOKEN_MASK = 15 -#--- Service Control Manager types, constants and structures ------------------ +# --- Service Control Manager types, constants and structures ------------------ SC_HANDLE = HANDLE -SERVICES_ACTIVE_DATABASEW = u"ServicesActive" -SERVICES_FAILED_DATABASEW = u"ServicesFailed" +SERVICES_ACTIVE_DATABASEW = "ServicesActive" +SERVICES_FAILED_DATABASEW = "ServicesFailed" SERVICES_ACTIVE_DATABASEA = "ServicesActive" SERVICES_FAILED_DATABASEA = "ServicesFailed" -SC_GROUP_IDENTIFIERW = u'+' -SC_GROUP_IDENTIFIERA = '+' +SC_GROUP_IDENTIFIERW = "+" +SC_GROUP_IDENTIFIERA = "+" -SERVICE_NO_CHANGE = 0xffffffff +SERVICE_NO_CHANGE = 0xFFFFFFFF # enum SC_STATUS_TYPE -SC_STATUS_TYPE = ctypes.c_int +SC_STATUS_TYPE = ctypes.c_int SC_STATUS_PROCESS_INFO = 0 # enum SC_ENUM_TYPE -SC_ENUM_TYPE = ctypes.c_int +SC_ENUM_TYPE = ctypes.c_int SC_ENUM_PROCESS_INFO = 0 # Access rights # http://msdn.microsoft.com/en-us/library/windows/desktop/ms685981(v=vs.85).aspx -SERVICE_ALL_ACCESS = 0xF01FF -SERVICE_QUERY_CONFIG = 0x0001 -SERVICE_CHANGE_CONFIG = 0x0002 -SERVICE_QUERY_STATUS = 0x0004 +SERVICE_ALL_ACCESS = 0xF01FF +SERVICE_QUERY_CONFIG = 0x0001 +SERVICE_CHANGE_CONFIG = 0x0002 +SERVICE_QUERY_STATUS = 0x0004 SERVICE_ENUMERATE_DEPENDENTS = 0x0008 -SERVICE_START = 0x0010 -SERVICE_STOP = 0x0020 -SERVICE_PAUSE_CONTINUE = 0x0040 -SERVICE_INTERROGATE = 0x0080 +SERVICE_START = 0x0010 +SERVICE_STOP = 0x0020 +SERVICE_PAUSE_CONTINUE = 0x0040 +SERVICE_INTERROGATE = 0x0080 SERVICE_USER_DEFINED_CONTROL = 0x0100 -SC_MANAGER_ALL_ACCESS = 0xF003F -SC_MANAGER_CONNECT = 0x0001 -SC_MANAGER_CREATE_SERVICE = 0x0002 -SC_MANAGER_ENUMERATE_SERVICE = 0x0004 -SC_MANAGER_LOCK = 0x0008 -SC_MANAGER_QUERY_LOCK_STATUS = 0x0010 -SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020 +SC_MANAGER_ALL_ACCESS = 0xF003F +SC_MANAGER_CONNECT = 0x0001 +SC_MANAGER_CREATE_SERVICE = 0x0002 +SC_MANAGER_ENUMERATE_SERVICE = 0x0004 +SC_MANAGER_LOCK = 0x0008 +SC_MANAGER_QUERY_LOCK_STATUS = 0x0010 +SC_MANAGER_MODIFY_BOOT_CONFIG = 0x0020 # CreateService() service start type -SERVICE_BOOT_START = 0x00000000 +SERVICE_BOOT_START = 0x00000000 SERVICE_SYSTEM_START = 0x00000001 -SERVICE_AUTO_START = 0x00000002 +SERVICE_AUTO_START = 0x00000002 SERVICE_DEMAND_START = 0x00000003 -SERVICE_DISABLED = 0x00000004 +SERVICE_DISABLED = 0x00000004 # CreateService() error control flags -SERVICE_ERROR_IGNORE = 0x00000000 -SERVICE_ERROR_NORMAL = 0x00000001 -SERVICE_ERROR_SEVERE = 0x00000002 -SERVICE_ERROR_CRITICAL = 0x00000003 +SERVICE_ERROR_IGNORE = 0x00000000 +SERVICE_ERROR_NORMAL = 0x00000001 +SERVICE_ERROR_SEVERE = 0x00000002 +SERVICE_ERROR_CRITICAL = 0x00000003 # EnumServicesStatusEx() service state filters -SERVICE_ACTIVE = 1 -SERVICE_INACTIVE = 2 +SERVICE_ACTIVE = 1 +SERVICE_INACTIVE = 2 SERVICE_STATE_ALL = 3 # SERVICE_STATUS_PROCESS.dwServiceType -SERVICE_KERNEL_DRIVER = 0x00000001 -SERVICE_FILE_SYSTEM_DRIVER = 0x00000002 -SERVICE_ADAPTER = 0x00000004 -SERVICE_RECOGNIZER_DRIVER = 0x00000008 -SERVICE_WIN32_OWN_PROCESS = 0x00000010 +SERVICE_KERNEL_DRIVER = 0x00000001 +SERVICE_FILE_SYSTEM_DRIVER = 0x00000002 +SERVICE_ADAPTER = 0x00000004 +SERVICE_RECOGNIZER_DRIVER = 0x00000008 +SERVICE_WIN32_OWN_PROCESS = 0x00000010 SERVICE_WIN32_SHARE_PROCESS = 0x00000020 SERVICE_INTERACTIVE_PROCESS = 0x00000100 # EnumServicesStatusEx() service type filters (in addition to actual types) -SERVICE_DRIVER = 0x0000000B # SERVICE_KERNEL_DRIVER and SERVICE_FILE_SYSTEM_DRIVER -SERVICE_WIN32 = 0x00000030 # SERVICE_WIN32_OWN_PROCESS and SERVICE_WIN32_SHARE_PROCESS +SERVICE_DRIVER = 0x0000000B # SERVICE_KERNEL_DRIVER and SERVICE_FILE_SYSTEM_DRIVER +SERVICE_WIN32 = 0x00000030 # SERVICE_WIN32_OWN_PROCESS and SERVICE_WIN32_SHARE_PROCESS # SERVICE_STATUS_PROCESS.dwCurrentState -SERVICE_STOPPED = 0x00000001 -SERVICE_START_PENDING = 0x00000002 -SERVICE_STOP_PENDING = 0x00000003 -SERVICE_RUNNING = 0x00000004 -SERVICE_CONTINUE_PENDING = 0x00000005 -SERVICE_PAUSE_PENDING = 0x00000006 -SERVICE_PAUSED = 0x00000007 +SERVICE_STOPPED = 0x00000001 +SERVICE_START_PENDING = 0x00000002 +SERVICE_STOP_PENDING = 0x00000003 +SERVICE_RUNNING = 0x00000004 +SERVICE_CONTINUE_PENDING = 0x00000005 +SERVICE_PAUSE_PENDING = 0x00000006 +SERVICE_PAUSED = 0x00000007 # SERVICE_STATUS_PROCESS.dwControlsAccepted -SERVICE_ACCEPT_STOP = 0x00000001 -SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002 -SERVICE_ACCEPT_SHUTDOWN = 0x00000004 -SERVICE_ACCEPT_PARAMCHANGE = 0x00000008 -SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010 +SERVICE_ACCEPT_STOP = 0x00000001 +SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002 +SERVICE_ACCEPT_SHUTDOWN = 0x00000004 +SERVICE_ACCEPT_PARAMCHANGE = 0x00000008 +SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010 SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020 -SERVICE_ACCEPT_POWEREVENT = 0x00000040 -SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080 -SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100 +SERVICE_ACCEPT_POWEREVENT = 0x00000040 +SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080 +SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100 # SERVICE_STATUS_PROCESS.dwServiceFlags SERVICE_RUNS_IN_SYSTEM_PROCESS = 0x00000001 # Service control flags -SERVICE_CONTROL_STOP = 0x00000001 -SERVICE_CONTROL_PAUSE = 0x00000002 -SERVICE_CONTROL_CONTINUE = 0x00000003 -SERVICE_CONTROL_INTERROGATE = 0x00000004 -SERVICE_CONTROL_SHUTDOWN = 0x00000005 -SERVICE_CONTROL_PARAMCHANGE = 0x00000006 -SERVICE_CONTROL_NETBINDADD = 0x00000007 -SERVICE_CONTROL_NETBINDREMOVE = 0x00000008 -SERVICE_CONTROL_NETBINDENABLE = 0x00000009 -SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A -SERVICE_CONTROL_DEVICEEVENT = 0x0000000B +SERVICE_CONTROL_STOP = 0x00000001 +SERVICE_CONTROL_PAUSE = 0x00000002 +SERVICE_CONTROL_CONTINUE = 0x00000003 +SERVICE_CONTROL_INTERROGATE = 0x00000004 +SERVICE_CONTROL_SHUTDOWN = 0x00000005 +SERVICE_CONTROL_PARAMCHANGE = 0x00000006 +SERVICE_CONTROL_NETBINDADD = 0x00000007 +SERVICE_CONTROL_NETBINDREMOVE = 0x00000008 +SERVICE_CONTROL_NETBINDENABLE = 0x00000009 +SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A +SERVICE_CONTROL_DEVICEEVENT = 0x0000000B SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C -SERVICE_CONTROL_POWEREVENT = 0x0000000D -SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E +SERVICE_CONTROL_POWEREVENT = 0x0000000D +SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E # Service control accepted bitmasks -SERVICE_ACCEPT_STOP = 0x00000001 -SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002 -SERVICE_ACCEPT_SHUTDOWN = 0x00000004 -SERVICE_ACCEPT_PARAMCHANGE = 0x00000008 -SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010 +SERVICE_ACCEPT_STOP = 0x00000001 +SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002 +SERVICE_ACCEPT_SHUTDOWN = 0x00000004 +SERVICE_ACCEPT_PARAMCHANGE = 0x00000008 +SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010 SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020 -SERVICE_ACCEPT_POWEREVENT = 0x00000040 -SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080 -SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100 -SERVICE_ACCEPT_TIMECHANGE = 0x00000200 -SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400 -SERVICE_ACCEPT_USERMODEREBOOT = 0x00000800 +SERVICE_ACCEPT_POWEREVENT = 0x00000040 +SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080 +SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100 +SERVICE_ACCEPT_TIMECHANGE = 0x00000200 +SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400 +SERVICE_ACCEPT_USERMODEREBOOT = 0x00000800 # enum SC_ACTION_TYPE -SC_ACTION_NONE = 0 -SC_ACTION_RESTART = 1 -SC_ACTION_REBOOT = 2 +SC_ACTION_NONE = 0 +SC_ACTION_RESTART = 1 +SC_ACTION_REBOOT = 2 SC_ACTION_RUN_COMMAND = 3 # QueryServiceConfig2 -SERVICE_CONFIG_DESCRIPTION = 1 +SERVICE_CONFIG_DESCRIPTION = 1 SERVICE_CONFIG_FAILURE_ACTIONS = 2 + # typedef struct _SERVICE_STATUS { # DWORD dwServiceType; # DWORD dwCurrentState; @@ -860,16 +908,19 @@ def protectFromClose(self): # } SERVICE_STATUS, *LPSERVICE_STATUS; class SERVICE_STATUS(Structure): _fields_ = [ - ("dwServiceType", DWORD), - ("dwCurrentState", DWORD), - ("dwControlsAccepted", DWORD), - ("dwWin32ExitCode", DWORD), - ("dwServiceSpecificExitCode", DWORD), - ("dwCheckPoint", DWORD), - ("dwWaitHint", DWORD), + ("dwServiceType", DWORD), + ("dwCurrentState", DWORD), + ("dwControlsAccepted", DWORD), + ("dwWin32ExitCode", DWORD), + ("dwServiceSpecificExitCode", DWORD), + ("dwCheckPoint", DWORD), + ("dwWaitHint", DWORD), ] + + LPSERVICE_STATUS = POINTER(SERVICE_STATUS) + # typedef struct _SERVICE_STATUS_PROCESS { # DWORD dwServiceType; # DWORD dwCurrentState; @@ -883,11 +934,14 @@ class SERVICE_STATUS(Structure): # } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS; class SERVICE_STATUS_PROCESS(Structure): _fields_ = SERVICE_STATUS._fields_ + [ - ("dwProcessId", DWORD), - ("dwServiceFlags", DWORD), + ("dwProcessId", DWORD), + ("dwServiceFlags", DWORD), ] + + LPSERVICE_STATUS_PROCESS = POINTER(SERVICE_STATUS_PROCESS) + # typedef struct _ENUM_SERVICE_STATUS { # LPTSTR lpServiceName; # LPTSTR lpDisplayName; @@ -899,15 +953,20 @@ class ENUM_SERVICE_STATUSA(Structure): ("lpDisplayName", LPSTR), ("ServiceStatus", SERVICE_STATUS), ] + + class ENUM_SERVICE_STATUSW(Structure): _fields_ = [ ("lpServiceName", LPWSTR), ("lpDisplayName", LPWSTR), ("ServiceStatus", SERVICE_STATUS), ] + + LPENUM_SERVICE_STATUSA = POINTER(ENUM_SERVICE_STATUSA) LPENUM_SERVICE_STATUSW = POINTER(ENUM_SERVICE_STATUSW) + # typedef struct _ENUM_SERVICE_STATUS_PROCESS { # LPTSTR lpServiceName; # LPTSTR lpDisplayName; @@ -915,19 +974,24 @@ class ENUM_SERVICE_STATUSW(Structure): # } ENUM_SERVICE_STATUS_PROCESS, *LPENUM_SERVICE_STATUS_PROCESS; class ENUM_SERVICE_STATUS_PROCESSA(Structure): _fields_ = [ - ("lpServiceName", LPSTR), - ("lpDisplayName", LPSTR), + ("lpServiceName", LPSTR), + ("lpDisplayName", LPSTR), ("ServiceStatusProcess", SERVICE_STATUS_PROCESS), ] + + class ENUM_SERVICE_STATUS_PROCESSW(Structure): _fields_ = [ - ("lpServiceName", LPWSTR), - ("lpDisplayName", LPWSTR), + ("lpServiceName", LPWSTR), + ("lpDisplayName", LPWSTR), ("ServiceStatusProcess", SERVICE_STATUS_PROCESS), ] + + LPENUM_SERVICE_STATUS_PROCESSA = POINTER(ENUM_SERVICE_STATUS_PROCESSA) LPENUM_SERVICE_STATUS_PROCESSW = POINTER(ENUM_SERVICE_STATUS_PROCESSW) + class ServiceStatus(object): """ Wrapper for the L{SERVICE_STATUS} structure. @@ -938,13 +1002,14 @@ def __init__(self, raw): @type raw: L{SERVICE_STATUS} @param raw: Raw structure for this service status data. """ - self.ServiceType = raw.dwServiceType - self.CurrentState = raw.dwCurrentState - self.ControlsAccepted = raw.dwControlsAccepted - self.Win32ExitCode = raw.dwWin32ExitCode + self.ServiceType = raw.dwServiceType + self.CurrentState = raw.dwCurrentState + self.ControlsAccepted = raw.dwControlsAccepted + self.Win32ExitCode = raw.dwWin32ExitCode self.ServiceSpecificExitCode = raw.dwServiceSpecificExitCode - self.CheckPoint = raw.dwCheckPoint - self.WaitHint = raw.dwWaitHint + self.CheckPoint = raw.dwCheckPoint + self.WaitHint = raw.dwWaitHint + class ServiceStatusProcess(object): """ @@ -956,15 +1021,16 @@ def __init__(self, raw): @type raw: L{SERVICE_STATUS_PROCESS} @param raw: Raw structure for this service status data. """ - self.ServiceType = raw.dwServiceType - self.CurrentState = raw.dwCurrentState - self.ControlsAccepted = raw.dwControlsAccepted - self.Win32ExitCode = raw.dwWin32ExitCode + self.ServiceType = raw.dwServiceType + self.CurrentState = raw.dwCurrentState + self.ControlsAccepted = raw.dwControlsAccepted + self.Win32ExitCode = raw.dwWin32ExitCode self.ServiceSpecificExitCode = raw.dwServiceSpecificExitCode - self.CheckPoint = raw.dwCheckPoint - self.WaitHint = raw.dwWaitHint - self.ProcessId = raw.dwProcessId - self.ServiceFlags = raw.dwServiceFlags + self.CheckPoint = raw.dwCheckPoint + self.WaitHint = raw.dwWaitHint + self.ProcessId = raw.dwProcessId + self.ServiceFlags = raw.dwServiceFlags + class ServiceStatusEntry(object): """ @@ -976,15 +1042,15 @@ def __init__(self, raw): @type raw: L{ENUM_SERVICE_STATUSA} or L{ENUM_SERVICE_STATUSW} @param raw: Raw structure for this service status entry. """ - self.ServiceName = raw.lpServiceName - self.DisplayName = raw.lpDisplayName - self.ServiceType = raw.ServiceStatus.dwServiceType - self.CurrentState = raw.ServiceStatus.dwCurrentState - self.ControlsAccepted = raw.ServiceStatus.dwControlsAccepted - self.Win32ExitCode = raw.ServiceStatus.dwWin32ExitCode + self.ServiceName = raw.lpServiceName + self.DisplayName = raw.lpDisplayName + self.ServiceType = raw.ServiceStatus.dwServiceType + self.CurrentState = raw.ServiceStatus.dwCurrentState + self.ControlsAccepted = raw.ServiceStatus.dwControlsAccepted + self.Win32ExitCode = raw.ServiceStatus.dwWin32ExitCode self.ServiceSpecificExitCode = raw.ServiceStatus.dwServiceSpecificExitCode - self.CheckPoint = raw.ServiceStatus.dwCheckPoint - self.WaitHint = raw.ServiceStatus.dwWaitHint + self.CheckPoint = raw.ServiceStatus.dwCheckPoint + self.WaitHint = raw.ServiceStatus.dwWaitHint def __str__(self): output = [] @@ -993,10 +1059,10 @@ def __str__(self): else: output.append("Service") if self.DisplayName: - output.append("\"%s\" (%s)" % (self.DisplayName, self.ServiceName)) + output.append('"%s" (%s)' % (self.DisplayName, self.ServiceName)) else: - output.append("\"%s\"" % self.ServiceName) - if self.CurrentState == SERVICE_CONTINUE_PENDING: + output.append('"%s"' % self.ServiceName) + if self.CurrentState == SERVICE_CONTINUE_PENDING: output.append("is about to continue.") elif self.CurrentState == SERVICE_PAUSE_PENDING: output.append("is pausing.") @@ -1012,6 +1078,7 @@ def __str__(self): output.append("is stopped.") return " ".join(output) + class ServiceStatusProcessEntry(object): """ Service status entry returned by L{EnumServicesStatusEx}. @@ -1022,17 +1089,17 @@ def __init__(self, raw): @type raw: L{ENUM_SERVICE_STATUS_PROCESSA} or L{ENUM_SERVICE_STATUS_PROCESSW} @param raw: Raw structure for this service status entry. """ - self.ServiceName = raw.lpServiceName - self.DisplayName = raw.lpDisplayName - self.ServiceType = raw.ServiceStatusProcess.dwServiceType - self.CurrentState = raw.ServiceStatusProcess.dwCurrentState - self.ControlsAccepted = raw.ServiceStatusProcess.dwControlsAccepted - self.Win32ExitCode = raw.ServiceStatusProcess.dwWin32ExitCode + self.ServiceName = raw.lpServiceName + self.DisplayName = raw.lpDisplayName + self.ServiceType = raw.ServiceStatusProcess.dwServiceType + self.CurrentState = raw.ServiceStatusProcess.dwCurrentState + self.ControlsAccepted = raw.ServiceStatusProcess.dwControlsAccepted + self.Win32ExitCode = raw.ServiceStatusProcess.dwWin32ExitCode self.ServiceSpecificExitCode = raw.ServiceStatusProcess.dwServiceSpecificExitCode - self.CheckPoint = raw.ServiceStatusProcess.dwCheckPoint - self.WaitHint = raw.ServiceStatusProcess.dwWaitHint - self.ProcessId = raw.ServiceStatusProcess.dwProcessId - self.ServiceFlags = raw.ServiceStatusProcess.dwServiceFlags + self.CheckPoint = raw.ServiceStatusProcess.dwCheckPoint + self.WaitHint = raw.ServiceStatusProcess.dwWaitHint + self.ProcessId = raw.ServiceStatusProcess.dwProcessId + self.ServiceFlags = raw.ServiceStatusProcess.dwServiceFlags def __str__(self): output = [] @@ -1041,10 +1108,10 @@ def __str__(self): else: output.append("Service ") if self.DisplayName: - output.append("\"%s\" (%s)" % (self.DisplayName, self.ServiceName)) + output.append('"%s" (%s)' % (self.DisplayName, self.ServiceName)) else: - output.append("\"%s\"" % self.ServiceName) - if self.CurrentState == SERVICE_CONTINUE_PENDING: + output.append('"%s"' % self.ServiceName) + if self.CurrentState == SERVICE_CONTINUE_PENDING: output.append(" is about to continue") elif self.CurrentState == SERVICE_PAUSE_PENDING: output.append(" is pausing") @@ -1063,18 +1130,22 @@ def __str__(self): output.append(".") return "".join(output) -#--- Handle wrappers ---------------------------------------------------------- + +# --- Handle wrappers ---------------------------------------------------------- + # XXX maybe add functions related to the tokens here? -class TokenHandle (Handle): +class TokenHandle(Handle): """ Access token handle. @see: L{Handle} """ + pass -class RegistryKeyHandle (UserModeHandle): + +class RegistryKeyHandle(UserModeHandle): """ Registry key handle. """ @@ -1084,7 +1155,8 @@ class RegistryKeyHandle (UserModeHandle): def _close(self): RegCloseKey(self.value) -class SaferLevelHandle (UserModeHandle): + +class SaferLevelHandle(UserModeHandle): """ Safer level handle. @@ -1096,7 +1168,8 @@ class SaferLevelHandle (UserModeHandle): def _close(self): SaferCloseLevel(self.value) -class ServiceHandle (UserModeHandle): + +class ServiceHandle(UserModeHandle): """ Service handle. @@ -1108,7 +1181,8 @@ class ServiceHandle (UserModeHandle): def _close(self): CloseServiceHandle(self.value) -class ServiceControlManagerHandle (UserModeHandle): + +class ServiceControlManagerHandle(UserModeHandle): """ Service Control Manager (SCM) handle. @@ -1120,7 +1194,9 @@ class ServiceControlManagerHandle (UserModeHandle): def _close(self): CloseServiceHandle(self.value) -#--- advapi32.dll ------------------------------------------------------------- + +# --- advapi32.dll ------------------------------------------------------------- + # BOOL WINAPI GetUserName( # __out LPTSTR lpBuffer, @@ -1129,35 +1205,37 @@ def _close(self): def GetUserNameA(): _GetUserNameA = windll.advapi32.GetUserNameA _GetUserNameA.argtypes = [LPSTR, LPDWORD] - _GetUserNameA.restype = bool + _GetUserNameA.restype = bool nSize = DWORD(0) _GetUserNameA(None, byref(nSize)) error = GetLastError() if error != ERROR_INSUFFICIENT_BUFFER: raise ctypes.WinError(error) - lpBuffer = ctypes.create_string_buffer('', nSize.value + 1) + lpBuffer = ctypes.create_string_buffer("", nSize.value + 1) success = _GetUserNameA(lpBuffer, byref(nSize)) if not success: raise ctypes.WinError() return lpBuffer.value + def GetUserNameW(): _GetUserNameW = windll.advapi32.GetUserNameW _GetUserNameW.argtypes = [LPWSTR, LPDWORD] - _GetUserNameW.restype = bool + _GetUserNameW.restype = bool nSize = DWORD(0) _GetUserNameW(None, byref(nSize)) error = GetLastError() if error != ERROR_INSUFFICIENT_BUFFER: raise ctypes.WinError(error) - lpBuffer = ctypes.create_unicode_buffer(u'', nSize.value + 1) + lpBuffer = ctypes.create_unicode_buffer("", nSize.value + 1) success = _GetUserNameW(lpBuffer, byref(nSize)) if not success: raise ctypes.WinError() return lpBuffer.value + GetUserName = DefaultStringType(GetUserNameA, GetUserNameW) # BOOL WINAPI LookupAccountName( @@ -1172,6 +1250,7 @@ def GetUserNameW(): # XXX TO DO + # BOOL WINAPI LookupAccountSid( # __in_opt LPCTSTR lpSystemName, # __in PSID lpSid, @@ -1184,7 +1263,7 @@ def GetUserNameW(): def LookupAccountSidA(lpSystemName, lpSid): _LookupAccountSidA = windll.advapi32.LookupAccountSidA _LookupAccountSidA.argtypes = [LPSTR, PSID, LPSTR, LPDWORD, LPSTR, LPDWORD, LPDWORD] - _LookupAccountSidA.restype = bool + _LookupAccountSidA.restype = bool cchName = DWORD(0) cchReferencedDomainName = DWORD(0) @@ -1193,17 +1272,20 @@ def LookupAccountSidA(lpSystemName, lpSid): error = GetLastError() if error != ERROR_INSUFFICIENT_BUFFER: raise ctypes.WinError(error) - lpName = ctypes.create_string_buffer('', cchName + 1) - lpReferencedDomainName = ctypes.create_string_buffer('', cchReferencedDomainName + 1) - success = _LookupAccountSidA(lpSystemName, lpSid, lpName, byref(cchName), lpReferencedDomainName, byref(cchReferencedDomainName), byref(peUse)) + lpName = ctypes.create_string_buffer("", cchName + 1) + lpReferencedDomainName = ctypes.create_string_buffer("", cchReferencedDomainName + 1) + success = _LookupAccountSidA( + lpSystemName, lpSid, lpName, byref(cchName), lpReferencedDomainName, byref(cchReferencedDomainName), byref(peUse) + ) if not success: raise ctypes.WinError() return lpName.value, lpReferencedDomainName.value, peUse.value + def LookupAccountSidW(lpSystemName, lpSid): _LookupAccountSidW = windll.advapi32.LookupAccountSidA _LookupAccountSidW.argtypes = [LPSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, LPDWORD] - _LookupAccountSidW.restype = bool + _LookupAccountSidW.restype = bool cchName = DWORD(0) cchReferencedDomainName = DWORD(0) @@ -1212,15 +1294,19 @@ def LookupAccountSidW(lpSystemName, lpSid): error = GetLastError() if error != ERROR_INSUFFICIENT_BUFFER: raise ctypes.WinError(error) - lpName = ctypes.create_unicode_buffer(u'', cchName + 1) - lpReferencedDomainName = ctypes.create_unicode_buffer(u'', cchReferencedDomainName + 1) - success = _LookupAccountSidW(lpSystemName, lpSid, lpName, byref(cchName), lpReferencedDomainName, byref(cchReferencedDomainName), byref(peUse)) + lpName = ctypes.create_unicode_buffer("", cchName + 1) + lpReferencedDomainName = ctypes.create_unicode_buffer("", cchReferencedDomainName + 1) + success = _LookupAccountSidW( + lpSystemName, lpSid, lpName, byref(cchName), lpReferencedDomainName, byref(cchReferencedDomainName), byref(peUse) + ) if not success: raise ctypes.WinError() return lpName.value, lpReferencedDomainName.value, peUse.value + LookupAccountSid = GuessStringType(LookupAccountSidA, LookupAccountSidW) + # BOOL ConvertSidToStringSid( # __in PSID Sid, # __out LPTSTR *StringSid @@ -1228,7 +1314,7 @@ def LookupAccountSidW(lpSystemName, lpSid): def ConvertSidToStringSidA(Sid): _ConvertSidToStringSidA = windll.advapi32.ConvertSidToStringSidA _ConvertSidToStringSidA.argtypes = [PSID, LPSTR] - _ConvertSidToStringSidA.restype = bool + _ConvertSidToStringSidA.restype = bool _ConvertSidToStringSidA.errcheck = RaiseIfZero pStringSid = LPSTR() @@ -1239,10 +1325,11 @@ def ConvertSidToStringSidA(Sid): LocalFree(pStringSid) return StringSid + def ConvertSidToStringSidW(Sid): _ConvertSidToStringSidW = windll.advapi32.ConvertSidToStringSidW _ConvertSidToStringSidW.argtypes = [PSID, LPWSTR] - _ConvertSidToStringSidW.restype = bool + _ConvertSidToStringSidW.restype = bool _ConvertSidToStringSidW.errcheck = RaiseIfZero pStringSid = LPWSTR() @@ -1253,8 +1340,10 @@ def ConvertSidToStringSidW(Sid): LocalFree(pStringSid) return StringSid + ConvertSidToStringSid = DefaultStringType(ConvertSidToStringSidA, ConvertSidToStringSidW) + # BOOL WINAPI ConvertStringSidToSid( # __in LPCTSTR StringSid, # __out PSID *Sid @@ -1262,34 +1351,38 @@ def ConvertSidToStringSidW(Sid): def ConvertStringSidToSidA(StringSid): _ConvertStringSidToSidA = windll.advapi32.ConvertStringSidToSidA _ConvertStringSidToSidA.argtypes = [LPSTR, PVOID] - _ConvertStringSidToSidA.restype = bool + _ConvertStringSidToSidA.restype = bool _ConvertStringSidToSidA.errcheck = RaiseIfZero Sid = PVOID() _ConvertStringSidToSidA(StringSid, ctypes.pointer(Sid)) return Sid.value + def ConvertStringSidToSidW(StringSid): _ConvertStringSidToSidW = windll.advapi32.ConvertStringSidToSidW _ConvertStringSidToSidW.argtypes = [LPWSTR, PVOID] - _ConvertStringSidToSidW.restype = bool + _ConvertStringSidToSidW.restype = bool _ConvertStringSidToSidW.errcheck = RaiseIfZero Sid = PVOID() _ConvertStringSidToSidW(StringSid, ctypes.pointer(Sid)) return Sid.value + ConvertStringSidToSid = GuessStringType(ConvertStringSidToSidA, ConvertStringSidToSidW) + # BOOL WINAPI IsValidSid( # __in PSID pSid # ); def IsValidSid(pSid): _IsValidSid = windll.advapi32.IsValidSid _IsValidSid.argtypes = [PSID] - _IsValidSid.restype = bool + _IsValidSid.restype = bool return _IsValidSid(pSid) + # BOOL WINAPI EqualSid( # __in PSID pSid1, # __in PSID pSid2 @@ -1297,18 +1390,20 @@ def IsValidSid(pSid): def EqualSid(pSid1, pSid2): _EqualSid = windll.advapi32.EqualSid _EqualSid.argtypes = [PSID, PSID] - _EqualSid.restype = bool + _EqualSid.restype = bool return _EqualSid(pSid1, pSid2) + # DWORD WINAPI GetLengthSid( # __in PSID pSid # ); def GetLengthSid(pSid): _GetLengthSid = windll.advapi32.GetLengthSid _GetLengthSid.argtypes = [PSID] - _GetLengthSid.restype = DWORD + _GetLengthSid.restype = DWORD return _GetLengthSid(pSid) + # BOOL WINAPI CopySid( # __in DWORD nDestinationSidLength, # __out PSID pDestinationSid, @@ -1317,71 +1412,76 @@ def GetLengthSid(pSid): def CopySid(pSourceSid): _CopySid = windll.advapi32.CopySid _CopySid.argtypes = [DWORD, PVOID, PSID] - _CopySid.restype = bool + _CopySid.restype = bool _CopySid.errcheck = RaiseIfZero nDestinationSidLength = GetLengthSid(pSourceSid) - DestinationSid = ctypes.create_string_buffer('', nDestinationSidLength) + DestinationSid = ctypes.create_string_buffer("", nDestinationSidLength) pDestinationSid = ctypes.cast(ctypes.pointer(DestinationSid), PVOID) _CopySid(nDestinationSidLength, pDestinationSid, pSourceSid) return ctypes.cast(pDestinationSid, PSID) + # PVOID WINAPI FreeSid( # __in PSID pSid # ); def FreeSid(pSid): _FreeSid = windll.advapi32.FreeSid _FreeSid.argtypes = [PSID] - _FreeSid.restype = PSID + _FreeSid.restype = PSID _FreeSid.errcheck = RaiseIfNotZero _FreeSid(pSid) + # BOOL WINAPI OpenProcessToken( # __in HANDLE ProcessHandle, # __in DWORD DesiredAccess, # __out PHANDLE TokenHandle # ); -def OpenProcessToken(ProcessHandle, DesiredAccess = TOKEN_ALL_ACCESS): +def OpenProcessToken(ProcessHandle, DesiredAccess=TOKEN_ALL_ACCESS): _OpenProcessToken = windll.advapi32.OpenProcessToken _OpenProcessToken.argtypes = [HANDLE, DWORD, PHANDLE] - _OpenProcessToken.restype = bool + _OpenProcessToken.restype = bool _OpenProcessToken.errcheck = RaiseIfZero NewTokenHandle = HANDLE(INVALID_HANDLE_VALUE) _OpenProcessToken(ProcessHandle, DesiredAccess, byref(NewTokenHandle)) return TokenHandle(NewTokenHandle.value) + # BOOL WINAPI OpenThreadToken( # __in HANDLE ThreadHandle, # __in DWORD DesiredAccess, # __in BOOL OpenAsSelf, # __out PHANDLE TokenHandle # ); -def OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf = True): +def OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf=True): _OpenThreadToken = windll.advapi32.OpenThreadToken _OpenThreadToken.argtypes = [HANDLE, DWORD, BOOL, PHANDLE] - _OpenThreadToken.restype = bool + _OpenThreadToken.restype = bool _OpenThreadToken.errcheck = RaiseIfZero NewTokenHandle = HANDLE(INVALID_HANDLE_VALUE) _OpenThreadToken(ThreadHandle, DesiredAccess, OpenAsSelf, byref(NewTokenHandle)) return TokenHandle(NewTokenHandle.value) + # BOOL WINAPI DuplicateToken( # _In_ HANDLE ExistingTokenHandle, # _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, # _Out_ PHANDLE DuplicateTokenHandle # ); -def DuplicateToken(ExistingTokenHandle, ImpersonationLevel = SecurityImpersonation): +def DuplicateToken(ExistingTokenHandle, ImpersonationLevel=SecurityImpersonation): _DuplicateToken = windll.advapi32.DuplicateToken _DuplicateToken.argtypes = [HANDLE, SECURITY_IMPERSONATION_LEVEL, PHANDLE] - _DuplicateToken.restype = bool + _DuplicateToken.restype = bool _DuplicateToken.errcheck = RaiseIfZero DuplicateTokenHandle = HANDLE(INVALID_HANDLE_VALUE) _DuplicateToken(ExistingTokenHandle, ImpersonationLevel, byref(DuplicateTokenHandle)) return TokenHandle(DuplicateTokenHandle.value) + # BOOL WINAPI DuplicateTokenEx( # _In_ HANDLE hExistingToken, # _In_ DWORD dwDesiredAccess, @@ -1390,28 +1490,36 @@ def DuplicateToken(ExistingTokenHandle, ImpersonationLevel = SecurityImpersonati # _In_ TOKEN_TYPE TokenType, # _Out_ PHANDLE phNewToken # ); -def DuplicateTokenEx(hExistingToken, dwDesiredAccess = TOKEN_ALL_ACCESS, lpTokenAttributes = None, ImpersonationLevel = SecurityImpersonation, TokenType = TokenPrimary): +def DuplicateTokenEx( + hExistingToken, + dwDesiredAccess=TOKEN_ALL_ACCESS, + lpTokenAttributes=None, + ImpersonationLevel=SecurityImpersonation, + TokenType=TokenPrimary, +): _DuplicateTokenEx = windll.advapi32.DuplicateTokenEx _DuplicateTokenEx.argtypes = [HANDLE, DWORD, LPSECURITY_ATTRIBUTES, SECURITY_IMPERSONATION_LEVEL, TOKEN_TYPE, PHANDLE] - _DuplicateTokenEx.restype = bool + _DuplicateTokenEx.restype = bool _DuplicateTokenEx.errcheck = RaiseIfZero DuplicateTokenHandle = HANDLE(INVALID_HANDLE_VALUE) _DuplicateTokenEx(hExistingToken, dwDesiredAccess, lpTokenAttributes, ImpersonationLevel, TokenType, byref(DuplicateTokenHandle)) return TokenHandle(DuplicateTokenHandle.value) + # BOOL WINAPI IsTokenRestricted( # __in HANDLE TokenHandle # ); def IsTokenRestricted(hTokenHandle): _IsTokenRestricted = windll.advapi32.IsTokenRestricted _IsTokenRestricted.argtypes = [HANDLE] - _IsTokenRestricted.restype = bool + _IsTokenRestricted.restype = bool _IsTokenRestricted.errcheck = RaiseIfNotErrorSuccess SetLastError(ERROR_SUCCESS) return _IsTokenRestricted(hTokenHandle) + # BOOL WINAPI LookupPrivilegeValue( # __in_opt LPCTSTR lpSystemName, # __in LPCTSTR lpName, @@ -1420,7 +1528,7 @@ def IsTokenRestricted(hTokenHandle): def LookupPrivilegeValueA(lpSystemName, lpName): _LookupPrivilegeValueA = windll.advapi32.LookupPrivilegeValueA _LookupPrivilegeValueA.argtypes = [LPSTR, LPSTR, PLUID] - _LookupPrivilegeValueA.restype = bool + _LookupPrivilegeValueA.restype = bool _LookupPrivilegeValueA.errcheck = RaiseIfZero lpLuid = LUID() @@ -1429,10 +1537,11 @@ def LookupPrivilegeValueA(lpSystemName, lpName): _LookupPrivilegeValueA(lpSystemName, lpName, byref(lpLuid)) return lpLuid + def LookupPrivilegeValueW(lpSystemName, lpName): _LookupPrivilegeValueW = windll.advapi32.LookupPrivilegeValueW _LookupPrivilegeValueW.argtypes = [LPWSTR, LPWSTR, PLUID] - _LookupPrivilegeValueW.restype = bool + _LookupPrivilegeValueW.restype = bool _LookupPrivilegeValueW.errcheck = RaiseIfZero lpLuid = LUID() @@ -1441,6 +1550,7 @@ def LookupPrivilegeValueW(lpSystemName, lpName): _LookupPrivilegeValueW(lpSystemName, lpName, byref(lpLuid)) return lpLuid + LookupPrivilegeValue = GuessStringType(LookupPrivilegeValueA, LookupPrivilegeValueW) # BOOL WINAPI LookupPrivilegeName( @@ -1450,10 +1560,11 @@ def LookupPrivilegeValueW(lpSystemName, lpName): # __inout LPDWORD cchName # ); + def LookupPrivilegeNameA(lpSystemName, lpLuid): _LookupPrivilegeNameA = windll.advapi32.LookupPrivilegeNameA _LookupPrivilegeNameA.argtypes = [LPSTR, PLUID, LPSTR, LPDWORD] - _LookupPrivilegeNameA.restype = bool + _LookupPrivilegeNameA.restype = bool _LookupPrivilegeNameA.errcheck = RaiseIfZero cchName = DWORD(0) @@ -1462,20 +1573,23 @@ def LookupPrivilegeNameA(lpSystemName, lpLuid): _LookupPrivilegeNameA(lpSystemName, byref(lpLuid), byref(lpName), byref(cchName)) return lpName.value + def LookupPrivilegeNameW(lpSystemName, lpLuid): _LookupPrivilegeNameW = windll.advapi32.LookupPrivilegeNameW _LookupPrivilegeNameW.argtypes = [LPWSTR, PLUID, LPWSTR, LPDWORD] - _LookupPrivilegeNameW.restype = bool + _LookupPrivilegeNameW.restype = bool _LookupPrivilegeNameW.errcheck = RaiseIfZero cchName = DWORD(0) _LookupPrivilegeNameW(lpSystemName, byref(lpLuid), NULL, byref(cchName)) - lpName = ctypes.create_unicode_buffer(u"", cchName.value) + lpName = ctypes.create_unicode_buffer("", cchName.value) _LookupPrivilegeNameW(lpSystemName, byref(lpLuid), byref(lpName), byref(cchName)) return lpName.value + LookupPrivilegeName = GuessStringType(LookupPrivilegeNameA, LookupPrivilegeNameW) + # BOOL WINAPI AdjustTokenPrivileges( # __in HANDLE TokenHandle, # __in BOOL DisableAllPrivileges, @@ -1484,10 +1598,10 @@ def LookupPrivilegeNameW(lpSystemName, lpLuid): # __out_opt PTOKEN_PRIVILEGES PreviousState, # __out_opt PDWORD ReturnLength # ); -def AdjustTokenPrivileges(TokenHandle, NewState = ()): +def AdjustTokenPrivileges(TokenHandle, NewState=()): _AdjustTokenPrivileges = windll.advapi32.AdjustTokenPrivileges _AdjustTokenPrivileges.argtypes = [HANDLE, BOOL, LPVOID, DWORD, LPVOID, LPVOID] - _AdjustTokenPrivileges.restype = bool + _AdjustTokenPrivileges.restype = bool _AdjustTokenPrivileges.errcheck = RaiseIfZero # # I don't know how to allocate variable sized structures in ctypes :( @@ -1500,7 +1614,7 @@ def AdjustTokenPrivileges(TokenHandle, NewState = ()): _AdjustTokenPrivileges(TokenHandle, TRUE, NULL, 0, NULL, NULL) else: success = True - for (privilege, enabled) in NewState: + for privilege, enabled in NewState: if not isinstance(privilege, LUID): privilege = LookupPrivilegeValue(NULL, privilege) if enabled == True: @@ -1512,9 +1626,10 @@ def AdjustTokenPrivileges(TokenHandle, NewState = ()): else: flags = enabled laa = LUID_AND_ATTRIBUTES(privilege, flags) - tp = TOKEN_PRIVILEGES(1, laa) + tp = TOKEN_PRIVILEGES(1, laa) _AdjustTokenPrivileges(TokenHandle, FALSE, byref(tp), sizeof(tp), NULL, NULL) + # BOOL WINAPI GetTokenInformation( # __in HANDLE TokenHandle, # __in TOKEN_INFORMATION_CLASS TokenInformationClass, @@ -1587,8 +1702,13 @@ def GetTokenInformation(hTokenHandle, TokenInformationClass): return TokenInformation.value # Various boolean flags. - if TokenInformationClass in (TokenSandBoxInert, TokenHasRestrictions, TokenUIAccess, - TokenVirtualizationAllowed, TokenVirtualizationEnabled): + if TokenInformationClass in ( + TokenSandBoxInert, + TokenHasRestrictions, + TokenUIAccess, + TokenVirtualizationAllowed, + TokenVirtualizationEnabled, + ): TokenInformation = DWORD(0) _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInformation) return bool(TokenInformation.value) @@ -1597,21 +1717,22 @@ def GetTokenInformation(hTokenHandle, TokenInformationClass): if TokenInformationClass == TokenLinkedToken: TokenInformation = TOKEN_LINKED_TOKEN(0) _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInformation) - return TokenHandle(TokenInformation.LinkedToken.value, bOwnership = True) + return TokenHandle(TokenInformation.LinkedToken.value, bOwnership=True) # Token statistics. if TokenInformationClass == TokenStatistics: TokenInformation = TOKEN_STATISTICS() _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInformation) - return TokenInformation # TODO add a class wrapper? + return TokenInformation # TODO add a class wrapper? # Currently unsupported flags. raise NotImplementedError("TokenInformationClass(%i) not yet supported!" % TokenInformationClass) + def _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInformation): _GetTokenInformation = windll.advapi32.GetTokenInformation _GetTokenInformation.argtypes = [HANDLE, TOKEN_INFORMATION_CLASS, LPVOID, DWORD, PDWORD] - _GetTokenInformation.restype = bool + _GetTokenInformation.restype = bool _GetTokenInformation.errcheck = RaiseIfZero ReturnLength = DWORD(0) @@ -1621,6 +1742,7 @@ def _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInfo raise ctypes.WinError(ERROR_INSUFFICIENT_BUFFER) return TokenInformation + # BOOL WINAPI SetTokenInformation( # __in HANDLE TokenHandle, # __in TOKEN_INFORMATION_CLASS TokenInformationClass, @@ -1630,6 +1752,7 @@ def _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInfo # XXX TODO + # BOOL WINAPI CreateProcessWithLogonW( # __in LPCWSTR lpUsername, # __in_opt LPCWSTR lpDomain, @@ -1643,50 +1766,87 @@ def _internal_GetTokenInformation(hTokenHandle, TokenInformationClass, TokenInfo # __in LPSTARTUPINFOW lpStartupInfo, # __out LPPROCESS_INFORMATION lpProcessInfo # ); -def CreateProcessWithLogonW(lpUsername = None, lpDomain = None, lpPassword = None, dwLogonFlags = 0, lpApplicationName = None, lpCommandLine = None, dwCreationFlags = 0, lpEnvironment = None, lpCurrentDirectory = None, lpStartupInfo = None): +def CreateProcessWithLogonW( + lpUsername=None, + lpDomain=None, + lpPassword=None, + dwLogonFlags=0, + lpApplicationName=None, + lpCommandLine=None, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessWithLogonW = windll.advapi32.CreateProcessWithLogonW - _CreateProcessWithLogonW.argtypes = [LPWSTR, LPWSTR, LPWSTR, DWORD, LPWSTR, LPWSTR, DWORD, LPVOID, LPWSTR, LPVOID, LPPROCESS_INFORMATION] + _CreateProcessWithLogonW.argtypes = [ + LPWSTR, + LPWSTR, + LPWSTR, + DWORD, + LPWSTR, + LPWSTR, + DWORD, + LPVOID, + LPWSTR, + LPVOID, + LPPROCESS_INFORMATION, + ] _CreateProcessWithLogonW.restype = bool _CreateProcessWithLogonW.errcheck = RaiseIfZero if not lpUsername: - lpUsername = None + lpUsername = None if not lpDomain: - lpDomain = None + lpDomain = None if not lpPassword: - lpPassword = None + lpPassword = None if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) + lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpStartupInfo: - lpStartupInfo = STARTUPINFOW() - lpStartupInfo.cb = sizeof(STARTUPINFOW) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword, dwLogonFlags, lpApplicationName, lpCommandLine, dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFOW() + lpStartupInfo.cb = sizeof(STARTUPINFOW) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessWithLogonW( + lpUsername, + lpDomain, + lpPassword, + dwLogonFlags, + lpApplicationName, + lpCommandLine, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) + CreateProcessWithLogonA = MakeANSIVersion(CreateProcessWithLogonW) CreateProcessWithLogon = DefaultStringType(CreateProcessWithLogonA, CreateProcessWithLogonW) + # BOOL WINAPI CreateProcessWithTokenW( # __in HANDLE hToken, # __in DWORD dwLogonFlags, @@ -1698,46 +1858,67 @@ def CreateProcessWithLogonW(lpUsername = None, lpDomain = None, lpPassword = Non # __in LPSTARTUPINFOW lpStartupInfo, # __out LPPROCESS_INFORMATION lpProcessInfo # ); -def CreateProcessWithTokenW(hToken = None, dwLogonFlags = 0, lpApplicationName = None, lpCommandLine = None, dwCreationFlags = 0, lpEnvironment = None, lpCurrentDirectory = None, lpStartupInfo = None): +def CreateProcessWithTokenW( + hToken=None, + dwLogonFlags=0, + lpApplicationName=None, + lpCommandLine=None, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessWithTokenW = windll.advapi32.CreateProcessWithTokenW _CreateProcessWithTokenW.argtypes = [HANDLE, DWORD, LPWSTR, LPWSTR, DWORD, LPVOID, LPWSTR, LPVOID, LPPROCESS_INFORMATION] _CreateProcessWithTokenW.restype = bool _CreateProcessWithTokenW.errcheck = RaiseIfZero if not hToken: - hToken = None + hToken = None if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) + lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpStartupInfo: - lpStartupInfo = STARTUPINFOW() - lpStartupInfo.cb = sizeof(STARTUPINFOW) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessWithTokenW(hToken, dwLogonFlags, lpApplicationName, lpCommandLine, dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFOW() + lpStartupInfo.cb = sizeof(STARTUPINFOW) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessWithTokenW( + hToken, + dwLogonFlags, + lpApplicationName, + lpCommandLine, + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) + CreateProcessWithTokenA = MakeANSIVersion(CreateProcessWithTokenW) CreateProcessWithToken = DefaultStringType(CreateProcessWithTokenA, CreateProcessWithTokenW) + # BOOL WINAPI CreateProcessAsUser( # __in_opt HANDLE hToken, # __in_opt LPCTSTR lpApplicationName, @@ -1751,24 +1932,47 @@ def CreateProcessWithTokenW(hToken = None, dwLogonFlags = 0, lpApplicationName = # __in LPSTARTUPINFO lpStartupInfo, # __out LPPROCESS_INFORMATION lpProcessInformation # ); -def CreateProcessAsUserA(hToken = None, lpApplicationName = None, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None): +def CreateProcessAsUserA( + hToken=None, + lpApplicationName=None, + lpCommandLine=None, + lpProcessAttributes=None, + lpThreadAttributes=None, + bInheritHandles=False, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessAsUserA = windll.advapi32.CreateProcessAsUserA - _CreateProcessAsUserA.argtypes = [HANDLE, LPSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPSTR, LPVOID, LPPROCESS_INFORMATION] - _CreateProcessAsUserA.restype = bool + _CreateProcessAsUserA.argtypes = [ + HANDLE, + LPSTR, + LPSTR, + LPSECURITY_ATTRIBUTES, + LPSECURITY_ATTRIBUTES, + BOOL, + DWORD, + LPVOID, + LPSTR, + LPVOID, + LPPROCESS_INFORMATION, + ] + _CreateProcessAsUserA.restype = bool _CreateProcessAsUserA.errcheck = RaiseIfZero if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_string_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_string_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_string_buffer(lpEnvironment) + lpEnvironment = ctypes.create_string_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpProcessAttributes: lpProcessAttributes = None else: @@ -1778,40 +1982,76 @@ def CreateProcessAsUserA(hToken = None, lpApplicationName = None, lpCommandLine= else: lpThreadAttributes = byref(lpThreadAttributes) if not lpStartupInfo: - lpStartupInfo = STARTUPINFO() - lpStartupInfo.cb = sizeof(STARTUPINFO) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessAsUserA(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bool(bInheritHandles), dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFO() + lpStartupInfo.cb = sizeof(STARTUPINFO) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessAsUserA( + hToken, + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bool(bInheritHandles), + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) -def CreateProcessAsUserW(hToken = None, lpApplicationName = None, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None): + +def CreateProcessAsUserW( + hToken=None, + lpApplicationName=None, + lpCommandLine=None, + lpProcessAttributes=None, + lpThreadAttributes=None, + bInheritHandles=False, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessAsUserW = windll.advapi32.CreateProcessAsUserW - _CreateProcessAsUserW.argtypes = [HANDLE, LPWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPWSTR, LPVOID, LPPROCESS_INFORMATION] - _CreateProcessAsUserW.restype = bool + _CreateProcessAsUserW.argtypes = [ + HANDLE, + LPWSTR, + LPWSTR, + LPSECURITY_ATTRIBUTES, + LPSECURITY_ATTRIBUTES, + BOOL, + DWORD, + LPVOID, + LPWSTR, + LPVOID, + LPPROCESS_INFORMATION, + ] + _CreateProcessAsUserW.restype = bool _CreateProcessAsUserW.errcheck = RaiseIfZero if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) + lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpProcessAttributes: lpProcessAttributes = None else: @@ -1821,22 +2061,35 @@ def CreateProcessAsUserW(hToken = None, lpApplicationName = None, lpCommandLine= else: lpThreadAttributes = byref(lpThreadAttributes) if not lpStartupInfo: - lpStartupInfo = STARTUPINFO() - lpStartupInfo.cb = sizeof(STARTUPINFO) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessAsUserW(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bool(bInheritHandles), dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFO() + lpStartupInfo.cb = sizeof(STARTUPINFO) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessAsUserW( + hToken, + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bool(bInheritHandles), + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) + CreateProcessAsUser = GuessStringType(CreateProcessAsUserA, CreateProcessAsUserW) # VOID CALLBACK WaitChainCallback( @@ -1849,14 +2102,15 @@ def CreateProcessAsUserW(hToken = None, lpApplicationName = None, lpCommandLine= # ); PWAITCHAINCALLBACK = WINFUNCTYPE(HWCT, DWORD_PTR, DWORD, LPDWORD, PWAITCHAIN_NODE_INFO, LPBOOL) + # HWCT WINAPI OpenThreadWaitChainSession( # __in DWORD Flags, # __in_opt PWAITCHAINCALLBACK callback # ); -def OpenThreadWaitChainSession(Flags = 0, callback = None): +def OpenThreadWaitChainSession(Flags=0, callback=None): _OpenThreadWaitChainSession = windll.advapi32.OpenThreadWaitChainSession _OpenThreadWaitChainSession.argtypes = [DWORD, PVOID] - _OpenThreadWaitChainSession.restype = HWCT + _OpenThreadWaitChainSession.restype = HWCT _OpenThreadWaitChainSession.errcheck = RaiseIfZero if callback is not None: @@ -1864,6 +2118,7 @@ def OpenThreadWaitChainSession(Flags = 0, callback = None): aHandle = _OpenThreadWaitChainSession(Flags, callback) return ThreadWaitChainSessionHandle(aHandle) + # BOOL WINAPI GetThreadWaitChain( # _In_ HWCT WctHandle, # _In_opt_ DWORD_PTR Context, @@ -1873,24 +2128,38 @@ def OpenThreadWaitChainSession(Flags = 0, callback = None): # _Out_ PWAITCHAIN_NODE_INFO NodeInfoArray, # _Out_ LPBOOL IsCycle # ); -def GetThreadWaitChain(WctHandle, Context = None, Flags = WCTP_GETINFO_ALL_FLAGS, ThreadId = -1, NodeCount = WCT_MAX_NODE_COUNT): +def GetThreadWaitChain(WctHandle, Context=None, Flags=WCTP_GETINFO_ALL_FLAGS, ThreadId=-1, NodeCount=WCT_MAX_NODE_COUNT): _GetThreadWaitChain = windll.advapi32.GetThreadWaitChain _GetThreadWaitChain.argtypes = [HWCT, LPDWORD, DWORD, DWORD, LPDWORD, PWAITCHAIN_NODE_INFO, LPBOOL] - _GetThreadWaitChain.restype = bool + _GetThreadWaitChain.restype = bool _GetThreadWaitChain.errcheck = RaiseIfZero dwNodeCount = DWORD(NodeCount) NodeInfoArray = (WAITCHAIN_NODE_INFO * NodeCount)() IsCycle = BOOL(0) - _GetThreadWaitChain(WctHandle, Context, Flags, ThreadId, byref(dwNodeCount), ctypes.cast(ctypes.pointer(NodeInfoArray), PWAITCHAIN_NODE_INFO), byref(IsCycle)) + _GetThreadWaitChain( + WctHandle, + Context, + Flags, + ThreadId, + byref(dwNodeCount), + ctypes.cast(ctypes.pointer(NodeInfoArray), PWAITCHAIN_NODE_INFO), + byref(IsCycle), + ) while dwNodeCount.value > NodeCount: NodeCount = dwNodeCount.value NodeInfoArray = (WAITCHAIN_NODE_INFO * NodeCount)() - _GetThreadWaitChain(WctHandle, Context, Flags, ThreadId, byref(dwNodeCount), ctypes.cast(ctypes.pointer(NodeInfoArray), PWAITCHAIN_NODE_INFO), byref(IsCycle)) - return ( - [ WaitChainNodeInfo(NodeInfoArray[index]) for index in compat.xrange(dwNodeCount.value) ], - bool(IsCycle.value) - ) + _GetThreadWaitChain( + WctHandle, + Context, + Flags, + ThreadId, + byref(dwNodeCount), + ctypes.cast(ctypes.pointer(NodeInfoArray), PWAITCHAIN_NODE_INFO), + byref(IsCycle), + ) + return ([WaitChainNodeInfo(NodeInfoArray[index]) for index in compat.xrange(dwNodeCount.value)], bool(IsCycle.value)) + # VOID WINAPI CloseThreadWaitChainSession( # __in HWCT WctHandle @@ -1900,6 +2169,7 @@ def CloseThreadWaitChainSession(WctHandle): _CloseThreadWaitChainSession.argtypes = [HWCT] _CloseThreadWaitChainSession(WctHandle) + # BOOL WINAPI SaferCreateLevel( # __in DWORD dwScopeId, # __in DWORD dwLevelId, @@ -1910,13 +2180,14 @@ def CloseThreadWaitChainSession(WctHandle): def SaferCreateLevel(dwScopeId=SAFER_SCOPEID_USER, dwLevelId=SAFER_LEVELID_NORMALUSER, OpenFlags=0): _SaferCreateLevel = windll.advapi32.SaferCreateLevel _SaferCreateLevel.argtypes = [DWORD, DWORD, DWORD, POINTER(SAFER_LEVEL_HANDLE), LPVOID] - _SaferCreateLevel.restype = BOOL + _SaferCreateLevel.restype = BOOL _SaferCreateLevel.errcheck = RaiseIfZero hLevelHandle = SAFER_LEVEL_HANDLE(INVALID_HANDLE_VALUE) _SaferCreateLevel(dwScopeId, dwLevelId, OpenFlags, byref(hLevelHandle), None) return SaferLevelHandle(hLevelHandle.value) + # BOOL WINAPI SaferIdentifyLevel( # __in DWORD dwNumProperties, # __in_opt PSAFER_CODE_PROPERTIES pCodeProperties, @@ -1926,6 +2197,7 @@ def SaferCreateLevel(dwScopeId=SAFER_SCOPEID_USER, dwLevelId=SAFER_LEVELID_NORMA # XXX TODO + # BOOL WINAPI SaferComputeTokenFromLevel( # __in SAFER_LEVEL_HANDLE LevelHandle, # __in_opt HANDLE InAccessToken, @@ -1936,7 +2208,7 @@ def SaferCreateLevel(dwScopeId=SAFER_SCOPEID_USER, dwLevelId=SAFER_LEVELID_NORMA def SaferComputeTokenFromLevel(LevelHandle, InAccessToken=None, dwFlags=0): _SaferComputeTokenFromLevel = windll.advapi32.SaferComputeTokenFromLevel _SaferComputeTokenFromLevel.argtypes = [SAFER_LEVEL_HANDLE, HANDLE, PHANDLE, DWORD, LPDWORD] - _SaferComputeTokenFromLevel.restype = BOOL + _SaferComputeTokenFromLevel.restype = BOOL _SaferComputeTokenFromLevel.errcheck = RaiseIfZero OutAccessToken = HANDLE(INVALID_HANDLE_VALUE) @@ -1944,115 +2216,118 @@ def SaferComputeTokenFromLevel(LevelHandle, InAccessToken=None, dwFlags=0): _SaferComputeTokenFromLevel(LevelHandle, InAccessToken, byref(OutAccessToken), dwFlags, byref(lpReserved)) return TokenHandle(OutAccessToken.value), lpReserved.value + # BOOL WINAPI SaferCloseLevel( # __in SAFER_LEVEL_HANDLE hLevelHandle # ); def SaferCloseLevel(hLevelHandle): _SaferCloseLevel = windll.advapi32.SaferCloseLevel _SaferCloseLevel.argtypes = [SAFER_LEVEL_HANDLE] - _SaferCloseLevel.restype = BOOL + _SaferCloseLevel.restype = BOOL _SaferCloseLevel.errcheck = RaiseIfZero - if hasattr(hLevelHandle, 'value'): + if hasattr(hLevelHandle, "value"): _SaferCloseLevel(hLevelHandle.value) else: _SaferCloseLevel(hLevelHandle) + # BOOL SaferiIsExecutableFileType( # __in LPCWSTR szFullPath, # __in BOOLEAN bFromShellExecute # ); -def SaferiIsExecutableFileType(szFullPath, bFromShellExecute = False): +def SaferiIsExecutableFileType(szFullPath, bFromShellExecute=False): _SaferiIsExecutableFileType = windll.advapi32.SaferiIsExecutableFileType _SaferiIsExecutableFileType.argtypes = [LPWSTR, BOOLEAN] - _SaferiIsExecutableFileType.restype = BOOL + _SaferiIsExecutableFileType.restype = BOOL _SaferiIsExecutableFileType.errcheck = RaiseIfLastError SetLastError(ERROR_SUCCESS) return bool(_SaferiIsExecutableFileType(compat.unicode(szFullPath), bFromShellExecute)) + # useful alias since I'm likely to misspell it :P SaferIsExecutableFileType = SaferiIsExecutableFileType -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + # LONG WINAPI RegCloseKey( # __in HKEY hKey # ); def RegCloseKey(hKey): - if hasattr(hKey, 'value'): + if hasattr(hKey, "value"): value = hKey.value else: value = hKey - if value in ( - HKEY_CLASSES_ROOT, - HKEY_CURRENT_USER, - HKEY_LOCAL_MACHINE, - HKEY_USERS, - HKEY_PERFORMANCE_DATA, - HKEY_CURRENT_CONFIG - ): + if value in (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_PERFORMANCE_DATA, HKEY_CURRENT_CONFIG): return _RegCloseKey = windll.advapi32.RegCloseKey _RegCloseKey.argtypes = [HKEY] - _RegCloseKey.restype = LONG + _RegCloseKey.restype = LONG _RegCloseKey.errcheck = RaiseIfNotErrorSuccess _RegCloseKey(hKey) + # LONG WINAPI RegConnectRegistry( # __in_opt LPCTSTR lpMachineName, # __in HKEY hKey, # __out PHKEY phkResult # ); -def RegConnectRegistryA(lpMachineName = None, hKey = HKEY_LOCAL_MACHINE): +def RegConnectRegistryA(lpMachineName=None, hKey=HKEY_LOCAL_MACHINE): _RegConnectRegistryA = windll.advapi32.RegConnectRegistryA _RegConnectRegistryA.argtypes = [LPSTR, HKEY, PHKEY] - _RegConnectRegistryA.restype = LONG + _RegConnectRegistryA.restype = LONG _RegConnectRegistryA.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegConnectRegistryA(lpMachineName, hKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) -def RegConnectRegistryW(lpMachineName = None, hKey = HKEY_LOCAL_MACHINE): + +def RegConnectRegistryW(lpMachineName=None, hKey=HKEY_LOCAL_MACHINE): _RegConnectRegistryW = windll.advapi32.RegConnectRegistryW _RegConnectRegistryW.argtypes = [LPWSTR, HKEY, PHKEY] - _RegConnectRegistryW.restype = LONG + _RegConnectRegistryW.restype = LONG _RegConnectRegistryW.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegConnectRegistryW(lpMachineName, hKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + RegConnectRegistry = GuessStringType(RegConnectRegistryA, RegConnectRegistryW) + # LONG WINAPI RegCreateKey( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey, # __out PHKEY phkResult # ); -def RegCreateKeyA(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): +def RegCreateKeyA(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None): _RegCreateKeyA = windll.advapi32.RegCreateKeyA _RegCreateKeyA.argtypes = [HKEY, LPSTR, PHKEY] - _RegCreateKeyA.restype = LONG + _RegCreateKeyA.restype = LONG _RegCreateKeyA.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegCreateKeyA(hKey, lpSubKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) -def RegCreateKeyW(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): + +def RegCreateKeyW(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None): _RegCreateKeyW = windll.advapi32.RegCreateKeyW _RegCreateKeyW.argtypes = [HKEY, LPWSTR, PHKEY] - _RegCreateKeyW.restype = LONG + _RegCreateKeyW.restype = LONG _RegCreateKeyW.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegCreateKeyW(hKey, lpSubKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + RegCreateKey = GuessStringType(RegCreateKeyA, RegCreateKeyW) # LONG WINAPI RegCreateKeyEx( @@ -2069,33 +2344,37 @@ def RegCreateKeyW(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): # XXX TODO + # LONG WINAPI RegOpenKey( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey, # __out PHKEY phkResult # ); -def RegOpenKeyA(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): +def RegOpenKeyA(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None): _RegOpenKeyA = windll.advapi32.RegOpenKeyA _RegOpenKeyA.argtypes = [HKEY, LPSTR, PHKEY] - _RegOpenKeyA.restype = LONG + _RegOpenKeyA.restype = LONG _RegOpenKeyA.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenKeyA(hKey, lpSubKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) -def RegOpenKeyW(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): + +def RegOpenKeyW(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None): _RegOpenKeyW = windll.advapi32.RegOpenKeyW _RegOpenKeyW.argtypes = [HKEY, LPWSTR, PHKEY] - _RegOpenKeyW.restype = LONG + _RegOpenKeyW.restype = LONG _RegOpenKeyW.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenKeyW(hKey, lpSubKey, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + RegOpenKey = GuessStringType(RegOpenKeyA, RegOpenKeyW) + # LONG WINAPI RegOpenKeyEx( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey, @@ -2103,68 +2382,73 @@ def RegOpenKeyW(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None): # __in REGSAM samDesired, # __out PHKEY phkResult # ); -def RegOpenKeyExA(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None, samDesired = KEY_ALL_ACCESS): +def RegOpenKeyExA(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None, samDesired=KEY_ALL_ACCESS): _RegOpenKeyExA = windll.advapi32.RegOpenKeyExA _RegOpenKeyExA.argtypes = [HKEY, LPSTR, DWORD, REGSAM, PHKEY] - _RegOpenKeyExA.restype = LONG + _RegOpenKeyExA.restype = LONG _RegOpenKeyExA.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenKeyExA(hKey, lpSubKey, 0, samDesired, byref(hkResult)) return RegistryKeyHandle(hkResult.value) -def RegOpenKeyExW(hKey = HKEY_LOCAL_MACHINE, lpSubKey = None, samDesired = KEY_ALL_ACCESS): + +def RegOpenKeyExW(hKey=HKEY_LOCAL_MACHINE, lpSubKey=None, samDesired=KEY_ALL_ACCESS): _RegOpenKeyExW = windll.advapi32.RegOpenKeyExW _RegOpenKeyExW.argtypes = [HKEY, LPWSTR, DWORD, REGSAM, PHKEY] - _RegOpenKeyExW.restype = LONG + _RegOpenKeyExW.restype = LONG _RegOpenKeyExW.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenKeyExW(hKey, lpSubKey, 0, samDesired, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + RegOpenKeyEx = GuessStringType(RegOpenKeyExA, RegOpenKeyExW) + # LONG WINAPI RegOpenCurrentUser( # __in REGSAM samDesired, # __out PHKEY phkResult # ); -def RegOpenCurrentUser(samDesired = KEY_ALL_ACCESS): +def RegOpenCurrentUser(samDesired=KEY_ALL_ACCESS): _RegOpenCurrentUser = windll.advapi32.RegOpenCurrentUser _RegOpenCurrentUser.argtypes = [REGSAM, PHKEY] - _RegOpenCurrentUser.restype = LONG + _RegOpenCurrentUser.restype = LONG _RegOpenCurrentUser.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenCurrentUser(samDesired, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + # LONG WINAPI RegOpenUserClassesRoot( # __in HANDLE hToken, # __reserved DWORD dwOptions, # __in REGSAM samDesired, # __out PHKEY phkResult # ); -def RegOpenUserClassesRoot(hToken, samDesired = KEY_ALL_ACCESS): +def RegOpenUserClassesRoot(hToken, samDesired=KEY_ALL_ACCESS): _RegOpenUserClassesRoot = windll.advapi32.RegOpenUserClassesRoot _RegOpenUserClassesRoot.argtypes = [HANDLE, DWORD, REGSAM, PHKEY] - _RegOpenUserClassesRoot.restype = LONG + _RegOpenUserClassesRoot.restype = LONG _RegOpenUserClassesRoot.errcheck = RaiseIfNotErrorSuccess hkResult = HKEY(INVALID_HANDLE_VALUE) _RegOpenUserClassesRoot(hToken, 0, samDesired, byref(hkResult)) return RegistryKeyHandle(hkResult.value) + # LONG WINAPI RegQueryValue( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey, # __out_opt LPTSTR lpValue, # __inout_opt PLONG lpcbValue # ); -def RegQueryValueA(hKey, lpSubKey = None): +def RegQueryValueA(hKey, lpSubKey=None): _RegQueryValueA = windll.advapi32.RegQueryValueA _RegQueryValueA.argtypes = [HKEY, LPSTR, LPVOID, PLONG] - _RegQueryValueA.restype = LONG + _RegQueryValueA.restype = LONG _RegQueryValueA.errcheck = RaiseIfNotErrorSuccess cbValue = LONG(0) @@ -2173,10 +2457,11 @@ def RegQueryValueA(hKey, lpSubKey = None): _RegQueryValueA(hKey, lpSubKey, lpValue, byref(cbValue)) return lpValue.value -def RegQueryValueW(hKey, lpSubKey = None): + +def RegQueryValueW(hKey, lpSubKey=None): _RegQueryValueW = windll.advapi32.RegQueryValueW _RegQueryValueW.argtypes = [HKEY, LPWSTR, LPVOID, PLONG] - _RegQueryValueW.restype = LONG + _RegQueryValueW.restype = LONG _RegQueryValueW.errcheck = RaiseIfNotErrorSuccess cbValue = LONG(0) @@ -2185,8 +2470,10 @@ def RegQueryValueW(hKey, lpSubKey = None): _RegQueryValueW(hKey, lpSubKey, lpValue, byref(cbValue)) return lpValue.value + RegQueryValue = GuessStringType(RegQueryValueA, RegQueryValueW) + # LONG WINAPI RegQueryValueEx( # __in HKEY hKey, # __in_opt LPCTSTR lpValueName, @@ -2195,7 +2482,7 @@ def RegQueryValueW(hKey, lpSubKey = None): # __out_opt LPBYTE lpData, # __inout_opt LPDWORD lpcbData # ); -def _internal_RegQueryValueEx(ansi, hKey, lpValueName = None, bGetData = True): +def _internal_RegQueryValueEx(ansi, hKey, lpValueName=None, bGetData=True): _RegQueryValueEx = _caller_RegQueryValueEx(ansi) cbData = DWORD(0) @@ -2206,14 +2493,14 @@ def _internal_RegQueryValueEx(ansi, hKey, lpValueName = None, bGetData = True): if not bGetData: return cbData.value, Type - if Type in (REG_DWORD, REG_DWORD_BIG_ENDIAN): # REG_DWORD_LITTLE_ENDIAN + if Type in (REG_DWORD, REG_DWORD_BIG_ENDIAN): # REG_DWORD_LITTLE_ENDIAN if cbData.value != 4: raise ValueError("REG_DWORD value of size %d" % cbData.value) dwData = DWORD(0) _RegQueryValueEx(hKey, lpValueName, None, None, byref(dwData), byref(cbData)) return dwData.value, Type - if Type == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN + if Type == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN if cbData.value != 8: raise ValueError("REG_QWORD value of size %d" % cbData.value) qwData = QWORD(long(0)) @@ -2236,9 +2523,9 @@ def _internal_RegQueryValueEx(ansi, hKey, lpValueName = None, bGetData = True): _RegQueryValueEx(hKey, lpValueName, None, None, byref(szData), byref(cbData)) Data = szData[:] if ansi: - aData = Data.split('\0') + aData = Data.split("\0") else: - aData = Data.split(u'\0') + aData = Data.split("\0") aData = [token for token in aData if token] return aData, Type @@ -2252,6 +2539,7 @@ def _internal_RegQueryValueEx(ansi, hKey, lpValueName = None, bGetData = True): _RegQueryValueEx(hKey, lpValueName, None, None, byref(szData), byref(cbData)) return szData.raw, Type + def _caller_RegQueryValueEx(ansi): if ansi: _RegQueryValueEx = windll.advapi32.RegQueryValueExA @@ -2259,20 +2547,24 @@ def _caller_RegQueryValueEx(ansi): else: _RegQueryValueEx = windll.advapi32.RegQueryValueExW _RegQueryValueEx.argtypes = [HKEY, LPWSTR, LPVOID, PDWORD, LPVOID, PDWORD] - _RegQueryValueEx.restype = LONG + _RegQueryValueEx.restype = LONG _RegQueryValueEx.errcheck = RaiseIfNotErrorSuccess return _RegQueryValueEx + # see _internal_RegQueryValueEx -def RegQueryValueExA(hKey, lpValueName = None, bGetData = True): +def RegQueryValueExA(hKey, lpValueName=None, bGetData=True): return _internal_RegQueryValueEx(True, hKey, lpValueName, bGetData) + # see _internal_RegQueryValueEx -def RegQueryValueExW(hKey, lpValueName = None, bGetData = True): +def RegQueryValueExW(hKey, lpValueName=None, bGetData=True): return _internal_RegQueryValueEx(False, hKey, lpValueName, bGetData) + RegQueryValueEx = GuessStringType(RegQueryValueExA, RegQueryValueExW) + # LONG WINAPI RegSetValueEx( # __in HKEY hKey, # __in_opt LPCTSTR lpValueName, @@ -2281,8 +2573,7 @@ def RegQueryValueExW(hKey, lpValueName = None, bGetData = True): # __in_opt const BYTE *lpData, # __in DWORD cbData # ); -def RegSetValueEx(hKey, lpValueName = None, lpData = None, dwType = None): - +def RegSetValueEx(hKey, lpValueName=None, lpData=None, dwType=None): # Determine which version of the API to use, ANSI or Widechar. if lpValueName is None: if isinstance(lpData, GuessStringType.t_ansi): @@ -2290,7 +2581,7 @@ def RegSetValueEx(hKey, lpValueName = None, lpData = None, dwType = None): elif isinstance(lpData, GuessStringType.t_unicode): ansi = False else: - ansi = (GuessStringType.t_ansi == GuessStringType.t_default) + ansi = GuessStringType.t_ansi == GuessStringType.t_default elif isinstance(lpValueName, GuessStringType.t_ansi): ansi = True elif isinstance(lpValueName, GuessStringType.t_unicode): @@ -2323,17 +2614,17 @@ def RegSetValueEx(hKey, lpValueName = None, lpData = None, dwType = None): else: _RegSetValueEx = windll.advapi32.RegSetValueExW _RegSetValueEx.argtypes = [HKEY, LPWSTR, DWORD, DWORD, LPVOID, DWORD] - _RegSetValueEx.restype = LONG + _RegSetValueEx.restype = LONG _RegSetValueEx.errcheck = RaiseIfNotErrorSuccess # Convert the arguments so ctypes can understand them. if lpData is None: - DataRef = None + DataRef = None DataSize = 0 else: if dwType in (REG_DWORD, REG_DWORD_BIG_ENDIAN): # REG_DWORD_LITTLE_ENDIAN Data = DWORD(lpData) - elif dwType == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN + elif dwType == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN Data = QWORD(lpData) elif dwType in (REG_SZ, REG_EXPAND_SZ): if ansi: @@ -2342,22 +2633,24 @@ def RegSetValueEx(hKey, lpValueName = None, lpData = None, dwType = None): Data = ctypes.create_unicode_buffer(lpData) elif dwType == REG_MULTI_SZ: if ansi: - Data = ctypes.create_string_buffer('\0'.join(lpData) + '\0\0') + Data = ctypes.create_string_buffer("\0".join(lpData) + "\0\0") else: - Data = ctypes.create_unicode_buffer(u'\0'.join(lpData) + u'\0\0') + Data = ctypes.create_unicode_buffer("\0".join(lpData) + "\0\0") elif dwType == REG_LINK: Data = ctypes.create_unicode_buffer(lpData) else: Data = ctypes.create_string_buffer(lpData) - DataRef = byref(Data) + DataRef = byref(Data) DataSize = sizeof(Data) # Call the API with the converted arguments. _RegSetValueEx(hKey, lpValueName, 0, dwType, DataRef, DataSize) + # No "GuessStringType" here since detection is done inside. RegSetValueExA = RegSetValueExW = RegSetValueEx + # LONG WINAPI RegEnumKey( # __in HKEY hKey, # __in DWORD dwIndex, @@ -2367,7 +2660,7 @@ def RegSetValueEx(hKey, lpValueName = None, lpData = None, dwType = None): def RegEnumKeyA(hKey, dwIndex): _RegEnumKeyA = windll.advapi32.RegEnumKeyA _RegEnumKeyA.argtypes = [HKEY, DWORD, LPSTR, DWORD] - _RegEnumKeyA.restype = LONG + _RegEnumKeyA.restype = LONG cchName = 1024 while True: @@ -2384,10 +2677,11 @@ def RegEnumKeyA(hKey, dwIndex): raise ctypes.WinError(errcode) return lpName.value + def RegEnumKeyW(hKey, dwIndex): _RegEnumKeyW = windll.advapi32.RegEnumKeyW _RegEnumKeyW.argtypes = [HKEY, DWORD, LPWSTR, DWORD] - _RegEnumKeyW.restype = LONG + _RegEnumKeyW.restype = LONG cchName = 512 while True: @@ -2404,6 +2698,7 @@ def RegEnumKeyW(hKey, dwIndex): raise ctypes.WinError(errcode) return lpName.value + RegEnumKey = DefaultStringType(RegEnumKeyA, RegEnumKeyW) # LONG WINAPI RegEnumKeyEx( @@ -2419,6 +2714,7 @@ def RegEnumKeyW(hKey, dwIndex): # XXX TODO + # LONG WINAPI RegEnumValue( # __in HKEY hKey, # __in DWORD dwIndex, @@ -2429,14 +2725,14 @@ def RegEnumKeyW(hKey, dwIndex): # __out_opt LPBYTE lpData, # __inout_opt LPDWORD lpcbData # ); -def _internal_RegEnumValue(ansi, hKey, dwIndex, bGetData = True): +def _internal_RegEnumValue(ansi, hKey, dwIndex, bGetData=True): if ansi: _RegEnumValue = windll.advapi32.RegEnumValueA _RegEnumValue.argtypes = [HKEY, DWORD, LPSTR, LPDWORD, LPVOID, LPDWORD, LPVOID, LPDWORD] else: _RegEnumValue = windll.advapi32.RegEnumValueW _RegEnumValue.argtypes = [HKEY, DWORD, LPWSTR, LPDWORD, LPVOID, LPDWORD, LPVOID, LPDWORD] - _RegEnumValue.restype = LONG + _RegEnumValue.restype = LONG cchValueName = DWORD(1024) dwType = DWORD(-1) @@ -2465,12 +2761,12 @@ def _internal_RegEnumValue(ansi, hKey, dwIndex, bGetData = True): if bGetData: Type = dwType.value - if Type in (REG_DWORD, REG_DWORD_BIG_ENDIAN): # REG_DWORD_LITTLE_ENDIAN + if Type in (REG_DWORD, REG_DWORD_BIG_ENDIAN): # REG_DWORD_LITTLE_ENDIAN if cbData.value != sizeof(DWORD): raise ValueError("REG_DWORD value of size %d" % cbData.value) Data = DWORD(0) - elif Type == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN + elif Type == REG_QWORD: # REG_QWORD_LITTLE_ENDIAN if cbData.value != sizeof(QWORD): raise ValueError("REG_QWORD value of size %d" % cbData.value) Data = QWORD(long(0)) @@ -2484,7 +2780,7 @@ def _internal_RegEnumValue(ansi, hKey, dwIndex, bGetData = True): elif Type == REG_LINK: Data = ctypes.create_unicode_buffer(cbData.value) - else: # REG_BINARY, REG_NONE, and any future types + else: # REG_BINARY, REG_NONE, and any future types Data = ctypes.create_string_buffer(cbData.value) lpData = byref(Data) @@ -2493,34 +2789,44 @@ def _internal_RegEnumValue(ansi, hKey, dwIndex, bGetData = True): if errcode == ERROR_NO_MORE_ITEMS: return None - #if errcode != ERROR_SUCCESS: + # if errcode != ERROR_SUCCESS: # raise ctypes.WinError(errcode) if not bGetData: return lpValueName.value, dwType.value - if Type in (REG_DWORD, REG_DWORD_BIG_ENDIAN, REG_QWORD, REG_SZ, REG_EXPAND_SZ, REG_LINK): # REG_DWORD_LITTLE_ENDIAN, REG_QWORD_LITTLE_ENDIAN + if Type in ( + REG_DWORD, + REG_DWORD_BIG_ENDIAN, + REG_QWORD, + REG_SZ, + REG_EXPAND_SZ, + REG_LINK, + ): # REG_DWORD_LITTLE_ENDIAN, REG_QWORD_LITTLE_ENDIAN return lpValueName.value, dwType.value, Data.value if Type == REG_MULTI_SZ: sData = Data[:] del Data if ansi: - aData = sData.split('\0') + aData = sData.split("\0") else: - aData = sData.split(u'\0') + aData = sData.split("\0") aData = [token for token in aData if token] return lpValueName.value, dwType.value, aData # REG_BINARY, REG_NONE, and any future types return lpValueName.value, dwType.value, Data.raw -def RegEnumValueA(hKey, dwIndex, bGetData = True): + +def RegEnumValueA(hKey, dwIndex, bGetData=True): return _internal_RegEnumValue(True, hKey, dwIndex, bGetData) -def RegEnumValueW(hKey, dwIndex, bGetData = True): + +def RegEnumValueW(hKey, dwIndex, bGetData=True): return _internal_RegEnumValue(False, hKey, dwIndex, bGetData) + RegEnumValue = DefaultStringType(RegEnumValueA, RegEnumValueW) # XXX TODO @@ -2546,59 +2852,74 @@ def RegEnumValueW(hKey, dwIndex, bGetData = True): # XXX TODO + # LONG WINAPI RegDeleteValue( # __in HKEY hKey, # __in_opt LPCTSTR lpValueName # ); -def RegDeleteValueA(hKeySrc, lpValueName = None): +def RegDeleteValueA(hKeySrc, lpValueName=None): _RegDeleteValueA = windll.advapi32.RegDeleteValueA _RegDeleteValueA.argtypes = [HKEY, LPSTR] - _RegDeleteValueA.restype = LONG + _RegDeleteValueA.restype = LONG _RegDeleteValueA.errcheck = RaiseIfNotErrorSuccess _RegDeleteValueA(hKeySrc, lpValueName) -def RegDeleteValueW(hKeySrc, lpValueName = None): + + +def RegDeleteValueW(hKeySrc, lpValueName=None): _RegDeleteValueW = windll.advapi32.RegDeleteValueW _RegDeleteValueW.argtypes = [HKEY, LPWSTR] - _RegDeleteValueW.restype = LONG + _RegDeleteValueW.restype = LONG _RegDeleteValueW.errcheck = RaiseIfNotErrorSuccess _RegDeleteValueW(hKeySrc, lpValueName) + + RegDeleteValue = GuessStringType(RegDeleteValueA, RegDeleteValueW) + # LONG WINAPI RegDeleteKeyValue( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey, # __in_opt LPCTSTR lpValueName # ); -def RegDeleteKeyValueA(hKeySrc, lpSubKey = None, lpValueName = None): +def RegDeleteKeyValueA(hKeySrc, lpSubKey=None, lpValueName=None): _RegDeleteKeyValueA = windll.advapi32.RegDeleteKeyValueA _RegDeleteKeyValueA.argtypes = [HKEY, LPSTR, LPSTR] - _RegDeleteKeyValueA.restype = LONG + _RegDeleteKeyValueA.restype = LONG _RegDeleteKeyValueA.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyValueA(hKeySrc, lpSubKey, lpValueName) -def RegDeleteKeyValueW(hKeySrc, lpSubKey = None, lpValueName = None): + + +def RegDeleteKeyValueW(hKeySrc, lpSubKey=None, lpValueName=None): _RegDeleteKeyValueW = windll.advapi32.RegDeleteKeyValueW _RegDeleteKeyValueW.argtypes = [HKEY, LPWSTR, LPWSTR] - _RegDeleteKeyValueW.restype = LONG + _RegDeleteKeyValueW.restype = LONG _RegDeleteKeyValueW.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyValueW(hKeySrc, lpSubKey, lpValueName) + + RegDeleteKeyValue = GuessStringType(RegDeleteKeyValueA, RegDeleteKeyValueW) + # LONG WINAPI RegDeleteKey( # __in HKEY hKey, # __in LPCTSTR lpSubKey # ); -def RegDeleteKeyA(hKeySrc, lpSubKey = None): +def RegDeleteKeyA(hKeySrc, lpSubKey=None): _RegDeleteKeyA = windll.advapi32.RegDeleteKeyA _RegDeleteKeyA.argtypes = [HKEY, LPSTR] - _RegDeleteKeyA.restype = LONG + _RegDeleteKeyA.restype = LONG _RegDeleteKeyA.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyA(hKeySrc, lpSubKey) -def RegDeleteKeyW(hKeySrc, lpSubKey = None): + + +def RegDeleteKeyW(hKeySrc, lpSubKey=None): _RegDeleteKeyW = windll.advapi32.RegDeleteKeyW _RegDeleteKeyW.argtypes = [HKEY, LPWSTR] - _RegDeleteKeyW.restype = LONG + _RegDeleteKeyW.restype = LONG _RegDeleteKeyW.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyW(hKeySrc, lpSubKey) + + RegDeleteKey = GuessStringType(RegDeleteKeyA, RegDeleteKeyW) # LONG WINAPI RegDeleteKeyEx( @@ -2608,20 +2929,26 @@ def RegDeleteKeyW(hKeySrc, lpSubKey = None): # __reserved DWORD Reserved # ); -def RegDeleteKeyExA(hKeySrc, lpSubKey = None, samDesired = KEY_WOW64_32KEY): + +def RegDeleteKeyExA(hKeySrc, lpSubKey=None, samDesired=KEY_WOW64_32KEY): _RegDeleteKeyExA = windll.advapi32.RegDeleteKeyExA _RegDeleteKeyExA.argtypes = [HKEY, LPSTR, REGSAM, DWORD] - _RegDeleteKeyExA.restype = LONG + _RegDeleteKeyExA.restype = LONG _RegDeleteKeyExA.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyExA(hKeySrc, lpSubKey, samDesired, 0) -def RegDeleteKeyExW(hKeySrc, lpSubKey = None, samDesired = KEY_WOW64_32KEY): + + +def RegDeleteKeyExW(hKeySrc, lpSubKey=None, samDesired=KEY_WOW64_32KEY): _RegDeleteKeyExW = windll.advapi32.RegDeleteKeyExW _RegDeleteKeyExW.argtypes = [HKEY, LPWSTR, REGSAM, DWORD] - _RegDeleteKeyExW.restype = LONG + _RegDeleteKeyExW.restype = LONG _RegDeleteKeyExW.errcheck = RaiseIfNotErrorSuccess _RegDeleteKeyExW(hKeySrc, lpSubKey, samDesired, 0) + + RegDeleteKeyEx = GuessStringType(RegDeleteKeyExA, RegDeleteKeyExW) + # LONG WINAPI RegCopyTree( # __in HKEY hKeySrc, # __in_opt LPCTSTR lpSubKey, @@ -2630,45 +2957,56 @@ def RegDeleteKeyExW(hKeySrc, lpSubKey = None, samDesired = KEY_WOW64_32KEY): def RegCopyTreeA(hKeySrc, lpSubKey, hKeyDest): _RegCopyTreeA = windll.advapi32.RegCopyTreeA _RegCopyTreeA.argtypes = [HKEY, LPSTR, HKEY] - _RegCopyTreeA.restype = LONG + _RegCopyTreeA.restype = LONG _RegCopyTreeA.errcheck = RaiseIfNotErrorSuccess _RegCopyTreeA(hKeySrc, lpSubKey, hKeyDest) + + def RegCopyTreeW(hKeySrc, lpSubKey, hKeyDest): _RegCopyTreeW = windll.advapi32.RegCopyTreeW _RegCopyTreeW.argtypes = [HKEY, LPWSTR, HKEY] - _RegCopyTreeW.restype = LONG + _RegCopyTreeW.restype = LONG _RegCopyTreeW.errcheck = RaiseIfNotErrorSuccess _RegCopyTreeW(hKeySrc, lpSubKey, hKeyDest) + + RegCopyTree = GuessStringType(RegCopyTreeA, RegCopyTreeW) + # LONG WINAPI RegDeleteTree( # __in HKEY hKey, # __in_opt LPCTSTR lpSubKey # ); -def RegDeleteTreeA(hKey, lpSubKey = None): +def RegDeleteTreeA(hKey, lpSubKey=None): _RegDeleteTreeA = windll.advapi32.RegDeleteTreeA _RegDeleteTreeA.argtypes = [HKEY, LPWSTR] - _RegDeleteTreeA.restype = LONG + _RegDeleteTreeA.restype = LONG _RegDeleteTreeA.errcheck = RaiseIfNotErrorSuccess _RegDeleteTreeA(hKey, lpSubKey) -def RegDeleteTreeW(hKey, lpSubKey = None): + + +def RegDeleteTreeW(hKey, lpSubKey=None): _RegDeleteTreeW = windll.advapi32.RegDeleteTreeW _RegDeleteTreeW.argtypes = [HKEY, LPWSTR] - _RegDeleteTreeW.restype = LONG + _RegDeleteTreeW.restype = LONG _RegDeleteTreeW.errcheck = RaiseIfNotErrorSuccess _RegDeleteTreeW(hKey, lpSubKey) + + RegDeleteTree = GuessStringType(RegDeleteTreeA, RegDeleteTreeW) + # LONG WINAPI RegFlushKey( # __in HKEY hKey # ); def RegFlushKey(hKey): _RegFlushKey = windll.advapi32.RegFlushKey _RegFlushKey.argtypes = [HKEY] - _RegFlushKey.restype = LONG + _RegFlushKey.restype = LONG _RegFlushKey.errcheck = RaiseIfNotErrorSuccess _RegFlushKey(hKey) + # LONG WINAPI RegLoadMUIString( # _In_ HKEY hKey, # _In_opt_ LPCTSTR pszValue, @@ -2681,7 +3019,8 @@ def RegFlushKey(hKey): # TO DO -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + # BOOL WINAPI CloseServiceHandle( # _In_ SC_HANDLE hSCObject @@ -2689,7 +3028,7 @@ def RegFlushKey(hKey): def CloseServiceHandle(hSCObject): _CloseServiceHandle = windll.advapi32.CloseServiceHandle _CloseServiceHandle.argtypes = [SC_HANDLE] - _CloseServiceHandle.restype = bool + _CloseServiceHandle.restype = bool _CloseServiceHandle.errcheck = RaiseIfZero if isinstance(hSCObject, Handle): @@ -2698,52 +3037,59 @@ def CloseServiceHandle(hSCObject): else: _CloseServiceHandle(hSCObject) + # SC_HANDLE WINAPI OpenSCManager( # _In_opt_ LPCTSTR lpMachineName, # _In_opt_ LPCTSTR lpDatabaseName, # _In_ DWORD dwDesiredAccess # ); -def OpenSCManagerA(lpMachineName = None, lpDatabaseName = None, dwDesiredAccess = SC_MANAGER_ALL_ACCESS): +def OpenSCManagerA(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS): _OpenSCManagerA = windll.advapi32.OpenSCManagerA _OpenSCManagerA.argtypes = [LPSTR, LPSTR, DWORD] - _OpenSCManagerA.restype = SC_HANDLE + _OpenSCManagerA.restype = SC_HANDLE _OpenSCManagerA.errcheck = RaiseIfZero hSCObject = _OpenSCManagerA(lpMachineName, lpDatabaseName, dwDesiredAccess) return ServiceControlManagerHandle(hSCObject) -def OpenSCManagerW(lpMachineName = None, lpDatabaseName = None, dwDesiredAccess = SC_MANAGER_ALL_ACCESS): + +def OpenSCManagerW(lpMachineName=None, lpDatabaseName=None, dwDesiredAccess=SC_MANAGER_ALL_ACCESS): _OpenSCManagerW = windll.advapi32.OpenSCManagerW _OpenSCManagerW.argtypes = [LPWSTR, LPWSTR, DWORD] - _OpenSCManagerW.restype = SC_HANDLE + _OpenSCManagerW.restype = SC_HANDLE _OpenSCManagerW.errcheck = RaiseIfZero hSCObject = _OpenSCManagerA(lpMachineName, lpDatabaseName, dwDesiredAccess) return ServiceControlManagerHandle(hSCObject) + OpenSCManager = GuessStringType(OpenSCManagerA, OpenSCManagerW) + # SC_HANDLE WINAPI OpenService( # _In_ SC_HANDLE hSCManager, # _In_ LPCTSTR lpServiceName, # _In_ DWORD dwDesiredAccess # ); -def OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess = SERVICE_ALL_ACCESS): +def OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess=SERVICE_ALL_ACCESS): _OpenServiceA = windll.advapi32.OpenServiceA _OpenServiceA.argtypes = [SC_HANDLE, LPSTR, DWORD] - _OpenServiceA.restype = SC_HANDLE + _OpenServiceA.restype = SC_HANDLE _OpenServiceA.errcheck = RaiseIfZero - return ServiceHandle( _OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess) ) + return ServiceHandle(_OpenServiceA(hSCManager, lpServiceName, dwDesiredAccess)) -def OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess = SERVICE_ALL_ACCESS): + +def OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess=SERVICE_ALL_ACCESS): _OpenServiceW = windll.advapi32.OpenServiceW _OpenServiceW.argtypes = [SC_HANDLE, LPWSTR, DWORD] - _OpenServiceW.restype = SC_HANDLE + _OpenServiceW.restype = SC_HANDLE _OpenServiceW.errcheck = RaiseIfZero - return ServiceHandle( _OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess) ) + return ServiceHandle(_OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess)) + OpenService = GuessStringType(OpenServiceA, OpenServiceW) + # SC_HANDLE WINAPI CreateService( # _In_ SC_HANDLE hSCManager, # _In_ LPCTSTR lpServiceName, @@ -2759,60 +3105,94 @@ def OpenServiceW(hSCManager, lpServiceName, dwDesiredAccess = SERVICE_ALL_ACCESS # _In_opt_ LPCTSTR lpServiceStartName, # _In_opt_ LPCTSTR lpPassword # ); -def CreateServiceA(hSCManager, lpServiceName, - lpDisplayName = None, - dwDesiredAccess = SERVICE_ALL_ACCESS, - dwServiceType = SERVICE_WIN32_OWN_PROCESS, - dwStartType = SERVICE_DEMAND_START, - dwErrorControl = SERVICE_ERROR_NORMAL, - lpBinaryPathName = None, - lpLoadOrderGroup = None, - lpDependencies = None, - lpServiceStartName = None, - lpPassword = None): - +def CreateServiceA( + hSCManager, + lpServiceName, + lpDisplayName=None, + dwDesiredAccess=SERVICE_ALL_ACCESS, + dwServiceType=SERVICE_WIN32_OWN_PROCESS, + dwStartType=SERVICE_DEMAND_START, + dwErrorControl=SERVICE_ERROR_NORMAL, + lpBinaryPathName=None, + lpLoadOrderGroup=None, + lpDependencies=None, + lpServiceStartName=None, + lpPassword=None, +): _CreateServiceA = windll.advapi32.CreateServiceA _CreateServiceA.argtypes = [SC_HANDLE, LPSTR, LPSTR, DWORD, DWORD, DWORD, DWORD, LPSTR, LPSTR, LPDWORD, LPSTR, LPSTR, LPSTR] - _CreateServiceA.restype = SC_HANDLE + _CreateServiceA.restype = SC_HANDLE _CreateServiceA.errcheck = RaiseIfZero dwTagId = DWORD(0) - hService = _CreateServiceA(hSCManager, lpServiceName, dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl, lpBinaryPathName, lpLoadOrderGroup, byref(dwTagId), lpDependencies, lpServiceStartName, lpPassword) + hService = _CreateServiceA( + hSCManager, + lpServiceName, + dwDesiredAccess, + dwServiceType, + dwStartType, + dwErrorControl, + lpBinaryPathName, + lpLoadOrderGroup, + byref(dwTagId), + lpDependencies, + lpServiceStartName, + lpPassword, + ) return ServiceHandle(hService), dwTagId.value -def CreateServiceW(hSCManager, lpServiceName, - lpDisplayName = None, - dwDesiredAccess = SERVICE_ALL_ACCESS, - dwServiceType = SERVICE_WIN32_OWN_PROCESS, - dwStartType = SERVICE_DEMAND_START, - dwErrorControl = SERVICE_ERROR_NORMAL, - lpBinaryPathName = None, - lpLoadOrderGroup = None, - lpDependencies = None, - lpServiceStartName = None, - lpPassword = None): +def CreateServiceW( + hSCManager, + lpServiceName, + lpDisplayName=None, + dwDesiredAccess=SERVICE_ALL_ACCESS, + dwServiceType=SERVICE_WIN32_OWN_PROCESS, + dwStartType=SERVICE_DEMAND_START, + dwErrorControl=SERVICE_ERROR_NORMAL, + lpBinaryPathName=None, + lpLoadOrderGroup=None, + lpDependencies=None, + lpServiceStartName=None, + lpPassword=None, +): _CreateServiceW = windll.advapi32.CreateServiceW _CreateServiceW.argtypes = [SC_HANDLE, LPWSTR, LPWSTR, DWORD, DWORD, DWORD, DWORD, LPWSTR, LPWSTR, LPDWORD, LPWSTR, LPWSTR, LPWSTR] - _CreateServiceW.restype = SC_HANDLE + _CreateServiceW.restype = SC_HANDLE _CreateServiceW.errcheck = RaiseIfZero dwTagId = DWORD(0) - hService = _CreateServiceW(hSCManager, lpServiceName, dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl, lpBinaryPathName, lpLoadOrderGroup, byref(dwTagId), lpDependencies, lpServiceStartName, lpPassword) + hService = _CreateServiceW( + hSCManager, + lpServiceName, + dwDesiredAccess, + dwServiceType, + dwStartType, + dwErrorControl, + lpBinaryPathName, + lpLoadOrderGroup, + byref(dwTagId), + lpDependencies, + lpServiceStartName, + lpPassword, + ) return ServiceHandle(hService), dwTagId.value + CreateService = GuessStringType(CreateServiceA, CreateServiceW) + # BOOL WINAPI DeleteService( # _In_ SC_HANDLE hService # ); def DeleteService(hService): _DeleteService = windll.advapi32.DeleteService _DeleteService.argtypes = [SC_HANDLE] - _DeleteService.restype = bool + _DeleteService.restype = bool _DeleteService.errcheck = RaiseIfZero _DeleteService(hService) + # BOOL WINAPI GetServiceKeyName( # _In_ SC_HANDLE hSCManager, # _In_ LPCTSTR lpDisplayName, @@ -2822,7 +3202,7 @@ def DeleteService(hService): def GetServiceKeyNameA(hSCManager, lpDisplayName): _GetServiceKeyNameA = windll.advapi32.GetServiceKeyNameA _GetServiceKeyNameA.argtypes = [SC_HANDLE, LPSTR, LPSTR, LPDWORD] - _GetServiceKeyNameA.restype = bool + _GetServiceKeyNameA.restype = bool cchBuffer = DWORD(0) _GetServiceKeyNameA(hSCManager, lpDisplayName, None, byref(cchBuffer)) @@ -2835,10 +3215,11 @@ def GetServiceKeyNameA(hSCManager, lpDisplayName): raise ctypes.WinError() return lpServiceName.value + def GetServiceKeyNameW(hSCManager, lpDisplayName): _GetServiceKeyNameW = windll.advapi32.GetServiceKeyNameW _GetServiceKeyNameW.argtypes = [SC_HANDLE, LPWSTR, LPWSTR, LPDWORD] - _GetServiceKeyNameW.restype = bool + _GetServiceKeyNameW.restype = bool cchBuffer = DWORD(0) _GetServiceKeyNameW(hSCManager, lpDisplayName, None, byref(cchBuffer)) @@ -2851,8 +3232,10 @@ def GetServiceKeyNameW(hSCManager, lpDisplayName): raise ctypes.WinError() return lpServiceName.value + GetServiceKeyName = GuessStringType(GetServiceKeyNameA, GetServiceKeyNameW) + # BOOL WINAPI GetServiceDisplayName( # _In_ SC_HANDLE hSCManager, # _In_ LPCTSTR lpServiceName, @@ -2862,7 +3245,7 @@ def GetServiceKeyNameW(hSCManager, lpDisplayName): def GetServiceDisplayNameA(hSCManager, lpServiceName): _GetServiceDisplayNameA = windll.advapi32.GetServiceDisplayNameA _GetServiceDisplayNameA.argtypes = [SC_HANDLE, LPSTR, LPSTR, LPDWORD] - _GetServiceDisplayNameA.restype = bool + _GetServiceDisplayNameA.restype = bool cchBuffer = DWORD(0) _GetServiceDisplayNameA(hSCManager, lpServiceName, None, byref(cchBuffer)) @@ -2875,10 +3258,11 @@ def GetServiceDisplayNameA(hSCManager, lpServiceName): raise ctypes.WinError() return lpDisplayName.value + def GetServiceDisplayNameW(hSCManager, lpServiceName): _GetServiceDisplayNameW = windll.advapi32.GetServiceDisplayNameW _GetServiceDisplayNameW.argtypes = [SC_HANDLE, LPWSTR, LPWSTR, LPDWORD] - _GetServiceDisplayNameW.restype = bool + _GetServiceDisplayNameW.restype = bool cchBuffer = DWORD(0) _GetServiceDisplayNameW(hSCManager, lpServiceName, None, byref(cchBuffer)) @@ -2891,6 +3275,7 @@ def GetServiceDisplayNameW(hSCManager, lpServiceName): raise ctypes.WinError() return lpDisplayName.value + GetServiceDisplayName = GuessStringType(GetServiceDisplayNameA, GetServiceDisplayNameW) # BOOL WINAPI QueryServiceConfig( @@ -2936,15 +3321,16 @@ def GetServiceDisplayNameW(hSCManager, lpServiceName): # TO DO + # BOOL WINAPI StartService( # _In_ SC_HANDLE hService, # _In_ DWORD dwNumServiceArgs, # _In_opt_ LPCTSTR *lpServiceArgVectors # ); -def StartServiceA(hService, ServiceArgVectors = None): +def StartServiceA(hService, ServiceArgVectors=None): _StartServiceA = windll.advapi32.StartServiceA _StartServiceA.argtypes = [SC_HANDLE, DWORD, LPVOID] - _StartServiceA.restype = bool + _StartServiceA.restype = bool _StartServiceA.errcheck = RaiseIfZero if ServiceArgVectors: @@ -2956,10 +3342,11 @@ def StartServiceA(hService, ServiceArgVectors = None): lpServiceArgVectors = None _StartServiceA(hService, dwNumServiceArgs, lpServiceArgVectors) -def StartServiceW(hService, ServiceArgVectors = None): + +def StartServiceW(hService, ServiceArgVectors=None): _StartServiceW = windll.advapi32.StartServiceW _StartServiceW.argtypes = [SC_HANDLE, DWORD, LPVOID] - _StartServiceW.restype = bool + _StartServiceW.restype = bool _StartServiceW.errcheck = RaiseIfZero if ServiceArgVectors: @@ -2971,8 +3358,10 @@ def StartServiceW(hService, ServiceArgVectors = None): lpServiceArgVectors = None _StartServiceW(hService, dwNumServiceArgs, lpServiceArgVectors) + StartService = GuessStringType(StartServiceA, StartServiceW) + # BOOL WINAPI ControlService( # _In_ SC_HANDLE hService, # _In_ DWORD dwControl, @@ -2981,13 +3370,14 @@ def StartServiceW(hService, ServiceArgVectors = None): def ControlService(hService, dwControl): _ControlService = windll.advapi32.ControlService _ControlService.argtypes = [SC_HANDLE, DWORD, LPSERVICE_STATUS] - _ControlService.restype = bool + _ControlService.restype = bool _ControlService.errcheck = RaiseIfZero rawServiceStatus = SERVICE_STATUS() _ControlService(hService, dwControl, byref(rawServiceStatus)) return ServiceStatus(rawServiceStatus) + # BOOL WINAPI ControlServiceEx( # _In_ SC_HANDLE hService, # _In_ DWORD dwControl, @@ -3005,6 +3395,7 @@ def ControlService(hService, dwControl): # TO DO + # BOOL WINAPI QueryServiceStatus( # _In_ SC_HANDLE hService, # _Out_ LPSERVICE_STATUS lpServiceStatus @@ -3012,13 +3403,14 @@ def ControlService(hService, dwControl): def QueryServiceStatus(hService): _QueryServiceStatus = windll.advapi32.QueryServiceStatus _QueryServiceStatus.argtypes = [SC_HANDLE, LPSERVICE_STATUS] - _QueryServiceStatus.restype = bool + _QueryServiceStatus.restype = bool _QueryServiceStatus.errcheck = RaiseIfZero rawServiceStatus = SERVICE_STATUS() _QueryServiceStatus(hService, byref(rawServiceStatus)) return ServiceStatus(rawServiceStatus) + # BOOL WINAPI QueryServiceStatusEx( # _In_ SC_HANDLE hService, # _In_ SC_STATUS_TYPE InfoLevel, @@ -3026,14 +3418,13 @@ def QueryServiceStatus(hService): # _In_ DWORD cbBufSize, # _Out_ LPDWORD pcbBytesNeeded # ); -def QueryServiceStatusEx(hService, InfoLevel = SC_STATUS_PROCESS_INFO): - +def QueryServiceStatusEx(hService, InfoLevel=SC_STATUS_PROCESS_INFO): if InfoLevel != SC_STATUS_PROCESS_INFO: raise NotImplementedError() _QueryServiceStatusEx = windll.advapi32.QueryServiceStatusEx _QueryServiceStatusEx.argtypes = [SC_HANDLE, SC_STATUS_TYPE, LPVOID, DWORD, LPDWORD] - _QueryServiceStatusEx.restype = bool + _QueryServiceStatusEx.restype = bool _QueryServiceStatusEx.errcheck = RaiseIfZero lpBuffer = SERVICE_STATUS_PROCESS() @@ -3041,6 +3432,7 @@ def QueryServiceStatusEx(hService, InfoLevel = SC_STATUS_PROCESS_INFO): _QueryServiceStatusEx(hService, InfoLevel, byref(lpBuffer), sizeof(lpBuffer), byref(cbBytesNeeded)) return ServiceStatusProcess(lpBuffer) + # BOOL WINAPI EnumServicesStatus( # _In_ SC_HANDLE hSCManager, # _In_ DWORD dwServiceType, @@ -3051,16 +3443,18 @@ def QueryServiceStatusEx(hService, InfoLevel = SC_STATUS_PROCESS_INFO): # _Out_ LPDWORD lpServicesReturned, # _Inout_opt_ LPDWORD lpResumeHandle # ); -def EnumServicesStatusA(hSCManager, dwServiceType = SERVICE_DRIVER | SERVICE_WIN32, dwServiceState = SERVICE_STATE_ALL): +def EnumServicesStatusA(hSCManager, dwServiceType=SERVICE_DRIVER | SERVICE_WIN32, dwServiceState=SERVICE_STATE_ALL): _EnumServicesStatusA = windll.advapi32.EnumServicesStatusA _EnumServicesStatusA.argtypes = [SC_HANDLE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD, LPDWORD] - _EnumServicesStatusA.restype = bool + _EnumServicesStatusA.restype = bool - cbBytesNeeded = DWORD(0) + cbBytesNeeded = DWORD(0) ServicesReturned = DWORD(0) - ResumeHandle = DWORD(0) + ResumeHandle = DWORD(0) - _EnumServicesStatusA(hSCManager, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle)) + _EnumServicesStatusA( + hSCManager, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle) + ) Services = [] success = False @@ -3068,28 +3462,41 @@ def EnumServicesStatusA(hSCManager, dwServiceType = SERVICE_DRIVER | SERVICE_WIN if cbBytesNeeded.value < sizeof(ENUM_SERVICE_STATUSA): break ServicesBuffer = ctypes.create_string_buffer("", cbBytesNeeded.value) - success = _EnumServicesStatusA(hSCManager, dwServiceType, dwServiceState, byref(ServicesBuffer), sizeof(ServicesBuffer), byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle)) + success = _EnumServicesStatusA( + hSCManager, + dwServiceType, + dwServiceState, + byref(ServicesBuffer), + sizeof(ServicesBuffer), + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + ) if sizeof(ServicesBuffer) < (sizeof(ENUM_SERVICE_STATUSA) * ServicesReturned.value): raise ctypes.WinError() lpServicesArray = ctypes.cast(ctypes.cast(ctypes.pointer(ServicesBuffer), ctypes.c_void_p), LPENUM_SERVICE_STATUSA) for index in compat.xrange(0, ServicesReturned.value): - Services.append( ServiceStatusEntry(lpServicesArray[index]) ) - if success: break + Services.append(ServiceStatusEntry(lpServicesArray[index])) + if success: + break if not success: raise ctypes.WinError() return Services -def EnumServicesStatusW(hSCManager, dwServiceType = SERVICE_DRIVER | SERVICE_WIN32, dwServiceState = SERVICE_STATE_ALL): + +def EnumServicesStatusW(hSCManager, dwServiceType=SERVICE_DRIVER | SERVICE_WIN32, dwServiceState=SERVICE_STATE_ALL): _EnumServicesStatusW = windll.advapi32.EnumServicesStatusW _EnumServicesStatusW.argtypes = [SC_HANDLE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD, LPDWORD] - _EnumServicesStatusW.restype = bool + _EnumServicesStatusW.restype = bool - cbBytesNeeded = DWORD(0) + cbBytesNeeded = DWORD(0) ServicesReturned = DWORD(0) - ResumeHandle = DWORD(0) + ResumeHandle = DWORD(0) - _EnumServicesStatusW(hSCManager, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle)) + _EnumServicesStatusW( + hSCManager, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle) + ) Services = [] success = False @@ -3097,20 +3504,32 @@ def EnumServicesStatusW(hSCManager, dwServiceType = SERVICE_DRIVER | SERVICE_WIN if cbBytesNeeded.value < sizeof(ENUM_SERVICE_STATUSW): break ServicesBuffer = ctypes.create_string_buffer("", cbBytesNeeded.value) - success = _EnumServicesStatusW(hSCManager, dwServiceType, dwServiceState, byref(ServicesBuffer), sizeof(ServicesBuffer), byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle)) + success = _EnumServicesStatusW( + hSCManager, + dwServiceType, + dwServiceState, + byref(ServicesBuffer), + sizeof(ServicesBuffer), + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + ) if sizeof(ServicesBuffer) < (sizeof(ENUM_SERVICE_STATUSW) * ServicesReturned.value): raise ctypes.WinError() lpServicesArray = ctypes.cast(ctypes.cast(ctypes.pointer(ServicesBuffer), ctypes.c_void_p), LPENUM_SERVICE_STATUSW) for index in compat.xrange(0, ServicesReturned.value): - Services.append( ServiceStatusEntry(lpServicesArray[index]) ) - if success: break + Services.append(ServiceStatusEntry(lpServicesArray[index])) + if success: + break if not success: raise ctypes.WinError() return Services + EnumServicesStatus = DefaultStringType(EnumServicesStatusA, EnumServicesStatusW) + # BOOL WINAPI EnumServicesStatusEx( # _In_ SC_HANDLE hSCManager, # _In_ SC_ENUM_TYPE InfoLevel, @@ -3123,20 +3542,36 @@ def EnumServicesStatusW(hSCManager, dwServiceType = SERVICE_DRIVER | SERVICE_WIN # _Inout_opt_ LPDWORD lpResumeHandle, # _In_opt_ LPCTSTR pszGroupName # ); -def EnumServicesStatusExA(hSCManager, InfoLevel = SC_ENUM_PROCESS_INFO, dwServiceType = SERVICE_DRIVER | SERVICE_WIN32, dwServiceState = SERVICE_STATE_ALL, pszGroupName = None): - +def EnumServicesStatusExA( + hSCManager, + InfoLevel=SC_ENUM_PROCESS_INFO, + dwServiceType=SERVICE_DRIVER | SERVICE_WIN32, + dwServiceState=SERVICE_STATE_ALL, + pszGroupName=None, +): if InfoLevel != SC_ENUM_PROCESS_INFO: raise NotImplementedError() _EnumServicesStatusExA = windll.advapi32.EnumServicesStatusExA _EnumServicesStatusExA.argtypes = [SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD, LPDWORD, LPSTR] - _EnumServicesStatusExA.restype = bool + _EnumServicesStatusExA.restype = bool - cbBytesNeeded = DWORD(0) + cbBytesNeeded = DWORD(0) ServicesReturned = DWORD(0) - ResumeHandle = DWORD(0) - - _EnumServicesStatusExA(hSCManager, InfoLevel, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle), pszGroupName) + ResumeHandle = DWORD(0) + + _EnumServicesStatusExA( + hSCManager, + InfoLevel, + dwServiceType, + dwServiceState, + None, + 0, + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + pszGroupName, + ) Services = [] success = False @@ -3144,31 +3579,61 @@ def EnumServicesStatusExA(hSCManager, InfoLevel = SC_ENUM_PROCESS_INFO, dwServic if cbBytesNeeded.value < sizeof(ENUM_SERVICE_STATUS_PROCESSA): break ServicesBuffer = ctypes.create_string_buffer("", cbBytesNeeded.value) - success = _EnumServicesStatusExA(hSCManager, InfoLevel, dwServiceType, dwServiceState, byref(ServicesBuffer), sizeof(ServicesBuffer), byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle), pszGroupName) + success = _EnumServicesStatusExA( + hSCManager, + InfoLevel, + dwServiceType, + dwServiceState, + byref(ServicesBuffer), + sizeof(ServicesBuffer), + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + pszGroupName, + ) if sizeof(ServicesBuffer) < (sizeof(ENUM_SERVICE_STATUS_PROCESSA) * ServicesReturned.value): raise ctypes.WinError() lpServicesArray = ctypes.cast(ctypes.cast(ctypes.pointer(ServicesBuffer), ctypes.c_void_p), LPENUM_SERVICE_STATUS_PROCESSA) for index in compat.xrange(0, ServicesReturned.value): - Services.append( ServiceStatusProcessEntry(lpServicesArray[index]) ) - if success: break + Services.append(ServiceStatusProcessEntry(lpServicesArray[index])) + if success: + break if not success: raise ctypes.WinError() return Services -def EnumServicesStatusExW(hSCManager, InfoLevel = SC_ENUM_PROCESS_INFO, dwServiceType = SERVICE_DRIVER | SERVICE_WIN32, dwServiceState = SERVICE_STATE_ALL, pszGroupName = None): + +def EnumServicesStatusExW( + hSCManager, + InfoLevel=SC_ENUM_PROCESS_INFO, + dwServiceType=SERVICE_DRIVER | SERVICE_WIN32, + dwServiceState=SERVICE_STATE_ALL, + pszGroupName=None, +): _EnumServicesStatusExW = windll.advapi32.EnumServicesStatusExW _EnumServicesStatusExW.argtypes = [SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD, LPDWORD, LPWSTR] - _EnumServicesStatusExW.restype = bool + _EnumServicesStatusExW.restype = bool if InfoLevel != SC_ENUM_PROCESS_INFO: raise NotImplementedError() - cbBytesNeeded = DWORD(0) + cbBytesNeeded = DWORD(0) ServicesReturned = DWORD(0) - ResumeHandle = DWORD(0) - - _EnumServicesStatusExW(hSCManager, InfoLevel, dwServiceType, dwServiceState, None, 0, byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle), pszGroupName) + ResumeHandle = DWORD(0) + + _EnumServicesStatusExW( + hSCManager, + InfoLevel, + dwServiceType, + dwServiceState, + None, + 0, + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + pszGroupName, + ) Services = [] success = False @@ -3176,18 +3641,31 @@ def EnumServicesStatusExW(hSCManager, InfoLevel = SC_ENUM_PROCESS_INFO, dwServic if cbBytesNeeded.value < sizeof(ENUM_SERVICE_STATUS_PROCESSW): break ServicesBuffer = ctypes.create_string_buffer("", cbBytesNeeded.value) - success = _EnumServicesStatusExW(hSCManager, InfoLevel, dwServiceType, dwServiceState, byref(ServicesBuffer), sizeof(ServicesBuffer), byref(cbBytesNeeded), byref(ServicesReturned), byref(ResumeHandle), pszGroupName) + success = _EnumServicesStatusExW( + hSCManager, + InfoLevel, + dwServiceType, + dwServiceState, + byref(ServicesBuffer), + sizeof(ServicesBuffer), + byref(cbBytesNeeded), + byref(ServicesReturned), + byref(ResumeHandle), + pszGroupName, + ) if sizeof(ServicesBuffer) < (sizeof(ENUM_SERVICE_STATUS_PROCESSW) * ServicesReturned.value): raise ctypes.WinError() lpServicesArray = ctypes.cast(ctypes.cast(ctypes.pointer(ServicesBuffer), ctypes.c_void_p), LPENUM_SERVICE_STATUS_PROCESSW) for index in compat.xrange(0, ServicesReturned.value): - Services.append( ServiceStatusProcessEntry(lpServicesArray[index]) ) - if success: break + Services.append(ServiceStatusProcessEntry(lpServicesArray[index])) + if success: + break if not success: raise ctypes.WinError() return Services + EnumServicesStatusEx = DefaultStringType(EnumServicesStatusExA, EnumServicesStatusExW) # BOOL WINAPI EnumDependentServices( @@ -3201,9 +3679,9 @@ def EnumServicesStatusExW(hSCManager, InfoLevel = SC_ENUM_PROCESS_INFO, dwServic # TO DO -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py index eb786b652..cc1e59a36 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_amd64.py @@ -38,43 +38,43 @@ from winappdbg.win32.version import ARCH_AMD64 from winappdbg.win32 import context_i386 -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- CONTEXT structures and constants ----------------------------------------- +# --- CONTEXT structures and constants ----------------------------------------- # The following values specify the type of access in the first parameter # of the exception record when the exception code specifies an access # violation. -EXCEPTION_READ_FAULT = 0 # exception caused by a read -EXCEPTION_WRITE_FAULT = 1 # exception caused by a write -EXCEPTION_EXECUTE_FAULT = 8 # exception caused by an instruction fetch +EXCEPTION_READ_FAULT = 0 # exception caused by a read +EXCEPTION_WRITE_FAULT = 1 # exception caused by a write +EXCEPTION_EXECUTE_FAULT = 8 # exception caused by an instruction fetch -CONTEXT_AMD64 = 0x00100000 +CONTEXT_AMD64 = 0x00100000 -CONTEXT_CONTROL = (CONTEXT_AMD64 | long(0x1)) -CONTEXT_INTEGER = (CONTEXT_AMD64 | long(0x2)) -CONTEXT_SEGMENTS = (CONTEXT_AMD64 | long(0x4)) -CONTEXT_FLOATING_POINT = (CONTEXT_AMD64 | long(0x8)) -CONTEXT_DEBUG_REGISTERS = (CONTEXT_AMD64 | long(0x10)) +CONTEXT_CONTROL = CONTEXT_AMD64 | long(0x1) +CONTEXT_INTEGER = CONTEXT_AMD64 | long(0x2) +CONTEXT_SEGMENTS = CONTEXT_AMD64 | long(0x4) +CONTEXT_FLOATING_POINT = CONTEXT_AMD64 | long(0x8) +CONTEXT_DEBUG_REGISTERS = CONTEXT_AMD64 | long(0x10) -CONTEXT_MMX_REGISTERS = CONTEXT_FLOATING_POINT +CONTEXT_MMX_REGISTERS = CONTEXT_FLOATING_POINT -CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) +CONTEXT_FULL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT -CONTEXT_ALL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ - CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) +CONTEXT_ALL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS -CONTEXT_EXCEPTION_ACTIVE = 0x8000000 -CONTEXT_SERVICE_ACTIVE = 0x10000000 -CONTEXT_EXCEPTION_REQUEST = 0x40000000 +CONTEXT_EXCEPTION_ACTIVE = 0x8000000 +CONTEXT_SERVICE_ACTIVE = 0x10000000 +CONTEXT_EXCEPTION_REQUEST = 0x40000000 CONTEXT_EXCEPTION_REPORTING = 0x80000000 -INITIAL_MXCSR = 0x1f80 # initial MXCSR value -INITIAL_FPCSR = 0x027f # initial FPCSR value +INITIAL_MXCSR = 0x1F80 # initial MXCSR value +INITIAL_FPCSR = 0x027F # initial FPCSR value + # typedef struct _XMM_SAVE_AREA32 { # WORD ControlWord; @@ -97,22 +97,22 @@ class XMM_SAVE_AREA32(Structure): _pack_ = 1 _fields_ = [ - ('ControlWord', WORD), - ('StatusWord', WORD), - ('TagWord', BYTE), - ('Reserved1', BYTE), - ('ErrorOpcode', WORD), - ('ErrorOffset', DWORD), - ('ErrorSelector', WORD), - ('Reserved2', WORD), - ('DataOffset', DWORD), - ('DataSelector', WORD), - ('Reserved3', WORD), - ('MxCsr', DWORD), - ('MxCsr_Mask', DWORD), - ('FloatRegisters', M128A * 8), - ('XmmRegisters', M128A * 16), - ('Reserved4', BYTE * 96), + ("ControlWord", WORD), + ("StatusWord", WORD), + ("TagWord", BYTE), + ("Reserved1", BYTE), + ("ErrorOpcode", WORD), + ("ErrorOffset", DWORD), + ("ErrorSelector", WORD), + ("Reserved2", WORD), + ("DataOffset", DWORD), + ("DataSelector", WORD), + ("Reserved3", WORD), + ("MxCsr", DWORD), + ("MxCsr_Mask", DWORD), + ("FloatRegisters", M128A * 8), + ("XmmRegisters", M128A * 16), + ("Reserved4", BYTE * 96), ] def from_dict(self): @@ -121,14 +121,15 @@ def from_dict(self): def to_dict(self): d = dict() for name, type in self._fields_: - if name in ('FloatRegisters', 'XmmRegisters'): - d[name] = tuple([ (x.LowPart + (x.HighPart << 64)) for x in getattr(self, name) ]) - elif name == 'Reserved4': - d[name] = tuple([ chr(x) for x in getattr(self, name) ]) + if name in ("FloatRegisters", "XmmRegisters"): + d[name] = tuple([(x.LowPart + (x.HighPart << 64)) for x in getattr(self, name)]) + elif name == "Reserved4": + d[name] = tuple([chr(x) for x in getattr(self, name)]) else: d[name] = getattr(self, name) return d + LEGACY_SAVE_AREA_LENGTH = sizeof(XMM_SAVE_AREA32) PXMM_SAVE_AREA32 = ctypes.POINTER(XMM_SAVE_AREA32) @@ -286,26 +287,27 @@ def to_dict(self): # DWORD64 LastExceptionFromRip; # } CONTEXT, *PCONTEXT; + class _CONTEXT_FLTSAVE_STRUCT(Structure): _fields_ = [ - ('Header', M128A * 2), - ('Legacy', M128A * 8), - ('Xmm0', M128A), - ('Xmm1', M128A), - ('Xmm2', M128A), - ('Xmm3', M128A), - ('Xmm4', M128A), - ('Xmm5', M128A), - ('Xmm6', M128A), - ('Xmm7', M128A), - ('Xmm8', M128A), - ('Xmm9', M128A), - ('Xmm10', M128A), - ('Xmm11', M128A), - ('Xmm12', M128A), - ('Xmm13', M128A), - ('Xmm14', M128A), - ('Xmm15', M128A), + ("Header", M128A * 2), + ("Legacy", M128A * 8), + ("Xmm0", M128A), + ("Xmm1", M128A), + ("Xmm2", M128A), + ("Xmm3", M128A), + ("Xmm4", M128A), + ("Xmm5", M128A), + ("Xmm6", M128A), + ("Xmm7", M128A), + ("Xmm8", M128A), + ("Xmm9", M128A), + ("Xmm10", M128A), + ("Xmm11", M128A), + ("Xmm12", M128A), + ("Xmm13", M128A), + ("Xmm14", M128A), + ("Xmm15", M128A), ] def from_dict(self): @@ -314,17 +316,18 @@ def from_dict(self): def to_dict(self): d = dict() for name, type in self._fields_: - if name in ('Header', 'Legacy'): - d[name] = tuple([ (x.Low + (x.High << 64)) for x in getattr(self, name) ]) + if name in ("Header", "Legacy"): + d[name] = tuple([(x.Low + (x.High << 64)) for x in getattr(self, name)]) else: x = getattr(self, name) d[name] = x.Low + (x.High << 64) return d + class _CONTEXT_FLTSAVE_UNION(Union): _fields_ = [ - ('flt', XMM_SAVE_AREA32), - ('xmm', _CONTEXT_FLTSAVE_STRUCT), + ("flt", XMM_SAVE_AREA32), + ("xmm", _CONTEXT_FLTSAVE_STRUCT), ] def from_dict(self): @@ -332,105 +335,121 @@ def from_dict(self): def to_dict(self): d = dict() - d['flt'] = self.flt.to_dict() - d['xmm'] = self.xmm.to_dict() + d["flt"] = self.flt.to_dict() + d["xmm"] = self.xmm.to_dict() return d + class CONTEXT(Structure): arch = ARCH_AMD64 _pack_ = 16 _fields_ = [ - # Register parameter home addresses. - ('P1Home', DWORD64), - ('P2Home', DWORD64), - ('P3Home', DWORD64), - ('P4Home', DWORD64), - ('P5Home', DWORD64), - ('P6Home', DWORD64), - + ("P1Home", DWORD64), + ("P2Home", DWORD64), + ("P3Home", DWORD64), + ("P4Home", DWORD64), + ("P5Home", DWORD64), + ("P6Home", DWORD64), # Control flags. - ('ContextFlags', DWORD), - ('MxCsr', DWORD), - + ("ContextFlags", DWORD), + ("MxCsr", DWORD), # Segment Registers and processor flags. - ('SegCs', WORD), - ('SegDs', WORD), - ('SegEs', WORD), - ('SegFs', WORD), - ('SegGs', WORD), - ('SegSs', WORD), - ('EFlags', DWORD), - + ("SegCs", WORD), + ("SegDs", WORD), + ("SegEs", WORD), + ("SegFs", WORD), + ("SegGs", WORD), + ("SegSs", WORD), + ("EFlags", DWORD), # Debug registers. - ('Dr0', DWORD64), - ('Dr1', DWORD64), - ('Dr2', DWORD64), - ('Dr3', DWORD64), - ('Dr6', DWORD64), - ('Dr7', DWORD64), - + ("Dr0", DWORD64), + ("Dr1", DWORD64), + ("Dr2", DWORD64), + ("Dr3", DWORD64), + ("Dr6", DWORD64), + ("Dr7", DWORD64), # Integer registers. - ('Rax', DWORD64), - ('Rcx', DWORD64), - ('Rdx', DWORD64), - ('Rbx', DWORD64), - ('Rsp', DWORD64), - ('Rbp', DWORD64), - ('Rsi', DWORD64), - ('Rdi', DWORD64), - ('R8', DWORD64), - ('R9', DWORD64), - ('R10', DWORD64), - ('R11', DWORD64), - ('R12', DWORD64), - ('R13', DWORD64), - ('R14', DWORD64), - ('R15', DWORD64), - + ("Rax", DWORD64), + ("Rcx", DWORD64), + ("Rdx", DWORD64), + ("Rbx", DWORD64), + ("Rsp", DWORD64), + ("Rbp", DWORD64), + ("Rsi", DWORD64), + ("Rdi", DWORD64), + ("R8", DWORD64), + ("R9", DWORD64), + ("R10", DWORD64), + ("R11", DWORD64), + ("R12", DWORD64), + ("R13", DWORD64), + ("R14", DWORD64), + ("R15", DWORD64), # Program counter. - ('Rip', DWORD64), - + ("Rip", DWORD64), # Floating point state. - ('FltSave', _CONTEXT_FLTSAVE_UNION), - + ("FltSave", _CONTEXT_FLTSAVE_UNION), # Vector registers. - ('VectorRegister', M128A * 26), - ('VectorControl', DWORD64), - + ("VectorRegister", M128A * 26), + ("VectorControl", DWORD64), # Special debug control registers. - ('DebugControl', DWORD64), - ('LastBranchToRip', DWORD64), - ('LastBranchFromRip', DWORD64), - ('LastExceptionToRip', DWORD64), - ('LastExceptionFromRip', DWORD64), + ("DebugControl", DWORD64), + ("LastBranchToRip", DWORD64), + ("LastBranchFromRip", DWORD64), + ("LastExceptionToRip", DWORD64), + ("LastExceptionFromRip", DWORD64), ] - _others = ('P1Home', 'P2Home', 'P3Home', 'P4Home', 'P5Home', 'P6Home', \ - 'MxCsr', 'VectorRegister', 'VectorControl') - _control = ('SegSs', 'Rsp', 'SegCs', 'Rip', 'EFlags') - _integer = ('Rax', 'Rcx', 'Rdx', 'Rbx', 'Rsp', 'Rbp', 'Rsi', 'Rdi', \ - 'R8', 'R9', 'R10', 'R11', 'R12', 'R13', 'R14', 'R15') - _segments = ('SegDs', 'SegEs', 'SegFs', 'SegGs') - _debug = ('Dr0', 'Dr1', 'Dr2', 'Dr3', 'Dr6', 'Dr7', \ - 'DebugControl', 'LastBranchToRip', 'LastBranchFromRip', \ - 'LastExceptionToRip', 'LastExceptionFromRip') - _mmx = ('Xmm0', 'Xmm1', 'Xmm2', 'Xmm3', 'Xmm4', 'Xmm5', 'Xmm6', 'Xmm7', \ - 'Xmm8', 'Xmm9', 'Xmm10', 'Xmm11', 'Xmm12', 'Xmm13', 'Xmm14', 'Xmm15') + _others = ("P1Home", "P2Home", "P3Home", "P4Home", "P5Home", "P6Home", "MxCsr", "VectorRegister", "VectorControl") + _control = ("SegSs", "Rsp", "SegCs", "Rip", "EFlags") + _integer = ("Rax", "Rcx", "Rdx", "Rbx", "Rsp", "Rbp", "Rsi", "Rdi", "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15") + _segments = ("SegDs", "SegEs", "SegFs", "SegGs") + _debug = ( + "Dr0", + "Dr1", + "Dr2", + "Dr3", + "Dr6", + "Dr7", + "DebugControl", + "LastBranchToRip", + "LastBranchFromRip", + "LastExceptionToRip", + "LastExceptionFromRip", + ) + _mmx = ( + "Xmm0", + "Xmm1", + "Xmm2", + "Xmm3", + "Xmm4", + "Xmm5", + "Xmm6", + "Xmm7", + "Xmm8", + "Xmm9", + "Xmm10", + "Xmm11", + "Xmm12", + "Xmm13", + "Xmm14", + "Xmm15", + ) # XXX TODO # Convert VectorRegister and Xmm0-Xmm15 to pure Python types! @classmethod def from_dict(cls, ctx): - 'Instance a new structure from a Python native type.' + "Instance a new structure from a Python native type." ctx = Context(ctx) s = cls() - ContextFlags = ctx['ContextFlags'] + ContextFlags = ctx["ContextFlags"] s.ContextFlags = ContextFlags for key in cls._others: - if key != 'VectorRegister': + if key != "VectorRegister": setattr(s, key, ctx[key]) else: w = ctx[key] @@ -465,15 +484,15 @@ def from_dict(cls, ctx): return s def to_dict(self): - 'Convert a structure into a Python dictionary.' + "Convert a structure into a Python dictionary." ctx = Context() ContextFlags = self.ContextFlags - ctx['ContextFlags'] = ContextFlags + ctx["ContextFlags"] = ContextFlags for key in self._others: - if key != 'VectorRegister': + if key != "VectorRegister": ctx[key] = getattr(self, key) else: - ctx[key] = tuple([ (x.Low + (x.High << 64)) for x in getattr(self, key) ]) + ctx[key] = tuple([(x.Low + (x.High << 64)) for x in getattr(self, key)]) if (ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL: for key in self._control: ctx[key] = getattr(self, key) @@ -492,9 +511,11 @@ def to_dict(self): ctx[key] = xmm.get(key) return ctx + PCONTEXT = ctypes.POINTER(CONTEXT) LPCONTEXT = PCONTEXT + class Context(dict): """ Register context dictionary for the amd64 architecture. @@ -503,24 +524,31 @@ class Context(dict): arch = CONTEXT.arch def __get_pc(self): - return self['Rip'] + return self["Rip"] + def __set_pc(self, value): - self['Rip'] = value + self["Rip"] = value + pc = property(__get_pc, __set_pc) def __get_sp(self): - return self['Rsp'] + return self["Rsp"] + def __set_sp(self, value): - self['Rsp'] = value + self["Rsp"] = value + sp = property(__get_sp, __set_sp) def __get_fp(self): - return self['Rbp'] + return self["Rbp"] + def __set_fp(self, value): - self['Rbp'] = value + self["Rbp"] = value + fp = property(__get_fp, __set_fp) -#--- LDT_ENTRY structure ------------------------------------------------------ + +# --- LDT_ENTRY structure ------------------------------------------------------ # typedef struct _LDT_ENTRY { # WORD LimitLow; @@ -548,49 +576,54 @@ def __set_fp(self, value): # } LDT_ENTRY, # *PLDT_ENTRY; + class _LDT_ENTRY_BYTES_(Structure): _pack_ = 1 _fields_ = [ - ('BaseMid', BYTE), - ('Flags1', BYTE), - ('Flags2', BYTE), - ('BaseHi', BYTE), + ("BaseMid", BYTE), + ("Flags1", BYTE), + ("Flags2", BYTE), + ("BaseHi", BYTE), ] + class _LDT_ENTRY_BITS_(Structure): _pack_ = 1 _fields_ = [ - ('BaseMid', DWORD, 8), - ('Type', DWORD, 5), - ('Dpl', DWORD, 2), - ('Pres', DWORD, 1), - ('LimitHi', DWORD, 4), - ('Sys', DWORD, 1), - ('Reserved_0', DWORD, 1), - ('Default_Big', DWORD, 1), - ('Granularity', DWORD, 1), - ('BaseHi', DWORD, 8), + ("BaseMid", DWORD, 8), + ("Type", DWORD, 5), + ("Dpl", DWORD, 2), + ("Pres", DWORD, 1), + ("LimitHi", DWORD, 4), + ("Sys", DWORD, 1), + ("Reserved_0", DWORD, 1), + ("Default_Big", DWORD, 1), + ("Granularity", DWORD, 1), + ("BaseHi", DWORD, 8), ] + class _LDT_ENTRY_HIGHWORD_(Union): _pack_ = 1 _fields_ = [ - ('Bytes', _LDT_ENTRY_BYTES_), - ('Bits', _LDT_ENTRY_BITS_), + ("Bytes", _LDT_ENTRY_BYTES_), + ("Bits", _LDT_ENTRY_BITS_), ] + class LDT_ENTRY(Structure): _pack_ = 1 _fields_ = [ - ('LimitLow', WORD), - ('BaseLow', WORD), - ('HighWord', _LDT_ENTRY_HIGHWORD_), + ("LimitLow", WORD), + ("BaseLow", WORD), + ("HighWord", _LDT_ENTRY_HIGHWORD_), ] + PLDT_ENTRY = POINTER(LDT_ENTRY) LPLDT_ENTRY = PLDT_ENTRY -#--- WOW64 CONTEXT structure and constants ------------------------------------ +# --- WOW64 CONTEXT structure and constants ------------------------------------ # Value of SegCs in a Wow64 thread when running in 32 bits mode WOW64_CS32 = 0x23 @@ -598,34 +631,46 @@ class LDT_ENTRY(Structure): WOW64_CONTEXT_i386 = long(0x00010000) WOW64_CONTEXT_i486 = long(0x00010000) -WOW64_CONTEXT_CONTROL = (WOW64_CONTEXT_i386 | long(0x00000001)) -WOW64_CONTEXT_INTEGER = (WOW64_CONTEXT_i386 | long(0x00000002)) -WOW64_CONTEXT_SEGMENTS = (WOW64_CONTEXT_i386 | long(0x00000004)) -WOW64_CONTEXT_FLOATING_POINT = (WOW64_CONTEXT_i386 | long(0x00000008)) -WOW64_CONTEXT_DEBUG_REGISTERS = (WOW64_CONTEXT_i386 | long(0x00000010)) -WOW64_CONTEXT_EXTENDED_REGISTERS = (WOW64_CONTEXT_i386 | long(0x00000020)) +WOW64_CONTEXT_CONTROL = WOW64_CONTEXT_i386 | long(0x00000001) +WOW64_CONTEXT_INTEGER = WOW64_CONTEXT_i386 | long(0x00000002) +WOW64_CONTEXT_SEGMENTS = WOW64_CONTEXT_i386 | long(0x00000004) +WOW64_CONTEXT_FLOATING_POINT = WOW64_CONTEXT_i386 | long(0x00000008) +WOW64_CONTEXT_DEBUG_REGISTERS = WOW64_CONTEXT_i386 | long(0x00000010) +WOW64_CONTEXT_EXTENDED_REGISTERS = WOW64_CONTEXT_i386 | long(0x00000020) + +WOW64_CONTEXT_FULL = WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS +WOW64_CONTEXT_ALL = ( + WOW64_CONTEXT_CONTROL + | WOW64_CONTEXT_INTEGER + | WOW64_CONTEXT_SEGMENTS + | WOW64_CONTEXT_FLOATING_POINT + | WOW64_CONTEXT_DEBUG_REGISTERS + | WOW64_CONTEXT_EXTENDED_REGISTERS +) -WOW64_CONTEXT_FULL = (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS) -WOW64_CONTEXT_ALL = (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS) +WOW64_SIZE_OF_80387_REGISTERS = 80 +WOW64_MAXIMUM_SUPPORTED_EXTENSION = 512 -WOW64_SIZE_OF_80387_REGISTERS = 80 -WOW64_MAXIMUM_SUPPORTED_EXTENSION = 512 -class WOW64_FLOATING_SAVE_AREA (context_i386.FLOATING_SAVE_AREA): +class WOW64_FLOATING_SAVE_AREA(context_i386.FLOATING_SAVE_AREA): pass -class WOW64_CONTEXT (context_i386.CONTEXT): + +class WOW64_CONTEXT(context_i386.CONTEXT): pass -class WOW64_LDT_ENTRY (context_i386.LDT_ENTRY): + +class WOW64_LDT_ENTRY(context_i386.LDT_ENTRY): pass -PWOW64_FLOATING_SAVE_AREA = POINTER(WOW64_FLOATING_SAVE_AREA) -PWOW64_CONTEXT = POINTER(WOW64_CONTEXT) -PWOW64_LDT_ENTRY = POINTER(WOW64_LDT_ENTRY) + +PWOW64_FLOATING_SAVE_AREA = POINTER(WOW64_FLOATING_SAVE_AREA) +PWOW64_CONTEXT = POINTER(WOW64_CONTEXT) +PWOW64_LDT_ENTRY = POINTER(WOW64_LDT_ENTRY) ############################################################################### + # BOOL WINAPI GetThreadSelectorEntry( # __in HANDLE hThread, # __in DWORD dwSelector, @@ -634,21 +679,22 @@ class WOW64_LDT_ENTRY (context_i386.LDT_ENTRY): def GetThreadSelectorEntry(hThread, dwSelector): _GetThreadSelectorEntry = windll.kernel32.GetThreadSelectorEntry _GetThreadSelectorEntry.argtypes = [HANDLE, DWORD, LPLDT_ENTRY] - _GetThreadSelectorEntry.restype = bool + _GetThreadSelectorEntry.restype = bool _GetThreadSelectorEntry.errcheck = RaiseIfZero ldt = LDT_ENTRY() _GetThreadSelectorEntry(hThread, dwSelector, byref(ldt)) return ldt + # BOOL WINAPI GetThreadContext( # __in HANDLE hThread, # __inout LPCONTEXT lpContext # ); -def GetThreadContext(hThread, ContextFlags = None, raw = False): +def GetThreadContext(hThread, ContextFlags=None, raw=False): _GetThreadContext = windll.kernel32.GetThreadContext _GetThreadContext.argtypes = [HANDLE, LPCONTEXT] - _GetThreadContext.restype = bool + _GetThreadContext.restype = bool _GetThreadContext.errcheck = RaiseIfZero if ContextFlags is None: @@ -660,6 +706,7 @@ def GetThreadContext(hThread, ContextFlags = None, raw = False): return Context return Context.to_dict() + # BOOL WINAPI SetThreadContext( # __in HANDLE hThread, # __in const CONTEXT* lpContext @@ -667,13 +714,14 @@ def GetThreadContext(hThread, ContextFlags = None, raw = False): def SetThreadContext(hThread, lpContext): _SetThreadContext = windll.kernel32.SetThreadContext _SetThreadContext.argtypes = [HANDLE, LPCONTEXT] - _SetThreadContext.restype = bool + _SetThreadContext.restype = bool _SetThreadContext.errcheck = RaiseIfZero if isinstance(lpContext, dict): lpContext = CONTEXT.from_dict(lpContext) _SetThreadContext(hThread, byref(lpContext)) + # BOOL Wow64GetThreadSelectorEntry( # __in HANDLE hThread, # __in DWORD dwSelector, @@ -682,50 +730,54 @@ def SetThreadContext(hThread, lpContext): def Wow64GetThreadSelectorEntry(hThread, dwSelector): _Wow64GetThreadSelectorEntry = windll.kernel32.Wow64GetThreadSelectorEntry _Wow64GetThreadSelectorEntry.argtypes = [HANDLE, DWORD, PWOW64_LDT_ENTRY] - _Wow64GetThreadSelectorEntry.restype = bool + _Wow64GetThreadSelectorEntry.restype = bool _Wow64GetThreadSelectorEntry.errcheck = RaiseIfZero lpSelectorEntry = WOW64_LDT_ENTRY() _Wow64GetThreadSelectorEntry(hThread, dwSelector, byref(lpSelectorEntry)) return lpSelectorEntry + # DWORD WINAPI Wow64ResumeThread( # __in HANDLE hThread # ); def Wow64ResumeThread(hThread): _Wow64ResumeThread = windll.kernel32.Wow64ResumeThread _Wow64ResumeThread.argtypes = [HANDLE] - _Wow64ResumeThread.restype = DWORD + _Wow64ResumeThread.restype = DWORD previousCount = _Wow64ResumeThread(hThread) if previousCount == DWORD(-1).value: raise ctypes.WinError() return previousCount + # DWORD WINAPI Wow64SuspendThread( # __in HANDLE hThread # ); def Wow64SuspendThread(hThread): _Wow64SuspendThread = windll.kernel32.Wow64SuspendThread _Wow64SuspendThread.argtypes = [HANDLE] - _Wow64SuspendThread.restype = DWORD + _Wow64SuspendThread.restype = DWORD previousCount = _Wow64SuspendThread(hThread) if previousCount == DWORD(-1).value: raise ctypes.WinError() return previousCount + # XXX TODO Use this http://www.nynaeve.net/Code/GetThreadWow64Context.cpp # Also see http://www.woodmann.com/forum/archive/index.php/t-11162.html + # BOOL WINAPI Wow64GetThreadContext( # __in HANDLE hThread, # __inout PWOW64_CONTEXT lpContext # ); -def Wow64GetThreadContext(hThread, ContextFlags = None): +def Wow64GetThreadContext(hThread, ContextFlags=None): _Wow64GetThreadContext = windll.kernel32.Wow64GetThreadContext _Wow64GetThreadContext.argtypes = [HANDLE, PWOW64_CONTEXT] - _Wow64GetThreadContext.restype = bool + _Wow64GetThreadContext.restype = bool _Wow64GetThreadContext.errcheck = RaiseIfZero # XXX doesn't exist in XP 64 bits @@ -738,6 +790,7 @@ def Wow64GetThreadContext(hThread, ContextFlags = None): _Wow64GetThreadContext(hThread, byref(Context)) return Context.to_dict() + # BOOL WINAPI Wow64SetThreadContext( # __in HANDLE hThread, # __in const WOW64_CONTEXT *lpContext @@ -745,7 +798,7 @@ def Wow64GetThreadContext(hThread, ContextFlags = None): def Wow64SetThreadContext(hThread, lpContext): _Wow64SetThreadContext = windll.kernel32.Wow64SetThreadContext _Wow64SetThreadContext.argtypes = [HANDLE, PWOW64_CONTEXT] - _Wow64SetThreadContext.restype = bool + _Wow64SetThreadContext.restype = bool _Wow64SetThreadContext.errcheck = RaiseIfZero # XXX doesn't exist in XP 64 bits @@ -754,9 +807,10 @@ def Wow64SetThreadContext(hThread, lpContext): lpContext = WOW64_CONTEXT.from_dict(lpContext) _Wow64SetThreadContext(hThread, byref(lpContext)) -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py index 91ff2d93e..fa24b3bf7 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/context_i386.py @@ -37,40 +37,41 @@ from winappdbg.win32.defines import * from winappdbg.win32.version import ARCH_I386 -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- CONTEXT structures and constants ----------------------------------------- +# --- CONTEXT structures and constants ----------------------------------------- # The following values specify the type of access in the first parameter # of the exception record when the exception code specifies an access # violation. -EXCEPTION_READ_FAULT = 0 # exception caused by a read -EXCEPTION_WRITE_FAULT = 1 # exception caused by a write -EXCEPTION_EXECUTE_FAULT = 8 # exception caused by an instruction fetch +EXCEPTION_READ_FAULT = 0 # exception caused by a read +EXCEPTION_WRITE_FAULT = 1 # exception caused by a write +EXCEPTION_EXECUTE_FAULT = 8 # exception caused by an instruction fetch -CONTEXT_i386 = 0x00010000 # this assumes that i386 and -CONTEXT_i486 = 0x00010000 # i486 have identical context records +CONTEXT_i386 = 0x00010000 # this assumes that i386 and +CONTEXT_i486 = 0x00010000 # i486 have identical context records -CONTEXT_CONTROL = (CONTEXT_i386 | long(0x00000001)) # SS:SP, CS:IP, FLAGS, BP -CONTEXT_INTEGER = (CONTEXT_i386 | long(0x00000002)) # AX, BX, CX, DX, SI, DI -CONTEXT_SEGMENTS = (CONTEXT_i386 | long(0x00000004)) # DS, ES, FS, GS -CONTEXT_FLOATING_POINT = (CONTEXT_i386 | long(0x00000008)) # 387 state -CONTEXT_DEBUG_REGISTERS = (CONTEXT_i386 | long(0x00000010)) # DB 0-3,6,7 -CONTEXT_EXTENDED_REGISTERS = (CONTEXT_i386 | long(0x00000020)) # cpu specific extensions +CONTEXT_CONTROL = CONTEXT_i386 | long(0x00000001) # SS:SP, CS:IP, FLAGS, BP +CONTEXT_INTEGER = CONTEXT_i386 | long(0x00000002) # AX, BX, CX, DX, SI, DI +CONTEXT_SEGMENTS = CONTEXT_i386 | long(0x00000004) # DS, ES, FS, GS +CONTEXT_FLOATING_POINT = CONTEXT_i386 | long(0x00000008) # 387 state +CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 | long(0x00000010) # DB 0-3,6,7 +CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 | long(0x00000020) # cpu specific extensions -CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) +CONTEXT_FULL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS -CONTEXT_ALL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ - CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ - CONTEXT_EXTENDED_REGISTERS) +CONTEXT_ALL = ( + CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS +) -SIZE_OF_80387_REGISTERS = 80 +SIZE_OF_80387_REGISTERS = 80 MAXIMUM_SUPPORTED_EXTENSION = 512 + # typedef struct _FLOATING_SAVE_AREA { # DWORD ControlWord; # DWORD StatusWord; @@ -85,45 +86,47 @@ class FLOATING_SAVE_AREA(Structure): _pack_ = 1 _fields_ = [ - ('ControlWord', DWORD), - ('StatusWord', DWORD), - ('TagWord', DWORD), - ('ErrorOffset', DWORD), - ('ErrorSelector', DWORD), - ('DataOffset', DWORD), - ('DataSelector', DWORD), - ('RegisterArea', BYTE * SIZE_OF_80387_REGISTERS), - ('Cr0NpxState', DWORD), + ("ControlWord", DWORD), + ("StatusWord", DWORD), + ("TagWord", DWORD), + ("ErrorOffset", DWORD), + ("ErrorSelector", DWORD), + ("DataOffset", DWORD), + ("DataSelector", DWORD), + ("RegisterArea", BYTE * SIZE_OF_80387_REGISTERS), + ("Cr0NpxState", DWORD), ] - _integer_members = ('ControlWord', 'StatusWord', 'TagWord', 'ErrorOffset', 'ErrorSelector', 'DataOffset', 'DataSelector', 'Cr0NpxState') + _integer_members = ("ControlWord", "StatusWord", "TagWord", "ErrorOffset", "ErrorSelector", "DataOffset", "DataSelector", "Cr0NpxState") @classmethod def from_dict(cls, fsa): - 'Instance a new structure from a Python dictionary.' + "Instance a new structure from a Python dictionary." fsa = dict(fsa) s = cls() for key in cls._integer_members: setattr(s, key, fsa.get(key)) - ra = fsa.get('RegisterArea', None) + ra = fsa.get("RegisterArea", None) if ra is not None: for index in compat.xrange(0, SIZE_OF_80387_REGISTERS): s.RegisterArea[index] = ra[index] return s def to_dict(self): - 'Convert a structure into a Python dictionary.' + "Convert a structure into a Python dictionary." fsa = dict() for key in self._integer_members: fsa[key] = getattr(self, key) - ra = [ self.RegisterArea[index] for index in compat.xrange(0, SIZE_OF_80387_REGISTERS) ] + ra = [self.RegisterArea[index] for index in compat.xrange(0, SIZE_OF_80387_REGISTERS)] ra = tuple(ra) - fsa['RegisterArea'] = ra + fsa["RegisterArea"] = ra return fsa + PFLOATING_SAVE_AREA = POINTER(FLOATING_SAVE_AREA) LPFLOATING_SAVE_AREA = PFLOATING_SAVE_AREA + # typedef struct _CONTEXT { # DWORD ContextFlags; # DWORD Dr0; @@ -165,7 +168,6 @@ class CONTEXT(Structure): # The layout of the record conforms to a standard call frame. _fields_ = [ - # The flags values within this flag control the contents of # a CONTEXT record. # @@ -181,77 +183,69 @@ class CONTEXT(Structure): # context corresponding to set flags will be returned. # # The context record is never used as an OUT only parameter. - - ('ContextFlags', DWORD), - + ("ContextFlags", DWORD), # This section is specified/returned if CONTEXT_DEBUG_REGISTERS is # set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT # included in CONTEXT_FULL. - - ('Dr0', DWORD), - ('Dr1', DWORD), - ('Dr2', DWORD), - ('Dr3', DWORD), - ('Dr6', DWORD), - ('Dr7', DWORD), - + ("Dr0", DWORD), + ("Dr1", DWORD), + ("Dr2", DWORD), + ("Dr3", DWORD), + ("Dr6", DWORD), + ("Dr7", DWORD), # This section is specified/returned if the # ContextFlags word contains the flag CONTEXT_FLOATING_POINT. - - ('FloatSave', FLOATING_SAVE_AREA), - + ("FloatSave", FLOATING_SAVE_AREA), # This section is specified/returned if the # ContextFlags word contains the flag CONTEXT_SEGMENTS. - - ('SegGs', DWORD), - ('SegFs', DWORD), - ('SegEs', DWORD), - ('SegDs', DWORD), - + ("SegGs", DWORD), + ("SegFs", DWORD), + ("SegEs", DWORD), + ("SegDs", DWORD), # This section is specified/returned if the # ContextFlags word contains the flag CONTEXT_INTEGER. - - ('Edi', DWORD), - ('Esi', DWORD), - ('Ebx', DWORD), - ('Edx', DWORD), - ('Ecx', DWORD), - ('Eax', DWORD), - + ("Edi", DWORD), + ("Esi", DWORD), + ("Ebx", DWORD), + ("Edx", DWORD), + ("Ecx", DWORD), + ("Eax", DWORD), # This section is specified/returned if the # ContextFlags word contains the flag CONTEXT_CONTROL. - - ('Ebp', DWORD), - ('Eip', DWORD), - ('SegCs', DWORD), # MUST BE SANITIZED - ('EFlags', DWORD), # MUST BE SANITIZED - ('Esp', DWORD), - ('SegSs', DWORD), - + ("Ebp", DWORD), + ("Eip", DWORD), + ("SegCs", DWORD), # MUST BE SANITIZED + ("EFlags", DWORD), # MUST BE SANITIZED + ("Esp", DWORD), + ("SegSs", DWORD), # This section is specified/returned if the ContextFlags word # contains the flag CONTEXT_EXTENDED_REGISTERS. # The format and contexts are processor specific. - - ('ExtendedRegisters', BYTE * MAXIMUM_SUPPORTED_EXTENSION), + ("ExtendedRegisters", BYTE * MAXIMUM_SUPPORTED_EXTENSION), ] - _ctx_debug = ('Dr0', 'Dr1', 'Dr2', 'Dr3', 'Dr6', 'Dr7') - _ctx_segs = ('SegGs', 'SegFs', 'SegEs', 'SegDs', ) - _ctx_int = ('Edi', 'Esi', 'Ebx', 'Edx', 'Ecx', 'Eax') - _ctx_ctrl = ('Ebp', 'Eip', 'SegCs', 'EFlags', 'Esp', 'SegSs') + _ctx_debug = ("Dr0", "Dr1", "Dr2", "Dr3", "Dr6", "Dr7") + _ctx_segs = ( + "SegGs", + "SegFs", + "SegEs", + "SegDs", + ) + _ctx_int = ("Edi", "Esi", "Ebx", "Edx", "Ecx", "Eax") + _ctx_ctrl = ("Ebp", "Eip", "SegCs", "EFlags", "Esp", "SegSs") @classmethod def from_dict(cls, ctx): - 'Instance a new structure from a Python dictionary.' + "Instance a new structure from a Python dictionary." ctx = Context(ctx) s = cls() - ContextFlags = ctx['ContextFlags'] - setattr(s, 'ContextFlags', ContextFlags) + ContextFlags = ctx["ContextFlags"] + setattr(s, "ContextFlags", ContextFlags) if (ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS: for key in s._ctx_debug: setattr(s, key, ctx[key]) if (ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT: - fsa = ctx['FloatSave'] + fsa = ctx["FloatSave"] s.FloatSave = FLOATING_SAVE_AREA.from_dict(fsa) if (ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS: for key in s._ctx_segs: @@ -263,21 +257,21 @@ def from_dict(cls, ctx): for key in s._ctx_ctrl: setattr(s, key, ctx[key]) if (ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS: - er = ctx['ExtendedRegisters'] + er = ctx["ExtendedRegisters"] for index in compat.xrange(0, MAXIMUM_SUPPORTED_EXTENSION): s.ExtendedRegisters[index] = er[index] return s def to_dict(self): - 'Convert a structure into a Python native type.' + "Convert a structure into a Python native type." ctx = Context() ContextFlags = self.ContextFlags - ctx['ContextFlags'] = ContextFlags + ctx["ContextFlags"] = ContextFlags if (ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS: for key in self._ctx_debug: ctx[key] = getattr(self, key) if (ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT: - ctx['FloatSave'] = self.FloatSave.to_dict() + ctx["FloatSave"] = self.FloatSave.to_dict() if (ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS: for key in self._ctx_segs: ctx[key] = getattr(self, key) @@ -288,14 +282,16 @@ def to_dict(self): for key in self._ctx_ctrl: ctx[key] = getattr(self, key) if (ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS: - er = [ self.ExtendedRegisters[index] for index in compat.xrange(0, MAXIMUM_SUPPORTED_EXTENSION) ] + er = [self.ExtendedRegisters[index] for index in compat.xrange(0, MAXIMUM_SUPPORTED_EXTENSION)] er = tuple(er) - ctx['ExtendedRegisters'] = er + ctx["ExtendedRegisters"] = er return ctx + PCONTEXT = POINTER(CONTEXT) LPCONTEXT = PCONTEXT + class Context(dict): """ Register context dictionary for the i386 architecture. @@ -304,24 +300,31 @@ class Context(dict): arch = CONTEXT.arch def __get_pc(self): - return self['Eip'] + return self["Eip"] + def __set_pc(self, value): - self['Eip'] = value + self["Eip"] = value + pc = property(__get_pc, __set_pc) def __get_sp(self): - return self['Esp'] + return self["Esp"] + def __set_sp(self, value): - self['Esp'] = value + self["Esp"] = value + sp = property(__get_sp, __set_sp) def __get_fp(self): - return self['Ebp'] + return self["Ebp"] + def __set_fp(self, value): - self['Ebp'] = value + self["Ebp"] = value + fp = property(__get_fp, __set_fp) -#--- LDT_ENTRY structure ------------------------------------------------------ + +# --- LDT_ENTRY structure ------------------------------------------------------ # typedef struct _LDT_ENTRY { # WORD LimitLow; @@ -349,50 +352,56 @@ def __set_fp(self, value): # } LDT_ENTRY, # *PLDT_ENTRY; + class _LDT_ENTRY_BYTES_(Structure): _pack_ = 1 _fields_ = [ - ('BaseMid', BYTE), - ('Flags1', BYTE), - ('Flags2', BYTE), - ('BaseHi', BYTE), + ("BaseMid", BYTE), + ("Flags1", BYTE), + ("Flags2", BYTE), + ("BaseHi", BYTE), ] + class _LDT_ENTRY_BITS_(Structure): _pack_ = 1 _fields_ = [ - ('BaseMid', DWORD, 8), - ('Type', DWORD, 5), - ('Dpl', DWORD, 2), - ('Pres', DWORD, 1), - ('LimitHi', DWORD, 4), - ('Sys', DWORD, 1), - ('Reserved_0', DWORD, 1), - ('Default_Big', DWORD, 1), - ('Granularity', DWORD, 1), - ('BaseHi', DWORD, 8), + ("BaseMid", DWORD, 8), + ("Type", DWORD, 5), + ("Dpl", DWORD, 2), + ("Pres", DWORD, 1), + ("LimitHi", DWORD, 4), + ("Sys", DWORD, 1), + ("Reserved_0", DWORD, 1), + ("Default_Big", DWORD, 1), + ("Granularity", DWORD, 1), + ("BaseHi", DWORD, 8), ] + class _LDT_ENTRY_HIGHWORD_(Union): _pack_ = 1 _fields_ = [ - ('Bytes', _LDT_ENTRY_BYTES_), - ('Bits', _LDT_ENTRY_BITS_), + ("Bytes", _LDT_ENTRY_BYTES_), + ("Bits", _LDT_ENTRY_BITS_), ] + class LDT_ENTRY(Structure): _pack_ = 1 _fields_ = [ - ('LimitLow', WORD), - ('BaseLow', WORD), - ('HighWord', _LDT_ENTRY_HIGHWORD_), + ("LimitLow", WORD), + ("BaseLow", WORD), + ("HighWord", _LDT_ENTRY_HIGHWORD_), ] + PLDT_ENTRY = POINTER(LDT_ENTRY) LPLDT_ENTRY = PLDT_ENTRY ############################################################################### + # BOOL WINAPI GetThreadSelectorEntry( # __in HANDLE hThread, # __in DWORD dwSelector, @@ -401,21 +410,22 @@ class LDT_ENTRY(Structure): def GetThreadSelectorEntry(hThread, dwSelector): _GetThreadSelectorEntry = windll.kernel32.GetThreadSelectorEntry _GetThreadSelectorEntry.argtypes = [HANDLE, DWORD, LPLDT_ENTRY] - _GetThreadSelectorEntry.restype = bool + _GetThreadSelectorEntry.restype = bool _GetThreadSelectorEntry.errcheck = RaiseIfZero ldt = LDT_ENTRY() _GetThreadSelectorEntry(hThread, dwSelector, byref(ldt)) return ldt + # BOOL WINAPI GetThreadContext( # __in HANDLE hThread, # __inout LPCONTEXT lpContext # ); -def GetThreadContext(hThread, ContextFlags = None, raw = False): +def GetThreadContext(hThread, ContextFlags=None, raw=False): _GetThreadContext = windll.kernel32.GetThreadContext _GetThreadContext.argtypes = [HANDLE, LPCONTEXT] - _GetThreadContext.restype = bool + _GetThreadContext.restype = bool _GetThreadContext.errcheck = RaiseIfZero if ContextFlags is None: @@ -427,6 +437,7 @@ def GetThreadContext(hThread, ContextFlags = None, raw = False): return Context return Context.to_dict() + # BOOL WINAPI SetThreadContext( # __in HANDLE hThread, # __in const CONTEXT* lpContext @@ -434,16 +445,17 @@ def GetThreadContext(hThread, ContextFlags = None, raw = False): def SetThreadContext(hThread, lpContext): _SetThreadContext = windll.kernel32.SetThreadContext _SetThreadContext.argtypes = [HANDLE, LPCONTEXT] - _SetThreadContext.restype = bool + _SetThreadContext.restype = bool _SetThreadContext.errcheck = RaiseIfZero if isinstance(lpContext, dict): lpContext = CONTEXT.from_dict(lpContext) _SetThreadContext(hThread, byref(lpContext)) -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py index 17c843ee1..c3f5bfd83 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/dbghelp.py @@ -41,36 +41,27 @@ # DbgHelp versions and features list: # http://msdn.microsoft.com/en-us/library/windows/desktop/ms679294(v=vs.85).aspx -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # Tries to load the newest version of dbghelp.dll if available. -def _load_latest_dbghelp_dll(): +def _load_latest_dbghelp_dll(): from os import getenv from os.path import join, exists program_files_location = getenv("ProgramFiles") if not program_files_location: program_files_location = "C:\\Program Files" - + program_files_x86_location = getenv("ProgramFiles(x86)") - + if arch == ARCH_AMD64: if wow64: - pathname = join( - program_files_x86_location or program_files_location, - "Debugging Tools for Windows (x86)", - "dbghelp.dll") + pathname = join(program_files_x86_location or program_files_location, "Debugging Tools for Windows (x86)", "dbghelp.dll") else: - pathname = join( - program_files_location, - "Debugging Tools for Windows (x64)", - "dbghelp.dll") + pathname = join(program_files_location, "Debugging Tools for Windows (x64)", "dbghelp.dll") elif arch == ARCH_I386: - pathname = join( - program_files_location, - "Debugging Tools for Windows (x86)", - "dbghelp.dll") + pathname = join(program_files_location, "Debugging Tools for Windows (x86)", "dbghelp.dll") else: pathname = None @@ -81,71 +72,72 @@ def _load_latest_dbghelp_dll(): except Exception: pass + _load_latest_dbghelp_dll() # Recover the old binding of the "os" symbol. # XXX FIXME not sure if I really need to do this! ##from version import os -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== # SymGetHomeDirectory "type" values hdBase = 0 -hdSym = 1 -hdSrc = 2 - -UNDNAME_32_BIT_DECODE = 0x0800 -UNDNAME_COMPLETE = 0x0000 -UNDNAME_NAME_ONLY = 0x1000 -UNDNAME_NO_ACCESS_SPECIFIERS = 0x0080 -UNDNAME_NO_ALLOCATION_LANGUAGE = 0x0010 -UNDNAME_NO_ALLOCATION_MODEL = 0x0008 -UNDNAME_NO_ARGUMENTS = 0x2000 -UNDNAME_NO_CV_THISTYPE = 0x0040 -UNDNAME_NO_FUNCTION_RETURNS = 0x0004 -UNDNAME_NO_LEADING_UNDERSCORES = 0x0001 -UNDNAME_NO_MEMBER_TYPE = 0x0200 -UNDNAME_NO_MS_KEYWORDS = 0x0002 -UNDNAME_NO_MS_THISTYPE = 0x0020 -UNDNAME_NO_RETURN_UDT_MODEL = 0x0400 -UNDNAME_NO_SPECIAL_SYMS = 0x4000 -UNDNAME_NO_THISTYPE = 0x0060 -UNDNAME_NO_THROW_SIGNATURES = 0x0100 - -#--- IMAGEHLP_MODULE structure and related ------------------------------------ - -SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = 0x00000800 -SYMOPT_ALLOW_ZERO_ADDRESS = 0x01000000 -SYMOPT_AUTO_PUBLICS = 0x00010000 -SYMOPT_CASE_INSENSITIVE = 0x00000001 -SYMOPT_DEBUG = 0x80000000 -SYMOPT_DEFERRED_LOADS = 0x00000004 -SYMOPT_DISABLE_SYMSRV_AUTODETECT = 0x02000000 -SYMOPT_EXACT_SYMBOLS = 0x00000400 -SYMOPT_FAIL_CRITICAL_ERRORS = 0x00000200 -SYMOPT_FAVOR_COMPRESSED = 0x00800000 -SYMOPT_FLAT_DIRECTORY = 0x00400000 -SYMOPT_IGNORE_CVREC = 0x00000080 -SYMOPT_IGNORE_IMAGEDIR = 0x00200000 -SYMOPT_IGNORE_NT_SYMPATH = 0x00001000 -SYMOPT_INCLUDE_32BIT_MODULES = 0x00002000 -SYMOPT_LOAD_ANYTHING = 0x00000040 -SYMOPT_LOAD_LINES = 0x00000010 -SYMOPT_NO_CPP = 0x00000008 -SYMOPT_NO_IMAGE_SEARCH = 0x00020000 -SYMOPT_NO_PROMPTS = 0x00080000 -SYMOPT_NO_PUBLICS = 0x00008000 -SYMOPT_NO_UNQUALIFIED_LOADS = 0x00000100 -SYMOPT_OVERWRITE = 0x00100000 -SYMOPT_PUBLICS_ONLY = 0x00004000 -SYMOPT_SECURE = 0x00040000 -SYMOPT_UNDNAME = 0x00000002 +hdSym = 1 +hdSrc = 2 + +UNDNAME_32_BIT_DECODE = 0x0800 +UNDNAME_COMPLETE = 0x0000 +UNDNAME_NAME_ONLY = 0x1000 +UNDNAME_NO_ACCESS_SPECIFIERS = 0x0080 +UNDNAME_NO_ALLOCATION_LANGUAGE = 0x0010 +UNDNAME_NO_ALLOCATION_MODEL = 0x0008 +UNDNAME_NO_ARGUMENTS = 0x2000 +UNDNAME_NO_CV_THISTYPE = 0x0040 +UNDNAME_NO_FUNCTION_RETURNS = 0x0004 +UNDNAME_NO_LEADING_UNDERSCORES = 0x0001 +UNDNAME_NO_MEMBER_TYPE = 0x0200 +UNDNAME_NO_MS_KEYWORDS = 0x0002 +UNDNAME_NO_MS_THISTYPE = 0x0020 +UNDNAME_NO_RETURN_UDT_MODEL = 0x0400 +UNDNAME_NO_SPECIAL_SYMS = 0x4000 +UNDNAME_NO_THISTYPE = 0x0060 +UNDNAME_NO_THROW_SIGNATURES = 0x0100 + +# --- IMAGEHLP_MODULE structure and related ------------------------------------ + +SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = 0x00000800 +SYMOPT_ALLOW_ZERO_ADDRESS = 0x01000000 +SYMOPT_AUTO_PUBLICS = 0x00010000 +SYMOPT_CASE_INSENSITIVE = 0x00000001 +SYMOPT_DEBUG = 0x80000000 +SYMOPT_DEFERRED_LOADS = 0x00000004 +SYMOPT_DISABLE_SYMSRV_AUTODETECT = 0x02000000 +SYMOPT_EXACT_SYMBOLS = 0x00000400 +SYMOPT_FAIL_CRITICAL_ERRORS = 0x00000200 +SYMOPT_FAVOR_COMPRESSED = 0x00800000 +SYMOPT_FLAT_DIRECTORY = 0x00400000 +SYMOPT_IGNORE_CVREC = 0x00000080 +SYMOPT_IGNORE_IMAGEDIR = 0x00200000 +SYMOPT_IGNORE_NT_SYMPATH = 0x00001000 +SYMOPT_INCLUDE_32BIT_MODULES = 0x00002000 +SYMOPT_LOAD_ANYTHING = 0x00000040 +SYMOPT_LOAD_LINES = 0x00000010 +SYMOPT_NO_CPP = 0x00000008 +SYMOPT_NO_IMAGE_SEARCH = 0x00020000 +SYMOPT_NO_PROMPTS = 0x00080000 +SYMOPT_NO_PUBLICS = 0x00008000 +SYMOPT_NO_UNQUALIFIED_LOADS = 0x00000100 +SYMOPT_OVERWRITE = 0x00100000 +SYMOPT_PUBLICS_ONLY = 0x00004000 +SYMOPT_SECURE = 0x00040000 +SYMOPT_UNDNAME = 0x00000002 ##SSRVOPT_DWORD ##SSRVOPT_DWORDPTR @@ -179,15 +171,15 @@ def _load_latest_dbghelp_dll(): # SymVirtual, # NumSymTypes # } SYM_TYPE; -SymNone = 0 -SymCoff = 1 -SymCv = 2 -SymPdb = 3 -SymExport = 4 +SymNone = 0 +SymCoff = 1 +SymCv = 2 +SymPdb = 3 +SymExport = 4 SymDeferred = 5 -SymSym = 6 -SymDia = 7 -SymVirtual = 8 +SymSym = 6 +SymDia = 7 +SymVirtual = 8 NumSymTypes = 9 # typedef struct _IMAGEHLP_MODULE64 { @@ -216,173 +208,195 @@ def _load_latest_dbghelp_dll(): # BOOL Publics; # } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; -class IMAGEHLP_MODULE (Structure): + +class IMAGEHLP_MODULE(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("BaseOfImage", DWORD), - ("ImageSize", DWORD), - ("TimeDateStamp", DWORD), - ("CheckSum", DWORD), - ("NumSyms", DWORD), - ("SymType", DWORD), # SYM_TYPE - ("ModuleName", CHAR * 32), - ("ImageName", CHAR * 256), + ("SizeOfStruct", DWORD), + ("BaseOfImage", DWORD), + ("ImageSize", DWORD), + ("TimeDateStamp", DWORD), + ("CheckSum", DWORD), + ("NumSyms", DWORD), + ("SymType", DWORD), # SYM_TYPE + ("ModuleName", CHAR * 32), + ("ImageName", CHAR * 256), ("LoadedImageName", CHAR * 256), ] + + PIMAGEHLP_MODULE = POINTER(IMAGEHLP_MODULE) -class IMAGEHLP_MODULE64 (Structure): + +class IMAGEHLP_MODULE64(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("BaseOfImage", DWORD64), - ("ImageSize", DWORD), - ("TimeDateStamp", DWORD), - ("CheckSum", DWORD), - ("NumSyms", DWORD), - ("SymType", DWORD), # SYM_TYPE - ("ModuleName", CHAR * 32), - ("ImageName", CHAR * 256), + ("SizeOfStruct", DWORD), + ("BaseOfImage", DWORD64), + ("ImageSize", DWORD), + ("TimeDateStamp", DWORD), + ("CheckSum", DWORD), + ("NumSyms", DWORD), + ("SymType", DWORD), # SYM_TYPE + ("ModuleName", CHAR * 32), + ("ImageName", CHAR * 256), ("LoadedImageName", CHAR * 256), - ("LoadedPdbName", CHAR * 256), - ("CVSig", DWORD), - ("CVData", CHAR * (MAX_PATH * 3)), - ("PdbSig", DWORD), - ("PdbSig70", GUID), - ("PdbAge", DWORD), - ("PdbUnmatched", BOOL), - ("DbgUnmatched", BOOL), - ("LineNumbers", BOOL), - ("GlobalSymbols", BOOL), - ("TypeInfo", BOOL), - ("SourceIndexed", BOOL), - ("Publics", BOOL), + ("LoadedPdbName", CHAR * 256), + ("CVSig", DWORD), + ("CVData", CHAR * (MAX_PATH * 3)), + ("PdbSig", DWORD), + ("PdbSig70", GUID), + ("PdbAge", DWORD), + ("PdbUnmatched", BOOL), + ("DbgUnmatched", BOOL), + ("LineNumbers", BOOL), + ("GlobalSymbols", BOOL), + ("TypeInfo", BOOL), + ("SourceIndexed", BOOL), + ("Publics", BOOL), ] + + PIMAGEHLP_MODULE64 = POINTER(IMAGEHLP_MODULE64) -class IMAGEHLP_MODULEW (Structure): + +class IMAGEHLP_MODULEW(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("BaseOfImage", DWORD), - ("ImageSize", DWORD), - ("TimeDateStamp", DWORD), - ("CheckSum", DWORD), - ("NumSyms", DWORD), - ("SymType", DWORD), # SYM_TYPE - ("ModuleName", WCHAR * 32), - ("ImageName", WCHAR * 256), + ("SizeOfStruct", DWORD), + ("BaseOfImage", DWORD), + ("ImageSize", DWORD), + ("TimeDateStamp", DWORD), + ("CheckSum", DWORD), + ("NumSyms", DWORD), + ("SymType", DWORD), # SYM_TYPE + ("ModuleName", WCHAR * 32), + ("ImageName", WCHAR * 256), ("LoadedImageName", WCHAR * 256), ] + + PIMAGEHLP_MODULEW = POINTER(IMAGEHLP_MODULEW) -class IMAGEHLP_MODULEW64 (Structure): + +class IMAGEHLP_MODULEW64(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("BaseOfImage", DWORD64), - ("ImageSize", DWORD), - ("TimeDateStamp", DWORD), - ("CheckSum", DWORD), - ("NumSyms", DWORD), - ("SymType", DWORD), # SYM_TYPE - ("ModuleName", WCHAR * 32), - ("ImageName", WCHAR * 256), + ("SizeOfStruct", DWORD), + ("BaseOfImage", DWORD64), + ("ImageSize", DWORD), + ("TimeDateStamp", DWORD), + ("CheckSum", DWORD), + ("NumSyms", DWORD), + ("SymType", DWORD), # SYM_TYPE + ("ModuleName", WCHAR * 32), + ("ImageName", WCHAR * 256), ("LoadedImageName", WCHAR * 256), - ("LoadedPdbName", WCHAR * 256), - ("CVSig", DWORD), - ("CVData", WCHAR * (MAX_PATH * 3)), - ("PdbSig", DWORD), - ("PdbSig70", GUID), - ("PdbAge", DWORD), - ("PdbUnmatched", BOOL), - ("DbgUnmatched", BOOL), - ("LineNumbers", BOOL), - ("GlobalSymbols", BOOL), - ("TypeInfo", BOOL), - ("SourceIndexed", BOOL), - ("Publics", BOOL), + ("LoadedPdbName", WCHAR * 256), + ("CVSig", DWORD), + ("CVData", WCHAR * (MAX_PATH * 3)), + ("PdbSig", DWORD), + ("PdbSig70", GUID), + ("PdbAge", DWORD), + ("PdbUnmatched", BOOL), + ("DbgUnmatched", BOOL), + ("LineNumbers", BOOL), + ("GlobalSymbols", BOOL), + ("TypeInfo", BOOL), + ("SourceIndexed", BOOL), + ("Publics", BOOL), ] + + PIMAGEHLP_MODULEW64 = POINTER(IMAGEHLP_MODULEW64) -#--- dbghelp.dll -------------------------------------------------------------- +# --- dbghelp.dll -------------------------------------------------------------- # XXX the ANSI versions of these functions don't end in "A" as expected! + # BOOL WINAPI MakeSureDirectoryPathExists( # _In_ PCSTR DirPath # ); def MakeSureDirectoryPathExistsA(DirPath): _MakeSureDirectoryPathExists = windll.dbghelp.MakeSureDirectoryPathExists _MakeSureDirectoryPathExists.argtypes = [LPSTR] - _MakeSureDirectoryPathExists.restype = bool + _MakeSureDirectoryPathExists.restype = bool _MakeSureDirectoryPathExists.errcheck = RaiseIfZero return _MakeSureDirectoryPathExists(DirPath) + MakeSureDirectoryPathExistsW = MakeWideVersion(MakeSureDirectoryPathExistsA) MakeSureDirectoryPathExists = GuessStringType(MakeSureDirectoryPathExistsA, MakeSureDirectoryPathExistsW) + # BOOL WINAPI SymInitialize( # __in HANDLE hProcess, # __in_opt PCTSTR UserSearchPath, # __in BOOL fInvadeProcess # ); -def SymInitializeA(hProcess, UserSearchPath = None, fInvadeProcess = False): +def SymInitializeA(hProcess, UserSearchPath=None, fInvadeProcess=False): _SymInitialize = windll.dbghelp.SymInitialize _SymInitialize.argtypes = [HANDLE, LPSTR, BOOL] - _SymInitialize.restype = bool + _SymInitialize.restype = bool _SymInitialize.errcheck = RaiseIfZero if not UserSearchPath: UserSearchPath = None _SymInitialize(hProcess, UserSearchPath, fInvadeProcess) + SymInitializeW = MakeWideVersion(SymInitializeA) SymInitialize = GuessStringType(SymInitializeA, SymInitializeW) + # BOOL WINAPI SymCleanup( # __in HANDLE hProcess # ); def SymCleanup(hProcess): _SymCleanup = windll.dbghelp.SymCleanup _SymCleanup.argtypes = [HANDLE] - _SymCleanup.restype = bool + _SymCleanup.restype = bool _SymCleanup.errcheck = RaiseIfZero _SymCleanup(hProcess) + # BOOL WINAPI SymRefreshModuleList( # __in HANDLE hProcess # ); def SymRefreshModuleList(hProcess): _SymRefreshModuleList = windll.dbghelp.SymRefreshModuleList _SymRefreshModuleList.argtypes = [HANDLE] - _SymRefreshModuleList.restype = bool + _SymRefreshModuleList.restype = bool _SymRefreshModuleList.errcheck = RaiseIfZero _SymRefreshModuleList(hProcess) + # BOOL WINAPI SymSetParentWindow( # __in HWND hwnd # ); def SymSetParentWindow(hwnd): _SymSetParentWindow = windll.dbghelp.SymSetParentWindow _SymSetParentWindow.argtypes = [HWND] - _SymSetParentWindow.restype = bool + _SymSetParentWindow.restype = bool _SymSetParentWindow.errcheck = RaiseIfZero _SymSetParentWindow(hwnd) + # DWORD WINAPI SymSetOptions( # __in DWORD SymOptions # ); def SymSetOptions(SymOptions): _SymSetOptions = windll.dbghelp.SymSetOptions _SymSetOptions.argtypes = [DWORD] - _SymSetOptions.restype = DWORD + _SymSetOptions.restype = DWORD _SymSetOptions.errcheck = RaiseIfZero _SymSetOptions(SymOptions) + # DWORD WINAPI SymGetOptions(void); def SymGetOptions(): _SymGetOptions = windll.dbghelp.SymGetOptions _SymGetOptions.argtypes = [] - _SymGetOptions.restype = DWORD + _SymGetOptions.restype = DWORD return _SymGetOptions() + # DWORD WINAPI SymLoadModule( # __in HANDLE hProcess, # __in_opt HANDLE hFile, @@ -391,10 +405,10 @@ def SymGetOptions(): # __in DWORD BaseOfDll, # __in DWORD SizeOfDll # ); -def SymLoadModuleA(hProcess, hFile = None, ImageName = None, ModuleName = None, BaseOfDll = None, SizeOfDll = None): +def SymLoadModuleA(hProcess, hFile=None, ImageName=None, ModuleName=None, BaseOfDll=None, SizeOfDll=None): _SymLoadModule = windll.dbghelp.SymLoadModule _SymLoadModule.argtypes = [HANDLE, HANDLE, LPSTR, LPSTR, DWORD, DWORD] - _SymLoadModule.restype = DWORD + _SymLoadModule.restype = DWORD if not ImageName: ImageName = None @@ -412,9 +426,11 @@ def SymLoadModuleA(hProcess, hFile = None, ImageName = None, ModuleName = None, raise ctypes.WinError(dwErrorCode) return lpBaseAddress + SymLoadModuleW = MakeWideVersion(SymLoadModuleA) SymLoadModule = GuessStringType(SymLoadModuleA, SymLoadModuleW) + # DWORD64 WINAPI SymLoadModule64( # __in HANDLE hProcess, # __in_opt HANDLE hFile, @@ -423,10 +439,10 @@ def SymLoadModuleA(hProcess, hFile = None, ImageName = None, ModuleName = None, # __in DWORD64 BaseOfDll, # __in DWORD SizeOfDll # ); -def SymLoadModule64A(hProcess, hFile = None, ImageName = None, ModuleName = None, BaseOfDll = None, SizeOfDll = None): +def SymLoadModule64A(hProcess, hFile=None, ImageName=None, ModuleName=None, BaseOfDll=None, SizeOfDll=None): _SymLoadModule64 = windll.dbghelp.SymLoadModule64 _SymLoadModule64.argtypes = [HANDLE, HANDLE, LPSTR, LPSTR, DWORD64, DWORD] - _SymLoadModule64.restype = DWORD64 + _SymLoadModule64.restype = DWORD64 if not ImageName: ImageName = None @@ -444,9 +460,11 @@ def SymLoadModule64A(hProcess, hFile = None, ImageName = None, ModuleName = None raise ctypes.WinError(dwErrorCode) return lpBaseAddress + SymLoadModule64W = MakeWideVersion(SymLoadModule64A) SymLoadModule64 = GuessStringType(SymLoadModule64A, SymLoadModule64W) + # BOOL WINAPI SymUnloadModule( # __in HANDLE hProcess, # __in DWORD BaseOfDll @@ -454,10 +472,11 @@ def SymLoadModule64A(hProcess, hFile = None, ImageName = None, ModuleName = None def SymUnloadModule(hProcess, BaseOfDll): _SymUnloadModule = windll.dbghelp.SymUnloadModule _SymUnloadModule.argtypes = [HANDLE, DWORD] - _SymUnloadModule.restype = bool + _SymUnloadModule.restype = bool _SymUnloadModule.errcheck = RaiseIfZero _SymUnloadModule(hProcess, BaseOfDll) + # BOOL WINAPI SymUnloadModule64( # __in HANDLE hProcess, # __in DWORD64 BaseOfDll @@ -465,10 +484,11 @@ def SymUnloadModule(hProcess, BaseOfDll): def SymUnloadModule64(hProcess, BaseOfDll): _SymUnloadModule64 = windll.dbghelp.SymUnloadModule64 _SymUnloadModule64.argtypes = [HANDLE, DWORD64] - _SymUnloadModule64.restype = bool + _SymUnloadModule64.restype = bool _SymUnloadModule64.errcheck = RaiseIfZero _SymUnloadModule64(hProcess, BaseOfDll) + # BOOL WINAPI SymGetModuleInfo( # __in HANDLE hProcess, # __in DWORD dwAddr, @@ -477,7 +497,7 @@ def SymUnloadModule64(hProcess, BaseOfDll): def SymGetModuleInfoA(hProcess, dwAddr): _SymGetModuleInfo = windll.dbghelp.SymGetModuleInfo _SymGetModuleInfo.argtypes = [HANDLE, DWORD, PIMAGEHLP_MODULE] - _SymGetModuleInfo.restype = bool + _SymGetModuleInfo.restype = bool _SymGetModuleInfo.errcheck = RaiseIfZero ModuleInfo = IMAGEHLP_MODULE() @@ -485,10 +505,11 @@ def SymGetModuleInfoA(hProcess, dwAddr): _SymGetModuleInfo(hProcess, dwAddr, byref(ModuleInfo)) return ModuleInfo + def SymGetModuleInfoW(hProcess, dwAddr): _SymGetModuleInfoW = windll.dbghelp.SymGetModuleInfoW _SymGetModuleInfoW.argtypes = [HANDLE, DWORD, PIMAGEHLP_MODULEW] - _SymGetModuleInfoW.restype = bool + _SymGetModuleInfoW.restype = bool _SymGetModuleInfoW.errcheck = RaiseIfZero ModuleInfo = IMAGEHLP_MODULEW() @@ -496,8 +517,10 @@ def SymGetModuleInfoW(hProcess, dwAddr): _SymGetModuleInfoW(hProcess, dwAddr, byref(ModuleInfo)) return ModuleInfo + SymGetModuleInfo = GuessStringType(SymGetModuleInfoA, SymGetModuleInfoW) + # BOOL WINAPI SymGetModuleInfo64( # __in HANDLE hProcess, # __in DWORD64 dwAddr, @@ -506,7 +529,7 @@ def SymGetModuleInfoW(hProcess, dwAddr): def SymGetModuleInfo64A(hProcess, dwAddr): _SymGetModuleInfo64 = windll.dbghelp.SymGetModuleInfo64 _SymGetModuleInfo64.argtypes = [HANDLE, DWORD64, PIMAGEHLP_MODULE64] - _SymGetModuleInfo64.restype = bool + _SymGetModuleInfo64.restype = bool _SymGetModuleInfo64.errcheck = RaiseIfZero ModuleInfo = IMAGEHLP_MODULE64() @@ -514,10 +537,11 @@ def SymGetModuleInfo64A(hProcess, dwAddr): _SymGetModuleInfo64(hProcess, dwAddr, byref(ModuleInfo)) return ModuleInfo + def SymGetModuleInfo64W(hProcess, dwAddr): _SymGetModuleInfo64W = windll.dbghelp.SymGetModuleInfo64W _SymGetModuleInfo64W.argtypes = [HANDLE, DWORD64, PIMAGEHLP_MODULE64W] - _SymGetModuleInfo64W.restype = bool + _SymGetModuleInfo64W.restype = bool _SymGetModuleInfo64W.errcheck = RaiseIfZero ModuleInfo = IMAGEHLP_MODULE64W() @@ -525,6 +549,7 @@ def SymGetModuleInfo64W(hProcess, dwAddr): _SymGetModuleInfo64W(hProcess, dwAddr, byref(ModuleInfo)) return ModuleInfo + SymGetModuleInfo64 = GuessStringType(SymGetModuleInfo64A, SymGetModuleInfo64W) # BOOL CALLBACK SymEnumerateModulesProc( @@ -532,26 +557,27 @@ def SymGetModuleInfo64W(hProcess, dwAddr): # __in DWORD BaseOfDll, # __in_opt PVOID UserContext # ); -PSYM_ENUMMODULES_CALLBACK = WINFUNCTYPE(BOOL, LPSTR, DWORD, PVOID) -PSYM_ENUMMODULES_CALLBACKW = WINFUNCTYPE(BOOL, LPWSTR, DWORD, PVOID) +PSYM_ENUMMODULES_CALLBACK = WINFUNCTYPE(BOOL, LPSTR, DWORD, PVOID) +PSYM_ENUMMODULES_CALLBACKW = WINFUNCTYPE(BOOL, LPWSTR, DWORD, PVOID) # BOOL CALLBACK SymEnumerateModulesProc64( # __in PCTSTR ModuleName, # __in DWORD64 BaseOfDll, # __in_opt PVOID UserContext # ); -PSYM_ENUMMODULES_CALLBACK64 = WINFUNCTYPE(BOOL, LPSTR, DWORD64, PVOID) +PSYM_ENUMMODULES_CALLBACK64 = WINFUNCTYPE(BOOL, LPSTR, DWORD64, PVOID) PSYM_ENUMMODULES_CALLBACKW64 = WINFUNCTYPE(BOOL, LPWSTR, DWORD64, PVOID) + # BOOL WINAPI SymEnumerateModules( # __in HANDLE hProcess, # __in PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, # __in_opt PVOID UserContext # ); -def SymEnumerateModulesA(hProcess, EnumModulesCallback, UserContext = None): +def SymEnumerateModulesA(hProcess, EnumModulesCallback, UserContext=None): _SymEnumerateModules = windll.dbghelp.SymEnumerateModules _SymEnumerateModules.argtypes = [HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID] - _SymEnumerateModules.restype = bool + _SymEnumerateModules.restype = bool _SymEnumerateModules.errcheck = RaiseIfZero EnumModulesCallback = PSYM_ENUMMODULES_CALLBACK(EnumModulesCallback) @@ -561,10 +587,11 @@ def SymEnumerateModulesA(hProcess, EnumModulesCallback, UserContext = None): UserContext = LPVOID(NULL) _SymEnumerateModules(hProcess, EnumModulesCallback, UserContext) -def SymEnumerateModulesW(hProcess, EnumModulesCallback, UserContext = None): + +def SymEnumerateModulesW(hProcess, EnumModulesCallback, UserContext=None): _SymEnumerateModulesW = windll.dbghelp.SymEnumerateModulesW _SymEnumerateModulesW.argtypes = [HANDLE, PSYM_ENUMMODULES_CALLBACKW, PVOID] - _SymEnumerateModulesW.restype = bool + _SymEnumerateModulesW.restype = bool _SymEnumerateModulesW.errcheck = RaiseIfZero EnumModulesCallback = PSYM_ENUMMODULES_CALLBACKW(EnumModulesCallback) @@ -574,17 +601,19 @@ def SymEnumerateModulesW(hProcess, EnumModulesCallback, UserContext = None): UserContext = LPVOID(NULL) _SymEnumerateModulesW(hProcess, EnumModulesCallback, UserContext) + SymEnumerateModules = GuessStringType(SymEnumerateModulesA, SymEnumerateModulesW) + # BOOL WINAPI SymEnumerateModules64( # __in HANDLE hProcess, # __in PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, # __in_opt PVOID UserContext # ); -def SymEnumerateModules64A(hProcess, EnumModulesCallback, UserContext = None): +def SymEnumerateModules64A(hProcess, EnumModulesCallback, UserContext=None): _SymEnumerateModules64 = windll.dbghelp.SymEnumerateModules64 _SymEnumerateModules64.argtypes = [HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID] - _SymEnumerateModules64.restype = bool + _SymEnumerateModules64.restype = bool _SymEnumerateModules64.errcheck = RaiseIfZero EnumModulesCallback = PSYM_ENUMMODULES_CALLBACK64(EnumModulesCallback) @@ -594,10 +623,11 @@ def SymEnumerateModules64A(hProcess, EnumModulesCallback, UserContext = None): UserContext = LPVOID(NULL) _SymEnumerateModules64(hProcess, EnumModulesCallback, UserContext) -def SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext = None): + +def SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext=None): _SymEnumerateModules64W = windll.dbghelp.SymEnumerateModules64W _SymEnumerateModules64W.argtypes = [HANDLE, PSYM_ENUMMODULES_CALLBACK64W, PVOID] - _SymEnumerateModules64W.restype = bool + _SymEnumerateModules64W.restype = bool _SymEnumerateModules64W.errcheck = RaiseIfZero EnumModulesCallback = PSYM_ENUMMODULES_CALLBACK64W(EnumModulesCallback) @@ -607,6 +637,7 @@ def SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext = None): UserContext = LPVOID(NULL) _SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext) + SymEnumerateModules64 = GuessStringType(SymEnumerateModules64A, SymEnumerateModules64W) # BOOL CALLBACK SymEnumerateSymbolsProc( @@ -615,8 +646,8 @@ def SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext = None): # __in ULONG SymbolSize, # __in_opt PVOID UserContext # ); -PSYM_ENUMSYMBOLS_CALLBACK = WINFUNCTYPE(BOOL, LPSTR, DWORD, ULONG, PVOID) -PSYM_ENUMSYMBOLS_CALLBACKW = WINFUNCTYPE(BOOL, LPWSTR, DWORD, ULONG, PVOID) +PSYM_ENUMSYMBOLS_CALLBACK = WINFUNCTYPE(BOOL, LPSTR, DWORD, ULONG, PVOID) +PSYM_ENUMSYMBOLS_CALLBACKW = WINFUNCTYPE(BOOL, LPWSTR, DWORD, ULONG, PVOID) # BOOL CALLBACK SymEnumerateSymbolsProc64( # __in PCTSTR SymbolName, @@ -624,19 +655,20 @@ def SymEnumerateModules64W(hProcess, EnumModulesCallback, UserContext = None): # __in ULONG SymbolSize, # __in_opt PVOID UserContext # ); -PSYM_ENUMSYMBOLS_CALLBACK64 = WINFUNCTYPE(BOOL, LPSTR, DWORD64, ULONG, PVOID) +PSYM_ENUMSYMBOLS_CALLBACK64 = WINFUNCTYPE(BOOL, LPSTR, DWORD64, ULONG, PVOID) PSYM_ENUMSYMBOLS_CALLBACKW64 = WINFUNCTYPE(BOOL, LPWSTR, DWORD64, ULONG, PVOID) + # BOOL WINAPI SymEnumerateSymbols( # __in HANDLE hProcess, # __in ULONG BaseOfDll, # __in PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, # __in_opt PVOID UserContext # ); -def SymEnumerateSymbolsA(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = None): +def SymEnumerateSymbolsA(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None): _SymEnumerateSymbols = windll.dbghelp.SymEnumerateSymbols _SymEnumerateSymbols.argtypes = [HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID] - _SymEnumerateSymbols.restype = bool + _SymEnumerateSymbols.restype = bool _SymEnumerateSymbols.errcheck = RaiseIfZero EnumSymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK(EnumSymbolsCallback) @@ -646,10 +678,11 @@ def SymEnumerateSymbolsA(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = UserContext = LPVOID(NULL) _SymEnumerateSymbols(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext) -def SymEnumerateSymbolsW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = None): + +def SymEnumerateSymbolsW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None): _SymEnumerateSymbolsW = windll.dbghelp.SymEnumerateSymbolsW _SymEnumerateSymbolsW.argtypes = [HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID] - _SymEnumerateSymbolsW.restype = bool + _SymEnumerateSymbolsW.restype = bool _SymEnumerateSymbolsW.errcheck = RaiseIfZero EnumSymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACKW(EnumSymbolsCallback) @@ -659,18 +692,20 @@ def SymEnumerateSymbolsW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = UserContext = LPVOID(NULL) _SymEnumerateSymbolsW(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext) + SymEnumerateSymbols = GuessStringType(SymEnumerateSymbolsA, SymEnumerateSymbolsW) + # BOOL WINAPI SymEnumerateSymbols64( # __in HANDLE hProcess, # __in ULONG64 BaseOfDll, # __in PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, # __in_opt PVOID UserContext # ); -def SymEnumerateSymbols64A(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = None): +def SymEnumerateSymbols64A(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None): _SymEnumerateSymbols64 = windll.dbghelp.SymEnumerateSymbols64 _SymEnumerateSymbols64.argtypes = [HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID] - _SymEnumerateSymbols64.restype = bool + _SymEnumerateSymbols64.restype = bool _SymEnumerateSymbols64.errcheck = RaiseIfZero EnumSymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK64(EnumSymbolsCallback) @@ -680,10 +715,11 @@ def SymEnumerateSymbols64A(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext UserContext = LPVOID(NULL) _SymEnumerateSymbols64(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext) -def SymEnumerateSymbols64W(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext = None): + +def SymEnumerateSymbols64W(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext=None): _SymEnumerateSymbols64W = windll.dbghelp.SymEnumerateSymbols64W _SymEnumerateSymbols64W.argtypes = [HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID] - _SymEnumerateSymbols64W.restype = bool + _SymEnumerateSymbols64W.restype = bool _SymEnumerateSymbols64W.errcheck = RaiseIfZero EnumSymbolsCallback = PSYM_ENUMSYMBOLS_CALLBACK64W(EnumSymbolsCallback) @@ -693,38 +729,43 @@ def SymEnumerateSymbols64W(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext UserContext = LPVOID(NULL) _SymEnumerateSymbols64W(hProcess, BaseOfDll, EnumSymbolsCallback, UserContext) + SymEnumerateSymbols64 = GuessStringType(SymEnumerateSymbols64A, SymEnumerateSymbols64W) + # DWORD WINAPI UnDecorateSymbolName( # __in PCTSTR DecoratedName, # __out PTSTR UnDecoratedName, # __in DWORD UndecoratedLength, # __in DWORD Flags # ); -def UnDecorateSymbolNameA(DecoratedName, Flags = UNDNAME_COMPLETE): +def UnDecorateSymbolNameA(DecoratedName, Flags=UNDNAME_COMPLETE): _UnDecorateSymbolNameA = windll.dbghelp.UnDecorateSymbolName _UnDecorateSymbolNameA.argtypes = [LPSTR, LPSTR, DWORD, DWORD] - _UnDecorateSymbolNameA.restype = DWORD + _UnDecorateSymbolNameA.restype = DWORD _UnDecorateSymbolNameA.errcheck = RaiseIfZero UndecoratedLength = _UnDecorateSymbolNameA(DecoratedName, None, 0, Flags) - UnDecoratedName = ctypes.create_string_buffer('', UndecoratedLength + 1) + UnDecoratedName = ctypes.create_string_buffer("", UndecoratedLength + 1) _UnDecorateSymbolNameA(DecoratedName, UnDecoratedName, UndecoratedLength, Flags) return UnDecoratedName.value -def UnDecorateSymbolNameW(DecoratedName, Flags = UNDNAME_COMPLETE): + +def UnDecorateSymbolNameW(DecoratedName, Flags=UNDNAME_COMPLETE): _UnDecorateSymbolNameW = windll.dbghelp.UnDecorateSymbolNameW _UnDecorateSymbolNameW.argtypes = [LPWSTR, LPWSTR, DWORD, DWORD] - _UnDecorateSymbolNameW.restype = DWORD + _UnDecorateSymbolNameW.restype = DWORD _UnDecorateSymbolNameW.errcheck = RaiseIfZero UndecoratedLength = _UnDecorateSymbolNameW(DecoratedName, None, 0, Flags) - UnDecoratedName = ctypes.create_unicode_buffer(u'', UndecoratedLength + 1) + UnDecoratedName = ctypes.create_unicode_buffer("", UndecoratedLength + 1) _UnDecorateSymbolNameW(DecoratedName, UnDecoratedName, UndecoratedLength, Flags) return UnDecoratedName.value + UnDecorateSymbolName = GuessStringType(UnDecorateSymbolNameA, UnDecorateSymbolNameW) + # BOOL WINAPI SymGetSearchPath( # __in HANDLE hProcess, # __out PTSTR SearchPath, @@ -733,7 +774,7 @@ def UnDecorateSymbolNameW(DecoratedName, Flags = UNDNAME_COMPLETE): def SymGetSearchPathA(hProcess): _SymGetSearchPath = windll.dbghelp.SymGetSearchPath _SymGetSearchPath.argtypes = [HANDLE, LPSTR, DWORD] - _SymGetSearchPath.restype = bool + _SymGetSearchPath.restype = bool _SymGetSearchPath.errcheck = RaiseIfZero SearchPathLength = MAX_PATH @@ -741,43 +782,49 @@ def SymGetSearchPathA(hProcess): _SymGetSearchPath(hProcess, SearchPath, SearchPathLength) return SearchPath.value + def SymGetSearchPathW(hProcess): _SymGetSearchPathW = windll.dbghelp.SymGetSearchPathW _SymGetSearchPathW.argtypes = [HANDLE, LPWSTR, DWORD] - _SymGetSearchPathW.restype = bool + _SymGetSearchPathW.restype = bool _SymGetSearchPathW.errcheck = RaiseIfZero SearchPathLength = MAX_PATH - SearchPath = ctypes.create_unicode_buffer(u"", SearchPathLength) + SearchPath = ctypes.create_unicode_buffer("", SearchPathLength) _SymGetSearchPathW(hProcess, SearchPath, SearchPathLength) return SearchPath.value + SymGetSearchPath = GuessStringType(SymGetSearchPathA, SymGetSearchPathW) + # BOOL WINAPI SymSetSearchPath( # __in HANDLE hProcess, # __in_opt PCTSTR SearchPath # ); -def SymSetSearchPathA(hProcess, SearchPath = None): +def SymSetSearchPathA(hProcess, SearchPath=None): _SymSetSearchPath = windll.dbghelp.SymSetSearchPath _SymSetSearchPath.argtypes = [HANDLE, LPSTR] - _SymSetSearchPath.restype = bool + _SymSetSearchPath.restype = bool _SymSetSearchPath.errcheck = RaiseIfZero if not SearchPath: SearchPath = None _SymSetSearchPath(hProcess, SearchPath) -def SymSetSearchPathW(hProcess, SearchPath = None): + +def SymSetSearchPathW(hProcess, SearchPath=None): _SymSetSearchPathW = windll.dbghelp.SymSetSearchPathW _SymSetSearchPathW.argtypes = [HANDLE, LPWSTR] - _SymSetSearchPathW.restype = bool + _SymSetSearchPathW.restype = bool _SymSetSearchPathW.errcheck = RaiseIfZero if not SearchPath: SearchPath = None _SymSetSearchPathW(hProcess, SearchPath) + SymSetSearchPath = GuessStringType(SymSetSearchPathA, SymSetSearchPathW) + # PTCHAR WINAPI SymGetHomeDirectory( # __in DWORD type, # __out PTSTR dir, @@ -786,54 +833,59 @@ def SymSetSearchPathW(hProcess, SearchPath = None): def SymGetHomeDirectoryA(type): _SymGetHomeDirectoryA = windll.dbghelp.SymGetHomeDirectoryA _SymGetHomeDirectoryA.argtypes = [DWORD, LPSTR, SIZE_T] - _SymGetHomeDirectoryA.restype = LPSTR + _SymGetHomeDirectoryA.restype = LPSTR _SymGetHomeDirectoryA.errcheck = RaiseIfZero size = MAX_PATH - dir = ctypes.create_string_buffer("", size) + dir = ctypes.create_string_buffer("", size) _SymGetHomeDirectoryA(type, dir, size) return dir.value + def SymGetHomeDirectoryW(type): _SymGetHomeDirectoryW = windll.dbghelp.SymGetHomeDirectoryW _SymGetHomeDirectoryW.argtypes = [DWORD, LPWSTR, SIZE_T] - _SymGetHomeDirectoryW.restype = LPWSTR + _SymGetHomeDirectoryW.restype = LPWSTR _SymGetHomeDirectoryW.errcheck = RaiseIfZero size = MAX_PATH - dir = ctypes.create_unicode_buffer(u"", size) + dir = ctypes.create_unicode_buffer("", size) _SymGetHomeDirectoryW(type, dir, size) return dir.value + SymGetHomeDirectory = GuessStringType(SymGetHomeDirectoryA, SymGetHomeDirectoryW) + # PTCHAR WINAPI SymSetHomeDirectory( # __in HANDLE hProcess, # __in_opt PCTSTR dir # ); -def SymSetHomeDirectoryA(hProcess, dir = None): +def SymSetHomeDirectoryA(hProcess, dir=None): _SymSetHomeDirectoryA = windll.dbghelp.SymSetHomeDirectoryA _SymSetHomeDirectoryA.argtypes = [HANDLE, LPSTR] - _SymSetHomeDirectoryA.restype = LPSTR + _SymSetHomeDirectoryA.restype = LPSTR _SymSetHomeDirectoryA.errcheck = RaiseIfZero if not dir: dir = None _SymSetHomeDirectoryA(hProcess, dir) return dir -def SymSetHomeDirectoryW(hProcess, dir = None): + +def SymSetHomeDirectoryW(hProcess, dir=None): _SymSetHomeDirectoryW = windll.dbghelp.SymSetHomeDirectoryW _SymSetHomeDirectoryW.argtypes = [HANDLE, LPWSTR] - _SymSetHomeDirectoryW.restype = LPWSTR + _SymSetHomeDirectoryW.restype = LPWSTR _SymSetHomeDirectoryW.errcheck = RaiseIfZero if not dir: dir = None _SymSetHomeDirectoryW(hProcess, dir) return dir + SymSetHomeDirectory = GuessStringType(SymSetHomeDirectoryA, SymSetHomeDirectoryW) -#--- DbgHelp 5+ support, patch by Neitsa -------------------------------------- +# --- DbgHelp 5+ support, patch by Neitsa -------------------------------------- # XXX TODO # + use the GuessStringType decorator for ANSI/Wide versions @@ -843,56 +895,63 @@ def SymSetHomeDirectoryW(hProcess, dir = None): # ourselves with a default error code?) # /Mario -#maximum length of a symbol name +# maximum length of a symbol name MAX_SYM_NAME = 2000 + class SYM_INFO(Structure): _fields_ = [ - ("SizeOfStruct", ULONG), - ("TypeIndex", ULONG), - ("Reserved", ULONG64 * 2), - ("Index", ULONG), - ("Size", ULONG), - ("ModBase", ULONG64), - ("Flags", ULONG), - ("Value", ULONG64), - ("Address", ULONG64), - ("Register", ULONG), - ("Scope", ULONG), - ("Tag", ULONG), - ("NameLen", ULONG), - ("MaxNameLen", ULONG), - ("Name", CHAR * (MAX_SYM_NAME + 1)), + ("SizeOfStruct", ULONG), + ("TypeIndex", ULONG), + ("Reserved", ULONG64 * 2), + ("Index", ULONG), + ("Size", ULONG), + ("ModBase", ULONG64), + ("Flags", ULONG), + ("Value", ULONG64), + ("Address", ULONG64), + ("Register", ULONG), + ("Scope", ULONG), + ("Tag", ULONG), + ("NameLen", ULONG), + ("MaxNameLen", ULONG), + ("Name", CHAR * (MAX_SYM_NAME + 1)), ] + + PSYM_INFO = POINTER(SYM_INFO) + class SYM_INFOW(Structure): _fields_ = [ - ("SizeOfStruct", ULONG), - ("TypeIndex", ULONG), - ("Reserved", ULONG64 * 2), - ("Index", ULONG), - ("Size", ULONG), - ("ModBase", ULONG64), - ("Flags", ULONG), - ("Value", ULONG64), - ("Address", ULONG64), - ("Register", ULONG), - ("Scope", ULONG), - ("Tag", ULONG), - ("NameLen", ULONG), - ("MaxNameLen", ULONG), - ("Name", WCHAR * (MAX_SYM_NAME + 1)), + ("SizeOfStruct", ULONG), + ("TypeIndex", ULONG), + ("Reserved", ULONG64 * 2), + ("Index", ULONG), + ("Size", ULONG), + ("ModBase", ULONG64), + ("Flags", ULONG), + ("Value", ULONG64), + ("Address", ULONG64), + ("Register", ULONG), + ("Scope", ULONG), + ("Tag", ULONG), + ("NameLen", ULONG), + ("MaxNameLen", ULONG), + ("Name", WCHAR * (MAX_SYM_NAME + 1)), ] + + PSYM_INFOW = POINTER(SYM_INFOW) -#=============================================================================== + +# =============================================================================== # BOOL WINAPI SymFromName( # __in HANDLE hProcess, # __in PCTSTR Name, # __inout PSYMBOL_INFO Symbol # ); -#=============================================================================== +# =============================================================================== def SymFromName(hProcess, Name): _SymFromNameA = windll.dbghelp.SymFromName _SymFromNameA.argtypes = [HANDLE, LPSTR, PSYM_INFO] @@ -900,13 +959,14 @@ def SymFromName(hProcess, Name): _SymFromNameA.errcheck = RaiseIfZero SymInfo = SYM_INFO() - SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFO) in C. + SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFO) in C. SymInfo.MaxNameLen = MAX_SYM_NAME _SymFromNameA(hProcess, Name, byref(SymInfo)) return SymInfo + def SymFromNameW(hProcess, Name): _SymFromNameW = windll.dbghelp.SymFromNameW _SymFromNameW.argtypes = [HANDLE, LPWSTR, PSYM_INFOW] @@ -914,21 +974,22 @@ def SymFromNameW(hProcess, Name): _SymFromNameW.errcheck = RaiseIfZero SymInfo = SYM_INFOW() - SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFOW) in C. + SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFOW) in C. SymInfo.MaxNameLen = MAX_SYM_NAME _SymFromNameW(hProcess, Name, byref(SymInfo)) return SymInfo -#=============================================================================== + +# =============================================================================== # BOOL WINAPI SymFromAddr( # __in HANDLE hProcess, # __in DWORD64 Address, # __out_opt PDWORD64 Displacement, # __inout PSYMBOL_INFO Symbol # ); -#=============================================================================== +# =============================================================================== def SymFromAddr(hProcess, Address): _SymFromAddr = windll.dbghelp.SymFromAddr _SymFromAddr.argtypes = [HANDLE, DWORD64, PDWORD64, PSYM_INFO] @@ -936,7 +997,7 @@ def SymFromAddr(hProcess, Address): _SymFromAddr.errcheck = RaiseIfZero SymInfo = SYM_INFO() - SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFO) in C. + SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFO) in C. SymInfo.MaxNameLen = MAX_SYM_NAME Displacement = DWORD64(0) @@ -944,6 +1005,7 @@ def SymFromAddr(hProcess, Address): return (Displacement.value, SymInfo) + def SymFromAddrW(hProcess, Address): _SymFromAddr = windll.dbghelp.SymFromAddrW _SymFromAddr.argtypes = [HANDLE, DWORD64, PDWORD64, PSYM_INFOW] @@ -951,7 +1013,7 @@ def SymFromAddrW(hProcess, Address): _SymFromAddr.errcheck = RaiseIfZero SymInfo = SYM_INFOW() - SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFOW) in C. + SymInfo.SizeOfStruct = 88 # *don't modify*: sizeof(SYMBOL_INFOW) in C. SymInfo.MaxNameLen = MAX_SYM_NAME Displacement = DWORD64(0) @@ -959,7 +1021,8 @@ def SymFromAddrW(hProcess, Address): return (Displacement.value, SymInfo) -#=============================================================================== + +# =============================================================================== # typedef struct _IMAGEHLP_SYMBOL64 { # DWORD SizeOfStruct; # DWORD64 Address; @@ -968,19 +1031,22 @@ def SymFromAddrW(hProcess, Address): # DWORD MaxNameLength; # CHAR Name[1]; # } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; -#=============================================================================== -class IMAGEHLP_SYMBOL64 (Structure): +# =============================================================================== +class IMAGEHLP_SYMBOL64(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("Address", DWORD64), - ("Size", DWORD), - ("Flags", DWORD), - ("MaxNameLength", DWORD), - ("Name", CHAR * (MAX_SYM_NAME + 1)), + ("SizeOfStruct", DWORD), + ("Address", DWORD64), + ("Size", DWORD), + ("Flags", DWORD), + ("MaxNameLength", DWORD), + ("Name", CHAR * (MAX_SYM_NAME + 1)), ] + + PIMAGEHLP_SYMBOL64 = POINTER(IMAGEHLP_SYMBOL64) -#=============================================================================== + +# =============================================================================== # typedef struct _IMAGEHLP_SYMBOLW64 { # DWORD SizeOfStruct; # DWORD64 Address; @@ -989,26 +1055,29 @@ class IMAGEHLP_SYMBOL64 (Structure): # DWORD MaxNameLength; # WCHAR Name[1]; # } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64; -#=============================================================================== -class IMAGEHLP_SYMBOLW64 (Structure): +# =============================================================================== +class IMAGEHLP_SYMBOLW64(Structure): _fields_ = [ - ("SizeOfStruct", DWORD), - ("Address", DWORD64), - ("Size", DWORD), - ("Flags", DWORD), - ("MaxNameLength", DWORD), - ("Name", WCHAR * (MAX_SYM_NAME + 1)), + ("SizeOfStruct", DWORD), + ("Address", DWORD64), + ("Size", DWORD), + ("Flags", DWORD), + ("MaxNameLength", DWORD), + ("Name", WCHAR * (MAX_SYM_NAME + 1)), ] + + PIMAGEHLP_SYMBOLW64 = POINTER(IMAGEHLP_SYMBOLW64) -#=============================================================================== + +# =============================================================================== # BOOL WINAPI SymGetSymFromAddr64( # __in HANDLE hProcess, # __in DWORD64 Address, # __out_opt PDWORD64 Displacement, # __inout PIMAGEHLP_SYMBOL64 Symbol # ); -#=============================================================================== +# =============================================================================== def SymGetSymFromAddr64(hProcess, Address): _SymGetSymFromAddr64 = windll.dbghelp.SymGetSymFromAddr64 _SymGetSymFromAddr64.argtypes = [HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64] @@ -1016,7 +1085,7 @@ def SymGetSymFromAddr64(hProcess, Address): _SymGetSymFromAddr64.errcheck = RaiseIfZero imagehlp_symbol64 = IMAGEHLP_SYMBOL64() - imagehlp_symbol64.SizeOfStruct = 32 # *don't modify*: sizeof(IMAGEHLP_SYMBOL64) in C. + imagehlp_symbol64.SizeOfStruct = 32 # *don't modify*: sizeof(IMAGEHLP_SYMBOL64) in C. imagehlp_symbol64.MaxNameLen = MAX_SYM_NAME Displacement = DWORD64(0) @@ -1024,30 +1093,34 @@ def SymGetSymFromAddr64(hProcess, Address): return (Displacement.value, imagehlp_symbol64) -#TODO: check for the 'W' version of SymGetSymFromAddr64() +# TODO: check for the 'W' version of SymGetSymFromAddr64() -#=============================================================================== + +# =============================================================================== # typedef struct API_VERSION { # USHORT MajorVersion; # USHORT MinorVersion; # USHORT Revision; # USHORT Reserved; # } API_VERSION, *LPAPI_VERSION; -#=============================================================================== -class API_VERSION (Structure): +# =============================================================================== +class API_VERSION(Structure): _fields_ = [ - ("MajorVersion", USHORT), - ("MinorVersion", USHORT), - ("Revision", USHORT), - ("Reserved", USHORT), + ("MajorVersion", USHORT), + ("MinorVersion", USHORT), + ("Revision", USHORT), + ("Reserved", USHORT), ] + + PAPI_VERSION = POINTER(API_VERSION) LPAPI_VERSION = PAPI_VERSION -#=============================================================================== + +# =============================================================================== # LPAPI_VERSION WINAPI ImagehlpApiVersion(void); -#=============================================================================== +# =============================================================================== def ImagehlpApiVersion(): _ImagehlpApiVersion = windll.dbghelp.ImagehlpApiVersion _ImagehlpApiVersion.restype = LPAPI_VERSION @@ -1056,11 +1129,11 @@ def ImagehlpApiVersion(): return api_version.contents -#=============================================================================== +# =============================================================================== # LPAPI_VERSION WINAPI ImagehlpApiVersionEx( # __in LPAPI_VERSION AppVersion # ); -#=============================================================================== +# =============================================================================== def ImagehlpApiVersionEx(MajorVersion, MinorVersion, Revision): _ImagehlpApiVersionEx = windll.dbghelp.ImagehlpApiVersionEx _ImagehlpApiVersionEx.argtypes = [LPAPI_VERSION] @@ -1072,37 +1145,42 @@ def ImagehlpApiVersionEx(MajorVersion, MinorVersion, Revision): return ret_api_version.contents -#=============================================================================== + +# =============================================================================== # typedef enum { # AddrMode1616, # AddrMode1632, # AddrModeReal, # AddrModeFlat # } ADDRESS_MODE; -#=============================================================================== +# =============================================================================== AddrMode1616 = 0 AddrMode1632 = 1 AddrModeReal = 2 AddrModeFlat = 3 -ADDRESS_MODE = DWORD #needed for the size of an ADDRESS_MODE (see ADDRESS64) +ADDRESS_MODE = DWORD # needed for the size of an ADDRESS_MODE (see ADDRESS64) + -#=============================================================================== +# =============================================================================== # typedef struct _tagADDRESS64 { # DWORD64 Offset; # WORD Segment; # ADDRESS_MODE Mode; # } ADDRESS64, *LPADDRESS64; -#=============================================================================== -class ADDRESS64 (Structure): +# =============================================================================== +class ADDRESS64(Structure): _fields_ = [ - ("Offset", DWORD64), - ("Segment", WORD), - ("Mode", ADDRESS_MODE), #it's a member of the ADDRESS_MODE enum. + ("Offset", DWORD64), + ("Segment", WORD), + ("Mode", ADDRESS_MODE), # it's a member of the ADDRESS_MODE enum. ] + + LPADDRESS64 = POINTER(ADDRESS64) -#=============================================================================== + +# =============================================================================== # typedef struct _KDHELP64 { # DWORD64 Thread; # DWORD ThCallbackStack; @@ -1117,25 +1195,28 @@ class ADDRESS64 (Structure): # DWORD64 StackLimit; # DWORD64 Reserved[5]; # } KDHELP64, *PKDHELP64; -#=============================================================================== -class KDHELP64 (Structure): +# =============================================================================== +class KDHELP64(Structure): _fields_ = [ - ("Thread", DWORD64), - ("ThCallbackStack", DWORD), - ("ThCallbackBStore", DWORD), - ("NextCallback", DWORD), - ("FramePointer", DWORD), - ("KiCallUserMode", DWORD64), - ("KeUserCallbackDispatcher", DWORD64), - ("SystemRangeStart", DWORD64), - ("KiUserExceptionDispatcher", DWORD64), - ("StackBase", DWORD64), - ("StackLimit", DWORD64), - ("Reserved", DWORD64 * 5), + ("Thread", DWORD64), + ("ThCallbackStack", DWORD), + ("ThCallbackBStore", DWORD), + ("NextCallback", DWORD), + ("FramePointer", DWORD), + ("KiCallUserMode", DWORD64), + ("KeUserCallbackDispatcher", DWORD64), + ("SystemRangeStart", DWORD64), + ("KiUserExceptionDispatcher", DWORD64), + ("StackBase", DWORD64), + ("StackLimit", DWORD64), + ("Reserved", DWORD64 * 5), ] + + PKDHELP64 = POINTER(KDHELP64) -#=============================================================================== + +# =============================================================================== # typedef struct _tagSTACKFRAME64 { # ADDRESS64 AddrPC; # ADDRESS64 AddrReturn; @@ -1149,24 +1230,26 @@ class KDHELP64 (Structure): # DWORD64 Reserved[3]; # KDHELP64 KdHelp; # } STACKFRAME64, *LPSTACKFRAME64; -#=============================================================================== +# =============================================================================== class STACKFRAME64(Structure): _fields_ = [ - ("AddrPC", ADDRESS64), - ("AddrReturn", ADDRESS64), - ("AddrFrame", ADDRESS64), - ("AddrStack", ADDRESS64), - ("AddrBStore", ADDRESS64), - ("FuncTableEntry", PVOID), - ("Params", DWORD64 * 4), - ("Far", BOOL), - ("Virtual", BOOL), - ("Reserved", DWORD64 * 3), - ("KdHelp", KDHELP64), + ("AddrPC", ADDRESS64), + ("AddrReturn", ADDRESS64), + ("AddrFrame", ADDRESS64), + ("AddrStack", ADDRESS64), + ("AddrBStore", ADDRESS64), + ("FuncTableEntry", PVOID), + ("Params", DWORD64 * 4), + ("Far", BOOL), + ("Virtual", BOOL), + ("Reserved", DWORD64 * 3), + ("KdHelp", KDHELP64), ] + + LPSTACKFRAME64 = POINTER(STACKFRAME64) -#=============================================================================== +# =============================================================================== # BOOL CALLBACK ReadProcessMemoryProc64( # __in HANDLE hProcess, # __in DWORD64 lpBaseAddress, @@ -1174,39 +1257,40 @@ class STACKFRAME64(Structure): # __in DWORD nSize, # __out LPDWORD lpNumberOfBytesRead # ); -#=============================================================================== +# =============================================================================== PREAD_PROCESS_MEMORY_ROUTINE64 = WINFUNCTYPE(BOOL, HANDLE, DWORD64, PVOID, DWORD, LPDWORD) -#=============================================================================== +# =============================================================================== # PVOID CALLBACK FunctionTableAccessProc64( # __in HANDLE hProcess, # __in DWORD64 AddrBase # ); -#=============================================================================== +# =============================================================================== PFUNCTION_TABLE_ACCESS_ROUTINE64 = WINFUNCTYPE(PVOID, HANDLE, DWORD64) -#=============================================================================== +# =============================================================================== # DWORD64 CALLBACK GetModuleBaseProc64( # __in HANDLE hProcess, # __in DWORD64 Address # ); -#=============================================================================== +# =============================================================================== PGET_MODULE_BASE_ROUTINE64 = WINFUNCTYPE(DWORD64, HANDLE, DWORD64) -#=============================================================================== +# =============================================================================== # DWORD64 CALLBACK GetModuleBaseProc64( # __in HANDLE hProcess, # __in DWORD64 Address # ); -#=============================================================================== +# =============================================================================== PTRANSLATE_ADDRESS_ROUTINE64 = WINFUNCTYPE(DWORD64, HANDLE, DWORD64) # Valid machine types for StackWalk64 function -IMAGE_FILE_MACHINE_I386 = 0x014c #Intel x86 -IMAGE_FILE_MACHINE_IA64 = 0x0200 #Intel Itanium Processor Family (IPF) -IMAGE_FILE_MACHINE_AMD64 = 0x8664 #x64 (AMD64 or EM64T) +IMAGE_FILE_MACHINE_I386 = 0x014C # Intel x86 +IMAGE_FILE_MACHINE_IA64 = 0x0200 # Intel Itanium Processor Family (IPF) +IMAGE_FILE_MACHINE_AMD64 = 0x8664 # x64 (AMD64 or EM64T) + -#=============================================================================== +# =============================================================================== # BOOL WINAPI StackWalk64( # __in DWORD MachineType, # __in HANDLE hProcess, @@ -1218,18 +1302,30 @@ class STACKFRAME64(Structure): # __in_opt PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, # __in_opt PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress # ); -#=============================================================================== -def StackWalk64(MachineType, hProcess, hThread, StackFrame, - ContextRecord = None, ReadMemoryRoutine = None, - FunctionTableAccessRoutine = None, GetModuleBaseRoutine = None, - TranslateAddress = None): - +# =============================================================================== +def StackWalk64( + MachineType, + hProcess, + hThread, + StackFrame, + ContextRecord=None, + ReadMemoryRoutine=None, + FunctionTableAccessRoutine=None, + GetModuleBaseRoutine=None, + TranslateAddress=None, +): _StackWalk64 = windll.dbghelp.StackWalk64 - _StackWalk64.argtypes = [DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, - PREAD_PROCESS_MEMORY_ROUTINE64, - PFUNCTION_TABLE_ACCESS_ROUTINE64, - PGET_MODULE_BASE_ROUTINE64, - PTRANSLATE_ADDRESS_ROUTINE64] + _StackWalk64.argtypes = [ + DWORD, + HANDLE, + HANDLE, + LPSTACKFRAME64, + PVOID, + PREAD_PROCESS_MEMORY_ROUTINE64, + PFUNCTION_TABLE_ACCESS_ROUTINE64, + PGET_MODULE_BASE_ROUTINE64, + PTRANSLATE_ADDRESS_ROUTINE64, + ] _StackWalk64.restype = bool pReadMemoryRoutine = None @@ -1252,7 +1348,7 @@ def StackWalk64(MachineType, hProcess, hThread, StackFrame, pTranslateAddress = None if TranslateAddress: - pTranslateAddress = PTRANSLATE_ADDRESS_ROUTINE64(TranslateAddress) + pTranslateAddress = PTRANSLATE_ADDRESS_ROUTINE64(TranslateAddress) else: pTranslateAddress = ctypes.cast(None, PTRANSLATE_ADDRESS_ROUTINE64) @@ -1261,17 +1357,25 @@ def StackWalk64(MachineType, hProcess, hThread, StackFrame, ContextRecord = GetThreadContext(hThread, raw=True) pContextRecord = PCONTEXT(ContextRecord) - #this function *DOESN'T* set last error [GetLastError()] properly most of the time. - ret = _StackWalk64(MachineType, hProcess, hThread, byref(StackFrame), - pContextRecord, pReadMemoryRoutine, - pFunctionTableAccessRoutine, pGetModuleBaseRoutine, - pTranslateAddress) + # this function *DOESN'T* set last error [GetLastError()] properly most of the time. + ret = _StackWalk64( + MachineType, + hProcess, + hThread, + byref(StackFrame), + pContextRecord, + pReadMemoryRoutine, + pFunctionTableAccessRoutine, + pGetModuleBaseRoutine, + pTranslateAddress, + ) return ret -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py index 187e4294c..d38d6095a 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/defines.py @@ -41,17 +41,17 @@ import functools from winappdbg import compat -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # Some stuff from ctypes we'll be using very frequently. -addressof = ctypes.addressof -sizeof = ctypes.sizeof -SIZEOF = ctypes.sizeof -POINTER = ctypes.POINTER -Structure = ctypes.Structure -Union = ctypes.Union +addressof = ctypes.addressof +sizeof = ctypes.sizeof +SIZEOF = ctypes.sizeof +POINTER = ctypes.POINTER +Structure = ctypes.Structure +Union = ctypes.Union WINFUNCTYPE = ctypes.WINFUNCTYPE -windll = ctypes.windll +windll = ctypes.windll # The IronPython implementation of byref() was giving me problems, # so I'm replacing it with the slower pointer() function. @@ -73,7 +73,7 @@ class WinDllHook(object): def __getattr__(self, name): - if name.startswith('_'): + if name.startswith("_"): return object.__getattr__(self, name) return WinFuncHook(name) @@ -82,7 +82,7 @@ def __init__(self, name): self.__name = name def __getattr__(self, name): - if name.startswith('_'): + if name.startswith("_"): return object.__getattr__(self, name) return WinCallHook(self.__name, name) @@ -103,10 +103,10 @@ def __copy_attribute(self, attribute): pass def __call__(self, *argv): - self.__copy_attribute('argtypes') - self.__copy_attribute('restype') - self.__copy_attribute('errcheck') - print("-"*10) + self.__copy_attribute("argtypes") + self.__copy_attribute("restype") + self.__copy_attribute("errcheck") + print("-" * 10) print("%s ! %s %r" % (self.__dllname, self.__funcname, argv)) retval = self.__func(*argv) print("== %r" % (retval,)) @@ -114,13 +114,14 @@ def __call__(self, *argv): windll = WinDllHook() -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -def RaiseIfZero(result, func = None, arguments = ()): + +def RaiseIfZero(result, func=None, arguments=()): """ Error checking for most Win32 API calls. @@ -131,7 +132,8 @@ def RaiseIfZero(result, func = None, arguments = ()): raise ctypes.WinError() return result -def RaiseIfNotZero(result, func = None, arguments = ()): + +def RaiseIfNotZero(result, func=None, arguments=()): """ Error checking for some odd Win32 API calls. @@ -145,7 +147,8 @@ def RaiseIfNotZero(result, func = None, arguments = ()): raise ctypes.WinError() return result -def RaiseIfNotErrorSuccess(result, func = None, arguments = ()): + +def RaiseIfNotErrorSuccess(result, func=None, arguments=()): """ Error checking for Win32 Registry API calls. @@ -156,6 +159,7 @@ def RaiseIfNotErrorSuccess(result, func = None, arguments = ()): raise ctypes.WinError(result) return result + class GuessStringType(object): """ Decorator that guesses the correct version (A or W) to call @@ -181,8 +185,8 @@ class GuessStringType(object): """ # ANSI and Unicode types - t_ansi = type('') - t_unicode = type(u'') + t_ansi = type("") + t_unicode = type("") # Default is ANSI for Python 2.x t_default = t_ansi @@ -194,7 +198,7 @@ def __init__(self, fn_ansi, fn_unicode): @type fn_unicode: function @param fn_unicode: Unicode (wide) version of the API function to call. """ - self.fn_ansi = fn_ansi + self.fn_ansi = fn_ansi self.fn_unicode = fn_unicode # Copy the wrapped function attributes. @@ -212,13 +216,12 @@ def __init__(self, fn_ansi, fn_unicode): pass def __call__(self, *argv, **argd): - # Shortcut to self.t_ansi - t_ansi = self.t_ansi + t_ansi = self.t_ansi # Get the types of all arguments for the function - v_types = [ type(item) for item in argv ] - v_types.extend( [ type(value) for (key, value) in compat.iteritems(argd) ] ) + v_types = [type(item) for item in argv] + v_types.extend([type(value) for (key, value) in compat.iteritems(argd)]) # Get the appropriate function for the default type if self.t_default == t_ansi: @@ -228,7 +231,6 @@ def __call__(self, *argv, **argd): # If at least one argument is a Unicode string... if self.t_unicode in v_types: - # If al least one argument is an ANSI string, # convert all ANSI strings to Unicode if t_ansi in v_types: @@ -236,7 +238,7 @@ def __call__(self, *argv, **argd): for index in compat.xrange(len(argv)): if v_types[index] == t_ansi: argv[index] = compat.unicode(argv[index]) - for (key, value) in argd.items(): + for key, value in argd.items(): if type(value) == t_ansi: argd[key] = compat.unicode(value) @@ -246,13 +248,13 @@ def __call__(self, *argv, **argd): # If at least one argument is an ANSI string, # but there are no Unicode strings... elif t_ansi in v_types: - # Use the A version fn = self.fn_ansi # Call the function and return the result return fn(*argv, **argd) + class DefaultStringType(object): """ Decorator that uses the default version (A or W) to call @@ -273,7 +275,7 @@ def __init__(self, fn_ansi, fn_unicode): @type fn_unicode: function @param fn_unicode: Unicode (wide) version of the API function to call. """ - self.fn_ansi = fn_ansi + self.fn_ansi = fn_ansi self.fn_unicode = fn_unicode # Copy the wrapped function attributes. @@ -291,7 +293,6 @@ def __init__(self, fn_ansi, fn_unicode): pass def __call__(self, *argv, **argd): - # Get the appropriate function based on the default. if GuessStringType.t_default == GuessStringType.t_ansi: fn = self.fn_ansi @@ -301,6 +302,7 @@ def __call__(self, *argv, **argd): # Call the function and return the result return fn(*argv, **argd) + def MakeANSIVersion(fn): """ Decorator that generates an ANSI version of a Unicode (wide) only API call. @@ -308,12 +310,13 @@ def MakeANSIVersion(fn): @type fn: callable @param fn: Unicode (wide) version of the API function to call. """ + @functools.wraps(fn) def wrapper(*argv, **argd): - t_ansi = GuessStringType.t_ansi + t_ansi = GuessStringType.t_ansi t_unicode = GuessStringType.t_unicode - v_types = [ type(item) for item in argv ] - v_types.extend( [ type(value) for (key, value) in compat.iteritems(argd) ] ) + v_types = [type(item) for item in argv] + v_types.extend([type(value) for (key, value) in compat.iteritems(argd)]) if t_ansi in v_types: argv = list(argv) for index in compat.xrange(len(argv)): @@ -323,8 +326,10 @@ def wrapper(*argv, **argd): if type(value) == t_ansi: argd[key] = t_unicode(value) return fn(*argv, **argd) + return wrapper + def MakeWideVersion(fn): """ Decorator that generates a Unicode (wide) version of an ANSI only API call. @@ -332,12 +337,13 @@ def MakeWideVersion(fn): @type fn: callable @param fn: ANSI version of the API function to call. """ + @functools.wraps(fn) def wrapper(*argv, **argd): - t_ansi = GuessStringType.t_ansi + t_ansi = GuessStringType.t_ansi t_unicode = GuessStringType.t_unicode - v_types = [ type(item) for item in argv ] - v_types.extend( [ type(value) for (key, value) in compat.iteritems(argd) ] ) + v_types = [type(item) for item in argv] + v_types.extend([type(value) for (key, value) in compat.iteritems(argd)]) if t_unicode in v_types: argv = list(argv) for index in compat.xrange(len(argv)): @@ -347,143 +353,145 @@ def wrapper(*argv, **argd): if type(value) == t_unicode: argd[key] = t_ansi(value) return fn(*argv, **argd) + return wrapper -#--- Types -------------------------------------------------------------------- + +# --- Types -------------------------------------------------------------------- # http://msdn.microsoft.com/en-us/library/aa383751(v=vs.85).aspx # Map of basic C types to Win32 types -LPVOID = ctypes.c_void_p -CHAR = ctypes.c_char -WCHAR = ctypes.c_wchar -BYTE = ctypes.c_ubyte -SBYTE = ctypes.c_byte -WORD = ctypes.c_uint16 -SWORD = ctypes.c_int16 -DWORD = ctypes.c_uint32 -SDWORD = ctypes.c_int32 -QWORD = ctypes.c_uint64 -SQWORD = ctypes.c_int64 -SHORT = ctypes.c_short -USHORT = ctypes.c_ushort -INT = ctypes.c_int -UINT = ctypes.c_uint -LONG = ctypes.c_long -ULONG = ctypes.c_ulong -LONGLONG = ctypes.c_int64 # c_longlong -ULONGLONG = ctypes.c_uint64 # c_ulonglong -LPSTR = ctypes.c_char_p -LPWSTR = ctypes.c_wchar_p -INT8 = ctypes.c_int8 -INT16 = ctypes.c_int16 -INT32 = ctypes.c_int32 -INT64 = ctypes.c_int64 -UINT8 = ctypes.c_uint8 -UINT16 = ctypes.c_uint16 -UINT32 = ctypes.c_uint32 -UINT64 = ctypes.c_uint64 -LONG32 = ctypes.c_int32 -LONG64 = ctypes.c_int64 -ULONG32 = ctypes.c_uint32 -ULONG64 = ctypes.c_uint64 -DWORD32 = ctypes.c_uint32 -DWORD64 = ctypes.c_uint64 -BOOL = ctypes.c_int -FLOAT = ctypes.c_float +LPVOID = ctypes.c_void_p +CHAR = ctypes.c_char +WCHAR = ctypes.c_wchar +BYTE = ctypes.c_ubyte +SBYTE = ctypes.c_byte +WORD = ctypes.c_uint16 +SWORD = ctypes.c_int16 +DWORD = ctypes.c_uint32 +SDWORD = ctypes.c_int32 +QWORD = ctypes.c_uint64 +SQWORD = ctypes.c_int64 +SHORT = ctypes.c_short +USHORT = ctypes.c_ushort +INT = ctypes.c_int +UINT = ctypes.c_uint +LONG = ctypes.c_long +ULONG = ctypes.c_ulong +LONGLONG = ctypes.c_int64 # c_longlong +ULONGLONG = ctypes.c_uint64 # c_ulonglong +LPSTR = ctypes.c_char_p +LPWSTR = ctypes.c_wchar_p +INT8 = ctypes.c_int8 +INT16 = ctypes.c_int16 +INT32 = ctypes.c_int32 +INT64 = ctypes.c_int64 +UINT8 = ctypes.c_uint8 +UINT16 = ctypes.c_uint16 +UINT32 = ctypes.c_uint32 +UINT64 = ctypes.c_uint64 +LONG32 = ctypes.c_int32 +LONG64 = ctypes.c_int64 +ULONG32 = ctypes.c_uint32 +ULONG64 = ctypes.c_uint64 +DWORD32 = ctypes.c_uint32 +DWORD64 = ctypes.c_uint64 +BOOL = ctypes.c_int +FLOAT = ctypes.c_float # Map size_t to SIZE_T try: - SIZE_T = ctypes.c_size_t + SIZE_T = ctypes.c_size_t SSIZE_T = ctypes.c_ssize_t except AttributeError: # Size of a pointer - SIZE_T = {1:BYTE, 2:WORD, 4:DWORD, 8:QWORD}[sizeof(LPVOID)] - SSIZE_T = {1:SBYTE, 2:SWORD, 4:SDWORD, 8:SQWORD}[sizeof(LPVOID)] -PSIZE_T = POINTER(SIZE_T) + SIZE_T = {1: BYTE, 2: WORD, 4: DWORD, 8: QWORD}[sizeof(LPVOID)] + SSIZE_T = {1: SBYTE, 2: SWORD, 4: SDWORD, 8: SQWORD}[sizeof(LPVOID)] +PSIZE_T = POINTER(SIZE_T) # Not really pointers but pointer-sized integers -DWORD_PTR = SIZE_T -ULONG_PTR = SIZE_T -LONG_PTR = SIZE_T +DWORD_PTR = SIZE_T +ULONG_PTR = SIZE_T +LONG_PTR = SIZE_T # Other Win32 types, more may be added as needed -PVOID = LPVOID -PPVOID = POINTER(PVOID) -PSTR = LPSTR -PWSTR = LPWSTR -PCHAR = LPSTR -PWCHAR = LPWSTR -LPBYTE = POINTER(BYTE) -LPSBYTE = POINTER(SBYTE) -LPWORD = POINTER(WORD) -LPSWORD = POINTER(SWORD) -LPDWORD = POINTER(DWORD) -LPSDWORD = POINTER(SDWORD) -LPULONG = POINTER(ULONG) -LPLONG = POINTER(LONG) -PDWORD = LPDWORD -PDWORD_PTR = POINTER(DWORD_PTR) -PULONG = LPULONG -PLONG = LPLONG -CCHAR = CHAR -BOOLEAN = BYTE -PBOOL = POINTER(BOOL) -LPBOOL = PBOOL -TCHAR = CHAR # XXX ANSI by default? -UCHAR = BYTE -DWORDLONG = ULONGLONG -LPDWORD32 = POINTER(DWORD32) -LPULONG32 = POINTER(ULONG32) -LPDWORD64 = POINTER(DWORD64) -LPULONG64 = POINTER(ULONG64) -PDWORD32 = LPDWORD32 -PULONG32 = LPULONG32 -PDWORD64 = LPDWORD64 -PULONG64 = LPULONG64 -ATOM = WORD -HANDLE = LPVOID -PHANDLE = POINTER(HANDLE) -LPHANDLE = PHANDLE -HMODULE = HANDLE -HINSTANCE = HANDLE -HTASK = HANDLE -HKEY = HANDLE -PHKEY = POINTER(HKEY) -HDESK = HANDLE -HRSRC = HANDLE -HSTR = HANDLE -HWINSTA = HANDLE -HKL = HANDLE -HDWP = HANDLE -HFILE = HANDLE -HRESULT = LONG -HGLOBAL = HANDLE -HLOCAL = HANDLE -HGDIOBJ = HANDLE -HDC = HGDIOBJ -HRGN = HGDIOBJ -HBITMAP = HGDIOBJ -HPALETTE = HGDIOBJ -HPEN = HGDIOBJ -HBRUSH = HGDIOBJ -HMF = HGDIOBJ -HEMF = HGDIOBJ +PVOID = LPVOID +PPVOID = POINTER(PVOID) +PSTR = LPSTR +PWSTR = LPWSTR +PCHAR = LPSTR +PWCHAR = LPWSTR +LPBYTE = POINTER(BYTE) +LPSBYTE = POINTER(SBYTE) +LPWORD = POINTER(WORD) +LPSWORD = POINTER(SWORD) +LPDWORD = POINTER(DWORD) +LPSDWORD = POINTER(SDWORD) +LPULONG = POINTER(ULONG) +LPLONG = POINTER(LONG) +PDWORD = LPDWORD +PDWORD_PTR = POINTER(DWORD_PTR) +PULONG = LPULONG +PLONG = LPLONG +CCHAR = CHAR +BOOLEAN = BYTE +PBOOL = POINTER(BOOL) +LPBOOL = PBOOL +TCHAR = CHAR # XXX ANSI by default? +UCHAR = BYTE +DWORDLONG = ULONGLONG +LPDWORD32 = POINTER(DWORD32) +LPULONG32 = POINTER(ULONG32) +LPDWORD64 = POINTER(DWORD64) +LPULONG64 = POINTER(ULONG64) +PDWORD32 = LPDWORD32 +PULONG32 = LPULONG32 +PDWORD64 = LPDWORD64 +PULONG64 = LPULONG64 +ATOM = WORD +HANDLE = LPVOID +PHANDLE = POINTER(HANDLE) +LPHANDLE = PHANDLE +HMODULE = HANDLE +HINSTANCE = HANDLE +HTASK = HANDLE +HKEY = HANDLE +PHKEY = POINTER(HKEY) +HDESK = HANDLE +HRSRC = HANDLE +HSTR = HANDLE +HWINSTA = HANDLE +HKL = HANDLE +HDWP = HANDLE +HFILE = HANDLE +HRESULT = LONG +HGLOBAL = HANDLE +HLOCAL = HANDLE +HGDIOBJ = HANDLE +HDC = HGDIOBJ +HRGN = HGDIOBJ +HBITMAP = HGDIOBJ +HPALETTE = HGDIOBJ +HPEN = HGDIOBJ +HBRUSH = HGDIOBJ +HMF = HGDIOBJ +HEMF = HGDIOBJ HENHMETAFILE = HGDIOBJ -HMETAFILE = HGDIOBJ +HMETAFILE = HGDIOBJ HMETAFILEPICT = HGDIOBJ -HWND = HANDLE -NTSTATUS = LONG -PNTSTATUS = POINTER(NTSTATUS) -KAFFINITY = ULONG_PTR -RVA = DWORD -RVA64 = QWORD -WPARAM = DWORD -LPARAM = LPVOID -LRESULT = LPVOID +HWND = HANDLE +NTSTATUS = LONG +PNTSTATUS = POINTER(NTSTATUS) +KAFFINITY = ULONG_PTR +RVA = DWORD +RVA64 = QWORD +WPARAM = DWORD +LPARAM = LPVOID +LRESULT = LPVOID ACCESS_MASK = DWORD -REGSAM = ACCESS_MASK +REGSAM = ACCESS_MASK PACCESS_MASK = POINTER(ACCESS_MASK) -PREGSAM = POINTER(REGSAM) +PREGSAM = POINTER(REGSAM) # Since the SID is an opaque structure, let's treat its pointers as void* PSID = PVOID @@ -503,41 +511,47 @@ def wrapper(*argv, **argd): # XXX TODO + # typedef struct _FLOAT128 { # __int64 LowPart; # __int64 HighPart; # } FLOAT128; -class FLOAT128 (Structure): +class FLOAT128(Structure): _fields_ = [ - ("LowPart", QWORD), - ("HighPart", QWORD), + ("LowPart", QWORD), + ("HighPart", QWORD), ] + + PFLOAT128 = POINTER(FLOAT128) + # typedef struct DECLSPEC_ALIGN(16) _M128A { # ULONGLONG Low; # LONGLONG High; # } M128A, *PM128A; class M128A(Structure): _fields_ = [ - ("Low", ULONGLONG), - ("High", LONGLONG), + ("Low", ULONGLONG), + ("High", LONGLONG), ] + + PM128A = POINTER(M128A) -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- -NULL = None -INFINITE = -1 -TRUE = 1 -FALSE = 0 +NULL = None +INFINITE = -1 +TRUE = 1 +FALSE = 0 # http://blogs.msdn.com/oldnewthing/archive/2004/08/26/220873.aspx ANYSIZE_ARRAY = 1 # Invalid handle value is -1 casted to void pointer. try: - INVALID_HANDLE_VALUE = ctypes.c_void_p(-1).value #-1 #0xFFFFFFFF + INVALID_HANDLE_VALUE = ctypes.c_void_p(-1).value # -1 #0xFFFFFFFF except TypeError: if sizeof(ctypes.c_void_p) == 4: INVALID_HANDLE_VALUE = 0xFFFFFFFF @@ -546,126 +560,128 @@ class M128A(Structure): else: raise -MAX_MODULE_NAME32 = 255 -MAX_PATH = 260 +MAX_MODULE_NAME32 = 255 +MAX_PATH = 260 # Error codes # TODO maybe add more error codes? # if they're too many they could be pickled instead, # or at the very least put in a new file -ERROR_SUCCESS = 0 -ERROR_INVALID_FUNCTION = 1 -ERROR_FILE_NOT_FOUND = 2 -ERROR_PATH_NOT_FOUND = 3 -ERROR_ACCESS_DENIED = 5 -ERROR_INVALID_HANDLE = 6 -ERROR_NOT_ENOUGH_MEMORY = 8 -ERROR_INVALID_DRIVE = 15 -ERROR_NO_MORE_FILES = 18 -ERROR_BAD_LENGTH = 24 -ERROR_HANDLE_EOF = 38 -ERROR_HANDLE_DISK_FULL = 39 -ERROR_NOT_SUPPORTED = 50 -ERROR_FILE_EXISTS = 80 -ERROR_INVALID_PARAMETER = 87 -ERROR_BUFFER_OVERFLOW = 111 -ERROR_DISK_FULL = 112 -ERROR_CALL_NOT_IMPLEMENTED = 120 -ERROR_SEM_TIMEOUT = 121 -ERROR_INSUFFICIENT_BUFFER = 122 -ERROR_INVALID_NAME = 123 -ERROR_MOD_NOT_FOUND = 126 -ERROR_PROC_NOT_FOUND = 127 -ERROR_DIR_NOT_EMPTY = 145 -ERROR_BAD_THREADID_ADDR = 159 -ERROR_BAD_ARGUMENTS = 160 -ERROR_BAD_PATHNAME = 161 -ERROR_ALREADY_EXISTS = 183 -ERROR_INVALID_FLAG_NUMBER = 186 -ERROR_ENVVAR_NOT_FOUND = 203 -ERROR_FILENAME_EXCED_RANGE = 206 -ERROR_MORE_DATA = 234 - -WAIT_TIMEOUT = 258 - -ERROR_NO_MORE_ITEMS = 259 -ERROR_PARTIAL_COPY = 299 -ERROR_INVALID_ADDRESS = 487 -ERROR_THREAD_NOT_IN_PROCESS = 566 -ERROR_CONTROL_C_EXIT = 572 -ERROR_UNHANDLED_EXCEPTION = 574 -ERROR_ASSERTION_FAILURE = 668 -ERROR_WOW_ASSERTION = 670 - -ERROR_DBG_EXCEPTION_NOT_HANDLED = 688 -ERROR_DBG_REPLY_LATER = 689 -ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE = 690 -ERROR_DBG_TERMINATE_THREAD = 691 -ERROR_DBG_TERMINATE_PROCESS = 692 -ERROR_DBG_CONTROL_C = 693 -ERROR_DBG_PRINTEXCEPTION_C = 694 -ERROR_DBG_RIPEXCEPTION = 695 -ERROR_DBG_CONTROL_BREAK = 696 -ERROR_DBG_COMMAND_EXCEPTION = 697 -ERROR_DBG_EXCEPTION_HANDLED = 766 -ERROR_DBG_CONTINUE = 767 - -ERROR_ELEVATION_REQUIRED = 740 -ERROR_NOACCESS = 998 - -ERROR_CIRCULAR_DEPENDENCY = 1059 -ERROR_SERVICE_DOES_NOT_EXIST = 1060 -ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061 -ERROR_SERVICE_NOT_ACTIVE = 1062 +ERROR_SUCCESS = 0 +ERROR_INVALID_FUNCTION = 1 +ERROR_FILE_NOT_FOUND = 2 +ERROR_PATH_NOT_FOUND = 3 +ERROR_ACCESS_DENIED = 5 +ERROR_INVALID_HANDLE = 6 +ERROR_NOT_ENOUGH_MEMORY = 8 +ERROR_INVALID_DRIVE = 15 +ERROR_NO_MORE_FILES = 18 +ERROR_BAD_LENGTH = 24 +ERROR_HANDLE_EOF = 38 +ERROR_HANDLE_DISK_FULL = 39 +ERROR_NOT_SUPPORTED = 50 +ERROR_FILE_EXISTS = 80 +ERROR_INVALID_PARAMETER = 87 +ERROR_BUFFER_OVERFLOW = 111 +ERROR_DISK_FULL = 112 +ERROR_CALL_NOT_IMPLEMENTED = 120 +ERROR_SEM_TIMEOUT = 121 +ERROR_INSUFFICIENT_BUFFER = 122 +ERROR_INVALID_NAME = 123 +ERROR_MOD_NOT_FOUND = 126 +ERROR_PROC_NOT_FOUND = 127 +ERROR_DIR_NOT_EMPTY = 145 +ERROR_BAD_THREADID_ADDR = 159 +ERROR_BAD_ARGUMENTS = 160 +ERROR_BAD_PATHNAME = 161 +ERROR_ALREADY_EXISTS = 183 +ERROR_INVALID_FLAG_NUMBER = 186 +ERROR_ENVVAR_NOT_FOUND = 203 +ERROR_FILENAME_EXCED_RANGE = 206 +ERROR_MORE_DATA = 234 + +WAIT_TIMEOUT = 258 + +ERROR_NO_MORE_ITEMS = 259 +ERROR_PARTIAL_COPY = 299 +ERROR_INVALID_ADDRESS = 487 +ERROR_THREAD_NOT_IN_PROCESS = 566 +ERROR_CONTROL_C_EXIT = 572 +ERROR_UNHANDLED_EXCEPTION = 574 +ERROR_ASSERTION_FAILURE = 668 +ERROR_WOW_ASSERTION = 670 + +ERROR_DBG_EXCEPTION_NOT_HANDLED = 688 +ERROR_DBG_REPLY_LATER = 689 +ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE = 690 +ERROR_DBG_TERMINATE_THREAD = 691 +ERROR_DBG_TERMINATE_PROCESS = 692 +ERROR_DBG_CONTROL_C = 693 +ERROR_DBG_PRINTEXCEPTION_C = 694 +ERROR_DBG_RIPEXCEPTION = 695 +ERROR_DBG_CONTROL_BREAK = 696 +ERROR_DBG_COMMAND_EXCEPTION = 697 +ERROR_DBG_EXCEPTION_HANDLED = 766 +ERROR_DBG_CONTINUE = 767 + +ERROR_ELEVATION_REQUIRED = 740 +ERROR_NOACCESS = 998 + +ERROR_CIRCULAR_DEPENDENCY = 1059 +ERROR_SERVICE_DOES_NOT_EXIST = 1060 +ERROR_SERVICE_CANNOT_ACCEPT_CTRL = 1061 +ERROR_SERVICE_NOT_ACTIVE = 1062 ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = 1063 -ERROR_EXCEPTION_IN_SERVICE = 1064 -ERROR_DATABASE_DOES_NOT_EXIST = 1065 -ERROR_SERVICE_SPECIFIC_ERROR = 1066 -ERROR_PROCESS_ABORTED = 1067 -ERROR_SERVICE_DEPENDENCY_FAIL = 1068 -ERROR_SERVICE_LOGON_FAILED = 1069 -ERROR_SERVICE_START_HANG = 1070 -ERROR_INVALID_SERVICE_LOCK = 1071 -ERROR_SERVICE_MARKED_FOR_DELETE = 1072 -ERROR_SERVICE_EXISTS = 1073 -ERROR_ALREADY_RUNNING_LKG = 1074 -ERROR_SERVICE_DEPENDENCY_DELETED = 1075 -ERROR_BOOT_ALREADY_ACCEPTED = 1076 -ERROR_SERVICE_NEVER_STARTED = 1077 -ERROR_DUPLICATE_SERVICE_NAME = 1078 -ERROR_DIFFERENT_SERVICE_ACCOUNT = 1079 -ERROR_CANNOT_DETECT_DRIVER_FAILURE = 1080 -ERROR_CANNOT_DETECT_PROCESS_ABORT = 1081 -ERROR_NO_RECOVERY_PROGRAM = 1082 -ERROR_SERVICE_NOT_IN_EXE = 1083 -ERROR_NOT_SAFEBOOT_SERVICE = 1084 - -ERROR_DEBUGGER_INACTIVE = 1284 - -ERROR_PRIVILEGE_NOT_HELD = 1314 - -ERROR_NONE_MAPPED = 1332 - -RPC_S_SERVER_UNAVAILABLE = 1722 +ERROR_EXCEPTION_IN_SERVICE = 1064 +ERROR_DATABASE_DOES_NOT_EXIST = 1065 +ERROR_SERVICE_SPECIFIC_ERROR = 1066 +ERROR_PROCESS_ABORTED = 1067 +ERROR_SERVICE_DEPENDENCY_FAIL = 1068 +ERROR_SERVICE_LOGON_FAILED = 1069 +ERROR_SERVICE_START_HANG = 1070 +ERROR_INVALID_SERVICE_LOCK = 1071 +ERROR_SERVICE_MARKED_FOR_DELETE = 1072 +ERROR_SERVICE_EXISTS = 1073 +ERROR_ALREADY_RUNNING_LKG = 1074 +ERROR_SERVICE_DEPENDENCY_DELETED = 1075 +ERROR_BOOT_ALREADY_ACCEPTED = 1076 +ERROR_SERVICE_NEVER_STARTED = 1077 +ERROR_DUPLICATE_SERVICE_NAME = 1078 +ERROR_DIFFERENT_SERVICE_ACCOUNT = 1079 +ERROR_CANNOT_DETECT_DRIVER_FAILURE = 1080 +ERROR_CANNOT_DETECT_PROCESS_ABORT = 1081 +ERROR_NO_RECOVERY_PROGRAM = 1082 +ERROR_SERVICE_NOT_IN_EXE = 1083 +ERROR_NOT_SAFEBOOT_SERVICE = 1084 + +ERROR_DEBUGGER_INACTIVE = 1284 + +ERROR_PRIVILEGE_NOT_HELD = 1314 + +ERROR_NONE_MAPPED = 1332 + +RPC_S_SERVER_UNAVAILABLE = 1722 # Standard access rights import sys + if sys.version_info[0] >= 3: long = int -DELETE = long(0x00010000) -READ_CONTROL = long(0x00020000) -WRITE_DAC = long(0x00040000) -WRITE_OWNER = long(0x00080000) -SYNCHRONIZE = long(0x00100000) -STANDARD_RIGHTS_REQUIRED = long(0x000F0000) -STANDARD_RIGHTS_READ = READ_CONTROL -STANDARD_RIGHTS_WRITE = READ_CONTROL -STANDARD_RIGHTS_EXECUTE = READ_CONTROL -STANDARD_RIGHTS_ALL = long(0x001F0000) -SPECIFIC_RIGHTS_ALL = long(0x0000FFFF) +DELETE = long(0x00010000) +READ_CONTROL = long(0x00020000) +WRITE_DAC = long(0x00040000) +WRITE_OWNER = long(0x00080000) +SYNCHRONIZE = long(0x00100000) +STANDARD_RIGHTS_REQUIRED = long(0x000F0000) +STANDARD_RIGHTS_READ = READ_CONTROL +STANDARD_RIGHTS_WRITE = READ_CONTROL +STANDARD_RIGHTS_EXECUTE = READ_CONTROL +STANDARD_RIGHTS_ALL = long(0x001F0000) +SPECIFIC_RIGHTS_ALL = long(0x0000FFFF) + +# --- Structures --------------------------------------------------------------- -#--- Structures --------------------------------------------------------------- # typedef struct _LSA_UNICODE_STRING { # USHORT Length; @@ -677,11 +693,12 @@ class M128A(Structure): # *PUNICODE_STRING; class UNICODE_STRING(Structure): _fields_ = [ - ("Length", USHORT), - ("MaximumLength", USHORT), - ("Buffer", PVOID), + ("Length", USHORT), + ("MaximumLength", USHORT), + ("Buffer", PVOID), ] + # From MSDN: # # typedef struct _GUID { @@ -692,11 +709,12 @@ class UNICODE_STRING(Structure): # } GUID; class GUID(Structure): _fields_ = [ - ("Data1", DWORD), - ("Data2", WORD), - ("Data3", WORD), - ("Data4", BYTE * 8), -] + ("Data1", DWORD), + ("Data2", WORD), + ("Data3", WORD), + ("Data4", BYTE * 8), + ] + # From MSDN: # @@ -706,13 +724,14 @@ class GUID(Structure): # } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY; class LIST_ENTRY(Structure): _fields_ = [ - ("Flink", PVOID), # POINTER(LIST_ENTRY) - ("Blink", PVOID), # POINTER(LIST_ENTRY) -] + ("Flink", PVOID), # POINTER(LIST_ENTRY) + ("Blink", PVOID), # POINTER(LIST_ENTRY) + ] + -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) ##__all__ = [_x for _x in _all if not _x.startswith('_')] ##__all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py index c3b5e6ebc..77c5b1382 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/gdi32.py @@ -37,271 +37,272 @@ from winappdbg.win32.defines import * from winappdbg.win32.kernel32 import GetLastError, SetLastError -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- Helpers ------------------------------------------------------------------ +# --- Helpers ------------------------------------------------------------------ -#--- Types -------------------------------------------------------------------- +# --- Types -------------------------------------------------------------------- -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- # GDI object types -OBJ_PEN = 1 -OBJ_BRUSH = 2 -OBJ_DC = 3 -OBJ_METADC = 4 -OBJ_PAL = 5 -OBJ_FONT = 6 -OBJ_BITMAP = 7 -OBJ_REGION = 8 -OBJ_METAFILE = 9 -OBJ_MEMDC = 10 -OBJ_EXTPEN = 11 -OBJ_ENHMETADC = 12 -OBJ_ENHMETAFILE = 13 -OBJ_COLORSPACE = 14 -GDI_OBJ_LAST = OBJ_COLORSPACE +OBJ_PEN = 1 +OBJ_BRUSH = 2 +OBJ_DC = 3 +OBJ_METADC = 4 +OBJ_PAL = 5 +OBJ_FONT = 6 +OBJ_BITMAP = 7 +OBJ_REGION = 8 +OBJ_METAFILE = 9 +OBJ_MEMDC = 10 +OBJ_EXTPEN = 11 +OBJ_ENHMETADC = 12 +OBJ_ENHMETAFILE = 13 +OBJ_COLORSPACE = 14 +GDI_OBJ_LAST = OBJ_COLORSPACE # Ternary raster operations -SRCCOPY = 0x00CC0020 # dest = source -SRCPAINT = 0x00EE0086 # dest = source OR dest -SRCAND = 0x008800C6 # dest = source AND dest -SRCINVERT = 0x00660046 # dest = source XOR dest -SRCERASE = 0x00440328 # dest = source AND (NOT dest) -NOTSRCCOPY = 0x00330008 # dest = (NOT source) -NOTSRCERASE = 0x001100A6 # dest = (NOT src) AND (NOT dest) -MERGECOPY = 0x00C000CA # dest = (source AND pattern) -MERGEPAINT = 0x00BB0226 # dest = (NOT source) OR dest -PATCOPY = 0x00F00021 # dest = pattern -PATPAINT = 0x00FB0A09 # dest = DPSnoo -PATINVERT = 0x005A0049 # dest = pattern XOR dest -DSTINVERT = 0x00550009 # dest = (NOT dest) -BLACKNESS = 0x00000042 # dest = BLACK -WHITENESS = 0x00FF0062 # dest = WHITE -NOMIRRORBITMAP = 0x80000000 # Do not Mirror the bitmap in this call -CAPTUREBLT = 0x40000000 # Include layered windows +SRCCOPY = 0x00CC0020 # dest = source +SRCPAINT = 0x00EE0086 # dest = source OR dest +SRCAND = 0x008800C6 # dest = source AND dest +SRCINVERT = 0x00660046 # dest = source XOR dest +SRCERASE = 0x00440328 # dest = source AND (NOT dest) +NOTSRCCOPY = 0x00330008 # dest = (NOT source) +NOTSRCERASE = 0x001100A6 # dest = (NOT src) AND (NOT dest) +MERGECOPY = 0x00C000CA # dest = (source AND pattern) +MERGEPAINT = 0x00BB0226 # dest = (NOT source) OR dest +PATCOPY = 0x00F00021 # dest = pattern +PATPAINT = 0x00FB0A09 # dest = DPSnoo +PATINVERT = 0x005A0049 # dest = pattern XOR dest +DSTINVERT = 0x00550009 # dest = (NOT dest) +BLACKNESS = 0x00000042 # dest = BLACK +WHITENESS = 0x00FF0062 # dest = WHITE +NOMIRRORBITMAP = 0x80000000 # Do not Mirror the bitmap in this call +CAPTUREBLT = 0x40000000 # Include layered windows # Region flags -ERROR = 0 -NULLREGION = 1 -SIMPLEREGION = 2 -COMPLEXREGION = 3 -RGN_ERROR = ERROR +ERROR = 0 +NULLREGION = 1 +SIMPLEREGION = 2 +COMPLEXREGION = 3 +RGN_ERROR = ERROR # CombineRgn() styles -RGN_AND = 1 -RGN_OR = 2 -RGN_XOR = 3 -RGN_DIFF = 4 -RGN_COPY = 5 -RGN_MIN = RGN_AND -RGN_MAX = RGN_COPY +RGN_AND = 1 +RGN_OR = 2 +RGN_XOR = 3 +RGN_DIFF = 4 +RGN_COPY = 5 +RGN_MIN = RGN_AND +RGN_MAX = RGN_COPY # StretchBlt() modes -BLACKONWHITE = 1 -WHITEONBLACK = 2 -COLORONCOLOR = 3 -HALFTONE = 4 -MAXSTRETCHBLTMODE = 4 -STRETCH_ANDSCANS = BLACKONWHITE -STRETCH_ORSCANS = WHITEONBLACK +BLACKONWHITE = 1 +WHITEONBLACK = 2 +COLORONCOLOR = 3 +HALFTONE = 4 +MAXSTRETCHBLTMODE = 4 +STRETCH_ANDSCANS = BLACKONWHITE +STRETCH_ORSCANS = WHITEONBLACK STRETCH_DELETESCANS = COLORONCOLOR -STRETCH_HALFTONE = HALFTONE +STRETCH_HALFTONE = HALFTONE # PolyFill() modes -ALTERNATE = 1 -WINDING = 2 -POLYFILL_LAST = 2 +ALTERNATE = 1 +WINDING = 2 +POLYFILL_LAST = 2 # Layout orientation options -LAYOUT_RTL = 0x00000001 # Right to left -LAYOUT_BTT = 0x00000002 # Bottom to top -LAYOUT_VBH = 0x00000004 # Vertical before horizontal -LAYOUT_ORIENTATIONMASK = LAYOUT_RTL + LAYOUT_BTT + LAYOUT_VBH -LAYOUT_BITMAPORIENTATIONPRESERVED = 0x00000008 +LAYOUT_RTL = 0x00000001 # Right to left +LAYOUT_BTT = 0x00000002 # Bottom to top +LAYOUT_VBH = 0x00000004 # Vertical before horizontal +LAYOUT_ORIENTATIONMASK = LAYOUT_RTL + LAYOUT_BTT + LAYOUT_VBH +LAYOUT_BITMAPORIENTATIONPRESERVED = 0x00000008 # Stock objects -WHITE_BRUSH = 0 -LTGRAY_BRUSH = 1 -GRAY_BRUSH = 2 -DKGRAY_BRUSH = 3 -BLACK_BRUSH = 4 -NULL_BRUSH = 5 -HOLLOW_BRUSH = NULL_BRUSH -WHITE_PEN = 6 -BLACK_PEN = 7 -NULL_PEN = 8 -OEM_FIXED_FONT = 10 -ANSI_FIXED_FONT = 11 -ANSI_VAR_FONT = 12 -SYSTEM_FONT = 13 +WHITE_BRUSH = 0 +LTGRAY_BRUSH = 1 +GRAY_BRUSH = 2 +DKGRAY_BRUSH = 3 +BLACK_BRUSH = 4 +NULL_BRUSH = 5 +HOLLOW_BRUSH = NULL_BRUSH +WHITE_PEN = 6 +BLACK_PEN = 7 +NULL_PEN = 8 +OEM_FIXED_FONT = 10 +ANSI_FIXED_FONT = 11 +ANSI_VAR_FONT = 12 +SYSTEM_FONT = 13 DEVICE_DEFAULT_FONT = 14 -DEFAULT_PALETTE = 15 -SYSTEM_FIXED_FONT = 16 +DEFAULT_PALETTE = 15 +SYSTEM_FIXED_FONT = 16 # Metafile functions -META_SETBKCOLOR = 0x0201 -META_SETBKMODE = 0x0102 -META_SETMAPMODE = 0x0103 -META_SETROP2 = 0x0104 -META_SETRELABS = 0x0105 -META_SETPOLYFILLMODE = 0x0106 -META_SETSTRETCHBLTMODE = 0x0107 -META_SETTEXTCHAREXTRA = 0x0108 -META_SETTEXTCOLOR = 0x0209 -META_SETTEXTJUSTIFICATION = 0x020A -META_SETWINDOWORG = 0x020B -META_SETWINDOWEXT = 0x020C -META_SETVIEWPORTORG = 0x020D -META_SETVIEWPORTEXT = 0x020E -META_OFFSETWINDOWORG = 0x020F -META_SCALEWINDOWEXT = 0x0410 -META_OFFSETVIEWPORTORG = 0x0211 -META_SCALEVIEWPORTEXT = 0x0412 -META_LINETO = 0x0213 -META_MOVETO = 0x0214 -META_EXCLUDECLIPRECT = 0x0415 -META_INTERSECTCLIPRECT = 0x0416 -META_ARC = 0x0817 -META_ELLIPSE = 0x0418 -META_FLOODFILL = 0x0419 -META_PIE = 0x081A -META_RECTANGLE = 0x041B -META_ROUNDRECT = 0x061C -META_PATBLT = 0x061D -META_SAVEDC = 0x001E -META_SETPIXEL = 0x041F -META_OFFSETCLIPRGN = 0x0220 -META_TEXTOUT = 0x0521 -META_BITBLT = 0x0922 -META_STRETCHBLT = 0x0B23 -META_POLYGON = 0x0324 -META_POLYLINE = 0x0325 -META_ESCAPE = 0x0626 -META_RESTOREDC = 0x0127 -META_FILLREGION = 0x0228 -META_FRAMEREGION = 0x0429 -META_INVERTREGION = 0x012A -META_PAINTREGION = 0x012B -META_SELECTCLIPREGION = 0x012C -META_SELECTOBJECT = 0x012D -META_SETTEXTALIGN = 0x012E -META_CHORD = 0x0830 -META_SETMAPPERFLAGS = 0x0231 -META_EXTTEXTOUT = 0x0a32 -META_SETDIBTODEV = 0x0d33 -META_SELECTPALETTE = 0x0234 -META_REALIZEPALETTE = 0x0035 -META_ANIMATEPALETTE = 0x0436 -META_SETPALENTRIES = 0x0037 -META_POLYPOLYGON = 0x0538 -META_RESIZEPALETTE = 0x0139 -META_DIBBITBLT = 0x0940 -META_DIBSTRETCHBLT = 0x0b41 -META_DIBCREATEPATTERNBRUSH = 0x0142 -META_STRETCHDIB = 0x0f43 -META_EXTFLOODFILL = 0x0548 -META_SETLAYOUT = 0x0149 -META_DELETEOBJECT = 0x01f0 -META_CREATEPALETTE = 0x00f7 -META_CREATEPATTERNBRUSH = 0x01F9 -META_CREATEPENINDIRECT = 0x02FA -META_CREATEFONTINDIRECT = 0x02FB -META_CREATEBRUSHINDIRECT = 0x02FC -META_CREATEREGION = 0x06FF +META_SETBKCOLOR = 0x0201 +META_SETBKMODE = 0x0102 +META_SETMAPMODE = 0x0103 +META_SETROP2 = 0x0104 +META_SETRELABS = 0x0105 +META_SETPOLYFILLMODE = 0x0106 +META_SETSTRETCHBLTMODE = 0x0107 +META_SETTEXTCHAREXTRA = 0x0108 +META_SETTEXTCOLOR = 0x0209 +META_SETTEXTJUSTIFICATION = 0x020A +META_SETWINDOWORG = 0x020B +META_SETWINDOWEXT = 0x020C +META_SETVIEWPORTORG = 0x020D +META_SETVIEWPORTEXT = 0x020E +META_OFFSETWINDOWORG = 0x020F +META_SCALEWINDOWEXT = 0x0410 +META_OFFSETVIEWPORTORG = 0x0211 +META_SCALEVIEWPORTEXT = 0x0412 +META_LINETO = 0x0213 +META_MOVETO = 0x0214 +META_EXCLUDECLIPRECT = 0x0415 +META_INTERSECTCLIPRECT = 0x0416 +META_ARC = 0x0817 +META_ELLIPSE = 0x0418 +META_FLOODFILL = 0x0419 +META_PIE = 0x081A +META_RECTANGLE = 0x041B +META_ROUNDRECT = 0x061C +META_PATBLT = 0x061D +META_SAVEDC = 0x001E +META_SETPIXEL = 0x041F +META_OFFSETCLIPRGN = 0x0220 +META_TEXTOUT = 0x0521 +META_BITBLT = 0x0922 +META_STRETCHBLT = 0x0B23 +META_POLYGON = 0x0324 +META_POLYLINE = 0x0325 +META_ESCAPE = 0x0626 +META_RESTOREDC = 0x0127 +META_FILLREGION = 0x0228 +META_FRAMEREGION = 0x0429 +META_INVERTREGION = 0x012A +META_PAINTREGION = 0x012B +META_SELECTCLIPREGION = 0x012C +META_SELECTOBJECT = 0x012D +META_SETTEXTALIGN = 0x012E +META_CHORD = 0x0830 +META_SETMAPPERFLAGS = 0x0231 +META_EXTTEXTOUT = 0x0A32 +META_SETDIBTODEV = 0x0D33 +META_SELECTPALETTE = 0x0234 +META_REALIZEPALETTE = 0x0035 +META_ANIMATEPALETTE = 0x0436 +META_SETPALENTRIES = 0x0037 +META_POLYPOLYGON = 0x0538 +META_RESIZEPALETTE = 0x0139 +META_DIBBITBLT = 0x0940 +META_DIBSTRETCHBLT = 0x0B41 +META_DIBCREATEPATTERNBRUSH = 0x0142 +META_STRETCHDIB = 0x0F43 +META_EXTFLOODFILL = 0x0548 +META_SETLAYOUT = 0x0149 +META_DELETEOBJECT = 0x01F0 +META_CREATEPALETTE = 0x00F7 +META_CREATEPATTERNBRUSH = 0x01F9 +META_CREATEPENINDIRECT = 0x02FA +META_CREATEFONTINDIRECT = 0x02FB +META_CREATEBRUSHINDIRECT = 0x02FC +META_CREATEREGION = 0x06FF # Metafile escape codes -NEWFRAME = 1 -ABORTDOC = 2 -NEXTBAND = 3 -SETCOLORTABLE = 4 -GETCOLORTABLE = 5 -FLUSHOUTPUT = 6 -DRAFTMODE = 7 -QUERYESCSUPPORT = 8 -SETABORTPROC = 9 -STARTDOC = 10 -ENDDOC = 11 -GETPHYSPAGESIZE = 12 -GETPRINTINGOFFSET = 13 -GETSCALINGFACTOR = 14 -MFCOMMENT = 15 -GETPENWIDTH = 16 -SETCOPYCOUNT = 17 -SELECTPAPERSOURCE = 18 -DEVICEDATA = 19 -PASSTHROUGH = 19 -GETTECHNOLGY = 20 -GETTECHNOLOGY = 20 -SETLINECAP = 21 -SETLINEJOIN = 22 -SETMITERLIMIT = 23 -BANDINFO = 24 -DRAWPATTERNRECT = 25 -GETVECTORPENSIZE = 26 -GETVECTORBRUSHSIZE = 27 -ENABLEDUPLEX = 28 -GETSETPAPERBINS = 29 -GETSETPRINTORIENT = 30 -ENUMPAPERBINS = 31 -SETDIBSCALING = 32 -EPSPRINTING = 33 -ENUMPAPERMETRICS = 34 -GETSETPAPERMETRICS = 35 -POSTSCRIPT_DATA = 37 -POSTSCRIPT_IGNORE = 38 -MOUSETRAILS = 39 -GETDEVICEUNITS = 42 -GETEXTENDEDTEXTMETRICS = 256 -GETEXTENTTABLE = 257 -GETPAIRKERNTABLE = 258 -GETTRACKKERNTABLE = 259 -EXTTEXTOUT = 512 -GETFACENAME = 513 -DOWNLOADFACE = 514 -ENABLERELATIVEWIDTHS = 768 -ENABLEPAIRKERNING = 769 -SETKERNTRACK = 770 -SETALLJUSTVALUES = 771 -SETCHARSET = 772 -STRETCHBLT = 2048 -METAFILE_DRIVER = 2049 -GETSETSCREENPARAMS = 3072 -QUERYDIBSUPPORT = 3073 -BEGIN_PATH = 4096 -CLIP_TO_PATH = 4097 -END_PATH = 4098 -EXT_DEVICE_CAPS = 4099 -RESTORE_CTM = 4100 -SAVE_CTM = 4101 -SET_ARC_DIRECTION = 4102 -SET_BACKGROUND_COLOR = 4103 -SET_POLY_MODE = 4104 -SET_SCREEN_ANGLE = 4105 -SET_SPREAD = 4106 -TRANSFORM_CTM = 4107 -SET_CLIP_BOX = 4108 -SET_BOUNDS = 4109 -SET_MIRROR_MODE = 4110 -OPENCHANNEL = 4110 -DOWNLOADHEADER = 4111 -CLOSECHANNEL = 4112 -POSTSCRIPT_PASSTHROUGH = 4115 -ENCAPSULATED_POSTSCRIPT = 4116 -POSTSCRIPT_IDENTIFY = 4117 -POSTSCRIPT_INJECTION = 4118 -CHECKJPEGFORMAT = 4119 -CHECKPNGFORMAT = 4120 -GET_PS_FEATURESETTING = 4121 -GDIPLUS_TS_QUERYVER = 4122 -GDIPLUS_TS_RECORD = 4123 -SPCLPASSTHROUGH2 = 4568 - -#--- Structures --------------------------------------------------------------- +NEWFRAME = 1 +ABORTDOC = 2 +NEXTBAND = 3 +SETCOLORTABLE = 4 +GETCOLORTABLE = 5 +FLUSHOUTPUT = 6 +DRAFTMODE = 7 +QUERYESCSUPPORT = 8 +SETABORTPROC = 9 +STARTDOC = 10 +ENDDOC = 11 +GETPHYSPAGESIZE = 12 +GETPRINTINGOFFSET = 13 +GETSCALINGFACTOR = 14 +MFCOMMENT = 15 +GETPENWIDTH = 16 +SETCOPYCOUNT = 17 +SELECTPAPERSOURCE = 18 +DEVICEDATA = 19 +PASSTHROUGH = 19 +GETTECHNOLGY = 20 +GETTECHNOLOGY = 20 +SETLINECAP = 21 +SETLINEJOIN = 22 +SETMITERLIMIT = 23 +BANDINFO = 24 +DRAWPATTERNRECT = 25 +GETVECTORPENSIZE = 26 +GETVECTORBRUSHSIZE = 27 +ENABLEDUPLEX = 28 +GETSETPAPERBINS = 29 +GETSETPRINTORIENT = 30 +ENUMPAPERBINS = 31 +SETDIBSCALING = 32 +EPSPRINTING = 33 +ENUMPAPERMETRICS = 34 +GETSETPAPERMETRICS = 35 +POSTSCRIPT_DATA = 37 +POSTSCRIPT_IGNORE = 38 +MOUSETRAILS = 39 +GETDEVICEUNITS = 42 +GETEXTENDEDTEXTMETRICS = 256 +GETEXTENTTABLE = 257 +GETPAIRKERNTABLE = 258 +GETTRACKKERNTABLE = 259 +EXTTEXTOUT = 512 +GETFACENAME = 513 +DOWNLOADFACE = 514 +ENABLERELATIVEWIDTHS = 768 +ENABLEPAIRKERNING = 769 +SETKERNTRACK = 770 +SETALLJUSTVALUES = 771 +SETCHARSET = 772 +STRETCHBLT = 2048 +METAFILE_DRIVER = 2049 +GETSETSCREENPARAMS = 3072 +QUERYDIBSUPPORT = 3073 +BEGIN_PATH = 4096 +CLIP_TO_PATH = 4097 +END_PATH = 4098 +EXT_DEVICE_CAPS = 4099 +RESTORE_CTM = 4100 +SAVE_CTM = 4101 +SET_ARC_DIRECTION = 4102 +SET_BACKGROUND_COLOR = 4103 +SET_POLY_MODE = 4104 +SET_SCREEN_ANGLE = 4105 +SET_SPREAD = 4106 +TRANSFORM_CTM = 4107 +SET_CLIP_BOX = 4108 +SET_BOUNDS = 4109 +SET_MIRROR_MODE = 4110 +OPENCHANNEL = 4110 +DOWNLOADHEADER = 4111 +CLOSECHANNEL = 4112 +POSTSCRIPT_PASSTHROUGH = 4115 +ENCAPSULATED_POSTSCRIPT = 4116 +POSTSCRIPT_IDENTIFY = 4117 +POSTSCRIPT_INJECTION = 4118 +CHECKJPEGFORMAT = 4119 +CHECKPNGFORMAT = 4120 +GET_PS_FEATURESETTING = 4121 +GDIPLUS_TS_QUERYVER = 4122 +GDIPLUS_TS_RECORD = 4123 +SPCLPASSTHROUGH2 = 4568 + +# --- Structures --------------------------------------------------------------- + # typedef struct _RECT { # LONG left; @@ -311,26 +312,32 @@ # }RECT, *PRECT; class RECT(Structure): _fields_ = [ - ('left', LONG), - ('top', LONG), - ('right', LONG), - ('bottom', LONG), + ("left", LONG), + ("top", LONG), + ("right", LONG), + ("bottom", LONG), ] -PRECT = POINTER(RECT) + + +PRECT = POINTER(RECT) LPRECT = PRECT + # typedef struct tagPOINT { # LONG x; # LONG y; # } POINT; class POINT(Structure): _fields_ = [ - ('x', LONG), - ('y', LONG), + ("x", LONG), + ("y", LONG), ] -PPOINT = POINTER(POINT) + + +PPOINT = POINTER(POINT) LPPOINT = PPOINT + # typedef struct tagBITMAP { # LONG bmType; # LONG bmWidth; @@ -342,20 +349,23 @@ class POINT(Structure): # } BITMAP, *PBITMAP; class BITMAP(Structure): _fields_ = [ - ("bmType", LONG), - ("bmWidth", LONG), - ("bmHeight", LONG), - ("bmWidthBytes", LONG), - ("bmPlanes", WORD), - ("bmBitsPixel", WORD), - ("bmBits", LPVOID), + ("bmType", LONG), + ("bmWidth", LONG), + ("bmHeight", LONG), + ("bmWidthBytes", LONG), + ("bmPlanes", WORD), + ("bmBitsPixel", WORD), + ("bmBits", LPVOID), ] -PBITMAP = POINTER(BITMAP) + + +PBITMAP = POINTER(BITMAP) LPBITMAP = PBITMAP -#--- High level classes ------------------------------------------------------- +# --- High level classes ------------------------------------------------------- + +# --- gdi32.dll ---------------------------------------------------------------- -#--- gdi32.dll ---------------------------------------------------------------- # HDC GetDC( # __in HWND hWnd @@ -363,20 +373,22 @@ class BITMAP(Structure): def GetDC(hWnd): _GetDC = windll.gdi32.GetDC _GetDC.argtypes = [HWND] - _GetDC.restype = HDC + _GetDC.restype = HDC _GetDC.errcheck = RaiseIfZero return _GetDC(hWnd) + # HDC GetWindowDC( # __in HWND hWnd # ); def GetWindowDC(hWnd): _GetWindowDC = windll.gdi32.GetWindowDC _GetWindowDC.argtypes = [HWND] - _GetWindowDC.restype = HDC + _GetWindowDC.restype = HDC _GetWindowDC.errcheck = RaiseIfZero return _GetWindowDC(hWnd) + # int ReleaseDC( # __in HWND hWnd, # __in HDC hDC @@ -384,10 +396,11 @@ def GetWindowDC(hWnd): def ReleaseDC(hWnd, hDC): _ReleaseDC = windll.gdi32.ReleaseDC _ReleaseDC.argtypes = [HWND, HDC] - _ReleaseDC.restype = ctypes.c_int + _ReleaseDC.restype = ctypes.c_int _ReleaseDC.errcheck = RaiseIfZero _ReleaseDC(hWnd, hDC) + # HGDIOBJ SelectObject( # __in HDC hdc, # __in HGDIOBJ hgdiobj @@ -395,39 +408,42 @@ def ReleaseDC(hWnd, hDC): def SelectObject(hdc, hgdiobj): _SelectObject = windll.gdi32.SelectObject _SelectObject.argtypes = [HDC, HGDIOBJ] - _SelectObject.restype = HGDIOBJ + _SelectObject.restype = HGDIOBJ _SelectObject.errcheck = RaiseIfZero return _SelectObject(hdc, hgdiobj) + # HGDIOBJ GetStockObject( # __in int fnObject # ); def GetStockObject(fnObject): _GetStockObject = windll.gdi32.GetStockObject _GetStockObject.argtypes = [ctypes.c_int] - _GetStockObject.restype = HGDIOBJ + _GetStockObject.restype = HGDIOBJ _GetStockObject.errcheck = RaiseIfZero return _GetStockObject(fnObject) + # DWORD GetObjectType( # __in HGDIOBJ h # ); def GetObjectType(h): _GetObjectType = windll.gdi32.GetObjectType _GetObjectType.argtypes = [HGDIOBJ] - _GetObjectType.restype = DWORD + _GetObjectType.restype = DWORD _GetObjectType.errcheck = RaiseIfZero return _GetObjectType(h) + # int GetObject( # __in HGDIOBJ hgdiobj, # __in int cbBuffer, # __out LPVOID lpvObject # ); -def GetObject(hgdiobj, cbBuffer = None, lpvObject = None): +def GetObject(hgdiobj, cbBuffer=None, lpvObject=None): _GetObject = windll.gdi32.GetObject _GetObject.argtypes = [HGDIOBJ, ctypes.c_int, LPVOID] - _GetObject.restype = ctypes.c_int + _GetObject.restype = ctypes.c_int _GetObject.errcheck = RaiseIfZero # Both cbBuffer and lpvObject can be omitted, the correct @@ -440,38 +456,39 @@ def GetObject(hgdiobj, cbBuffer = None, lpvObject = None): lpvObject = ctypes.create_string_buffer("", cbBuffer) elif lpvObject is not None: cbBuffer = sizeof(lpvObject) - else: # most likely case, both are None + else: # most likely case, both are None t = GetObjectType(hgdiobj) - if t == OBJ_PEN: - cbBuffer = sizeof(LOGPEN) + if t == OBJ_PEN: + cbBuffer = sizeof(LOGPEN) lpvObject = LOGPEN() elif t == OBJ_BRUSH: - cbBuffer = sizeof(LOGBRUSH) + cbBuffer = sizeof(LOGBRUSH) lpvObject = LOGBRUSH() elif t == OBJ_PAL: - cbBuffer = _GetObject(hgdiobj, 0, None) + cbBuffer = _GetObject(hgdiobj, 0, None) lpvObject = (WORD * (cbBuffer // sizeof(WORD)))() elif t == OBJ_FONT: - cbBuffer = sizeof(LOGFONT) + cbBuffer = sizeof(LOGFONT) lpvObject = LOGFONT() elif t == OBJ_BITMAP: # try the two possible types of bitmap - cbBuffer = sizeof(DIBSECTION) + cbBuffer = sizeof(DIBSECTION) lpvObject = DIBSECTION() try: _GetObject(hgdiobj, cbBuffer, byref(lpvObject)) return lpvObject except WindowsError: - cbBuffer = sizeof(BITMAP) + cbBuffer = sizeof(BITMAP) lpvObject = BITMAP() elif t == OBJ_EXTPEN: - cbBuffer = sizeof(LOGEXTPEN) + cbBuffer = sizeof(LOGEXTPEN) lpvObject = LOGEXTPEN() else: - cbBuffer = _GetObject(hgdiobj, 0, None) + cbBuffer = _GetObject(hgdiobj, 0, None) lpvObject = ctypes.create_string_buffer("", cbBuffer) _GetObject(hgdiobj, cbBuffer, byref(lpvObject)) return lpvObject + # LONG GetBitmapBits( # __in HBITMAP hbmp, # __in LONG cbBuffer, @@ -480,28 +497,30 @@ def GetObject(hgdiobj, cbBuffer = None, lpvObject = None): def GetBitmapBits(hbmp): _GetBitmapBits = windll.gdi32.GetBitmapBits _GetBitmapBits.argtypes = [HBITMAP, LONG, LPVOID] - _GetBitmapBits.restype = LONG + _GetBitmapBits.restype = LONG _GetBitmapBits.errcheck = RaiseIfZero - bitmap = GetObject(hbmp, lpvObject = BITMAP()) + bitmap = GetObject(hbmp, lpvObject=BITMAP()) cbBuffer = bitmap.bmWidthBytes * bitmap.bmHeight - lpvBits = ctypes.create_string_buffer("", cbBuffer) + lpvBits = ctypes.create_string_buffer("", cbBuffer) _GetBitmapBits(hbmp, cbBuffer, byref(lpvBits)) return lpvBits.raw + # HBITMAP CreateBitmapIndirect( # __in const BITMAP *lpbm # ); def CreateBitmapIndirect(lpbm): _CreateBitmapIndirect = windll.gdi32.CreateBitmapIndirect _CreateBitmapIndirect.argtypes = [PBITMAP] - _CreateBitmapIndirect.restype = HBITMAP + _CreateBitmapIndirect.restype = HBITMAP _CreateBitmapIndirect.errcheck = RaiseIfZero return _CreateBitmapIndirect(lpbm) -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py index d0c0468f6..013a7c205 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/kernel32.py @@ -41,19 +41,20 @@ from winappdbg.win32 import context_i386 from winappdbg.win32 import context_amd64 -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -_all.add('version') -#============================================================================== +_all.add("version") +# ============================================================================== from winappdbg.win32.version import * -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + # This can't be defined in defines.py because it calls GetLastError(). -def RaiseIfLastError(result, func = None, arguments = ()): +def RaiseIfLastError(result, func=None, arguments=()): """ Error checking for Win32 API calls with no error-specific return value. @@ -69,11 +70,12 @@ def RaiseIfLastError(result, func = None, arguments = ()): raise ctypes.WinError(code) return result -#--- CONTEXT structure and constants ------------------------------------------ -ContextArchMask = 0x0FFF0000 # just guessing here! seems to work, though +# --- CONTEXT structure and constants ------------------------------------------ + +ContextArchMask = 0x0FFF0000 # just guessing here! seems to work, though -if arch == ARCH_I386: +if arch == ARCH_I386: from winappdbg.win32.context_i386 import * elif arch == ARCH_AMD64: if bits == 64: @@ -83,42 +85,42 @@ def RaiseIfLastError(result, func = None, arguments = ()): else: warnings.warn("Unknown or unsupported architecture: %s" % arch) -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- STILL_ACTIVE = 259 -WAIT_TIMEOUT = 0x102 -WAIT_FAILED = -1 -WAIT_OBJECT_0 = 0 +WAIT_TIMEOUT = 0x102 +WAIT_FAILED = -1 +WAIT_OBJECT_0 = 0 -EXCEPTION_NONCONTINUABLE = 0x1 # Noncontinuable exception -EXCEPTION_MAXIMUM_PARAMETERS = 15 # maximum number of exception parameters -MAXIMUM_WAIT_OBJECTS = 64 # Maximum number of wait objects -MAXIMUM_SUSPEND_COUNT = 0x7f # Maximum times thread can be suspended +EXCEPTION_NONCONTINUABLE = 0x1 # Noncontinuable exception +EXCEPTION_MAXIMUM_PARAMETERS = 15 # maximum number of exception parameters +MAXIMUM_WAIT_OBJECTS = 64 # Maximum number of wait objects +MAXIMUM_SUSPEND_COUNT = 0x7F # Maximum times thread can be suspended -FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100 -FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 +FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100 +FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 -GR_GDIOBJECTS = 0 +GR_GDIOBJECTS = 0 GR_USEROBJECTS = 1 PROCESS_NAME_NATIVE = 1 MAXINTATOM = 0xC000 -STD_INPUT_HANDLE = 0xFFFFFFF6 # (DWORD)-10 -STD_OUTPUT_HANDLE = 0xFFFFFFF5 # (DWORD)-11 -STD_ERROR_HANDLE = 0xFFFFFFF4 # (DWORD)-12 +STD_INPUT_HANDLE = 0xFFFFFFF6 # (DWORD)-10 +STD_OUTPUT_HANDLE = 0xFFFFFFF5 # (DWORD)-11 +STD_ERROR_HANDLE = 0xFFFFFFF4 # (DWORD)-12 ATTACH_PARENT_PROCESS = 0xFFFFFFFF # (DWORD)-1 # LoadLibraryEx constants -DONT_RESOLVE_DLL_REFERENCES = 0x00000001 -LOAD_LIBRARY_AS_DATAFILE = 0x00000002 -LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 -LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010 -LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020 -LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040 +DONT_RESOLVE_DLL_REFERENCES = 0x00000001 +LOAD_LIBRARY_AS_DATAFILE = 0x00000002 +LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008 +LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010 +LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020 +LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040 # SetSearchPathMode flags # TODO I couldn't find these constants :( @@ -127,82 +129,82 @@ def RaiseIfLastError(result, func = None, arguments = ()): ##BASE_SEARCH_PATH_PERMANENT = ??? # Console control events -CTRL_C_EVENT = 0 -CTRL_BREAK_EVENT = 1 -CTRL_CLOSE_EVENT = 2 -CTRL_LOGOFF_EVENT = 5 +CTRL_C_EVENT = 0 +CTRL_BREAK_EVENT = 1 +CTRL_CLOSE_EVENT = 2 +CTRL_LOGOFF_EVENT = 5 CTRL_SHUTDOWN_EVENT = 6 # Heap flags -HEAP_NO_SERIALIZE = 0x00000001 -HEAP_GENERATE_EXCEPTIONS = 0x00000004 -HEAP_ZERO_MEMORY = 0x00000008 -HEAP_CREATE_ENABLE_EXECUTE = 0x00040000 +HEAP_NO_SERIALIZE = 0x00000001 +HEAP_GENERATE_EXCEPTIONS = 0x00000004 +HEAP_ZERO_MEMORY = 0x00000008 +HEAP_CREATE_ENABLE_EXECUTE = 0x00040000 # Standard access rights -DELETE = long(0x00010000) -READ_CONTROL = long(0x00020000) -WRITE_DAC = long(0x00040000) -WRITE_OWNER = long(0x00080000) -SYNCHRONIZE = long(0x00100000) -STANDARD_RIGHTS_REQUIRED = long(0x000F0000) -STANDARD_RIGHTS_READ = (READ_CONTROL) -STANDARD_RIGHTS_WRITE = (READ_CONTROL) -STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) -STANDARD_RIGHTS_ALL = long(0x001F0000) -SPECIFIC_RIGHTS_ALL = long(0x0000FFFF) +DELETE = long(0x00010000) +READ_CONTROL = long(0x00020000) +WRITE_DAC = long(0x00040000) +WRITE_OWNER = long(0x00080000) +SYNCHRONIZE = long(0x00100000) +STANDARD_RIGHTS_REQUIRED = long(0x000F0000) +STANDARD_RIGHTS_READ = READ_CONTROL +STANDARD_RIGHTS_WRITE = READ_CONTROL +STANDARD_RIGHTS_EXECUTE = READ_CONTROL +STANDARD_RIGHTS_ALL = long(0x001F0000) +SPECIFIC_RIGHTS_ALL = long(0x0000FFFF) # Mutex access rights -MUTEX_ALL_ACCESS = 0x1F0001 +MUTEX_ALL_ACCESS = 0x1F0001 MUTEX_MODIFY_STATE = 1 # Event access rights -EVENT_ALL_ACCESS = 0x1F0003 +EVENT_ALL_ACCESS = 0x1F0003 EVENT_MODIFY_STATE = 2 # Semaphore access rights -SEMAPHORE_ALL_ACCESS = 0x1F0003 +SEMAPHORE_ALL_ACCESS = 0x1F0003 SEMAPHORE_MODIFY_STATE = 2 # Timer access rights -TIMER_ALL_ACCESS = 0x1F0003 +TIMER_ALL_ACCESS = 0x1F0003 TIMER_MODIFY_STATE = 2 -TIMER_QUERY_STATE = 1 +TIMER_QUERY_STATE = 1 # Process access rights for OpenProcess -PROCESS_TERMINATE = 0x0001 -PROCESS_CREATE_THREAD = 0x0002 -PROCESS_SET_SESSIONID = 0x0004 -PROCESS_VM_OPERATION = 0x0008 -PROCESS_VM_READ = 0x0010 -PROCESS_VM_WRITE = 0x0020 -PROCESS_DUP_HANDLE = 0x0040 -PROCESS_CREATE_PROCESS = 0x0080 -PROCESS_SET_QUOTA = 0x0100 -PROCESS_SET_INFORMATION = 0x0200 -PROCESS_QUERY_INFORMATION = 0x0400 -PROCESS_SUSPEND_RESUME = 0x0800 +PROCESS_TERMINATE = 0x0001 +PROCESS_CREATE_THREAD = 0x0002 +PROCESS_SET_SESSIONID = 0x0004 +PROCESS_VM_OPERATION = 0x0008 +PROCESS_VM_READ = 0x0010 +PROCESS_VM_WRITE = 0x0020 +PROCESS_DUP_HANDLE = 0x0040 +PROCESS_CREATE_PROCESS = 0x0080 +PROCESS_SET_QUOTA = 0x0100 +PROCESS_SET_INFORMATION = 0x0200 +PROCESS_QUERY_INFORMATION = 0x0400 +PROCESS_SUSPEND_RESUME = 0x0800 PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 # Thread access rights for OpenThread -THREAD_TERMINATE = 0x0001 -THREAD_SUSPEND_RESUME = 0x0002 -THREAD_ALERT = 0x0004 -THREAD_GET_CONTEXT = 0x0008 -THREAD_SET_CONTEXT = 0x0010 -THREAD_SET_INFORMATION = 0x0020 -THREAD_QUERY_INFORMATION = 0x0040 -THREAD_SET_THREAD_TOKEN = 0x0080 -THREAD_IMPERSONATE = 0x0100 -THREAD_DIRECT_IMPERSONATION = 0x0200 -THREAD_SET_LIMITED_INFORMATION = 0x0400 +THREAD_TERMINATE = 0x0001 +THREAD_SUSPEND_RESUME = 0x0002 +THREAD_ALERT = 0x0004 +THREAD_GET_CONTEXT = 0x0008 +THREAD_SET_CONTEXT = 0x0010 +THREAD_SET_INFORMATION = 0x0020 +THREAD_QUERY_INFORMATION = 0x0040 +THREAD_SET_THREAD_TOKEN = 0x0080 +THREAD_IMPERSONATE = 0x0100 +THREAD_DIRECT_IMPERSONATION = 0x0200 +THREAD_SET_LIMITED_INFORMATION = 0x0400 THREAD_QUERY_LIMITED_INFORMATION = 0x0800 # The values of PROCESS_ALL_ACCESS and THREAD_ALL_ACCESS were changed in Vista/2008 -PROCESS_ALL_ACCESS_NT = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) -PROCESS_ALL_ACCESS_VISTA = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) -THREAD_ALL_ACCESS_NT = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF) -THREAD_ALL_ACCESS_VISTA = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF) +PROCESS_ALL_ACCESS_NT = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF +PROCESS_ALL_ACCESS_VISTA = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF +THREAD_ALL_ACCESS_NT = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF +THREAD_ALL_ACCESS_VISTA = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF if NTDDI_VERSION < NTDDI_VISTA: PROCESS_ALL_ACCESS = PROCESS_ALL_ACCESS_NT THREAD_ALL_ACCESS = THREAD_ALL_ACCESS_NT @@ -212,295 +214,291 @@ def RaiseIfLastError(result, func = None, arguments = ()): # Process priority classes -IDLE_PRIORITY_CLASS = 0x00000040 +IDLE_PRIORITY_CLASS = 0x00000040 BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 -NORMAL_PRIORITY_CLASS = 0x00000020 +NORMAL_PRIORITY_CLASS = 0x00000020 ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000 -HIGH_PRIORITY_CLASS = 0x00000080 -REALTIME_PRIORITY_CLASS = 0x00000100 +HIGH_PRIORITY_CLASS = 0x00000080 +REALTIME_PRIORITY_CLASS = 0x00000100 -PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 -PROCESS_MODE_BACKGROUND_END = 0x00200000 +PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 +PROCESS_MODE_BACKGROUND_END = 0x00200000 # dwCreationFlag values -DEBUG_PROCESS = 0x00000001 -DEBUG_ONLY_THIS_PROCESS = 0x00000002 -CREATE_SUSPENDED = 0x00000004 # Threads and processes -DETACHED_PROCESS = 0x00000008 -CREATE_NEW_CONSOLE = 0x00000010 -NORMAL_PRIORITY_CLASS = 0x00000020 -IDLE_PRIORITY_CLASS = 0x00000040 -HIGH_PRIORITY_CLASS = 0x00000080 -REALTIME_PRIORITY_CLASS = 0x00000100 -CREATE_NEW_PROCESS_GROUP = 0x00000200 -CREATE_UNICODE_ENVIRONMENT = 0x00000400 -CREATE_SEPARATE_WOW_VDM = 0x00000800 -CREATE_SHARED_WOW_VDM = 0x00001000 -CREATE_FORCEDOS = 0x00002000 -BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 -ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000 -INHERIT_PARENT_AFFINITY = 0x00010000 -STACK_SIZE_PARAM_IS_A_RESERVATION = 0x00010000 # Threads only -INHERIT_CALLER_PRIORITY = 0x00020000 # Deprecated -CREATE_PROTECTED_PROCESS = 0x00040000 -EXTENDED_STARTUPINFO_PRESENT = 0x00080000 -PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 -PROCESS_MODE_BACKGROUND_END = 0x00200000 -CREATE_BREAKAWAY_FROM_JOB = 0x01000000 -CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 -CREATE_DEFAULT_ERROR_MODE = 0x04000000 -CREATE_NO_WINDOW = 0x08000000 -PROFILE_USER = 0x10000000 -PROFILE_KERNEL = 0x20000000 -PROFILE_SERVER = 0x40000000 -CREATE_IGNORE_SYSTEM_DEFAULT = 0x80000000 +DEBUG_PROCESS = 0x00000001 +DEBUG_ONLY_THIS_PROCESS = 0x00000002 +CREATE_SUSPENDED = 0x00000004 # Threads and processes +DETACHED_PROCESS = 0x00000008 +CREATE_NEW_CONSOLE = 0x00000010 +NORMAL_PRIORITY_CLASS = 0x00000020 +IDLE_PRIORITY_CLASS = 0x00000040 +HIGH_PRIORITY_CLASS = 0x00000080 +REALTIME_PRIORITY_CLASS = 0x00000100 +CREATE_NEW_PROCESS_GROUP = 0x00000200 +CREATE_UNICODE_ENVIRONMENT = 0x00000400 +CREATE_SEPARATE_WOW_VDM = 0x00000800 +CREATE_SHARED_WOW_VDM = 0x00001000 +CREATE_FORCEDOS = 0x00002000 +BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 +ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000 +INHERIT_PARENT_AFFINITY = 0x00010000 +STACK_SIZE_PARAM_IS_A_RESERVATION = 0x00010000 # Threads only +INHERIT_CALLER_PRIORITY = 0x00020000 # Deprecated +CREATE_PROTECTED_PROCESS = 0x00040000 +EXTENDED_STARTUPINFO_PRESENT = 0x00080000 +PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 +PROCESS_MODE_BACKGROUND_END = 0x00200000 +CREATE_BREAKAWAY_FROM_JOB = 0x01000000 +CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 +CREATE_DEFAULT_ERROR_MODE = 0x04000000 +CREATE_NO_WINDOW = 0x08000000 +PROFILE_USER = 0x10000000 +PROFILE_KERNEL = 0x20000000 +PROFILE_SERVER = 0x40000000 +CREATE_IGNORE_SYSTEM_DEFAULT = 0x80000000 # Thread priority values -THREAD_BASE_PRIORITY_LOWRT = 15 # value that gets a thread to LowRealtime-1 -THREAD_BASE_PRIORITY_MAX = 2 # maximum thread base priority boost -THREAD_BASE_PRIORITY_MIN = (-2) # minimum thread base priority boost -THREAD_BASE_PRIORITY_IDLE = (-15) # value that gets a thread to idle +THREAD_BASE_PRIORITY_LOWRT = 15 # value that gets a thread to LowRealtime-1 +THREAD_BASE_PRIORITY_MAX = 2 # maximum thread base priority boost +THREAD_BASE_PRIORITY_MIN = -2 # minimum thread base priority boost +THREAD_BASE_PRIORITY_IDLE = -15 # value that gets a thread to idle -THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN -THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST+1) -THREAD_PRIORITY_NORMAL = 0 -THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX -THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST-1) -THREAD_PRIORITY_ERROR_RETURN = long(0xFFFFFFFF) +THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN +THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST + 1 +THREAD_PRIORITY_NORMAL = 0 +THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX +THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST - 1 +THREAD_PRIORITY_ERROR_RETURN = long(0xFFFFFFFF) -THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT -THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE +THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT +THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE # Memory access -SECTION_QUERY = 0x0001 -SECTION_MAP_WRITE = 0x0002 -SECTION_MAP_READ = 0x0004 -SECTION_MAP_EXECUTE = 0x0008 -SECTION_EXTEND_SIZE = 0x0010 -SECTION_MAP_EXECUTE_EXPLICIT = 0x0020 # not included in SECTION_ALL_ACCESS - -SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ - SECTION_MAP_WRITE | \ - SECTION_MAP_READ | \ - SECTION_MAP_EXECUTE | \ - SECTION_EXTEND_SIZE) -PAGE_NOACCESS = 0x01 -PAGE_READONLY = 0x02 -PAGE_READWRITE = 0x04 -PAGE_WRITECOPY = 0x08 -PAGE_EXECUTE = 0x10 -PAGE_EXECUTE_READ = 0x20 +SECTION_QUERY = 0x0001 +SECTION_MAP_WRITE = 0x0002 +SECTION_MAP_READ = 0x0004 +SECTION_MAP_EXECUTE = 0x0008 +SECTION_EXTEND_SIZE = 0x0010 +SECTION_MAP_EXECUTE_EXPLICIT = 0x0020 # not included in SECTION_ALL_ACCESS + +SECTION_ALL_ACCESS = ( + STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE +) +PAGE_NOACCESS = 0x01 +PAGE_READONLY = 0x02 +PAGE_READWRITE = 0x04 +PAGE_WRITECOPY = 0x08 +PAGE_EXECUTE = 0x10 +PAGE_EXECUTE_READ = 0x20 PAGE_EXECUTE_READWRITE = 0x40 PAGE_EXECUTE_WRITECOPY = 0x80 -PAGE_GUARD = 0x100 -PAGE_NOCACHE = 0x200 -PAGE_WRITECOMBINE = 0x400 -MEM_COMMIT = 0x1000 -MEM_RESERVE = 0x2000 -MEM_DECOMMIT = 0x4000 -MEM_RELEASE = 0x8000 -MEM_FREE = 0x10000 -MEM_PRIVATE = 0x20000 -MEM_MAPPED = 0x40000 -MEM_RESET = 0x80000 -MEM_TOP_DOWN = 0x100000 -MEM_WRITE_WATCH = 0x200000 -MEM_PHYSICAL = 0x400000 -MEM_LARGE_PAGES = 0x20000000 -MEM_4MB_PAGES = 0x80000000 -SEC_FILE = 0x800000 -SEC_IMAGE = 0x1000000 -SEC_RESERVE = 0x4000000 -SEC_COMMIT = 0x8000000 -SEC_NOCACHE = 0x10000000 -SEC_LARGE_PAGES = 0x80000000 -MEM_IMAGE = SEC_IMAGE +PAGE_GUARD = 0x100 +PAGE_NOCACHE = 0x200 +PAGE_WRITECOMBINE = 0x400 +MEM_COMMIT = 0x1000 +MEM_RESERVE = 0x2000 +MEM_DECOMMIT = 0x4000 +MEM_RELEASE = 0x8000 +MEM_FREE = 0x10000 +MEM_PRIVATE = 0x20000 +MEM_MAPPED = 0x40000 +MEM_RESET = 0x80000 +MEM_TOP_DOWN = 0x100000 +MEM_WRITE_WATCH = 0x200000 +MEM_PHYSICAL = 0x400000 +MEM_LARGE_PAGES = 0x20000000 +MEM_4MB_PAGES = 0x80000000 +SEC_FILE = 0x800000 +SEC_IMAGE = 0x1000000 +SEC_RESERVE = 0x4000000 +SEC_COMMIT = 0x8000000 +SEC_NOCACHE = 0x10000000 +SEC_LARGE_PAGES = 0x80000000 +MEM_IMAGE = SEC_IMAGE WRITE_WATCH_FLAG_RESET = 0x01 FILE_MAP_ALL_ACCESS = 0xF001F -SECTION_QUERY = 0x0001 -SECTION_MAP_WRITE = 0x0002 -SECTION_MAP_READ = 0x0004 -SECTION_MAP_EXECUTE = 0x0008 -SECTION_EXTEND_SIZE = 0x0010 -SECTION_MAP_EXECUTE_EXPLICIT = 0x0020 # not included in SECTION_ALL_ACCESS - -SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ - SECTION_MAP_WRITE | \ - SECTION_MAP_READ | \ - SECTION_MAP_EXECUTE | \ - SECTION_EXTEND_SIZE) - -FILE_MAP_COPY = SECTION_QUERY -FILE_MAP_WRITE = SECTION_MAP_WRITE -FILE_MAP_READ = SECTION_MAP_READ +SECTION_QUERY = 0x0001 +SECTION_MAP_WRITE = 0x0002 +SECTION_MAP_READ = 0x0004 +SECTION_MAP_EXECUTE = 0x0008 +SECTION_EXTEND_SIZE = 0x0010 +SECTION_MAP_EXECUTE_EXPLICIT = 0x0020 # not included in SECTION_ALL_ACCESS + +SECTION_ALL_ACCESS = ( + STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE +) + +FILE_MAP_COPY = SECTION_QUERY +FILE_MAP_WRITE = SECTION_MAP_WRITE +FILE_MAP_READ = SECTION_MAP_READ FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS -FILE_MAP_EXECUTE = SECTION_MAP_EXECUTE_EXPLICIT # not included in FILE_MAP_ALL_ACCESS - -GENERIC_READ = 0x80000000 -GENERIC_WRITE = 0x40000000 -GENERIC_EXECUTE = 0x20000000 -GENERIC_ALL = 0x10000000 - -FILE_SHARE_READ = 0x00000001 -FILE_SHARE_WRITE = 0x00000002 -FILE_SHARE_DELETE = 0x00000004 - -CREATE_NEW = 1 -CREATE_ALWAYS = 2 -OPEN_EXISTING = 3 -OPEN_ALWAYS = 4 -TRUNCATE_EXISTING = 5 - -FILE_ATTRIBUTE_READONLY = 0x00000001 -FILE_ATTRIBUTE_NORMAL = 0x00000080 -FILE_ATTRIBUTE_TEMPORARY = 0x00000100 - -FILE_FLAG_WRITE_THROUGH = 0x80000000 -FILE_FLAG_NO_BUFFERING = 0x20000000 -FILE_FLAG_RANDOM_ACCESS = 0x10000000 -FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 -FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 -FILE_FLAG_OVERLAPPED = 0x40000000 - -FILE_ATTRIBUTE_READONLY = 0x00000001 -FILE_ATTRIBUTE_HIDDEN = 0x00000002 -FILE_ATTRIBUTE_SYSTEM = 0x00000004 -FILE_ATTRIBUTE_DIRECTORY = 0x00000010 -FILE_ATTRIBUTE_ARCHIVE = 0x00000020 -FILE_ATTRIBUTE_DEVICE = 0x00000040 -FILE_ATTRIBUTE_NORMAL = 0x00000080 -FILE_ATTRIBUTE_TEMPORARY = 0x00000100 +FILE_MAP_EXECUTE = SECTION_MAP_EXECUTE_EXPLICIT # not included in FILE_MAP_ALL_ACCESS + +GENERIC_READ = 0x80000000 +GENERIC_WRITE = 0x40000000 +GENERIC_EXECUTE = 0x20000000 +GENERIC_ALL = 0x10000000 + +FILE_SHARE_READ = 0x00000001 +FILE_SHARE_WRITE = 0x00000002 +FILE_SHARE_DELETE = 0x00000004 + +CREATE_NEW = 1 +CREATE_ALWAYS = 2 +OPEN_EXISTING = 3 +OPEN_ALWAYS = 4 +TRUNCATE_EXISTING = 5 + +FILE_ATTRIBUTE_READONLY = 0x00000001 +FILE_ATTRIBUTE_NORMAL = 0x00000080 +FILE_ATTRIBUTE_TEMPORARY = 0x00000100 + +FILE_FLAG_WRITE_THROUGH = 0x80000000 +FILE_FLAG_NO_BUFFERING = 0x20000000 +FILE_FLAG_RANDOM_ACCESS = 0x10000000 +FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 +FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 +FILE_FLAG_OVERLAPPED = 0x40000000 + +FILE_ATTRIBUTE_READONLY = 0x00000001 +FILE_ATTRIBUTE_HIDDEN = 0x00000002 +FILE_ATTRIBUTE_SYSTEM = 0x00000004 +FILE_ATTRIBUTE_DIRECTORY = 0x00000010 +FILE_ATTRIBUTE_ARCHIVE = 0x00000020 +FILE_ATTRIBUTE_DEVICE = 0x00000040 +FILE_ATTRIBUTE_NORMAL = 0x00000080 +FILE_ATTRIBUTE_TEMPORARY = 0x00000100 # Debug events -EXCEPTION_DEBUG_EVENT = 1 -CREATE_THREAD_DEBUG_EVENT = 2 -CREATE_PROCESS_DEBUG_EVENT = 3 -EXIT_THREAD_DEBUG_EVENT = 4 -EXIT_PROCESS_DEBUG_EVENT = 5 -LOAD_DLL_DEBUG_EVENT = 6 -UNLOAD_DLL_DEBUG_EVENT = 7 -OUTPUT_DEBUG_STRING_EVENT = 8 -RIP_EVENT = 9 +EXCEPTION_DEBUG_EVENT = 1 +CREATE_THREAD_DEBUG_EVENT = 2 +CREATE_PROCESS_DEBUG_EVENT = 3 +EXIT_THREAD_DEBUG_EVENT = 4 +EXIT_PROCESS_DEBUG_EVENT = 5 +LOAD_DLL_DEBUG_EVENT = 6 +UNLOAD_DLL_DEBUG_EVENT = 7 +OUTPUT_DEBUG_STRING_EVENT = 8 +RIP_EVENT = 9 # Debug status codes (ContinueDebugEvent) -DBG_EXCEPTION_HANDLED = long(0x00010001) -DBG_CONTINUE = long(0x00010002) -DBG_REPLY_LATER = long(0x40010001) -DBG_UNABLE_TO_PROVIDE_HANDLE = long(0x40010002) -DBG_TERMINATE_THREAD = long(0x40010003) -DBG_TERMINATE_PROCESS = long(0x40010004) -DBG_CONTROL_C = long(0x40010005) -DBG_PRINTEXCEPTION_C = long(0x40010006) -DBG_RIPEXCEPTION = long(0x40010007) -DBG_CONTROL_BREAK = long(0x40010008) -DBG_COMMAND_EXCEPTION = long(0x40010009) -DBG_EXCEPTION_NOT_HANDLED = long(0x80010001) -DBG_NO_STATE_CHANGE = long(0xC0010001) -DBG_APP_NOT_IDLE = long(0xC0010002) +DBG_EXCEPTION_HANDLED = long(0x00010001) +DBG_CONTINUE = long(0x00010002) +DBG_REPLY_LATER = long(0x40010001) +DBG_UNABLE_TO_PROVIDE_HANDLE = long(0x40010002) +DBG_TERMINATE_THREAD = long(0x40010003) +DBG_TERMINATE_PROCESS = long(0x40010004) +DBG_CONTROL_C = long(0x40010005) +DBG_PRINTEXCEPTION_C = long(0x40010006) +DBG_RIPEXCEPTION = long(0x40010007) +DBG_CONTROL_BREAK = long(0x40010008) +DBG_COMMAND_EXCEPTION = long(0x40010009) +DBG_EXCEPTION_NOT_HANDLED = long(0x80010001) +DBG_NO_STATE_CHANGE = long(0xC0010001) +DBG_APP_NOT_IDLE = long(0xC0010002) # Status codes -STATUS_WAIT_0 = long(0x00000000) -STATUS_ABANDONED_WAIT_0 = long(0x00000080) -STATUS_USER_APC = long(0x000000C0) -STATUS_TIMEOUT = long(0x00000102) -STATUS_PENDING = long(0x00000103) -STATUS_SEGMENT_NOTIFICATION = long(0x40000005) -STATUS_GUARD_PAGE_VIOLATION = long(0x80000001) -STATUS_DATATYPE_MISALIGNMENT = long(0x80000002) -STATUS_BREAKPOINT = long(0x80000003) -STATUS_SINGLE_STEP = long(0x80000004) -STATUS_INVALID_INFO_CLASS = long(0xC0000003) -STATUS_ACCESS_VIOLATION = long(0xC0000005) -STATUS_IN_PAGE_ERROR = long(0xC0000006) -STATUS_INVALID_HANDLE = long(0xC0000008) -STATUS_NO_MEMORY = long(0xC0000017) -STATUS_ILLEGAL_INSTRUCTION = long(0xC000001D) +STATUS_WAIT_0 = long(0x00000000) +STATUS_ABANDONED_WAIT_0 = long(0x00000080) +STATUS_USER_APC = long(0x000000C0) +STATUS_TIMEOUT = long(0x00000102) +STATUS_PENDING = long(0x00000103) +STATUS_SEGMENT_NOTIFICATION = long(0x40000005) +STATUS_GUARD_PAGE_VIOLATION = long(0x80000001) +STATUS_DATATYPE_MISALIGNMENT = long(0x80000002) +STATUS_BREAKPOINT = long(0x80000003) +STATUS_SINGLE_STEP = long(0x80000004) +STATUS_INVALID_INFO_CLASS = long(0xC0000003) +STATUS_ACCESS_VIOLATION = long(0xC0000005) +STATUS_IN_PAGE_ERROR = long(0xC0000006) +STATUS_INVALID_HANDLE = long(0xC0000008) +STATUS_NO_MEMORY = long(0xC0000017) +STATUS_ILLEGAL_INSTRUCTION = long(0xC000001D) STATUS_NONCONTINUABLE_EXCEPTION = long(0xC0000025) -STATUS_INVALID_DISPOSITION = long(0xC0000026) -STATUS_ARRAY_BOUNDS_EXCEEDED = long(0xC000008C) -STATUS_FLOAT_DENORMAL_OPERAND = long(0xC000008D) -STATUS_FLOAT_DIVIDE_BY_ZERO = long(0xC000008E) -STATUS_FLOAT_INEXACT_RESULT = long(0xC000008F) -STATUS_FLOAT_INVALID_OPERATION = long(0xC0000090) -STATUS_FLOAT_OVERFLOW = long(0xC0000091) -STATUS_FLOAT_STACK_CHECK = long(0xC0000092) -STATUS_FLOAT_UNDERFLOW = long(0xC0000093) -STATUS_INTEGER_DIVIDE_BY_ZERO = long(0xC0000094) -STATUS_INTEGER_OVERFLOW = long(0xC0000095) -STATUS_PRIVILEGED_INSTRUCTION = long(0xC0000096) -STATUS_STACK_OVERFLOW = long(0xC00000FD) -STATUS_CONTROL_C_EXIT = long(0xC000013A) -STATUS_FLOAT_MULTIPLE_FAULTS = long(0xC00002B4) -STATUS_FLOAT_MULTIPLE_TRAPS = long(0xC00002B5) -STATUS_REG_NAT_CONSUMPTION = long(0xC00002C9) -STATUS_SXS_EARLY_DEACTIVATION = long(0xC015000F) +STATUS_INVALID_DISPOSITION = long(0xC0000026) +STATUS_ARRAY_BOUNDS_EXCEEDED = long(0xC000008C) +STATUS_FLOAT_DENORMAL_OPERAND = long(0xC000008D) +STATUS_FLOAT_DIVIDE_BY_ZERO = long(0xC000008E) +STATUS_FLOAT_INEXACT_RESULT = long(0xC000008F) +STATUS_FLOAT_INVALID_OPERATION = long(0xC0000090) +STATUS_FLOAT_OVERFLOW = long(0xC0000091) +STATUS_FLOAT_STACK_CHECK = long(0xC0000092) +STATUS_FLOAT_UNDERFLOW = long(0xC0000093) +STATUS_INTEGER_DIVIDE_BY_ZERO = long(0xC0000094) +STATUS_INTEGER_OVERFLOW = long(0xC0000095) +STATUS_PRIVILEGED_INSTRUCTION = long(0xC0000096) +STATUS_STACK_OVERFLOW = long(0xC00000FD) +STATUS_CONTROL_C_EXIT = long(0xC000013A) +STATUS_FLOAT_MULTIPLE_FAULTS = long(0xC00002B4) +STATUS_FLOAT_MULTIPLE_TRAPS = long(0xC00002B5) +STATUS_REG_NAT_CONSUMPTION = long(0xC00002C9) +STATUS_SXS_EARLY_DEACTIVATION = long(0xC015000F) STATUS_SXS_INVALID_DEACTIVATION = long(0xC0150010) -STATUS_STACK_BUFFER_OVERRUN = long(0xC0000409) -STATUS_WX86_BREAKPOINT = long(0x4000001F) -STATUS_HEAP_CORRUPTION = long(0xC0000374) +STATUS_STACK_BUFFER_OVERRUN = long(0xC0000409) +STATUS_WX86_BREAKPOINT = long(0x4000001F) +STATUS_HEAP_CORRUPTION = long(0xC0000374) -STATUS_POSSIBLE_DEADLOCK = long(0xC0000194) +STATUS_POSSIBLE_DEADLOCK = long(0xC0000194) -STATUS_UNWIND_CONSOLIDATE = long(0x80000029) +STATUS_UNWIND_CONSOLIDATE = long(0x80000029) # Exception codes -EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION -EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED -EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT -EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT -EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND -EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO -EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT -EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION -EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW -EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK -EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW -EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION -EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR -EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO -EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW -EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION -EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION -EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION -EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP -EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW - -EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION -EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE -EXCEPTION_POSSIBLE_DEADLOCK = STATUS_POSSIBLE_DEADLOCK -EXCEPTION_WX86_BREAKPOINT = STATUS_WX86_BREAKPOINT - -CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT - -DBG_CONTROL_C = long(0x40010005) -MS_VC_EXCEPTION = long(0x406D1388) +EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION +EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED +EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT +EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT +EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND +EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO +EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT +EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION +EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW +EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK +EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW +EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION +EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR +EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO +EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW +EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION +EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION +EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION +EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP +EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW + +EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION +EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE +EXCEPTION_POSSIBLE_DEADLOCK = STATUS_POSSIBLE_DEADLOCK +EXCEPTION_WX86_BREAKPOINT = STATUS_WX86_BREAKPOINT + +CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT + +DBG_CONTROL_C = long(0x40010005) +MS_VC_EXCEPTION = long(0x406D1388) # Access violation types -ACCESS_VIOLATION_TYPE_READ = EXCEPTION_READ_FAULT -ACCESS_VIOLATION_TYPE_WRITE = EXCEPTION_WRITE_FAULT -ACCESS_VIOLATION_TYPE_DEP = EXCEPTION_EXECUTE_FAULT +ACCESS_VIOLATION_TYPE_READ = EXCEPTION_READ_FAULT +ACCESS_VIOLATION_TYPE_WRITE = EXCEPTION_WRITE_FAULT +ACCESS_VIOLATION_TYPE_DEP = EXCEPTION_EXECUTE_FAULT # RIP event types -SLE_ERROR = 1 +SLE_ERROR = 1 SLE_MINORERROR = 2 -SLE_WARNING = 3 +SLE_WARNING = 3 # DuplicateHandle constants -DUPLICATE_CLOSE_SOURCE = 0x00000001 -DUPLICATE_SAME_ACCESS = 0x00000002 +DUPLICATE_CLOSE_SOURCE = 0x00000001 +DUPLICATE_SAME_ACCESS = 0x00000002 # GetFinalPathNameByHandle constants -FILE_NAME_NORMALIZED = 0x0 -FILE_NAME_OPENED = 0x8 -VOLUME_NAME_DOS = 0x0 -VOLUME_NAME_GUID = 0x1 -VOLUME_NAME_NONE = 0x4 -VOLUME_NAME_NT = 0x2 +FILE_NAME_NORMALIZED = 0x0 +FILE_NAME_OPENED = 0x8 +VOLUME_NAME_DOS = 0x0 +VOLUME_NAME_GUID = 0x1 +VOLUME_NAME_NONE = 0x4 +VOLUME_NAME_NT = 0x2 # GetProductInfo constants PRODUCT_BUSINESS = 0x00000006 @@ -559,18 +557,19 @@ def RaiseIfLastError(result, func = None, arguments = ()): PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION = 2 # Error modes -SEM_FAILCRITICALERRORS = 0x001 -SEM_NOGPFAULTERRORBOX = 0x002 -SEM_NOALIGNMENTFAULTEXCEPT = 0x004 -SEM_NOOPENFILEERRORBOX = 0x800 +SEM_FAILCRITICALERRORS = 0x001 +SEM_NOGPFAULTERRORBOX = 0x002 +SEM_NOALIGNMENTFAULTEXCEPT = 0x004 +SEM_NOOPENFILEERRORBOX = 0x800 # GetHandleInformation / SetHandleInformation -HANDLE_FLAG_INHERIT = 0x00000001 -HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002 +HANDLE_FLAG_INHERIT = 0x00000001 +HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x00000002 -#--- Handle wrappers ---------------------------------------------------------- +# --- Handle wrappers ---------------------------------------------------------- -class Handle (object): + +class Handle(object): """ Encapsulates Win32 handles to avoid leaking them. @@ -593,7 +592,7 @@ class Handle (object): # detecting handle leaks within WinAppDbg itself. __bLeakDetection = False - def __init__(self, aHandle = None, bOwnership = True): + def __init__(self, aHandle=None, bOwnership=True): """ @type aHandle: int @param aHandle: Win32 handle value. @@ -604,9 +603,9 @@ def __init__(self, aHandle = None, bOwnership = True): C{False} if someone else will be calling L{CloseHandle}. """ super(Handle, self).__init__() - self._value = self._normalize(aHandle) + self._value = self._normalize(aHandle) self.bOwnership = bOwnership - if Handle.__bLeakDetection: # XXX DEBUG + if Handle.__bLeakDetection: # XXX DEBUG print("INIT HANDLE (%r) %r" % (self.value, self)) @property @@ -618,7 +617,7 @@ def __del__(self): Closes the Win32 handle when the Python object is destroyed. """ try: - if Handle.__bLeakDetection: # XXX DEBUG + if Handle.__bLeakDetection: # XXX DEBUG print("DEL HANDLE %r" % self) self.close() except Exception: @@ -628,7 +627,7 @@ def __enter__(self): """ Compatibility with the "C{with}" Python statement. """ - if Handle.__bLeakDetection: # XXX DEBUG + if Handle.__bLeakDetection: # XXX DEBUG print("ENTER HANDLE %r" % self) return self @@ -636,7 +635,7 @@ def __exit__(self, type, value, traceback): """ Compatibility with the "C{with}" Python statement. """ - if Handle.__bLeakDetection: # XXX DEBUG + if Handle.__bLeakDetection: # XXX DEBUG print("EXIT HANDLE %r" % self) try: self.close() @@ -685,7 +684,7 @@ def close(self): Closes the Win32 handle. """ if self.bOwnership and self.value not in (None, INVALID_HANDLE_VALUE): - if Handle.__bLeakDetection: # XXX DEBUG + if Handle.__bLeakDetection: # XXX DEBUG print("CLOSE HANDLE (%d) %r" % (self.value, self)) try: self._close() @@ -707,9 +706,8 @@ def dup(self): if self.value is None: raise ValueError("Closed handles can't be duplicated!") new_handle = DuplicateHandle(self.value) - if Handle.__bLeakDetection: # XXX DEBUG - print("DUP HANDLE (%d -> %d) %r %r" % \ - (self.value, new_handle.value, self, new_handle)) + if Handle.__bLeakDetection: # XXX DEBUG + print("DUP HANDLE (%d -> %d) %r %r" % (self.value, new_handle.value, self, new_handle)) return new_handle @staticmethod @@ -717,13 +715,13 @@ def _normalize(value): """ Normalize handle values. """ - if hasattr(value, 'value'): + if hasattr(value, "value"): value = value.value if value is not None: value = long(value) return value - def wait(self, dwMilliseconds = None): + def wait(self, dwMilliseconds=None): """ Wait for the Win32 object to be signaled. @@ -740,17 +738,17 @@ def wait(self, dwMilliseconds = None): raise ctypes.WinError(r) def __repr__(self): - return '<%s: %s>' % (self.__class__.__name__, self.value) + return "<%s: %s>" % (self.__class__.__name__, self.value) def __get_inherit(self): if self.value is None: raise ValueError("Handle is already closed!") - return bool( GetHandleInformation(self.value) & HANDLE_FLAG_INHERIT ) + return bool(GetHandleInformation(self.value) & HANDLE_FLAG_INHERIT) def __set_inherit(self, value): if self.value is None: raise ValueError("Handle is already closed!") - flag = (0, HANDLE_FLAG_INHERIT)[ bool(value) ] + flag = (0, HANDLE_FLAG_INHERIT)[bool(value)] SetHandleInformation(self.value, flag, flag) inherit = property(__get_inherit, __set_inherit) @@ -758,17 +756,18 @@ def __set_inherit(self, value): def __get_protectFromClose(self): if self.value is None: raise ValueError("Handle is already closed!") - return bool( GetHandleInformation(self.value) & HANDLE_FLAG_PROTECT_FROM_CLOSE ) + return bool(GetHandleInformation(self.value) & HANDLE_FLAG_PROTECT_FROM_CLOSE) def __set_protectFromClose(self, value): if self.value is None: raise ValueError("Handle is already closed!") - flag = (0, HANDLE_FLAG_PROTECT_FROM_CLOSE)[ bool(value) ] + flag = (0, HANDLE_FLAG_PROTECT_FROM_CLOSE)[bool(value)] SetHandleInformation(self.value, flag, flag) protectFromClose = property(__get_protectFromClose, __set_protectFromClose) -class UserModeHandle (Handle): + +class UserModeHandle(Handle): """ Base class for non-kernel handles. Generally this means they are closed by special Win32 API functions instead of CloseHandle() and some standard @@ -812,10 +811,11 @@ def dup(self): raise NotImplementedError() # Operation not supported. - def wait(self, dwMilliseconds = None): + def wait(self, dwMilliseconds=None): raise NotImplementedError() -class ProcessHandle (Handle): + +class ProcessHandle(Handle): """ Win32 process handle. @@ -828,8 +828,7 @@ class ProcessHandle (Handle): @see: L{Handle} """ - def __init__(self, aHandle = None, bOwnership = True, - dwAccess = PROCESS_ALL_ACCESS): + def __init__(self, aHandle=None, bOwnership=True, dwAccess=PROCESS_ALL_ACCESS): """ @type aHandle: int @param aHandle: Win32 handle value. @@ -858,7 +857,8 @@ def get_pid(self): """ return GetProcessId(self.value) -class ThreadHandle (Handle): + +class ThreadHandle(Handle): """ Win32 thread handle. @@ -871,8 +871,7 @@ class ThreadHandle (Handle): @see: L{Handle} """ - def __init__(self, aHandle = None, bOwnership = True, - dwAccess = THREAD_ALL_ACCESS): + def __init__(self, aHandle=None, bOwnership=True, dwAccess=THREAD_ALL_ACCESS): """ @type aHandle: int @param aHandle: Win32 handle value. @@ -901,7 +900,8 @@ def get_tid(self): """ return GetThreadId(self.value) -class FileHandle (Handle): + +class FileHandle(Handle): """ Win32 file handle. @@ -925,99 +925,78 @@ def get_filename(self): # Note that using the "official" GetFileInformationByHandleEx # API introduced in Vista doesn't change the results! # - dwBufferSize = 0x1004 + dwBufferSize = 0x1004 lpFileInformation = ctypes.create_string_buffer(dwBufferSize) try: - GetFileInformationByHandleEx(self.value, - FILE_INFO_BY_HANDLE_CLASS.FileNameInfo, - lpFileInformation, dwBufferSize) + GetFileInformationByHandleEx(self.value, FILE_INFO_BY_HANDLE_CLASS.FileNameInfo, lpFileInformation, dwBufferSize) except AttributeError: - from winappdbg.win32.ntdll import NtQueryInformationFile, \ - FileNameInformation, \ - FILE_NAME_INFORMATION - NtQueryInformationFile(self.value, - FileNameInformation, - lpFileInformation, - dwBufferSize) - FileName = compat.unicode(lpFileInformation.raw[sizeof(DWORD):], 'U16') + from winappdbg.win32.ntdll import NtQueryInformationFile, FileNameInformation, FILE_NAME_INFORMATION + + NtQueryInformationFile(self.value, FileNameInformation, lpFileInformation, dwBufferSize) + FileName = compat.unicode(lpFileInformation.raw[sizeof(DWORD) :], "U16") FileName = ctypes.create_unicode_buffer(FileName).value if not FileName: FileName = None - elif FileName[1:2] != ':': + elif FileName[1:2] != ":": # When the drive letter is missing, we'll assume SYSTEMROOT. # Not a good solution but it could be worse. import os - FileName = os.environ['SYSTEMROOT'][:2] + FileName + + FileName = os.environ["SYSTEMROOT"][:2] + FileName return FileName -class FileMappingHandle (Handle): + +class FileMappingHandle(Handle): """ File mapping handle. @see: L{Handle} """ + pass + # XXX maybe add functions related to the toolhelp snapshots here? -class SnapshotHandle (Handle): +class SnapshotHandle(Handle): """ Toolhelp32 snapshot handle. @see: L{Handle} """ + pass -#--- Structure wrappers ------------------------------------------------------- -class ProcessInformation (object): +# --- Structure wrappers ------------------------------------------------------- + + +class ProcessInformation(object): """ Process information object returned by L{CreateProcess}. """ def __init__(self, pi): - self.hProcess = ProcessHandle(pi.hProcess) - self.hThread = ThreadHandle(pi.hThread) + self.hProcess = ProcessHandle(pi.hProcess) + self.hThread = ThreadHandle(pi.hThread) self.dwProcessId = pi.dwProcessId - self.dwThreadId = pi.dwThreadId + self.dwThreadId = pi.dwThreadId + # Don't psyco-optimize this class because it needs to be serialized. -class MemoryBasicInformation (object): +class MemoryBasicInformation(object): """ Memory information object returned by L{VirtualQueryEx}. """ - READABLE = ( - PAGE_EXECUTE_READ | - PAGE_EXECUTE_READWRITE | - PAGE_EXECUTE_WRITECOPY | - PAGE_READONLY | - PAGE_READWRITE | - PAGE_WRITECOPY - ) + READABLE = PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY | PAGE_READONLY | PAGE_READWRITE | PAGE_WRITECOPY - WRITEABLE = ( - PAGE_EXECUTE_READWRITE | - PAGE_EXECUTE_WRITECOPY | - PAGE_READWRITE | - PAGE_WRITECOPY - ) + WRITEABLE = PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY | PAGE_READWRITE | PAGE_WRITECOPY - COPY_ON_WRITE = ( - PAGE_EXECUTE_WRITECOPY | - PAGE_WRITECOPY - ) + COPY_ON_WRITE = PAGE_EXECUTE_WRITECOPY | PAGE_WRITECOPY - EXECUTABLE = ( - PAGE_EXECUTE | - PAGE_EXECUTE_READ | - PAGE_EXECUTE_READWRITE | - PAGE_EXECUTE_WRITECOPY - ) + EXECUTABLE = PAGE_EXECUTE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY - EXECUTABLE_AND_WRITEABLE = ( - PAGE_EXECUTE_READWRITE | - PAGE_EXECUTE_WRITECOPY - ) + EXECUTABLE_AND_WRITEABLE = PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY def __init__(self, mbi=None): """ @@ -1026,27 +1005,27 @@ def __init__(self, mbi=None): L{MemoryBasicInformation} instance. """ if mbi is None: - self.BaseAddress = None - self.AllocationBase = None - self.AllocationProtect = None - self.RegionSize = None - self.State = None - self.Protect = None - self.Type = None + self.BaseAddress = None + self.AllocationBase = None + self.AllocationProtect = None + self.RegionSize = None + self.State = None + self.Protect = None + self.Type = None else: - self.BaseAddress = mbi.BaseAddress - self.AllocationBase = mbi.AllocationBase - self.AllocationProtect = mbi.AllocationProtect - self.RegionSize = mbi.RegionSize - self.State = mbi.State - self.Protect = mbi.Protect - self.Type = mbi.Type + self.BaseAddress = mbi.BaseAddress + self.AllocationBase = mbi.AllocationBase + self.AllocationProtect = mbi.AllocationProtect + self.RegionSize = mbi.RegionSize + self.State = mbi.State + self.Protect = mbi.Protect + self.Type = mbi.Type # Only used when copying MemoryBasicInformation objects, instead of # instancing them from a MEMORY_BASIC_INFORMATION structure. - if hasattr(mbi, 'content'): + if hasattr(mbi, "content"): self.content = mbi.content - if hasattr(mbi, 'filename'): + if hasattr(mbi, "filename"): self.content = mbi.filename def __contains__(self, address): @@ -1162,7 +1141,8 @@ def is_executable_and_writeable(self): """ return self.has_content() and bool(self.Protect & self.EXECUTABLE_AND_WRITEABLE) -class ProcThreadAttributeList (object): + +class ProcThreadAttributeList(object): """ Extended process and thread attribute support. @@ -1186,12 +1166,10 @@ def __init__(self, AttributeList): @param AttributeList: List of (Attribute, Value) pairs. """ self.AttributeList = AttributeList - self.AttributeListBuffer = InitializeProcThreadAttributeList( - len(AttributeList)) + self.AttributeListBuffer = InitializeProcThreadAttributeList(len(AttributeList)) try: for Attribute, Value in AttributeList: - UpdateProcThreadAttribute(self.AttributeListBuffer, - Attribute, Value) + UpdateProcThreadAttribute(self.AttributeListBuffer, Attribute, Value) except: ProcThreadAttributeList.__del__(self) raise @@ -1222,7 +1200,9 @@ def _as_parameter_(self): def from_param(value): raise NotImplementedError() -#--- OVERLAPPED structure ----------------------------------------------------- + +# --- OVERLAPPED structure ----------------------------------------------------- + # typedef struct _OVERLAPPED { # ULONG_PTR Internal; @@ -1238,24 +1218,31 @@ def from_param(value): # }OVERLAPPED, *LPOVERLAPPED; class _OVERLAPPED_STRUCT(Structure): _fields_ = [ - ('Offset', DWORD), - ('OffsetHigh', DWORD), + ("Offset", DWORD), + ("OffsetHigh", DWORD), ] + + class _OVERLAPPED_UNION(Union): _fields_ = [ - ('s', _OVERLAPPED_STRUCT), - ('Pointer', PVOID), + ("s", _OVERLAPPED_STRUCT), + ("Pointer", PVOID), ] + + class OVERLAPPED(Structure): _fields_ = [ - ('Internal', ULONG_PTR), - ('InternalHigh', ULONG_PTR), - ('u', _OVERLAPPED_UNION), - ('hEvent', HANDLE), + ("Internal", ULONG_PTR), + ("InternalHigh", ULONG_PTR), + ("u", _OVERLAPPED_UNION), + ("hEvent", HANDLE), ] + + LPOVERLAPPED = POINTER(OVERLAPPED) -#--- SECURITY_ATTRIBUTES structure -------------------------------------------- +# --- SECURITY_ATTRIBUTES structure -------------------------------------------- + # typedef struct _SECURITY_ATTRIBUTES { # DWORD nLength; @@ -1264,47 +1251,50 @@ class OVERLAPPED(Structure): # } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; class SECURITY_ATTRIBUTES(Structure): _fields_ = [ - ('nLength', DWORD), - ('lpSecurityDescriptor', LPVOID), - ('bInheritHandle', BOOL), + ("nLength", DWORD), + ("lpSecurityDescriptor", LPVOID), + ("bInheritHandle", BOOL), ] + + LPSECURITY_ATTRIBUTES = POINTER(SECURITY_ATTRIBUTES) # --- Extended process and thread attribute support --------------------------- -PPROC_THREAD_ATTRIBUTE_LIST = LPVOID +PPROC_THREAD_ATTRIBUTE_LIST = LPVOID LPPROC_THREAD_ATTRIBUTE_LIST = PPROC_THREAD_ATTRIBUTE_LIST -PROC_THREAD_ATTRIBUTE_NUMBER = 0x0000FFFF -PROC_THREAD_ATTRIBUTE_THREAD = 0x00010000 # Attribute may be used with thread creation -PROC_THREAD_ATTRIBUTE_INPUT = 0x00020000 # Attribute is input only +PROC_THREAD_ATTRIBUTE_NUMBER = 0x0000FFFF +PROC_THREAD_ATTRIBUTE_THREAD = 0x00010000 # Attribute may be used with thread creation +PROC_THREAD_ATTRIBUTE_INPUT = 0x00020000 # Attribute is input only PROC_THREAD_ATTRIBUTE_ADDITIVE = 0x00040000 # Attribute may be "accumulated," e.g. bitmasks, counters, etc. # PROC_THREAD_ATTRIBUTE_NUM -ProcThreadAttributeParentProcess = 0 -ProcThreadAttributeExtendedFlags = 1 -ProcThreadAttributeHandleList = 2 -ProcThreadAttributeGroupAffinity = 3 -ProcThreadAttributePreferredNode = 4 -ProcThreadAttributeIdealProcessor = 5 -ProcThreadAttributeUmsThread = 6 +ProcThreadAttributeParentProcess = 0 +ProcThreadAttributeExtendedFlags = 1 +ProcThreadAttributeHandleList = 2 +ProcThreadAttributeGroupAffinity = 3 +ProcThreadAttributePreferredNode = 4 +ProcThreadAttributeIdealProcessor = 5 +ProcThreadAttributeUmsThread = 6 ProcThreadAttributeMitigationPolicy = 7 -ProcThreadAttributeMax = 8 - -PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = ProcThreadAttributeParentProcess | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS = ProcThreadAttributeExtendedFlags | PROC_THREAD_ATTRIBUTE_INPUT | PROC_THREAD_ATTRIBUTE_ADDITIVE -PROC_THREAD_ATTRIBUTE_HANDLE_LIST = ProcThreadAttributeHandleList | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY = ProcThreadAttributeGroupAffinity | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_PREFERRED_NODE = ProcThreadAttributePreferredNode | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR = ProcThreadAttributeIdealProcessor | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_UMS_THREAD = ProcThreadAttributeUmsThread | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT -PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = ProcThreadAttributeMitigationPolicy | PROC_THREAD_ATTRIBUTE_INPUT - -PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE = 0x01 +ProcThreadAttributeMax = 8 + +PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = ProcThreadAttributeParentProcess | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_EXTENDED_FLAGS = ProcThreadAttributeExtendedFlags | PROC_THREAD_ATTRIBUTE_INPUT | PROC_THREAD_ATTRIBUTE_ADDITIVE +PROC_THREAD_ATTRIBUTE_HANDLE_LIST = ProcThreadAttributeHandleList | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY = ProcThreadAttributeGroupAffinity | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_PREFERRED_NODE = ProcThreadAttributePreferredNode | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR = ProcThreadAttributeIdealProcessor | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_UMS_THREAD = ProcThreadAttributeUmsThread | PROC_THREAD_ATTRIBUTE_THREAD | PROC_THREAD_ATTRIBUTE_INPUT +PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = ProcThreadAttributeMitigationPolicy | PROC_THREAD_ATTRIBUTE_INPUT + +PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE = 0x01 PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE = 0x02 -PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE = 0x04 +PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE = 0x04 + +# --- VS_FIXEDFILEINFO structure ----------------------------------------------- -#--- VS_FIXEDFILEINFO structure ----------------------------------------------- # struct VS_FIXEDFILEINFO { # DWORD dwSignature; @@ -1321,24 +1311,26 @@ class SECURITY_ATTRIBUTES(Structure): # DWORD dwFileDateMS; # DWORD dwFileDateLS; # }; -class VS_FIXEDFILEINFO (Structure): +class VS_FIXEDFILEINFO(Structure): _fields_ = [ - ("dwSignature", DWORD), # 0xFEEF04BD - ("dwStrucVersion", DWORD), - ("dwFileVersionMS", DWORD), - ("dwFileVersionLS", DWORD), - ("dwProductVersionMS", DWORD), - ("dwProductVersionLS", DWORD), - ("dwFileFlagsMask", DWORD), - ("dwFileFlags", DWORD), - ("dwFileOS", DWORD), - ("dwFileType", DWORD), - ("dwFileSubtype", DWORD), - ("dwFileDateMS", DWORD), - ("dwFileDateLS", DWORD), + ("dwSignature", DWORD), # 0xFEEF04BD + ("dwStrucVersion", DWORD), + ("dwFileVersionMS", DWORD), + ("dwFileVersionLS", DWORD), + ("dwProductVersionMS", DWORD), + ("dwProductVersionLS", DWORD), + ("dwFileFlagsMask", DWORD), + ("dwFileFlags", DWORD), + ("dwFileOS", DWORD), + ("dwFileType", DWORD), + ("dwFileSubtype", DWORD), + ("dwFileDateMS", DWORD), + ("dwFileDateLS", DWORD), ] -#--- THREADNAME_INFO structure ------------------------------------------------ + +# --- THREADNAME_INFO structure ------------------------------------------------ + # typedef struct tagTHREADNAME_INFO # { @@ -1349,13 +1341,15 @@ class VS_FIXEDFILEINFO (Structure): # } THREADNAME_INFO; class THREADNAME_INFO(Structure): _fields_ = [ - ("dwType", DWORD), # 0x1000 - ("szName", LPVOID), # remote pointer - ("dwThreadID", DWORD), # -1 usually - ("dwFlags", DWORD), # 0 + ("dwType", DWORD), # 0x1000 + ("szName", LPVOID), # remote pointer + ("dwThreadID", DWORD), # -1 usually + ("dwFlags", DWORD), # 0 ] -#--- MEMORY_BASIC_INFORMATION structure --------------------------------------- + +# --- MEMORY_BASIC_INFORMATION structure --------------------------------------- + # typedef struct _MEMORY_BASIC_INFORMATION32 { # DWORD BaseAddress; @@ -1368,15 +1362,16 @@ class THREADNAME_INFO(Structure): # } MEMORY_BASIC_INFORMATION32, *PMEMORY_BASIC_INFORMATION32; class MEMORY_BASIC_INFORMATION32(Structure): _fields_ = [ - ('BaseAddress', DWORD), # remote pointer - ('AllocationBase', DWORD), # remote pointer - ('AllocationProtect', DWORD), - ('RegionSize', DWORD), - ('State', DWORD), - ('Protect', DWORD), - ('Type', DWORD), + ("BaseAddress", DWORD), # remote pointer + ("AllocationBase", DWORD), # remote pointer + ("AllocationProtect", DWORD), + ("RegionSize", DWORD), + ("State", DWORD), + ("Protect", DWORD), + ("Type", DWORD), ] + # typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 { # ULONGLONG BaseAddress; # ULONGLONG AllocationBase; @@ -1390,17 +1385,18 @@ class MEMORY_BASIC_INFORMATION32(Structure): # } MEMORY_BASIC_INFORMATION64, *PMEMORY_BASIC_INFORMATION64; class MEMORY_BASIC_INFORMATION64(Structure): _fields_ = [ - ('BaseAddress', ULONGLONG), # remote pointer - ('AllocationBase', ULONGLONG), # remote pointer - ('AllocationProtect', DWORD), - ('__alignment1', DWORD), - ('RegionSize', ULONGLONG), - ('State', DWORD), - ('Protect', DWORD), - ('Type', DWORD), - ('__alignment2', DWORD), + ("BaseAddress", ULONGLONG), # remote pointer + ("AllocationBase", ULONGLONG), # remote pointer + ("AllocationProtect", DWORD), + ("__alignment1", DWORD), + ("RegionSize", ULONGLONG), + ("State", DWORD), + ("Protect", DWORD), + ("Type", DWORD), + ("__alignment2", DWORD), ] + # typedef struct _MEMORY_BASIC_INFORMATION { # PVOID BaseAddress; # PVOID AllocationBase; @@ -1412,17 +1408,20 @@ class MEMORY_BASIC_INFORMATION64(Structure): # } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; class MEMORY_BASIC_INFORMATION(Structure): _fields_ = [ - ('BaseAddress', SIZE_T), # remote pointer - ('AllocationBase', SIZE_T), # remote pointer - ('AllocationProtect', DWORD), - ('RegionSize', SIZE_T), - ('State', DWORD), - ('Protect', DWORD), - ('Type', DWORD), + ("BaseAddress", SIZE_T), # remote pointer + ("AllocationBase", SIZE_T), # remote pointer + ("AllocationProtect", DWORD), + ("RegionSize", SIZE_T), + ("State", DWORD), + ("Protect", DWORD), + ("Type", DWORD), ] + + PMEMORY_BASIC_INFORMATION = POINTER(MEMORY_BASIC_INFORMATION) -#--- BY_HANDLE_FILE_INFORMATION structure ------------------------------------- +# --- BY_HANDLE_FILE_INFORMATION structure ------------------------------------- + # typedef struct _FILETIME { # DWORD dwLowDateTime; @@ -1430,11 +1429,14 @@ class MEMORY_BASIC_INFORMATION(Structure): # } FILETIME, *PFILETIME; class FILETIME(Structure): _fields_ = [ - ('dwLowDateTime', DWORD), - ('dwHighDateTime', DWORD), + ("dwLowDateTime", DWORD), + ("dwHighDateTime", DWORD), ] + + LPFILETIME = POINTER(FILETIME) + # typedef struct _SYSTEMTIME { # WORD wYear; # WORD wMonth; @@ -1447,17 +1449,20 @@ class FILETIME(Structure): # }SYSTEMTIME, *PSYSTEMTIME; class SYSTEMTIME(Structure): _fields_ = [ - ('wYear', WORD), - ('wMonth', WORD), - ('wDayOfWeek', WORD), - ('wDay', WORD), - ('wHour', WORD), - ('wMinute', WORD), - ('wSecond', WORD), - ('wMilliseconds', WORD), + ("wYear", WORD), + ("wMonth", WORD), + ("wDayOfWeek", WORD), + ("wDay", WORD), + ("wHour", WORD), + ("wMinute", WORD), + ("wSecond", WORD), + ("wMilliseconds", WORD), ] + + LPSYSTEMTIME = POINTER(SYSTEMTIME) + # typedef struct _BY_HANDLE_FILE_INFORMATION { # DWORD dwFileAttributes; # FILETIME ftCreationTime; @@ -1472,19 +1477,22 @@ class SYSTEMTIME(Structure): # } BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION; class BY_HANDLE_FILE_INFORMATION(Structure): _fields_ = [ - ('dwFileAttributes', DWORD), - ('ftCreationTime', FILETIME), - ('ftLastAccessTime', FILETIME), - ('ftLastWriteTime', FILETIME), - ('dwVolumeSerialNumber', DWORD), - ('nFileSizeHigh', DWORD), - ('nFileSizeLow', DWORD), - ('nNumberOfLinks', DWORD), - ('nFileIndexHigh', DWORD), - ('nFileIndexLow', DWORD), + ("dwFileAttributes", DWORD), + ("ftCreationTime", FILETIME), + ("ftLastAccessTime", FILETIME), + ("ftLastWriteTime", FILETIME), + ("dwVolumeSerialNumber", DWORD), + ("nFileSizeHigh", DWORD), + ("nFileSizeLow", DWORD), + ("nNumberOfLinks", DWORD), + ("nFileIndexHigh", DWORD), + ("nFileIndexLow", DWORD), ] + + LPBY_HANDLE_FILE_INFORMATION = POINTER(BY_HANDLE_FILE_INFORMATION) + # typedef enum _FILE_INFO_BY_HANDLE_CLASS { # FileBasicInfo = 0, # FileStandardInfo = 1, @@ -1502,20 +1510,21 @@ class BY_HANDLE_FILE_INFORMATION(Structure): # MaximumFileInfoByHandlesClass = 13 # } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS; class FILE_INFO_BY_HANDLE_CLASS(object): - FileBasicInfo = 0 - FileStandardInfo = 1 - FileNameInfo = 2 - FileRenameInfo = 3 - FileDispositionInfo = 4 - FileAllocationInfo = 5 - FileEndOfFileInfo = 6 - FileStreamInfo = 7 - FileCompressionInfo = 8 - FileAttributeTagInfo = 9 - FileIdBothDirectoryInfo = 10 - FileIdBothDirectoryRestartInfo = 11 - FileIoPriorityHintInfo = 12 - MaximumFileInfoByHandlesClass = 13 + FileBasicInfo = 0 + FileStandardInfo = 1 + FileNameInfo = 2 + FileRenameInfo = 3 + FileDispositionInfo = 4 + FileAllocationInfo = 5 + FileEndOfFileInfo = 6 + FileStreamInfo = 7 + FileCompressionInfo = 8 + FileAttributeTagInfo = 9 + FileIdBothDirectoryInfo = 10 + FileIdBothDirectoryRestartInfo = 11 + FileIoPriorityHintInfo = 12 + MaximumFileInfoByHandlesClass = 13 + # typedef struct _FILE_NAME_INFO { # DWORD FileNameLength; @@ -1529,7 +1538,8 @@ class FILE_INFO_BY_HANDLE_CLASS(object): # TO DO: add more structures used by GetFileInformationByHandleEx() -#--- PROCESS_INFORMATION structure -------------------------------------------- +# --- PROCESS_INFORMATION structure -------------------------------------------- + # typedef struct _PROCESS_INFORMATION { # HANDLE hProcess; @@ -1539,14 +1549,17 @@ class FILE_INFO_BY_HANDLE_CLASS(object): # } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; class PROCESS_INFORMATION(Structure): _fields_ = [ - ('hProcess', HANDLE), - ('hThread', HANDLE), - ('dwProcessId', DWORD), - ('dwThreadId', DWORD), + ("hProcess", HANDLE), + ("hThread", HANDLE), + ("dwProcessId", DWORD), + ("dwThreadId", DWORD), ] + + LPPROCESS_INFORMATION = POINTER(PROCESS_INFORMATION) -#--- STARTUPINFO and STARTUPINFOEX structures --------------------------------- +# --- STARTUPINFO and STARTUPINFOEX structures --------------------------------- + # typedef struct _STARTUPINFO { # DWORD cb; @@ -1570,69 +1583,81 @@ class PROCESS_INFORMATION(Structure): # }STARTUPINFO, *LPSTARTUPINFO; class STARTUPINFO(Structure): _fields_ = [ - ('cb', DWORD), - ('lpReserved', LPSTR), - ('lpDesktop', LPSTR), - ('lpTitle', LPSTR), - ('dwX', DWORD), - ('dwY', DWORD), - ('dwXSize', DWORD), - ('dwYSize', DWORD), - ('dwXCountChars', DWORD), - ('dwYCountChars', DWORD), - ('dwFillAttribute', DWORD), - ('dwFlags', DWORD), - ('wShowWindow', WORD), - ('cbReserved2', WORD), - ('lpReserved2', LPVOID), # LPBYTE - ('hStdInput', HANDLE), - ('hStdOutput', HANDLE), - ('hStdError', HANDLE), + ("cb", DWORD), + ("lpReserved", LPSTR), + ("lpDesktop", LPSTR), + ("lpTitle", LPSTR), + ("dwX", DWORD), + ("dwY", DWORD), + ("dwXSize", DWORD), + ("dwYSize", DWORD), + ("dwXCountChars", DWORD), + ("dwYCountChars", DWORD), + ("dwFillAttribute", DWORD), + ("dwFlags", DWORD), + ("wShowWindow", WORD), + ("cbReserved2", WORD), + ("lpReserved2", LPVOID), # LPBYTE + ("hStdInput", HANDLE), + ("hStdOutput", HANDLE), + ("hStdError", HANDLE), ] + + LPSTARTUPINFO = POINTER(STARTUPINFO) + # typedef struct _STARTUPINFOEX { # STARTUPINFO StartupInfo; # PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList; # } STARTUPINFOEX, *LPSTARTUPINFOEX; class STARTUPINFOEX(Structure): _fields_ = [ - ('StartupInfo', STARTUPINFO), - ('lpAttributeList', PPROC_THREAD_ATTRIBUTE_LIST), + ("StartupInfo", STARTUPINFO), + ("lpAttributeList", PPROC_THREAD_ATTRIBUTE_LIST), ] + + LPSTARTUPINFOEX = POINTER(STARTUPINFOEX) + class STARTUPINFOW(Structure): _fields_ = [ - ('cb', DWORD), - ('lpReserved', LPWSTR), - ('lpDesktop', LPWSTR), - ('lpTitle', LPWSTR), - ('dwX', DWORD), - ('dwY', DWORD), - ('dwXSize', DWORD), - ('dwYSize', DWORD), - ('dwXCountChars', DWORD), - ('dwYCountChars', DWORD), - ('dwFillAttribute', DWORD), - ('dwFlags', DWORD), - ('wShowWindow', WORD), - ('cbReserved2', WORD), - ('lpReserved2', LPVOID), # LPBYTE - ('hStdInput', HANDLE), - ('hStdOutput', HANDLE), - ('hStdError', HANDLE), + ("cb", DWORD), + ("lpReserved", LPWSTR), + ("lpDesktop", LPWSTR), + ("lpTitle", LPWSTR), + ("dwX", DWORD), + ("dwY", DWORD), + ("dwXSize", DWORD), + ("dwYSize", DWORD), + ("dwXCountChars", DWORD), + ("dwYCountChars", DWORD), + ("dwFillAttribute", DWORD), + ("dwFlags", DWORD), + ("wShowWindow", WORD), + ("cbReserved2", WORD), + ("lpReserved2", LPVOID), # LPBYTE + ("hStdInput", HANDLE), + ("hStdOutput", HANDLE), + ("hStdError", HANDLE), ] + + LPSTARTUPINFOW = POINTER(STARTUPINFOW) + class STARTUPINFOEXW(Structure): _fields_ = [ - ('StartupInfo', STARTUPINFOW), - ('lpAttributeList', PPROC_THREAD_ATTRIBUTE_LIST), + ("StartupInfo", STARTUPINFOW), + ("lpAttributeList", PPROC_THREAD_ATTRIBUTE_LIST), ] + + LPSTARTUPINFOEXW = POINTER(STARTUPINFOEXW) -#--- JIT_DEBUG_INFO structure ------------------------------------------------- +# --- JIT_DEBUG_INFO structure ------------------------------------------------- + # typedef struct _JIT_DEBUG_INFO { # DWORD dwSize; @@ -1645,22 +1670,25 @@ class STARTUPINFOEXW(Structure): # } JIT_DEBUG_INFO, *LPJIT_DEBUG_INFO; class JIT_DEBUG_INFO(Structure): _fields_ = [ - ('dwSize', DWORD), - ('dwProcessorArchitecture', DWORD), - ('dwThreadID', DWORD), - ('dwReserved0', DWORD), - ('lpExceptionAddress', ULONG64), - ('lpExceptionRecord', ULONG64), - ('lpContextRecord', ULONG64), + ("dwSize", DWORD), + ("dwProcessorArchitecture", DWORD), + ("dwThreadID", DWORD), + ("dwReserved0", DWORD), + ("lpExceptionAddress", ULONG64), + ("lpExceptionRecord", ULONG64), + ("lpContextRecord", ULONG64), ] + + JIT_DEBUG_INFO32 = JIT_DEBUG_INFO JIT_DEBUG_INFO64 = JIT_DEBUG_INFO -LPJIT_DEBUG_INFO = POINTER(JIT_DEBUG_INFO) +LPJIT_DEBUG_INFO = POINTER(JIT_DEBUG_INFO) LPJIT_DEBUG_INFO32 = POINTER(JIT_DEBUG_INFO32) LPJIT_DEBUG_INFO64 = POINTER(JIT_DEBUG_INFO64) -#--- DEBUG_EVENT structure ---------------------------------------------------- +# --- DEBUG_EVENT structure ---------------------------------------------------- + # typedef struct _EXCEPTION_RECORD32 { # DWORD ExceptionCode; @@ -1672,16 +1700,18 @@ class JIT_DEBUG_INFO(Structure): # } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32; class EXCEPTION_RECORD32(Structure): _fields_ = [ - ('ExceptionCode', DWORD), - ('ExceptionFlags', DWORD), - ('ExceptionRecord', DWORD), - ('ExceptionAddress', DWORD), - ('NumberParameters', DWORD), - ('ExceptionInformation', DWORD * EXCEPTION_MAXIMUM_PARAMETERS), + ("ExceptionCode", DWORD), + ("ExceptionFlags", DWORD), + ("ExceptionRecord", DWORD), + ("ExceptionAddress", DWORD), + ("NumberParameters", DWORD), + ("ExceptionInformation", DWORD * EXCEPTION_MAXIMUM_PARAMETERS), ] + PEXCEPTION_RECORD32 = POINTER(EXCEPTION_RECORD32) + # typedef struct _EXCEPTION_RECORD64 { # DWORD ExceptionCode; # DWORD ExceptionFlags; @@ -1693,17 +1723,19 @@ class EXCEPTION_RECORD32(Structure): # } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64; class EXCEPTION_RECORD64(Structure): _fields_ = [ - ('ExceptionCode', DWORD), - ('ExceptionFlags', DWORD), - ('ExceptionRecord', DWORD64), - ('ExceptionAddress', DWORD64), - ('NumberParameters', DWORD), - ('__unusedAlignment', DWORD), - ('ExceptionInformation', DWORD64 * EXCEPTION_MAXIMUM_PARAMETERS), + ("ExceptionCode", DWORD), + ("ExceptionFlags", DWORD), + ("ExceptionRecord", DWORD64), + ("ExceptionAddress", DWORD64), + ("NumberParameters", DWORD), + ("__unusedAlignment", DWORD), + ("ExceptionInformation", DWORD64 * EXCEPTION_MAXIMUM_PARAMETERS), ] + PEXCEPTION_RECORD64 = POINTER(EXCEPTION_RECORD64) + # typedef struct _EXCEPTION_RECORD { # DWORD ExceptionCode; # DWORD ExceptionFlags; @@ -1714,15 +1746,18 @@ class EXCEPTION_RECORD64(Structure): # } EXCEPTION_RECORD, *PEXCEPTION_RECORD; class EXCEPTION_RECORD(Structure): pass + + PEXCEPTION_RECORD = POINTER(EXCEPTION_RECORD) EXCEPTION_RECORD._fields_ = [ - ('ExceptionCode', DWORD), - ('ExceptionFlags', DWORD), - ('ExceptionRecord', PEXCEPTION_RECORD), - ('ExceptionAddress', LPVOID), - ('NumberParameters', DWORD), - ('ExceptionInformation', LPVOID * EXCEPTION_MAXIMUM_PARAMETERS), - ] + ("ExceptionCode", DWORD), + ("ExceptionFlags", DWORD), + ("ExceptionRecord", PEXCEPTION_RECORD), + ("ExceptionAddress", LPVOID), + ("NumberParameters", DWORD), + ("ExceptionInformation", LPVOID * EXCEPTION_MAXIMUM_PARAMETERS), +] + # typedef struct _EXCEPTION_DEBUG_INFO { # EXCEPTION_RECORD ExceptionRecord; @@ -1730,10 +1765,11 @@ class EXCEPTION_RECORD(Structure): # } EXCEPTION_DEBUG_INFO; class EXCEPTION_DEBUG_INFO(Structure): _fields_ = [ - ('ExceptionRecord', EXCEPTION_RECORD), - ('dwFirstChance', DWORD), + ("ExceptionRecord", EXCEPTION_RECORD), + ("dwFirstChance", DWORD), ] + # typedef struct _CREATE_THREAD_DEBUG_INFO { # HANDLE hThread; # LPVOID lpThreadLocalBase; @@ -1741,11 +1777,12 @@ class EXCEPTION_DEBUG_INFO(Structure): # } CREATE_THREAD_DEBUG_INFO; class CREATE_THREAD_DEBUG_INFO(Structure): _fields_ = [ - ('hThread', HANDLE), - ('lpThreadLocalBase', LPVOID), - ('lpStartAddress', LPVOID), + ("hThread", HANDLE), + ("lpThreadLocalBase", LPVOID), + ("lpStartAddress", LPVOID), ] + # typedef struct _CREATE_PROCESS_DEBUG_INFO { # HANDLE hFile; # HANDLE hProcess; @@ -1760,34 +1797,37 @@ class CREATE_THREAD_DEBUG_INFO(Structure): # } CREATE_PROCESS_DEBUG_INFO; class CREATE_PROCESS_DEBUG_INFO(Structure): _fields_ = [ - ('hFile', HANDLE), - ('hProcess', HANDLE), - ('hThread', HANDLE), - ('lpBaseOfImage', LPVOID), - ('dwDebugInfoFileOffset', DWORD), - ('nDebugInfoSize', DWORD), - ('lpThreadLocalBase', LPVOID), - ('lpStartAddress', LPVOID), - ('lpImageName', LPVOID), - ('fUnicode', WORD), + ("hFile", HANDLE), + ("hProcess", HANDLE), + ("hThread", HANDLE), + ("lpBaseOfImage", LPVOID), + ("dwDebugInfoFileOffset", DWORD), + ("nDebugInfoSize", DWORD), + ("lpThreadLocalBase", LPVOID), + ("lpStartAddress", LPVOID), + ("lpImageName", LPVOID), + ("fUnicode", WORD), ] + # typedef struct _EXIT_THREAD_DEBUG_INFO { # DWORD dwExitCode; # } EXIT_THREAD_DEBUG_INFO; class EXIT_THREAD_DEBUG_INFO(Structure): _fields_ = [ - ('dwExitCode', DWORD), + ("dwExitCode", DWORD), ] + # typedef struct _EXIT_PROCESS_DEBUG_INFO { # DWORD dwExitCode; # } EXIT_PROCESS_DEBUG_INFO; class EXIT_PROCESS_DEBUG_INFO(Structure): _fields_ = [ - ('dwExitCode', DWORD), + ("dwExitCode", DWORD), ] + # typedef struct _LOAD_DLL_DEBUG_INFO { # HANDLE hFile; # LPVOID lpBaseOfDll; @@ -1798,22 +1838,24 @@ class EXIT_PROCESS_DEBUG_INFO(Structure): # } LOAD_DLL_DEBUG_INFO; class LOAD_DLL_DEBUG_INFO(Structure): _fields_ = [ - ('hFile', HANDLE), - ('lpBaseOfDll', LPVOID), - ('dwDebugInfoFileOffset', DWORD), - ('nDebugInfoSize', DWORD), - ('lpImageName', LPVOID), - ('fUnicode', WORD), + ("hFile", HANDLE), + ("lpBaseOfDll", LPVOID), + ("dwDebugInfoFileOffset", DWORD), + ("nDebugInfoSize", DWORD), + ("lpImageName", LPVOID), + ("fUnicode", WORD), ] + # typedef struct _UNLOAD_DLL_DEBUG_INFO { # LPVOID lpBaseOfDll; # } UNLOAD_DLL_DEBUG_INFO; class UNLOAD_DLL_DEBUG_INFO(Structure): _fields_ = [ - ('lpBaseOfDll', LPVOID), + ("lpBaseOfDll", LPVOID), ] + # typedef struct _OUTPUT_DEBUG_STRING_INFO { # LPSTR lpDebugStringData; # WORD fUnicode; @@ -1821,21 +1863,23 @@ class UNLOAD_DLL_DEBUG_INFO(Structure): # } OUTPUT_DEBUG_STRING_INFO; class OUTPUT_DEBUG_STRING_INFO(Structure): _fields_ = [ - ('lpDebugStringData', LPVOID), # don't use LPSTR - ('fUnicode', WORD), - ('nDebugStringLength', WORD), + ("lpDebugStringData", LPVOID), # don't use LPSTR + ("fUnicode", WORD), + ("nDebugStringLength", WORD), ] + # typedef struct _RIP_INFO { # DWORD dwError; # DWORD dwType; # } RIP_INFO, *LPRIP_INFO; class RIP_INFO(Structure): _fields_ = [ - ('dwError', DWORD), - ('dwType', DWORD), + ("dwError", DWORD), + ("dwType", DWORD), ] + # typedef struct _DEBUG_EVENT { # DWORD dwDebugEventCode; # DWORD dwProcessId; @@ -1854,58 +1898,63 @@ class RIP_INFO(Structure): # } DEBUG_EVENT;. class _DEBUG_EVENT_UNION_(Union): _fields_ = [ - ('Exception', EXCEPTION_DEBUG_INFO), - ('CreateThread', CREATE_THREAD_DEBUG_INFO), - ('CreateProcessInfo', CREATE_PROCESS_DEBUG_INFO), - ('ExitThread', EXIT_THREAD_DEBUG_INFO), - ('ExitProcess', EXIT_PROCESS_DEBUG_INFO), - ('LoadDll', LOAD_DLL_DEBUG_INFO), - ('UnloadDll', UNLOAD_DLL_DEBUG_INFO), - ('DebugString', OUTPUT_DEBUG_STRING_INFO), - ('RipInfo', RIP_INFO), + ("Exception", EXCEPTION_DEBUG_INFO), + ("CreateThread", CREATE_THREAD_DEBUG_INFO), + ("CreateProcessInfo", CREATE_PROCESS_DEBUG_INFO), + ("ExitThread", EXIT_THREAD_DEBUG_INFO), + ("ExitProcess", EXIT_PROCESS_DEBUG_INFO), + ("LoadDll", LOAD_DLL_DEBUG_INFO), + ("UnloadDll", UNLOAD_DLL_DEBUG_INFO), + ("DebugString", OUTPUT_DEBUG_STRING_INFO), + ("RipInfo", RIP_INFO), ] + + class DEBUG_EVENT(Structure): _fields_ = [ - ('dwDebugEventCode', DWORD), - ('dwProcessId', DWORD), - ('dwThreadId', DWORD), - ('u', _DEBUG_EVENT_UNION_), + ("dwDebugEventCode", DWORD), + ("dwProcessId", DWORD), + ("dwThreadId", DWORD), + ("u", _DEBUG_EVENT_UNION_), ] + + LPDEBUG_EVENT = POINTER(DEBUG_EVENT) -#--- Console API defines and structures --------------------------------------- +# --- Console API defines and structures --------------------------------------- FOREGROUND_MASK = 0x000F BACKGROUND_MASK = 0x00F0 COMMON_LVB_MASK = 0xFF00 -FOREGROUND_BLACK = 0x0000 -FOREGROUND_BLUE = 0x0001 -FOREGROUND_GREEN = 0x0002 -FOREGROUND_CYAN = 0x0003 -FOREGROUND_RED = 0x0004 -FOREGROUND_MAGENTA = 0x0005 -FOREGROUND_YELLOW = 0x0006 -FOREGROUND_GREY = 0x0007 +FOREGROUND_BLACK = 0x0000 +FOREGROUND_BLUE = 0x0001 +FOREGROUND_GREEN = 0x0002 +FOREGROUND_CYAN = 0x0003 +FOREGROUND_RED = 0x0004 +FOREGROUND_MAGENTA = 0x0005 +FOREGROUND_YELLOW = 0x0006 +FOREGROUND_GREY = 0x0007 FOREGROUND_INTENSITY = 0x0008 -BACKGROUND_BLACK = 0x0000 -BACKGROUND_BLUE = 0x0010 -BACKGROUND_GREEN = 0x0020 -BACKGROUND_CYAN = 0x0030 -BACKGROUND_RED = 0x0040 -BACKGROUND_MAGENTA = 0x0050 -BACKGROUND_YELLOW = 0x0060 -BACKGROUND_GREY = 0x0070 +BACKGROUND_BLACK = 0x0000 +BACKGROUND_BLUE = 0x0010 +BACKGROUND_GREEN = 0x0020 +BACKGROUND_CYAN = 0x0030 +BACKGROUND_RED = 0x0040 +BACKGROUND_MAGENTA = 0x0050 +BACKGROUND_YELLOW = 0x0060 +BACKGROUND_GREY = 0x0070 BACKGROUND_INTENSITY = 0x0080 -COMMON_LVB_LEADING_BYTE = 0x0100 -COMMON_LVB_TRAILING_BYTE = 0x0200 +COMMON_LVB_LEADING_BYTE = 0x0100 +COMMON_LVB_TRAILING_BYTE = 0x0200 COMMON_LVB_GRID_HORIZONTAL = 0x0400 -COMMON_LVB_GRID_LVERTICAL = 0x0800 -COMMON_LVB_GRID_RVERTICAL = 0x1000 -COMMON_LVB_REVERSE_VIDEO = 0x4000 -COMMON_LVB_UNDERSCORE = 0x8000 +COMMON_LVB_GRID_LVERTICAL = 0x0800 +COMMON_LVB_GRID_RVERTICAL = 0x1000 +COMMON_LVB_REVERSE_VIDEO = 0x4000 +COMMON_LVB_UNDERSCORE = 0x8000 + # typedef struct _CHAR_INFO { # union { @@ -1916,27 +1965,35 @@ class DEBUG_EVENT(Structure): # } CHAR_INFO, *PCHAR_INFO; class _CHAR_INFO_CHAR(Union): _fields_ = [ - ('UnicodeChar', WCHAR), - ('AsciiChar', CHAR), + ("UnicodeChar", WCHAR), + ("AsciiChar", CHAR), ] + + class CHAR_INFO(Structure): _fields_ = [ - ('Char', _CHAR_INFO_CHAR), - ('Attributes', WORD), - ] + ("Char", _CHAR_INFO_CHAR), + ("Attributes", WORD), + ] + + PCHAR_INFO = POINTER(CHAR_INFO) + # typedef struct _COORD { # SHORT X; # SHORT Y; # } COORD, *PCOORD; class COORD(Structure): _fields_ = [ - ('X', SHORT), - ('Y', SHORT), + ("X", SHORT), + ("Y", SHORT), ] + + PCOORD = POINTER(COORD) + # typedef struct _SMALL_RECT { # SHORT Left; # SHORT Top; @@ -1945,13 +2002,16 @@ class COORD(Structure): # } SMALL_RECT; class SMALL_RECT(Structure): _fields_ = [ - ('Left', SHORT), - ('Top', SHORT), - ('Right', SHORT), - ('Bottom', SHORT), + ("Left", SHORT), + ("Top", SHORT), + ("Right", SHORT), + ("Bottom", SHORT), ] + + PSMALL_RECT = POINTER(SMALL_RECT) + # typedef struct _CONSOLE_SCREEN_BUFFER_INFO { # COORD dwSize; # COORD dwCursorPosition; @@ -1961,22 +2021,25 @@ class SMALL_RECT(Structure): # } CONSOLE_SCREEN_BUFFER_INFO; class CONSOLE_SCREEN_BUFFER_INFO(Structure): _fields_ = [ - ('dwSize', COORD), - ('dwCursorPosition', COORD), - ('wAttributes', WORD), - ('srWindow', SMALL_RECT), - ('dwMaximumWindowSize', COORD), + ("dwSize", COORD), + ("dwCursorPosition", COORD), + ("wAttributes", WORD), + ("srWindow", SMALL_RECT), + ("dwMaximumWindowSize", COORD), ] + + PCONSOLE_SCREEN_BUFFER_INFO = POINTER(CONSOLE_SCREEN_BUFFER_INFO) -#--- Toolhelp library defines and structures ---------------------------------- +# --- Toolhelp library defines and structures ---------------------------------- TH32CS_SNAPHEAPLIST = 0x00000001 -TH32CS_SNAPPROCESS = 0x00000002 -TH32CS_SNAPTHREAD = 0x00000004 -TH32CS_SNAPMODULE = 0x00000008 -TH32CS_INHERIT = 0x80000000 -TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE) +TH32CS_SNAPPROCESS = 0x00000002 +TH32CS_SNAPTHREAD = 0x00000004 +TH32CS_SNAPMODULE = 0x00000008 +TH32CS_INHERIT = 0x80000000 +TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE + # typedef struct tagTHREADENTRY32 { # DWORD dwSize; @@ -1989,16 +2052,19 @@ class CONSOLE_SCREEN_BUFFER_INFO(Structure): # } THREADENTRY32, *PTHREADENTRY32; class THREADENTRY32(Structure): _fields_ = [ - ('dwSize', DWORD), - ('cntUsage', DWORD), - ('th32ThreadID', DWORD), - ('th32OwnerProcessID', DWORD), - ('tpBasePri', LONG), - ('tpDeltaPri', LONG), - ('dwFlags', DWORD), + ("dwSize", DWORD), + ("cntUsage", DWORD), + ("th32ThreadID", DWORD), + ("th32OwnerProcessID", DWORD), + ("tpBasePri", LONG), + ("tpDeltaPri", LONG), + ("dwFlags", DWORD), ] + + LPTHREADENTRY32 = POINTER(THREADENTRY32) + # typedef struct tagPROCESSENTRY32 { # DWORD dwSize; # DWORD cntUsage; @@ -2013,19 +2079,22 @@ class THREADENTRY32(Structure): # } PROCESSENTRY32, *PPROCESSENTRY32; class PROCESSENTRY32(Structure): _fields_ = [ - ('dwSize', DWORD), - ('cntUsage', DWORD), - ('th32ProcessID', DWORD), - ('th32DefaultHeapID', ULONG_PTR), - ('th32ModuleID', DWORD), - ('cntThreads', DWORD), - ('th32ParentProcessID', DWORD), - ('pcPriClassBase', LONG), - ('dwFlags', DWORD), - ('szExeFile', TCHAR * 260), + ("dwSize", DWORD), + ("cntUsage", DWORD), + ("th32ProcessID", DWORD), + ("th32DefaultHeapID", ULONG_PTR), + ("th32ModuleID", DWORD), + ("cntThreads", DWORD), + ("th32ParentProcessID", DWORD), + ("pcPriClassBase", LONG), + ("dwFlags", DWORD), + ("szExeFile", TCHAR * 260), ] + + LPPROCESSENTRY32 = POINTER(PROCESSENTRY32) + # typedef struct tagMODULEENTRY32 { # DWORD dwSize; # DWORD th32ModuleID; @@ -2040,19 +2109,22 @@ class PROCESSENTRY32(Structure): # } MODULEENTRY32, *PMODULEENTRY32; class MODULEENTRY32(Structure): _fields_ = [ - ("dwSize", DWORD), - ("th32ModuleID", DWORD), + ("dwSize", DWORD), + ("th32ModuleID", DWORD), ("th32ProcessID", DWORD), - ("GlblcntUsage", DWORD), - ("ProccntUsage", DWORD), - ("modBaseAddr", LPVOID), # BYTE* - ("modBaseSize", DWORD), - ("hModule", HMODULE), - ("szModule", TCHAR * (MAX_MODULE_NAME32 + 1)), - ("szExePath", TCHAR * MAX_PATH), + ("GlblcntUsage", DWORD), + ("ProccntUsage", DWORD), + ("modBaseAddr", LPVOID), # BYTE* + ("modBaseSize", DWORD), + ("hModule", HMODULE), + ("szModule", TCHAR * (MAX_MODULE_NAME32 + 1)), + ("szExePath", TCHAR * MAX_PATH), ] + + LPMODULEENTRY32 = POINTER(MODULEENTRY32) + # typedef struct tagHEAPENTRY32 { # SIZE_T dwSize; # HANDLE hHandle; @@ -2067,18 +2139,21 @@ class MODULEENTRY32(Structure): # *PHEAPENTRY32; class HEAPENTRY32(Structure): _fields_ = [ - ("dwSize", SIZE_T), - ("hHandle", HANDLE), - ("dwAddress", ULONG_PTR), - ("dwBlockSize", SIZE_T), - ("dwFlags", DWORD), - ("dwLockCount", DWORD), - ("dwResvd", DWORD), - ("th32ProcessID", DWORD), - ("th32HeapID", ULONG_PTR), -] + ("dwSize", SIZE_T), + ("hHandle", HANDLE), + ("dwAddress", ULONG_PTR), + ("dwBlockSize", SIZE_T), + ("dwFlags", DWORD), + ("dwLockCount", DWORD), + ("dwResvd", DWORD), + ("th32ProcessID", DWORD), + ("th32HeapID", ULONG_PTR), + ] + + LPHEAPENTRY32 = POINTER(HEAPENTRY32) + # typedef struct tagHEAPLIST32 { # SIZE_T dwSize; # DWORD th32ProcessID; @@ -2088,54 +2163,62 @@ class HEAPENTRY32(Structure): # *PHEAPLIST32; class HEAPLIST32(Structure): _fields_ = [ - ("dwSize", SIZE_T), - ("th32ProcessID", DWORD), - ("th32HeapID", ULONG_PTR), - ("dwFlags", DWORD), -] + ("dwSize", SIZE_T), + ("th32ProcessID", DWORD), + ("th32HeapID", ULONG_PTR), + ("dwFlags", DWORD), + ] + + LPHEAPLIST32 = POINTER(HEAPLIST32) -#--- kernel32.dll ------------------------------------------------------------- +# --- kernel32.dll ------------------------------------------------------------- + # DWORD WINAPI GetLastError(void); def GetLastError(): _GetLastError = windll.kernel32.GetLastError _GetLastError.argtypes = [] - _GetLastError.restype = DWORD + _GetLastError.restype = DWORD return _GetLastError() + # void WINAPI SetLastError( # __in DWORD dwErrCode # ); def SetLastError(dwErrCode): _SetLastError = windll.kernel32.SetLastError _SetLastError.argtypes = [DWORD] - _SetLastError.restype = None + _SetLastError.restype = None _SetLastError(dwErrCode) + # UINT WINAPI GetErrorMode(void); def GetErrorMode(): _GetErrorMode = windll.kernel32.GetErrorMode _GetErrorMode.argtypes = [] - _GetErrorMode.restype = UINT + _GetErrorMode.restype = UINT return _GetErrorMode() + # UINT WINAPI SetErrorMode( # __in UINT uMode # ); def SetErrorMode(uMode): _SetErrorMode = windll.kernel32.SetErrorMode _SetErrorMode.argtypes = [UINT] - _SetErrorMode.restype = UINT + _SetErrorMode.restype = UINT return _SetErrorMode(dwErrCode) + # DWORD GetThreadErrorMode(void); def GetThreadErrorMode(): _GetThreadErrorMode = windll.kernel32.GetThreadErrorMode _GetThreadErrorMode.argtypes = [] - _GetThreadErrorMode.restype = DWORD + _GetThreadErrorMode.restype = DWORD return _GetThreadErrorMode() + # BOOL SetThreadErrorMode( # __in DWORD dwNewMode, # __out LPDWORD lpOldMode @@ -2143,13 +2226,14 @@ def GetThreadErrorMode(): def SetThreadErrorMode(dwNewMode): _SetThreadErrorMode = windll.kernel32.SetThreadErrorMode _SetThreadErrorMode.argtypes = [DWORD, LPDWORD] - _SetThreadErrorMode.restype = BOOL + _SetThreadErrorMode.restype = BOOL _SetThreadErrorMode.errcheck = RaiseIfZero old = DWORD(0) _SetThreadErrorMode(dwErrCode, byref(old)) return old.value + # BOOL WINAPI CloseHandle( # __in HANDLE hObject # ); @@ -2160,10 +2244,11 @@ def CloseHandle(hHandle): else: _CloseHandle = windll.kernel32.CloseHandle _CloseHandle.argtypes = [HANDLE] - _CloseHandle.restype = bool + _CloseHandle.restype = bool _CloseHandle.errcheck = RaiseIfZero _CloseHandle(hHandle) + # BOOL WINAPI DuplicateHandle( # __in HANDLE hSourceProcessHandle, # __in HANDLE hSourceHandle, @@ -2173,10 +2258,17 @@ def CloseHandle(hHandle): # __in BOOL bInheritHandle, # __in DWORD dwOptions # ); -def DuplicateHandle(hSourceHandle, hSourceProcessHandle = None, hTargetProcessHandle = None, dwDesiredAccess = STANDARD_RIGHTS_ALL, bInheritHandle = False, dwOptions = DUPLICATE_SAME_ACCESS): +def DuplicateHandle( + hSourceHandle, + hSourceProcessHandle=None, + hTargetProcessHandle=None, + dwDesiredAccess=STANDARD_RIGHTS_ALL, + bInheritHandle=False, + dwOptions=DUPLICATE_SAME_ACCESS, +): _DuplicateHandle = windll.kernel32.DuplicateHandle _DuplicateHandle.argtypes = [HANDLE, HANDLE, HANDLE, LPHANDLE, DWORD, BOOL, DWORD] - _DuplicateHandle.restype = bool + _DuplicateHandle.restype = bool _DuplicateHandle.errcheck = RaiseIfZero # NOTE: the arguments to this function are in a different order, @@ -2187,40 +2279,46 @@ def DuplicateHandle(hSourceHandle, hSourceProcessHandle = None, hTargetProcessHa if hTargetProcessHandle is None: hTargetProcessHandle = hSourceProcessHandle lpTargetHandle = HANDLE(INVALID_HANDLE_VALUE) - _DuplicateHandle(hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, byref(lpTargetHandle), dwDesiredAccess, bool(bInheritHandle), dwOptions) + _DuplicateHandle( + hSourceProcessHandle, hSourceHandle, hTargetProcessHandle, byref(lpTargetHandle), dwDesiredAccess, bool(bInheritHandle), dwOptions + ) if isinstance(hSourceHandle, Handle): HandleClass = hSourceHandle.__class__ else: HandleClass = Handle - if hasattr(hSourceHandle, 'dwAccess'): - return HandleClass(lpTargetHandle.value, dwAccess = hSourceHandle.dwAccess) + if hasattr(hSourceHandle, "dwAccess"): + return HandleClass(lpTargetHandle.value, dwAccess=hSourceHandle.dwAccess) else: return HandleClass(lpTargetHandle.value) + # HLOCAL WINAPI LocalFree( # __in HLOCAL hMem # ); def LocalFree(hMem): _LocalFree = windll.kernel32.LocalFree _LocalFree.argtypes = [HLOCAL] - _LocalFree.restype = HLOCAL + _LocalFree.restype = HLOCAL result = _LocalFree(hMem) if result != NULL: ctypes.WinError() -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Console API + # HANDLE WINAPI GetStdHandle( # _In_ DWORD nStdHandle # ); def GetStdHandle(nStdHandle): _GetStdHandle = windll.kernel32.GetStdHandle _GetStdHandle.argytpes = [DWORD] - _GetStdHandle.restype = HANDLE + _GetStdHandle.restype = HANDLE _GetStdHandle.errcheck = RaiseIfZero - return Handle( _GetStdHandle(nStdHandle), bOwnership = False ) + return Handle(_GetStdHandle(nStdHandle), bOwnership=False) + # BOOL WINAPI SetStdHandle( # _In_ DWORD nStdHandle, @@ -2229,40 +2327,45 @@ def GetStdHandle(nStdHandle): # TODO + # UINT WINAPI GetConsoleCP(void); def GetConsoleCP(): _GetConsoleCP = windll.kernel32.GetConsoleCP _GetConsoleCP.argytpes = [] - _GetConsoleCP.restype = UINT + _GetConsoleCP.restype = UINT return _GetConsoleCP() + # UINT WINAPI GetConsoleOutputCP(void); def GetConsoleOutputCP(): _GetConsoleOutputCP = windll.kernel32.GetConsoleOutputCP _GetConsoleOutputCP.argytpes = [] - _GetConsoleOutputCP.restype = UINT + _GetConsoleOutputCP.restype = UINT return _GetConsoleOutputCP() -#BOOL WINAPI SetConsoleCP( + +# BOOL WINAPI SetConsoleCP( # _In_ UINT wCodePageID -#); +# ); def SetConsoleCP(wCodePageID): _SetConsoleCP = windll.kernel32.SetConsoleCP _SetConsoleCP.argytpes = [UINT] - _SetConsoleCP.restype = bool + _SetConsoleCP.restype = bool _SetConsoleCP.errcheck = RaiseIfZero _SetConsoleCP(wCodePageID) -#BOOL WINAPI SetConsoleOutputCP( + +# BOOL WINAPI SetConsoleOutputCP( # _In_ UINT wCodePageID -#); +# ); def SetConsoleOutputCP(wCodePageID): _SetConsoleOutputCP = windll.kernel32.SetConsoleOutputCP _SetConsoleOutputCP.argytpes = [UINT] - _SetConsoleOutputCP.restype = bool + _SetConsoleOutputCP.restype = bool _SetConsoleOutputCP.errcheck = RaiseIfZero _SetConsoleOutputCP(wCodePageID) + # HANDLE WINAPI CreateConsoleScreenBuffer( # _In_ DWORD dwDesiredAccess, # _In_ DWORD dwShareMode, @@ -2273,27 +2376,29 @@ def SetConsoleOutputCP(wCodePageID): # TODO + # BOOL WINAPI SetConsoleActiveScreenBuffer( # _In_ HANDLE hConsoleOutput # ); -def SetConsoleActiveScreenBuffer(hConsoleOutput = None): +def SetConsoleActiveScreenBuffer(hConsoleOutput=None): _SetConsoleActiveScreenBuffer = windll.kernel32.SetConsoleActiveScreenBuffer _SetConsoleActiveScreenBuffer.argytpes = [HANDLE] - _SetConsoleActiveScreenBuffer.restype = bool + _SetConsoleActiveScreenBuffer.restype = bool _SetConsoleActiveScreenBuffer.errcheck = RaiseIfZero if hConsoleOutput is None: hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE) _SetConsoleActiveScreenBuffer(hConsoleOutput) + # BOOL WINAPI GetConsoleScreenBufferInfo( # _In_ HANDLE hConsoleOutput, # _Out_ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo # ); -def GetConsoleScreenBufferInfo(hConsoleOutput = None): +def GetConsoleScreenBufferInfo(hConsoleOutput=None): _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo _GetConsoleScreenBufferInfo.argytpes = [HANDLE, PCONSOLE_SCREEN_BUFFER_INFO] - _GetConsoleScreenBufferInfo.restype = bool + _GetConsoleScreenBufferInfo.restype = bool _GetConsoleScreenBufferInfo.errcheck = RaiseIfZero if hConsoleOutput is None: @@ -2302,6 +2407,7 @@ def GetConsoleScreenBufferInfo(hConsoleOutput = None): _GetConsoleScreenBufferInfo(hConsoleOutput, byref(ConsoleScreenBufferInfo)) return ConsoleScreenBufferInfo + # BOOL WINAPI GetConsoleScreenBufferInfoEx( # _In_ HANDLE hConsoleOutput, # _Out_ PCONSOLE_SCREEN_BUFFER_INFOEX lpConsoleScreenBufferInfoEx @@ -2309,6 +2415,7 @@ def GetConsoleScreenBufferInfo(hConsoleOutput = None): # TODO + # BOOL WINAPI SetConsoleWindowInfo( # _In_ HANDLE hConsoleOutput, # _In_ BOOL bAbsolute, @@ -2317,7 +2424,7 @@ def GetConsoleScreenBufferInfo(hConsoleOutput = None): def SetConsoleWindowInfo(hConsoleOutput, bAbsolute, lpConsoleWindow): _SetConsoleWindowInfo = windll.kernel32.SetConsoleWindowInfo _SetConsoleWindowInfo.argytpes = [HANDLE, BOOL, PSMALL_RECT] - _SetConsoleWindowInfo.restype = bool + _SetConsoleWindowInfo.restype = bool _SetConsoleWindowInfo.errcheck = RaiseIfZero if hConsoleOutput is None: @@ -2328,20 +2435,22 @@ def SetConsoleWindowInfo(hConsoleOutput, bAbsolute, lpConsoleWindow): ConsoleWindow = SMALL_RECT(*lpConsoleWindow) _SetConsoleWindowInfo(hConsoleOutput, bAbsolute, byref(ConsoleWindow)) + # BOOL WINAPI SetConsoleTextAttribute( # _In_ HANDLE hConsoleOutput, # _In_ WORD wAttributes # ); -def SetConsoleTextAttribute(hConsoleOutput = None, wAttributes = 0): +def SetConsoleTextAttribute(hConsoleOutput=None, wAttributes=0): _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute _SetConsoleTextAttribute.argytpes = [HANDLE, WORD] - _SetConsoleTextAttribute.restype = bool + _SetConsoleTextAttribute.restype = bool _SetConsoleTextAttribute.errcheck = RaiseIfZero if hConsoleOutput is None: hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE) _SetConsoleTextAttribute(hConsoleOutput, wAttributes) + # HANDLE WINAPI CreateConsoleScreenBuffer( # _In_ DWORD dwDesiredAccess, # _In_ DWORD dwShareMode, @@ -2352,32 +2461,36 @@ def SetConsoleTextAttribute(hConsoleOutput = None, wAttributes = 0): # TODO + # BOOL WINAPI AllocConsole(void); def AllocConsole(): _AllocConsole = windll.kernel32.AllocConsole _AllocConsole.argytpes = [] - _AllocConsole.restype = bool + _AllocConsole.restype = bool _AllocConsole.errcheck = RaiseIfZero _AllocConsole() + # BOOL WINAPI AttachConsole( # _In_ DWORD dwProcessId # ); -def AttachConsole(dwProcessId = ATTACH_PARENT_PROCESS): +def AttachConsole(dwProcessId=ATTACH_PARENT_PROCESS): _AttachConsole = windll.kernel32.AttachConsole _AttachConsole.argytpes = [DWORD] - _AttachConsole.restype = bool + _AttachConsole.restype = bool _AttachConsole.errcheck = RaiseIfZero _AttachConsole(dwProcessId) + # BOOL WINAPI FreeConsole(void); def FreeConsole(): _FreeConsole = windll.kernel32.FreeConsole _FreeConsole.argytpes = [] - _FreeConsole.restype = bool + _FreeConsole.restype = bool _FreeConsole.errcheck = RaiseIfZero _FreeConsole() + # DWORD WINAPI GetConsoleProcessList( # _Out_ LPDWORD lpdwProcessList, # _In_ DWORD dwProcessCount @@ -2392,9 +2505,9 @@ def FreeConsole(): # TODO -#BOOL WINAPI SetConsoleTitle( +# BOOL WINAPI SetConsoleTitle( # _In_ LPCTSTR lpConsoleTitle -#); +# ); # TODO @@ -2410,9 +2523,10 @@ def FreeConsole(): # TODO -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # DLL API + # DWORD WINAPI GetDllDirectory( # __in DWORD nBufferLength, # __out LPTSTR lpBuffer @@ -2420,7 +2534,7 @@ def FreeConsole(): def GetDllDirectoryA(): _GetDllDirectoryA = windll.kernel32.GetDllDirectoryA _GetDllDirectoryA.argytpes = [DWORD, LPSTR] - _GetDllDirectoryA.restype = DWORD + _GetDllDirectoryA.restype = DWORD nBufferLength = _GetDllDirectoryA(0, None) if nBufferLength == 0: @@ -2429,110 +2543,125 @@ def GetDllDirectoryA(): _GetDllDirectoryA(nBufferLength, byref(lpBuffer)) return lpBuffer.value + def GetDllDirectoryW(): _GetDllDirectoryW = windll.kernel32.GetDllDirectoryW _GetDllDirectoryW.argytpes = [DWORD, LPWSTR] - _GetDllDirectoryW.restype = DWORD + _GetDllDirectoryW.restype = DWORD nBufferLength = _GetDllDirectoryW(0, None) if nBufferLength == 0: return None - lpBuffer = ctypes.create_unicode_buffer(u"", nBufferLength) + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength) _GetDllDirectoryW(nBufferLength, byref(lpBuffer)) return lpBuffer.value + GetDllDirectory = GuessStringType(GetDllDirectoryA, GetDllDirectoryW) + # BOOL WINAPI SetDllDirectory( # __in_opt LPCTSTR lpPathName # ); -def SetDllDirectoryA(lpPathName = None): +def SetDllDirectoryA(lpPathName=None): _SetDllDirectoryA = windll.kernel32.SetDllDirectoryA _SetDllDirectoryA.argytpes = [LPSTR] - _SetDllDirectoryA.restype = bool + _SetDllDirectoryA.restype = bool _SetDllDirectoryA.errcheck = RaiseIfZero _SetDllDirectoryA(lpPathName) + def SetDllDirectoryW(lpPathName): _SetDllDirectoryW = windll.kernel32.SetDllDirectoryW _SetDllDirectoryW.argytpes = [LPWSTR] - _SetDllDirectoryW.restype = bool + _SetDllDirectoryW.restype = bool _SetDllDirectoryW.errcheck = RaiseIfZero _SetDllDirectoryW(lpPathName) + SetDllDirectory = GuessStringType(SetDllDirectoryA, SetDllDirectoryW) + # HMODULE WINAPI LoadLibrary( # __in LPCTSTR lpFileName # ); def LoadLibraryA(pszLibrary): _LoadLibraryA = windll.kernel32.LoadLibraryA _LoadLibraryA.argtypes = [LPSTR] - _LoadLibraryA.restype = HMODULE + _LoadLibraryA.restype = HMODULE hModule = _LoadLibraryA(pszLibrary) if hModule == NULL: raise ctypes.WinError() return hModule + def LoadLibraryW(pszLibrary): _LoadLibraryW = windll.kernel32.LoadLibraryW _LoadLibraryW.argtypes = [LPWSTR] - _LoadLibraryW.restype = HMODULE + _LoadLibraryW.restype = HMODULE hModule = _LoadLibraryW(pszLibrary) if hModule == NULL: raise ctypes.WinError() return hModule + LoadLibrary = GuessStringType(LoadLibraryA, LoadLibraryW) + # HMODULE WINAPI LoadLibraryEx( # __in LPCTSTR lpFileName, # __reserved HANDLE hFile, # __in DWORD dwFlags # ); -def LoadLibraryExA(pszLibrary, dwFlags = 0): +def LoadLibraryExA(pszLibrary, dwFlags=0): _LoadLibraryExA = windll.kernel32.LoadLibraryExA _LoadLibraryExA.argtypes = [LPSTR, HANDLE, DWORD] - _LoadLibraryExA.restype = HMODULE + _LoadLibraryExA.restype = HMODULE hModule = _LoadLibraryExA(pszLibrary, NULL, dwFlags) if hModule == NULL: raise ctypes.WinError() return hModule -def LoadLibraryExW(pszLibrary, dwFlags = 0): + +def LoadLibraryExW(pszLibrary, dwFlags=0): _LoadLibraryExW = windll.kernel32.LoadLibraryExW _LoadLibraryExW.argtypes = [LPWSTR, HANDLE, DWORD] - _LoadLibraryExW.restype = HMODULE + _LoadLibraryExW.restype = HMODULE hModule = _LoadLibraryExW(pszLibrary, NULL, dwFlags) if hModule == NULL: raise ctypes.WinError() return hModule + LoadLibraryEx = GuessStringType(LoadLibraryExA, LoadLibraryExW) + # HMODULE WINAPI GetModuleHandle( # __in_opt LPCTSTR lpModuleName # ); def GetModuleHandleA(lpModuleName): _GetModuleHandleA = windll.kernel32.GetModuleHandleA _GetModuleHandleA.argtypes = [LPSTR] - _GetModuleHandleA.restype = HMODULE + _GetModuleHandleA.restype = HMODULE hModule = _GetModuleHandleA(lpModuleName) if hModule == NULL: raise ctypes.WinError() return hModule + def GetModuleHandleW(lpModuleName): _GetModuleHandleW = windll.kernel32.GetModuleHandleW _GetModuleHandleW.argtypes = [LPWSTR] - _GetModuleHandleW.restype = HMODULE + _GetModuleHandleW.restype = HMODULE hModule = _GetModuleHandleW(lpModuleName) if hModule == NULL: raise ctypes.WinError() return hModule + GetModuleHandle = GuessStringType(GetModuleHandleA, GetModuleHandleW) + # FARPROC WINAPI GetProcAddress( # __in HMODULE hModule, # __in LPCSTR lpProcName @@ -2540,31 +2669,34 @@ def GetModuleHandleW(lpModuleName): def GetProcAddressA(hModule, lpProcName): _GetProcAddress = windll.kernel32.GetProcAddress _GetProcAddress.argtypes = [HMODULE, LPVOID] - _GetProcAddress.restype = LPVOID + _GetProcAddress.restype = LPVOID if type(lpProcName) in (type(0), type(long(0))): lpProcName = LPVOID(lpProcName) if lpProcName.value & (~0xFFFF): - raise ValueError('Ordinal number too large: %d' % lpProcName.value) + raise ValueError("Ordinal number too large: %d" % lpProcName.value) elif type(lpProcName) == type(compat.b("")): lpProcName = ctypes.c_char_p(lpProcName) else: raise TypeError(str(type(lpProcName))) return _GetProcAddress(hModule, lpProcName) + GetProcAddressW = MakeWideVersion(GetProcAddressA) GetProcAddress = GuessStringType(GetProcAddressA, GetProcAddressW) + # BOOL WINAPI FreeLibrary( # __in HMODULE hModule # ); def FreeLibrary(hModule): _FreeLibrary = windll.kernel32.FreeLibrary _FreeLibrary.argtypes = [HMODULE] - _FreeLibrary.restype = bool + _FreeLibrary.restype = bool _FreeLibrary.errcheck = RaiseIfZero _FreeLibrary(hModule) + # PVOID WINAPI RtlPcToFileHeader( # __in PVOID PcValue, # __out PVOID *BaseOfImage @@ -2572,15 +2704,17 @@ def FreeLibrary(hModule): def RtlPcToFileHeader(PcValue): _RtlPcToFileHeader = windll.kernel32.RtlPcToFileHeader _RtlPcToFileHeader.argtypes = [PVOID, POINTER(PVOID)] - _RtlPcToFileHeader.restype = PRUNTIME_FUNCTION + _RtlPcToFileHeader.restype = PRUNTIME_FUNCTION BaseOfImage = PVOID(0) _RtlPcToFileHeader(PcValue, byref(BaseOfImage)) return BaseOfImage.value -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # File API and related + # BOOL WINAPI GetHandleInformation( # __in HANDLE hObject, # __out LPDWORD lpdwFlags @@ -2588,13 +2722,14 @@ def RtlPcToFileHeader(PcValue): def GetHandleInformation(hObject): _GetHandleInformation = windll.kernel32.GetHandleInformation _GetHandleInformation.argtypes = [HANDLE, PDWORD] - _GetHandleInformation.restype = bool + _GetHandleInformation.restype = bool _GetHandleInformation.errcheck = RaiseIfZero dwFlags = DWORD(0) _GetHandleInformation(hObject, byref(dwFlags)) return dwFlags.value + # BOOL WINAPI SetHandleInformation( # __in HANDLE hObject, # __in DWORD dwMask, @@ -2603,10 +2738,11 @@ def GetHandleInformation(hObject): def SetHandleInformation(hObject, dwMask, dwFlags): _SetHandleInformation = windll.kernel32.SetHandleInformation _SetHandleInformation.argtypes = [HANDLE, DWORD, DWORD] - _SetHandleInformation.restype = bool + _SetHandleInformation.restype = bool _SetHandleInformation.errcheck = RaiseIfZero _SetHandleInformation(hObject, dwMask, dwFlags) + # UINT WINAPI GetWindowModuleFileName( # __in HWND hwnd, # __out LPTSTR lpszFileName, @@ -2615,21 +2751,22 @@ def SetHandleInformation(hObject, dwMask, dwFlags): # Not included because it doesn't work in other processes. # See: http://support.microsoft.com/?id=228469 + # BOOL WINAPI QueryFullProcessImageName( # __in HANDLE hProcess, # __in DWORD dwFlags, # __out LPTSTR lpExeName, # __inout PDWORD lpdwSize # ); -def QueryFullProcessImageNameA(hProcess, dwFlags = 0): +def QueryFullProcessImageNameA(hProcess, dwFlags=0): _QueryFullProcessImageNameA = windll.kernel32.QueryFullProcessImageNameA _QueryFullProcessImageNameA.argtypes = [HANDLE, DWORD, LPSTR, PDWORD] - _QueryFullProcessImageNameA.restype = bool + _QueryFullProcessImageNameA.restype = bool dwSize = MAX_PATH while 1: lpdwSize = DWORD(dwSize) - lpExeName = ctypes.create_string_buffer('', lpdwSize.value + 1) + lpExeName = ctypes.create_string_buffer("", lpdwSize.value + 1) success = _QueryFullProcessImageNameA(hProcess, dwFlags, lpExeName, byref(lpdwSize)) if success and 0 < lpdwSize.value < dwSize: break @@ -2643,15 +2780,16 @@ def QueryFullProcessImageNameA(hProcess, dwFlags = 0): raise ctypes.WinError(error) return lpExeName.value -def QueryFullProcessImageNameW(hProcess, dwFlags = 0): + +def QueryFullProcessImageNameW(hProcess, dwFlags=0): _QueryFullProcessImageNameW = windll.kernel32.QueryFullProcessImageNameW _QueryFullProcessImageNameW.argtypes = [HANDLE, DWORD, LPWSTR, PDWORD] - _QueryFullProcessImageNameW.restype = bool + _QueryFullProcessImageNameW.restype = bool dwSize = MAX_PATH while 1: lpdwSize = DWORD(dwSize) - lpExeName = ctypes.create_unicode_buffer('', lpdwSize.value + 1) + lpExeName = ctypes.create_unicode_buffer("", lpdwSize.value + 1) success = _QueryFullProcessImageNameW(hProcess, dwFlags, lpExeName, byref(lpdwSize)) if success and 0 < lpdwSize.value < dwSize: break @@ -2665,8 +2803,10 @@ def QueryFullProcessImageNameW(hProcess, dwFlags = 0): raise ctypes.WinError(error) return lpExeName.value + QueryFullProcessImageName = GuessStringType(QueryFullProcessImageNameA, QueryFullProcessImageNameW) + # DWORD WINAPI GetLogicalDriveStrings( # __in DWORD nBufferLength, # __out LPTSTR lpBuffer @@ -2674,43 +2814,45 @@ def QueryFullProcessImageNameW(hProcess, dwFlags = 0): def GetLogicalDriveStringsA(): _GetLogicalDriveStringsA = ctypes.windll.kernel32.GetLogicalDriveStringsA _GetLogicalDriveStringsA.argtypes = [DWORD, LPSTR] - _GetLogicalDriveStringsA.restype = DWORD + _GetLogicalDriveStringsA.restype = DWORD _GetLogicalDriveStringsA.errcheck = RaiseIfZero - nBufferLength = (4 * 26) + 1 # "X:\\\0" from A to Z plus empty string - lpBuffer = ctypes.create_string_buffer('', nBufferLength) + nBufferLength = (4 * 26) + 1 # "X:\\\0" from A to Z plus empty string + lpBuffer = ctypes.create_string_buffer("", nBufferLength) _GetLogicalDriveStringsA(nBufferLength, lpBuffer) drive_strings = list() string_p = addressof(lpBuffer) sizeof_char = sizeof(ctypes.c_char) while True: string_v = ctypes.string_at(string_p) - if string_v == '': + if string_v == "": break drive_strings.append(string_v) string_p += len(string_v) + sizeof_char return drive_strings + def GetLogicalDriveStringsW(): _GetLogicalDriveStringsW = ctypes.windll.kernel32.GetLogicalDriveStringsW _GetLogicalDriveStringsW.argtypes = [DWORD, LPWSTR] - _GetLogicalDriveStringsW.restype = DWORD + _GetLogicalDriveStringsW.restype = DWORD _GetLogicalDriveStringsW.errcheck = RaiseIfZero - nBufferLength = (4 * 26) + 1 # "X:\\\0" from A to Z plus empty string - lpBuffer = ctypes.create_unicode_buffer(u'', nBufferLength) + nBufferLength = (4 * 26) + 1 # "X:\\\0" from A to Z plus empty string + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength) _GetLogicalDriveStringsW(nBufferLength, lpBuffer) drive_strings = list() string_p = addressof(lpBuffer) sizeof_wchar = sizeof(ctypes.c_wchar) while True: string_v = ctypes.wstring_at(string_p) - if string_v == u'': + if string_v == "": break drive_strings.append(string_v) string_p += (len(string_v) * sizeof_wchar) + sizeof_wchar return drive_strings + ##def GetLogicalDriveStringsA(): ## _GetLogicalDriveStringsA = windll.kernel32.GetLogicalDriveStringsA ## _GetLogicalDriveStringsA.argtypes = [DWORD, LPSTR] @@ -2761,39 +2903,43 @@ def GetLogicalDriveStringsW(): GetLogicalDriveStrings = GuessStringType(GetLogicalDriveStringsA, GetLogicalDriveStringsW) + # DWORD WINAPI QueryDosDevice( # __in_opt LPCTSTR lpDeviceName, # __out LPTSTR lpTargetPath, # __in DWORD ucchMax # ); -def QueryDosDeviceA(lpDeviceName = None): +def QueryDosDeviceA(lpDeviceName=None): _QueryDosDeviceA = windll.kernel32.QueryDosDeviceA _QueryDosDeviceA.argtypes = [LPSTR, LPSTR, DWORD] - _QueryDosDeviceA.restype = DWORD + _QueryDosDeviceA.restype = DWORD _QueryDosDeviceA.errcheck = RaiseIfZero if not lpDeviceName: lpDeviceName = None ucchMax = 0x1000 - lpTargetPath = ctypes.create_string_buffer('', ucchMax) + lpTargetPath = ctypes.create_string_buffer("", ucchMax) _QueryDosDeviceA(lpDeviceName, lpTargetPath, ucchMax) return lpTargetPath.value + def QueryDosDeviceW(lpDeviceName): _QueryDosDeviceW = windll.kernel32.QueryDosDeviceW _QueryDosDeviceW.argtypes = [LPWSTR, LPWSTR, DWORD] - _QueryDosDeviceW.restype = DWORD + _QueryDosDeviceW.restype = DWORD _QueryDosDeviceW.errcheck = RaiseIfZero if not lpDeviceName: lpDeviceName = None ucchMax = 0x1000 - lpTargetPath = ctypes.create_unicode_buffer(u'', ucchMax) + lpTargetPath = ctypes.create_unicode_buffer("", ucchMax) _QueryDosDeviceW(lpDeviceName, lpTargetPath, ucchMax) return lpTargetPath.value + QueryDosDevice = GuessStringType(QueryDosDeviceA, QueryDosDeviceW) + # LPVOID WINAPI MapViewOfFile( # __in HANDLE hFileMappingObject, # __in DWORD dwDesiredAccess, @@ -2801,25 +2947,33 @@ def QueryDosDeviceW(lpDeviceName): # __in DWORD dwFileOffsetLow, # __in SIZE_T dwNumberOfBytesToMap # ); -def MapViewOfFile(hFileMappingObject, dwDesiredAccess = FILE_MAP_ALL_ACCESS | FILE_MAP_EXECUTE, dwFileOffsetHigh = 0, dwFileOffsetLow = 0, dwNumberOfBytesToMap = 0): +def MapViewOfFile( + hFileMappingObject, + dwDesiredAccess=FILE_MAP_ALL_ACCESS | FILE_MAP_EXECUTE, + dwFileOffsetHigh=0, + dwFileOffsetLow=0, + dwNumberOfBytesToMap=0, +): _MapViewOfFile = windll.kernel32.MapViewOfFile _MapViewOfFile.argtypes = [HANDLE, DWORD, DWORD, DWORD, SIZE_T] - _MapViewOfFile.restype = LPVOID + _MapViewOfFile.restype = LPVOID lpBaseAddress = _MapViewOfFile(hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap) if lpBaseAddress == NULL: raise ctypes.WinError() return lpBaseAddress + # BOOL WINAPI UnmapViewOfFile( # __in LPCVOID lpBaseAddress # ); def UnmapViewOfFile(lpBaseAddress): _UnmapViewOfFile = windll.kernel32.UnmapViewOfFile _UnmapViewOfFile.argtypes = [LPVOID] - _UnmapViewOfFile.restype = bool + _UnmapViewOfFile.restype = bool _UnmapViewOfFile.errcheck = RaiseIfZero _UnmapViewOfFile(lpBaseAddress) + # HANDLE WINAPI OpenFileMapping( # __in DWORD dwDesiredAccess, # __in BOOL bInheritHandle, @@ -2828,21 +2982,24 @@ def UnmapViewOfFile(lpBaseAddress): def OpenFileMappingA(dwDesiredAccess, bInheritHandle, lpName): _OpenFileMappingA = windll.kernel32.OpenFileMappingA _OpenFileMappingA.argtypes = [DWORD, BOOL, LPSTR] - _OpenFileMappingA.restype = HANDLE + _OpenFileMappingA.restype = HANDLE _OpenFileMappingA.errcheck = RaiseIfZero hFileMappingObject = _OpenFileMappingA(dwDesiredAccess, bool(bInheritHandle), lpName) return FileMappingHandle(hFileMappingObject) + def OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName): _OpenFileMappingW = windll.kernel32.OpenFileMappingW _OpenFileMappingW.argtypes = [DWORD, BOOL, LPWSTR] - _OpenFileMappingW.restype = HANDLE + _OpenFileMappingW.restype = HANDLE _OpenFileMappingW.errcheck = RaiseIfZero hFileMappingObject = _OpenFileMappingW(dwDesiredAccess, bool(bInheritHandle), lpName) return FileMappingHandle(hFileMappingObject) + OpenFileMapping = GuessStringType(OpenFileMappingA, OpenFileMappingW) + # HANDLE WINAPI CreateFileMapping( # __in HANDLE hFile, # __in_opt LPSECURITY_ATTRIBUTES lpAttributes, @@ -2851,10 +3008,10 @@ def OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName): # __in DWORD dwMaximumSizeLow, # __in_opt LPCTSTR lpName # ); -def CreateFileMappingA(hFile, lpAttributes = None, flProtect = PAGE_EXECUTE_READWRITE, dwMaximumSizeHigh = 0, dwMaximumSizeLow = 0, lpName = None): +def CreateFileMappingA(hFile, lpAttributes=None, flProtect=PAGE_EXECUTE_READWRITE, dwMaximumSizeHigh=0, dwMaximumSizeLow=0, lpName=None): _CreateFileMappingA = windll.kernel32.CreateFileMappingA _CreateFileMappingA.argtypes = [HANDLE, LPVOID, DWORD, DWORD, DWORD, LPSTR] - _CreateFileMappingA.restype = HANDLE + _CreateFileMappingA.restype = HANDLE _CreateFileMappingA.errcheck = RaiseIfZero if lpAttributes: @@ -2864,10 +3021,11 @@ def CreateFileMappingA(hFile, lpAttributes = None, flProtect = PAGE_EXECUTE_READ hFileMappingObject = _CreateFileMappingA(hFile, lpAttributes, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpName) return FileMappingHandle(hFileMappingObject) -def CreateFileMappingW(hFile, lpAttributes = None, flProtect = PAGE_EXECUTE_READWRITE, dwMaximumSizeHigh = 0, dwMaximumSizeLow = 0, lpName = None): + +def CreateFileMappingW(hFile, lpAttributes=None, flProtect=PAGE_EXECUTE_READWRITE, dwMaximumSizeHigh=0, dwMaximumSizeLow=0, lpName=None): _CreateFileMappingW = windll.kernel32.CreateFileMappingW _CreateFileMappingW.argtypes = [HANDLE, LPVOID, DWORD, DWORD, DWORD, LPWSTR] - _CreateFileMappingW.restype = HANDLE + _CreateFileMappingW.restype = HANDLE _CreateFileMappingW.errcheck = RaiseIfZero if lpAttributes: @@ -2877,8 +3035,10 @@ def CreateFileMappingW(hFile, lpAttributes = None, flProtect = PAGE_EXECUTE_READ hFileMappingObject = _CreateFileMappingW(hFile, lpAttributes, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpName) return FileMappingHandle(hFileMappingObject) + CreateFileMapping = GuessStringType(CreateFileMappingA, CreateFileMappingW) + # HANDLE WINAPI CreateFile( # __in LPCTSTR lpFileName, # __in DWORD dwDesiredAccess, @@ -2888,57 +3048,82 @@ def CreateFileMappingW(hFile, lpAttributes = None, flProtect = PAGE_EXECUTE_READ # __in DWORD dwFlagsAndAttributes, # __in_opt HANDLE hTemplateFile # ); -def CreateFileA(lpFileName, dwDesiredAccess = GENERIC_ALL, dwShareMode = 0, lpSecurityAttributes = None, dwCreationDisposition = OPEN_ALWAYS, dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL, hTemplateFile = None): +def CreateFileA( + lpFileName, + dwDesiredAccess=GENERIC_ALL, + dwShareMode=0, + lpSecurityAttributes=None, + dwCreationDisposition=OPEN_ALWAYS, + dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, + hTemplateFile=None, +): _CreateFileA = windll.kernel32.CreateFileA _CreateFileA.argtypes = [LPSTR, DWORD, DWORD, LPVOID, DWORD, DWORD, HANDLE] - _CreateFileA.restype = HANDLE + _CreateFileA.restype = HANDLE if not lpFileName: lpFileName = None if lpSecurityAttributes: lpSecurityAttributes = ctypes.pointer(lpSecurityAttributes) - hFile = _CreateFileA(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile) + hFile = _CreateFileA( + lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile + ) if hFile == INVALID_HANDLE_VALUE: raise ctypes.WinError() return FileHandle(hFile) -def CreateFileW(lpFileName, dwDesiredAccess = GENERIC_ALL, dwShareMode = 0, lpSecurityAttributes = None, dwCreationDisposition = OPEN_ALWAYS, dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL, hTemplateFile = None): + +def CreateFileW( + lpFileName, + dwDesiredAccess=GENERIC_ALL, + dwShareMode=0, + lpSecurityAttributes=None, + dwCreationDisposition=OPEN_ALWAYS, + dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL, + hTemplateFile=None, +): _CreateFileW = windll.kernel32.CreateFileW _CreateFileW.argtypes = [LPWSTR, DWORD, DWORD, LPVOID, DWORD, DWORD, HANDLE] - _CreateFileW.restype = HANDLE + _CreateFileW.restype = HANDLE if not lpFileName: lpFileName = None if lpSecurityAttributes: lpSecurityAttributes = ctypes.pointer(lpSecurityAttributes) - hFile = _CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile) + hFile = _CreateFileW( + lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile + ) if hFile == INVALID_HANDLE_VALUE: raise ctypes.WinError() return FileHandle(hFile) + CreateFile = GuessStringType(CreateFileA, CreateFileW) + # BOOL WINAPI FlushFileBuffers( # __in HANDLE hFile # ); def FlushFileBuffers(hFile): _FlushFileBuffers = windll.kernel32.FlushFileBuffers _FlushFileBuffers.argtypes = [HANDLE] - _FlushFileBuffers.restype = bool + _FlushFileBuffers.restype = bool _FlushFileBuffers.errcheck = RaiseIfZero _FlushFileBuffers(hFile) + # BOOL WINAPI FlushViewOfFile( # __in LPCVOID lpBaseAddress, # __in SIZE_T dwNumberOfBytesToFlush # ); -def FlushViewOfFile(lpBaseAddress, dwNumberOfBytesToFlush = 0): +def FlushViewOfFile(lpBaseAddress, dwNumberOfBytesToFlush=0): _FlushViewOfFile = windll.kernel32.FlushViewOfFile _FlushViewOfFile.argtypes = [LPVOID, SIZE_T] - _FlushViewOfFile.restype = bool + _FlushViewOfFile.restype = bool _FlushViewOfFile.errcheck = RaiseIfZero _FlushViewOfFile(lpBaseAddress, dwNumberOfBytesToFlush) + # DWORD WINAPI SearchPath( # __in_opt LPCTSTR lpPath, # __in LPCTSTR lpFileName, @@ -2950,7 +3135,7 @@ def FlushViewOfFile(lpBaseAddress, dwNumberOfBytesToFlush = 0): def SearchPathA(lpPath, lpFileName, lpExtension): _SearchPathA = windll.kernel32.SearchPathA _SearchPathA.argtypes = [LPSTR, LPSTR, LPSTR, DWORD, LPSTR, POINTER(LPSTR)] - _SearchPathA.restype = DWORD + _SearchPathA.restype = DWORD _SearchPathA.errcheck = RaiseIfZero if not lpPath: @@ -2958,21 +3143,22 @@ def SearchPathA(lpPath, lpFileName, lpExtension): if not lpExtension: lpExtension = None nBufferLength = _SearchPathA(lpPath, lpFileName, lpExtension, 0, None, None) - lpBuffer = ctypes.create_string_buffer('', nBufferLength + 1) + lpBuffer = ctypes.create_string_buffer("", nBufferLength + 1) lpFilePart = LPSTR() _SearchPathA(lpPath, lpFileName, lpExtension, nBufferLength, lpBuffer, byref(lpFilePart)) lpFilePart = lpFilePart.value lpBuffer = lpBuffer.value - if lpBuffer == '': + if lpBuffer == "": if GetLastError() == ERROR_SUCCESS: raise ctypes.WinError(ERROR_FILE_NOT_FOUND) raise ctypes.WinError() return (lpBuffer, lpFilePart) + def SearchPathW(lpPath, lpFileName, lpExtension): _SearchPathW = windll.kernel32.SearchPathW _SearchPathW.argtypes = [LPWSTR, LPWSTR, LPWSTR, DWORD, LPWSTR, POINTER(LPWSTR)] - _SearchPathW.restype = DWORD + _SearchPathW.restype = DWORD _SearchPathW.errcheck = RaiseIfZero if not lpPath: @@ -2980,29 +3166,32 @@ def SearchPathW(lpPath, lpFileName, lpExtension): if not lpExtension: lpExtension = None nBufferLength = _SearchPathW(lpPath, lpFileName, lpExtension, 0, None, None) - lpBuffer = ctypes.create_unicode_buffer(u'', nBufferLength + 1) + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength + 1) lpFilePart = LPWSTR() _SearchPathW(lpPath, lpFileName, lpExtension, nBufferLength, lpBuffer, byref(lpFilePart)) lpFilePart = lpFilePart.value lpBuffer = lpBuffer.value - if lpBuffer == u'': + if lpBuffer == "": if GetLastError() == ERROR_SUCCESS: raise ctypes.WinError(ERROR_FILE_NOT_FOUND) raise ctypes.WinError() return (lpBuffer, lpFilePart) + SearchPath = GuessStringType(SearchPathA, SearchPathW) + # BOOL SetSearchPathMode( # __in DWORD Flags # ); def SetSearchPathMode(Flags): _SetSearchPathMode = windll.kernel32.SetSearchPathMode _SetSearchPathMode.argtypes = [DWORD] - _SetSearchPathMode.restype = bool + _SetSearchPathMode.restype = bool _SetSearchPathMode.errcheck = RaiseIfZero _SetSearchPathMode(Flags) + # BOOL WINAPI DeviceIoControl( # __in HANDLE hDevice, # __in DWORD dwIoControlCode, @@ -3016,7 +3205,7 @@ def SetSearchPathMode(Flags): def DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpOverlapped): _DeviceIoControl = windll.kernel32.DeviceIoControl _DeviceIoControl.argtypes = [HANDLE, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPOVERLAPPED] - _DeviceIoControl.restype = bool + _DeviceIoControl.restype = bool _DeviceIoControl.errcheck = RaiseIfZero if not lpInBuffer: @@ -3029,6 +3218,7 @@ def DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBu _DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, byref(lpBytesReturned), lpOverlapped) return lpBytesReturned.value + # BOOL GetFileInformationByHandle( # HANDLE hFile, # LPBY_HANDLE_FILE_INFORMATION lpFileInformation @@ -3036,13 +3226,14 @@ def DeviceIoControl(hDevice, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBu def GetFileInformationByHandle(hFile): _GetFileInformationByHandle = windll.kernel32.GetFileInformationByHandle _GetFileInformationByHandle.argtypes = [HANDLE, LPBY_HANDLE_FILE_INFORMATION] - _GetFileInformationByHandle.restype = bool + _GetFileInformationByHandle.restype = bool _GetFileInformationByHandle.errcheck = RaiseIfZero lpFileInformation = BY_HANDLE_FILE_INFORMATION() _GetFileInformationByHandle(hFile, byref(lpFileInformation)) return lpFileInformation + # BOOL WINAPI GetFileInformationByHandleEx( # __in HANDLE hFile, # __in FILE_INFO_BY_HANDLE_CLASS FileInformationClass, @@ -3052,49 +3243,53 @@ def GetFileInformationByHandle(hFile): def GetFileInformationByHandleEx(hFile, FileInformationClass, lpFileInformation, dwBufferSize): _GetFileInformationByHandleEx = windll.kernel32.GetFileInformationByHandleEx _GetFileInformationByHandleEx.argtypes = [HANDLE, DWORD, LPVOID, DWORD] - _GetFileInformationByHandleEx.restype = bool + _GetFileInformationByHandleEx.restype = bool _GetFileInformationByHandleEx.errcheck = RaiseIfZero # XXX TODO # support each FileInformationClass so the function can allocate the # corresponding structure for the lpFileInformation parameter _GetFileInformationByHandleEx(hFile, FileInformationClass, byref(lpFileInformation), dwBufferSize) + # DWORD WINAPI GetFinalPathNameByHandle( # __in HANDLE hFile, # __out LPTSTR lpszFilePath, # __in DWORD cchFilePath, # __in DWORD dwFlags # ); -def GetFinalPathNameByHandleA(hFile, dwFlags = FILE_NAME_NORMALIZED | VOLUME_NAME_DOS): +def GetFinalPathNameByHandleA(hFile, dwFlags=FILE_NAME_NORMALIZED | VOLUME_NAME_DOS): _GetFinalPathNameByHandleA = windll.kernel32.GetFinalPathNameByHandleA _GetFinalPathNameByHandleA.argtypes = [HANDLE, LPSTR, DWORD, DWORD] - _GetFinalPathNameByHandleA.restype = DWORD + _GetFinalPathNameByHandleA.restype = DWORD cchFilePath = _GetFinalPathNameByHandleA(hFile, None, 0, dwFlags) if cchFilePath == 0: raise ctypes.WinError() - lpszFilePath = ctypes.create_string_buffer('', cchFilePath + 1) + lpszFilePath = ctypes.create_string_buffer("", cchFilePath + 1) nCopied = _GetFinalPathNameByHandleA(hFile, lpszFilePath, cchFilePath, dwFlags) if nCopied <= 0 or nCopied > cchFilePath: raise ctypes.WinError() return lpszFilePath.value -def GetFinalPathNameByHandleW(hFile, dwFlags = FILE_NAME_NORMALIZED | VOLUME_NAME_DOS): + +def GetFinalPathNameByHandleW(hFile, dwFlags=FILE_NAME_NORMALIZED | VOLUME_NAME_DOS): _GetFinalPathNameByHandleW = windll.kernel32.GetFinalPathNameByHandleW _GetFinalPathNameByHandleW.argtypes = [HANDLE, LPWSTR, DWORD, DWORD] - _GetFinalPathNameByHandleW.restype = DWORD + _GetFinalPathNameByHandleW.restype = DWORD cchFilePath = _GetFinalPathNameByHandleW(hFile, None, 0, dwFlags) if cchFilePath == 0: raise ctypes.WinError() - lpszFilePath = ctypes.create_unicode_buffer(u'', cchFilePath + 1) + lpszFilePath = ctypes.create_unicode_buffer("", cchFilePath + 1) nCopied = _GetFinalPathNameByHandleW(hFile, lpszFilePath, cchFilePath, dwFlags) if nCopied <= 0 or nCopied > cchFilePath: raise ctypes.WinError() return lpszFilePath.value + GetFinalPathNameByHandle = GuessStringType(GetFinalPathNameByHandleA, GetFinalPathNameByHandleW) + # DWORD GetFullPathName( # LPCTSTR lpFileName, # DWORD nBufferLength, @@ -3104,35 +3299,38 @@ def GetFinalPathNameByHandleW(hFile, dwFlags = FILE_NAME_NORMALIZED | VOLUME_NAM def GetFullPathNameA(lpFileName): _GetFullPathNameA = windll.kernel32.GetFullPathNameA _GetFullPathNameA.argtypes = [LPSTR, DWORD, LPSTR, POINTER(LPSTR)] - _GetFullPathNameA.restype = DWORD + _GetFullPathNameA.restype = DWORD nBufferLength = _GetFullPathNameA(lpFileName, 0, None, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_string_buffer('', nBufferLength + 1) + lpBuffer = ctypes.create_string_buffer("", nBufferLength + 1) lpFilePart = LPSTR() nCopied = _GetFullPathNameA(lpFileName, nBufferLength, lpBuffer, byref(lpFilePart)) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value, lpFilePart.value + def GetFullPathNameW(lpFileName): _GetFullPathNameW = windll.kernel32.GetFullPathNameW _GetFullPathNameW.argtypes = [LPWSTR, DWORD, LPWSTR, POINTER(LPWSTR)] - _GetFullPathNameW.restype = DWORD + _GetFullPathNameW.restype = DWORD nBufferLength = _GetFullPathNameW(lpFileName, 0, None, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_unicode_buffer(u'', nBufferLength + 1) + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength + 1) lpFilePart = LPWSTR() nCopied = _GetFullPathNameW(lpFileName, nBufferLength, lpBuffer, byref(lpFilePart)) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value, lpFilePart.value + GetFullPathName = GuessStringType(GetFullPathNameA, GetFullPathNameW) + # DWORD WINAPI GetTempPath( # __in DWORD nBufferLength, # __out LPTSTR lpBuffer @@ -3140,67 +3338,73 @@ def GetFullPathNameW(lpFileName): def GetTempPathA(): _GetTempPathA = windll.kernel32.GetTempPathA _GetTempPathA.argtypes = [DWORD, LPSTR] - _GetTempPathA.restype = DWORD + _GetTempPathA.restype = DWORD nBufferLength = _GetTempPathA(0, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_string_buffer('', nBufferLength) + lpBuffer = ctypes.create_string_buffer("", nBufferLength) nCopied = _GetTempPathA(nBufferLength, lpBuffer) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value + def GetTempPathW(): _GetTempPathW = windll.kernel32.GetTempPathW _GetTempPathW.argtypes = [DWORD, LPWSTR] - _GetTempPathW.restype = DWORD + _GetTempPathW.restype = DWORD nBufferLength = _GetTempPathW(0, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_unicode_buffer(u'', nBufferLength) + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength) nCopied = _GetTempPathW(nBufferLength, lpBuffer) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value + GetTempPath = GuessStringType(GetTempPathA, GetTempPathW) + # UINT WINAPI GetTempFileName( # __in LPCTSTR lpPathName, # __in LPCTSTR lpPrefixString, # __in UINT uUnique, # __out LPTSTR lpTempFileName # ); -def GetTempFileNameA(lpPathName = None, lpPrefixString = "TMP", uUnique = 0): +def GetTempFileNameA(lpPathName=None, lpPrefixString="TMP", uUnique=0): _GetTempFileNameA = windll.kernel32.GetTempFileNameA _GetTempFileNameA.argtypes = [LPSTR, LPSTR, UINT, LPSTR] - _GetTempFileNameA.restype = UINT + _GetTempFileNameA.restype = UINT if lpPathName is None: lpPathName = GetTempPathA() - lpTempFileName = ctypes.create_string_buffer('', MAX_PATH) + lpTempFileName = ctypes.create_string_buffer("", MAX_PATH) uUnique = _GetTempFileNameA(lpPathName, lpPrefixString, uUnique, lpTempFileName) if uUnique == 0: raise ctypes.WinError() return lpTempFileName.value, uUnique -def GetTempFileNameW(lpPathName = None, lpPrefixString = u"TMP", uUnique = 0): + +def GetTempFileNameW(lpPathName=None, lpPrefixString="TMP", uUnique=0): _GetTempFileNameW = windll.kernel32.GetTempFileNameW _GetTempFileNameW.argtypes = [LPWSTR, LPWSTR, UINT, LPWSTR] - _GetTempFileNameW.restype = UINT + _GetTempFileNameW.restype = UINT if lpPathName is None: lpPathName = GetTempPathW() - lpTempFileName = ctypes.create_unicode_buffer(u'', MAX_PATH) + lpTempFileName = ctypes.create_unicode_buffer("", MAX_PATH) uUnique = _GetTempFileNameW(lpPathName, lpPrefixString, uUnique, lpTempFileName) if uUnique == 0: raise ctypes.WinError() return lpTempFileName.value, uUnique + GetTempFileName = GuessStringType(GetTempFileNameA, GetTempFileNameW) + # DWORD WINAPI GetCurrentDirectory( # __in DWORD nBufferLength, # __out LPTSTR lpBuffer @@ -3208,34 +3412,36 @@ def GetTempFileNameW(lpPathName = None, lpPrefixString = u"TMP", uUnique = 0): def GetCurrentDirectoryA(): _GetCurrentDirectoryA = windll.kernel32.GetCurrentDirectoryA _GetCurrentDirectoryA.argtypes = [DWORD, LPSTR] - _GetCurrentDirectoryA.restype = DWORD + _GetCurrentDirectoryA.restype = DWORD nBufferLength = _GetCurrentDirectoryA(0, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_string_buffer('', nBufferLength) + lpBuffer = ctypes.create_string_buffer("", nBufferLength) nCopied = _GetCurrentDirectoryA(nBufferLength, lpBuffer) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value + def GetCurrentDirectoryW(): _GetCurrentDirectoryW = windll.kernel32.GetCurrentDirectoryW _GetCurrentDirectoryW.argtypes = [DWORD, LPWSTR] - _GetCurrentDirectoryW.restype = DWORD + _GetCurrentDirectoryW.restype = DWORD nBufferLength = _GetCurrentDirectoryW(0, None) if nBufferLength <= 0: raise ctypes.WinError() - lpBuffer = ctypes.create_unicode_buffer(u'', nBufferLength) + lpBuffer = ctypes.create_unicode_buffer("", nBufferLength) nCopied = _GetCurrentDirectoryW(nBufferLength, lpBuffer) if nCopied > nBufferLength or nCopied == 0: raise ctypes.WinError() return lpBuffer.value + GetCurrentDirectory = GuessStringType(GetCurrentDirectoryA, GetCurrentDirectoryW) -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # Contrl-C handler # BOOL WINAPI HandlerRoutine( @@ -3243,20 +3449,22 @@ def GetCurrentDirectoryW(): # ); PHANDLER_ROUTINE = ctypes.WINFUNCTYPE(BOOL, DWORD) + # BOOL WINAPI SetConsoleCtrlHandler( # __in_opt PHANDLER_ROUTINE HandlerRoutine, # __in BOOL Add # ); -def SetConsoleCtrlHandler(HandlerRoutine = None, Add = True): +def SetConsoleCtrlHandler(HandlerRoutine=None, Add=True): _SetConsoleCtrlHandler = windll.kernel32.SetConsoleCtrlHandler _SetConsoleCtrlHandler.argtypes = [PHANDLER_ROUTINE, BOOL] - _SetConsoleCtrlHandler.restype = bool + _SetConsoleCtrlHandler.restype = bool _SetConsoleCtrlHandler.errcheck = RaiseIfZero _SetConsoleCtrlHandler(HandlerRoutine, bool(Add)) # we can't automagically transform Python functions to PHANDLER_ROUTINE # because a) the actual pointer value is meaningful to the API # and b) if it gets garbage collected bad things would happen + # BOOL WINAPI GenerateConsoleCtrlEvent( # __in DWORD dwCtrlEvent, # __in DWORD dwProcessGroupId @@ -3264,11 +3472,12 @@ def SetConsoleCtrlHandler(HandlerRoutine = None, Add = True): def GenerateConsoleCtrlEvent(dwCtrlEvent, dwProcessGroupId): _GenerateConsoleCtrlEvent = windll.kernel32.GenerateConsoleCtrlEvent _GenerateConsoleCtrlEvent.argtypes = [DWORD, DWORD] - _GenerateConsoleCtrlEvent.restype = bool + _GenerateConsoleCtrlEvent.restype = bool _GenerateConsoleCtrlEvent.errcheck = RaiseIfZero _GenerateConsoleCtrlEvent(dwCtrlEvent, dwProcessGroupId) -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Synchronization API # XXX NOTE @@ -3281,14 +3490,15 @@ def GenerateConsoleCtrlEvent(dwCtrlEvent, dwProcessGroupId): # Also see: bug #2793618 in Psyco project # http://sourceforge.net/tracker/?func=detail&aid=2793618&group_id=41036&atid=429622 + # DWORD WINAPI WaitForSingleObject( # HANDLE hHandle, # DWORD dwMilliseconds # ); -def WaitForSingleObject(hHandle, dwMilliseconds = INFINITE): +def WaitForSingleObject(hHandle, dwMilliseconds=INFINITE): _WaitForSingleObject = windll.kernel32.WaitForSingleObject _WaitForSingleObject.argtypes = [HANDLE, DWORD] - _WaitForSingleObject.restype = DWORD + _WaitForSingleObject.restype = DWORD if not dwMilliseconds and dwMilliseconds != 0: dwMilliseconds = INFINITE @@ -3305,15 +3515,16 @@ def WaitForSingleObject(hHandle, dwMilliseconds = INFINITE): break return r + # DWORD WINAPI WaitForSingleObjectEx( # HANDLE hHandle, # DWORD dwMilliseconds, # BOOL bAlertable # ); -def WaitForSingleObjectEx(hHandle, dwMilliseconds = INFINITE, bAlertable = True): +def WaitForSingleObjectEx(hHandle, dwMilliseconds=INFINITE, bAlertable=True): _WaitForSingleObjectEx = windll.kernel32.WaitForSingleObjectEx _WaitForSingleObjectEx.argtypes = [HANDLE, DWORD, BOOL] - _WaitForSingleObjectEx.restype = DWORD + _WaitForSingleObjectEx.restype = DWORD if not dwMilliseconds and dwMilliseconds != 0: dwMilliseconds = INFINITE @@ -3330,22 +3541,23 @@ def WaitForSingleObjectEx(hHandle, dwMilliseconds = INFINITE, bAlertable = True) break return r + # DWORD WINAPI WaitForMultipleObjects( # DWORD nCount, # const HANDLE *lpHandles, # BOOL bWaitAll, # DWORD dwMilliseconds # ); -def WaitForMultipleObjects(handles, bWaitAll = False, dwMilliseconds = INFINITE): +def WaitForMultipleObjects(handles, bWaitAll=False, dwMilliseconds=INFINITE): _WaitForMultipleObjects = windll.kernel32.WaitForMultipleObjects _WaitForMultipleObjects.argtypes = [DWORD, POINTER(HANDLE), BOOL, DWORD] - _WaitForMultipleObjects.restype = DWORD + _WaitForMultipleObjects.restype = DWORD if not dwMilliseconds and dwMilliseconds != 0: dwMilliseconds = INFINITE - nCount = len(handles) - lpHandlesType = HANDLE * nCount - lpHandles = lpHandlesType(*handles) + nCount = len(handles) + lpHandlesType = HANDLE * nCount + lpHandles = lpHandlesType(*handles) if dwMilliseconds != INFINITE: r = _WaitForMultipleObjects(byref(lpHandles), bool(bWaitAll), dwMilliseconds) if r == WAIT_FAILED: @@ -3359,6 +3571,7 @@ def WaitForMultipleObjects(handles, bWaitAll = False, dwMilliseconds = INFINITE) break return r + # DWORD WINAPI WaitForMultipleObjectsEx( # DWORD nCount, # const HANDLE *lpHandles, @@ -3366,16 +3579,16 @@ def WaitForMultipleObjects(handles, bWaitAll = False, dwMilliseconds = INFINITE) # DWORD dwMilliseconds, # BOOL bAlertable # ); -def WaitForMultipleObjectsEx(handles, bWaitAll = False, dwMilliseconds = INFINITE, bAlertable = True): +def WaitForMultipleObjectsEx(handles, bWaitAll=False, dwMilliseconds=INFINITE, bAlertable=True): _WaitForMultipleObjectsEx = windll.kernel32.WaitForMultipleObjectsEx _WaitForMultipleObjectsEx.argtypes = [DWORD, POINTER(HANDLE), BOOL, DWORD] - _WaitForMultipleObjectsEx.restype = DWORD + _WaitForMultipleObjectsEx.restype = DWORD if not dwMilliseconds and dwMilliseconds != 0: dwMilliseconds = INFINITE - nCount = len(handles) - lpHandlesType = HANDLE * nCount - lpHandles = lpHandlesType(*handles) + nCount = len(handles) + lpHandlesType = HANDLE * nCount + lpHandles = lpHandlesType(*handles) if dwMilliseconds != INFINITE: r = _WaitForMultipleObjectsEx(byref(lpHandles), bool(bWaitAll), dwMilliseconds, bool(bAlertable)) if r == WAIT_FAILED: @@ -3389,88 +3602,100 @@ def WaitForMultipleObjectsEx(handles, bWaitAll = False, dwMilliseconds = INFINIT break return r + # HANDLE WINAPI CreateMutex( # _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, # _In_ BOOL bInitialOwner, # _In_opt_ LPCTSTR lpName # ); -def CreateMutexA(lpMutexAttributes = None, bInitialOwner = True, lpName = None): +def CreateMutexA(lpMutexAttributes=None, bInitialOwner=True, lpName=None): _CreateMutexA = windll.kernel32.CreateMutexA _CreateMutexA.argtypes = [LPVOID, BOOL, LPSTR] - _CreateMutexA.restype = HANDLE + _CreateMutexA.restype = HANDLE _CreateMutexA.errcheck = RaiseIfZero - return Handle( _CreateMutexA(lpMutexAttributes, bInitialOwner, lpName) ) + return Handle(_CreateMutexA(lpMutexAttributes, bInitialOwner, lpName)) -def CreateMutexW(lpMutexAttributes = None, bInitialOwner = True, lpName = None): + +def CreateMutexW(lpMutexAttributes=None, bInitialOwner=True, lpName=None): _CreateMutexW = windll.kernel32.CreateMutexW _CreateMutexW.argtypes = [LPVOID, BOOL, LPWSTR] - _CreateMutexW.restype = HANDLE + _CreateMutexW.restype = HANDLE _CreateMutexW.errcheck = RaiseIfZero - return Handle( _CreateMutexW(lpMutexAttributes, bInitialOwner, lpName) ) + return Handle(_CreateMutexW(lpMutexAttributes, bInitialOwner, lpName)) + CreateMutex = GuessStringType(CreateMutexA, CreateMutexW) + # HANDLE WINAPI OpenMutex( # _In_ DWORD dwDesiredAccess, # _In_ BOOL bInheritHandle, # _In_ LPCTSTR lpName # ); -def OpenMutexA(dwDesiredAccess = MUTEX_ALL_ACCESS, bInitialOwner = True, lpName = None): +def OpenMutexA(dwDesiredAccess=MUTEX_ALL_ACCESS, bInitialOwner=True, lpName=None): _OpenMutexA = windll.kernel32.OpenMutexA _OpenMutexA.argtypes = [DWORD, BOOL, LPSTR] - _OpenMutexA.restype = HANDLE + _OpenMutexA.restype = HANDLE _OpenMutexA.errcheck = RaiseIfZero - return Handle( _OpenMutexA(lpMutexAttributes, bInitialOwner, lpName) ) + return Handle(_OpenMutexA(lpMutexAttributes, bInitialOwner, lpName)) -def OpenMutexW(dwDesiredAccess = MUTEX_ALL_ACCESS, bInitialOwner = True, lpName = None): + +def OpenMutexW(dwDesiredAccess=MUTEX_ALL_ACCESS, bInitialOwner=True, lpName=None): _OpenMutexW = windll.kernel32.OpenMutexW _OpenMutexW.argtypes = [DWORD, BOOL, LPWSTR] - _OpenMutexW.restype = HANDLE + _OpenMutexW.restype = HANDLE _OpenMutexW.errcheck = RaiseIfZero - return Handle( _OpenMutexW(lpMutexAttributes, bInitialOwner, lpName) ) + return Handle(_OpenMutexW(lpMutexAttributes, bInitialOwner, lpName)) + OpenMutex = GuessStringType(OpenMutexA, OpenMutexW) + # HANDLE WINAPI CreateEvent( # _In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes, # _In_ BOOL bManualReset, # _In_ BOOL bInitialState, # _In_opt_ LPCTSTR lpName # ); -def CreateEventA(lpMutexAttributes = None, bManualReset = False, bInitialState = False, lpName = None): +def CreateEventA(lpMutexAttributes=None, bManualReset=False, bInitialState=False, lpName=None): _CreateEventA = windll.kernel32.CreateEventA _CreateEventA.argtypes = [LPVOID, BOOL, BOOL, LPSTR] - _CreateEventA.restype = HANDLE + _CreateEventA.restype = HANDLE _CreateEventA.errcheck = RaiseIfZero - return Handle( _CreateEventA(lpMutexAttributes, bManualReset, bInitialState, lpName) ) + return Handle(_CreateEventA(lpMutexAttributes, bManualReset, bInitialState, lpName)) -def CreateEventW(lpMutexAttributes = None, bManualReset = False, bInitialState = False, lpName = None): + +def CreateEventW(lpMutexAttributes=None, bManualReset=False, bInitialState=False, lpName=None): _CreateEventW = windll.kernel32.CreateEventW _CreateEventW.argtypes = [LPVOID, BOOL, BOOL, LPWSTR] - _CreateEventW.restype = HANDLE + _CreateEventW.restype = HANDLE _CreateEventW.errcheck = RaiseIfZero - return Handle( _CreateEventW(lpMutexAttributes, bManualReset, bInitialState, lpName) ) + return Handle(_CreateEventW(lpMutexAttributes, bManualReset, bInitialState, lpName)) + CreateEvent = GuessStringType(CreateEventA, CreateEventW) + # HANDLE WINAPI OpenEvent( # _In_ DWORD dwDesiredAccess, # _In_ BOOL bInheritHandle, # _In_ LPCTSTR lpName # ); -def OpenEventA(dwDesiredAccess = EVENT_ALL_ACCESS, bInheritHandle = False, lpName = None): +def OpenEventA(dwDesiredAccess=EVENT_ALL_ACCESS, bInheritHandle=False, lpName=None): _OpenEventA = windll.kernel32.OpenEventA _OpenEventA.argtypes = [DWORD, BOOL, LPSTR] - _OpenEventA.restype = HANDLE + _OpenEventA.restype = HANDLE _OpenEventA.errcheck = RaiseIfZero - return Handle( _OpenEventA(dwDesiredAccess, bInheritHandle, lpName) ) + return Handle(_OpenEventA(dwDesiredAccess, bInheritHandle, lpName)) + -def OpenEventW(dwDesiredAccess = EVENT_ALL_ACCESS, bInheritHandle = False, lpName = None): +def OpenEventW(dwDesiredAccess=EVENT_ALL_ACCESS, bInheritHandle=False, lpName=None): _OpenEventW = windll.kernel32.OpenEventW _OpenEventW.argtypes = [DWORD, BOOL, LPWSTR] - _OpenEventW.restype = HANDLE + _OpenEventW.restype = HANDLE _OpenEventW.errcheck = RaiseIfZero - return Handle( _OpenEventW(dwDesiredAccess, bInheritHandle, lpName) ) + return Handle(_OpenEventW(dwDesiredAccess, bInheritHandle, lpName)) + OpenEvent = GuessStringType(OpenEventA, OpenEventW) @@ -3491,46 +3716,51 @@ def OpenEventW(dwDesiredAccess = EVENT_ALL_ACCESS, bInheritHandle = False, lpNam # TODO + # BOOL WINAPI ReleaseMutex( # _In_ HANDLE hMutex # ); def ReleaseMutex(hMutex): _ReleaseMutex = windll.kernel32.ReleaseMutex _ReleaseMutex.argtypes = [HANDLE] - _ReleaseMutex.restype = bool + _ReleaseMutex.restype = bool _ReleaseMutex.errcheck = RaiseIfZero _ReleaseMutex(hMutex) + # BOOL WINAPI SetEvent( # _In_ HANDLE hEvent # ); def SetEvent(hEvent): _SetEvent = windll.kernel32.SetEvent _SetEvent.argtypes = [HANDLE] - _SetEvent.restype = bool + _SetEvent.restype = bool _SetEvent.errcheck = RaiseIfZero _SetEvent(hEvent) + # BOOL WINAPI ResetEvent( # _In_ HANDLE hEvent # ); def ResetEvent(hEvent): _ResetEvent = windll.kernel32.ResetEvent _ResetEvent.argtypes = [HANDLE] - _ResetEvent.restype = bool + _ResetEvent.restype = bool _ResetEvent.errcheck = RaiseIfZero _ResetEvent(hEvent) + # BOOL WINAPI PulseEvent( # _In_ HANDLE hEvent # ); def PulseEvent(hEvent): _PulseEvent = windll.kernel32.PulseEvent _PulseEvent.argtypes = [HANDLE] - _PulseEvent.restype = bool + _PulseEvent.restype = bool _PulseEvent.errcheck = RaiseIfZero _PulseEvent(hEvent) + # BOOL WINAPI ReleaseSemaphore( # _In_ HANDLE hSemaphore, # _In_ LONG lReleaseCount, @@ -3539,24 +3769,25 @@ def PulseEvent(hEvent): # TODO -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # Debug API + # BOOL WaitForDebugEvent( # LPDEBUG_EVENT lpDebugEvent, # DWORD dwMilliseconds # ); -def WaitForDebugEvent(dwMilliseconds = INFINITE): +def WaitForDebugEvent(dwMilliseconds=INFINITE): _WaitForDebugEvent = windll.kernel32.WaitForDebugEvent _WaitForDebugEvent.argtypes = [LPDEBUG_EVENT, DWORD] - _WaitForDebugEvent.restype = DWORD + _WaitForDebugEvent.restype = DWORD if not dwMilliseconds and dwMilliseconds != 0: dwMilliseconds = INFINITE - lpDebugEvent = DEBUG_EVENT() + lpDebugEvent = DEBUG_EVENT() lpDebugEvent.dwDebugEventCode = 0 - lpDebugEvent.dwProcessId = 0 - lpDebugEvent.dwThreadId = 0 + lpDebugEvent.dwProcessId = 0 + lpDebugEvent.dwThreadId = 0 if dwMilliseconds != INFINITE: success = _WaitForDebugEvent(byref(lpDebugEvent), dwMilliseconds) if success == 0: @@ -3572,51 +3803,56 @@ def WaitForDebugEvent(dwMilliseconds = INFINITE): raise ctypes.WinError(code) return lpDebugEvent + # BOOL ContinueDebugEvent( # DWORD dwProcessId, # DWORD dwThreadId, # DWORD dwContinueStatus # ); -def ContinueDebugEvent(dwProcessId, dwThreadId, dwContinueStatus = DBG_EXCEPTION_NOT_HANDLED): +def ContinueDebugEvent(dwProcessId, dwThreadId, dwContinueStatus=DBG_EXCEPTION_NOT_HANDLED): _ContinueDebugEvent = windll.kernel32.ContinueDebugEvent _ContinueDebugEvent.argtypes = [DWORD, DWORD, DWORD] - _ContinueDebugEvent.restype = bool + _ContinueDebugEvent.restype = bool _ContinueDebugEvent.errcheck = RaiseIfZero _ContinueDebugEvent(dwProcessId, dwThreadId, dwContinueStatus) + # BOOL WINAPI FlushInstructionCache( # __in HANDLE hProcess, # __in LPCVOID lpBaseAddress, # __in SIZE_T dwSize # ); -def FlushInstructionCache(hProcess, lpBaseAddress = None, dwSize = 0): +def FlushInstructionCache(hProcess, lpBaseAddress=None, dwSize=0): # http://blogs.msdn.com/oldnewthing/archive/2003/12/08/55954.aspx#55958 _FlushInstructionCache = windll.kernel32.FlushInstructionCache _FlushInstructionCache.argtypes = [HANDLE, LPVOID, SIZE_T] - _FlushInstructionCache.restype = bool + _FlushInstructionCache.restype = bool _FlushInstructionCache.errcheck = RaiseIfZero _FlushInstructionCache(hProcess, lpBaseAddress, dwSize) + # BOOL DebugActiveProcess( # DWORD dwProcessId # ); def DebugActiveProcess(dwProcessId): _DebugActiveProcess = windll.kernel32.DebugActiveProcess _DebugActiveProcess.argtypes = [DWORD] - _DebugActiveProcess.restype = bool + _DebugActiveProcess.restype = bool _DebugActiveProcess.errcheck = RaiseIfZero _DebugActiveProcess(dwProcessId) + # BOOL DebugActiveProcessStop( # DWORD dwProcessId # ); def DebugActiveProcessStop(dwProcessId): _DebugActiveProcessStop = windll.kernel32.DebugActiveProcessStop _DebugActiveProcessStop.argtypes = [DWORD] - _DebugActiveProcessStop.restype = bool + _DebugActiveProcessStop.restype = bool _DebugActiveProcessStop.errcheck = RaiseIfZero _DebugActiveProcessStop(dwProcessId) + # BOOL CheckRemoteDebuggerPresent( # HANDLE hProcess, # PBOOL pbDebuggerPresent @@ -3624,50 +3860,56 @@ def DebugActiveProcessStop(dwProcessId): def CheckRemoteDebuggerPresent(hProcess): _CheckRemoteDebuggerPresent = windll.kernel32.CheckRemoteDebuggerPresent _CheckRemoteDebuggerPresent.argtypes = [HANDLE, PBOOL] - _CheckRemoteDebuggerPresent.restype = bool + _CheckRemoteDebuggerPresent.restype = bool _CheckRemoteDebuggerPresent.errcheck = RaiseIfZero pbDebuggerPresent = BOOL(0) _CheckRemoteDebuggerPresent(hProcess, byref(pbDebuggerPresent)) return bool(pbDebuggerPresent.value) + # BOOL DebugSetProcessKillOnExit( # BOOL KillOnExit # ); def DebugSetProcessKillOnExit(KillOnExit): _DebugSetProcessKillOnExit = windll.kernel32.DebugSetProcessKillOnExit _DebugSetProcessKillOnExit.argtypes = [BOOL] - _DebugSetProcessKillOnExit.restype = bool + _DebugSetProcessKillOnExit.restype = bool _DebugSetProcessKillOnExit.errcheck = RaiseIfZero _DebugSetProcessKillOnExit(bool(KillOnExit)) + # BOOL DebugBreakProcess( # HANDLE Process # ); def DebugBreakProcess(hProcess): _DebugBreakProcess = windll.kernel32.DebugBreakProcess _DebugBreakProcess.argtypes = [HANDLE] - _DebugBreakProcess.restype = bool + _DebugBreakProcess.restype = bool _DebugBreakProcess.errcheck = RaiseIfZero _DebugBreakProcess(hProcess) + # void WINAPI OutputDebugString( # __in_opt LPCTSTR lpOutputString # ); def OutputDebugStringA(lpOutputString): _OutputDebugStringA = windll.kernel32.OutputDebugStringA _OutputDebugStringA.argtypes = [LPSTR] - _OutputDebugStringA.restype = None + _OutputDebugStringA.restype = None _OutputDebugStringA(lpOutputString) + def OutputDebugStringW(lpOutputString): _OutputDebugStringW = windll.kernel32.OutputDebugStringW _OutputDebugStringW.argtypes = [LPWSTR] - _OutputDebugStringW.restype = None + _OutputDebugStringW.restype = None _OutputDebugStringW(lpOutputString) + OutputDebugString = GuessStringType(OutputDebugStringA, OutputDebugStringW) + # BOOL WINAPI ReadProcessMemory( # __in HANDLE hProcess, # __in LPCVOID lpBaseAddress, @@ -3678,14 +3920,15 @@ def OutputDebugStringW(lpOutputString): def ReadProcessMemory(hProcess, lpBaseAddress, nSize): _ReadProcessMemory = windll.kernel32.ReadProcessMemory _ReadProcessMemory.argtypes = [HANDLE, LPVOID, LPVOID, SIZE_T, POINTER(SIZE_T)] - _ReadProcessMemory.restype = bool + _ReadProcessMemory.restype = bool - lpBuffer = ctypes.create_string_buffer(compat.b(''), nSize) + lpBuffer = ctypes.create_string_buffer(compat.b(""), nSize) lpNumberOfBytesRead = SIZE_T(0) success = _ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, byref(lpNumberOfBytesRead)) if not success and GetLastError() != ERROR_PARTIAL_COPY: raise ctypes.WinError() - return compat.b(lpBuffer.raw)[:lpNumberOfBytesRead.value] + return compat.b(lpBuffer.raw)[: lpNumberOfBytesRead.value] + # BOOL WINAPI WriteProcessMemory( # __in HANDLE hProcess, @@ -3697,16 +3940,17 @@ def ReadProcessMemory(hProcess, lpBaseAddress, nSize): def WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer): _WriteProcessMemory = windll.kernel32.WriteProcessMemory _WriteProcessMemory.argtypes = [HANDLE, LPVOID, LPVOID, SIZE_T, POINTER(SIZE_T)] - _WriteProcessMemory.restype = bool + _WriteProcessMemory.restype = bool - nSize = len(lpBuffer) - lpBuffer = ctypes.create_string_buffer(lpBuffer) - lpNumberOfBytesWritten = SIZE_T(0) + nSize = len(lpBuffer) + lpBuffer = ctypes.create_string_buffer(lpBuffer) + lpNumberOfBytesWritten = SIZE_T(0) success = _WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, byref(lpNumberOfBytesWritten)) if not success and GetLastError() != ERROR_PARTIAL_COPY: raise ctypes.WinError() return lpNumberOfBytesWritten.value + # LPVOID WINAPI VirtualAllocEx( # __in HANDLE hProcess, # __in_opt LPVOID lpAddress, @@ -3714,16 +3958,17 @@ def WriteProcessMemory(hProcess, lpBaseAddress, lpBuffer): # __in DWORD flAllocationType, # __in DWORD flProtect # ); -def VirtualAllocEx(hProcess, lpAddress = 0, dwSize = 0x1000, flAllocationType = MEM_COMMIT | MEM_RESERVE, flProtect = PAGE_EXECUTE_READWRITE): +def VirtualAllocEx(hProcess, lpAddress=0, dwSize=0x1000, flAllocationType=MEM_COMMIT | MEM_RESERVE, flProtect=PAGE_EXECUTE_READWRITE): _VirtualAllocEx = windll.kernel32.VirtualAllocEx _VirtualAllocEx.argtypes = [HANDLE, LPVOID, SIZE_T, DWORD, DWORD] - _VirtualAllocEx.restype = LPVOID + _VirtualAllocEx.restype = LPVOID lpAddress = _VirtualAllocEx(hProcess, lpAddress, dwSize, flAllocationType, flProtect) if lpAddress == NULL: raise ctypes.WinError() return lpAddress + # SIZE_T WINAPI VirtualQueryEx( # __in HANDLE hProcess, # __in_opt LPCVOID lpAddress, @@ -3733,15 +3978,16 @@ def VirtualAllocEx(hProcess, lpAddress = 0, dwSize = 0x1000, flAllocationType = def VirtualQueryEx(hProcess, lpAddress): _VirtualQueryEx = windll.kernel32.VirtualQueryEx _VirtualQueryEx.argtypes = [HANDLE, LPVOID, PMEMORY_BASIC_INFORMATION, SIZE_T] - _VirtualQueryEx.restype = SIZE_T + _VirtualQueryEx.restype = SIZE_T - lpBuffer = MEMORY_BASIC_INFORMATION() - dwLength = sizeof(MEMORY_BASIC_INFORMATION) - success = _VirtualQueryEx(hProcess, lpAddress, byref(lpBuffer), dwLength) + lpBuffer = MEMORY_BASIC_INFORMATION() + dwLength = sizeof(MEMORY_BASIC_INFORMATION) + success = _VirtualQueryEx(hProcess, lpAddress, byref(lpBuffer), dwLength) if success == 0: raise ctypes.WinError() return MemoryBasicInformation(lpBuffer) + # BOOL WINAPI VirtualProtectEx( # __in HANDLE hProcess, # __in LPVOID lpAddress, @@ -3749,29 +3995,31 @@ def VirtualQueryEx(hProcess, lpAddress): # __in DWORD flNewProtect, # __out PDWORD lpflOldProtect # ); -def VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect = PAGE_EXECUTE_READWRITE): +def VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect=PAGE_EXECUTE_READWRITE): _VirtualProtectEx = windll.kernel32.VirtualProtectEx _VirtualProtectEx.argtypes = [HANDLE, LPVOID, SIZE_T, DWORD, PDWORD] - _VirtualProtectEx.restype = bool + _VirtualProtectEx.restype = bool _VirtualProtectEx.errcheck = RaiseIfZero flOldProtect = DWORD(0) _VirtualProtectEx(hProcess, lpAddress, dwSize, flNewProtect, byref(flOldProtect)) return flOldProtect.value + # BOOL WINAPI VirtualFreeEx( # __in HANDLE hProcess, # __in LPVOID lpAddress, # __in SIZE_T dwSize, # __in DWORD dwFreeType # ); -def VirtualFreeEx(hProcess, lpAddress, dwSize = 0, dwFreeType = MEM_RELEASE): +def VirtualFreeEx(hProcess, lpAddress, dwSize=0, dwFreeType=MEM_RELEASE): _VirtualFreeEx = windll.kernel32.VirtualFreeEx _VirtualFreeEx.argtypes = [HANDLE, LPVOID, SIZE_T, DWORD] - _VirtualFreeEx.restype = bool + _VirtualFreeEx.restype = bool _VirtualFreeEx.errcheck = RaiseIfZero _VirtualFreeEx(hProcess, lpAddress, dwSize, dwFreeType) + # HANDLE WINAPI CreateRemoteThread( # __in HANDLE hProcess, # __in LPSECURITY_ATTRIBUTES lpThreadAttributes, @@ -3784,21 +4032,25 @@ def VirtualFreeEx(hProcess, lpAddress, dwSize = 0, dwFreeType = MEM_RELEASE): def CreateRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags): _CreateRemoteThread = windll.kernel32.CreateRemoteThread _CreateRemoteThread.argtypes = [HANDLE, LPSECURITY_ATTRIBUTES, SIZE_T, LPVOID, LPVOID, DWORD, LPDWORD] - _CreateRemoteThread.restype = HANDLE + _CreateRemoteThread.restype = HANDLE if not lpThreadAttributes: lpThreadAttributes = None else: lpThreadAttributes = byref(lpThreadAttributes) dwThreadId = DWORD(0) - hThread = _CreateRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, byref(dwThreadId)) + hThread = _CreateRemoteThread( + hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, byref(dwThreadId) + ) if not hThread: raise ctypes.WinError() return ThreadHandle(hThread), dwThreadId.value -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Process API + # BOOL WINAPI CreateProcess( # __in_opt LPCTSTR lpApplicationName, # __inout_opt LPTSTR lpCommandLine, @@ -3811,24 +4063,45 @@ def CreateRemoteThread(hProcess, lpThreadAttributes, dwStackSize, lpStartAddress # __in LPSTARTUPINFO lpStartupInfo, # __out LPPROCESS_INFORMATION lpProcessInformation # ); -def CreateProcessA(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None): +def CreateProcessA( + lpApplicationName, + lpCommandLine=None, + lpProcessAttributes=None, + lpThreadAttributes=None, + bInheritHandles=False, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessA = windll.kernel32.CreateProcessA - _CreateProcessA.argtypes = [LPSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPSTR, LPVOID, LPPROCESS_INFORMATION] - _CreateProcessA.restype = bool + _CreateProcessA.argtypes = [ + LPSTR, + LPSTR, + LPSECURITY_ATTRIBUTES, + LPSECURITY_ATTRIBUTES, + BOOL, + DWORD, + LPVOID, + LPSTR, + LPVOID, + LPPROCESS_INFORMATION, + ] + _CreateProcessA.restype = bool _CreateProcessA.errcheck = RaiseIfZero if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_string_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_string_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_string_buffer(lpEnvironment) + lpEnvironment = ctypes.create_string_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpProcessAttributes: lpProcessAttributes = None else: @@ -3838,40 +4111,73 @@ def CreateProcessA(lpApplicationName, lpCommandLine=None, lpProcessAttributes=No else: lpThreadAttributes = byref(lpThreadAttributes) if not lpStartupInfo: - lpStartupInfo = STARTUPINFO() - lpStartupInfo.cb = sizeof(STARTUPINFO) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessA(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bool(bInheritHandles), dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFO() + lpStartupInfo.cb = sizeof(STARTUPINFO) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessA( + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bool(bInheritHandles), + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) -def CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=None, lpThreadAttributes=None, bInheritHandles=False, dwCreationFlags=0, lpEnvironment=None, lpCurrentDirectory=None, lpStartupInfo=None): + +def CreateProcessW( + lpApplicationName, + lpCommandLine=None, + lpProcessAttributes=None, + lpThreadAttributes=None, + bInheritHandles=False, + dwCreationFlags=0, + lpEnvironment=None, + lpCurrentDirectory=None, + lpStartupInfo=None, +): _CreateProcessW = windll.kernel32.CreateProcessW - _CreateProcessW.argtypes = [LPWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPWSTR, LPVOID, LPPROCESS_INFORMATION] - _CreateProcessW.restype = bool + _CreateProcessW.argtypes = [ + LPWSTR, + LPWSTR, + LPSECURITY_ATTRIBUTES, + LPSECURITY_ATTRIBUTES, + BOOL, + DWORD, + LPVOID, + LPWSTR, + LPVOID, + LPPROCESS_INFORMATION, + ] + _CreateProcessW.restype = bool _CreateProcessW.errcheck = RaiseIfZero if not lpApplicationName: - lpApplicationName = None + lpApplicationName = None if not lpCommandLine: - lpCommandLine = None + lpCommandLine = None else: - lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) + lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine, max(MAX_PATH, len(lpCommandLine))) if not lpEnvironment: - lpEnvironment = None + lpEnvironment = None else: - lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) + lpEnvironment = ctypes.create_unicode_buffer(lpEnvironment) if not lpCurrentDirectory: - lpCurrentDirectory = None + lpCurrentDirectory = None if not lpProcessAttributes: lpProcessAttributes = None else: @@ -3881,24 +4187,37 @@ def CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=No else: lpThreadAttributes = byref(lpThreadAttributes) if not lpStartupInfo: - lpStartupInfo = STARTUPINFO() - lpStartupInfo.cb = sizeof(STARTUPINFO) - lpStartupInfo.lpReserved = 0 - lpStartupInfo.lpDesktop = 0 - lpStartupInfo.lpTitle = 0 - lpStartupInfo.dwFlags = 0 - lpStartupInfo.cbReserved2 = 0 - lpStartupInfo.lpReserved2 = 0 - lpProcessInformation = PROCESS_INFORMATION() - lpProcessInformation.hProcess = INVALID_HANDLE_VALUE - lpProcessInformation.hThread = INVALID_HANDLE_VALUE - lpProcessInformation.dwProcessId = 0 - lpProcessInformation.dwThreadId = 0 - _CreateProcessW(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bool(bInheritHandles), dwCreationFlags, lpEnvironment, lpCurrentDirectory, byref(lpStartupInfo), byref(lpProcessInformation)) + lpStartupInfo = STARTUPINFO() + lpStartupInfo.cb = sizeof(STARTUPINFO) + lpStartupInfo.lpReserved = 0 + lpStartupInfo.lpDesktop = 0 + lpStartupInfo.lpTitle = 0 + lpStartupInfo.dwFlags = 0 + lpStartupInfo.cbReserved2 = 0 + lpStartupInfo.lpReserved2 = 0 + lpProcessInformation = PROCESS_INFORMATION() + lpProcessInformation.hProcess = INVALID_HANDLE_VALUE + lpProcessInformation.hThread = INVALID_HANDLE_VALUE + lpProcessInformation.dwProcessId = 0 + lpProcessInformation.dwThreadId = 0 + _CreateProcessW( + lpApplicationName, + lpCommandLine, + lpProcessAttributes, + lpThreadAttributes, + bool(bInheritHandles), + dwCreationFlags, + lpEnvironment, + lpCurrentDirectory, + byref(lpStartupInfo), + byref(lpProcessInformation), + ) return ProcessInformation(lpProcessInformation) + CreateProcess = GuessStringType(CreateProcessA, CreateProcessW) + # BOOL WINAPI InitializeProcThreadAttributeList( # __out_opt LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, # __in DWORD dwAttributeCount, @@ -3908,7 +4227,7 @@ def CreateProcessW(lpApplicationName, lpCommandLine=None, lpProcessAttributes=No def InitializeProcThreadAttributeList(dwAttributeCount): _InitializeProcThreadAttributeList = windll.kernel32.InitializeProcThreadAttributeList _InitializeProcThreadAttributeList.argtypes = [LPPROC_THREAD_ATTRIBUTE_LIST, DWORD, DWORD, PSIZE_T] - _InitializeProcThreadAttributeList.restype = bool + _InitializeProcThreadAttributeList.restype = bool Size = SIZE_T(0) _InitializeProcThreadAttributeList(None, dwAttributeCount, 0, byref(Size)) @@ -3918,6 +4237,7 @@ def InitializeProcThreadAttributeList(dwAttributeCount): RaiseIfZero(success) return AttributeList + # BOOL WINAPI UpdateProcThreadAttribute( # __inout LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, # __in DWORD dwFlags, @@ -3927,16 +4247,17 @@ def InitializeProcThreadAttributeList(dwAttributeCount): # __out_opt PVOID lpPreviousValue, # __in_opt PSIZE_T lpReturnSize # ); -def UpdateProcThreadAttribute(lpAttributeList, Attribute, Value, cbSize = None): +def UpdateProcThreadAttribute(lpAttributeList, Attribute, Value, cbSize=None): _UpdateProcThreadAttribute = windll.kernel32.UpdateProcThreadAttribute _UpdateProcThreadAttribute.argtypes = [LPPROC_THREAD_ATTRIBUTE_LIST, DWORD, DWORD_PTR, PVOID, SIZE_T, PVOID, PSIZE_T] - _UpdateProcThreadAttribute.restype = bool + _UpdateProcThreadAttribute.restype = bool _UpdateProcThreadAttribute.errcheck = RaiseIfZero if cbSize is None: cbSize = sizeof(Value) _UpdateProcThreadAttribute(byref(lpAttributeList), 0, Attribute, byref(Value), cbSize, None, None) + # VOID WINAPI DeleteProcThreadAttributeList( # __inout LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList # ); @@ -3945,6 +4266,7 @@ def DeleteProcThreadAttributeList(lpAttributeList): _DeleteProcThreadAttributeList.restype = None _DeleteProcThreadAttributeList(byref(lpAttributeList)) + # HANDLE WINAPI OpenProcess( # __in DWORD dwDesiredAccess, # __in BOOL bInheritHandle, @@ -3953,12 +4275,13 @@ def DeleteProcThreadAttributeList(lpAttributeList): def OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId): _OpenProcess = windll.kernel32.OpenProcess _OpenProcess.argtypes = [DWORD, BOOL, DWORD] - _OpenProcess.restype = HANDLE + _OpenProcess.restype = HANDLE hProcess = _OpenProcess(dwDesiredAccess, bool(bInheritHandle), dwProcessId) if hProcess == NULL: raise ctypes.WinError() - return ProcessHandle(hProcess, dwAccess = dwDesiredAccess) + return ProcessHandle(hProcess, dwAccess=dwDesiredAccess) + # HANDLE WINAPI OpenThread( # __in DWORD dwDesiredAccess, @@ -3968,12 +4291,13 @@ def OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId): def OpenThread(dwDesiredAccess, bInheritHandle, dwThreadId): _OpenThread = windll.kernel32.OpenThread _OpenThread.argtypes = [DWORD, BOOL, DWORD] - _OpenThread.restype = HANDLE + _OpenThread.restype = HANDLE hThread = _OpenThread(dwDesiredAccess, bool(bInheritHandle), dwThreadId) if hThread == NULL: raise ctypes.WinError() - return ThreadHandle(hThread, dwAccess = dwDesiredAccess) + return ThreadHandle(hThread, dwAccess=dwDesiredAccess) + # DWORD WINAPI SuspendThread( # __in HANDLE hThread @@ -3981,98 +4305,107 @@ def OpenThread(dwDesiredAccess, bInheritHandle, dwThreadId): def SuspendThread(hThread): _SuspendThread = windll.kernel32.SuspendThread _SuspendThread.argtypes = [HANDLE] - _SuspendThread.restype = DWORD + _SuspendThread.restype = DWORD previousCount = _SuspendThread(hThread) if previousCount == DWORD(-1).value: raise ctypes.WinError() return previousCount + # DWORD WINAPI ResumeThread( # __in HANDLE hThread # ); def ResumeThread(hThread): _ResumeThread = windll.kernel32.ResumeThread _ResumeThread.argtypes = [HANDLE] - _ResumeThread.restype = DWORD + _ResumeThread.restype = DWORD previousCount = _ResumeThread(hThread) if previousCount == DWORD(-1).value: raise ctypes.WinError() return previousCount + # BOOL WINAPI TerminateThread( # __inout HANDLE hThread, # __in DWORD dwExitCode # ); -def TerminateThread(hThread, dwExitCode = 0): +def TerminateThread(hThread, dwExitCode=0): _TerminateThread = windll.kernel32.TerminateThread _TerminateThread.argtypes = [HANDLE, DWORD] - _TerminateThread.restype = bool + _TerminateThread.restype = bool _TerminateThread.errcheck = RaiseIfZero _TerminateThread(hThread, dwExitCode) + # BOOL WINAPI TerminateProcess( # __inout HANDLE hProcess, # __in DWORD dwExitCode # ); -def TerminateProcess(hProcess, dwExitCode = 0): +def TerminateProcess(hProcess, dwExitCode=0): _TerminateProcess = windll.kernel32.TerminateProcess _TerminateProcess.argtypes = [HANDLE, DWORD] - _TerminateProcess.restype = bool + _TerminateProcess.restype = bool _TerminateProcess.errcheck = RaiseIfZero _TerminateProcess(hProcess, dwExitCode) + # DWORD WINAPI GetCurrentProcessId(void); def GetCurrentProcessId(): _GetCurrentProcessId = windll.kernel32.GetCurrentProcessId _GetCurrentProcessId.argtypes = [] - _GetCurrentProcessId.restype = DWORD + _GetCurrentProcessId.restype = DWORD return _GetCurrentProcessId() + # DWORD WINAPI GetCurrentThreadId(void); def GetCurrentThreadId(): _GetCurrentThreadId = windll.kernel32.GetCurrentThreadId _GetCurrentThreadId.argtypes = [] - _GetCurrentThreadId.restype = DWORD + _GetCurrentThreadId.restype = DWORD return _GetCurrentThreadId() + # DWORD WINAPI GetProcessId( # __in HANDLE hProcess # ); def GetProcessId(hProcess): _GetProcessId = windll.kernel32.GetProcessId _GetProcessId.argtypes = [HANDLE] - _GetProcessId.restype = DWORD + _GetProcessId.restype = DWORD _GetProcessId.errcheck = RaiseIfZero return _GetProcessId(hProcess) + # DWORD WINAPI GetThreadId( # __in HANDLE hThread # ); def GetThreadId(hThread): _GetThreadId = windll.kernel32._GetThreadId _GetThreadId.argtypes = [HANDLE] - _GetThreadId.restype = DWORD + _GetThreadId.restype = DWORD dwThreadId = _GetThreadId(hThread) if dwThreadId == 0: raise ctypes.WinError() return dwThreadId + # DWORD WINAPI GetProcessIdOfThread( # __in HANDLE hThread # ); def GetProcessIdOfThread(hThread): _GetProcessIdOfThread = windll.kernel32.GetProcessIdOfThread _GetProcessIdOfThread.argtypes = [HANDLE] - _GetProcessIdOfThread.restype = DWORD + _GetProcessIdOfThread.restype = DWORD dwProcessId = _GetProcessIdOfThread(hThread) if dwProcessId == 0: raise ctypes.WinError() return dwProcessId + # BOOL WINAPI GetExitCodeProcess( # __in HANDLE hProcess, # __out LPDWORD lpExitCode @@ -4080,13 +4413,14 @@ def GetProcessIdOfThread(hThread): def GetExitCodeProcess(hProcess): _GetExitCodeProcess = windll.kernel32.GetExitCodeProcess _GetExitCodeProcess.argtypes = [HANDLE] - _GetExitCodeProcess.restype = bool + _GetExitCodeProcess.restype = bool _GetExitCodeProcess.errcheck = RaiseIfZero lpExitCode = DWORD(0) _GetExitCodeProcess(hProcess, byref(lpExitCode)) return lpExitCode.value + # BOOL WINAPI GetExitCodeThread( # __in HANDLE hThread, # __out LPDWORD lpExitCode @@ -4094,50 +4428,54 @@ def GetExitCodeProcess(hProcess): def GetExitCodeThread(hThread): _GetExitCodeThread = windll.kernel32.GetExitCodeThread _GetExitCodeThread.argtypes = [HANDLE] - _GetExitCodeThread.restype = bool + _GetExitCodeThread.restype = bool _GetExitCodeThread.errcheck = RaiseIfZero lpExitCode = DWORD(0) _GetExitCodeThread(hThread, byref(lpExitCode)) return lpExitCode.value + # DWORD WINAPI GetProcessVersion( # __in DWORD ProcessId # ); def GetProcessVersion(ProcessId): _GetProcessVersion = windll.kernel32.GetProcessVersion _GetProcessVersion.argtypes = [DWORD] - _GetProcessVersion.restype = DWORD + _GetProcessVersion.restype = DWORD retval = _GetProcessVersion(ProcessId) if retval == 0: raise ctypes.WinError() return retval + # DWORD WINAPI GetPriorityClass( # __in HANDLE hProcess # ); def GetPriorityClass(hProcess): _GetPriorityClass = windll.kernel32.GetPriorityClass _GetPriorityClass.argtypes = [HANDLE] - _GetPriorityClass.restype = DWORD + _GetPriorityClass.restype = DWORD retval = _GetPriorityClass(hProcess) if retval == 0: raise ctypes.WinError() return retval + # BOOL WINAPI SetPriorityClass( # __in HANDLE hProcess, # __in DWORD dwPriorityClass # ); -def SetPriorityClass(hProcess, dwPriorityClass = NORMAL_PRIORITY_CLASS): +def SetPriorityClass(hProcess, dwPriorityClass=NORMAL_PRIORITY_CLASS): _SetPriorityClass = windll.kernel32.SetPriorityClass _SetPriorityClass.argtypes = [HANDLE, DWORD] - _SetPriorityClass.restype = bool + _SetPriorityClass.restype = bool _SetPriorityClass.errcheck = RaiseIfZero _SetPriorityClass(hProcess, dwPriorityClass) + # BOOL WINAPI GetProcessPriorityBoost( # __in HANDLE hProcess, # __out PBOOL pDisablePriorityBoost @@ -4145,13 +4483,14 @@ def SetPriorityClass(hProcess, dwPriorityClass = NORMAL_PRIORITY_CLASS): def GetProcessPriorityBoost(hProcess): _GetProcessPriorityBoost = windll.kernel32.GetProcessPriorityBoost _GetProcessPriorityBoost.argtypes = [HANDLE, PBOOL] - _GetProcessPriorityBoost.restype = bool + _GetProcessPriorityBoost.restype = bool _GetProcessPriorityBoost.errcheck = RaiseIfZero pDisablePriorityBoost = BOOL(False) _GetProcessPriorityBoost(hProcess, byref(pDisablePriorityBoost)) return bool(pDisablePriorityBoost.value) + # BOOL WINAPI SetProcessPriorityBoost( # __in HANDLE hProcess, # __in BOOL DisablePriorityBoost @@ -4159,10 +4498,11 @@ def GetProcessPriorityBoost(hProcess): def SetProcessPriorityBoost(hProcess, DisablePriorityBoost): _SetProcessPriorityBoost = windll.kernel32.SetProcessPriorityBoost _SetProcessPriorityBoost.argtypes = [HANDLE, BOOL] - _SetProcessPriorityBoost.restype = bool + _SetProcessPriorityBoost.restype = bool _SetProcessPriorityBoost.errcheck = RaiseIfZero _SetProcessPriorityBoost(hProcess, bool(DisablePriorityBoost)) + # BOOL WINAPI GetProcessAffinityMask( # __in HANDLE hProcess, # __out PDWORD_PTR lpProcessAffinityMask, @@ -4171,14 +4511,15 @@ def SetProcessPriorityBoost(hProcess, DisablePriorityBoost): def GetProcessAffinityMask(hProcess): _GetProcessAffinityMask = windll.kernel32.GetProcessAffinityMask _GetProcessAffinityMask.argtypes = [HANDLE, PDWORD_PTR, PDWORD_PTR] - _GetProcessAffinityMask.restype = bool + _GetProcessAffinityMask.restype = bool _GetProcessAffinityMask.errcheck = RaiseIfZero lpProcessAffinityMask = DWORD_PTR(0) - lpSystemAffinityMask = DWORD_PTR(0) + lpSystemAffinityMask = DWORD_PTR(0) _GetProcessAffinityMask(hProcess, byref(lpProcessAffinityMask), byref(lpSystemAffinityMask)) return lpProcessAffinityMask.value, lpSystemAffinityMask.value + # BOOL WINAPI SetProcessAffinityMask( # __in HANDLE hProcess, # __in DWORD_PTR dwProcessAffinityMask @@ -4186,27 +4527,30 @@ def GetProcessAffinityMask(hProcess): def SetProcessAffinityMask(hProcess, dwProcessAffinityMask): _SetProcessAffinityMask = windll.kernel32.SetProcessAffinityMask _SetProcessAffinityMask.argtypes = [HANDLE, DWORD_PTR] - _SetProcessAffinityMask.restype = bool + _SetProcessAffinityMask.restype = bool _SetProcessAffinityMask.errcheck = RaiseIfZero _SetProcessAffinityMask(hProcess, dwProcessAffinityMask) -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Toolhelp32 API + # HANDLE WINAPI CreateToolhelp32Snapshot( # __in DWORD dwFlags, # __in DWORD th32ProcessID # ); -def CreateToolhelp32Snapshot(dwFlags = TH32CS_SNAPALL, th32ProcessID = 0): +def CreateToolhelp32Snapshot(dwFlags=TH32CS_SNAPALL, th32ProcessID=0): _CreateToolhelp32Snapshot = windll.kernel32.CreateToolhelp32Snapshot _CreateToolhelp32Snapshot.argtypes = [DWORD, DWORD] - _CreateToolhelp32Snapshot.restype = HANDLE + _CreateToolhelp32Snapshot.restype = HANDLE hSnapshot = _CreateToolhelp32Snapshot(dwFlags, th32ProcessID) if hSnapshot == INVALID_HANDLE_VALUE: raise ctypes.WinError() return SnapshotHandle(hSnapshot) + # BOOL WINAPI Process32First( # __in HANDLE hSnapshot, # __inout LPPROCESSENTRY32 lppe @@ -4214,9 +4558,9 @@ def CreateToolhelp32Snapshot(dwFlags = TH32CS_SNAPALL, th32ProcessID = 0): def Process32First(hSnapshot): _Process32First = windll.kernel32.Process32First _Process32First.argtypes = [HANDLE, LPPROCESSENTRY32] - _Process32First.restype = bool + _Process32First.restype = bool - pe = PROCESSENTRY32() + pe = PROCESSENTRY32() pe.dwSize = sizeof(PROCESSENTRY32) success = _Process32First(hSnapshot, byref(pe)) if not success: @@ -4225,14 +4569,15 @@ def Process32First(hSnapshot): raise ctypes.WinError() return pe + # BOOL WINAPI Process32Next( # __in HANDLE hSnapshot, # __out LPPROCESSENTRY32 lppe # ); -def Process32Next(hSnapshot, pe = None): +def Process32Next(hSnapshot, pe=None): _Process32Next = windll.kernel32.Process32Next _Process32Next.argtypes = [HANDLE, LPPROCESSENTRY32] - _Process32Next.restype = bool + _Process32Next.restype = bool if pe is None: pe = PROCESSENTRY32() @@ -4244,6 +4589,7 @@ def Process32Next(hSnapshot, pe = None): raise ctypes.WinError() return pe + # BOOL WINAPI Thread32First( # __in HANDLE hSnapshot, # __inout LPTHREADENTRY32 lpte @@ -4251,7 +4597,7 @@ def Process32Next(hSnapshot, pe = None): def Thread32First(hSnapshot): _Thread32First = windll.kernel32.Thread32First _Thread32First.argtypes = [HANDLE, LPTHREADENTRY32] - _Thread32First.restype = bool + _Thread32First.restype = bool te = THREADENTRY32() te.dwSize = sizeof(THREADENTRY32) @@ -4262,14 +4608,15 @@ def Thread32First(hSnapshot): raise ctypes.WinError() return te + # BOOL WINAPI Thread32Next( # __in HANDLE hSnapshot, # __out LPTHREADENTRY32 lpte # ); -def Thread32Next(hSnapshot, te = None): +def Thread32Next(hSnapshot, te=None): _Thread32Next = windll.kernel32.Thread32Next _Thread32Next.argtypes = [HANDLE, LPTHREADENTRY32] - _Thread32Next.restype = bool + _Thread32Next.restype = bool if te is None: te = THREADENTRY32() @@ -4281,6 +4628,7 @@ def Thread32Next(hSnapshot, te = None): raise ctypes.WinError() return te + # BOOL WINAPI Module32First( # __in HANDLE hSnapshot, # __inout LPMODULEENTRY32 lpme @@ -4288,7 +4636,7 @@ def Thread32Next(hSnapshot, te = None): def Module32First(hSnapshot): _Module32First = windll.kernel32.Module32First _Module32First.argtypes = [HANDLE, LPMODULEENTRY32] - _Module32First.restype = bool + _Module32First.restype = bool me = MODULEENTRY32() me.dwSize = sizeof(MODULEENTRY32) @@ -4299,14 +4647,15 @@ def Module32First(hSnapshot): raise ctypes.WinError() return me + # BOOL WINAPI Module32Next( # __in HANDLE hSnapshot, # __out LPMODULEENTRY32 lpme # ); -def Module32Next(hSnapshot, me = None): +def Module32Next(hSnapshot, me=None): _Module32Next = windll.kernel32.Module32Next _Module32Next.argtypes = [HANDLE, LPMODULEENTRY32] - _Module32Next.restype = bool + _Module32Next.restype = bool if me is None: me = MODULEENTRY32() @@ -4318,6 +4667,7 @@ def Module32Next(hSnapshot, me = None): raise ctypes.WinError() return me + # BOOL WINAPI Heap32First( # __inout LPHEAPENTRY32 lphe, # __in DWORD th32ProcessID, @@ -4326,7 +4676,7 @@ def Module32Next(hSnapshot, me = None): def Heap32First(th32ProcessID, th32HeapID): _Heap32First = windll.kernel32.Heap32First _Heap32First.argtypes = [LPHEAPENTRY32, DWORD, ULONG_PTR] - _Heap32First.restype = bool + _Heap32First.restype = bool he = HEAPENTRY32() he.dwSize = sizeof(HEAPENTRY32) @@ -4337,13 +4687,14 @@ def Heap32First(th32ProcessID, th32HeapID): raise ctypes.WinError() return he + # BOOL WINAPI Heap32Next( # __out LPHEAPENTRY32 lphe # ); def Heap32Next(he): _Heap32Next = windll.kernel32.Heap32Next _Heap32Next.argtypes = [LPHEAPENTRY32] - _Heap32Next.restype = bool + _Heap32Next.restype = bool he.dwSize = sizeof(HEAPENTRY32) success = _Heap32Next(byref(he)) @@ -4353,6 +4704,7 @@ def Heap32Next(he): raise ctypes.WinError() return he + # BOOL WINAPI Heap32ListFirst( # __in HANDLE hSnapshot, # __inout LPHEAPLIST32 lphl @@ -4360,7 +4712,7 @@ def Heap32Next(he): def Heap32ListFirst(hSnapshot): _Heap32ListFirst = windll.kernel32.Heap32ListFirst _Heap32ListFirst.argtypes = [HANDLE, LPHEAPLIST32] - _Heap32ListFirst.restype = bool + _Heap32ListFirst.restype = bool hl = HEAPLIST32() hl.dwSize = sizeof(HEAPLIST32) @@ -4371,14 +4723,15 @@ def Heap32ListFirst(hSnapshot): raise ctypes.WinError() return hl + # BOOL WINAPI Heap32ListNext( # __in HANDLE hSnapshot, # __out LPHEAPLIST32 lphl # ); -def Heap32ListNext(hSnapshot, hl = None): +def Heap32ListNext(hSnapshot, hl=None): _Heap32ListNext = windll.kernel32.Heap32ListNext _Heap32ListNext.argtypes = [HANDLE, LPHEAPLIST32] - _Heap32ListNext.restype = bool + _Heap32ListNext.restype = bool if hl is None: hl = HEAPLIST32() @@ -4390,6 +4743,7 @@ def Heap32ListNext(hSnapshot, hl = None): raise ctypes.WinError() return hl + # BOOL WINAPI Toolhelp32ReadProcessMemory( # __in DWORD th32ProcessID, # __in LPCVOID lpBaseAddress, @@ -4400,18 +4754,20 @@ def Heap32ListNext(hSnapshot, hl = None): def Toolhelp32ReadProcessMemory(th32ProcessID, lpBaseAddress, cbRead): _Toolhelp32ReadProcessMemory = windll.kernel32.Toolhelp32ReadProcessMemory _Toolhelp32ReadProcessMemory.argtypes = [DWORD, LPVOID, LPVOID, SIZE_T, POINTER(SIZE_T)] - _Toolhelp32ReadProcessMemory.restype = bool + _Toolhelp32ReadProcessMemory.restype = bool - lpBuffer = ctypes.create_string_buffer('', cbRead) + lpBuffer = ctypes.create_string_buffer("", cbRead) lpNumberOfBytesRead = SIZE_T(0) success = _Toolhelp32ReadProcessMemory(th32ProcessID, lpBaseAddress, lpBuffer, cbRead, byref(lpNumberOfBytesRead)) if not success and GetLastError() != ERROR_PARTIAL_COPY: raise ctypes.WinError() - return str(lpBuffer.raw)[:lpNumberOfBytesRead.value] + return str(lpBuffer.raw)[: lpNumberOfBytesRead.value] + -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ # Miscellaneous system information + # BOOL WINAPI GetProcessDEPPolicy( # __in HANDLE hProcess, # __out LPDWORD lpFlags, @@ -4422,7 +4778,7 @@ def Toolhelp32ReadProcessMemory(th32ProcessID, lpBaseAddress, cbRead): def GetProcessDEPPolicy(hProcess): _GetProcessDEPPolicy = windll.kernel32.GetProcessDEPPolicy _GetProcessDEPPolicy.argtypes = [HANDLE, LPDWORD, PBOOL] - _GetProcessDEPPolicy.restype = bool + _GetProcessDEPPolicy.restype = bool _GetProcessDEPPolicy.errcheck = RaiseIfZero lpFlags = DWORD(0) @@ -4430,21 +4786,24 @@ def GetProcessDEPPolicy(hProcess): _GetProcessDEPPolicy(hProcess, byref(lpFlags), byref(lpPermanent)) return (lpFlags.value, lpPermanent.value) + # DWORD WINAPI GetCurrentProcessorNumber(void); def GetCurrentProcessorNumber(): _GetCurrentProcessorNumber = windll.kernel32.GetCurrentProcessorNumber _GetCurrentProcessorNumber.argtypes = [] - _GetCurrentProcessorNumber.restype = DWORD + _GetCurrentProcessorNumber.restype = DWORD _GetCurrentProcessorNumber.errcheck = RaiseIfZero return _GetCurrentProcessorNumber() + # VOID WINAPI FlushProcessWriteBuffers(void); def FlushProcessWriteBuffers(): _FlushProcessWriteBuffers = windll.kernel32.FlushProcessWriteBuffers _FlushProcessWriteBuffers.argtypes = [] - _FlushProcessWriteBuffers.restype = None + _FlushProcessWriteBuffers.restype = None _FlushProcessWriteBuffers() + # BOOL WINAPI GetLogicalProcessorInformation( # __out PSYSTEM_LOGICAL_PROCESSOR_INFORMATION Buffer, # __inout PDWORD ReturnLength @@ -4459,14 +4818,15 @@ def FlushProcessWriteBuffers(): # TO DO http://msdn.microsoft.com/en-us/library/ms683218(VS.85).aspx + # DWORD WINAPI GetGuiResources( # __in HANDLE hProcess, # __in DWORD uiFlags # ); -def GetGuiResources(hProcess, uiFlags = GR_GDIOBJECTS): +def GetGuiResources(hProcess, uiFlags=GR_GDIOBJECTS): _GetGuiResources = windll.kernel32.GetGuiResources _GetGuiResources.argtypes = [HANDLE, DWORD] - _GetGuiResources.restype = DWORD + _GetGuiResources.restype = DWORD dwCount = _GetGuiResources(hProcess, uiFlags) if dwCount == 0: @@ -4475,6 +4835,7 @@ def GetGuiResources(hProcess, uiFlags = GR_GDIOBJECTS): raise ctypes.WinError(errcode) return dwCount + # BOOL WINAPI GetProcessHandleCount( # __in HANDLE hProcess, # __inout PDWORD pdwHandleCount @@ -4482,13 +4843,14 @@ def GetGuiResources(hProcess, uiFlags = GR_GDIOBJECTS): def GetProcessHandleCount(hProcess): _GetProcessHandleCount = windll.kernel32.GetProcessHandleCount _GetProcessHandleCount.argtypes = [HANDLE, PDWORD] - _GetProcessHandleCount.restype = DWORD + _GetProcessHandleCount.restype = DWORD _GetProcessHandleCount.errcheck = RaiseIfZero pdwHandleCount = DWORD(0) _GetProcessHandleCount(hProcess, byref(pdwHandleCount)) return pdwHandleCount.value + # BOOL WINAPI GetProcessTimes( # __in HANDLE hProcess, # __out LPFILETIME lpCreationTime, @@ -4496,24 +4858,25 @@ def GetProcessHandleCount(hProcess): # __out LPFILETIME lpKernelTime, # __out LPFILETIME lpUserTime # ); -def GetProcessTimes(hProcess = None): +def GetProcessTimes(hProcess=None): _GetProcessTimes = windll.kernel32.GetProcessTimes _GetProcessTimes.argtypes = [HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME] - _GetProcessTimes.restype = bool + _GetProcessTimes.restype = bool _GetProcessTimes.errcheck = RaiseIfZero if hProcess is None: hProcess = GetCurrentProcess() CreationTime = FILETIME() - ExitTime = FILETIME() - KernelTime = FILETIME() - UserTime = FILETIME() + ExitTime = FILETIME() + KernelTime = FILETIME() + UserTime = FILETIME() _GetProcessTimes(hProcess, byref(CreationTime), byref(ExitTime), byref(KernelTime), byref(UserTime)) return (CreationTime, ExitTime, KernelTime, UserTime) + # BOOL WINAPI FileTimeToSystemTime( # __in const FILETIME *lpFileTime, # __out LPSYSTEMTIME lpSystemTime @@ -4521,72 +4884,81 @@ def GetProcessTimes(hProcess = None): def FileTimeToSystemTime(lpFileTime): _FileTimeToSystemTime = windll.kernel32.FileTimeToSystemTime _FileTimeToSystemTime.argtypes = [LPFILETIME, LPSYSTEMTIME] - _FileTimeToSystemTime.restype = bool + _FileTimeToSystemTime.restype = bool _FileTimeToSystemTime.errcheck = RaiseIfZero if isinstance(lpFileTime, FILETIME): FileTime = lpFileTime else: FileTime = FILETIME() - FileTime.dwLowDateTime = lpFileTime & 0xFFFFFFFF + FileTime.dwLowDateTime = lpFileTime & 0xFFFFFFFF FileTime.dwHighDateTime = lpFileTime >> 32 SystemTime = SYSTEMTIME() _FileTimeToSystemTime(byref(FileTime), byref(SystemTime)) return SystemTime + # void WINAPI GetSystemTimeAsFileTime( # __out LPFILETIME lpSystemTimeAsFileTime # ); def GetSystemTimeAsFileTime(): _GetSystemTimeAsFileTime = windll.kernel32.GetSystemTimeAsFileTime _GetSystemTimeAsFileTime.argtypes = [LPFILETIME] - _GetSystemTimeAsFileTime.restype = None + _GetSystemTimeAsFileTime.restype = None FileTime = FILETIME() _GetSystemTimeAsFileTime(byref(FileTime)) return FileTime -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Global ATOM API + # ATOM GlobalAddAtom( # __in LPCTSTR lpString # ); def GlobalAddAtomA(lpString): _GlobalAddAtomA = windll.kernel32.GlobalAddAtomA _GlobalAddAtomA.argtypes = [LPSTR] - _GlobalAddAtomA.restype = ATOM + _GlobalAddAtomA.restype = ATOM _GlobalAddAtomA.errcheck = RaiseIfZero return _GlobalAddAtomA(lpString) + def GlobalAddAtomW(lpString): _GlobalAddAtomW = windll.kernel32.GlobalAddAtomW _GlobalAddAtomW.argtypes = [LPWSTR] - _GlobalAddAtomW.restype = ATOM + _GlobalAddAtomW.restype = ATOM _GlobalAddAtomW.errcheck = RaiseIfZero return _GlobalAddAtomW(lpString) + GlobalAddAtom = GuessStringType(GlobalAddAtomA, GlobalAddAtomW) + # ATOM GlobalFindAtom( # __in LPCTSTR lpString # ); def GlobalFindAtomA(lpString): _GlobalFindAtomA = windll.kernel32.GlobalFindAtomA _GlobalFindAtomA.argtypes = [LPSTR] - _GlobalFindAtomA.restype = ATOM + _GlobalFindAtomA.restype = ATOM _GlobalFindAtomA.errcheck = RaiseIfZero return _GlobalFindAtomA(lpString) + def GlobalFindAtomW(lpString): _GlobalFindAtomW = windll.kernel32.GlobalFindAtomW _GlobalFindAtomW.argtypes = [LPWSTR] - _GlobalFindAtomW.restype = ATOM + _GlobalFindAtomW.restype = ATOM _GlobalFindAtomW.errcheck = RaiseIfZero return _GlobalFindAtomW(lpString) + GlobalFindAtom = GuessStringType(GlobalFindAtomA, GlobalFindAtomW) + # UINT GlobalGetAtomName( # __in ATOM nAtom, # __out LPTSTR lpBuffer, @@ -4595,35 +4967,38 @@ def GlobalFindAtomW(lpString): def GlobalGetAtomNameA(nAtom): _GlobalGetAtomNameA = windll.kernel32.GlobalGetAtomNameA _GlobalGetAtomNameA.argtypes = [ATOM, LPSTR, ctypes.c_int] - _GlobalGetAtomNameA.restype = UINT + _GlobalGetAtomNameA.restype = UINT _GlobalGetAtomNameA.errcheck = RaiseIfZero nSize = 64 while 1: lpBuffer = ctypes.create_string_buffer("", nSize) - nCopied = _GlobalGetAtomNameA(nAtom, lpBuffer, nSize) + nCopied = _GlobalGetAtomNameA(nAtom, lpBuffer, nSize) if nCopied < nSize - 1: break nSize = nSize + 64 return lpBuffer.value + def GlobalGetAtomNameW(nAtom): _GlobalGetAtomNameW = windll.kernel32.GlobalGetAtomNameW _GlobalGetAtomNameW.argtypes = [ATOM, LPWSTR, ctypes.c_int] - _GlobalGetAtomNameW.restype = UINT + _GlobalGetAtomNameW.restype = UINT _GlobalGetAtomNameW.errcheck = RaiseIfZero nSize = 64 while 1: - lpBuffer = ctypes.create_unicode_buffer(u"", nSize) - nCopied = _GlobalGetAtomNameW(nAtom, lpBuffer, nSize) + lpBuffer = ctypes.create_unicode_buffer("", nSize) + nCopied = _GlobalGetAtomNameW(nAtom, lpBuffer, nSize) if nCopied < nSize - 1: break nSize = nSize + 64 return lpBuffer.value + GlobalGetAtomName = GuessStringType(GlobalGetAtomNameA, GlobalGetAtomNameW) + # ATOM GlobalDeleteAtom( # __in ATOM nAtom # ); @@ -4637,22 +5012,25 @@ def GlobalDeleteAtom(nAtom): if error != ERROR_SUCCESS: raise ctypes.WinError(error) -#------------------------------------------------------------------------------ + +# ------------------------------------------------------------------------------ # Wow64 + # DWORD WINAPI Wow64SuspendThread( # _In_ HANDLE hThread # ); def Wow64SuspendThread(hThread): _Wow64SuspendThread = windll.kernel32.Wow64SuspendThread _Wow64SuspendThread.argtypes = [HANDLE] - _Wow64SuspendThread.restype = DWORD + _Wow64SuspendThread.restype = DWORD previousCount = _Wow64SuspendThread(hThread) if previousCount == DWORD(-1).value: raise ctypes.WinError() return previousCount + # BOOLEAN WINAPI Wow64EnableWow64FsRedirection( # __in BOOLEAN Wow64FsEnableRedirection # ); @@ -4666,46 +5044,50 @@ def Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection): """ _Wow64EnableWow64FsRedirection = windll.kernel32.Wow64EnableWow64FsRedirection _Wow64EnableWow64FsRedirection.argtypes = [BOOLEAN] - _Wow64EnableWow64FsRedirection.restype = BOOLEAN + _Wow64EnableWow64FsRedirection.restype = BOOLEAN _Wow64EnableWow64FsRedirection.errcheck = RaiseIfZero + # BOOL WINAPI Wow64DisableWow64FsRedirection( # __out PVOID *OldValue # ); def Wow64DisableWow64FsRedirection(): _Wow64DisableWow64FsRedirection = windll.kernel32.Wow64DisableWow64FsRedirection _Wow64DisableWow64FsRedirection.argtypes = [PPVOID] - _Wow64DisableWow64FsRedirection.restype = BOOL + _Wow64DisableWow64FsRedirection.restype = BOOL _Wow64DisableWow64FsRedirection.errcheck = RaiseIfZero OldValue = PVOID(None) _Wow64DisableWow64FsRedirection(byref(OldValue)) return OldValue + # BOOL WINAPI Wow64RevertWow64FsRedirection( # __in PVOID OldValue # ); def Wow64RevertWow64FsRedirection(OldValue): _Wow64RevertWow64FsRedirection = windll.kernel32.Wow64RevertWow64FsRedirection _Wow64RevertWow64FsRedirection.argtypes = [PVOID] - _Wow64RevertWow64FsRedirection.restype = BOOL + _Wow64RevertWow64FsRedirection.restype = BOOL _Wow64RevertWow64FsRedirection.errcheck = RaiseIfZero _Wow64RevertWow64FsRedirection(OldValue) -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== -#============================================================================== +# ============================================================================== # Mark functions that Psyco cannot compile. # In your programs, don't use psyco.full(). # Call psyco.bind() on your main function instead. try: import psyco + psyco.cannotcompile(WaitForDebugEvent) psyco.cannotcompile(WaitForSingleObject) psyco.cannotcompile(WaitForSingleObjectEx) @@ -4713,4 +5095,4 @@ def Wow64RevertWow64FsRedirection(OldValue): psyco.cannotcompile(WaitForMultipleObjectsEx) except ImportError: pass -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py index 39037661d..7396ececb 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/ntdll.py @@ -36,88 +36,88 @@ from winappdbg.win32.defines import * -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -_all.add('peb_teb') -#============================================================================== +_all.add("peb_teb") +# ============================================================================== from winappdbg.win32.peb_teb import * -#--- Types -------------------------------------------------------------------- +# --- Types -------------------------------------------------------------------- -SYSDBG_COMMAND = DWORD -PROCESSINFOCLASS = DWORD -THREADINFOCLASS = DWORD -FILE_INFORMATION_CLASS = DWORD +SYSDBG_COMMAND = DWORD +PROCESSINFOCLASS = DWORD +THREADINFOCLASS = DWORD +FILE_INFORMATION_CLASS = DWORD -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- # DEP flags for ProcessExecuteFlags -MEM_EXECUTE_OPTION_ENABLE = 1 -MEM_EXECUTE_OPTION_DISABLE = 2 +MEM_EXECUTE_OPTION_ENABLE = 1 +MEM_EXECUTE_OPTION_DISABLE = 2 MEM_EXECUTE_OPTION_ATL7_THUNK_EMULATION = 4 -MEM_EXECUTE_OPTION_PERMANENT = 8 +MEM_EXECUTE_OPTION_PERMANENT = 8 # SYSTEM_INFORMATION_CLASS # http://www.informit.com/articles/article.aspx?p=22442&seqNum=4 -SystemBasicInformation = 1 # 0x002C -SystemProcessorInformation = 2 # 0x000C -SystemPerformanceInformation = 3 # 0x0138 -SystemTimeInformation = 4 # 0x0020 -SystemPathInformation = 5 # not implemented -SystemProcessInformation = 6 # 0x00F8 + per process -SystemCallInformation = 7 # 0x0018 + (n * 0x0004) -SystemConfigurationInformation = 8 # 0x0018 -SystemProcessorCounters = 9 # 0x0030 per cpu -SystemGlobalFlag = 10 # 0x0004 -SystemInfo10 = 11 # not implemented -SystemModuleInformation = 12 # 0x0004 + (n * 0x011C) -SystemLockInformation = 13 # 0x0004 + (n * 0x0024) -SystemInfo13 = 14 # not implemented -SystemPagedPoolInformation = 15 # checked build only -SystemNonPagedPoolInformation = 16 # checked build only -SystemHandleInformation = 17 # 0x0004 + (n * 0x0010) -SystemObjectInformation = 18 # 0x0038+ + (n * 0x0030+) -SystemPagefileInformation = 19 # 0x0018+ per page file -SystemInstemulInformation = 20 # 0x0088 -SystemInfo20 = 21 # invalid info class -SystemCacheInformation = 22 # 0x0024 -SystemPoolTagInformation = 23 # 0x0004 + (n * 0x001C) -SystemProcessorStatistics = 24 # 0x0000, or 0x0018 per cpu -SystemDpcInformation = 25 # 0x0014 -SystemMemoryUsageInformation1 = 26 # checked build only -SystemLoadImage = 27 # 0x0018, set mode only -SystemUnloadImage = 28 # 0x0004, set mode only -SystemTimeAdjustmentInformation = 29 # 0x000C, 0x0008 writeable -SystemMemoryUsageInformation2 = 30 # checked build only -SystemInfo30 = 31 # checked build only -SystemInfo31 = 32 # checked build only -SystemCrashDumpInformation = 33 # 0x0004 -SystemExceptionInformation = 34 # 0x0010 -SystemCrashDumpStateInformation = 35 # 0x0008 -SystemDebuggerInformation = 36 # 0x0002 -SystemThreadSwitchInformation = 37 # 0x0030 -SystemRegistryQuotaInformation = 38 # 0x000C -SystemLoadDriver = 39 # 0x0008, set mode only -SystemPrioritySeparationInformation = 40 # 0x0004, set mode only -SystemInfo40 = 41 # not implemented -SystemInfo41 = 42 # not implemented -SystemInfo42 = 43 # invalid info class -SystemInfo43 = 44 # invalid info class -SystemTimeZoneInformation = 45 # 0x00AC -SystemLookasideInformation = 46 # n * 0x0020 +SystemBasicInformation = 1 # 0x002C +SystemProcessorInformation = 2 # 0x000C +SystemPerformanceInformation = 3 # 0x0138 +SystemTimeInformation = 4 # 0x0020 +SystemPathInformation = 5 # not implemented +SystemProcessInformation = 6 # 0x00F8 + per process +SystemCallInformation = 7 # 0x0018 + (n * 0x0004) +SystemConfigurationInformation = 8 # 0x0018 +SystemProcessorCounters = 9 # 0x0030 per cpu +SystemGlobalFlag = 10 # 0x0004 +SystemInfo10 = 11 # not implemented +SystemModuleInformation = 12 # 0x0004 + (n * 0x011C) +SystemLockInformation = 13 # 0x0004 + (n * 0x0024) +SystemInfo13 = 14 # not implemented +SystemPagedPoolInformation = 15 # checked build only +SystemNonPagedPoolInformation = 16 # checked build only +SystemHandleInformation = 17 # 0x0004 + (n * 0x0010) +SystemObjectInformation = 18 # 0x0038+ + (n * 0x0030+) +SystemPagefileInformation = 19 # 0x0018+ per page file +SystemInstemulInformation = 20 # 0x0088 +SystemInfo20 = 21 # invalid info class +SystemCacheInformation = 22 # 0x0024 +SystemPoolTagInformation = 23 # 0x0004 + (n * 0x001C) +SystemProcessorStatistics = 24 # 0x0000, or 0x0018 per cpu +SystemDpcInformation = 25 # 0x0014 +SystemMemoryUsageInformation1 = 26 # checked build only +SystemLoadImage = 27 # 0x0018, set mode only +SystemUnloadImage = 28 # 0x0004, set mode only +SystemTimeAdjustmentInformation = 29 # 0x000C, 0x0008 writeable +SystemMemoryUsageInformation2 = 30 # checked build only +SystemInfo30 = 31 # checked build only +SystemInfo31 = 32 # checked build only +SystemCrashDumpInformation = 33 # 0x0004 +SystemExceptionInformation = 34 # 0x0010 +SystemCrashDumpStateInformation = 35 # 0x0008 +SystemDebuggerInformation = 36 # 0x0002 +SystemThreadSwitchInformation = 37 # 0x0030 +SystemRegistryQuotaInformation = 38 # 0x000C +SystemLoadDriver = 39 # 0x0008, set mode only +SystemPrioritySeparationInformation = 40 # 0x0004, set mode only +SystemInfo40 = 41 # not implemented +SystemInfo41 = 42 # not implemented +SystemInfo42 = 43 # invalid info class +SystemInfo43 = 44 # invalid info class +SystemTimeZoneInformation = 45 # 0x00AC +SystemLookasideInformation = 46 # n * 0x0020 # info classes specific to Windows 2000 # WTS = Windows Terminal Server -SystemSetTimeSlipEvent = 47 # set mode only -SystemCreateSession = 48 # WTS, set mode only -SystemDeleteSession = 49 # WTS, set mode only -SystemInfo49 = 50 # invalid info class -SystemRangeStartInformation = 51 # 0x0004 -SystemVerifierInformation = 52 # 0x0068 -SystemAddVerifier = 53 # set mode only -SystemSessionProcessesInformation = 54 # WTS +SystemSetTimeSlipEvent = 47 # set mode only +SystemCreateSession = 48 # WTS, set mode only +SystemDeleteSession = 49 # WTS, set mode only +SystemInfo49 = 50 # invalid info class +SystemRangeStartInformation = 51 # 0x0004 +SystemVerifierInformation = 52 # 0x0068 +SystemAddVerifier = 53 # set mode only +SystemSessionProcessesInformation = 54 # WTS # NtQueryInformationProcess constants (from MSDN) ##ProcessBasicInformation = 0 @@ -127,107 +127,107 @@ # PROCESS_INFORMATION_CLASS # http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PROCESS_INFORMATION_CLASS.html -ProcessBasicInformation = 0 -ProcessQuotaLimits = 1 -ProcessIoCounters = 2 -ProcessVmCounters = 3 -ProcessTimes = 4 -ProcessBasePriority = 5 -ProcessRaisePriority = 6 -ProcessDebugPort = 7 -ProcessExceptionPort = 8 -ProcessAccessToken = 9 -ProcessLdtInformation = 10 -ProcessLdtSize = 11 -ProcessDefaultHardErrorMode = 12 -ProcessIoPortHandlers = 13 -ProcessPooledUsageAndLimits = 14 -ProcessWorkingSetWatch = 15 -ProcessUserModeIOPL = 16 -ProcessEnableAlignmentFaultFixup = 17 -ProcessPriorityClass = 18 -ProcessWx86Information = 19 -ProcessHandleCount = 20 -ProcessAffinityMask = 21 -ProcessPriorityBoost = 22 - -ProcessWow64Information = 26 -ProcessImageFileName = 27 +ProcessBasicInformation = 0 +ProcessQuotaLimits = 1 +ProcessIoCounters = 2 +ProcessVmCounters = 3 +ProcessTimes = 4 +ProcessBasePriority = 5 +ProcessRaisePriority = 6 +ProcessDebugPort = 7 +ProcessExceptionPort = 8 +ProcessAccessToken = 9 +ProcessLdtInformation = 10 +ProcessLdtSize = 11 +ProcessDefaultHardErrorMode = 12 +ProcessIoPortHandlers = 13 +ProcessPooledUsageAndLimits = 14 +ProcessWorkingSetWatch = 15 +ProcessUserModeIOPL = 16 +ProcessEnableAlignmentFaultFixup = 17 +ProcessPriorityClass = 18 +ProcessWx86Information = 19 +ProcessHandleCount = 20 +ProcessAffinityMask = 21 +ProcessPriorityBoost = 22 + +ProcessWow64Information = 26 +ProcessImageFileName = 27 # http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx -ProcessDebugObjectHandle = 30 +ProcessDebugObjectHandle = 30 -ProcessExecuteFlags = 34 +ProcessExecuteFlags = 34 # THREAD_INFORMATION_CLASS -ThreadBasicInformation = 0 -ThreadTimes = 1 -ThreadPriority = 2 -ThreadBasePriority = 3 -ThreadAffinityMask = 4 -ThreadImpersonationToken = 5 -ThreadDescriptorTableEntry = 6 -ThreadEnableAlignmentFaultFixup = 7 -ThreadEventPair = 8 -ThreadQuerySetWin32StartAddress = 9 -ThreadZeroTlsCell = 10 -ThreadPerformanceCount = 11 -ThreadAmILastThread = 12 -ThreadIdealProcessor = 13 -ThreadPriorityBoost = 14 -ThreadSetTlsArrayAddress = 15 -ThreadIsIoPending = 16 -ThreadHideFromDebugger = 17 +ThreadBasicInformation = 0 +ThreadTimes = 1 +ThreadPriority = 2 +ThreadBasePriority = 3 +ThreadAffinityMask = 4 +ThreadImpersonationToken = 5 +ThreadDescriptorTableEntry = 6 +ThreadEnableAlignmentFaultFixup = 7 +ThreadEventPair = 8 +ThreadQuerySetWin32StartAddress = 9 +ThreadZeroTlsCell = 10 +ThreadPerformanceCount = 11 +ThreadAmILastThread = 12 +ThreadIdealProcessor = 13 +ThreadPriorityBoost = 14 +ThreadSetTlsArrayAddress = 15 +ThreadIsIoPending = 16 +ThreadHideFromDebugger = 17 # OBJECT_INFORMATION_CLASS -ObjectBasicInformation = 0 -ObjectNameInformation = 1 -ObjectTypeInformation = 2 -ObjectAllTypesInformation = 3 -ObjectHandleInformation = 4 +ObjectBasicInformation = 0 +ObjectNameInformation = 1 +ObjectTypeInformation = 2 +ObjectAllTypesInformation = 3 +ObjectHandleInformation = 4 # FILE_INFORMATION_CLASS -FileDirectoryInformation = 1 -FileFullDirectoryInformation = 2 -FileBothDirectoryInformation = 3 -FileBasicInformation = 4 -FileStandardInformation = 5 -FileInternalInformation = 6 -FileEaInformation = 7 -FileAccessInformation = 8 -FileNameInformation = 9 -FileRenameInformation = 10 -FileLinkInformation = 11 -FileNamesInformation = 12 -FileDispositionInformation = 13 -FilePositionInformation = 14 -FileFullEaInformation = 15 -FileModeInformation = 16 -FileAlignmentInformation = 17 -FileAllInformation = 18 -FileAllocationInformation = 19 -FileEndOfFileInformation = 20 -FileAlternateNameInformation = 21 -FileStreamInformation = 22 -FilePipeInformation = 23 -FilePipeLocalInformation = 24 -FilePipeRemoteInformation = 25 -FileMailslotQueryInformation = 26 -FileMailslotSetInformation = 27 -FileCompressionInformation = 28 -FileCopyOnWriteInformation = 29 -FileCompletionInformation = 30 -FileMoveClusterInformation = 31 -FileQuotaInformation = 32 -FileReparsePointInformation = 33 -FileNetworkOpenInformation = 34 -FileObjectIdInformation = 35 -FileTrackingInformation = 36 -FileOleDirectoryInformation = 37 -FileContentIndexInformation = 38 -FileInheritContentIndexInformation = 37 -FileOleInformation = 39 -FileMaximumInformation = 40 +FileDirectoryInformation = 1 +FileFullDirectoryInformation = 2 +FileBothDirectoryInformation = 3 +FileBasicInformation = 4 +FileStandardInformation = 5 +FileInternalInformation = 6 +FileEaInformation = 7 +FileAccessInformation = 8 +FileNameInformation = 9 +FileRenameInformation = 10 +FileLinkInformation = 11 +FileNamesInformation = 12 +FileDispositionInformation = 13 +FilePositionInformation = 14 +FileFullEaInformation = 15 +FileModeInformation = 16 +FileAlignmentInformation = 17 +FileAllInformation = 18 +FileAllocationInformation = 19 +FileEndOfFileInformation = 20 +FileAlternateNameInformation = 21 +FileStreamInformation = 22 +FilePipeInformation = 23 +FilePipeLocalInformation = 24 +FilePipeRemoteInformation = 25 +FileMailslotQueryInformation = 26 +FileMailslotSetInformation = 27 +FileCompressionInformation = 28 +FileCopyOnWriteInformation = 29 +FileCompletionInformation = 30 +FileMoveClusterInformation = 31 +FileQuotaInformation = 32 +FileReparsePointInformation = 33 +FileNetworkOpenInformation = 34 +FileObjectIdInformation = 35 +FileTrackingInformation = 36 +FileOleDirectoryInformation = 37 +FileContentIndexInformation = 38 +FileInheritContentIndexInformation = 37 +FileOleInformation = 39 +FileMaximumInformation = 40 # From http://www.nirsoft.net/kernel_struct/vista/EXCEPTION_DISPOSITION.html # typedef enum _EXCEPTION_DISPOSITION @@ -237,12 +237,12 @@ # ExceptionNestedException = 2, # ExceptionCollidedUnwind = 3 # } EXCEPTION_DISPOSITION; -ExceptionContinueExecution = 0 -ExceptionContinueSearch = 1 -ExceptionNestedException = 2 -ExceptionCollidedUnwind = 3 +ExceptionContinueExecution = 0 +ExceptionContinueSearch = 1 +ExceptionNestedException = 2 +ExceptionCollidedUnwind = 3 -#--- PROCESS_BASIC_INFORMATION structure -------------------------------------- +# --- PROCESS_BASIC_INFORMATION structure -------------------------------------- # From MSDN: # @@ -275,18 +275,21 @@ # ULONG_PTR InheritedFromUniqueProcessId; # } PROCESS_BASIC_INFORMATION; + # My own definition follows: class PROCESS_BASIC_INFORMATION(Structure): _fields_ = [ - ("ExitStatus", SIZE_T), - ("PebBaseAddress", PVOID), # PPEB - ("AffinityMask", KAFFINITY), - ("BasePriority", SDWORD), - ("UniqueProcessId", ULONG_PTR), - ("InheritedFromUniqueProcessId", ULONG_PTR), -] + ("ExitStatus", SIZE_T), + ("PebBaseAddress", PVOID), # PPEB + ("AffinityMask", KAFFINITY), + ("BasePriority", SDWORD), + ("UniqueProcessId", ULONG_PTR), + ("InheritedFromUniqueProcessId", ULONG_PTR), + ] + + +# --- THREAD_BASIC_INFORMATION structure --------------------------------------- -#--- THREAD_BASIC_INFORMATION structure --------------------------------------- # From http://undocumented.ntinternals.net/UserMode/Structures/THREAD_BASIC_INFORMATION.html # @@ -300,15 +303,17 @@ class PROCESS_BASIC_INFORMATION(Structure): # } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION; class THREAD_BASIC_INFORMATION(Structure): _fields_ = [ - ("ExitStatus", NTSTATUS), - ("TebBaseAddress", PVOID), # PTEB - ("ClientId", CLIENT_ID), - ("AffinityMask", KAFFINITY), - ("Priority", SDWORD), - ("BasePriority", SDWORD), -] + ("ExitStatus", NTSTATUS), + ("TebBaseAddress", PVOID), # PTEB + ("ClientId", CLIENT_ID), + ("AffinityMask", KAFFINITY), + ("Priority", SDWORD), + ("BasePriority", SDWORD), + ] + + +# --- FILE_NAME_INFORMATION structure ------------------------------------------ -#--- FILE_NAME_INFORMATION structure ------------------------------------------ # typedef struct _FILE_NAME_INFORMATION { # ULONG FileNameLength; @@ -316,22 +321,26 @@ class THREAD_BASIC_INFORMATION(Structure): # } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; class FILE_NAME_INFORMATION(Structure): _fields_ = [ - ("FileNameLength", ULONG), - ("FileName", WCHAR * 1), + ("FileNameLength", ULONG), + ("FileName", WCHAR * 1), ] -#--- SYSDBG_MSR structure and constants --------------------------------------- -SysDbgReadMsr = 16 +# --- SYSDBG_MSR structure and constants --------------------------------------- + +SysDbgReadMsr = 16 SysDbgWriteMsr = 17 + class SYSDBG_MSR(Structure): _fields_ = [ ("Address", ULONG), - ("Data", ULONGLONG), -] + ("Data", ULONGLONG), + ] + + +# --- IO_STATUS_BLOCK structure ------------------------------------------------ -#--- IO_STATUS_BLOCK structure ------------------------------------------------ # typedef struct _IO_STATUS_BLOCK { # union { @@ -342,18 +351,23 @@ class SYSDBG_MSR(Structure): # } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; class IO_STATUS_BLOCK(Structure): _fields_ = [ - ("Status", NTSTATUS), + ("Status", NTSTATUS), ("Information", ULONG_PTR), ] + def __get_Pointer(self): return PVOID(self.Status) + def __set_Pointer(self, ptr): self.Status = ptr.value + Pointer = property(__get_Pointer, __set_Pointer) + PIO_STATUS_BLOCK = POINTER(IO_STATUS_BLOCK) -#--- ntdll.dll ---------------------------------------------------------------- +# --- ntdll.dll ---------------------------------------------------------------- + # ULONG WINAPI RtlNtStatusToDosError( # __in NTSTATUS Status @@ -364,6 +378,7 @@ def RtlNtStatusToDosError(Status): _RtlNtStatusToDosError.restype = ULONG return _RtlNtStatusToDosError(Status) + # NTSYSAPI NTSTATUS NTAPI NtSystemDebugControl( # IN SYSDBG_COMMAND Command, # IN PVOID InputBuffer OPTIONAL, @@ -372,7 +387,7 @@ def RtlNtStatusToDosError(Status): # IN ULONG OutputBufferLength, # OUT PULONG ReturnLength OPTIONAL # ); -def NtSystemDebugControl(Command, InputBuffer = None, InputBufferLength = None, OutputBuffer = None, OutputBufferLength = None): +def NtSystemDebugControl(Command, InputBuffer=None, InputBufferLength=None, OutputBuffer=None, OutputBufferLength=None): _NtSystemDebugControl = windll.ntdll.NtSystemDebugControl _NtSystemDebugControl.argtypes = [SYSDBG_COMMAND, PVOID, ULONG, PVOID, ULONG, PULONG] _NtSystemDebugControl.restype = NTSTATUS @@ -382,9 +397,7 @@ def NtSystemDebugControl(Command, InputBuffer = None, InputBufferLength = None, if InputBufferLength is None: InputBufferLength = 0 else: - raise ValueError( - "Invalid call to NtSystemDebugControl: " - "input buffer length given but no input buffer!") + raise ValueError("Invalid call to NtSystemDebugControl: " "input buffer length given but no input buffer!") else: if InputBufferLength is None: InputBufferLength = sizeof(InputBuffer) @@ -402,9 +415,11 @@ def NtSystemDebugControl(Command, InputBuffer = None, InputBufferLength = None, # Make the call (with an output buffer) if OutputBuffer is not None: ReturnLength = ULONG(0) - ntstatus = _NtSystemDebugControl(Command, InputBuffer, InputBufferLength, byref(OutputBuffer), OutputBufferLength, byref(ReturnLength)) + ntstatus = _NtSystemDebugControl( + Command, InputBuffer, InputBufferLength, byref(OutputBuffer), OutputBufferLength, byref(ReturnLength) + ) if ntstatus != 0: - raise ctypes.WinError( RtlNtStatusToDosError(ntstatus) ) + raise ctypes.WinError(RtlNtStatusToDosError(ntstatus)) ReturnLength = ReturnLength.value if ReturnLength != OutputBufferLength: raise ctypes.WinError(ERROR_BAD_LENGTH) @@ -413,10 +428,12 @@ def NtSystemDebugControl(Command, InputBuffer = None, InputBufferLength = None, # Make the call (without an output buffer) ntstatus = _NtSystemDebugControl(Command, InputBuffer, InputBufferLength, OutputBuffer, OutputBufferLength, None) if ntstatus != 0: - raise ctypes.WinError( RtlNtStatusToDosError(ntstatus) ) + raise ctypes.WinError(RtlNtStatusToDosError(ntstatus)) + ZwSystemDebugControl = NtSystemDebugControl + # NTSTATUS WINAPI NtQueryInformationProcess( # __in HANDLE ProcessHandle, # __in PROCESSINFOCLASS ProcessInformationClass, @@ -424,43 +441,59 @@ def NtSystemDebugControl(Command, InputBuffer = None, InputBufferLength = None, # __in ULONG ProcessInformationLength, # __out_opt PULONG ReturnLength # ); -def NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformationLength = None): +def NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInformationLength=None): _NtQueryInformationProcess = windll.ntdll.NtQueryInformationProcess _NtQueryInformationProcess.argtypes = [HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG] _NtQueryInformationProcess.restype = NTSTATUS if ProcessInformationLength is not None: ProcessInformation = ctypes.create_string_buffer("", ProcessInformationLength) else: - if ProcessInformationClass == ProcessBasicInformation: + if ProcessInformationClass == ProcessBasicInformation: ProcessInformation = PROCESS_BASIC_INFORMATION() ProcessInformationLength = sizeof(PROCESS_BASIC_INFORMATION) elif ProcessInformationClass == ProcessImageFileName: - unicode_buffer = ctypes.create_unicode_buffer(u"", 0x1000) + unicode_buffer = ctypes.create_unicode_buffer("", 0x1000) ProcessInformation = UNICODE_STRING(0, 0x1000, addressof(unicode_buffer)) ProcessInformationLength = sizeof(UNICODE_STRING) - elif ProcessInformationClass in (ProcessDebugPort, ProcessWow64Information, ProcessWx86Information, ProcessHandleCount, ProcessPriorityBoost): + elif ProcessInformationClass in ( + ProcessDebugPort, + ProcessWow64Information, + ProcessWx86Information, + ProcessHandleCount, + ProcessPriorityBoost, + ): ProcessInformation = DWORD() ProcessInformationLength = sizeof(DWORD) else: raise Exception("Unknown ProcessInformationClass, use an explicit ProcessInformationLength value instead") ReturnLength = ULONG(0) - ntstatus = _NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, byref(ProcessInformation), ProcessInformationLength, byref(ReturnLength)) + ntstatus = _NtQueryInformationProcess( + ProcessHandle, ProcessInformationClass, byref(ProcessInformation), ProcessInformationLength, byref(ReturnLength) + ) if ntstatus != 0: - raise ctypes.WinError( RtlNtStatusToDosError(ntstatus) ) - if ProcessInformationClass == ProcessBasicInformation: + raise ctypes.WinError(RtlNtStatusToDosError(ntstatus)) + if ProcessInformationClass == ProcessBasicInformation: retval = ProcessInformation - elif ProcessInformationClass in (ProcessDebugPort, ProcessWow64Information, ProcessWx86Information, ProcessHandleCount, ProcessPriorityBoost): + elif ProcessInformationClass in ( + ProcessDebugPort, + ProcessWow64Information, + ProcessWx86Information, + ProcessHandleCount, + ProcessPriorityBoost, + ): retval = ProcessInformation.value elif ProcessInformationClass == ProcessImageFileName: vptr = ctypes.c_void_p(ProcessInformation.Buffer) - cptr = ctypes.cast( vptr, ctypes.c_wchar * ProcessInformation.Length ) + cptr = ctypes.cast(vptr, ctypes.c_wchar * ProcessInformation.Length) retval = cptr.contents.raw else: - retval = ProcessInformation.raw[:ReturnLength.value] + retval = ProcessInformation.raw[: ReturnLength.value] return retval + ZwQueryInformationProcess = NtQueryInformationProcess + # NTSTATUS WINAPI NtQueryInformationThread( # __in HANDLE ThreadHandle, # __in THREADINFOCLASS ThreadInformationClass, @@ -468,14 +501,14 @@ def NtQueryInformationProcess(ProcessHandle, ProcessInformationClass, ProcessInf # __in ULONG ThreadInformationLength, # __out_opt PULONG ReturnLength # ); -def NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformationLength = None): +def NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformationLength=None): _NtQueryInformationThread = windll.ntdll.NtQueryInformationThread _NtQueryInformationThread.argtypes = [HANDLE, THREADINFOCLASS, PVOID, ULONG, PULONG] _NtQueryInformationThread.restype = NTSTATUS if ThreadInformationLength is not None: ThreadInformation = ctypes.create_string_buffer("", ThreadInformationLength) else: - if ThreadInformationClass == ThreadBasicInformation: + if ThreadInformationClass == ThreadBasicInformation: ThreadInformation = THREAD_BASIC_INFORMATION() elif ThreadInformationClass == ThreadHideFromDebugger: ThreadInformation = BOOLEAN() @@ -489,21 +522,25 @@ def NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInforma raise Exception("Unknown ThreadInformationClass, use an explicit ThreadInformationLength value instead") ThreadInformationLength = sizeof(ThreadInformation) ReturnLength = ULONG(0) - ntstatus = _NtQueryInformationThread(ThreadHandle, ThreadInformationClass, byref(ThreadInformation), ThreadInformationLength, byref(ReturnLength)) + ntstatus = _NtQueryInformationThread( + ThreadHandle, ThreadInformationClass, byref(ThreadInformation), ThreadInformationLength, byref(ReturnLength) + ) if ntstatus != 0: - raise ctypes.WinError( RtlNtStatusToDosError(ntstatus) ) - if ThreadInformationClass == ThreadBasicInformation: + raise ctypes.WinError(RtlNtStatusToDosError(ntstatus)) + if ThreadInformationClass == ThreadBasicInformation: retval = ThreadInformation elif ThreadInformationClass == ThreadHideFromDebugger: retval = bool(ThreadInformation.value) elif ThreadInformationClass in (ThreadQuerySetWin32StartAddress, ThreadAmILastThread, ThreadPriorityBoost, ThreadPerformanceCount): retval = ThreadInformation.value else: - retval = ThreadInformation.raw[:ReturnLength.value] + retval = ThreadInformation.raw[: ReturnLength.value] return retval + ZwQueryInformationThread = NtQueryInformationThread + # NTSTATUS # NtQueryInformationFile( # IN HANDLE FileHandle, @@ -519,11 +556,13 @@ def NtQueryInformationFile(FileHandle, FileInformationClass, FileInformation, Le IoStatusBlock = IO_STATUS_BLOCK() ntstatus = _NtQueryInformationFile(FileHandle, byref(IoStatusBlock), byref(FileInformation), Length, FileInformationClass) if ntstatus != 0: - raise ctypes.WinError( RtlNtStatusToDosError(ntstatus) ) + raise ctypes.WinError(RtlNtStatusToDosError(ntstatus)) return IoStatusBlock + ZwQueryInformationFile = NtQueryInformationFile + # DWORD STDCALL CsrGetProcessId (VOID); def CsrGetProcessId(): _CsrGetProcessId = windll.ntdll.CsrGetProcessId @@ -531,9 +570,10 @@ def CsrGetProcessId(): _CsrGetProcessId.restype = DWORD return _CsrGetProcessId() -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py index 9d101c709..9ae466074 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/peb_teb.py @@ -37,13 +37,14 @@ from winappdbg.win32.defines import * from winappdbg.win32.version import os -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== + +# --- PEB and TEB structures, constants and data types ------------------------- -#--- PEB and TEB structures, constants and data types ------------------------- # From http://www.nirsoft.net/kernel_struct/vista/CLIENT_ID.html # @@ -54,9 +55,10 @@ # } CLIENT_ID, *PCLIENT_ID; class CLIENT_ID(Structure): _fields_ = [ - ("UniqueProcess", PVOID), - ("UniqueThread", PVOID), -] + ("UniqueProcess", PVOID), + ("UniqueThread", PVOID), + ] + # From MSDN: # @@ -208,6 +210,7 @@ class CLIENT_ID(Structure): ## def CurrentDirectories(self): ## return self.CurrentDirectores + # From MSDN: # # typedef struct _RTL_USER_PROCESS_PARAMETERS { @@ -219,21 +222,22 @@ class CLIENT_ID(Structure): # *PRTL_USER_PROCESS_PARAMETERS; class RTL_USER_PROCESS_PARAMETERS(Structure): _fields_ = [ - ("Reserved1", BYTE * 16), - ("Reserved2", PVOID * 10), - ("ImagePathName", UNICODE_STRING), - ("CommandLine", UNICODE_STRING), - ("Environment", PVOID), # undocumented! + ("Reserved1", BYTE * 16), + ("Reserved2", PVOID * 10), + ("ImagePathName", UNICODE_STRING), + ("CommandLine", UNICODE_STRING), + ("Environment", PVOID), # undocumented! # # XXX TODO # This structure should be defined with all undocumented fields for # each version of Windows, just like it's being done for PEB and TEB. # -] + ] + PPS_POST_PROCESS_INIT_ROUTINE = PVOID -#from MSDN: +# from MSDN: # # typedef struct _PEB { # BYTE Reserved1[2]; @@ -284,6 +288,7 @@ class RTL_USER_PROCESS_PARAMETERS(Structure): ## ("TlsExpansionSlots", PVOID), ##] + # from http://undocumented.ntinternals.net/UserMode/Structures/LDR_MODULE.html # # typedef struct _LDR_MODULE { @@ -303,20 +308,21 @@ class RTL_USER_PROCESS_PARAMETERS(Structure): # } LDR_MODULE, *PLDR_MODULE; class LDR_MODULE(Structure): _fields_ = [ - ("InLoadOrderModuleList", LIST_ENTRY), - ("InMemoryOrderModuleList", LIST_ENTRY), + ("InLoadOrderModuleList", LIST_ENTRY), + ("InMemoryOrderModuleList", LIST_ENTRY), ("InInitializationOrderModuleList", LIST_ENTRY), - ("BaseAddress", PVOID), - ("EntryPoint", PVOID), - ("SizeOfImage", ULONG), - ("FullDllName", UNICODE_STRING), - ("BaseDllName", UNICODE_STRING), - ("Flags", ULONG), - ("LoadCount", SHORT), - ("TlsIndex", SHORT), - ("HashTableEntry", LIST_ENTRY), - ("TimeDateStamp", ULONG), -] + ("BaseAddress", PVOID), + ("EntryPoint", PVOID), + ("SizeOfImage", ULONG), + ("FullDllName", UNICODE_STRING), + ("BaseDllName", UNICODE_STRING), + ("Flags", ULONG), + ("LoadCount", SHORT), + ("TlsIndex", SHORT), + ("HashTableEntry", LIST_ENTRY), + ("TimeDateStamp", ULONG), + ] + # from http://undocumented.ntinternals.net/UserMode/Structures/PEB_LDR_DATA.html # @@ -330,13 +336,14 @@ class LDR_MODULE(Structure): # } PEB_LDR_DATA, *PPEB_LDR_DATA; class PEB_LDR_DATA(Structure): _fields_ = [ - ("Length", ULONG), - ("Initialized", BOOLEAN), - ("SsHandle", PVOID), - ("InLoadOrderModuleList", LIST_ENTRY), - ("InMemoryOrderModuleList", LIST_ENTRY), + ("Length", ULONG), + ("Initialized", BOOLEAN), + ("SsHandle", PVOID), + ("InLoadOrderModuleList", LIST_ENTRY), + ("InMemoryOrderModuleList", LIST_ENTRY), ("InInitializationOrderModuleList", LIST_ENTRY), -] + ] + # From http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/PEB_FREE_BLOCK.html # @@ -347,14 +354,16 @@ class PEB_LDR_DATA(Structure): class PEB_FREE_BLOCK(Structure): pass + ##PPEB_FREE_BLOCK = POINTER(PEB_FREE_BLOCK) PPEB_FREE_BLOCK = PVOID PEB_FREE_BLOCK._fields_ = [ - ("Next", PPEB_FREE_BLOCK), - ("Size", ULONG), + ("Next", PPEB_FREE_BLOCK), + ("Size", ULONG), ] + # From http://undocumented.ntinternals.net/UserMode/Structures/RTL_DRIVE_LETTER_CURDIR.html # # typedef struct _RTL_DRIVE_LETTER_CURDIR { @@ -365,11 +374,12 @@ class PEB_FREE_BLOCK(Structure): # } RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR; class RTL_DRIVE_LETTER_CURDIR(Structure): _fields_ = [ - ("Flags", USHORT), - ("Length", USHORT), - ("TimeStamp", ULONG), - ("DosPath", UNICODE_STRING), -] + ("Flags", USHORT), + ("Length", USHORT), + ("TimeStamp", ULONG), + ("DosPath", UNICODE_STRING), + ] + # From http://www.nirsoft.net/kernel_struct/vista/CURDIR.html # @@ -381,8 +391,9 @@ class RTL_DRIVE_LETTER_CURDIR(Structure): class CURDIR(Structure): _fields_ = [ ("DosPath", UNICODE_STRING), - ("Handle", PVOID), -] + ("Handle", PVOID), + ] + # From http://www.nirsoft.net/kernel_struct/vista/RTL_CRITICAL_SECTION_DEBUG.html # @@ -413,147 +424,154 @@ class CURDIR(Structure): # class RTL_CRITICAL_SECTION(Structure): _fields_ = [ - ("DebugInfo", PVOID), # PRTL_CRITICAL_SECTION_DEBUG - ("LockCount", LONG), - ("RecursionCount", LONG), - ("OwningThread", PVOID), - ("LockSemaphore", PVOID), - ("SpinCount", ULONG), -] + ("DebugInfo", PVOID), # PRTL_CRITICAL_SECTION_DEBUG + ("LockCount", LONG), + ("RecursionCount", LONG), + ("OwningThread", PVOID), + ("LockSemaphore", PVOID), + ("SpinCount", ULONG), + ] + + class RTL_CRITICAL_SECTION_DEBUG(Structure): _fields_ = [ - ("Type", WORD), - ("CreatorBackTraceIndex", WORD), - ("CriticalSection", PVOID), # PRTL_CRITICAL_SECTION - ("ProcessLocksList", LIST_ENTRY), - ("EntryCount", ULONG), - ("ContentionCount", ULONG), - ("Flags", ULONG), - ("CreatorBackTraceIndexHigh", WORD), - ("SpareUSHORT", WORD), -] -PRTL_CRITICAL_SECTION = POINTER(RTL_CRITICAL_SECTION) + ("Type", WORD), + ("CreatorBackTraceIndex", WORD), + ("CriticalSection", PVOID), # PRTL_CRITICAL_SECTION + ("ProcessLocksList", LIST_ENTRY), + ("EntryCount", ULONG), + ("ContentionCount", ULONG), + ("Flags", ULONG), + ("CreatorBackTraceIndexHigh", WORD), + ("SpareUSHORT", WORD), + ] + + +PRTL_CRITICAL_SECTION = POINTER(RTL_CRITICAL_SECTION) PRTL_CRITICAL_SECTION_DEBUG = POINTER(RTL_CRITICAL_SECTION_DEBUG) -PPEB_LDR_DATA = POINTER(PEB_LDR_DATA) -PRTL_USER_PROCESS_PARAMETERS = POINTER(RTL_USER_PROCESS_PARAMETERS) +PPEB_LDR_DATA = POINTER(PEB_LDR_DATA) +PRTL_USER_PROCESS_PARAMETERS = POINTER(RTL_USER_PROCESS_PARAMETERS) -PPEBLOCKROUTINE = PVOID +PPEBLOCKROUTINE = PVOID # BitField -ImageUsesLargePages = 1 << 0 -IsProtectedProcess = 1 << 1 -IsLegacyProcess = 1 << 2 -IsImageDynamicallyRelocated = 1 << 3 -SkipPatchingUser32Forwarders = 1 << 4 +ImageUsesLargePages = 1 << 0 +IsProtectedProcess = 1 << 1 +IsLegacyProcess = 1 << 2 +IsImageDynamicallyRelocated = 1 << 3 +SkipPatchingUser32Forwarders = 1 << 4 # CrossProcessFlags -ProcessInJob = 1 << 0 -ProcessInitializing = 1 << 1 -ProcessUsingVEH = 1 << 2 -ProcessUsingVCH = 1 << 3 -ProcessUsingFTH = 1 << 4 +ProcessInJob = 1 << 0 +ProcessInitializing = 1 << 1 +ProcessUsingVEH = 1 << 2 +ProcessUsingVCH = 1 << 3 +ProcessUsingFTH = 1 << 4 # TracingFlags -HeapTracingEnabled = 1 << 0 -CritSecTracingEnabled = 1 << 1 +HeapTracingEnabled = 1 << 0 +CritSecTracingEnabled = 1 << 1 # NtGlobalFlags -FLG_VALID_BITS = 0x003FFFFF # not a flag -FLG_STOP_ON_EXCEPTION = 0x00000001 -FLG_SHOW_LDR_SNAPS = 0x00000002 -FLG_DEBUG_INITIAL_COMMAND = 0x00000004 -FLG_STOP_ON_HUNG_GUI = 0x00000008 -FLG_HEAP_ENABLE_TAIL_CHECK = 0x00000010 -FLG_HEAP_ENABLE_FREE_CHECK = 0x00000020 -FLG_HEAP_VALIDATE_PARAMETERS = 0x00000040 -FLG_HEAP_VALIDATE_ALL = 0x00000080 -FLG_POOL_ENABLE_TAIL_CHECK = 0x00000100 -FLG_POOL_ENABLE_FREE_CHECK = 0x00000200 -FLG_POOL_ENABLE_TAGGING = 0x00000400 -FLG_HEAP_ENABLE_TAGGING = 0x00000800 -FLG_USER_STACK_TRACE_DB = 0x00001000 -FLG_KERNEL_STACK_TRACE_DB = 0x00002000 -FLG_MAINTAIN_OBJECT_TYPELIST = 0x00004000 -FLG_HEAP_ENABLE_TAG_BY_DLL = 0x00008000 -FLG_IGNORE_DEBUG_PRIV = 0x00010000 -FLG_ENABLE_CSRDEBUG = 0x00020000 -FLG_ENABLE_KDEBUG_SYMBOL_LOAD = 0x00040000 -FLG_DISABLE_PAGE_KERNEL_STACKS = 0x00080000 -FLG_HEAP_ENABLE_CALL_TRACING = 0x00100000 -FLG_HEAP_DISABLE_COALESCING = 0x00200000 -FLG_ENABLE_CLOSE_EXCEPTION = 0x00400000 -FLG_ENABLE_EXCEPTION_LOGGING = 0x00800000 -FLG_ENABLE_HANDLE_TYPE_TAGGING = 0x01000000 -FLG_HEAP_PAGE_ALLOCS = 0x02000000 -FLG_DEBUG_WINLOGON = 0x04000000 -FLG_ENABLE_DBGPRINT_BUFFERING = 0x08000000 -FLG_EARLY_CRITICAL_SECTION_EVT = 0x10000000 -FLG_DISABLE_DLL_VERIFICATION = 0x80000000 +FLG_VALID_BITS = 0x003FFFFF # not a flag +FLG_STOP_ON_EXCEPTION = 0x00000001 +FLG_SHOW_LDR_SNAPS = 0x00000002 +FLG_DEBUG_INITIAL_COMMAND = 0x00000004 +FLG_STOP_ON_HUNG_GUI = 0x00000008 +FLG_HEAP_ENABLE_TAIL_CHECK = 0x00000010 +FLG_HEAP_ENABLE_FREE_CHECK = 0x00000020 +FLG_HEAP_VALIDATE_PARAMETERS = 0x00000040 +FLG_HEAP_VALIDATE_ALL = 0x00000080 +FLG_POOL_ENABLE_TAIL_CHECK = 0x00000100 +FLG_POOL_ENABLE_FREE_CHECK = 0x00000200 +FLG_POOL_ENABLE_TAGGING = 0x00000400 +FLG_HEAP_ENABLE_TAGGING = 0x00000800 +FLG_USER_STACK_TRACE_DB = 0x00001000 +FLG_KERNEL_STACK_TRACE_DB = 0x00002000 +FLG_MAINTAIN_OBJECT_TYPELIST = 0x00004000 +FLG_HEAP_ENABLE_TAG_BY_DLL = 0x00008000 +FLG_IGNORE_DEBUG_PRIV = 0x00010000 +FLG_ENABLE_CSRDEBUG = 0x00020000 +FLG_ENABLE_KDEBUG_SYMBOL_LOAD = 0x00040000 +FLG_DISABLE_PAGE_KERNEL_STACKS = 0x00080000 +FLG_HEAP_ENABLE_CALL_TRACING = 0x00100000 +FLG_HEAP_DISABLE_COALESCING = 0x00200000 +FLG_ENABLE_CLOSE_EXCEPTION = 0x00400000 +FLG_ENABLE_EXCEPTION_LOGGING = 0x00800000 +FLG_ENABLE_HANDLE_TYPE_TAGGING = 0x01000000 +FLG_HEAP_PAGE_ALLOCS = 0x02000000 +FLG_DEBUG_WINLOGON = 0x04000000 +FLG_ENABLE_DBGPRINT_BUFFERING = 0x08000000 +FLG_EARLY_CRITICAL_SECTION_EVT = 0x10000000 +FLG_DISABLE_DLL_VERIFICATION = 0x80000000 + class _PEB_NT(Structure): - _pack_ = 4 + _pack_ = 4 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), - ("FastPebLockRoutine", PVOID), # PPEBLOCKROUTINE - ("FastPebUnlockRoutine", PVOID), # PPEBLOCKROUTINE - ("EnvironmentUpdateCount", ULONG), - ("KernelCallbackTable", PVOID), # Ptr32 Ptr32 Void - ("EventLogSection", PVOID), - ("EventLog", PVOID), - ("FreeList", PVOID), # PPEB_FREE_BLOCK - ("TlsExpansionCounter", ULONG), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", ULONG * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("ReadOnlySharedMemoryHeap", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", ULONG), - ("NtGlobalFlag", ULONG), - ("Spare2", BYTE * 4), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", ULONG), - ("HeapSegmentCommit", ULONG), - ("HeapDeCommitTotalFreeThreshold", ULONG), - ("HeapDeCommitFreeBlockThreshold", ULONG), - ("NumberOfHeaps", ULONG), - ("MaximumNumberOfHeaps", ULONG), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", PVOID), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", ULONG), - ("OSMinorVersion", ULONG), - ("OSBuildNumber", ULONG), - ("OSPlatformId", ULONG), - ("ImageSubSystem", ULONG), - ("ImageSubSystemMajorVersion", ULONG), - ("ImageSubSystemMinorVersion", ULONG), - ("ImageProcessAffinityMask", ULONG), - ("GdiHandleBuffer", ULONG * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", ULONG), - ("TlsExpansionBitmapBits", BYTE * 128), - ("SessionId", ULONG), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), + ("FastPebLockRoutine", PVOID), # PPEBLOCKROUTINE + ("FastPebUnlockRoutine", PVOID), # PPEBLOCKROUTINE + ("EnvironmentUpdateCount", ULONG), + ("KernelCallbackTable", PVOID), # Ptr32 Ptr32 Void + ("EventLogSection", PVOID), + ("EventLog", PVOID), + ("FreeList", PVOID), # PPEB_FREE_BLOCK + ("TlsExpansionCounter", ULONG), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", ULONG * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("ReadOnlySharedMemoryHeap", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", ULONG), + ("NtGlobalFlag", ULONG), + ("Spare2", BYTE * 4), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", ULONG), + ("HeapSegmentCommit", ULONG), + ("HeapDeCommitTotalFreeThreshold", ULONG), + ("HeapDeCommitFreeBlockThreshold", ULONG), + ("NumberOfHeaps", ULONG), + ("MaximumNumberOfHeaps", ULONG), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", PVOID), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", ULONG), + ("OSMinorVersion", ULONG), + ("OSBuildNumber", ULONG), + ("OSPlatformId", ULONG), + ("ImageSubSystem", ULONG), + ("ImageSubSystemMajorVersion", ULONG), + ("ImageSubSystemMinorVersion", ULONG), + ("ImageProcessAffinityMask", ULONG), + ("GdiHandleBuffer", ULONG * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", ULONG), + ("TlsExpansionBitmapBits", BYTE * 128), + ("SessionId", ULONG), ] + # not really, but "dt _PEB" in w2k isn't working for me :( _PEB_2000 = _PEB_NT + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -620,75 +638,76 @@ class _PEB_NT(Structure): # +0x204 SystemAssemblyStorageMap : Ptr32 Void # +0x208 MinimumStackCommit : Uint4B class _PEB_XP(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("SpareBool", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), - ("FastPebLockRoutine", PVOID), - ("FastPebUnlockRoutine", PVOID), - ("EnvironmentUpdateCount", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("AtlThunkSListPtr32", DWORD), - ("FreeList", PVOID), # PPEB_FREE_BLOCK - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("ReadOnlySharedMemoryHeap", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", DWORD), - ("HeapSegmentCommit", DWORD), - ("HeapDeCommitTotalFreeThreshold", DWORD), - ("HeapDeCommitFreeBlockThreshold", DWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ImageProcessAffinityMask", DWORD), - ("GdiHandleBuffer", DWORD * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", DWORD), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("SpareBool", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), + ("FastPebLockRoutine", PVOID), + ("FastPebUnlockRoutine", PVOID), + ("EnvironmentUpdateCount", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("AtlThunkSListPtr32", DWORD), + ("FreeList", PVOID), # PPEB_FREE_BLOCK + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("ReadOnlySharedMemoryHeap", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", DWORD), + ("HeapSegmentCommit", DWORD), + ("HeapDeCommitTotalFreeThreshold", DWORD), + ("HeapDeCommitFreeBlockThreshold", DWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ImageProcessAffinityMask", DWORD), + ("GdiHandleBuffer", DWORD * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", DWORD), ] + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -762,80 +781,81 @@ class _PEB_XP(Structure): # +0x340 FlsBitmapBits : [4] Uint4B # +0x350 FlsHighIndex : Uint4B class _PEB_XP_64(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("SparePtr2", PVOID), - ("EnvironmentUpdateCount", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("SpareUlong", DWORD), - ("FreeList", PVOID), # PPEB_FREE_BLOCK - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("ReadOnlySharedMemoryHeap", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr64 Ptr64 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", QWORD), - ("HeapSegmentCommit", QWORD), - ("HeapDeCommitTotalFreeThreshold", QWORD), - ("HeapDeCommitFreeBlockThreshold", QWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ImageProcessAffinityMask", QWORD), - ("GdiHandleBuffer", DWORD * 60), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", QWORD), - ("FlsCallback", PVOID), # Ptr64 Ptr64 Void - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("SparePtr2", PVOID), + ("EnvironmentUpdateCount", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("SpareUlong", DWORD), + ("FreeList", PVOID), # PPEB_FREE_BLOCK + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("ReadOnlySharedMemoryHeap", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr64 Ptr64 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", QWORD), + ("HeapSegmentCommit", QWORD), + ("HeapDeCommitTotalFreeThreshold", QWORD), + ("HeapDeCommitFreeBlockThreshold", QWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ImageProcessAffinityMask", QWORD), + ("GdiHandleBuffer", DWORD * 60), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", QWORD), + ("FlsCallback", PVOID), # Ptr64 Ptr64 Void + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), ] + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -909,84 +929,86 @@ class _PEB_XP_64(Structure): # +0x21c FlsBitmapBits : [4] Uint4B # +0x22c FlsHighIndex : Uint4B class _PEB_2003(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("SparePtr2", PVOID), - ("EnvironmentUpdateCount", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("SpareUlong", DWORD), - ("FreeList", PVOID), # PPEB_FREE_BLOCK - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("ReadOnlySharedMemoryHeap", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", DWORD), - ("HeapSegmentCommit", DWORD), - ("HeapDeCommitTotalFreeThreshold", DWORD), - ("HeapDeCommitFreeBlockThreshold", DWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ImageProcessAffinityMask", DWORD), - ("GdiHandleBuffer", DWORD * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", QWORD), - ("FlsCallback", PVOID), # Ptr32 Ptr32 Void - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("SparePtr2", PVOID), + ("EnvironmentUpdateCount", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("SpareUlong", DWORD), + ("FreeList", PVOID), # PPEB_FREE_BLOCK + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("ReadOnlySharedMemoryHeap", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", DWORD), + ("HeapSegmentCommit", DWORD), + ("HeapDeCommitTotalFreeThreshold", DWORD), + ("HeapDeCommitFreeBlockThreshold", DWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ImageProcessAffinityMask", DWORD), + ("GdiHandleBuffer", DWORD * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", QWORD), + ("FlsCallback", PVOID), # Ptr32 Ptr32 Void + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), ] -_PEB_2003_64 = _PEB_XP_64 -_PEB_2003_R2 = _PEB_2003 + +_PEB_2003_64 = _PEB_XP_64 +_PEB_2003_R2 = _PEB_2003 _PEB_2003_R2_64 = _PEB_2003_64 + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -1072,87 +1094,91 @@ class _PEB_2003(Structure): # +0x230 WerRegistrationData : Ptr32 Void # +0x234 WerShipAssertPtr : Ptr32 Void class _PEB_2008(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("IFEOKey", PVOID), - ("CrossProcessFlags", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("SpareUlong", DWORD), - ("SparePebPtr0", PVOID), - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("HotpatchInformation", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", DWORD), - ("HeapSegmentCommit", DWORD), - ("HeapDeCommitTotalFreeThreshold", DWORD), - ("HeapDeCommitFreeBlockThreshold", DWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ActiveProcessAffinityMask", DWORD), - ("GdiHandleBuffer", DWORD * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", DWORD), - ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), - ("WerRegistrationData", PVOID), - ("WerShipAssertPtr", PVOID), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("IFEOKey", PVOID), + ("CrossProcessFlags", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("SpareUlong", DWORD), + ("SparePebPtr0", PVOID), + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("HotpatchInformation", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", DWORD), + ("HeapSegmentCommit", DWORD), + ("HeapDeCommitTotalFreeThreshold", DWORD), + ("HeapDeCommitFreeBlockThreshold", DWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ActiveProcessAffinityMask", DWORD), + ("GdiHandleBuffer", DWORD * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", DWORD), + ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), + ("WerRegistrationData", PVOID), + ("WerShipAssertPtr", PVOID), ] + def __get_UserSharedInfoPtr(self): return self.KernelCallbackTable + def __set_UserSharedInfoPtr(self, value): self.KernelCallbackTable = value + UserSharedInfoPtr = property(__get_UserSharedInfoPtr, __set_UserSharedInfoPtr) + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -1238,87 +1264,91 @@ def __set_UserSharedInfoPtr(self, value): # +0x358 WerRegistrationData : Ptr64 Void # +0x360 WerShipAssertPtr : Ptr64 Void class _PEB_2008_64(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("IFEOKey", PVOID), - ("CrossProcessFlags", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("SpareUlong", DWORD), - ("SparePebPtr0", PVOID), - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("HotpatchInformation", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr64 Ptr64 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", QWORD), - ("HeapSegmentCommit", QWORD), - ("HeapDeCommitTotalFreeThreshold", QWORD), - ("HeapDeCommitFreeBlockThreshold", QWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ActiveProcessAffinityMask", QWORD), - ("GdiHandleBuffer", DWORD * 60), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", QWORD), - ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), - ("WerRegistrationData", PVOID), - ("WerShipAssertPtr", PVOID), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("IFEOKey", PVOID), + ("CrossProcessFlags", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("SpareUlong", DWORD), + ("SparePebPtr0", PVOID), + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("HotpatchInformation", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr64 Ptr64 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", QWORD), + ("HeapSegmentCommit", QWORD), + ("HeapDeCommitTotalFreeThreshold", QWORD), + ("HeapDeCommitFreeBlockThreshold", QWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ActiveProcessAffinityMask", QWORD), + ("GdiHandleBuffer", DWORD * 60), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", QWORD), + ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), + ("WerRegistrationData", PVOID), + ("WerShipAssertPtr", PVOID), ] + def __get_UserSharedInfoPtr(self): return self.KernelCallbackTable + def __set_UserSharedInfoPtr(self, value): self.KernelCallbackTable = value + UserSharedInfoPtr = property(__get_UserSharedInfoPtr, __set_UserSharedInfoPtr) + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -1411,90 +1441,94 @@ def __set_UserSharedInfoPtr(self, value): # +0x240 CritSecTracingEnabled : Pos 1, 1 Bit # +0x240 SpareTracingBits : Pos 2, 30 Bits class _PEB_2008_R2(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("IFEOKey", PVOID), - ("CrossProcessFlags", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("AtlThunkSListPtr32", PVOID), - ("ApiSetMap", PVOID), - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("HotpatchInformation", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", DWORD), - ("HeapSegmentCommit", DWORD), - ("HeapDeCommitTotalFreeThreshold", DWORD), - ("HeapDeCommitFreeBlockThreshold", DWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ActiveProcessAffinityMask", DWORD), - ("GdiHandleBuffer", DWORD * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", DWORD), - ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), - ("WerRegistrationData", PVOID), - ("WerShipAssertPtr", PVOID), - ("pContextData", PVOID), - ("pImageHeaderHash", PVOID), - ("TracingFlags", DWORD), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("IFEOKey", PVOID), + ("CrossProcessFlags", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("AtlThunkSListPtr32", PVOID), + ("ApiSetMap", PVOID), + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("HotpatchInformation", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", DWORD), + ("HeapSegmentCommit", DWORD), + ("HeapDeCommitTotalFreeThreshold", DWORD), + ("HeapDeCommitFreeBlockThreshold", DWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ActiveProcessAffinityMask", DWORD), + ("GdiHandleBuffer", DWORD * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", DWORD), + ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), + ("WerRegistrationData", PVOID), + ("WerShipAssertPtr", PVOID), + ("pContextData", PVOID), + ("pImageHeaderHash", PVOID), + ("TracingFlags", DWORD), ] + def __get_UserSharedInfoPtr(self): return self.KernelCallbackTable + def __set_UserSharedInfoPtr(self, value): self.KernelCallbackTable = value + UserSharedInfoPtr = property(__get_UserSharedInfoPtr, __set_UserSharedInfoPtr) + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar # +0x002 BeingDebugged : UChar @@ -1587,94 +1621,99 @@ def __set_UserSharedInfoPtr(self, value): # +0x378 CritSecTracingEnabled : Pos 1, 1 Bit # +0x378 SpareTracingBits : Pos 2, 30 Bits class _PEB_2008_R2_64(Structure): - _pack_ = 8 + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("IFEOKey", PVOID), - ("CrossProcessFlags", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("AtlThunkSListPtr32", DWORD), - ("ApiSetMap", PVOID), - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("HotpatchInformation", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", QWORD), - ("HeapSegmentCommit", QWORD), - ("HeapDeCommitTotalFreeThreshold", QWORD), - ("HeapDeCommitFreeBlockThreshold", QWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ActiveProcessAffinityMask", QWORD), - ("GdiHandleBuffer", DWORD * 60), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", QWORD), - ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), - ("WerRegistrationData", PVOID), - ("WerShipAssertPtr", PVOID), - ("pContextData", PVOID), - ("pImageHeaderHash", PVOID), - ("TracingFlags", DWORD), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("IFEOKey", PVOID), + ("CrossProcessFlags", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("AtlThunkSListPtr32", DWORD), + ("ApiSetMap", PVOID), + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("HotpatchInformation", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", QWORD), + ("HeapSegmentCommit", QWORD), + ("HeapDeCommitTotalFreeThreshold", QWORD), + ("HeapDeCommitFreeBlockThreshold", QWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr64 Ptr64 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ActiveProcessAffinityMask", QWORD), + ("GdiHandleBuffer", DWORD * 60), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", QWORD), + ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), + ("WerRegistrationData", PVOID), + ("WerShipAssertPtr", PVOID), + ("pContextData", PVOID), + ("pImageHeaderHash", PVOID), + ("TracingFlags", DWORD), ] + def __get_UserSharedInfoPtr(self): return self.KernelCallbackTable + def __set_UserSharedInfoPtr(self, value): self.KernelCallbackTable = value + UserSharedInfoPtr = property(__get_UserSharedInfoPtr, __set_UserSharedInfoPtr) -_PEB_Vista = _PEB_2008 -_PEB_Vista_64 = _PEB_2008_64 -_PEB_W7 = _PEB_2008_R2 -_PEB_W7_64 = _PEB_2008_R2_64 + +_PEB_Vista = _PEB_2008 +_PEB_Vista_64 = _PEB_2008_64 +_PEB_W7 = _PEB_2008_R2 +_PEB_W7_64 = _PEB_2008_R2_64 + # +0x000 InheritedAddressSpace : UChar # +0x001 ReadImageFileExecOptions : UChar @@ -1772,157 +1811,166 @@ class _PEB_W7_Beta(Structure): of Windows 7. For the final version of Windows 7 use L{_PEB_W7} instead. This structure is not chosen automatically. """ - _pack_ = 8 + + _pack_ = 8 _fields_ = [ - ("InheritedAddressSpace", BOOLEAN), - ("ReadImageFileExecOptions", UCHAR), - ("BeingDebugged", BOOLEAN), - ("BitField", UCHAR), - ("Mutant", HANDLE), - ("ImageBaseAddress", PVOID), - ("Ldr", PVOID), # PPEB_LDR_DATA - ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS - ("SubSystemData", PVOID), - ("ProcessHeap", PVOID), - ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION - ("AtlThunkSListPtr", PVOID), - ("IFEOKey", PVOID), - ("CrossProcessFlags", DWORD), - ("KernelCallbackTable", PVOID), - ("SystemReserved", DWORD), - ("TracingFlags", DWORD), - ("ApiSetMap", PVOID), - ("TlsExpansionCounter", DWORD), - ("TlsBitmap", PVOID), - ("TlsBitmapBits", DWORD * 2), - ("ReadOnlySharedMemoryBase", PVOID), - ("HotpatchInformation", PVOID), - ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void - ("AnsiCodePageData", PVOID), - ("OemCodePageData", PVOID), - ("UnicodeCaseTableData", PVOID), - ("NumberOfProcessors", DWORD), - ("NtGlobalFlag", DWORD), - ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER - ("HeapSegmentReserve", DWORD), - ("HeapSegmentCommit", DWORD), - ("HeapDeCommitTotalFreeThreshold", DWORD), - ("HeapDeCommitFreeBlockThreshold", DWORD), - ("NumberOfHeaps", DWORD), - ("MaximumNumberOfHeaps", DWORD), - ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void - ("GdiSharedHandleTable", PVOID), - ("ProcessStarterHelper", PVOID), - ("GdiDCAttributeList", DWORD), - ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION - ("OSMajorVersion", DWORD), - ("OSMinorVersion", DWORD), - ("OSBuildNumber", WORD), - ("OSCSDVersion", WORD), - ("OSPlatformId", DWORD), - ("ImageSubsystem", DWORD), - ("ImageSubsystemMajorVersion", DWORD), - ("ImageSubsystemMinorVersion", DWORD), - ("ActiveProcessAffinityMask", DWORD), - ("GdiHandleBuffer", DWORD * 34), - ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), - ("TlsExpansionBitmap", PVOID), - ("TlsExpansionBitmapBits", DWORD * 32), - ("SessionId", DWORD), - ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER - ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER - ("pShimData", PVOID), - ("AppCompatInfo", PVOID), - ("CSDVersion", UNICODE_STRING), - ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA - ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP - ("MinimumStackCommit", DWORD), - ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO - ("FlsListHead", LIST_ENTRY), - ("FlsBitmap", PVOID), - ("FlsBitmapBits", DWORD * 4), - ("FlsHighIndex", DWORD), - ("WerRegistrationData", PVOID), - ("WerShipAssertPtr", PVOID), - ("pContextData", PVOID), - ("pImageHeaderHash", PVOID), + ("InheritedAddressSpace", BOOLEAN), + ("ReadImageFileExecOptions", UCHAR), + ("BeingDebugged", BOOLEAN), + ("BitField", UCHAR), + ("Mutant", HANDLE), + ("ImageBaseAddress", PVOID), + ("Ldr", PVOID), # PPEB_LDR_DATA + ("ProcessParameters", PVOID), # PRTL_USER_PROCESS_PARAMETERS + ("SubSystemData", PVOID), + ("ProcessHeap", PVOID), + ("FastPebLock", PVOID), # PRTL_CRITICAL_SECTION + ("AtlThunkSListPtr", PVOID), + ("IFEOKey", PVOID), + ("CrossProcessFlags", DWORD), + ("KernelCallbackTable", PVOID), + ("SystemReserved", DWORD), + ("TracingFlags", DWORD), + ("ApiSetMap", PVOID), + ("TlsExpansionCounter", DWORD), + ("TlsBitmap", PVOID), + ("TlsBitmapBits", DWORD * 2), + ("ReadOnlySharedMemoryBase", PVOID), + ("HotpatchInformation", PVOID), + ("ReadOnlyStaticServerData", PVOID), # Ptr32 Ptr32 Void + ("AnsiCodePageData", PVOID), + ("OemCodePageData", PVOID), + ("UnicodeCaseTableData", PVOID), + ("NumberOfProcessors", DWORD), + ("NtGlobalFlag", DWORD), + ("CriticalSectionTimeout", LONGLONG), # LARGE_INTEGER + ("HeapSegmentReserve", DWORD), + ("HeapSegmentCommit", DWORD), + ("HeapDeCommitTotalFreeThreshold", DWORD), + ("HeapDeCommitFreeBlockThreshold", DWORD), + ("NumberOfHeaps", DWORD), + ("MaximumNumberOfHeaps", DWORD), + ("ProcessHeaps", PVOID), # Ptr32 Ptr32 Void + ("GdiSharedHandleTable", PVOID), + ("ProcessStarterHelper", PVOID), + ("GdiDCAttributeList", DWORD), + ("LoaderLock", PVOID), # PRTL_CRITICAL_SECTION + ("OSMajorVersion", DWORD), + ("OSMinorVersion", DWORD), + ("OSBuildNumber", WORD), + ("OSCSDVersion", WORD), + ("OSPlatformId", DWORD), + ("ImageSubsystem", DWORD), + ("ImageSubsystemMajorVersion", DWORD), + ("ImageSubsystemMinorVersion", DWORD), + ("ActiveProcessAffinityMask", DWORD), + ("GdiHandleBuffer", DWORD * 34), + ("PostProcessInitRoutine", PPS_POST_PROCESS_INIT_ROUTINE), + ("TlsExpansionBitmap", PVOID), + ("TlsExpansionBitmapBits", DWORD * 32), + ("SessionId", DWORD), + ("AppCompatFlags", ULONGLONG), # ULARGE_INTEGER + ("AppCompatFlagsUser", ULONGLONG), # ULARGE_INTEGER + ("pShimData", PVOID), + ("AppCompatInfo", PVOID), + ("CSDVersion", UNICODE_STRING), + ("ActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("ProcessAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("SystemDefaultActivationContextData", PVOID), # ACTIVATION_CONTEXT_DATA + ("SystemAssemblyStorageMap", PVOID), # ASSEMBLY_STORAGE_MAP + ("MinimumStackCommit", DWORD), + ("FlsCallback", PVOID), # PFLS_CALLBACK_INFO + ("FlsListHead", LIST_ENTRY), + ("FlsBitmap", PVOID), + ("FlsBitmapBits", DWORD * 4), + ("FlsHighIndex", DWORD), + ("WerRegistrationData", PVOID), + ("WerShipAssertPtr", PVOID), + ("pContextData", PVOID), + ("pImageHeaderHash", PVOID), ] + def __get_UserSharedInfoPtr(self): return self.KernelCallbackTable + def __set_UserSharedInfoPtr(self, value): self.KernelCallbackTable = value + UserSharedInfoPtr = property(__get_UserSharedInfoPtr, __set_UserSharedInfoPtr) + # Use the correct PEB structure definition. # Defaults to the latest Windows version. class PEB(Structure): _pack_ = 8 - if os == 'Windows NT': - _pack_ = _PEB_NT._pack_ + if os == "Windows NT": + _pack_ = _PEB_NT._pack_ _fields_ = _PEB_NT._fields_ - elif os == 'Windows 2000': - _pack_ = _PEB_2000._pack_ + elif os == "Windows 2000": + _pack_ = _PEB_2000._pack_ _fields_ = _PEB_2000._fields_ - elif os == 'Windows XP': + elif os == "Windows XP": _fields_ = _PEB_XP._fields_ - elif os == 'Windows XP (64 bits)': + elif os == "Windows XP (64 bits)": _fields_ = _PEB_XP_64._fields_ - elif os == 'Windows 2003': + elif os == "Windows 2003": _fields_ = _PEB_2003._fields_ - elif os == 'Windows 2003 (64 bits)': + elif os == "Windows 2003 (64 bits)": _fields_ = _PEB_2003_64._fields_ - elif os == 'Windows 2003 R2': + elif os == "Windows 2003 R2": _fields_ = _PEB_2003_R2._fields_ - elif os == 'Windows 2003 R2 (64 bits)': + elif os == "Windows 2003 R2 (64 bits)": _fields_ = _PEB_2003_R2_64._fields_ - elif os == 'Windows 2008': + elif os == "Windows 2008": _fields_ = _PEB_2008._fields_ - elif os == 'Windows 2008 (64 bits)': + elif os == "Windows 2008 (64 bits)": _fields_ = _PEB_2008_64._fields_ - elif os == 'Windows 2008 R2': + elif os == "Windows 2008 R2": _fields_ = _PEB_2008_R2._fields_ - elif os == 'Windows 2008 R2 (64 bits)': + elif os == "Windows 2008 R2 (64 bits)": _fields_ = _PEB_2008_R2_64._fields_ - elif os == 'Windows Vista': + elif os == "Windows Vista": _fields_ = _PEB_Vista._fields_ - elif os == 'Windows Vista (64 bits)': + elif os == "Windows Vista (64 bits)": _fields_ = _PEB_Vista_64._fields_ - elif os == 'Windows 7': + elif os == "Windows 7": _fields_ = _PEB_W7._fields_ - elif os == 'Windows 7 (64 bits)': + elif os == "Windows 7 (64 bits)": _fields_ = _PEB_W7_64._fields_ elif sizeof(SIZE_T) == sizeof(DWORD): _fields_ = _PEB_W7._fields_ else: _fields_ = _PEB_W7_64._fields_ + + PPEB = POINTER(PEB) + # PEB structure for WOW64 processes. class PEB_32(Structure): _pack_ = 8 - if os == 'Windows NT': - _pack_ = _PEB_NT._pack_ + if os == "Windows NT": + _pack_ = _PEB_NT._pack_ _fields_ = _PEB_NT._fields_ - elif os == 'Windows 2000': - _pack_ = _PEB_2000._pack_ + elif os == "Windows 2000": + _pack_ = _PEB_2000._pack_ _fields_ = _PEB_2000._fields_ - elif os.startswith('Windows XP'): + elif os.startswith("Windows XP"): _fields_ = _PEB_XP._fields_ - elif os.startswith('Windows 2003 R2'): + elif os.startswith("Windows 2003 R2"): _fields_ = _PEB_2003_R2._fields_ - elif os.startswith('Windows 2003'): + elif os.startswith("Windows 2003"): _fields_ = _PEB_2003._fields_ - elif os.startswith('Windows 2008 R2'): + elif os.startswith("Windows 2008 R2"): _fields_ = _PEB_2008_R2._fields_ - elif os.startswith('Windows 2008'): + elif os.startswith("Windows 2008"): _fields_ = _PEB_2008._fields_ - elif os.startswith('Windows Vista'): + elif os.startswith("Windows Vista"): _fields_ = _PEB_Vista._fields_ - else: #if os.startswith('Windows 7'): + else: # if os.startswith('Windows 7'): _fields_ = _PEB_W7._fields_ + # from https://vmexplorer.svn.codeplex.com/svn/VMExplorer/src/Win32/Threads.cs # # [StructLayout (LayoutKind.Sequential, Size = 0x0C)] @@ -1935,11 +1983,12 @@ class PEB_32(Structure): # }; class Wx86ThreadState(Structure): _fields_ = [ - ("CallBx86Eip", PVOID), - ("DeallocationCpu", PVOID), - ("UseKnownWx86Dll", UCHAR), - ("OleStubInvoked", CHAR), -] + ("CallBx86Eip", PVOID), + ("DeallocationCpu", PVOID), + ("UseKnownWx86Dll", UCHAR), + ("OleStubInvoked", CHAR), + ] + # ntdll!_RTL_ACTIVATION_CONTEXT_STACK_FRAME # +0x000 Previous : Ptr64 _RTL_ACTIVATION_CONTEXT_STACK_FRAME @@ -1947,10 +1996,11 @@ class Wx86ThreadState(Structure): # +0x010 Flags : Uint4B class RTL_ACTIVATION_CONTEXT_STACK_FRAME(Structure): _fields_ = [ - ("Previous", PVOID), - ("ActivationContext", PVOID), - ("Flags", DWORD), -] + ("Previous", PVOID), + ("ActivationContext", PVOID), + ("Flags", DWORD), + ] + # ntdll!_ACTIVATION_CONTEXT_STACK # +0x000 ActiveFrame : Ptr64 _RTL_ACTIVATION_CONTEXT_STACK_FRAME @@ -1960,12 +2010,13 @@ class RTL_ACTIVATION_CONTEXT_STACK_FRAME(Structure): # +0x020 StackId : Uint4B class ACTIVATION_CONTEXT_STACK(Structure): _fields_ = [ - ("ActiveFrame", PVOID), - ("FrameListCache", LIST_ENTRY), - ("Flags", DWORD), - ("NextCookieSequenceNumber", DWORD), - ("StackId", DWORD), -] + ("ActiveFrame", PVOID), + ("FrameListCache", LIST_ENTRY), + ("Flags", DWORD), + ("NextCookieSequenceNumber", DWORD), + ("StackId", DWORD), + ] + # typedef struct _PROCESSOR_NUMBER { # WORD Group; @@ -1974,10 +2025,11 @@ class ACTIVATION_CONTEXT_STACK(Structure): # }PROCESSOR_NUMBER, *PPROCESSOR_NUMBER; class PROCESSOR_NUMBER(Structure): _fields_ = [ - ("Group", WORD), - ("Number", BYTE), - ("Reserved", BYTE), -] + ("Group", WORD), + ("Number", BYTE), + ("Reserved", BYTE), + ] + # from http://www.nirsoft.net/kernel_struct/vista/NT_TIB.html # @@ -1997,34 +2049,42 @@ class PROCESSOR_NUMBER(Structure): # } NT_TIB, *PNT_TIB; class _NT_TIB_UNION(Union): _fields_ = [ - ("FiberData", PVOID), - ("Version", ULONG), + ("FiberData", PVOID), + ("Version", ULONG), ] + + class NT_TIB(Structure): _fields_ = [ - ("ExceptionList", PVOID), # PEXCEPTION_REGISTRATION_RECORD - ("StackBase", PVOID), - ("StackLimit", PVOID), - ("SubSystemTib", PVOID), - ("u", _NT_TIB_UNION), - ("ArbitraryUserPointer", PVOID), - ("Self", PVOID), # PNTTIB + ("ExceptionList", PVOID), # PEXCEPTION_REGISTRATION_RECORD + ("StackBase", PVOID), + ("StackLimit", PVOID), + ("SubSystemTib", PVOID), + ("u", _NT_TIB_UNION), + ("ArbitraryUserPointer", PVOID), + ("Self", PVOID), # PNTTIB ] def __get_FiberData(self): return self.u.FiberData + def __set_FiberData(self, value): self.u.FiberData = value + FiberData = property(__get_FiberData, __set_FiberData) def __get_Version(self): return self.u.Version + def __set_Version(self, value): self.u.Version = value + Version = property(__get_Version, __set_Version) + PNTTIB = POINTER(NT_TIB) + # From http://www.nirsoft.net/kernel_struct/vista/EXCEPTION_REGISTRATION_RECORD.html # # typedef struct _EXCEPTION_REGISTRATION_RECORD @@ -2035,20 +2095,22 @@ def __set_Version(self, value): class EXCEPTION_REGISTRATION_RECORD(Structure): pass -EXCEPTION_DISPOSITION = DWORD + +EXCEPTION_DISPOSITION = DWORD ##PEXCEPTION_DISPOSITION = POINTER(EXCEPTION_DISPOSITION) ##PEXCEPTION_REGISTRATION_RECORD = POINTER(EXCEPTION_REGISTRATION_RECORD) -PEXCEPTION_DISPOSITION = PVOID -PEXCEPTION_REGISTRATION_RECORD = PVOID +PEXCEPTION_DISPOSITION = PVOID +PEXCEPTION_REGISTRATION_RECORD = PVOID EXCEPTION_REGISTRATION_RECORD._fields_ = [ - ("Next", PEXCEPTION_REGISTRATION_RECORD), - ("Handler", PEXCEPTION_DISPOSITION), + ("Next", PEXCEPTION_REGISTRATION_RECORD), + ("Handler", PEXCEPTION_DISPOSITION), ] ##PPEB = POINTER(PEB) PPEB = PVOID + # From http://www.nirsoft.net/kernel_struct/vista/GDI_TEB_BATCH.html # # typedef struct _GDI_TEB_BATCH @@ -2059,119 +2121,128 @@ class EXCEPTION_REGISTRATION_RECORD(Structure): # } GDI_TEB_BATCH, *PGDI_TEB_BATCH; class GDI_TEB_BATCH(Structure): _fields_ = [ - ("Offset", ULONG), - ("HDC", ULONG), - ("Buffer", ULONG * 310), -] + ("Offset", ULONG), + ("HDC", ULONG), + ("Buffer", ULONG * 310), + ] + # ntdll!_TEB_ACTIVE_FRAME_CONTEXT # +0x000 Flags : Uint4B # +0x008 FrameName : Ptr64 Char class TEB_ACTIVE_FRAME_CONTEXT(Structure): _fields_ = [ - ("Flags", DWORD), - ("FrameName", LPVOID), # LPCHAR -] + ("Flags", DWORD), + ("FrameName", LPVOID), # LPCHAR + ] + + PTEB_ACTIVE_FRAME_CONTEXT = POINTER(TEB_ACTIVE_FRAME_CONTEXT) + # ntdll!_TEB_ACTIVE_FRAME # +0x000 Flags : Uint4B # +0x008 Previous : Ptr64 _TEB_ACTIVE_FRAME # +0x010 Context : Ptr64 _TEB_ACTIVE_FRAME_CONTEXT class TEB_ACTIVE_FRAME(Structure): _fields_ = [ - ("Flags", DWORD), - ("Previous", LPVOID), # PTEB_ACTIVE_FRAME - ("Context", LPVOID), # PTEB_ACTIVE_FRAME_CONTEXT -] + ("Flags", DWORD), + ("Previous", LPVOID), # PTEB_ACTIVE_FRAME + ("Context", LPVOID), # PTEB_ACTIVE_FRAME_CONTEXT + ] + + PTEB_ACTIVE_FRAME = POINTER(TEB_ACTIVE_FRAME) # SameTebFlags -DbgSafeThunkCall = 1 << 0 -DbgInDebugPrint = 1 << 1 -DbgHasFiberData = 1 << 2 -DbgSkipThreadAttach = 1 << 3 -DbgWerInShipAssertCode = 1 << 4 -DbgRanProcessInit = 1 << 5 -DbgClonedThread = 1 << 6 -DbgSuppressDebugMsg = 1 << 7 +DbgSafeThunkCall = 1 << 0 +DbgInDebugPrint = 1 << 1 +DbgHasFiberData = 1 << 2 +DbgSkipThreadAttach = 1 << 3 +DbgWerInShipAssertCode = 1 << 4 +DbgRanProcessInit = 1 << 5 +DbgClonedThread = 1 << 6 +DbgSuppressDebugMsg = 1 << 7 RtlDisableUserStackWalk = 1 << 8 -RtlExceptionAttached = 1 << 9 -RtlInitialThread = 1 << 10 +RtlExceptionAttached = 1 << 9 +RtlInitialThread = 1 << 10 + # XXX This is quite wrong :P class _TEB_NT(Structure): _pack_ = 4 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PPEB), - ("LastErrorValue", ULONG), - ("CountOfOwnedCriticalSections", ULONG), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", ULONG * 26), - ("UserReserved", ULONG * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", ULONG), - ("FpSoftwareStatusRegister", ULONG), - ("SystemReserved1", PVOID * 54), - ("Spare1", PVOID), - ("ExceptionCode", ULONG), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", ULONG * 36), - ("TxFsContext", ULONG), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", PVOID), - ("GdiClientPID", ULONG), - ("GdiClientTID", ULONG), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", PVOID * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", ULONG * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorDisabled", ULONG), - ("Instrumentation", PVOID * 9), - ("ActivityId", GUID), - ("SubProcessTag", PVOID), - ("EtwLocalData", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", ULONG), - ("SpareBool0", BOOLEAN), - ("SpareBool1", BOOLEAN), - ("SpareBool2", BOOLEAN), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", ULONG), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", ULONG), - ("StackCommit", PVOID), - ("StackCommitMax", PVOID), - ("StackReserved", PVOID), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PPEB), + ("LastErrorValue", ULONG), + ("CountOfOwnedCriticalSections", ULONG), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", ULONG * 26), + ("UserReserved", ULONG * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", ULONG), + ("FpSoftwareStatusRegister", ULONG), + ("SystemReserved1", PVOID * 54), + ("Spare1", PVOID), + ("ExceptionCode", ULONG), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", ULONG * 36), + ("TxFsContext", ULONG), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", PVOID), + ("GdiClientPID", ULONG), + ("GdiClientTID", ULONG), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", PVOID * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", ULONG * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorDisabled", ULONG), + ("Instrumentation", PVOID * 9), + ("ActivityId", GUID), + ("SubProcessTag", PVOID), + ("EtwLocalData", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", ULONG), + ("SpareBool0", BOOLEAN), + ("SpareBool1", BOOLEAN), + ("SpareBool2", BOOLEAN), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", ULONG), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", ULONG), + ("StackCommit", PVOID), + ("StackCommitMax", PVOID), + ("StackReserved", PVOID), + ] + # not really, but "dt _TEB" in w2k isn't working for me :( _TEB_2000 = _TEB_NT + # +0x000 NtTib : _NT_TIB # +0x01c EnvironmentPointer : Ptr32 Void # +0x020 ClientId : _CLIENT_ID @@ -2241,74 +2312,75 @@ class _TEB_NT(Structure): class _TEB_XP(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", UCHAR * 24), - ("TxFsContext", DWORD), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", DWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", DWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorsAreDisabled", DWORD), - ("Instrumentation", PVOID * 16), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("InDbgPrint", BOOLEAN), - ("FreeStackOnTermination", BOOLEAN), - ("HasFiberData", BOOLEAN), - ("IdealProcessor", UCHAR), - ("Spare3", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("Wx86Thread", Wx86ThreadState), - ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void - ("ImpersonationLocale", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("SafeThunkCall", BOOLEAN), - ("BooleanSpare", BOOLEAN * 3), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", UCHAR * 24), + ("TxFsContext", DWORD), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", DWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", DWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorsAreDisabled", DWORD), + ("Instrumentation", PVOID * 16), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("InDbgPrint", BOOLEAN), + ("FreeStackOnTermination", BOOLEAN), + ("HasFiberData", BOOLEAN), + ("IdealProcessor", UCHAR), + ("Spare3", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("Wx86Thread", Wx86ThreadState), + ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void + ("ImpersonationLocale", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("SafeThunkCall", BOOLEAN), + ("BooleanSpare", BOOLEAN * 3), + ] + # +0x000 NtTib : _NT_TIB # +0x038 EnvironmentPointer : Ptr64 Void @@ -2386,80 +2458,81 @@ class _TEB_XP(Structure): class _TEB_XP_64(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", PVOID), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", UCHAR * 28), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", QWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", QWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 14), - ("SubProcessTag", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("InDbgPrint", BOOLEAN), - ("FreeStackOnTermination", BOOLEAN), - ("HasFiberData", BOOLEAN), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SparePointer1", PVOID), - ("SoftPatchPtr1", PVOID), - ("SoftPatchPtr2", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void - ("DeallocationBStore", PVOID), - ("BStoreLimit", PVOID), - ("ImpersonationLocale", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("SafeThunkCall", BOOLEAN), - ("BooleanSpare", BOOLEAN * 3), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", PVOID), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", UCHAR * 28), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", QWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", QWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 14), + ("SubProcessTag", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("InDbgPrint", BOOLEAN), + ("FreeStackOnTermination", BOOLEAN), + ("HasFiberData", BOOLEAN), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SparePointer1", PVOID), + ("SoftPatchPtr1", PVOID), + ("SoftPatchPtr2", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void + ("DeallocationBStore", PVOID), + ("BStoreLimit", PVOID), + ("ImpersonationLocale", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("SafeThunkCall", BOOLEAN), + ("BooleanSpare", BOOLEAN * 3), + ] + # +0x000 NtTib : _NT_TIB # +0x01c EnvironmentPointer : Ptr32 Void @@ -2535,83 +2608,85 @@ class _TEB_XP_64(Structure): class _TEB_2003(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", UCHAR * 40), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", DWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", DWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 14), - ("SubProcessTag", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("InDbgPrint", BOOLEAN), - ("FreeStackOnTermination", BOOLEAN), - ("HasFiberData", BOOLEAN), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SparePointer1", PVOID), - ("SoftPatchPtr1", PVOID), - ("SoftPatchPtr2", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void - ("ImpersonationLocale", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("SafeThunkCall", BOOLEAN), - ("BooleanSpare", BOOLEAN * 3), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", UCHAR * 40), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", DWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", DWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 14), + ("SubProcessTag", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("InDbgPrint", BOOLEAN), + ("FreeStackOnTermination", BOOLEAN), + ("HasFiberData", BOOLEAN), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SparePointer1", PVOID), + ("SoftPatchPtr1", PVOID), + ("SoftPatchPtr2", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void + ("ImpersonationLocale", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("SafeThunkCall", BOOLEAN), + ("BooleanSpare", BOOLEAN * 3), + ] -_TEB_2003_64 = _TEB_XP_64 -_TEB_2003_R2 = _TEB_2003 + +_TEB_2003_64 = _TEB_XP_64 +_TEB_2003_R2 = _TEB_2003 _TEB_2003_R2_64 = _TEB_2003_64 + # +0x000 NtTib : _NT_TIB # +0x01c EnvironmentPointer : Ptr32 Void # +0x020 ClientId : _CLIENT_ID @@ -2713,93 +2788,94 @@ class _TEB_2003(Structure): class _TEB_2008(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", UCHAR * 36), - ("TxFsContext", DWORD), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", DWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", DWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 9), - ("ActivityId", GUID), - ("SubProcessTag", PVOID), - ("EtwLocalData", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("SpareBool0", BOOLEAN), - ("SpareBool1", BOOLEAN), - ("SpareBool2", BOOLEAN), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SavedPriorityState", PVOID), - ("SoftPatchPtr1", PVOID), - ("ThreadPoolData", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void - ("ImpersonationLocale", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("PreferredLanguages", PVOID), - ("UserPrefLanguages", PVOID), - ("MergedPrefLanguages", PVOID), - ("MuiImpersonation", BOOL), - ("CrossTebFlags", WORD), - ("SameTebFlags", WORD), - ("TxnScopeEnterCallback", PVOID), - ("TxnScopeExitCallback", PVOID), - ("TxnScopeContext", PVOID), - ("LockCount", DWORD), - ("ProcessRundown", DWORD), - ("LastSwitchTime", QWORD), - ("TotalSwitchOutTime", QWORD), - ("WaitReasonBitMap", LONGLONG), # LARGE_INTEGER -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", UCHAR * 36), + ("TxFsContext", DWORD), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", DWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", DWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 9), + ("ActivityId", GUID), + ("SubProcessTag", PVOID), + ("EtwLocalData", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("SpareBool0", BOOLEAN), + ("SpareBool1", BOOLEAN), + ("SpareBool2", BOOLEAN), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SavedPriorityState", PVOID), + ("SoftPatchPtr1", PVOID), + ("ThreadPoolData", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void + ("ImpersonationLocale", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("PreferredLanguages", PVOID), + ("UserPrefLanguages", PVOID), + ("MergedPrefLanguages", PVOID), + ("MuiImpersonation", BOOL), + ("CrossTebFlags", WORD), + ("SameTebFlags", WORD), + ("TxnScopeEnterCallback", PVOID), + ("TxnScopeExitCallback", PVOID), + ("TxnScopeContext", PVOID), + ("LockCount", DWORD), + ("ProcessRundown", DWORD), + ("LastSwitchTime", QWORD), + ("TotalSwitchOutTime", QWORD), + ("WaitReasonBitMap", LONGLONG), # LARGE_INTEGER + ] + # +0x000 NtTib : _NT_TIB # +0x038 EnvironmentPointer : Ptr64 Void @@ -2904,95 +2980,96 @@ class _TEB_2008(Structure): class _TEB_2008_64(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes1", UCHAR * 24), - ("TxFsContext", DWORD), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", QWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", QWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 11), - ("ActivityId", GUID), - ("SubProcessTag", PVOID), - ("EtwLocalData", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("SpareBool0", BOOLEAN), - ("SpareBool1", BOOLEAN), - ("SpareBool2", BOOLEAN), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SavedPriorityState", PVOID), - ("SoftPatchPtr1", PVOID), - ("ThreadPoolData", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void - ("DeallocationBStore", PVOID), - ("BStoreLimit", PVOID), - ("ImpersonationLocale", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("PreferredLanguages", PVOID), - ("UserPrefLanguages", PVOID), - ("MergedPrefLanguages", PVOID), - ("MuiImpersonation", BOOL), - ("CrossTebFlags", WORD), - ("SameTebFlags", WORD), - ("TxnScopeEnterCallback", PVOID), - ("TxnScopeExitCallback", PVOID), - ("TxnScopeContext", PVOID), - ("LockCount", DWORD), - ("ProcessRundown", DWORD), - ("LastSwitchTime", QWORD), - ("TotalSwitchOutTime", QWORD), - ("WaitReasonBitMap", LONGLONG), # LARGE_INTEGER -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes1", UCHAR * 24), + ("TxFsContext", DWORD), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", QWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", QWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 11), + ("ActivityId", GUID), + ("SubProcessTag", PVOID), + ("EtwLocalData", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("SpareBool0", BOOLEAN), + ("SpareBool1", BOOLEAN), + ("SpareBool2", BOOLEAN), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SavedPriorityState", PVOID), + ("SoftPatchPtr1", PVOID), + ("ThreadPoolData", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void + ("DeallocationBStore", PVOID), + ("BStoreLimit", PVOID), + ("ImpersonationLocale", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("PreferredLanguages", PVOID), + ("UserPrefLanguages", PVOID), + ("MergedPrefLanguages", PVOID), + ("MuiImpersonation", BOOL), + ("CrossTebFlags", WORD), + ("SameTebFlags", WORD), + ("TxnScopeEnterCallback", PVOID), + ("TxnScopeExitCallback", PVOID), + ("TxnScopeContext", PVOID), + ("LockCount", DWORD), + ("ProcessRundown", DWORD), + ("LastSwitchTime", QWORD), + ("TotalSwitchOutTime", QWORD), + ("WaitReasonBitMap", LONGLONG), # LARGE_INTEGER + ] + # +0x000 NtTib : _NT_TIB # +0x01c EnvironmentPointer : Ptr32 Void @@ -3096,93 +3173,94 @@ class _TEB_2008_64(Structure): class _TEB_2008_R2(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes", UCHAR * 36), - ("TxFsContext", DWORD), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", DWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", DWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 9), - ("ActivityId", GUID), - ("SubProcessTag", PVOID), - ("EtwLocalData", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("CurrentIdealProcessor", PROCESSOR_NUMBER), - ("IdealProcessorValue", DWORD), - ("ReservedPad0", UCHAR), - ("ReservedPad1", UCHAR), - ("ReservedPad2", UCHAR), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SavedPriorityState", PVOID), - ("SoftPatchPtr1", PVOID), - ("ThreadPoolData", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void - ("MuiGeneration", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("PreferredLanguages", PVOID), - ("UserPrefLanguages", PVOID), - ("MergedPrefLanguages", PVOID), - ("MuiImpersonation", BOOL), - ("CrossTebFlags", WORD), - ("SameTebFlags", WORD), - ("TxnScopeEnterCallback", PVOID), - ("TxnScopeExitCallback", PVOID), - ("TxnScopeContext", PVOID), - ("LockCount", DWORD), - ("SpareUlong0", ULONG), - ("ResourceRetValue", PVOID), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes", UCHAR * 36), + ("TxFsContext", DWORD), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", DWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", DWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 9), + ("ActivityId", GUID), + ("SubProcessTag", PVOID), + ("EtwLocalData", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("CurrentIdealProcessor", PROCESSOR_NUMBER), + ("IdealProcessorValue", DWORD), + ("ReservedPad0", UCHAR), + ("ReservedPad1", UCHAR), + ("ReservedPad2", UCHAR), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SavedPriorityState", PVOID), + ("SoftPatchPtr1", PVOID), + ("ThreadPoolData", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr32 Ptr32 Void + ("MuiGeneration", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("PreferredLanguages", PVOID), + ("UserPrefLanguages", PVOID), + ("MergedPrefLanguages", PVOID), + ("MuiImpersonation", BOOL), + ("CrossTebFlags", WORD), + ("SameTebFlags", WORD), + ("TxnScopeEnterCallback", PVOID), + ("TxnScopeExitCallback", PVOID), + ("TxnScopeContext", PVOID), + ("LockCount", DWORD), + ("SpareUlong0", ULONG), + ("ResourceRetValue", PVOID), + ] + # +0x000 NtTib : _NT_TIB # +0x038 EnvironmentPointer : Ptr64 Void @@ -3288,148 +3366,152 @@ class _TEB_2008_R2(Structure): class _TEB_2008_R2_64(Structure): _pack_ = 8 _fields_ = [ - ("NtTib", NT_TIB), - ("EnvironmentPointer", PVOID), - ("ClientId", CLIENT_ID), - ("ActiveRpcHandle", HANDLE), - ("ThreadLocalStoragePointer", PVOID), - ("ProcessEnvironmentBlock", PVOID), # PPEB - ("LastErrorValue", DWORD), - ("CountOfOwnedCriticalSections", DWORD), - ("CsrClientThread", PVOID), - ("Win32ThreadInfo", PVOID), - ("User32Reserved", DWORD * 26), - ("UserReserved", DWORD * 5), - ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode - ("CurrentLocale", DWORD), - ("FpSoftwareStatusRegister", DWORD), - ("SystemReserved1", PVOID * 54), - ("ExceptionCode", SDWORD), - ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK - ("SpareBytes", UCHAR * 24), - ("TxFsContext", DWORD), - ("GdiTebBatch", GDI_TEB_BATCH), - ("RealClientId", CLIENT_ID), - ("GdiCachedProcessHandle", HANDLE), - ("GdiClientPID", DWORD), - ("GdiClientTID", DWORD), - ("GdiThreadLocalInfo", PVOID), - ("Win32ClientInfo", DWORD * 62), - ("glDispatchTable", PVOID * 233), - ("glReserved1", QWORD * 29), - ("glReserved2", PVOID), - ("glSectionInfo", PVOID), - ("glSection", PVOID), - ("glTable", PVOID), - ("glCurrentRC", PVOID), - ("glContext", PVOID), - ("LastStatusValue", NTSTATUS), - ("StaticUnicodeString", UNICODE_STRING), - ("StaticUnicodeBuffer", WCHAR * 261), - ("DeallocationStack", PVOID), - ("TlsSlots", PVOID * 64), - ("TlsLinks", LIST_ENTRY), - ("Vdm", PVOID), - ("ReservedForNtRpc", PVOID), - ("DbgSsReserved", PVOID * 2), - ("HardErrorMode", DWORD), - ("Instrumentation", PVOID * 11), - ("ActivityId", GUID), - ("SubProcessTag", PVOID), - ("EtwLocalData", PVOID), - ("EtwTraceData", PVOID), - ("WinSockData", PVOID), - ("GdiBatchCount", DWORD), - ("CurrentIdealProcessor", PROCESSOR_NUMBER), - ("IdealProcessorValue", DWORD), - ("ReservedPad0", UCHAR), - ("ReservedPad1", UCHAR), - ("ReservedPad2", UCHAR), - ("IdealProcessor", UCHAR), - ("GuaranteedStackBytes", DWORD), - ("ReservedForPerf", PVOID), - ("ReservedForOle", PVOID), - ("WaitingOnLoaderLock", DWORD), - ("SavedPriorityState", PVOID), - ("SoftPatchPtr1", PVOID), - ("ThreadPoolData", PVOID), - ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void - ("DeallocationBStore", PVOID), - ("BStoreLimit", PVOID), - ("MuiGeneration", DWORD), - ("IsImpersonating", BOOL), - ("NlsCache", PVOID), - ("pShimData", PVOID), - ("HeapVirtualAffinity", DWORD), - ("CurrentTransactionHandle", HANDLE), - ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME - ("FlsData", PVOID), - ("PreferredLanguages", PVOID), - ("UserPrefLanguages", PVOID), - ("MergedPrefLanguages", PVOID), - ("MuiImpersonation", BOOL), - ("CrossTebFlags", WORD), - ("SameTebFlags", WORD), - ("TxnScopeEnterCallback", PVOID), - ("TxnScopeExitCallback", PVOID), - ("TxnScopeContext", PVOID), - ("LockCount", DWORD), - ("SpareUlong0", ULONG), - ("ResourceRetValue", PVOID), -] + ("NtTib", NT_TIB), + ("EnvironmentPointer", PVOID), + ("ClientId", CLIENT_ID), + ("ActiveRpcHandle", HANDLE), + ("ThreadLocalStoragePointer", PVOID), + ("ProcessEnvironmentBlock", PVOID), # PPEB + ("LastErrorValue", DWORD), + ("CountOfOwnedCriticalSections", DWORD), + ("CsrClientThread", PVOID), + ("Win32ThreadInfo", PVOID), + ("User32Reserved", DWORD * 26), + ("UserReserved", DWORD * 5), + ("WOW32Reserved", PVOID), # ptr to wow64cpu!X86SwitchTo64BitMode + ("CurrentLocale", DWORD), + ("FpSoftwareStatusRegister", DWORD), + ("SystemReserved1", PVOID * 54), + ("ExceptionCode", SDWORD), + ("ActivationContextStackPointer", PVOID), # PACTIVATION_CONTEXT_STACK + ("SpareBytes", UCHAR * 24), + ("TxFsContext", DWORD), + ("GdiTebBatch", GDI_TEB_BATCH), + ("RealClientId", CLIENT_ID), + ("GdiCachedProcessHandle", HANDLE), + ("GdiClientPID", DWORD), + ("GdiClientTID", DWORD), + ("GdiThreadLocalInfo", PVOID), + ("Win32ClientInfo", DWORD * 62), + ("glDispatchTable", PVOID * 233), + ("glReserved1", QWORD * 29), + ("glReserved2", PVOID), + ("glSectionInfo", PVOID), + ("glSection", PVOID), + ("glTable", PVOID), + ("glCurrentRC", PVOID), + ("glContext", PVOID), + ("LastStatusValue", NTSTATUS), + ("StaticUnicodeString", UNICODE_STRING), + ("StaticUnicodeBuffer", WCHAR * 261), + ("DeallocationStack", PVOID), + ("TlsSlots", PVOID * 64), + ("TlsLinks", LIST_ENTRY), + ("Vdm", PVOID), + ("ReservedForNtRpc", PVOID), + ("DbgSsReserved", PVOID * 2), + ("HardErrorMode", DWORD), + ("Instrumentation", PVOID * 11), + ("ActivityId", GUID), + ("SubProcessTag", PVOID), + ("EtwLocalData", PVOID), + ("EtwTraceData", PVOID), + ("WinSockData", PVOID), + ("GdiBatchCount", DWORD), + ("CurrentIdealProcessor", PROCESSOR_NUMBER), + ("IdealProcessorValue", DWORD), + ("ReservedPad0", UCHAR), + ("ReservedPad1", UCHAR), + ("ReservedPad2", UCHAR), + ("IdealProcessor", UCHAR), + ("GuaranteedStackBytes", DWORD), + ("ReservedForPerf", PVOID), + ("ReservedForOle", PVOID), + ("WaitingOnLoaderLock", DWORD), + ("SavedPriorityState", PVOID), + ("SoftPatchPtr1", PVOID), + ("ThreadPoolData", PVOID), + ("TlsExpansionSlots", PVOID), # Ptr64 Ptr64 Void + ("DeallocationBStore", PVOID), + ("BStoreLimit", PVOID), + ("MuiGeneration", DWORD), + ("IsImpersonating", BOOL), + ("NlsCache", PVOID), + ("pShimData", PVOID), + ("HeapVirtualAffinity", DWORD), + ("CurrentTransactionHandle", HANDLE), + ("ActiveFrame", PVOID), # PTEB_ACTIVE_FRAME + ("FlsData", PVOID), + ("PreferredLanguages", PVOID), + ("UserPrefLanguages", PVOID), + ("MergedPrefLanguages", PVOID), + ("MuiImpersonation", BOOL), + ("CrossTebFlags", WORD), + ("SameTebFlags", WORD), + ("TxnScopeEnterCallback", PVOID), + ("TxnScopeExitCallback", PVOID), + ("TxnScopeContext", PVOID), + ("LockCount", DWORD), + ("SpareUlong0", ULONG), + ("ResourceRetValue", PVOID), + ] + + +_TEB_Vista = _TEB_2008 +_TEB_Vista_64 = _TEB_2008_64 +_TEB_W7 = _TEB_2008_R2 +_TEB_W7_64 = _TEB_2008_R2_64 -_TEB_Vista = _TEB_2008 -_TEB_Vista_64 = _TEB_2008_64 -_TEB_W7 = _TEB_2008_R2 -_TEB_W7_64 = _TEB_2008_R2_64 # Use the correct TEB structure definition. # Defaults to the latest Windows version. class TEB(Structure): _pack_ = 8 - if os == 'Windows NT': - _pack_ = _TEB_NT._pack_ + if os == "Windows NT": + _pack_ = _TEB_NT._pack_ _fields_ = _TEB_NT._fields_ - elif os == 'Windows 2000': - _pack_ = _TEB_2000._pack_ + elif os == "Windows 2000": + _pack_ = _TEB_2000._pack_ _fields_ = _TEB_2000._fields_ - elif os == 'Windows XP': + elif os == "Windows XP": _fields_ = _TEB_XP._fields_ - elif os == 'Windows XP (64 bits)': + elif os == "Windows XP (64 bits)": _fields_ = _TEB_XP_64._fields_ - elif os == 'Windows 2003': + elif os == "Windows 2003": _fields_ = _TEB_2003._fields_ - elif os == 'Windows 2003 (64 bits)': + elif os == "Windows 2003 (64 bits)": _fields_ = _TEB_2003_64._fields_ - elif os == 'Windows 2008': + elif os == "Windows 2008": _fields_ = _TEB_2008._fields_ - elif os == 'Windows 2008 (64 bits)': + elif os == "Windows 2008 (64 bits)": _fields_ = _TEB_2008_64._fields_ - elif os == 'Windows 2003 R2': + elif os == "Windows 2003 R2": _fields_ = _TEB_2003_R2._fields_ - elif os == 'Windows 2003 R2 (64 bits)': + elif os == "Windows 2003 R2 (64 bits)": _fields_ = _TEB_2003_R2_64._fields_ - elif os == 'Windows 2008 R2': + elif os == "Windows 2008 R2": _fields_ = _TEB_2008_R2._fields_ - elif os == 'Windows 2008 R2 (64 bits)': + elif os == "Windows 2008 R2 (64 bits)": _fields_ = _TEB_2008_R2_64._fields_ - elif os == 'Windows Vista': + elif os == "Windows Vista": _fields_ = _TEB_Vista._fields_ - elif os == 'Windows Vista (64 bits)': + elif os == "Windows Vista (64 bits)": _fields_ = _TEB_Vista_64._fields_ - elif os == 'Windows 7': + elif os == "Windows 7": _fields_ = _TEB_W7._fields_ - elif os == 'Windows 7 (64 bits)': + elif os == "Windows 7 (64 bits)": _fields_ = _TEB_W7_64._fields_ elif sizeof(SIZE_T) == sizeof(DWORD): _fields_ = _TEB_W7._fields_ else: _fields_ = _TEB_W7_64._fields_ + + PTEB = POINTER(TEB) -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py index e353c7f7e..7cdf1bc23 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/psapi.py @@ -36,18 +36,19 @@ from winappdbg.win32.defines import * -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- PSAPI structures and constants ------------------------------------------- +# --- PSAPI structures and constants ------------------------------------------- + +LIST_MODULES_DEFAULT = 0x00 +LIST_MODULES_32BIT = 0x01 +LIST_MODULES_64BIT = 0x02 +LIST_MODULES_ALL = 0x03 -LIST_MODULES_DEFAULT = 0x00 -LIST_MODULES_32BIT = 0x01 -LIST_MODULES_64BIT = 0x02 -LIST_MODULES_ALL = 0x03 # typedef struct _MODULEINFO { # LPVOID lpBaseOfDll; @@ -56,13 +57,16 @@ # } MODULEINFO, *LPMODULEINFO; class MODULEINFO(Structure): _fields_ = [ - ("lpBaseOfDll", LPVOID), # remote pointer - ("SizeOfImage", DWORD), - ("EntryPoint", LPVOID), # remote pointer -] + ("lpBaseOfDll", LPVOID), # remote pointer + ("SizeOfImage", DWORD), + ("EntryPoint", LPVOID), # remote pointer + ] + + LPMODULEINFO = POINTER(MODULEINFO) -#--- psapi.dll ---------------------------------------------------------------- +# --- psapi.dll ---------------------------------------------------------------- + # BOOL WINAPI EnumDeviceDrivers( # __out LPVOID *lpImageBase, @@ -75,9 +79,9 @@ def EnumDeviceDrivers(): _EnumDeviceDrivers.restype = bool _EnumDeviceDrivers.errcheck = RaiseIfZero - size = 0x1000 + size = 0x1000 lpcbNeeded = DWORD(size) - unit = sizeof(LPVOID) + unit = sizeof(LPVOID) while 1: lpImageBase = (LPVOID * (size // unit))() _EnumDeviceDrivers(byref(lpImageBase), lpcbNeeded, byref(lpcbNeeded)) @@ -85,7 +89,8 @@ def EnumDeviceDrivers(): if needed <= size: break size = needed - return [ lpImageBase[index] for index in compat.xrange(0, (needed // unit)) ] + return [lpImageBase[index] for index in compat.xrange(0, (needed // unit))] + # BOOL WINAPI EnumProcesses( # __out DWORD *pProcessIds, @@ -98,9 +103,9 @@ def EnumProcesses(): _EnumProcesses.restype = bool _EnumProcesses.errcheck = RaiseIfZero - size = 0x1000 + size = 0x1000 cbBytesReturned = DWORD() - unit = sizeof(DWORD) + unit = sizeof(DWORD) while 1: ProcessIds = (DWORD * (size // unit))() cbBytesReturned.value = size @@ -116,6 +121,7 @@ def EnumProcesses(): ProcessIdList.append(ProcessId) return ProcessIdList + # BOOL WINAPI EnumProcessModules( # __in HANDLE hProcess, # __out HMODULE *lphModule, @@ -138,7 +144,8 @@ def EnumProcessModules(hProcess): if needed <= size: break size = needed - return [ lphModule[index] for index in compat.xrange(0, int(needed // unit)) ] + return [lphModule[index] for index in compat.xrange(0, int(needed // unit))] + # BOOL WINAPI EnumProcessModulesEx( # __in HANDLE hProcess, @@ -147,7 +154,7 @@ def EnumProcessModules(hProcess): # __out LPDWORD lpcbNeeded, # __in DWORD dwFilterFlag # ); -def EnumProcessModulesEx(hProcess, dwFilterFlag = LIST_MODULES_DEFAULT): +def EnumProcessModulesEx(hProcess, dwFilterFlag=LIST_MODULES_DEFAULT): _EnumProcessModulesEx = windll.psapi.EnumProcessModulesEx _EnumProcessModulesEx.argtypes = [HANDLE, LPVOID, DWORD, LPDWORD, DWORD] _EnumProcessModulesEx.restype = bool @@ -163,7 +170,8 @@ def EnumProcessModulesEx(hProcess, dwFilterFlag = LIST_MODULES_DEFAULT): if needed <= size: break size = needed - return [ lphModule[index] for index in compat.xrange(0, (needed // unit)) ] + return [lphModule[index] for index in compat.xrange(0, (needed // unit))] + # DWORD WINAPI GetDeviceDriverBaseName( # __in LPVOID ImageBase, @@ -186,6 +194,7 @@ def GetDeviceDriverBaseNameA(ImageBase): nSize = nSize + MAX_PATH return lpBaseName.value + def GetDeviceDriverBaseNameW(ImageBase): _GetDeviceDriverBaseNameW = windll.psapi.GetDeviceDriverBaseNameW _GetDeviceDriverBaseNameW.argtypes = [LPVOID, LPWSTR, DWORD] @@ -193,7 +202,7 @@ def GetDeviceDriverBaseNameW(ImageBase): nSize = MAX_PATH while 1: - lpBaseName = ctypes.create_unicode_buffer(u"", nSize) + lpBaseName = ctypes.create_unicode_buffer("", nSize) nCopied = _GetDeviceDriverBaseNameW(ImageBase, lpBaseName, nSize) if nCopied == 0: raise ctypes.WinError() @@ -202,8 +211,10 @@ def GetDeviceDriverBaseNameW(ImageBase): nSize = nSize + MAX_PATH return lpBaseName.value + GetDeviceDriverBaseName = GuessStringType(GetDeviceDriverBaseNameA, GetDeviceDriverBaseNameW) + # DWORD WINAPI GetDeviceDriverFileName( # __in LPVOID ImageBase, # __out LPTSTR lpFilename, @@ -225,6 +236,7 @@ def GetDeviceDriverFileNameA(ImageBase): nSize = nSize + MAX_PATH return lpFilename.value + def GetDeviceDriverFileNameW(ImageBase): _GetDeviceDriverFileNameW = windll.psapi.GetDeviceDriverFileNameW _GetDeviceDriverFileNameW.argtypes = [LPVOID, LPWSTR, DWORD] @@ -232,7 +244,7 @@ def GetDeviceDriverFileNameW(ImageBase): nSize = MAX_PATH while 1: - lpFilename = ctypes.create_unicode_buffer(u"", nSize) + lpFilename = ctypes.create_unicode_buffer("", nSize) nCopied = ctypes.windll.psapi.GetDeviceDriverFileNameW(ImageBase, lpFilename, nSize) if nCopied == 0: raise ctypes.WinError() @@ -241,8 +253,10 @@ def GetDeviceDriverFileNameW(ImageBase): nSize = nSize + MAX_PATH return lpFilename.value + GetDeviceDriverFileName = GuessStringType(GetDeviceDriverFileNameA, GetDeviceDriverFileNameW) + # DWORD WINAPI GetMappedFileName( # __in HANDLE hProcess, # __in LPVOID lpv, @@ -265,6 +279,7 @@ def GetMappedFileNameA(hProcess, lpv): nSize = nSize + MAX_PATH return lpFilename.value + def GetMappedFileNameW(hProcess, lpv): _GetMappedFileNameW = ctypes.windll.psapi.GetMappedFileNameW _GetMappedFileNameW.argtypes = [HANDLE, LPVOID, LPWSTR, DWORD] @@ -272,7 +287,7 @@ def GetMappedFileNameW(hProcess, lpv): nSize = MAX_PATH while 1: - lpFilename = ctypes.create_unicode_buffer(u"", nSize) + lpFilename = ctypes.create_unicode_buffer("", nSize) nCopied = _GetMappedFileNameW(hProcess, lpv, lpFilename, nSize) if nCopied == 0: raise ctypes.WinError() @@ -281,15 +296,17 @@ def GetMappedFileNameW(hProcess, lpv): nSize = nSize + MAX_PATH return lpFilename.value + GetMappedFileName = GuessStringType(GetMappedFileNameA, GetMappedFileNameW) + # DWORD WINAPI GetModuleFileNameEx( # __in HANDLE hProcess, # __in_opt HMODULE hModule, # __out LPTSTR lpFilename, # __in DWORD nSize # ); -def GetModuleFileNameExA(hProcess, hModule = None): +def GetModuleFileNameExA(hProcess, hModule=None): _GetModuleFileNameExA = ctypes.windll.psapi.GetModuleFileNameExA _GetModuleFileNameExA.argtypes = [HANDLE, HMODULE, LPSTR, DWORD] _GetModuleFileNameExA.restype = DWORD @@ -305,14 +322,15 @@ def GetModuleFileNameExA(hProcess, hModule = None): nSize = nSize + MAX_PATH return lpFilename.value -def GetModuleFileNameExW(hProcess, hModule = None): + +def GetModuleFileNameExW(hProcess, hModule=None): _GetModuleFileNameExW = ctypes.windll.psapi.GetModuleFileNameExW _GetModuleFileNameExW.argtypes = [HANDLE, HMODULE, LPWSTR, DWORD] _GetModuleFileNameExW.restype = DWORD nSize = MAX_PATH while 1: - lpFilename = ctypes.create_unicode_buffer(u"", nSize) + lpFilename = ctypes.create_unicode_buffer("", nSize) nCopied = _GetModuleFileNameExW(hProcess, hModule, lpFilename, nSize) if nCopied == 0: raise ctypes.WinError() @@ -321,15 +339,17 @@ def GetModuleFileNameExW(hProcess, hModule = None): nSize = nSize + MAX_PATH return lpFilename.value + GetModuleFileNameEx = GuessStringType(GetModuleFileNameExA, GetModuleFileNameExW) + # BOOL WINAPI GetModuleInformation( # __in HANDLE hProcess, # __in HMODULE hModule, # __out LPMODULEINFO lpmodinfo, # __in DWORD cb # ); -def GetModuleInformation(hProcess, hModule, lpmodinfo = None): +def GetModuleInformation(hProcess, hModule, lpmodinfo=None): _GetModuleInformation = windll.psapi.GetModuleInformation _GetModuleInformation.argtypes = [HANDLE, HMODULE, LPMODULEINFO, DWORD] _GetModuleInformation.restype = bool @@ -340,6 +360,7 @@ def GetModuleInformation(hProcess, hModule, lpmodinfo = None): _GetModuleInformation(hProcess, hModule, byref(lpmodinfo), sizeof(lpmodinfo)) return lpmodinfo + # DWORD WINAPI GetProcessImageFileName( # __in HANDLE hProcess, # __out LPTSTR lpImageFileName, @@ -361,6 +382,7 @@ def GetProcessImageFileNameA(hProcess): nSize = nSize + MAX_PATH return lpFilename.value + def GetProcessImageFileNameW(hProcess): _GetProcessImageFileNameW = windll.psapi.GetProcessImageFileNameW _GetProcessImageFileNameW.argtypes = [HANDLE, LPWSTR, DWORD] @@ -368,7 +390,7 @@ def GetProcessImageFileNameW(hProcess): nSize = MAX_PATH while 1: - lpFilename = ctypes.create_unicode_buffer(u"", nSize) + lpFilename = ctypes.create_unicode_buffer("", nSize) nCopied = _GetProcessImageFileNameW(hProcess, lpFilename, nSize) if nCopied == 0: raise ctypes.WinError() @@ -377,11 +399,12 @@ def GetProcessImageFileNameW(hProcess): nSize = nSize + MAX_PATH return lpFilename.value + GetProcessImageFileName = GuessStringType(GetProcessImageFileNameA, GetProcessImageFileNameW) -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py index 5c945db74..1447da738 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shell32.py @@ -41,118 +41,118 @@ from winappdbg.win32.defines import * from winappdbg.win32.kernel32 import LocalFree -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== - -#--- Constants ---------------------------------------------------------------- - -SEE_MASK_DEFAULT = 0x00000000 -SEE_MASK_CLASSNAME = 0x00000001 -SEE_MASK_CLASSKEY = 0x00000003 -SEE_MASK_IDLIST = 0x00000004 -SEE_MASK_INVOKEIDLIST = 0x0000000C -SEE_MASK_ICON = 0x00000010 -SEE_MASK_HOTKEY = 0x00000020 -SEE_MASK_NOCLOSEPROCESS = 0x00000040 -SEE_MASK_CONNECTNETDRV = 0x00000080 -SEE_MASK_NOASYNC = 0x00000100 -SEE_MASK_DOENVSUBST = 0x00000200 -SEE_MASK_FLAG_NO_UI = 0x00000400 -SEE_MASK_UNICODE = 0x00004000 -SEE_MASK_NO_CONSOLE = 0x00008000 -SEE_MASK_ASYNCOK = 0x00100000 -SEE_MASK_HMONITOR = 0x00200000 -SEE_MASK_NOZONECHECKS = 0x00800000 -SEE_MASK_WAITFORINPUTIDLE = 0x02000000 -SEE_MASK_FLAG_LOG_USAGE = 0x04000000 - -SE_ERR_FNF = 2 -SE_ERR_PNF = 3 -SE_ERR_ACCESSDENIED = 5 -SE_ERR_OOM = 8 -SE_ERR_DLLNOTFOUND = 32 -SE_ERR_SHARE = 26 -SE_ERR_ASSOCINCOMPLETE = 27 -SE_ERR_DDETIMEOUT = 28 -SE_ERR_DDEFAIL = 29 -SE_ERR_DDEBUSY = 30 -SE_ERR_NOASSOC = 31 +# ============================================================================== + +# --- Constants ---------------------------------------------------------------- + +SEE_MASK_DEFAULT = 0x00000000 +SEE_MASK_CLASSNAME = 0x00000001 +SEE_MASK_CLASSKEY = 0x00000003 +SEE_MASK_IDLIST = 0x00000004 +SEE_MASK_INVOKEIDLIST = 0x0000000C +SEE_MASK_ICON = 0x00000010 +SEE_MASK_HOTKEY = 0x00000020 +SEE_MASK_NOCLOSEPROCESS = 0x00000040 +SEE_MASK_CONNECTNETDRV = 0x00000080 +SEE_MASK_NOASYNC = 0x00000100 +SEE_MASK_DOENVSUBST = 0x00000200 +SEE_MASK_FLAG_NO_UI = 0x00000400 +SEE_MASK_UNICODE = 0x00004000 +SEE_MASK_NO_CONSOLE = 0x00008000 +SEE_MASK_ASYNCOK = 0x00100000 +SEE_MASK_HMONITOR = 0x00200000 +SEE_MASK_NOZONECHECKS = 0x00800000 +SEE_MASK_WAITFORINPUTIDLE = 0x02000000 +SEE_MASK_FLAG_LOG_USAGE = 0x04000000 + +SE_ERR_FNF = 2 +SE_ERR_PNF = 3 +SE_ERR_ACCESSDENIED = 5 +SE_ERR_OOM = 8 +SE_ERR_DLLNOTFOUND = 32 +SE_ERR_SHARE = 26 +SE_ERR_ASSOCINCOMPLETE = 27 +SE_ERR_DDETIMEOUT = 28 +SE_ERR_DDEFAIL = 29 +SE_ERR_DDEBUSY = 30 +SE_ERR_NOASSOC = 31 SHGFP_TYPE_CURRENT = 0 SHGFP_TYPE_DEFAULT = 1 -CSIDL_DESKTOP = 0x0000 -CSIDL_INTERNET = 0x0001 -CSIDL_PROGRAMS = 0x0002 -CSIDL_CONTROLS = 0x0003 -CSIDL_PRINTERS = 0x0004 -CSIDL_PERSONAL = 0x0005 -CSIDL_FAVORITES = 0x0006 -CSIDL_STARTUP = 0x0007 -CSIDL_RECENT = 0x0008 -CSIDL_SENDTO = 0x0009 -CSIDL_BITBUCKET = 0x000a -CSIDL_STARTMENU = 0x000b -CSIDL_MYDOCUMENTS = CSIDL_PERSONAL -CSIDL_MYMUSIC = 0x000d -CSIDL_MYVIDEO = 0x000e -CSIDL_DESKTOPDIRECTORY = 0x0010 -CSIDL_DRIVES = 0x0011 -CSIDL_NETWORK = 0x0012 -CSIDL_NETHOOD = 0x0013 -CSIDL_FONTS = 0x0014 -CSIDL_TEMPLATES = 0x0015 -CSIDL_COMMON_STARTMENU = 0x0016 -CSIDL_COMMON_PROGRAMS = 0x0017 -CSIDL_COMMON_STARTUP = 0x0018 -CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 -CSIDL_APPDATA = 0x001a -CSIDL_PRINTHOOD = 0x001b -CSIDL_LOCAL_APPDATA = 0x001c -CSIDL_ALTSTARTUP = 0x001d -CSIDL_COMMON_ALTSTARTUP = 0x001e -CSIDL_COMMON_FAVORITES = 0x001f -CSIDL_INTERNET_CACHE = 0x0020 -CSIDL_COOKIES = 0x0021 -CSIDL_HISTORY = 0x0022 -CSIDL_COMMON_APPDATA = 0x0023 -CSIDL_WINDOWS = 0x0024 -CSIDL_SYSTEM = 0x0025 -CSIDL_PROGRAM_FILES = 0x0026 -CSIDL_MYPICTURES = 0x0027 -CSIDL_PROFILE = 0x0028 -CSIDL_SYSTEMX86 = 0x0029 -CSIDL_PROGRAM_FILESX86 = 0x002a -CSIDL_PROGRAM_FILES_COMMON = 0x002b -CSIDL_PROGRAM_FILES_COMMONX86 = 0x002c -CSIDL_COMMON_TEMPLATES = 0x002d -CSIDL_COMMON_DOCUMENTS = 0x002e -CSIDL_COMMON_ADMINTOOLS = 0x002f -CSIDL_ADMINTOOLS = 0x0030 -CSIDL_CONNECTIONS = 0x0031 -CSIDL_COMMON_MUSIC = 0x0035 -CSIDL_COMMON_PICTURES = 0x0036 -CSIDL_COMMON_VIDEO = 0x0037 -CSIDL_RESOURCES = 0x0038 -CSIDL_RESOURCES_LOCALIZED = 0x0039 -CSIDL_COMMON_OEM_LINKS = 0x003a -CSIDL_CDBURN_AREA = 0x003b -CSIDL_COMPUTERSNEARME = 0x003d -CSIDL_PROFILES = 0x003e - -CSIDL_FOLDER_MASK = 0x00ff - -CSIDL_FLAG_PER_USER_INIT = 0x0800 -CSIDL_FLAG_NO_ALIAS = 0x1000 -CSIDL_FLAG_DONT_VERIFY = 0x4000 -CSIDL_FLAG_CREATE = 0x8000 - -CSIDL_FLAG_MASK = 0xff00 - -#--- Structures --------------------------------------------------------------- +CSIDL_DESKTOP = 0x0000 +CSIDL_INTERNET = 0x0001 +CSIDL_PROGRAMS = 0x0002 +CSIDL_CONTROLS = 0x0003 +CSIDL_PRINTERS = 0x0004 +CSIDL_PERSONAL = 0x0005 +CSIDL_FAVORITES = 0x0006 +CSIDL_STARTUP = 0x0007 +CSIDL_RECENT = 0x0008 +CSIDL_SENDTO = 0x0009 +CSIDL_BITBUCKET = 0x000A +CSIDL_STARTMENU = 0x000B +CSIDL_MYDOCUMENTS = CSIDL_PERSONAL +CSIDL_MYMUSIC = 0x000D +CSIDL_MYVIDEO = 0x000E +CSIDL_DESKTOPDIRECTORY = 0x0010 +CSIDL_DRIVES = 0x0011 +CSIDL_NETWORK = 0x0012 +CSIDL_NETHOOD = 0x0013 +CSIDL_FONTS = 0x0014 +CSIDL_TEMPLATES = 0x0015 +CSIDL_COMMON_STARTMENU = 0x0016 +CSIDL_COMMON_PROGRAMS = 0x0017 +CSIDL_COMMON_STARTUP = 0x0018 +CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019 +CSIDL_APPDATA = 0x001A +CSIDL_PRINTHOOD = 0x001B +CSIDL_LOCAL_APPDATA = 0x001C +CSIDL_ALTSTARTUP = 0x001D +CSIDL_COMMON_ALTSTARTUP = 0x001E +CSIDL_COMMON_FAVORITES = 0x001F +CSIDL_INTERNET_CACHE = 0x0020 +CSIDL_COOKIES = 0x0021 +CSIDL_HISTORY = 0x0022 +CSIDL_COMMON_APPDATA = 0x0023 +CSIDL_WINDOWS = 0x0024 +CSIDL_SYSTEM = 0x0025 +CSIDL_PROGRAM_FILES = 0x0026 +CSIDL_MYPICTURES = 0x0027 +CSIDL_PROFILE = 0x0028 +CSIDL_SYSTEMX86 = 0x0029 +CSIDL_PROGRAM_FILESX86 = 0x002A +CSIDL_PROGRAM_FILES_COMMON = 0x002B +CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C +CSIDL_COMMON_TEMPLATES = 0x002D +CSIDL_COMMON_DOCUMENTS = 0x002E +CSIDL_COMMON_ADMINTOOLS = 0x002F +CSIDL_ADMINTOOLS = 0x0030 +CSIDL_CONNECTIONS = 0x0031 +CSIDL_COMMON_MUSIC = 0x0035 +CSIDL_COMMON_PICTURES = 0x0036 +CSIDL_COMMON_VIDEO = 0x0037 +CSIDL_RESOURCES = 0x0038 +CSIDL_RESOURCES_LOCALIZED = 0x0039 +CSIDL_COMMON_OEM_LINKS = 0x003A +CSIDL_CDBURN_AREA = 0x003B +CSIDL_COMPUTERSNEARME = 0x003D +CSIDL_PROFILES = 0x003E + +CSIDL_FOLDER_MASK = 0x00FF + +CSIDL_FLAG_PER_USER_INIT = 0x0800 +CSIDL_FLAG_NO_ALIAS = 0x1000 +CSIDL_FLAG_DONT_VERIFY = 0x4000 +CSIDL_FLAG_CREATE = 0x8000 + +CSIDL_FLAG_MASK = 0xFF00 + +# --- Structures --------------------------------------------------------------- # typedef struct _SHELLEXECUTEINFO { # DWORD cbSize; @@ -175,34 +175,39 @@ # HANDLE hProcess; # } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO; + class SHELLEXECUTEINFO(Structure): _fields_ = [ - ("cbSize", DWORD), - ("fMask", ULONG), - ("hwnd", HWND), - ("lpVerb", LPSTR), - ("lpFile", LPSTR), + ("cbSize", DWORD), + ("fMask", ULONG), + ("hwnd", HWND), + ("lpVerb", LPSTR), + ("lpFile", LPSTR), ("lpParameters", LPSTR), - ("lpDirectory", LPSTR), - ("nShow", ctypes.c_int), - ("hInstApp", HINSTANCE), - ("lpIDList", LPVOID), - ("lpClass", LPSTR), - ("hkeyClass", HKEY), - ("dwHotKey", DWORD), - ("hIcon", HANDLE), - ("hProcess", HANDLE), + ("lpDirectory", LPSTR), + ("nShow", ctypes.c_int), + ("hInstApp", HINSTANCE), + ("lpIDList", LPVOID), + ("lpClass", LPSTR), + ("hkeyClass", HKEY), + ("dwHotKey", DWORD), + ("hIcon", HANDLE), + ("hProcess", HANDLE), ] def __get_hMonitor(self): return self.hIcon + def __set_hMonitor(self, hMonitor): self.hIcon = hMonitor + hMonitor = property(__get_hMonitor, __set_hMonitor) + LPSHELLEXECUTEINFO = POINTER(SHELLEXECUTEINFO) -#--- shell32.dll -------------------------------------------------------------- +# --- shell32.dll -------------------------------------------------------------- + # LPWSTR *CommandLineToArgvW( # LPCWSTR lpCmdLine, @@ -211,7 +216,7 @@ def __set_hMonitor(self, hMonitor): def CommandLineToArgvW(lpCmdLine): _CommandLineToArgvW = windll.shell32.CommandLineToArgvW _CommandLineToArgvW.argtypes = [LPVOID, POINTER(ctypes.c_int)] - _CommandLineToArgvW.restype = LPVOID + _CommandLineToArgvW.restype = LPVOID if not lpCmdLine: lpCmdLine = None @@ -224,13 +229,14 @@ def CommandLineToArgvW(lpCmdLine): argc = argc.value if argc <= 0: raise ctypes.WinError() - argv = ctypes.cast(argv, ctypes.POINTER(LPWSTR * argc) ) - argv = [ argv.contents[i] for i in compat.xrange(0, argc) ] + argv = ctypes.cast(argv, ctypes.POINTER(LPWSTR * argc)) + argv = [argv.contents[i] for i in compat.xrange(0, argc)] finally: if vptr is not None: LocalFree(vptr) return argv + def CommandLineToArgvA(lpCmdLine): t_ansi = GuessStringType.t_ansi t_unicode = GuessStringType.t_unicode @@ -240,8 +246,10 @@ def CommandLineToArgvA(lpCmdLine): cmdline = lpCmdLine return [t_ansi(x) for x in CommandLineToArgvW(cmdline)] + CommandLineToArgv = GuessStringType(CommandLineToArgvA, CommandLineToArgvW) + # HINSTANCE ShellExecute( # HWND hwnd, # LPCTSTR lpOperation, @@ -250,34 +258,37 @@ def CommandLineToArgvA(lpCmdLine): # LPCTSTR lpDirectory, # INT nShowCmd # ); -def ShellExecuteA(hwnd = None, lpOperation = None, lpFile = None, lpParameters = None, lpDirectory = None, nShowCmd = None): +def ShellExecuteA(hwnd=None, lpOperation=None, lpFile=None, lpParameters=None, lpDirectory=None, nShowCmd=None): _ShellExecuteA = windll.shell32.ShellExecuteA _ShellExecuteA.argtypes = [HWND, LPSTR, LPSTR, LPSTR, LPSTR, INT] - _ShellExecuteA.restype = HINSTANCE + _ShellExecuteA.restype = HINSTANCE if not nShowCmd: nShowCmd = 0 success = _ShellExecuteA(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd) success = ctypes.cast(success, c_int) success = success.value - if not success > 32: # weird! isn't it? + if not success > 32: # weird! isn't it? raise ctypes.WinError(success) -def ShellExecuteW(hwnd = None, lpOperation = None, lpFile = None, lpParameters = None, lpDirectory = None, nShowCmd = None): + +def ShellExecuteW(hwnd=None, lpOperation=None, lpFile=None, lpParameters=None, lpDirectory=None, nShowCmd=None): _ShellExecuteW = windll.shell32.ShellExecuteW _ShellExecuteW.argtypes = [HWND, LPWSTR, LPWSTR, LPWSTR, LPWSTR, INT] - _ShellExecuteW.restype = HINSTANCE + _ShellExecuteW.restype = HINSTANCE if not nShowCmd: nShowCmd = 0 success = _ShellExecuteW(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd) success = ctypes.cast(success, c_int) success = success.value - if not success > 32: # weird! isn't it? + if not success > 32: # weird! isn't it? raise ctypes.WinError(success) + ShellExecute = GuessStringType(ShellExecuteA, ShellExecuteW) + # BOOL ShellExecuteEx( # __inout LPSHELLEXECUTEINFO lpExecInfo # ); @@ -289,53 +300,59 @@ def ShellExecuteEx(lpExecInfo): else: raise TypeError("Expected SHELLEXECUTEINFOA or SHELLEXECUTEINFOW, got %s instead" % type(lpExecInfo)) + def ShellExecuteExA(lpExecInfo): _ShellExecuteExA = windll.shell32.ShellExecuteExA _ShellExecuteExA.argtypes = [LPSHELLEXECUTEINFOA] - _ShellExecuteExA.restype = BOOL + _ShellExecuteExA.restype = BOOL _ShellExecuteExA.errcheck = RaiseIfZero _ShellExecuteExA(byref(lpExecInfo)) + def ShellExecuteExW(lpExecInfo): _ShellExecuteExW = windll.shell32.ShellExecuteExW _ShellExecuteExW.argtypes = [LPSHELLEXECUTEINFOW] - _ShellExecuteExW.restype = BOOL + _ShellExecuteExW.restype = BOOL _ShellExecuteExW.errcheck = RaiseIfZero _ShellExecuteExW(byref(lpExecInfo)) + # HINSTANCE FindExecutable( # __in LPCTSTR lpFile, # __in_opt LPCTSTR lpDirectory, # __out LPTSTR lpResult # ); -def FindExecutableA(lpFile, lpDirectory = None): +def FindExecutableA(lpFile, lpDirectory=None): _FindExecutableA = windll.shell32.FindExecutableA _FindExecutableA.argtypes = [LPSTR, LPSTR, LPSTR] - _FindExecutableA.restype = HINSTANCE + _FindExecutableA.restype = HINSTANCE lpResult = ctypes.create_string_buffer(MAX_PATH) success = _FindExecutableA(lpFile, lpDirectory, lpResult) success = ctypes.cast(success, ctypes.c_void_p) success = success.value - if not success > 32: # weird! isn't it? + if not success > 32: # weird! isn't it? raise ctypes.WinError(success) return lpResult.value -def FindExecutableW(lpFile, lpDirectory = None): + +def FindExecutableW(lpFile, lpDirectory=None): _FindExecutableW = windll.shell32.FindExecutableW _FindExecutableW.argtypes = [LPWSTR, LPWSTR, LPWSTR] - _FindExecutableW.restype = HINSTANCE + _FindExecutableW.restype = HINSTANCE lpResult = ctypes.create_unicode_buffer(MAX_PATH) success = _FindExecutableW(lpFile, lpDirectory, lpResult) success = ctypes.cast(success, ctypes.c_void_p) success = success.value - if not success > 32: # weird! isn't it? + if not success > 32: # weird! isn't it? raise ctypes.WinError(success) return lpResult.value + FindExecutable = GuessStringType(FindExecutableA, FindExecutableW) + # HRESULT SHGetFolderPath( # __in HWND hwndOwner, # __in int nFolder, @@ -343,40 +360,44 @@ def FindExecutableW(lpFile, lpDirectory = None): # __in DWORD dwFlags, # __out LPTSTR pszPath # ); -def SHGetFolderPathA(nFolder, hToken = None, dwFlags = SHGFP_TYPE_CURRENT): - _SHGetFolderPathA = windll.shell32.SHGetFolderPathA # shfolder.dll in older win versions +def SHGetFolderPathA(nFolder, hToken=None, dwFlags=SHGFP_TYPE_CURRENT): + _SHGetFolderPathA = windll.shell32.SHGetFolderPathA # shfolder.dll in older win versions _SHGetFolderPathA.argtypes = [HWND, ctypes.c_int, HANDLE, DWORD, LPSTR] - _SHGetFolderPathA.restype = HRESULT - _SHGetFolderPathA.errcheck = RaiseIfNotZero # S_OK == 0 + _SHGetFolderPathA.restype = HRESULT + _SHGetFolderPathA.errcheck = RaiseIfNotZero # S_OK == 0 pszPath = ctypes.create_string_buffer(MAX_PATH + 1) _SHGetFolderPathA(None, nFolder, hToken, dwFlags, pszPath) return pszPath.value -def SHGetFolderPathW(nFolder, hToken = None, dwFlags = SHGFP_TYPE_CURRENT): - _SHGetFolderPathW = windll.shell32.SHGetFolderPathW # shfolder.dll in older win versions + +def SHGetFolderPathW(nFolder, hToken=None, dwFlags=SHGFP_TYPE_CURRENT): + _SHGetFolderPathW = windll.shell32.SHGetFolderPathW # shfolder.dll in older win versions _SHGetFolderPathW.argtypes = [HWND, ctypes.c_int, HANDLE, DWORD, LPWSTR] - _SHGetFolderPathW.restype = HRESULT - _SHGetFolderPathW.errcheck = RaiseIfNotZero # S_OK == 0 + _SHGetFolderPathW.restype = HRESULT + _SHGetFolderPathW.errcheck = RaiseIfNotZero # S_OK == 0 pszPath = ctypes.create_unicode_buffer(MAX_PATH + 1) _SHGetFolderPathW(None, nFolder, hToken, dwFlags, pszPath) return pszPath.value + SHGetFolderPath = DefaultStringType(SHGetFolderPathA, SHGetFolderPathW) + # BOOL IsUserAnAdmin(void); def IsUserAnAdmin(): # Supposedly, IsUserAnAdmin() is deprecated in Vista. # But I tried it on Windows 7 and it works just fine. _IsUserAnAdmin = windll.shell32.IsUserAnAdmin _IsUserAnAdmin.argtypes = [] - _IsUserAnAdmin.restype = bool + _IsUserAnAdmin.restype = bool return _IsUserAnAdmin() -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py index 5f6eb3eab..43dfcb5e6 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/shlwapi.py @@ -37,50 +37,51 @@ from winappdbg.win32.defines import * from winappdbg.win32.kernel32 import * -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== - -OS_WINDOWS = 0 -OS_NT = 1 -OS_WIN95ORGREATER = 2 -OS_NT4ORGREATER = 3 -OS_WIN98ORGREATER = 5 -OS_WIN98_GOLD = 6 -OS_WIN2000ORGREATER = 7 -OS_WIN2000PRO = 8 -OS_WIN2000SERVER = 9 -OS_WIN2000ADVSERVER = 10 -OS_WIN2000DATACENTER = 11 -OS_WIN2000TERMINAL = 12 -OS_EMBEDDED = 13 -OS_TERMINALCLIENT = 14 -OS_TERMINALREMOTEADMIN = 15 -OS_WIN95_GOLD = 16 -OS_MEORGREATER = 17 -OS_XPORGREATER = 18 -OS_HOME = 19 -OS_PROFESSIONAL = 20 -OS_DATACENTER = 21 -OS_ADVSERVER = 22 -OS_SERVER = 23 -OS_TERMINALSERVER = 24 -OS_PERSONALTERMINALSERVER = 25 -OS_FASTUSERSWITCHING = 26 -OS_WELCOMELOGONUI = 27 -OS_DOMAINMEMBER = 28 -OS_ANYSERVER = 29 -OS_WOW6432 = 30 -OS_WEBSERVER = 31 -OS_SMALLBUSINESSSERVER = 32 -OS_TABLETPC = 33 -OS_SERVERADMINUI = 34 -OS_MEDIACENTER = 35 -OS_APPLIANCE = 36 - -#--- shlwapi.dll -------------------------------------------------------------- +# ============================================================================== + +OS_WINDOWS = 0 +OS_NT = 1 +OS_WIN95ORGREATER = 2 +OS_NT4ORGREATER = 3 +OS_WIN98ORGREATER = 5 +OS_WIN98_GOLD = 6 +OS_WIN2000ORGREATER = 7 +OS_WIN2000PRO = 8 +OS_WIN2000SERVER = 9 +OS_WIN2000ADVSERVER = 10 +OS_WIN2000DATACENTER = 11 +OS_WIN2000TERMINAL = 12 +OS_EMBEDDED = 13 +OS_TERMINALCLIENT = 14 +OS_TERMINALREMOTEADMIN = 15 +OS_WIN95_GOLD = 16 +OS_MEORGREATER = 17 +OS_XPORGREATER = 18 +OS_HOME = 19 +OS_PROFESSIONAL = 20 +OS_DATACENTER = 21 +OS_ADVSERVER = 22 +OS_SERVER = 23 +OS_TERMINALSERVER = 24 +OS_PERSONALTERMINALSERVER = 25 +OS_FASTUSERSWITCHING = 26 +OS_WELCOMELOGONUI = 27 +OS_DOMAINMEMBER = 28 +OS_ANYSERVER = 29 +OS_WOW6432 = 30 +OS_WEBSERVER = 31 +OS_SMALLBUSINESSSERVER = 32 +OS_TABLETPC = 33 +OS_SERVERADMINUI = 34 +OS_MEDIACENTER = 35 +OS_APPLIANCE = 36 + +# --- shlwapi.dll -------------------------------------------------------------- + # BOOL IsOS( # DWORD dwOS @@ -89,25 +90,26 @@ def IsOS(dwOS): try: _IsOS = windll.shlwapi.IsOS _IsOS.argtypes = [DWORD] - _IsOS.restype = bool + _IsOS.restype = bool except AttributeError: # According to MSDN, on Windows versions prior to Vista # this function is exported only by ordinal number 437. # http://msdn.microsoft.com/en-us/library/bb773795%28VS.85%29.aspx _GetProcAddress = windll.kernel32.GetProcAddress _GetProcAddress.argtypes = [HINSTANCE, DWORD] - _GetProcAddress.restype = LPVOID + _GetProcAddress.restype = LPVOID _IsOS = windll.kernel32.GetProcAddress(windll.shlwapi._handle, 437) _IsOS = WINFUNCTYPE(bool, DWORD)(_IsOS) return _IsOS(dwOS) + # LPTSTR PathAddBackslash( # LPTSTR lpszPath # ); def PathAddBackslashA(lpszPath): _PathAddBackslashA = windll.shlwapi.PathAddBackslashA _PathAddBackslashA.argtypes = [LPSTR] - _PathAddBackslashA.restype = LPSTR + _PathAddBackslashA.restype = LPSTR lpszPath = ctypes.create_string_buffer(lpszPath, MAX_PATH) retval = _PathAddBackslashA(lpszPath) @@ -115,10 +117,11 @@ def PathAddBackslashA(lpszPath): raise ctypes.WinError() return lpszPath.value + def PathAddBackslashW(lpszPath): _PathAddBackslashW = windll.shlwapi.PathAddBackslashW _PathAddBackslashW.argtypes = [LPWSTR] - _PathAddBackslashW.restype = LPWSTR + _PathAddBackslashW.restype = LPWSTR lpszPath = ctypes.create_unicode_buffer(lpszPath, MAX_PATH) retval = _PathAddBackslashW(lpszPath) @@ -126,16 +129,18 @@ def PathAddBackslashW(lpszPath): raise ctypes.WinError() return lpszPath.value + PathAddBackslash = GuessStringType(PathAddBackslashA, PathAddBackslashW) + # BOOL PathAddExtension( # LPTSTR pszPath, # LPCTSTR pszExtension # ); -def PathAddExtensionA(lpszPath, pszExtension = None): +def PathAddExtensionA(lpszPath, pszExtension=None): _PathAddExtensionA = windll.shlwapi.PathAddExtensionA _PathAddExtensionA.argtypes = [LPSTR, LPSTR] - _PathAddExtensionA.restype = bool + _PathAddExtensionA.restype = bool _PathAddExtensionA.errcheck = RaiseIfZero if not pszExtension: @@ -144,10 +149,11 @@ def PathAddExtensionA(lpszPath, pszExtension = None): _PathAddExtensionA(lpszPath, pszExtension) return lpszPath.value -def PathAddExtensionW(lpszPath, pszExtension = None): + +def PathAddExtensionW(lpszPath, pszExtension=None): _PathAddExtensionW = windll.shlwapi.PathAddExtensionW _PathAddExtensionW.argtypes = [LPWSTR, LPWSTR] - _PathAddExtensionW.restype = bool + _PathAddExtensionW.restype = bool _PathAddExtensionW.errcheck = RaiseIfZero if not pszExtension: @@ -156,16 +162,18 @@ def PathAddExtensionW(lpszPath, pszExtension = None): _PathAddExtensionW(lpszPath, pszExtension) return lpszPath.value + PathAddExtension = GuessStringType(PathAddExtensionA, PathAddExtensionW) + # BOOL PathAppend( # LPTSTR pszPath, # LPCTSTR pszMore # ); -def PathAppendA(lpszPath, pszMore = None): +def PathAppendA(lpszPath, pszMore=None): _PathAppendA = windll.shlwapi.PathAppendA _PathAppendA.argtypes = [LPSTR, LPSTR] - _PathAppendA.restype = bool + _PathAppendA.restype = bool _PathAppendA.errcheck = RaiseIfZero if not pszMore: @@ -174,10 +182,11 @@ def PathAppendA(lpszPath, pszMore = None): _PathAppendA(lpszPath, pszMore) return lpszPath.value -def PathAppendW(lpszPath, pszMore = None): + +def PathAppendW(lpszPath, pszMore=None): _PathAppendW = windll.shlwapi.PathAppendW _PathAppendW.argtypes = [LPWSTR, LPWSTR] - _PathAppendW.restype = bool + _PathAppendW.restype = bool _PathAppendW.errcheck = RaiseIfZero if not pszMore: @@ -186,8 +195,10 @@ def PathAppendW(lpszPath, pszMore = None): _PathAppendW(lpszPath, pszMore) return lpszPath.value + PathAppend = GuessStringType(PathAppendA, PathAppendW) + # LPTSTR PathCombine( # LPTSTR lpszDest, # LPCTSTR lpszDir, @@ -196,7 +207,7 @@ def PathAppendW(lpszPath, pszMore = None): def PathCombineA(lpszDir, lpszFile): _PathCombineA = windll.shlwapi.PathCombineA _PathCombineA.argtypes = [LPSTR, LPSTR, LPSTR] - _PathCombineA.restype = LPSTR + _PathCombineA.restype = LPSTR lpszDest = ctypes.create_string_buffer("", max(MAX_PATH, len(lpszDir) + len(lpszFile) + 1)) retval = _PathCombineA(lpszDest, lpszDir, lpszFile) @@ -204,19 +215,22 @@ def PathCombineA(lpszDir, lpszFile): return None return lpszDest.value + def PathCombineW(lpszDir, lpszFile): _PathCombineW = windll.shlwapi.PathCombineW _PathCombineW.argtypes = [LPWSTR, LPWSTR, LPWSTR] - _PathCombineW.restype = LPWSTR + _PathCombineW.restype = LPWSTR - lpszDest = ctypes.create_unicode_buffer(u"", max(MAX_PATH, len(lpszDir) + len(lpszFile) + 1)) + lpszDest = ctypes.create_unicode_buffer("", max(MAX_PATH, len(lpszDir) + len(lpszFile) + 1)) retval = _PathCombineW(lpszDest, lpszDir, lpszFile) if retval == NULL: return None return lpszDest.value + PathCombine = GuessStringType(PathCombineA, PathCombineW) + # BOOL PathCanonicalize( # LPTSTR lpszDst, # LPCTSTR lpszSrc @@ -224,25 +238,28 @@ def PathCombineW(lpszDir, lpszFile): def PathCanonicalizeA(lpszSrc): _PathCanonicalizeA = windll.shlwapi.PathCanonicalizeA _PathCanonicalizeA.argtypes = [LPSTR, LPSTR] - _PathCanonicalizeA.restype = bool + _PathCanonicalizeA.restype = bool _PathCanonicalizeA.errcheck = RaiseIfZero lpszDst = ctypes.create_string_buffer("", MAX_PATH) _PathCanonicalizeA(lpszDst, lpszSrc) return lpszDst.value + def PathCanonicalizeW(lpszSrc): _PathCanonicalizeW = windll.shlwapi.PathCanonicalizeW _PathCanonicalizeW.argtypes = [LPWSTR, LPWSTR] - _PathCanonicalizeW.restype = bool + _PathCanonicalizeW.restype = bool _PathCanonicalizeW.errcheck = RaiseIfZero - lpszDst = ctypes.create_unicode_buffer(u"", MAX_PATH) + lpszDst = ctypes.create_unicode_buffer("", MAX_PATH) _PathCanonicalizeW(lpszDst, lpszSrc) return lpszDst.value + PathCanonicalize = GuessStringType(PathCanonicalizeA, PathCanonicalizeW) + # BOOL PathRelativePathTo( # _Out_ LPTSTR pszPath, # _In_ LPCTSTR pszFrom, @@ -250,10 +267,10 @@ def PathCanonicalizeW(lpszSrc): # _In_ LPCTSTR pszTo, # _In_ DWORD dwAttrTo # ); -def PathRelativePathToA(pszFrom = None, dwAttrFrom = FILE_ATTRIBUTE_DIRECTORY, pszTo = None, dwAttrTo = FILE_ATTRIBUTE_DIRECTORY): +def PathRelativePathToA(pszFrom=None, dwAttrFrom=FILE_ATTRIBUTE_DIRECTORY, pszTo=None, dwAttrTo=FILE_ATTRIBUTE_DIRECTORY): _PathRelativePathToA = windll.shlwapi.PathRelativePathToA _PathRelativePathToA.argtypes = [LPSTR, LPSTR, DWORD, LPSTR, DWORD] - _PathRelativePathToA.restype = bool + _PathRelativePathToA.restype = bool _PathRelativePathToA.errcheck = RaiseIfZero # Make the paths absolute or the function fails. @@ -269,7 +286,7 @@ def PathRelativePathToA(pszFrom = None, dwAttrFrom = FILE_ATTRIBUTE_DIRECTORY, p # Argh, this function doesn't receive an output buffer size! # We'll try to guess the maximum possible buffer size. dwPath = max((len(pszFrom) + len(pszTo)) * 2 + 1, MAX_PATH + 1) - pszPath = ctypes.create_string_buffer('', dwPath) + pszPath = ctypes.create_string_buffer("", dwPath) # Also, it doesn't set the last error value. # Whoever coded it must have been drunk or tripping on acid. Or both. @@ -280,10 +297,11 @@ def PathRelativePathToA(pszFrom = None, dwAttrFrom = FILE_ATTRIBUTE_DIRECTORY, p _PathRelativePathToA(pszPath, pszFrom, dwAttrFrom, pszTo, dwAttrTo) return pszPath.value -def PathRelativePathToW(pszFrom = None, dwAttrFrom = FILE_ATTRIBUTE_DIRECTORY, pszTo = None, dwAttrTo = FILE_ATTRIBUTE_DIRECTORY): + +def PathRelativePathToW(pszFrom=None, dwAttrFrom=FILE_ATTRIBUTE_DIRECTORY, pszTo=None, dwAttrTo=FILE_ATTRIBUTE_DIRECTORY): _PathRelativePathToW = windll.shlwapi.PathRelativePathToW _PathRelativePathToW.argtypes = [LPWSTR, LPWSTR, DWORD, LPWSTR, DWORD] - _PathRelativePathToW.restype = bool + _PathRelativePathToW.restype = bool _PathRelativePathToW.errcheck = RaiseIfZero # Refer to PathRelativePathToA to know why this code is so ugly. @@ -296,95 +314,109 @@ def PathRelativePathToW(pszFrom = None, dwAttrFrom = FILE_ATTRIBUTE_DIRECTORY, p else: pszTo = GetCurrentDirectoryW() dwPath = max((len(pszFrom) + len(pszTo)) * 2 + 1, MAX_PATH + 1) - pszPath = ctypes.create_unicode_buffer(u'', dwPath) + pszPath = ctypes.create_unicode_buffer("", dwPath) SetLastError(ERROR_INVALID_PARAMETER) _PathRelativePathToW(pszPath, pszFrom, dwAttrFrom, pszTo, dwAttrTo) return pszPath.value + PathRelativePathTo = GuessStringType(PathRelativePathToA, PathRelativePathToW) + # BOOL PathFileExists( # LPCTSTR pszPath # ); def PathFileExistsA(pszPath): _PathFileExistsA = windll.shlwapi.PathFileExistsA _PathFileExistsA.argtypes = [LPSTR] - _PathFileExistsA.restype = bool + _PathFileExistsA.restype = bool return _PathFileExistsA(pszPath) + def PathFileExistsW(pszPath): _PathFileExistsW = windll.shlwapi.PathFileExistsW _PathFileExistsW.argtypes = [LPWSTR] - _PathFileExistsW.restype = bool + _PathFileExistsW.restype = bool return _PathFileExistsW(pszPath) + PathFileExists = GuessStringType(PathFileExistsA, PathFileExistsW) + # LPTSTR PathFindExtension( # LPCTSTR pszPath # ); def PathFindExtensionA(pszPath): _PathFindExtensionA = windll.shlwapi.PathFindExtensionA _PathFindExtensionA.argtypes = [LPSTR] - _PathFindExtensionA.restype = LPSTR + _PathFindExtensionA.restype = LPSTR pszPath = ctypes.create_string_buffer(pszPath) return _PathFindExtensionA(pszPath) + def PathFindExtensionW(pszPath): _PathFindExtensionW = windll.shlwapi.PathFindExtensionW _PathFindExtensionW.argtypes = [LPWSTR] - _PathFindExtensionW.restype = LPWSTR + _PathFindExtensionW.restype = LPWSTR pszPath = ctypes.create_unicode_buffer(pszPath) return _PathFindExtensionW(pszPath) + PathFindExtension = GuessStringType(PathFindExtensionA, PathFindExtensionW) + # LPTSTR PathFindFileName( # LPCTSTR pszPath # ); def PathFindFileNameA(pszPath): _PathFindFileNameA = windll.shlwapi.PathFindFileNameA _PathFindFileNameA.argtypes = [LPSTR] - _PathFindFileNameA.restype = LPSTR + _PathFindFileNameA.restype = LPSTR pszPath = ctypes.create_string_buffer(pszPath) return _PathFindFileNameA(pszPath) + def PathFindFileNameW(pszPath): _PathFindFileNameW = windll.shlwapi.PathFindFileNameW _PathFindFileNameW.argtypes = [LPWSTR] - _PathFindFileNameW.restype = LPWSTR + _PathFindFileNameW.restype = LPWSTR pszPath = ctypes.create_unicode_buffer(pszPath) return _PathFindFileNameW(pszPath) + PathFindFileName = GuessStringType(PathFindFileNameA, PathFindFileNameW) + # LPTSTR PathFindNextComponent( # LPCTSTR pszPath # ); def PathFindNextComponentA(pszPath): _PathFindNextComponentA = windll.shlwapi.PathFindNextComponentA _PathFindNextComponentA.argtypes = [LPSTR] - _PathFindNextComponentA.restype = LPSTR + _PathFindNextComponentA.restype = LPSTR pszPath = ctypes.create_string_buffer(pszPath) return _PathFindNextComponentA(pszPath) + def PathFindNextComponentW(pszPath): _PathFindNextComponentW = windll.shlwapi.PathFindNextComponentW _PathFindNextComponentW.argtypes = [LPWSTR] - _PathFindNextComponentW.restype = LPWSTR + _PathFindNextComponentW.restype = LPWSTR pszPath = ctypes.create_unicode_buffer(pszPath) return _PathFindNextComponentW(pszPath) + PathFindNextComponent = GuessStringType(PathFindNextComponentA, PathFindNextComponentW) + # BOOL PathFindOnPath( # LPTSTR pszFile, # LPCTSTR *ppszOtherDirs # ); -def PathFindOnPathA(pszFile, ppszOtherDirs = None): +def PathFindOnPathA(pszFile, ppszOtherDirs=None): _PathFindOnPathA = windll.shlwapi.PathFindOnPathA _PathFindOnPathA.argtypes = [LPSTR, LPSTR] - _PathFindOnPathA.restype = bool + _PathFindOnPathA.restype = bool pszFile = ctypes.create_string_buffer(pszFile, MAX_PATH) if not ppszOtherDirs: @@ -401,47 +433,53 @@ def PathFindOnPathA(pszFile, ppszOtherDirs = None): return pszFile.value return None -def PathFindOnPathW(pszFile, ppszOtherDirs = None): + +def PathFindOnPathW(pszFile, ppszOtherDirs=None): _PathFindOnPathW = windll.shlwapi.PathFindOnPathA _PathFindOnPathW.argtypes = [LPWSTR, LPWSTR] - _PathFindOnPathW.restype = bool + _PathFindOnPathW.restype = bool pszFile = ctypes.create_unicode_buffer(pszFile, MAX_PATH) if not ppszOtherDirs: ppszOtherDirs = None else: - szArray = u"" + szArray = "" for pszOtherDirs in ppszOtherDirs: if pszOtherDirs: - szArray = u"%s%s\0" % (szArray, pszOtherDirs) - szArray = szArray + u"\0" + szArray = "%s%s\0" % (szArray, pszOtherDirs) + szArray = szArray + "\0" pszOtherDirs = ctypes.create_unicode_buffer(szArray) ppszOtherDirs = ctypes.pointer(pszOtherDirs) if _PathFindOnPathW(pszFile, ppszOtherDirs): return pszFile.value return None + PathFindOnPath = GuessStringType(PathFindOnPathA, PathFindOnPathW) + # LPTSTR PathGetArgs( # LPCTSTR pszPath # ); def PathGetArgsA(pszPath): _PathGetArgsA = windll.shlwapi.PathGetArgsA _PathGetArgsA.argtypes = [LPSTR] - _PathGetArgsA.restype = LPSTR + _PathGetArgsA.restype = LPSTR pszPath = ctypes.create_string_buffer(pszPath) return _PathGetArgsA(pszPath) + def PathGetArgsW(pszPath): _PathGetArgsW = windll.shlwapi.PathGetArgsW _PathGetArgsW.argtypes = [LPWSTR] - _PathGetArgsW.restype = LPWSTR + _PathGetArgsW.restype = LPWSTR pszPath = ctypes.create_unicode_buffer(pszPath) return _PathGetArgsW(pszPath) + PathGetArgs = GuessStringType(PathGetArgsA, PathGetArgsW) + # BOOL PathIsContentType( # LPCTSTR pszPath, # LPCTSTR pszContentType @@ -449,102 +487,120 @@ def PathGetArgsW(pszPath): def PathIsContentTypeA(pszPath, pszContentType): _PathIsContentTypeA = windll.shlwapi.PathIsContentTypeA _PathIsContentTypeA.argtypes = [LPSTR, LPSTR] - _PathIsContentTypeA.restype = bool + _PathIsContentTypeA.restype = bool return _PathIsContentTypeA(pszPath, pszContentType) + def PathIsContentTypeW(pszPath, pszContentType): _PathIsContentTypeW = windll.shlwapi.PathIsContentTypeW _PathIsContentTypeW.argtypes = [LPWSTR, LPWSTR] - _PathIsContentTypeW.restype = bool + _PathIsContentTypeW.restype = bool return _PathIsContentTypeW(pszPath, pszContentType) + PathIsContentType = GuessStringType(PathIsContentTypeA, PathIsContentTypeW) + # BOOL PathIsDirectory( # LPCTSTR pszPath # ); def PathIsDirectoryA(pszPath): _PathIsDirectoryA = windll.shlwapi.PathIsDirectoryA _PathIsDirectoryA.argtypes = [LPSTR] - _PathIsDirectoryA.restype = bool + _PathIsDirectoryA.restype = bool return _PathIsDirectoryA(pszPath) + def PathIsDirectoryW(pszPath): _PathIsDirectoryW = windll.shlwapi.PathIsDirectoryW _PathIsDirectoryW.argtypes = [LPWSTR] - _PathIsDirectoryW.restype = bool + _PathIsDirectoryW.restype = bool return _PathIsDirectoryW(pszPath) + PathIsDirectory = GuessStringType(PathIsDirectoryA, PathIsDirectoryW) + # BOOL PathIsDirectoryEmpty( # LPCTSTR pszPath # ); def PathIsDirectoryEmptyA(pszPath): _PathIsDirectoryEmptyA = windll.shlwapi.PathIsDirectoryEmptyA _PathIsDirectoryEmptyA.argtypes = [LPSTR] - _PathIsDirectoryEmptyA.restype = bool + _PathIsDirectoryEmptyA.restype = bool return _PathIsDirectoryEmptyA(pszPath) + def PathIsDirectoryEmptyW(pszPath): _PathIsDirectoryEmptyW = windll.shlwapi.PathIsDirectoryEmptyW _PathIsDirectoryEmptyW.argtypes = [LPWSTR] - _PathIsDirectoryEmptyW.restype = bool + _PathIsDirectoryEmptyW.restype = bool return _PathIsDirectoryEmptyW(pszPath) + PathIsDirectoryEmpty = GuessStringType(PathIsDirectoryEmptyA, PathIsDirectoryEmptyW) + # BOOL PathIsNetworkPath( # LPCTSTR pszPath # ); def PathIsNetworkPathA(pszPath): _PathIsNetworkPathA = windll.shlwapi.PathIsNetworkPathA _PathIsNetworkPathA.argtypes = [LPSTR] - _PathIsNetworkPathA.restype = bool + _PathIsNetworkPathA.restype = bool return _PathIsNetworkPathA(pszPath) + def PathIsNetworkPathW(pszPath): _PathIsNetworkPathW = windll.shlwapi.PathIsNetworkPathW _PathIsNetworkPathW.argtypes = [LPWSTR] - _PathIsNetworkPathW.restype = bool + _PathIsNetworkPathW.restype = bool return _PathIsNetworkPathW(pszPath) + PathIsNetworkPath = GuessStringType(PathIsNetworkPathA, PathIsNetworkPathW) + # BOOL PathIsRelative( # LPCTSTR lpszPath # ); def PathIsRelativeA(pszPath): _PathIsRelativeA = windll.shlwapi.PathIsRelativeA _PathIsRelativeA.argtypes = [LPSTR] - _PathIsRelativeA.restype = bool + _PathIsRelativeA.restype = bool return _PathIsRelativeA(pszPath) + def PathIsRelativeW(pszPath): _PathIsRelativeW = windll.shlwapi.PathIsRelativeW _PathIsRelativeW.argtypes = [LPWSTR] - _PathIsRelativeW.restype = bool + _PathIsRelativeW.restype = bool return _PathIsRelativeW(pszPath) + PathIsRelative = GuessStringType(PathIsRelativeA, PathIsRelativeW) + # BOOL PathIsRoot( # LPCTSTR pPath # ); def PathIsRootA(pszPath): _PathIsRootA = windll.shlwapi.PathIsRootA _PathIsRootA.argtypes = [LPSTR] - _PathIsRootA.restype = bool + _PathIsRootA.restype = bool return _PathIsRootA(pszPath) + def PathIsRootW(pszPath): _PathIsRootW = windll.shlwapi.PathIsRootW _PathIsRootW.argtypes = [LPWSTR] - _PathIsRootW.restype = bool + _PathIsRootW.restype = bool return _PathIsRootW(pszPath) + PathIsRoot = GuessStringType(PathIsRootA, PathIsRootW) + # BOOL PathIsSameRoot( # LPCTSTR pszPath1, # LPCTSTR pszPath2 @@ -552,63 +608,72 @@ def PathIsRootW(pszPath): def PathIsSameRootA(pszPath1, pszPath2): _PathIsSameRootA = windll.shlwapi.PathIsSameRootA _PathIsSameRootA.argtypes = [LPSTR, LPSTR] - _PathIsSameRootA.restype = bool + _PathIsSameRootA.restype = bool return _PathIsSameRootA(pszPath1, pszPath2) + def PathIsSameRootW(pszPath1, pszPath2): _PathIsSameRootW = windll.shlwapi.PathIsSameRootW _PathIsSameRootW.argtypes = [LPWSTR, LPWSTR] - _PathIsSameRootW.restype = bool + _PathIsSameRootW.restype = bool return _PathIsSameRootW(pszPath1, pszPath2) + PathIsSameRoot = GuessStringType(PathIsSameRootA, PathIsSameRootW) + # BOOL PathIsUNC( # LPCTSTR pszPath # ); def PathIsUNCA(pszPath): _PathIsUNCA = windll.shlwapi.PathIsUNCA _PathIsUNCA.argtypes = [LPSTR] - _PathIsUNCA.restype = bool + _PathIsUNCA.restype = bool return _PathIsUNCA(pszPath) + def PathIsUNCW(pszPath): _PathIsUNCW = windll.shlwapi.PathIsUNCW _PathIsUNCW.argtypes = [LPWSTR] - _PathIsUNCW.restype = bool + _PathIsUNCW.restype = bool return _PathIsUNCW(pszPath) + PathIsUNC = GuessStringType(PathIsUNCA, PathIsUNCW) # XXX WARNING # PathMakePretty turns filenames into all lowercase. # I'm not sure how well that might work on Wine. + # BOOL PathMakePretty( # LPCTSTR pszPath # ); def PathMakePrettyA(pszPath): _PathMakePrettyA = windll.shlwapi.PathMakePrettyA _PathMakePrettyA.argtypes = [LPSTR] - _PathMakePrettyA.restype = bool + _PathMakePrettyA.restype = bool _PathMakePrettyA.errcheck = RaiseIfZero pszPath = ctypes.create_string_buffer(pszPath, MAX_PATH) _PathMakePrettyA(pszPath) return pszPath.value + def PathMakePrettyW(pszPath): _PathMakePrettyW = windll.shlwapi.PathMakePrettyW _PathMakePrettyW.argtypes = [LPWSTR] - _PathMakePrettyW.restype = bool + _PathMakePrettyW.restype = bool _PathMakePrettyW.errcheck = RaiseIfZero pszPath = ctypes.create_unicode_buffer(pszPath, MAX_PATH) _PathMakePrettyW(pszPath) return pszPath.value + PathMakePretty = GuessStringType(PathMakePrettyA, PathMakePrettyW) + # void PathRemoveArgs( # LPTSTR pszPath # ); @@ -620,6 +685,7 @@ def PathRemoveArgsA(pszPath): _PathRemoveArgsA(pszPath) return pszPath.value + def PathRemoveArgsW(pszPath): _PathRemoveArgsW = windll.shlwapi.PathRemoveArgsW _PathRemoveArgsW.argtypes = [LPWSTR] @@ -628,8 +694,10 @@ def PathRemoveArgsW(pszPath): _PathRemoveArgsW(pszPath) return pszPath.value + PathRemoveArgs = GuessStringType(PathRemoveArgsA, PathRemoveArgsW) + # void PathRemoveBackslash( # LPTSTR pszPath # ); @@ -641,6 +709,7 @@ def PathRemoveBackslashA(pszPath): _PathRemoveBackslashA(pszPath) return pszPath.value + def PathRemoveBackslashW(pszPath): _PathRemoveBackslashW = windll.shlwapi.PathRemoveBackslashW _PathRemoveBackslashW.argtypes = [LPWSTR] @@ -649,8 +718,10 @@ def PathRemoveBackslashW(pszPath): _PathRemoveBackslashW(pszPath) return pszPath.value + PathRemoveBackslash = GuessStringType(PathRemoveBackslashA, PathRemoveBackslashW) + # void PathRemoveExtension( # LPTSTR pszPath # ); @@ -662,6 +733,7 @@ def PathRemoveExtensionA(pszPath): _PathRemoveExtensionA(pszPath) return pszPath.value + def PathRemoveExtensionW(pszPath): _PathRemoveExtensionW = windll.shlwapi.PathRemoveExtensionW _PathRemoveExtensionW.argtypes = [LPWSTR] @@ -670,8 +742,10 @@ def PathRemoveExtensionW(pszPath): _PathRemoveExtensionW(pszPath) return pszPath.value + PathRemoveExtension = GuessStringType(PathRemoveExtensionA, PathRemoveExtensionW) + # void PathRemoveFileSpec( # LPTSTR pszPath # ); @@ -683,6 +757,7 @@ def PathRemoveFileSpecA(pszPath): _PathRemoveFileSpecA(pszPath) return pszPath.value + def PathRemoveFileSpecW(pszPath): _PathRemoveFileSpecW = windll.shlwapi.PathRemoveFileSpecW _PathRemoveFileSpecW.argtypes = [LPWSTR] @@ -691,8 +766,10 @@ def PathRemoveFileSpecW(pszPath): _PathRemoveFileSpecW(pszPath) return pszPath.value + PathRemoveFileSpec = GuessStringType(PathRemoveFileSpecA, PathRemoveFileSpecW) + # BOOL PathRenameExtension( # LPTSTR pszPath, # LPCTSTR pszExt @@ -700,25 +777,28 @@ def PathRemoveFileSpecW(pszPath): def PathRenameExtensionA(pszPath, pszExt): _PathRenameExtensionA = windll.shlwapi.PathRenameExtensionA _PathRenameExtensionA.argtypes = [LPSTR, LPSTR] - _PathRenameExtensionA.restype = bool + _PathRenameExtensionA.restype = bool pszPath = ctypes.create_string_buffer(pszPath, MAX_PATH) if _PathRenameExtensionA(pszPath, pszExt): return pszPath.value return None + def PathRenameExtensionW(pszPath, pszExt): _PathRenameExtensionW = windll.shlwapi.PathRenameExtensionW _PathRenameExtensionW.argtypes = [LPWSTR, LPWSTR] - _PathRenameExtensionW.restype = bool + _PathRenameExtensionW.restype = bool pszPath = ctypes.create_unicode_buffer(pszPath, MAX_PATH) if _PathRenameExtensionW(pszPath, pszExt): return pszPath.value return None + PathRenameExtension = GuessStringType(PathRenameExtensionA, PathRenameExtensionW) + # BOOL PathUnExpandEnvStrings( # LPCTSTR pszPath, # LPTSTR pszBuf, @@ -727,7 +807,7 @@ def PathRenameExtensionW(pszPath, pszExt): def PathUnExpandEnvStringsA(pszPath): _PathUnExpandEnvStringsA = windll.shlwapi.PathUnExpandEnvStringsA _PathUnExpandEnvStringsA.argtypes = [LPSTR, LPSTR] - _PathUnExpandEnvStringsA.restype = bool + _PathUnExpandEnvStringsA.restype = bool _PathUnExpandEnvStringsA.errcheck = RaiseIfZero cchBuf = MAX_PATH @@ -735,22 +815,24 @@ def PathUnExpandEnvStringsA(pszPath): _PathUnExpandEnvStringsA(pszPath, pszBuf, cchBuf) return pszBuf.value + def PathUnExpandEnvStringsW(pszPath): _PathUnExpandEnvStringsW = windll.shlwapi.PathUnExpandEnvStringsW _PathUnExpandEnvStringsW.argtypes = [LPWSTR, LPWSTR] - _PathUnExpandEnvStringsW.restype = bool + _PathUnExpandEnvStringsW.restype = bool _PathUnExpandEnvStringsW.errcheck = RaiseIfZero cchBuf = MAX_PATH - pszBuf = ctypes.create_unicode_buffer(u"", cchBuf) + pszBuf = ctypes.create_unicode_buffer("", cchBuf) _PathUnExpandEnvStringsW(pszPath, pszBuf, cchBuf) return pszBuf.value + PathUnExpandEnvStrings = GuessStringType(PathUnExpandEnvStringsA, PathUnExpandEnvStringsW) -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py index 18560e552..f6f9feff1 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/user32.py @@ -39,13 +39,14 @@ from winappdbg.win32.kernel32 import GetLastError, SetLastError from winappdbg.win32.gdi32 import POINT, PPOINT, LPPOINT, RECT, PRECT, LPRECT -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== + +# --- Helpers ------------------------------------------------------------------ -#--- Helpers ------------------------------------------------------------------ def MAKE_WPARAM(wParam): """ @@ -58,6 +59,7 @@ def MAKE_WPARAM(wParam): wParam = 0 return wParam + def MAKE_LPARAM(lParam): """ Convert arguments to the LPARAM type. @@ -66,281 +68,286 @@ def MAKE_LPARAM(lParam): """ return ctypes.cast(lParam, LPARAM) -class __WindowEnumerator (object): + +class __WindowEnumerator(object): """ Window enumerator class. Used internally by the window enumeration APIs. """ + def __init__(self): self.hwnd = list() + def __call__(self, hwnd, lParam): -## print hwnd # XXX DEBUG + ## print hwnd # XXX DEBUG self.hwnd.append(hwnd) return TRUE -#--- Types -------------------------------------------------------------------- + +# --- Types -------------------------------------------------------------------- WNDENUMPROC = WINFUNCTYPE(BOOL, HWND, PVOID) -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- -HWND_DESKTOP = 0 -HWND_TOP = 1 -HWND_BOTTOM = 1 -HWND_TOPMOST = -1 -HWND_NOTOPMOST = -2 -HWND_MESSAGE = -3 +HWND_DESKTOP = 0 +HWND_TOP = 1 +HWND_BOTTOM = 1 +HWND_TOPMOST = -1 +HWND_NOTOPMOST = -2 +HWND_MESSAGE = -3 # GetWindowLong / SetWindowLong -GWL_WNDPROC = -4 -GWL_HINSTANCE = -6 -GWL_HWNDPARENT = -8 -GWL_ID = -12 -GWL_STYLE = -16 -GWL_EXSTYLE = -20 -GWL_USERDATA = -21 +GWL_WNDPROC = -4 +GWL_HINSTANCE = -6 +GWL_HWNDPARENT = -8 +GWL_ID = -12 +GWL_STYLE = -16 +GWL_EXSTYLE = -20 +GWL_USERDATA = -21 # GetWindowLongPtr / SetWindowLongPtr -GWLP_WNDPROC = GWL_WNDPROC -GWLP_HINSTANCE = GWL_HINSTANCE -GWLP_HWNDPARENT = GWL_HWNDPARENT -GWLP_STYLE = GWL_STYLE -GWLP_EXSTYLE = GWL_EXSTYLE -GWLP_USERDATA = GWL_USERDATA -GWLP_ID = GWL_ID +GWLP_WNDPROC = GWL_WNDPROC +GWLP_HINSTANCE = GWL_HINSTANCE +GWLP_HWNDPARENT = GWL_HWNDPARENT +GWLP_STYLE = GWL_STYLE +GWLP_EXSTYLE = GWL_EXSTYLE +GWLP_USERDATA = GWL_USERDATA +GWLP_ID = GWL_ID # ShowWindow -SW_HIDE = 0 -SW_SHOWNORMAL = 1 -SW_NORMAL = 1 -SW_SHOWMINIMIZED = 2 -SW_SHOWMAXIMIZED = 3 -SW_MAXIMIZE = 3 -SW_SHOWNOACTIVATE = 4 -SW_SHOW = 5 -SW_MINIMIZE = 6 -SW_SHOWMINNOACTIVE = 7 -SW_SHOWNA = 8 -SW_RESTORE = 9 -SW_SHOWDEFAULT = 10 -SW_FORCEMINIMIZE = 11 +SW_HIDE = 0 +SW_SHOWNORMAL = 1 +SW_NORMAL = 1 +SW_SHOWMINIMIZED = 2 +SW_SHOWMAXIMIZED = 3 +SW_MAXIMIZE = 3 +SW_SHOWNOACTIVATE = 4 +SW_SHOW = 5 +SW_MINIMIZE = 6 +SW_SHOWMINNOACTIVE = 7 +SW_SHOWNA = 8 +SW_RESTORE = 9 +SW_SHOWDEFAULT = 10 +SW_FORCEMINIMIZE = 11 # SendMessageTimeout flags -SMTO_NORMAL = 0 -SMTO_BLOCK = 1 -SMTO_ABORTIFHUNG = 2 -SMTO_NOTIMEOUTIFNOTHUNG = 8 -SMTO_ERRORONEXIT = 0x20 +SMTO_NORMAL = 0 +SMTO_BLOCK = 1 +SMTO_ABORTIFHUNG = 2 +SMTO_NOTIMEOUTIFNOTHUNG = 8 +SMTO_ERRORONEXIT = 0x20 # WINDOWPLACEMENT flags -WPF_SETMINPOSITION = 1 -WPF_RESTORETOMAXIMIZED = 2 -WPF_ASYNCWINDOWPLACEMENT = 4 +WPF_SETMINPOSITION = 1 +WPF_RESTORETOMAXIMIZED = 2 +WPF_ASYNCWINDOWPLACEMENT = 4 # GetAncestor flags -GA_PARENT = 1 -GA_ROOT = 2 -GA_ROOTOWNER = 3 +GA_PARENT = 1 +GA_ROOT = 2 +GA_ROOTOWNER = 3 # GetWindow flags -GW_HWNDFIRST = 0 -GW_HWNDLAST = 1 -GW_HWNDNEXT = 2 -GW_HWNDPREV = 3 -GW_OWNER = 4 -GW_CHILD = 5 -GW_ENABLEDPOPUP = 6 - -#--- Window messages ---------------------------------------------------------- - -WM_USER = 0x400 -WM_APP = 0x800 - -WM_NULL = 0 -WM_CREATE = 1 -WM_DESTROY = 2 -WM_MOVE = 3 -WM_SIZE = 5 -WM_ACTIVATE = 6 -WA_INACTIVE = 0 -WA_ACTIVE = 1 -WA_CLICKACTIVE = 2 -WM_SETFOCUS = 7 -WM_KILLFOCUS = 8 -WM_ENABLE = 0x0A -WM_SETREDRAW = 0x0B -WM_SETTEXT = 0x0C -WM_GETTEXT = 0x0D -WM_GETTEXTLENGTH = 0x0E -WM_PAINT = 0x0F -WM_CLOSE = 0x10 -WM_QUERYENDSESSION = 0x11 -WM_QUIT = 0x12 -WM_QUERYOPEN = 0x13 -WM_ERASEBKGND = 0x14 -WM_SYSCOLORCHANGE = 0x15 -WM_ENDSESSION = 0x16 -WM_SHOWWINDOW = 0x18 -WM_WININICHANGE = 0x1A -WM_SETTINGCHANGE = WM_WININICHANGE -WM_DEVMODECHANGE = 0x1B -WM_ACTIVATEAPP = 0x1C -WM_FONTCHANGE = 0x1D -WM_TIMECHANGE = 0x1E -WM_CANCELMODE = 0x1F -WM_SETCURSOR = 0x20 -WM_MOUSEACTIVATE = 0x21 -WM_CHILDACTIVATE = 0x22 -WM_QUEUESYNC = 0x23 -WM_GETMINMAXINFO = 0x24 -WM_PAINTICON = 0x26 -WM_ICONERASEBKGND = 0x27 -WM_NEXTDLGCTL = 0x28 -WM_SPOOLERSTATUS = 0x2A -WM_DRAWITEM = 0x2B -WM_MEASUREITEM = 0x2C -WM_DELETEITEM = 0x2D -WM_VKEYTOITEM = 0x2E -WM_CHARTOITEM = 0x2F -WM_SETFONT = 0x30 -WM_GETFONT = 0x31 -WM_SETHOTKEY = 0x32 -WM_GETHOTKEY = 0x33 -WM_QUERYDRAGICON = 0x37 -WM_COMPAREITEM = 0x39 -WM_GETOBJECT = 0x3D -WM_COMPACTING = 0x41 -WM_OTHERWINDOWCREATED = 0x42 -WM_OTHERWINDOWDESTROYED = 0x43 -WM_COMMNOTIFY = 0x44 - -CN_RECEIVE = 0x1 -CN_TRANSMIT = 0x2 -CN_EVENT = 0x4 - -WM_WINDOWPOSCHANGING = 0x46 -WM_WINDOWPOSCHANGED = 0x47 -WM_POWER = 0x48 - -PWR_OK = 1 -PWR_FAIL = -1 -PWR_SUSPENDREQUEST = 1 -PWR_SUSPENDRESUME = 2 -PWR_CRITICALRESUME = 3 - -WM_COPYDATA = 0x4A -WM_CANCELJOURNAL = 0x4B -WM_NOTIFY = 0x4E -WM_INPUTLANGCHANGEREQUEST = 0x50 -WM_INPUTLANGCHANGE = 0x51 -WM_TCARD = 0x52 -WM_HELP = 0x53 -WM_USERCHANGED = 0x54 -WM_NOTIFYFORMAT = 0x55 -WM_CONTEXTMENU = 0x7B -WM_STYLECHANGING = 0x7C -WM_STYLECHANGED = 0x7D -WM_DISPLAYCHANGE = 0x7E -WM_GETICON = 0x7F -WM_SETICON = 0x80 -WM_NCCREATE = 0x81 -WM_NCDESTROY = 0x82 -WM_NCCALCSIZE = 0x83 -WM_NCHITTEST = 0x84 -WM_NCPAINT = 0x85 -WM_NCACTIVATE = 0x86 -WM_GETDLGCODE = 0x87 -WM_SYNCPAINT = 0x88 -WM_NCMOUSEMOVE = 0x0A0 -WM_NCLBUTTONDOWN = 0x0A1 -WM_NCLBUTTONUP = 0x0A2 -WM_NCLBUTTONDBLCLK = 0x0A3 -WM_NCRBUTTONDOWN = 0x0A4 -WM_NCRBUTTONUP = 0x0A5 -WM_NCRBUTTONDBLCLK = 0x0A6 -WM_NCMBUTTONDOWN = 0x0A7 -WM_NCMBUTTONUP = 0x0A8 -WM_NCMBUTTONDBLCLK = 0x0A9 -WM_KEYFIRST = 0x100 -WM_KEYDOWN = 0x100 -WM_KEYUP = 0x101 -WM_CHAR = 0x102 -WM_DEADCHAR = 0x103 -WM_SYSKEYDOWN = 0x104 -WM_SYSKEYUP = 0x105 -WM_SYSCHAR = 0x106 -WM_SYSDEADCHAR = 0x107 -WM_KEYLAST = 0x108 -WM_INITDIALOG = 0x110 -WM_COMMAND = 0x111 -WM_SYSCOMMAND = 0x112 -WM_TIMER = 0x113 -WM_HSCROLL = 0x114 -WM_VSCROLL = 0x115 -WM_INITMENU = 0x116 -WM_INITMENUPOPUP = 0x117 -WM_MENUSELECT = 0x11F -WM_MENUCHAR = 0x120 -WM_ENTERIDLE = 0x121 -WM_CTLCOLORMSGBOX = 0x132 -WM_CTLCOLOREDIT = 0x133 -WM_CTLCOLORLISTBOX = 0x134 -WM_CTLCOLORBTN = 0x135 -WM_CTLCOLORDLG = 0x136 -WM_CTLCOLORSCROLLBAR = 0x137 -WM_CTLCOLORSTATIC = 0x138 -WM_MOUSEFIRST = 0x200 -WM_MOUSEMOVE = 0x200 -WM_LBUTTONDOWN = 0x201 -WM_LBUTTONUP = 0x202 -WM_LBUTTONDBLCLK = 0x203 -WM_RBUTTONDOWN = 0x204 -WM_RBUTTONUP = 0x205 -WM_RBUTTONDBLCLK = 0x206 -WM_MBUTTONDOWN = 0x207 -WM_MBUTTONUP = 0x208 -WM_MBUTTONDBLCLK = 0x209 -WM_MOUSELAST = 0x209 -WM_PARENTNOTIFY = 0x210 -WM_ENTERMENULOOP = 0x211 -WM_EXITMENULOOP = 0x212 -WM_MDICREATE = 0x220 -WM_MDIDESTROY = 0x221 -WM_MDIACTIVATE = 0x222 -WM_MDIRESTORE = 0x223 -WM_MDINEXT = 0x224 -WM_MDIMAXIMIZE = 0x225 -WM_MDITILE = 0x226 -WM_MDICASCADE = 0x227 -WM_MDIICONARRANGE = 0x228 -WM_MDIGETACTIVE = 0x229 -WM_MDISETMENU = 0x230 -WM_DROPFILES = 0x233 -WM_MDIREFRESHMENU = 0x234 -WM_CUT = 0x300 -WM_COPY = 0x301 -WM_PASTE = 0x302 -WM_CLEAR = 0x303 -WM_UNDO = 0x304 -WM_RENDERFORMAT = 0x305 -WM_RENDERALLFORMATS = 0x306 -WM_DESTROYCLIPBOARD = 0x307 -WM_DRAWCLIPBOARD = 0x308 -WM_PAINTCLIPBOARD = 0x309 -WM_VSCROLLCLIPBOARD = 0x30A -WM_SIZECLIPBOARD = 0x30B -WM_ASKCBFORMATNAME = 0x30C -WM_CHANGECBCHAIN = 0x30D -WM_HSCROLLCLIPBOARD = 0x30E -WM_QUERYNEWPALETTE = 0x30F -WM_PALETTEISCHANGING = 0x310 -WM_PALETTECHANGED = 0x311 -WM_HOTKEY = 0x312 -WM_PRINT = 0x317 -WM_PRINTCLIENT = 0x318 -WM_PENWINFIRST = 0x380 -WM_PENWINLAST = 0x38F - -#--- Structures --------------------------------------------------------------- +GW_HWNDFIRST = 0 +GW_HWNDLAST = 1 +GW_HWNDNEXT = 2 +GW_HWNDPREV = 3 +GW_OWNER = 4 +GW_CHILD = 5 +GW_ENABLEDPOPUP = 6 + +# --- Window messages ---------------------------------------------------------- + +WM_USER = 0x400 +WM_APP = 0x800 + +WM_NULL = 0 +WM_CREATE = 1 +WM_DESTROY = 2 +WM_MOVE = 3 +WM_SIZE = 5 +WM_ACTIVATE = 6 +WA_INACTIVE = 0 +WA_ACTIVE = 1 +WA_CLICKACTIVE = 2 +WM_SETFOCUS = 7 +WM_KILLFOCUS = 8 +WM_ENABLE = 0x0A +WM_SETREDRAW = 0x0B +WM_SETTEXT = 0x0C +WM_GETTEXT = 0x0D +WM_GETTEXTLENGTH = 0x0E +WM_PAINT = 0x0F +WM_CLOSE = 0x10 +WM_QUERYENDSESSION = 0x11 +WM_QUIT = 0x12 +WM_QUERYOPEN = 0x13 +WM_ERASEBKGND = 0x14 +WM_SYSCOLORCHANGE = 0x15 +WM_ENDSESSION = 0x16 +WM_SHOWWINDOW = 0x18 +WM_WININICHANGE = 0x1A +WM_SETTINGCHANGE = WM_WININICHANGE +WM_DEVMODECHANGE = 0x1B +WM_ACTIVATEAPP = 0x1C +WM_FONTCHANGE = 0x1D +WM_TIMECHANGE = 0x1E +WM_CANCELMODE = 0x1F +WM_SETCURSOR = 0x20 +WM_MOUSEACTIVATE = 0x21 +WM_CHILDACTIVATE = 0x22 +WM_QUEUESYNC = 0x23 +WM_GETMINMAXINFO = 0x24 +WM_PAINTICON = 0x26 +WM_ICONERASEBKGND = 0x27 +WM_NEXTDLGCTL = 0x28 +WM_SPOOLERSTATUS = 0x2A +WM_DRAWITEM = 0x2B +WM_MEASUREITEM = 0x2C +WM_DELETEITEM = 0x2D +WM_VKEYTOITEM = 0x2E +WM_CHARTOITEM = 0x2F +WM_SETFONT = 0x30 +WM_GETFONT = 0x31 +WM_SETHOTKEY = 0x32 +WM_GETHOTKEY = 0x33 +WM_QUERYDRAGICON = 0x37 +WM_COMPAREITEM = 0x39 +WM_GETOBJECT = 0x3D +WM_COMPACTING = 0x41 +WM_OTHERWINDOWCREATED = 0x42 +WM_OTHERWINDOWDESTROYED = 0x43 +WM_COMMNOTIFY = 0x44 + +CN_RECEIVE = 0x1 +CN_TRANSMIT = 0x2 +CN_EVENT = 0x4 + +WM_WINDOWPOSCHANGING = 0x46 +WM_WINDOWPOSCHANGED = 0x47 +WM_POWER = 0x48 + +PWR_OK = 1 +PWR_FAIL = -1 +PWR_SUSPENDREQUEST = 1 +PWR_SUSPENDRESUME = 2 +PWR_CRITICALRESUME = 3 + +WM_COPYDATA = 0x4A +WM_CANCELJOURNAL = 0x4B +WM_NOTIFY = 0x4E +WM_INPUTLANGCHANGEREQUEST = 0x50 +WM_INPUTLANGCHANGE = 0x51 +WM_TCARD = 0x52 +WM_HELP = 0x53 +WM_USERCHANGED = 0x54 +WM_NOTIFYFORMAT = 0x55 +WM_CONTEXTMENU = 0x7B +WM_STYLECHANGING = 0x7C +WM_STYLECHANGED = 0x7D +WM_DISPLAYCHANGE = 0x7E +WM_GETICON = 0x7F +WM_SETICON = 0x80 +WM_NCCREATE = 0x81 +WM_NCDESTROY = 0x82 +WM_NCCALCSIZE = 0x83 +WM_NCHITTEST = 0x84 +WM_NCPAINT = 0x85 +WM_NCACTIVATE = 0x86 +WM_GETDLGCODE = 0x87 +WM_SYNCPAINT = 0x88 +WM_NCMOUSEMOVE = 0x0A0 +WM_NCLBUTTONDOWN = 0x0A1 +WM_NCLBUTTONUP = 0x0A2 +WM_NCLBUTTONDBLCLK = 0x0A3 +WM_NCRBUTTONDOWN = 0x0A4 +WM_NCRBUTTONUP = 0x0A5 +WM_NCRBUTTONDBLCLK = 0x0A6 +WM_NCMBUTTONDOWN = 0x0A7 +WM_NCMBUTTONUP = 0x0A8 +WM_NCMBUTTONDBLCLK = 0x0A9 +WM_KEYFIRST = 0x100 +WM_KEYDOWN = 0x100 +WM_KEYUP = 0x101 +WM_CHAR = 0x102 +WM_DEADCHAR = 0x103 +WM_SYSKEYDOWN = 0x104 +WM_SYSKEYUP = 0x105 +WM_SYSCHAR = 0x106 +WM_SYSDEADCHAR = 0x107 +WM_KEYLAST = 0x108 +WM_INITDIALOG = 0x110 +WM_COMMAND = 0x111 +WM_SYSCOMMAND = 0x112 +WM_TIMER = 0x113 +WM_HSCROLL = 0x114 +WM_VSCROLL = 0x115 +WM_INITMENU = 0x116 +WM_INITMENUPOPUP = 0x117 +WM_MENUSELECT = 0x11F +WM_MENUCHAR = 0x120 +WM_ENTERIDLE = 0x121 +WM_CTLCOLORMSGBOX = 0x132 +WM_CTLCOLOREDIT = 0x133 +WM_CTLCOLORLISTBOX = 0x134 +WM_CTLCOLORBTN = 0x135 +WM_CTLCOLORDLG = 0x136 +WM_CTLCOLORSCROLLBAR = 0x137 +WM_CTLCOLORSTATIC = 0x138 +WM_MOUSEFIRST = 0x200 +WM_MOUSEMOVE = 0x200 +WM_LBUTTONDOWN = 0x201 +WM_LBUTTONUP = 0x202 +WM_LBUTTONDBLCLK = 0x203 +WM_RBUTTONDOWN = 0x204 +WM_RBUTTONUP = 0x205 +WM_RBUTTONDBLCLK = 0x206 +WM_MBUTTONDOWN = 0x207 +WM_MBUTTONUP = 0x208 +WM_MBUTTONDBLCLK = 0x209 +WM_MOUSELAST = 0x209 +WM_PARENTNOTIFY = 0x210 +WM_ENTERMENULOOP = 0x211 +WM_EXITMENULOOP = 0x212 +WM_MDICREATE = 0x220 +WM_MDIDESTROY = 0x221 +WM_MDIACTIVATE = 0x222 +WM_MDIRESTORE = 0x223 +WM_MDINEXT = 0x224 +WM_MDIMAXIMIZE = 0x225 +WM_MDITILE = 0x226 +WM_MDICASCADE = 0x227 +WM_MDIICONARRANGE = 0x228 +WM_MDIGETACTIVE = 0x229 +WM_MDISETMENU = 0x230 +WM_DROPFILES = 0x233 +WM_MDIREFRESHMENU = 0x234 +WM_CUT = 0x300 +WM_COPY = 0x301 +WM_PASTE = 0x302 +WM_CLEAR = 0x303 +WM_UNDO = 0x304 +WM_RENDERFORMAT = 0x305 +WM_RENDERALLFORMATS = 0x306 +WM_DESTROYCLIPBOARD = 0x307 +WM_DRAWCLIPBOARD = 0x308 +WM_PAINTCLIPBOARD = 0x309 +WM_VSCROLLCLIPBOARD = 0x30A +WM_SIZECLIPBOARD = 0x30B +WM_ASKCBFORMATNAME = 0x30C +WM_CHANGECBCHAIN = 0x30D +WM_HSCROLLCLIPBOARD = 0x30E +WM_QUERYNEWPALETTE = 0x30F +WM_PALETTEISCHANGING = 0x310 +WM_PALETTECHANGED = 0x311 +WM_HOTKEY = 0x312 +WM_PRINT = 0x317 +WM_PRINTCLIENT = 0x318 +WM_PENWINFIRST = 0x380 +WM_PENWINLAST = 0x38F + +# --- Structures --------------------------------------------------------------- + # typedef struct _WINDOWPLACEMENT { # UINT length; @@ -352,16 +359,19 @@ def __call__(self, hwnd, lParam): # } WINDOWPLACEMENT; class WINDOWPLACEMENT(Structure): _fields_ = [ - ('length', UINT), - ('flags', UINT), - ('showCmd', UINT), - ('ptMinPosition', POINT), - ('ptMaxPosition', POINT), - ('rcNormalPosition', RECT), + ("length", UINT), + ("flags", UINT), + ("showCmd", UINT), + ("ptMinPosition", POINT), + ("ptMaxPosition", POINT), + ("rcNormalPosition", RECT), ] -PWINDOWPLACEMENT = POINTER(WINDOWPLACEMENT) + + +PWINDOWPLACEMENT = POINTER(WINDOWPLACEMENT) LPWINDOWPLACEMENT = PWINDOWPLACEMENT + # typedef struct tagGUITHREADINFO { # DWORD cbSize; # DWORD flags; @@ -375,20 +385,22 @@ class WINDOWPLACEMENT(Structure): # } GUITHREADINFO, *PGUITHREADINFO; class GUITHREADINFO(Structure): _fields_ = [ - ('cbSize', DWORD), - ('flags', DWORD), - ('hwndActive', HWND), - ('hwndFocus', HWND), - ('hwndCapture', HWND), - ('hwndMenuOwner', HWND), - ('hwndMoveSize', HWND), - ('hwndCaret', HWND), - ('rcCaret', RECT), + ("cbSize", DWORD), + ("flags", DWORD), + ("hwndActive", HWND), + ("hwndFocus", HWND), + ("hwndCapture", HWND), + ("hwndMenuOwner", HWND), + ("hwndMoveSize", HWND), + ("hwndCaret", HWND), + ("rcCaret", RECT), ] -PGUITHREADINFO = POINTER(GUITHREADINFO) + + +PGUITHREADINFO = POINTER(GUITHREADINFO) LPGUITHREADINFO = PGUITHREADINFO -#--- High level classes ------------------------------------------------------- +# --- High level classes ------------------------------------------------------- # Point() and Rect() are here instead of gdi32.py because they were mainly # created to handle window coordinates rather than drawing on the screen. @@ -396,6 +408,7 @@ class GUITHREADINFO(Structure): # XXX not sure if these classes should be psyco-optimized, # it may not work if the user wants to serialize them for some reason + class Point(object): """ Python wrapper over the L{POINT} class. @@ -406,7 +419,7 @@ class Point(object): @ivar y: Vertical coordinate """ - def __init__(self, x = 0, y = 0): + def __init__(self, x=0, y=0): """ @see: L{POINT} @type x: int @@ -424,10 +437,10 @@ def __len__(self): return 2 def __getitem__(self, index): - return (self.x, self.y) [index] + return (self.x, self.y)[index] def __setitem__(self, index, value): - if index == 0: + if index == 0: self.x = value elif index == 1: self.y = value @@ -470,7 +483,7 @@ def client_to_screen(self, hWnd): """ return ClientToScreen(hWnd, self) - def translate(self, hWndFrom = HWND_DESKTOP, hWndTo = HWND_DESKTOP): + def translate(self, hWndFrom=HWND_DESKTOP, hWndTo=HWND_DESKTOP): """ Translate coordinates from one window to another. @@ -492,6 +505,7 @@ def translate(self, hWndFrom = HWND_DESKTOP, hWndTo = HWND_DESKTOP): """ return MapWindowPoints(hWndFrom, hWndTo, [self]) + class Rect(object): """ Python wrapper over the L{RECT} class. @@ -511,7 +525,7 @@ class Rect(object): @ivar height: Height in pixels. Same as C{bottom - top}. """ - def __init__(self, left = 0, top = 0, right = 0, bottom = 0): + def __init__(self, left=0, top=0, right=0, bottom=0): """ @see: L{RECT} @type left: int @@ -523,9 +537,9 @@ def __init__(self, left = 0, top = 0, right = 0, bottom = 0): @type bottom: int @param bottom: Vertical coordinate for the bottom right corner. """ - self.left = left - self.top = top - self.right = right + self.left = left + self.top = top + self.right = right self.bottom = bottom def __iter__(self): @@ -535,15 +549,15 @@ def __len__(self): return 2 def __getitem__(self, index): - return (self.left, self.top, self.right, self.bottom) [index] + return (self.left, self.top, self.right, self.bottom)[index] def __setitem__(self, index, value): - if index == 0: - self.left = value + if index == 0: + self.left = value elif index == 1: - self.top = value + self.top = value elif index == 2: - self.right = value + self.right = value elif index == 3: self.bottom = value else: @@ -569,7 +583,7 @@ def __set_width(self, value): def __set_height(self, value): self.bottom = value - self.top - width = property(__get_width, __set_width) + width = property(__get_width, __set_width) height = property(__get_height, __set_height) def screen_to_client(self, hWnd): @@ -584,9 +598,9 @@ def screen_to_client(self, hWnd): @rtype: L{Rect} @return: New object containing the translated coordinates. """ - topleft = ScreenToClient(hWnd, (self.left, self.top)) + topleft = ScreenToClient(hWnd, (self.left, self.top)) bottomright = ScreenToClient(hWnd, (self.bottom, self.right)) - return Rect( topleft.x, topleft.y, bottomright.x, bottomright.y ) + return Rect(topleft.x, topleft.y, bottomright.x, bottomright.y) def client_to_screen(self, hWnd): """ @@ -600,11 +614,11 @@ def client_to_screen(self, hWnd): @rtype: L{Rect} @return: New object containing the translated coordinates. """ - topleft = ClientToScreen(hWnd, (self.left, self.top)) + topleft = ClientToScreen(hWnd, (self.left, self.top)) bottomright = ClientToScreen(hWnd, (self.bottom, self.right)) - return Rect( topleft.x, topleft.y, bottomright.x, bottomright.y ) + return Rect(topleft.x, topleft.y, bottomright.x, bottomright.y) - def translate(self, hWndFrom = HWND_DESKTOP, hWndTo = HWND_DESKTOP): + def translate(self, hWndFrom=HWND_DESKTOP, hWndTo=HWND_DESKTOP): """ Translate coordinates from one window to another. @@ -621,39 +635,40 @@ def translate(self, hWndFrom = HWND_DESKTOP, hWndTo = HWND_DESKTOP): @rtype: L{Rect} @return: New object containing the translated coordinates. """ - points = [ (self.left, self.top), (self.right, self.bottom) ] + points = [(self.left, self.top), (self.right, self.bottom)] return MapWindowPoints(hWndFrom, hWndTo, points) + class WindowPlacement(object): """ Python wrapper over the L{WINDOWPLACEMENT} class. """ - def __init__(self, wp = None): + def __init__(self, wp=None): """ @type wp: L{WindowPlacement} or L{WINDOWPLACEMENT} @param wp: Another window placement object. """ # Initialize all properties with empty values. - self.flags = 0 - self.showCmd = 0 - self.ptMinPosition = Point() - self.ptMaxPosition = Point() + self.flags = 0 + self.showCmd = 0 + self.ptMinPosition = Point() + self.ptMaxPosition = Point() self.rcNormalPosition = Rect() # If a window placement was given copy it's properties. if wp: - self.flags = wp.flags - self.showCmd = wp.showCmd - self.ptMinPosition = Point( wp.ptMinPosition.x, wp.ptMinPosition.y ) - self.ptMaxPosition = Point( wp.ptMaxPosition.x, wp.ptMaxPosition.y ) + self.flags = wp.flags + self.showCmd = wp.showCmd + self.ptMinPosition = Point(wp.ptMinPosition.x, wp.ptMinPosition.y) + self.ptMaxPosition = Point(wp.ptMaxPosition.x, wp.ptMaxPosition.y) self.rcNormalPosition = Rect( - wp.rcNormalPosition.left, - wp.rcNormalPosition.top, - wp.rcNormalPosition.right, - wp.rcNormalPosition.bottom, - ) + wp.rcNormalPosition.left, + wp.rcNormalPosition.top, + wp.rcNormalPosition.right, + wp.rcNormalPosition.bottom, + ) @property def _as_parameter_(self): @@ -661,40 +676,43 @@ def _as_parameter_(self): Compatibility with ctypes. Allows passing transparently a Point object to an API call. """ - wp = WINDOWPLACEMENT() - wp.length = sizeof(wp) - wp.flags = self.flags - wp.showCmd = self.showCmd - wp.ptMinPosition.x = self.ptMinPosition.x - wp.ptMinPosition.y = self.ptMinPosition.y - wp.ptMaxPosition.x = self.ptMaxPosition.x - wp.ptMaxPosition.y = self.ptMaxPosition.y - wp.rcNormalPosition.left = self.rcNormalPosition.left - wp.rcNormalPosition.top = self.rcNormalPosition.top - wp.rcNormalPosition.right = self.rcNormalPosition.right - wp.rcNormalPosition.bottom = self.rcNormalPosition.bottom + wp = WINDOWPLACEMENT() + wp.length = sizeof(wp) + wp.flags = self.flags + wp.showCmd = self.showCmd + wp.ptMinPosition.x = self.ptMinPosition.x + wp.ptMinPosition.y = self.ptMinPosition.y + wp.ptMaxPosition.x = self.ptMaxPosition.x + wp.ptMaxPosition.y = self.ptMaxPosition.y + wp.rcNormalPosition.left = self.rcNormalPosition.left + wp.rcNormalPosition.top = self.rcNormalPosition.top + wp.rcNormalPosition.right = self.rcNormalPosition.right + wp.rcNormalPosition.bottom = self.rcNormalPosition.bottom return wp -#--- user32.dll --------------------------------------------------------------- + +# --- user32.dll --------------------------------------------------------------- + # void WINAPI SetLastErrorEx( # __in DWORD dwErrCode, # __in DWORD dwType # ); -def SetLastErrorEx(dwErrCode, dwType = 0): +def SetLastErrorEx(dwErrCode, dwType=0): _SetLastErrorEx = windll.user32.SetLastErrorEx _SetLastErrorEx.argtypes = [DWORD, DWORD] - _SetLastErrorEx.restype = None + _SetLastErrorEx.restype = None _SetLastErrorEx(dwErrCode, dwType) + # HWND FindWindow( # LPCTSTR lpClassName, # LPCTSTR lpWindowName # ); -def FindWindowA(lpClassName = None, lpWindowName = None): +def FindWindowA(lpClassName=None, lpWindowName=None): _FindWindowA = windll.user32.FindWindowA _FindWindowA.argtypes = [LPSTR, LPSTR] - _FindWindowA.restype = HWND + _FindWindowA.restype = HWND hWnd = _FindWindowA(lpClassName, lpWindowName) if not hWnd: @@ -703,10 +721,11 @@ def FindWindowA(lpClassName = None, lpWindowName = None): raise ctypes.WinError(errcode) return hWnd -def FindWindowW(lpClassName = None, lpWindowName = None): + +def FindWindowW(lpClassName=None, lpWindowName=None): _FindWindowW = windll.user32.FindWindowW _FindWindowW.argtypes = [LPWSTR, LPWSTR] - _FindWindowW.restype = HWND + _FindWindowW.restype = HWND hWnd = _FindWindowW(lpClassName, lpWindowName) if not hWnd: @@ -715,18 +734,20 @@ def FindWindowW(lpClassName = None, lpWindowName = None): raise ctypes.WinError(errcode) return hWnd + FindWindow = GuessStringType(FindWindowA, FindWindowW) + # HWND WINAPI FindWindowEx( # __in_opt HWND hwndParent, # __in_opt HWND hwndChildAfter, # __in_opt LPCTSTR lpszClass, # __in_opt LPCTSTR lpszWindow # ); -def FindWindowExA(hwndParent = None, hwndChildAfter = None, lpClassName = None, lpWindowName = None): +def FindWindowExA(hwndParent=None, hwndChildAfter=None, lpClassName=None, lpWindowName=None): _FindWindowExA = windll.user32.FindWindowExA _FindWindowExA.argtypes = [HWND, HWND, LPSTR, LPSTR] - _FindWindowExA.restype = HWND + _FindWindowExA.restype = HWND hWnd = _FindWindowExA(hwndParent, hwndChildAfter, lpClassName, lpWindowName) if not hWnd: @@ -735,10 +756,11 @@ def FindWindowExA(hwndParent = None, hwndChildAfter = None, lpClassName = None, raise ctypes.WinError(errcode) return hWnd -def FindWindowExW(hwndParent = None, hwndChildAfter = None, lpClassName = None, lpWindowName = None): + +def FindWindowExW(hwndParent=None, hwndChildAfter=None, lpClassName=None, lpWindowName=None): _FindWindowExW = windll.user32.FindWindowExW _FindWindowExW.argtypes = [HWND, HWND, LPWSTR, LPWSTR] - _FindWindowExW.restype = HWND + _FindWindowExW.restype = HWND hWnd = _FindWindowExW(hwndParent, hwndChildAfter, lpClassName, lpWindowName) if not hWnd: @@ -747,8 +769,10 @@ def FindWindowExW(hwndParent = None, hwndChildAfter = None, lpClassName = None, raise ctypes.WinError(errcode) return hWnd + FindWindowEx = GuessStringType(FindWindowExA, FindWindowExW) + # int GetClassName( # HWND hWnd, # LPTSTR lpClassName, @@ -771,6 +795,7 @@ def GetClassNameA(hWnd): nMaxCount += 0x1000 return lpClassName.value + def GetClassNameW(hWnd): _GetClassNameW = windll.user32.GetClassNameW _GetClassNameW.argtypes = [HWND, LPWSTR, ctypes.c_int] @@ -779,7 +804,7 @@ def GetClassNameW(hWnd): nMaxCount = 0x1000 dwCharSize = sizeof(WCHAR) while 1: - lpClassName = ctypes.create_unicode_buffer(u"", nMaxCount) + lpClassName = ctypes.create_unicode_buffer("", nMaxCount) nCount = _GetClassNameW(hWnd, lpClassName, nMaxCount) if nCount == 0: raise ctypes.WinError() @@ -788,8 +813,10 @@ def GetClassNameW(hWnd): nMaxCount += 0x1000 return lpClassName.value + GetClassName = GuessStringType(GetClassNameA, GetClassNameW) + # int WINAPI GetWindowText( # __in HWND hWnd, # __out LPTSTR lpString, @@ -812,6 +839,7 @@ def GetWindowTextA(hWnd): nMaxCount += 0x1000 return lpString.value + def GetWindowTextW(hWnd): _GetWindowTextW = windll.user32.GetWindowTextW _GetWindowTextW.argtypes = [HWND, LPWSTR, ctypes.c_int] @@ -829,36 +857,41 @@ def GetWindowTextW(hWnd): nMaxCount += 0x1000 return lpString.value + GetWindowText = GuessStringType(GetWindowTextA, GetWindowTextW) + # BOOL WINAPI SetWindowText( # __in HWND hWnd, # __in_opt LPCTSTR lpString # ); -def SetWindowTextA(hWnd, lpString = None): +def SetWindowTextA(hWnd, lpString=None): _SetWindowTextA = windll.user32.SetWindowTextA _SetWindowTextA.argtypes = [HWND, LPSTR] - _SetWindowTextA.restype = bool + _SetWindowTextA.restype = bool _SetWindowTextA.errcheck = RaiseIfZero _SetWindowTextA(hWnd, lpString) -def SetWindowTextW(hWnd, lpString = None): + +def SetWindowTextW(hWnd, lpString=None): _SetWindowTextW = windll.user32.SetWindowTextW _SetWindowTextW.argtypes = [HWND, LPWSTR] - _SetWindowTextW.restype = bool + _SetWindowTextW.restype = bool _SetWindowTextW.errcheck = RaiseIfZero _SetWindowTextW(hWnd, lpString) + SetWindowText = GuessStringType(SetWindowTextA, SetWindowTextW) + # LONG GetWindowLong( # HWND hWnd, # int nIndex # ); -def GetWindowLongA(hWnd, nIndex = 0): +def GetWindowLongA(hWnd, nIndex=0): _GetWindowLongA = windll.user32.GetWindowLongA _GetWindowLongA.argtypes = [HWND, ctypes.c_int] - _GetWindowLongA.restype = DWORD + _GetWindowLongA.restype = DWORD SetLastError(ERROR_SUCCESS) retval = _GetWindowLongA(hWnd, nIndex) @@ -868,10 +901,11 @@ def GetWindowLongA(hWnd, nIndex = 0): raise ctypes.WinError(errcode) return retval -def GetWindowLongW(hWnd, nIndex = 0): + +def GetWindowLongW(hWnd, nIndex=0): _GetWindowLongW = windll.user32.GetWindowLongW _GetWindowLongW.argtypes = [HWND, ctypes.c_int] - _GetWindowLongW.restype = DWORD + _GetWindowLongW.restype = DWORD SetLastError(ERROR_SUCCESS) retval = _GetWindowLongW(hWnd, nIndex) @@ -881,6 +915,7 @@ def GetWindowLongW(hWnd, nIndex = 0): raise ctypes.WinError(errcode) return retval + GetWindowLong = DefaultStringType(GetWindowLongA, GetWindowLongW) # LONG_PTR WINAPI GetWindowLongPtr( @@ -889,17 +924,16 @@ def GetWindowLongW(hWnd, nIndex = 0): # ); if bits == 32: - GetWindowLongPtrA = GetWindowLongA GetWindowLongPtrW = GetWindowLongW - GetWindowLongPtr = GetWindowLong + GetWindowLongPtr = GetWindowLong else: - def GetWindowLongPtrA(hWnd, nIndex = 0): + def GetWindowLongPtrA(hWnd, nIndex=0): _GetWindowLongPtrA = windll.user32.GetWindowLongPtrA _GetWindowLongPtrA.argtypes = [HWND, ctypes.c_int] - _GetWindowLongPtrA.restype = SIZE_T + _GetWindowLongPtrA.restype = SIZE_T SetLastError(ERROR_SUCCESS) retval = _GetWindowLongPtrA(hWnd, nIndex) @@ -909,10 +943,10 @@ def GetWindowLongPtrA(hWnd, nIndex = 0): raise ctypes.WinError(errcode) return retval - def GetWindowLongPtrW(hWnd, nIndex = 0): + def GetWindowLongPtrW(hWnd, nIndex=0): _GetWindowLongPtrW = windll.user32.GetWindowLongPtrW _GetWindowLongPtrW.argtypes = [HWND, ctypes.c_int] - _GetWindowLongPtrW.restype = DWORD + _GetWindowLongPtrW.restype = DWORD SetLastError(ERROR_SUCCESS) retval = _GetWindowLongPtrW(hWnd, nIndex) @@ -930,10 +964,11 @@ def GetWindowLongPtrW(hWnd, nIndex = 0): # _In_ LONG dwNewLong # ); + def SetWindowLongA(hWnd, nIndex, dwNewLong): _SetWindowLongA = windll.user32.SetWindowLongA _SetWindowLongA.argtypes = [HWND, ctypes.c_int, DWORD] - _SetWindowLongA.restype = DWORD + _SetWindowLongA.restype = DWORD SetLastError(ERROR_SUCCESS) retval = _SetWindowLongA(hWnd, nIndex, dwNewLong) @@ -943,10 +978,11 @@ def SetWindowLongA(hWnd, nIndex, dwNewLong): raise ctypes.WinError(errcode) return retval + def SetWindowLongW(hWnd, nIndex, dwNewLong): _SetWindowLongW = windll.user32.SetWindowLongW _SetWindowLongW.argtypes = [HWND, ctypes.c_int, DWORD] - _SetWindowLongW.restype = DWORD + _SetWindowLongW.restype = DWORD SetLastError(ERROR_SUCCESS) retval = _SetWindowLongW(hWnd, nIndex, dwNewLong) @@ -956,6 +992,7 @@ def SetWindowLongW(hWnd, nIndex, dwNewLong): raise ctypes.WinError(errcode) return retval + SetWindowLong = DefaultStringType(SetWindowLongA, SetWindowLongW) # LONG_PTR WINAPI SetWindowLongPtr( @@ -965,17 +1002,16 @@ def SetWindowLongW(hWnd, nIndex, dwNewLong): # ); if bits == 32: - SetWindowLongPtrA = SetWindowLongA SetWindowLongPtrW = SetWindowLongW - SetWindowLongPtr = SetWindowLong + SetWindowLongPtr = SetWindowLong else: def SetWindowLongPtrA(hWnd, nIndex, dwNewLong): _SetWindowLongPtrA = windll.user32.SetWindowLongPtrA _SetWindowLongPtrA.argtypes = [HWND, ctypes.c_int, SIZE_T] - _SetWindowLongPtrA.restype = SIZE_T + _SetWindowLongPtrA.restype = SIZE_T SetLastError(ERROR_SUCCESS) retval = _SetWindowLongPtrA(hWnd, nIndex, dwNewLong) @@ -988,7 +1024,7 @@ def SetWindowLongPtrA(hWnd, nIndex, dwNewLong): def SetWindowLongPtrW(hWnd, nIndex, dwNewLong): _SetWindowLongPtrW = windll.user32.SetWindowLongPtrW _SetWindowLongPtrW.argtypes = [HWND, ctypes.c_int, SIZE_T] - _SetWindowLongPtrW.restype = SIZE_T + _SetWindowLongPtrW.restype = SIZE_T SetLastError(ERROR_SUCCESS) retval = _SetWindowLongPtrW(hWnd, nIndex, dwNewLong) @@ -1000,14 +1036,16 @@ def SetWindowLongPtrW(hWnd, nIndex, dwNewLong): SetWindowLongPtr = DefaultStringType(SetWindowLongPtrA, SetWindowLongPtrW) + # HWND GetShellWindow(VOID); def GetShellWindow(): _GetShellWindow = windll.user32.GetShellWindow _GetShellWindow.argtypes = [] - _GetShellWindow.restype = HWND + _GetShellWindow.restype = HWND _GetShellWindow.errcheck = RaiseIfZero return _GetShellWindow() + # DWORD GetWindowThreadProcessId( # HWND hWnd, # LPDWORD lpdwProcessId @@ -1015,13 +1053,14 @@ def GetShellWindow(): def GetWindowThreadProcessId(hWnd): _GetWindowThreadProcessId = windll.user32.GetWindowThreadProcessId _GetWindowThreadProcessId.argtypes = [HWND, LPDWORD] - _GetWindowThreadProcessId.restype = DWORD + _GetWindowThreadProcessId.restype = DWORD _GetWindowThreadProcessId.errcheck = RaiseIfZero dwProcessId = DWORD(0) dwThreadId = _GetWindowThreadProcessId(hWnd, byref(dwProcessId)) return (dwThreadId, dwProcessId.value) + # HWND WINAPI GetWindow( # __in HWND hwnd, # __in UINT uCmd @@ -1029,7 +1068,7 @@ def GetWindowThreadProcessId(hWnd): def GetWindow(hWnd, uCmd): _GetWindow = windll.user32.GetWindow _GetWindow.argtypes = [HWND, UINT] - _GetWindow.restype = HWND + _GetWindow.restype = HWND SetLastError(ERROR_SUCCESS) hWndTarget = _GetWindow(hWnd, uCmd) @@ -1039,13 +1078,14 @@ def GetWindow(hWnd, uCmd): raise ctypes.WinError(winerr) return hWndTarget + # HWND GetParent( # HWND hWnd # ); def GetParent(hWnd): _GetParent = windll.user32.GetParent _GetParent.argtypes = [HWND] - _GetParent.restype = HWND + _GetParent.restype = HWND SetLastError(ERROR_SUCCESS) hWndParent = _GetParent(hWnd) @@ -1055,14 +1095,15 @@ def GetParent(hWnd): raise ctypes.WinError(winerr) return hWndParent + # HWND WINAPI GetAncestor( # __in HWND hwnd, # __in UINT gaFlags # ); -def GetAncestor(hWnd, gaFlags = GA_PARENT): +def GetAncestor(hWnd, gaFlags=GA_PARENT): _GetAncestor = windll.user32.GetAncestor _GetAncestor.argtypes = [HWND, UINT] - _GetAncestor.restype = HWND + _GetAncestor.restype = HWND SetLastError(ERROR_SUCCESS) hWndParent = _GetAncestor(hWnd, gaFlags) @@ -1072,118 +1113,131 @@ def GetAncestor(hWnd, gaFlags = GA_PARENT): raise ctypes.WinError(winerr) return hWndParent + # BOOL EnableWindow( # HWND hWnd, # BOOL bEnable # ); -def EnableWindow(hWnd, bEnable = True): +def EnableWindow(hWnd, bEnable=True): _EnableWindow = windll.user32.EnableWindow _EnableWindow.argtypes = [HWND, BOOL] - _EnableWindow.restype = bool + _EnableWindow.restype = bool return _EnableWindow(hWnd, bool(bEnable)) + # BOOL ShowWindow( # HWND hWnd, # int nCmdShow # ); -def ShowWindow(hWnd, nCmdShow = SW_SHOW): +def ShowWindow(hWnd, nCmdShow=SW_SHOW): _ShowWindow = windll.user32.ShowWindow _ShowWindow.argtypes = [HWND, ctypes.c_int] - _ShowWindow.restype = bool + _ShowWindow.restype = bool return _ShowWindow(hWnd, nCmdShow) + # BOOL ShowWindowAsync( # HWND hWnd, # int nCmdShow # ); -def ShowWindowAsync(hWnd, nCmdShow = SW_SHOW): +def ShowWindowAsync(hWnd, nCmdShow=SW_SHOW): _ShowWindowAsync = windll.user32.ShowWindowAsync _ShowWindowAsync.argtypes = [HWND, ctypes.c_int] - _ShowWindowAsync.restype = bool + _ShowWindowAsync.restype = bool return _ShowWindowAsync(hWnd, nCmdShow) + # HWND GetDesktopWindow(VOID); def GetDesktopWindow(): _GetDesktopWindow = windll.user32.GetDesktopWindow _GetDesktopWindow.argtypes = [] - _GetDesktopWindow.restype = HWND + _GetDesktopWindow.restype = HWND _GetDesktopWindow.errcheck = RaiseIfZero return _GetDesktopWindow() + # HWND GetForegroundWindow(VOID); def GetForegroundWindow(): _GetForegroundWindow = windll.user32.GetForegroundWindow _GetForegroundWindow.argtypes = [] - _GetForegroundWindow.restype = HWND + _GetForegroundWindow.restype = HWND _GetForegroundWindow.errcheck = RaiseIfZero return _GetForegroundWindow() + # BOOL IsWindow( # HWND hWnd # ); def IsWindow(hWnd): _IsWindow = windll.user32.IsWindow _IsWindow.argtypes = [HWND] - _IsWindow.restype = bool + _IsWindow.restype = bool return _IsWindow(hWnd) + # BOOL IsWindowVisible( # HWND hWnd # ); def IsWindowVisible(hWnd): _IsWindowVisible = windll.user32.IsWindowVisible _IsWindowVisible.argtypes = [HWND] - _IsWindowVisible.restype = bool + _IsWindowVisible.restype = bool return _IsWindowVisible(hWnd) + # BOOL IsWindowEnabled( # HWND hWnd # ); def IsWindowEnabled(hWnd): _IsWindowEnabled = windll.user32.IsWindowEnabled _IsWindowEnabled.argtypes = [HWND] - _IsWindowEnabled.restype = bool + _IsWindowEnabled.restype = bool return _IsWindowEnabled(hWnd) + # BOOL IsZoomed( # HWND hWnd # ); def IsZoomed(hWnd): _IsZoomed = windll.user32.IsZoomed _IsZoomed.argtypes = [HWND] - _IsZoomed.restype = bool + _IsZoomed.restype = bool return _IsZoomed(hWnd) + # BOOL IsIconic( # HWND hWnd # ); def IsIconic(hWnd): _IsIconic = windll.user32.IsIconic _IsIconic.argtypes = [HWND] - _IsIconic.restype = bool + _IsIconic.restype = bool return _IsIconic(hWnd) + # BOOL IsChild( # HWND hWnd # ); def IsChild(hWnd): _IsChild = windll.user32.IsChild _IsChild.argtypes = [HWND] - _IsChild.restype = bool + _IsChild.restype = bool return _IsChild(hWnd) + # HWND WindowFromPoint( # POINT Point # ); def WindowFromPoint(point): _WindowFromPoint = windll.user32.WindowFromPoint _WindowFromPoint.argtypes = [POINT] - _WindowFromPoint.restype = HWND + _WindowFromPoint.restype = HWND _WindowFromPoint.errcheck = RaiseIfZero if isinstance(point, tuple): point = POINT(*point) return _WindowFromPoint(point) + # HWND ChildWindowFromPoint( # HWND hWndParent, # POINT Point @@ -1191,25 +1245,27 @@ def WindowFromPoint(point): def ChildWindowFromPoint(hWndParent, point): _ChildWindowFromPoint = windll.user32.ChildWindowFromPoint _ChildWindowFromPoint.argtypes = [HWND, POINT] - _ChildWindowFromPoint.restype = HWND + _ChildWindowFromPoint.restype = HWND _ChildWindowFromPoint.errcheck = RaiseIfZero if isinstance(point, tuple): point = POINT(*point) return _ChildWindowFromPoint(hWndParent, point) -#HWND RealChildWindowFromPoint( + +# HWND RealChildWindowFromPoint( # HWND hwndParent, # POINT ptParentClientCoords -#); +# ); def RealChildWindowFromPoint(hWndParent, ptParentClientCoords): _RealChildWindowFromPoint = windll.user32.RealChildWindowFromPoint _RealChildWindowFromPoint.argtypes = [HWND, POINT] - _RealChildWindowFromPoint.restype = HWND + _RealChildWindowFromPoint.restype = HWND _RealChildWindowFromPoint.errcheck = RaiseIfZero if isinstance(ptParentClientCoords, tuple): ptParentClientCoords = POINT(*ptParentClientCoords) return _RealChildWindowFromPoint(hWndParent, ptParentClientCoords) + # BOOL ScreenToClient( # __in HWND hWnd, # LPPOINT lpPoint @@ -1217,7 +1273,7 @@ def RealChildWindowFromPoint(hWndParent, ptParentClientCoords): def ScreenToClient(hWnd, lpPoint): _ScreenToClient = windll.user32.ScreenToClient _ScreenToClient.argtypes = [HWND, LPPOINT] - _ScreenToClient.restype = bool + _ScreenToClient.restype = bool _ScreenToClient.errcheck = RaiseIfZero if isinstance(lpPoint, tuple): @@ -1227,6 +1283,7 @@ def ScreenToClient(hWnd, lpPoint): _ScreenToClient(hWnd, byref(lpPoint)) return Point(lpPoint.x, lpPoint.y) + # BOOL ClientToScreen( # HWND hWnd, # LPPOINT lpPoint @@ -1234,7 +1291,7 @@ def ScreenToClient(hWnd, lpPoint): def ClientToScreen(hWnd, lpPoint): _ClientToScreen = windll.user32.ClientToScreen _ClientToScreen.argtypes = [HWND, LPPOINT] - _ClientToScreen.restype = bool + _ClientToScreen.restype = bool _ClientToScreen.errcheck = RaiseIfZero if isinstance(lpPoint, tuple): @@ -1244,6 +1301,7 @@ def ClientToScreen(hWnd, lpPoint): _ClientToScreen(hWnd, byref(lpPoint)) return Point(lpPoint.x, lpPoint.y) + # int MapWindowPoints( # __in HWND hWndFrom, # __in HWND hWndTo, @@ -1253,30 +1311,32 @@ def ClientToScreen(hWnd, lpPoint): def MapWindowPoints(hWndFrom, hWndTo, lpPoints): _MapWindowPoints = windll.user32.MapWindowPoints _MapWindowPoints.argtypes = [HWND, HWND, LPPOINT, UINT] - _MapWindowPoints.restype = ctypes.c_int + _MapWindowPoints.restype = ctypes.c_int - cPoints = len(lpPoints) - lpPoints = (POINT * cPoints)(* lpPoints) + cPoints = len(lpPoints) + lpPoints = (POINT * cPoints)(*lpPoints) SetLastError(ERROR_SUCCESS) - number = _MapWindowPoints(hWndFrom, hWndTo, byref(lpPoints), cPoints) + number = _MapWindowPoints(hWndFrom, hWndTo, byref(lpPoints), cPoints) if number == 0: errcode = GetLastError() if errcode != ERROR_SUCCESS: raise ctypes.WinError(errcode) x_delta = number & 0xFFFF y_delta = (number >> 16) & 0xFFFF - return x_delta, y_delta, [ (Point.x, Point.y) for Point in lpPoints ] + return x_delta, y_delta, [(Point.x, Point.y) for Point in lpPoints] -#BOOL SetForegroundWindow( + +# BOOL SetForegroundWindow( # HWND hWnd -#); +# ); def SetForegroundWindow(hWnd): _SetForegroundWindow = windll.user32.SetForegroundWindow _SetForegroundWindow.argtypes = [HWND] - _SetForegroundWindow.restype = bool + _SetForegroundWindow.restype = bool _SetForegroundWindow.errcheck = RaiseIfZero return _SetForegroundWindow(hWnd) + # BOOL GetWindowPlacement( # HWND hWnd, # WINDOWPLACEMENT *lpwndpl @@ -1284,7 +1344,7 @@ def SetForegroundWindow(hWnd): def GetWindowPlacement(hWnd): _GetWindowPlacement = windll.user32.GetWindowPlacement _GetWindowPlacement.argtypes = [HWND, PWINDOWPLACEMENT] - _GetWindowPlacement.restype = bool + _GetWindowPlacement.restype = bool _GetWindowPlacement.errcheck = RaiseIfZero lpwndpl = WINDOWPLACEMENT() @@ -1292,6 +1352,7 @@ def GetWindowPlacement(hWnd): _GetWindowPlacement(hWnd, byref(lpwndpl)) return WindowPlacement(lpwndpl) + # BOOL SetWindowPlacement( # HWND hWnd, # WINDOWPLACEMENT *lpwndpl @@ -1299,13 +1360,14 @@ def GetWindowPlacement(hWnd): def SetWindowPlacement(hWnd, lpwndpl): _SetWindowPlacement = windll.user32.SetWindowPlacement _SetWindowPlacement.argtypes = [HWND, PWINDOWPLACEMENT] - _SetWindowPlacement.restype = bool + _SetWindowPlacement.restype = bool _SetWindowPlacement.errcheck = RaiseIfZero if isinstance(lpwndpl, WINDOWPLACEMENT): lpwndpl.length = sizeof(lpwndpl) _SetWindowPlacement(hWnd, byref(lpwndpl)) + # BOOL WINAPI GetWindowRect( # __in HWND hWnd, # __out LPRECT lpRect @@ -1313,13 +1375,14 @@ def SetWindowPlacement(hWnd, lpwndpl): def GetWindowRect(hWnd): _GetWindowRect = windll.user32.GetWindowRect _GetWindowRect.argtypes = [HWND, LPRECT] - _GetWindowRect.restype = bool + _GetWindowRect.restype = bool _GetWindowRect.errcheck = RaiseIfZero lpRect = RECT() _GetWindowRect(hWnd, byref(lpRect)) return Rect(lpRect.left, lpRect.top, lpRect.right, lpRect.bottom) + # BOOL WINAPI GetClientRect( # __in HWND hWnd, # __out LPRECT lpRect @@ -1327,28 +1390,30 @@ def GetWindowRect(hWnd): def GetClientRect(hWnd): _GetClientRect = windll.user32.GetClientRect _GetClientRect.argtypes = [HWND, LPRECT] - _GetClientRect.restype = bool + _GetClientRect.restype = bool _GetClientRect.errcheck = RaiseIfZero lpRect = RECT() _GetClientRect(hWnd, byref(lpRect)) return Rect(lpRect.left, lpRect.top, lpRect.right, lpRect.bottom) -#BOOL MoveWindow( + +# BOOL MoveWindow( # HWND hWnd, # int X, # int Y, # int nWidth, # int nHeight, # BOOL bRepaint -#); -def MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint = True): +# ); +def MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint=True): _MoveWindow = windll.user32.MoveWindow _MoveWindow.argtypes = [HWND, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, BOOL] - _MoveWindow.restype = bool + _MoveWindow.restype = bool _MoveWindow.errcheck = RaiseIfZero _MoveWindow(hWnd, X, Y, nWidth, nHeight, bool(bRepaint)) + # BOOL GetGUIThreadInfo( # DWORD idThread, # LPGUITHREADINFO lpgui @@ -1356,20 +1421,22 @@ def MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint = True): def GetGUIThreadInfo(idThread): _GetGUIThreadInfo = windll.user32.GetGUIThreadInfo _GetGUIThreadInfo.argtypes = [DWORD, LPGUITHREADINFO] - _GetGUIThreadInfo.restype = bool + _GetGUIThreadInfo.restype = bool _GetGUIThreadInfo.errcheck = RaiseIfZero gui = GUITHREADINFO() _GetGUIThreadInfo(idThread, byref(gui)) return gui + # BOOL CALLBACK EnumWndProc( # HWND hwnd, # LPARAM lParam # ); -class __EnumWndProc (__WindowEnumerator): +class __EnumWndProc(__WindowEnumerator): pass + # BOOL EnumWindows( # WNDENUMPROC lpEnumFunc, # LPARAM lParam @@ -1377,7 +1444,7 @@ class __EnumWndProc (__WindowEnumerator): def EnumWindows(): _EnumWindows = windll.user32.EnumWindows _EnumWindows.argtypes = [WNDENUMPROC, LPARAM] - _EnumWindows.restype = bool + _EnumWindows.restype = bool EnumFunc = __EnumWndProc() lpEnumFunc = WNDENUMPROC(EnumFunc) @@ -1387,13 +1454,15 @@ def EnumWindows(): raise ctypes.WinError(errcode) return EnumFunc.hwnd + # BOOL CALLBACK EnumThreadWndProc( # HWND hwnd, # LPARAM lParam # ); -class __EnumThreadWndProc (__WindowEnumerator): +class __EnumThreadWndProc(__WindowEnumerator): pass + # BOOL EnumThreadWindows( # DWORD dwThreadId, # WNDENUMPROC lpfn, @@ -1402,7 +1471,7 @@ class __EnumThreadWndProc (__WindowEnumerator): def EnumThreadWindows(dwThreadId): _EnumThreadWindows = windll.user32.EnumThreadWindows _EnumThreadWindows.argtypes = [DWORD, WNDENUMPROC, LPARAM] - _EnumThreadWindows.restype = bool + _EnumThreadWindows.restype = bool fn = __EnumThreadWndProc() lpfn = WNDENUMPROC(fn) @@ -1412,22 +1481,24 @@ def EnumThreadWindows(dwThreadId): raise ctypes.WinError(errcode) return fn.hwnd + # BOOL CALLBACK EnumChildProc( # HWND hwnd, # LPARAM lParam # ); -class __EnumChildProc (__WindowEnumerator): +class __EnumChildProc(__WindowEnumerator): pass + # BOOL EnumChildWindows( # HWND hWndParent, # WNDENUMPROC lpEnumFunc, # LPARAM lParam # ); -def EnumChildWindows(hWndParent = NULL): +def EnumChildWindows(hWndParent=NULL): _EnumChildWindows = windll.user32.EnumChildWindows _EnumChildWindows.argtypes = [HWND, WNDENUMPROC, LPARAM] - _EnumChildWindows.restype = bool + _EnumChildWindows.restype = bool EnumFunc = __EnumChildProc() lpEnumFunc = WNDENUMPROC(EnumFunc) @@ -1438,88 +1509,98 @@ def EnumChildWindows(hWndParent = NULL): raise ctypes.WinError(errcode) return EnumFunc.hwnd + # LRESULT SendMessage( # HWND hWnd, # UINT Msg, # WPARAM wParam, # LPARAM lParam # ); -def SendMessageA(hWnd, Msg, wParam = 0, lParam = 0): +def SendMessageA(hWnd, Msg, wParam=0, lParam=0): _SendMessageA = windll.user32.SendMessageA _SendMessageA.argtypes = [HWND, UINT, WPARAM, LPARAM] - _SendMessageA.restype = LRESULT + _SendMessageA.restype = LRESULT wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) return _SendMessageA(hWnd, Msg, wParam, lParam) -def SendMessageW(hWnd, Msg, wParam = 0, lParam = 0): + +def SendMessageW(hWnd, Msg, wParam=0, lParam=0): _SendMessageW = windll.user32.SendMessageW _SendMessageW.argtypes = [HWND, UINT, WPARAM, LPARAM] - _SendMessageW.restype = LRESULT + _SendMessageW.restype = LRESULT wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) return _SendMessageW(hWnd, Msg, wParam, lParam) + SendMessage = GuessStringType(SendMessageA, SendMessageW) + # BOOL PostMessage( # HWND hWnd, # UINT Msg, # WPARAM wParam, # LPARAM lParam # ); -def PostMessageA(hWnd, Msg, wParam = 0, lParam = 0): +def PostMessageA(hWnd, Msg, wParam=0, lParam=0): _PostMessageA = windll.user32.PostMessageA _PostMessageA.argtypes = [HWND, UINT, WPARAM, LPARAM] - _PostMessageA.restype = bool + _PostMessageA.restype = bool _PostMessageA.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _PostMessageA(hWnd, Msg, wParam, lParam) -def PostMessageW(hWnd, Msg, wParam = 0, lParam = 0): + +def PostMessageW(hWnd, Msg, wParam=0, lParam=0): _PostMessageW = windll.user32.PostMessageW _PostMessageW.argtypes = [HWND, UINT, WPARAM, LPARAM] - _PostMessageW.restype = bool + _PostMessageW.restype = bool _PostMessageW.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _PostMessageW(hWnd, Msg, wParam, lParam) + PostMessage = GuessStringType(PostMessageA, PostMessageW) + # BOOL PostThreadMessage( # DWORD idThread, # UINT Msg, # WPARAM wParam, # LPARAM lParam # ); -def PostThreadMessageA(idThread, Msg, wParam = 0, lParam = 0): +def PostThreadMessageA(idThread, Msg, wParam=0, lParam=0): _PostThreadMessageA = windll.user32.PostThreadMessageA _PostThreadMessageA.argtypes = [DWORD, UINT, WPARAM, LPARAM] - _PostThreadMessageA.restype = bool + _PostThreadMessageA.restype = bool _PostThreadMessageA.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _PostThreadMessageA(idThread, Msg, wParam, lParam) -def PostThreadMessageW(idThread, Msg, wParam = 0, lParam = 0): + +def PostThreadMessageW(idThread, Msg, wParam=0, lParam=0): _PostThreadMessageW = windll.user32.PostThreadMessageW _PostThreadMessageW.argtypes = [DWORD, UINT, WPARAM, LPARAM] - _PostThreadMessageW.restype = bool + _PostThreadMessageW.restype = bool _PostThreadMessageW.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _PostThreadMessageW(idThread, Msg, wParam, lParam) + PostThreadMessage = GuessStringType(PostThreadMessageA, PostThreadMessageW) + # LRESULT c( # HWND hWnd, # UINT Msg, @@ -1529,10 +1610,10 @@ def PostThreadMessageW(idThread, Msg, wParam = 0, lParam = 0): # UINT uTimeout, # PDWORD_PTR lpdwResult # ); -def SendMessageTimeoutA(hWnd, Msg, wParam = 0, lParam = 0, fuFlags = 0, uTimeout = 0): +def SendMessageTimeoutA(hWnd, Msg, wParam=0, lParam=0, fuFlags=0, uTimeout=0): _SendMessageTimeoutA = windll.user32.SendMessageTimeoutA _SendMessageTimeoutA.argtypes = [HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR] - _SendMessageTimeoutA.restype = LRESULT + _SendMessageTimeoutA.restype = LRESULT _SendMessageTimeoutA.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) @@ -1541,10 +1622,11 @@ def SendMessageTimeoutA(hWnd, Msg, wParam = 0, lParam = 0, fuFlags = 0, uTimeout _SendMessageTimeoutA(hWnd, Msg, wParam, lParam, fuFlags, uTimeout, byref(dwResult)) return dwResult.value -def SendMessageTimeoutW(hWnd, Msg, wParam = 0, lParam = 0): + +def SendMessageTimeoutW(hWnd, Msg, wParam=0, lParam=0): _SendMessageTimeoutW = windll.user32.SendMessageTimeoutW _SendMessageTimeoutW.argtypes = [HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR] - _SendMessageTimeoutW.restype = LRESULT + _SendMessageTimeoutW.restype = LRESULT _SendMessageTimeoutW.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) @@ -1553,36 +1635,41 @@ def SendMessageTimeoutW(hWnd, Msg, wParam = 0, lParam = 0): _SendMessageTimeoutW(hWnd, Msg, wParam, lParam, fuFlags, uTimeout, byref(dwResult)) return dwResult.value + SendMessageTimeout = GuessStringType(SendMessageTimeoutA, SendMessageTimeoutW) + # BOOL SendNotifyMessage( # HWND hWnd, # UINT Msg, # WPARAM wParam, # LPARAM lParam # ); -def SendNotifyMessageA(hWnd, Msg, wParam = 0, lParam = 0): +def SendNotifyMessageA(hWnd, Msg, wParam=0, lParam=0): _SendNotifyMessageA = windll.user32.SendNotifyMessageA _SendNotifyMessageA.argtypes = [HWND, UINT, WPARAM, LPARAM] - _SendNotifyMessageA.restype = bool + _SendNotifyMessageA.restype = bool _SendNotifyMessageA.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _SendNotifyMessageA(hWnd, Msg, wParam, lParam) -def SendNotifyMessageW(hWnd, Msg, wParam = 0, lParam = 0): + +def SendNotifyMessageW(hWnd, Msg, wParam=0, lParam=0): _SendNotifyMessageW = windll.user32.SendNotifyMessageW _SendNotifyMessageW.argtypes = [HWND, UINT, WPARAM, LPARAM] - _SendNotifyMessageW.restype = bool + _SendNotifyMessageW.restype = bool _SendNotifyMessageW.errcheck = RaiseIfZero wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) _SendNotifyMessageW(hWnd, Msg, wParam, lParam) + SendNotifyMessage = GuessStringType(SendNotifyMessageA, SendNotifyMessageW) + # LRESULT SendDlgItemMessage( # HWND hDlg, # int nIDDlgItem, @@ -1590,78 +1677,88 @@ def SendNotifyMessageW(hWnd, Msg, wParam = 0, lParam = 0): # WPARAM wParam, # LPARAM lParam # ); -def SendDlgItemMessageA(hDlg, nIDDlgItem, Msg, wParam = 0, lParam = 0): +def SendDlgItemMessageA(hDlg, nIDDlgItem, Msg, wParam=0, lParam=0): _SendDlgItemMessageA = windll.user32.SendDlgItemMessageA _SendDlgItemMessageA.argtypes = [HWND, ctypes.c_int, UINT, WPARAM, LPARAM] - _SendDlgItemMessageA.restype = LRESULT + _SendDlgItemMessageA.restype = LRESULT wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) return _SendDlgItemMessageA(hDlg, nIDDlgItem, Msg, wParam, lParam) -def SendDlgItemMessageW(hDlg, nIDDlgItem, Msg, wParam = 0, lParam = 0): + +def SendDlgItemMessageW(hDlg, nIDDlgItem, Msg, wParam=0, lParam=0): _SendDlgItemMessageW = windll.user32.SendDlgItemMessageW _SendDlgItemMessageW.argtypes = [HWND, ctypes.c_int, UINT, WPARAM, LPARAM] - _SendDlgItemMessageW.restype = LRESULT + _SendDlgItemMessageW.restype = LRESULT wParam = MAKE_WPARAM(wParam) lParam = MAKE_LPARAM(lParam) return _SendDlgItemMessageW(hDlg, nIDDlgItem, Msg, wParam, lParam) + SendDlgItemMessage = GuessStringType(SendDlgItemMessageA, SendDlgItemMessageW) + # DWORD WINAPI WaitForInputIdle( # _In_ HANDLE hProcess, # _In_ DWORD dwMilliseconds # ); -def WaitForInputIdle(hProcess, dwMilliseconds = INFINITE): +def WaitForInputIdle(hProcess, dwMilliseconds=INFINITE): _WaitForInputIdle = windll.user32.WaitForInputIdle _WaitForInputIdle.argtypes = [HANDLE, DWORD] - _WaitForInputIdle.restype = DWORD + _WaitForInputIdle.restype = DWORD r = _WaitForInputIdle(hProcess, dwMilliseconds) if r == WAIT_FAILED: raise ctypes.WinError() return r + # UINT RegisterWindowMessage( # LPCTSTR lpString # ); def RegisterWindowMessageA(lpString): _RegisterWindowMessageA = windll.user32.RegisterWindowMessageA _RegisterWindowMessageA.argtypes = [LPSTR] - _RegisterWindowMessageA.restype = UINT + _RegisterWindowMessageA.restype = UINT _RegisterWindowMessageA.errcheck = RaiseIfZero return _RegisterWindowMessageA(lpString) + def RegisterWindowMessageW(lpString): _RegisterWindowMessageW = windll.user32.RegisterWindowMessageW _RegisterWindowMessageW.argtypes = [LPWSTR] - _RegisterWindowMessageW.restype = UINT + _RegisterWindowMessageW.restype = UINT _RegisterWindowMessageW.errcheck = RaiseIfZero return _RegisterWindowMessageW(lpString) + RegisterWindowMessage = GuessStringType(RegisterWindowMessageA, RegisterWindowMessageW) + # UINT RegisterClipboardFormat( # LPCTSTR lpString # ); def RegisterClipboardFormatA(lpString): _RegisterClipboardFormatA = windll.user32.RegisterClipboardFormatA _RegisterClipboardFormatA.argtypes = [LPSTR] - _RegisterClipboardFormatA.restype = UINT + _RegisterClipboardFormatA.restype = UINT _RegisterClipboardFormatA.errcheck = RaiseIfZero return _RegisterClipboardFormatA(lpString) + def RegisterClipboardFormatW(lpString): _RegisterClipboardFormatW = windll.user32.RegisterClipboardFormatW _RegisterClipboardFormatW.argtypes = [LPWSTR] - _RegisterClipboardFormatW.restype = UINT + _RegisterClipboardFormatW.restype = UINT _RegisterClipboardFormatW.errcheck = RaiseIfZero return _RegisterClipboardFormatW(lpString) + RegisterClipboardFormat = GuessStringType(RegisterClipboardFormatA, RegisterClipboardFormatW) + # HANDLE WINAPI GetProp( # __in HWND hWnd, # __in LPCTSTR lpString @@ -1669,17 +1766,20 @@ def RegisterClipboardFormatW(lpString): def GetPropA(hWnd, lpString): _GetPropA = windll.user32.GetPropA _GetPropA.argtypes = [HWND, LPSTR] - _GetPropA.restype = HANDLE + _GetPropA.restype = HANDLE return _GetPropA(hWnd, lpString) + def GetPropW(hWnd, lpString): _GetPropW = windll.user32.GetPropW _GetPropW.argtypes = [HWND, LPWSTR] - _GetPropW.restype = HANDLE + _GetPropW.restype = HANDLE return _GetPropW(hWnd, lpString) + GetProp = GuessStringType(GetPropA, GetPropW) + # BOOL WINAPI SetProp( # __in HWND hWnd, # __in LPCTSTR lpString, @@ -1688,19 +1788,22 @@ def GetPropW(hWnd, lpString): def SetPropA(hWnd, lpString, hData): _SetPropA = windll.user32.SetPropA _SetPropA.argtypes = [HWND, LPSTR, HANDLE] - _SetPropA.restype = BOOL + _SetPropA.restype = BOOL _SetPropA.errcheck = RaiseIfZero _SetPropA(hWnd, lpString, hData) + def SetPropW(hWnd, lpString, hData): _SetPropW = windll.user32.SetPropW _SetPropW.argtypes = [HWND, LPWSTR, HANDLE] - _SetPropW.restype = BOOL + _SetPropW.restype = BOOL _SetPropW.errcheck = RaiseIfZero _SetPropW(hWnd, lpString, hData) + SetProp = GuessStringType(SetPropA, SetPropW) + # HANDLE WINAPI RemoveProp( # __in HWND hWnd, # __in LPCTSTR lpString @@ -1708,20 +1811,22 @@ def SetPropW(hWnd, lpString, hData): def RemovePropA(hWnd, lpString): _RemovePropA = windll.user32.RemovePropA _RemovePropA.argtypes = [HWND, LPSTR] - _RemovePropA.restype = HANDLE + _RemovePropA.restype = HANDLE return _RemovePropA(hWnd, lpString) + def RemovePropW(hWnd, lpString): _RemovePropW = windll.user32.RemovePropW _RemovePropW.argtypes = [HWND, LPWSTR] - _RemovePropW.restype = HANDLE + _RemovePropW.restype = HANDLE return _RemovePropW(hWnd, lpString) + RemoveProp = GuessStringType(RemovePropA, RemovePropW) -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py index 19b6d53c0..556bbeb99 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/version.py @@ -38,79 +38,80 @@ from winappdbg.win32.defines import * -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== - -#--- NTDDI version ------------------------------------------------------------ - -NTDDI_WIN8 = 0x06020000 -NTDDI_WIN7SP1 = 0x06010100 -NTDDI_WIN7 = 0x06010000 -NTDDI_WS08 = 0x06000100 -NTDDI_VISTASP1 = 0x06000100 -NTDDI_VISTA = 0x06000000 -NTDDI_LONGHORN = NTDDI_VISTA -NTDDI_WS03SP2 = 0x05020200 -NTDDI_WS03SP1 = 0x05020100 -NTDDI_WS03 = 0x05020000 -NTDDI_WINXPSP3 = 0x05010300 -NTDDI_WINXPSP2 = 0x05010200 -NTDDI_WINXPSP1 = 0x05010100 -NTDDI_WINXP = 0x05010000 -NTDDI_WIN2KSP4 = 0x05000400 -NTDDI_WIN2KSP3 = 0x05000300 -NTDDI_WIN2KSP2 = 0x05000200 -NTDDI_WIN2KSP1 = 0x05000100 -NTDDI_WIN2K = 0x05000000 -NTDDI_WINNT4 = 0x04000000 - -OSVERSION_MASK = 0xFFFF0000 -SPVERSION_MASK = 0x0000FF00 +# ============================================================================== + +# --- NTDDI version ------------------------------------------------------------ + +NTDDI_WIN8 = 0x06020000 +NTDDI_WIN7SP1 = 0x06010100 +NTDDI_WIN7 = 0x06010000 +NTDDI_WS08 = 0x06000100 +NTDDI_VISTASP1 = 0x06000100 +NTDDI_VISTA = 0x06000000 +NTDDI_LONGHORN = NTDDI_VISTA +NTDDI_WS03SP2 = 0x05020200 +NTDDI_WS03SP1 = 0x05020100 +NTDDI_WS03 = 0x05020000 +NTDDI_WINXPSP3 = 0x05010300 +NTDDI_WINXPSP2 = 0x05010200 +NTDDI_WINXPSP1 = 0x05010100 +NTDDI_WINXP = 0x05010000 +NTDDI_WIN2KSP4 = 0x05000400 +NTDDI_WIN2KSP3 = 0x05000300 +NTDDI_WIN2KSP2 = 0x05000200 +NTDDI_WIN2KSP1 = 0x05000100 +NTDDI_WIN2K = 0x05000000 +NTDDI_WINNT4 = 0x04000000 + +OSVERSION_MASK = 0xFFFF0000 +SPVERSION_MASK = 0x0000FF00 SUBVERSION_MASK = 0x000000FF -#--- OSVERSIONINFO and OSVERSIONINFOEX structures and constants --------------- - -VER_PLATFORM_WIN32s = 0 -VER_PLATFORM_WIN32_WINDOWS = 1 -VER_PLATFORM_WIN32_NT = 2 - -VER_SUITE_BACKOFFICE = 0x00000004 -VER_SUITE_BLADE = 0x00000400 -VER_SUITE_COMPUTE_SERVER = 0x00004000 -VER_SUITE_DATACENTER = 0x00000080 -VER_SUITE_ENTERPRISE = 0x00000002 -VER_SUITE_EMBEDDEDNT = 0x00000040 -VER_SUITE_PERSONAL = 0x00000200 -VER_SUITE_SINGLEUSERTS = 0x00000100 -VER_SUITE_SMALLBUSINESS = 0x00000001 -VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x00000020 -VER_SUITE_STORAGE_SERVER = 0x00002000 -VER_SUITE_TERMINAL = 0x00000010 -VER_SUITE_WH_SERVER = 0x00008000 - -VER_NT_DOMAIN_CONTROLLER = 0x0000002 -VER_NT_SERVER = 0x0000003 -VER_NT_WORKSTATION = 0x0000001 - -VER_BUILDNUMBER = 0x0000004 -VER_MAJORVERSION = 0x0000002 -VER_MINORVERSION = 0x0000001 -VER_PLATFORMID = 0x0000008 -VER_PRODUCT_TYPE = 0x0000080 -VER_SERVICEPACKMAJOR = 0x0000020 -VER_SERVICEPACKMINOR = 0x0000010 -VER_SUITENAME = 0x0000040 - -VER_EQUAL = 1 -VER_GREATER = 2 -VER_GREATER_EQUAL = 3 -VER_LESS = 4 -VER_LESS_EQUAL = 5 -VER_AND = 6 -VER_OR = 7 +# --- OSVERSIONINFO and OSVERSIONINFOEX structures and constants --------------- + +VER_PLATFORM_WIN32s = 0 +VER_PLATFORM_WIN32_WINDOWS = 1 +VER_PLATFORM_WIN32_NT = 2 + +VER_SUITE_BACKOFFICE = 0x00000004 +VER_SUITE_BLADE = 0x00000400 +VER_SUITE_COMPUTE_SERVER = 0x00004000 +VER_SUITE_DATACENTER = 0x00000080 +VER_SUITE_ENTERPRISE = 0x00000002 +VER_SUITE_EMBEDDEDNT = 0x00000040 +VER_SUITE_PERSONAL = 0x00000200 +VER_SUITE_SINGLEUSERTS = 0x00000100 +VER_SUITE_SMALLBUSINESS = 0x00000001 +VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x00000020 +VER_SUITE_STORAGE_SERVER = 0x00002000 +VER_SUITE_TERMINAL = 0x00000010 +VER_SUITE_WH_SERVER = 0x00008000 + +VER_NT_DOMAIN_CONTROLLER = 0x0000002 +VER_NT_SERVER = 0x0000003 +VER_NT_WORKSTATION = 0x0000001 + +VER_BUILDNUMBER = 0x0000004 +VER_MAJORVERSION = 0x0000002 +VER_MINORVERSION = 0x0000001 +VER_PLATFORMID = 0x0000008 +VER_PRODUCT_TYPE = 0x0000080 +VER_SERVICEPACKMAJOR = 0x0000020 +VER_SERVICEPACKMINOR = 0x0000010 +VER_SUITENAME = 0x0000040 + +VER_EQUAL = 1 +VER_GREATER = 2 +VER_GREATER_EQUAL = 3 +VER_LESS = 4 +VER_LESS_EQUAL = 5 +VER_AND = 6 +VER_OR = 7 + # typedef struct _OSVERSIONINFO { # DWORD dwOSVersionInfoSize; @@ -123,22 +124,25 @@ class OSVERSIONINFOA(Structure): _fields_ = [ ("dwOSVersionInfoSize", DWORD), - ("dwMajorVersion", DWORD), - ("dwMinorVersion", DWORD), - ("dwBuildNumber", DWORD), - ("dwPlatformId", DWORD), - ("szCSDVersion", CHAR * 128), + ("dwMajorVersion", DWORD), + ("dwMinorVersion", DWORD), + ("dwBuildNumber", DWORD), + ("dwPlatformId", DWORD), + ("szCSDVersion", CHAR * 128), ] + + class OSVERSIONINFOW(Structure): _fields_ = [ ("dwOSVersionInfoSize", DWORD), - ("dwMajorVersion", DWORD), - ("dwMinorVersion", DWORD), - ("dwBuildNumber", DWORD), - ("dwPlatformId", DWORD), - ("szCSDVersion", WCHAR * 128), + ("dwMajorVersion", DWORD), + ("dwMinorVersion", DWORD), + ("dwBuildNumber", DWORD), + ("dwPlatformId", DWORD), + ("szCSDVersion", WCHAR * 128), ] + # typedef struct _OSVERSIONINFOEX { # DWORD dwOSVersionInfoSize; # DWORD dwMajorVersion; @@ -155,189 +159,192 @@ class OSVERSIONINFOW(Structure): class OSVERSIONINFOEXA(Structure): _fields_ = [ ("dwOSVersionInfoSize", DWORD), - ("dwMajorVersion", DWORD), - ("dwMinorVersion", DWORD), - ("dwBuildNumber", DWORD), - ("dwPlatformId", DWORD), - ("szCSDVersion", CHAR * 128), - ("wServicePackMajor", WORD), - ("wServicePackMinor", WORD), - ("wSuiteMask", WORD), - ("wProductType", BYTE), - ("wReserved", BYTE), + ("dwMajorVersion", DWORD), + ("dwMinorVersion", DWORD), + ("dwBuildNumber", DWORD), + ("dwPlatformId", DWORD), + ("szCSDVersion", CHAR * 128), + ("wServicePackMajor", WORD), + ("wServicePackMinor", WORD), + ("wSuiteMask", WORD), + ("wProductType", BYTE), + ("wReserved", BYTE), ] + + class OSVERSIONINFOEXW(Structure): _fields_ = [ ("dwOSVersionInfoSize", DWORD), - ("dwMajorVersion", DWORD), - ("dwMinorVersion", DWORD), - ("dwBuildNumber", DWORD), - ("dwPlatformId", DWORD), - ("szCSDVersion", WCHAR * 128), - ("wServicePackMajor", WORD), - ("wServicePackMinor", WORD), - ("wSuiteMask", WORD), - ("wProductType", BYTE), - ("wReserved", BYTE), + ("dwMajorVersion", DWORD), + ("dwMinorVersion", DWORD), + ("dwBuildNumber", DWORD), + ("dwPlatformId", DWORD), + ("szCSDVersion", WCHAR * 128), + ("wServicePackMajor", WORD), + ("wServicePackMinor", WORD), + ("wSuiteMask", WORD), + ("wProductType", BYTE), + ("wReserved", BYTE), ] -LPOSVERSIONINFOA = POINTER(OSVERSIONINFOA) -LPOSVERSIONINFOW = POINTER(OSVERSIONINFOW) -LPOSVERSIONINFOEXA = POINTER(OSVERSIONINFOEXA) -LPOSVERSIONINFOEXW = POINTER(OSVERSIONINFOEXW) -POSVERSIONINFOA = LPOSVERSIONINFOA -POSVERSIONINFOW = LPOSVERSIONINFOW -POSVERSIONINFOEXA = LPOSVERSIONINFOEXA -POSVERSIONINFOEXW = LPOSVERSIONINFOA - -#--- GetSystemMetrics constants ----------------------------------------------- - -SM_CXSCREEN = 0 -SM_CYSCREEN = 1 -SM_CXVSCROLL = 2 -SM_CYHSCROLL = 3 -SM_CYCAPTION = 4 -SM_CXBORDER = 5 -SM_CYBORDER = 6 -SM_CXDLGFRAME = 7 -SM_CYDLGFRAME = 8 -SM_CYVTHUMB = 9 -SM_CXHTHUMB = 10 -SM_CXICON = 11 -SM_CYICON = 12 -SM_CXCURSOR = 13 -SM_CYCURSOR = 14 -SM_CYMENU = 15 -SM_CXFULLSCREEN = 16 -SM_CYFULLSCREEN = 17 -SM_CYKANJIWINDOW = 18 -SM_MOUSEPRESENT = 19 -SM_CYVSCROLL = 20 -SM_CXHSCROLL = 21 -SM_DEBUG = 22 -SM_SWAPBUTTON = 23 -SM_RESERVED1 = 24 -SM_RESERVED2 = 25 -SM_RESERVED3 = 26 -SM_RESERVED4 = 27 -SM_CXMIN = 28 -SM_CYMIN = 29 -SM_CXSIZE = 30 -SM_CYSIZE = 31 -SM_CXFRAME = 32 -SM_CYFRAME = 33 -SM_CXMINTRACK = 34 -SM_CYMINTRACK = 35 -SM_CXDOUBLECLK = 36 -SM_CYDOUBLECLK = 37 -SM_CXICONSPACING = 38 -SM_CYICONSPACING = 39 -SM_MENUDROPALIGNMENT = 40 -SM_PENWINDOWS = 41 -SM_DBCSENABLED = 42 -SM_CMOUSEBUTTONS = 43 - -SM_CXFIXEDFRAME = SM_CXDLGFRAME # ;win40 name change -SM_CYFIXEDFRAME = SM_CYDLGFRAME # ;win40 name change -SM_CXSIZEFRAME = SM_CXFRAME # ;win40 name change -SM_CYSIZEFRAME = SM_CYFRAME # ;win40 name change - -SM_SECURE = 44 -SM_CXEDGE = 45 -SM_CYEDGE = 46 -SM_CXMINSPACING = 47 -SM_CYMINSPACING = 48 -SM_CXSMICON = 49 -SM_CYSMICON = 50 -SM_CYSMCAPTION = 51 -SM_CXSMSIZE = 52 -SM_CYSMSIZE = 53 -SM_CXMENUSIZE = 54 -SM_CYMENUSIZE = 55 -SM_ARRANGE = 56 -SM_CXMINIMIZED = 57 -SM_CYMINIMIZED = 58 -SM_CXMAXTRACK = 59 -SM_CYMAXTRACK = 60 -SM_CXMAXIMIZED = 61 -SM_CYMAXIMIZED = 62 -SM_NETWORK = 63 -SM_CLEANBOOT = 67 -SM_CXDRAG = 68 -SM_CYDRAG = 69 -SM_SHOWSOUNDS = 70 -SM_CXMENUCHECK = 71 # Use instead of GetMenuCheckMarkDimensions()! -SM_CYMENUCHECK = 72 -SM_SLOWMACHINE = 73 -SM_MIDEASTENABLED = 74 -SM_MOUSEWHEELPRESENT = 75 -SM_XVIRTUALSCREEN = 76 -SM_YVIRTUALSCREEN = 77 -SM_CXVIRTUALSCREEN = 78 -SM_CYVIRTUALSCREEN = 79 -SM_CMONITORS = 80 -SM_SAMEDISPLAYFORMAT = 81 -SM_IMMENABLED = 82 -SM_CXFOCUSBORDER = 83 -SM_CYFOCUSBORDER = 84 -SM_TABLETPC = 86 -SM_MEDIACENTER = 87 -SM_STARTER = 88 -SM_SERVERR2 = 89 + +LPOSVERSIONINFOA = POINTER(OSVERSIONINFOA) +LPOSVERSIONINFOW = POINTER(OSVERSIONINFOW) +LPOSVERSIONINFOEXA = POINTER(OSVERSIONINFOEXA) +LPOSVERSIONINFOEXW = POINTER(OSVERSIONINFOEXW) +POSVERSIONINFOA = LPOSVERSIONINFOA +POSVERSIONINFOW = LPOSVERSIONINFOW +POSVERSIONINFOEXA = LPOSVERSIONINFOEXA +POSVERSIONINFOEXW = LPOSVERSIONINFOA + +# --- GetSystemMetrics constants ----------------------------------------------- + +SM_CXSCREEN = 0 +SM_CYSCREEN = 1 +SM_CXVSCROLL = 2 +SM_CYHSCROLL = 3 +SM_CYCAPTION = 4 +SM_CXBORDER = 5 +SM_CYBORDER = 6 +SM_CXDLGFRAME = 7 +SM_CYDLGFRAME = 8 +SM_CYVTHUMB = 9 +SM_CXHTHUMB = 10 +SM_CXICON = 11 +SM_CYICON = 12 +SM_CXCURSOR = 13 +SM_CYCURSOR = 14 +SM_CYMENU = 15 +SM_CXFULLSCREEN = 16 +SM_CYFULLSCREEN = 17 +SM_CYKANJIWINDOW = 18 +SM_MOUSEPRESENT = 19 +SM_CYVSCROLL = 20 +SM_CXHSCROLL = 21 +SM_DEBUG = 22 +SM_SWAPBUTTON = 23 +SM_RESERVED1 = 24 +SM_RESERVED2 = 25 +SM_RESERVED3 = 26 +SM_RESERVED4 = 27 +SM_CXMIN = 28 +SM_CYMIN = 29 +SM_CXSIZE = 30 +SM_CYSIZE = 31 +SM_CXFRAME = 32 +SM_CYFRAME = 33 +SM_CXMINTRACK = 34 +SM_CYMINTRACK = 35 +SM_CXDOUBLECLK = 36 +SM_CYDOUBLECLK = 37 +SM_CXICONSPACING = 38 +SM_CYICONSPACING = 39 +SM_MENUDROPALIGNMENT = 40 +SM_PENWINDOWS = 41 +SM_DBCSENABLED = 42 +SM_CMOUSEBUTTONS = 43 + +SM_CXFIXEDFRAME = SM_CXDLGFRAME # ;win40 name change +SM_CYFIXEDFRAME = SM_CYDLGFRAME # ;win40 name change +SM_CXSIZEFRAME = SM_CXFRAME # ;win40 name change +SM_CYSIZEFRAME = SM_CYFRAME # ;win40 name change + +SM_SECURE = 44 +SM_CXEDGE = 45 +SM_CYEDGE = 46 +SM_CXMINSPACING = 47 +SM_CYMINSPACING = 48 +SM_CXSMICON = 49 +SM_CYSMICON = 50 +SM_CYSMCAPTION = 51 +SM_CXSMSIZE = 52 +SM_CYSMSIZE = 53 +SM_CXMENUSIZE = 54 +SM_CYMENUSIZE = 55 +SM_ARRANGE = 56 +SM_CXMINIMIZED = 57 +SM_CYMINIMIZED = 58 +SM_CXMAXTRACK = 59 +SM_CYMAXTRACK = 60 +SM_CXMAXIMIZED = 61 +SM_CYMAXIMIZED = 62 +SM_NETWORK = 63 +SM_CLEANBOOT = 67 +SM_CXDRAG = 68 +SM_CYDRAG = 69 +SM_SHOWSOUNDS = 70 +SM_CXMENUCHECK = 71 # Use instead of GetMenuCheckMarkDimensions()! +SM_CYMENUCHECK = 72 +SM_SLOWMACHINE = 73 +SM_MIDEASTENABLED = 74 +SM_MOUSEWHEELPRESENT = 75 +SM_XVIRTUALSCREEN = 76 +SM_YVIRTUALSCREEN = 77 +SM_CXVIRTUALSCREEN = 78 +SM_CYVIRTUALSCREEN = 79 +SM_CMONITORS = 80 +SM_SAMEDISPLAYFORMAT = 81 +SM_IMMENABLED = 82 +SM_CXFOCUSBORDER = 83 +SM_CYFOCUSBORDER = 84 +SM_TABLETPC = 86 +SM_MEDIACENTER = 87 +SM_STARTER = 88 +SM_SERVERR2 = 89 SM_MOUSEHORIZONTALWHEELPRESENT = 91 -SM_CXPADDEDBORDER = 92 +SM_CXPADDEDBORDER = 92 -SM_CMETRICS = 93 +SM_CMETRICS = 93 -SM_REMOTESESSION = 0x1000 -SM_SHUTTINGDOWN = 0x2000 -SM_REMOTECONTROL = 0x2001 +SM_REMOTESESSION = 0x1000 +SM_SHUTTINGDOWN = 0x2000 +SM_REMOTECONTROL = 0x2001 SM_CARETBLINKINGENABLED = 0x2002 -#--- SYSTEM_INFO structure, GetSystemInfo() and GetNativeSystemInfo() --------- +# --- SYSTEM_INFO structure, GetSystemInfo() and GetNativeSystemInfo() --------- # Values used by Wine # Documented values at MSDN are marked with an asterisk -PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF; # Unknown architecture. -PROCESSOR_ARCHITECTURE_INTEL = 0 # x86 (AMD or Intel) * -PROCESSOR_ARCHITECTURE_MIPS = 1 # MIPS -PROCESSOR_ARCHITECTURE_ALPHA = 2 # Alpha -PROCESSOR_ARCHITECTURE_PPC = 3 # Power PC -PROCESSOR_ARCHITECTURE_SHX = 4 # SHX -PROCESSOR_ARCHITECTURE_ARM = 5 # ARM -PROCESSOR_ARCHITECTURE_IA64 = 6 # Intel Itanium * -PROCESSOR_ARCHITECTURE_ALPHA64 = 7 # Alpha64 -PROCESSOR_ARCHITECTURE_MSIL = 8 # MSIL -PROCESSOR_ARCHITECTURE_AMD64 = 9 # x64 (AMD or Intel) * -PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10 # IA32 on Win64 -PROCESSOR_ARCHITECTURE_SPARC = 20 # Sparc (Wine) +PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF # Unknown architecture. +PROCESSOR_ARCHITECTURE_INTEL = 0 # x86 (AMD or Intel) * +PROCESSOR_ARCHITECTURE_MIPS = 1 # MIPS +PROCESSOR_ARCHITECTURE_ALPHA = 2 # Alpha +PROCESSOR_ARCHITECTURE_PPC = 3 # Power PC +PROCESSOR_ARCHITECTURE_SHX = 4 # SHX +PROCESSOR_ARCHITECTURE_ARM = 5 # ARM +PROCESSOR_ARCHITECTURE_IA64 = 6 # Intel Itanium * +PROCESSOR_ARCHITECTURE_ALPHA64 = 7 # Alpha64 +PROCESSOR_ARCHITECTURE_MSIL = 8 # MSIL +PROCESSOR_ARCHITECTURE_AMD64 = 9 # x64 (AMD or Intel) * +PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10 # IA32 on Win64 +PROCESSOR_ARCHITECTURE_SPARC = 20 # Sparc (Wine) # Values used by Wine # PROCESSOR_OPTIL value found at http://code.google.com/p/ddab-lib/ # Documented values at MSDN are marked with an asterisk -PROCESSOR_INTEL_386 = 386 # Intel i386 * -PROCESSOR_INTEL_486 = 486 # Intel i486 * -PROCESSOR_INTEL_PENTIUM = 586 # Intel Pentium * -PROCESSOR_INTEL_IA64 = 2200 # Intel IA64 (Itanium) * -PROCESSOR_AMD_X8664 = 8664 # AMD X86 64 * -PROCESSOR_MIPS_R4000 = 4000 # MIPS R4000, R4101, R3910 -PROCESSOR_ALPHA_21064 = 21064 # Alpha 210 64 -PROCESSOR_PPC_601 = 601 # PPC 601 -PROCESSOR_PPC_603 = 603 # PPC 603 -PROCESSOR_PPC_604 = 604 # PPC 604 -PROCESSOR_PPC_620 = 620 # PPC 620 -PROCESSOR_HITACHI_SH3 = 10003 # Hitachi SH3 (Windows CE) -PROCESSOR_HITACHI_SH3E = 10004 # Hitachi SH3E (Windows CE) -PROCESSOR_HITACHI_SH4 = 10005 # Hitachi SH4 (Windows CE) -PROCESSOR_MOTOROLA_821 = 821 # Motorola 821 (Windows CE) -PROCESSOR_SHx_SH3 = 103 # SHx SH3 (Windows CE) -PROCESSOR_SHx_SH4 = 104 # SHx SH4 (Windows CE) -PROCESSOR_STRONGARM = 2577 # StrongARM (Windows CE) -PROCESSOR_ARM720 = 1824 # ARM 720 (Windows CE) -PROCESSOR_ARM820 = 2080 # ARM 820 (Windows CE) -PROCESSOR_ARM920 = 2336 # ARM 920 (Windows CE) -PROCESSOR_ARM_7TDMI = 70001 # ARM 7TDMI (Windows CE) -PROCESSOR_OPTIL = 0x494F # MSIL +PROCESSOR_INTEL_386 = 386 # Intel i386 * +PROCESSOR_INTEL_486 = 486 # Intel i486 * +PROCESSOR_INTEL_PENTIUM = 586 # Intel Pentium * +PROCESSOR_INTEL_IA64 = 2200 # Intel IA64 (Itanium) * +PROCESSOR_AMD_X8664 = 8664 # AMD X86 64 * +PROCESSOR_MIPS_R4000 = 4000 # MIPS R4000, R4101, R3910 +PROCESSOR_ALPHA_21064 = 21064 # Alpha 210 64 +PROCESSOR_PPC_601 = 601 # PPC 601 +PROCESSOR_PPC_603 = 603 # PPC 603 +PROCESSOR_PPC_604 = 604 # PPC 604 +PROCESSOR_PPC_620 = 620 # PPC 620 +PROCESSOR_HITACHI_SH3 = 10003 # Hitachi SH3 (Windows CE) +PROCESSOR_HITACHI_SH3E = 10004 # Hitachi SH3E (Windows CE) +PROCESSOR_HITACHI_SH4 = 10005 # Hitachi SH4 (Windows CE) +PROCESSOR_MOTOROLA_821 = 821 # Motorola 821 (Windows CE) +PROCESSOR_SHx_SH3 = 103 # SHx SH3 (Windows CE) +PROCESSOR_SHx_SH4 = 104 # SHx SH4 (Windows CE) +PROCESSOR_STRONGARM = 2577 # StrongARM (Windows CE) +PROCESSOR_ARM720 = 1824 # ARM 720 (Windows CE) +PROCESSOR_ARM820 = 2080 # ARM 820 (Windows CE) +PROCESSOR_ARM920 = 2336 # ARM 920 (Windows CE) +PROCESSOR_ARM_7TDMI = 70001 # ARM 7TDMI (Windows CE) +PROCESSOR_OPTIL = 0x494F # MSIL # typedef struct _SYSTEM_INFO { # union { @@ -358,102 +365,117 @@ class OSVERSIONINFOEXW(Structure): # WORD wProcessorRevision; # } SYSTEM_INFO; + class _SYSTEM_INFO_OEM_ID_STRUCT(Structure): _fields_ = [ - ("wProcessorArchitecture", WORD), - ("wReserved", WORD), -] + ("wProcessorArchitecture", WORD), + ("wReserved", WORD), + ] + class _SYSTEM_INFO_OEM_ID(Union): _fields_ = [ - ("dwOemId", DWORD), - ("w", _SYSTEM_INFO_OEM_ID_STRUCT), -] + ("dwOemId", DWORD), + ("w", _SYSTEM_INFO_OEM_ID_STRUCT), + ] + class SYSTEM_INFO(Structure): _fields_ = [ - ("id", _SYSTEM_INFO_OEM_ID), - ("dwPageSize", DWORD), - ("lpMinimumApplicationAddress", LPVOID), - ("lpMaximumApplicationAddress", LPVOID), - ("dwActiveProcessorMask", DWORD_PTR), - ("dwNumberOfProcessors", DWORD), - ("dwProcessorType", DWORD), - ("dwAllocationGranularity", DWORD), - ("wProcessorLevel", WORD), - ("wProcessorRevision", WORD), + ("id", _SYSTEM_INFO_OEM_ID), + ("dwPageSize", DWORD), + ("lpMinimumApplicationAddress", LPVOID), + ("lpMaximumApplicationAddress", LPVOID), + ("dwActiveProcessorMask", DWORD_PTR), + ("dwNumberOfProcessors", DWORD), + ("dwProcessorType", DWORD), + ("dwAllocationGranularity", DWORD), + ("wProcessorLevel", WORD), + ("wProcessorRevision", WORD), ] def __get_dwOemId(self): return self.id.dwOemId + def __set_dwOemId(self, value): self.id.dwOemId = value + dwOemId = property(__get_dwOemId, __set_dwOemId) def __get_wProcessorArchitecture(self): return self.id.w.wProcessorArchitecture + def __set_wProcessorArchitecture(self, value): self.id.w.wProcessorArchitecture = value + wProcessorArchitecture = property(__get_wProcessorArchitecture, __set_wProcessorArchitecture) + LPSYSTEM_INFO = ctypes.POINTER(SYSTEM_INFO) + # void WINAPI GetSystemInfo( # __out LPSYSTEM_INFO lpSystemInfo # ); def GetSystemInfo(): _GetSystemInfo = windll.kernel32.GetSystemInfo _GetSystemInfo.argtypes = [LPSYSTEM_INFO] - _GetSystemInfo.restype = None + _GetSystemInfo.restype = None sysinfo = SYSTEM_INFO() _GetSystemInfo(byref(sysinfo)) return sysinfo + # void WINAPI GetNativeSystemInfo( # __out LPSYSTEM_INFO lpSystemInfo # ); def GetNativeSystemInfo(): _GetNativeSystemInfo = windll.kernel32.GetNativeSystemInfo _GetNativeSystemInfo.argtypes = [LPSYSTEM_INFO] - _GetNativeSystemInfo.restype = None + _GetNativeSystemInfo.restype = None sysinfo = SYSTEM_INFO() _GetNativeSystemInfo(byref(sysinfo)) return sysinfo + # int WINAPI GetSystemMetrics( # __in int nIndex # ); def GetSystemMetrics(nIndex): _GetSystemMetrics = windll.user32.GetSystemMetrics _GetSystemMetrics.argtypes = [ctypes.c_int] - _GetSystemMetrics.restype = ctypes.c_int + _GetSystemMetrics.restype = ctypes.c_int return _GetSystemMetrics(nIndex) + # SIZE_T WINAPI GetLargePageMinimum(void); def GetLargePageMinimum(): _GetLargePageMinimum = windll.user32.GetLargePageMinimum _GetLargePageMinimum.argtypes = [] - _GetLargePageMinimum.restype = SIZE_T + _GetLargePageMinimum.restype = SIZE_T return _GetLargePageMinimum() + # HANDLE WINAPI GetCurrentProcess(void); def GetCurrentProcess(): -## return 0xFFFFFFFFFFFFFFFFL + ## return 0xFFFFFFFFFFFFFFFFL _GetCurrentProcess = windll.kernel32.GetCurrentProcess _GetCurrentProcess.argtypes = [] - _GetCurrentProcess.restype = HANDLE + _GetCurrentProcess.restype = HANDLE return _GetCurrentProcess() + # HANDLE WINAPI GetCurrentThread(void); def GetCurrentThread(): -## return 0xFFFFFFFFFFFFFFFEL + ## return 0xFFFFFFFFFFFFFFFEL _GetCurrentThread = windll.kernel32.GetCurrentThread _GetCurrentThread.argtypes = [] - _GetCurrentThread.restype = HANDLE + _GetCurrentThread.restype = HANDLE return _GetCurrentThread() + # BOOL WINAPI IsWow64Process( # __in HANDLE hProcess, # __out PBOOL Wow64Process @@ -461,39 +483,41 @@ def GetCurrentThread(): def IsWow64Process(hProcess): _IsWow64Process = windll.kernel32.IsWow64Process _IsWow64Process.argtypes = [HANDLE, PBOOL] - _IsWow64Process.restype = bool + _IsWow64Process.restype = bool _IsWow64Process.errcheck = RaiseIfZero Wow64Process = BOOL(FALSE) _IsWow64Process(hProcess, byref(Wow64Process)) return bool(Wow64Process) + # DWORD WINAPI GetVersion(void); def GetVersion(): _GetVersion = windll.kernel32.GetVersion _GetVersion.argtypes = [] - _GetVersion.restype = DWORD + _GetVersion.restype = DWORD _GetVersion.errcheck = RaiseIfZero # See the example code here: # http://msdn.microsoft.com/en-us/library/ms724439(VS.85).aspx - dwVersion = _GetVersion() - dwMajorVersion = dwVersion & 0x000000FF - dwMinorVersion = (dwVersion & 0x0000FF00) >> 8 + dwVersion = _GetVersion() + dwMajorVersion = dwVersion & 0x000000FF + dwMinorVersion = (dwVersion & 0x0000FF00) >> 8 if (dwVersion & 0x80000000) == 0: - dwBuild = (dwVersion & 0x7FFF0000) >> 16 + dwBuild = (dwVersion & 0x7FFF0000) >> 16 else: - dwBuild = None + dwBuild = None return int(dwMajorVersion), int(dwMinorVersion), int(dwBuild) + # BOOL WINAPI GetVersionEx( # __inout LPOSVERSIONINFO lpVersionInfo # ); def GetVersionExA(): _GetVersionExA = windll.kernel32.GetVersionExA _GetVersionExA.argtypes = [POINTER(OSVERSIONINFOEXA)] - _GetVersionExA.restype = bool + _GetVersionExA.restype = bool _GetVersionExA.errcheck = RaiseIfZero osi = OSVERSIONINFOEXA() @@ -507,10 +531,11 @@ def GetVersionExA(): _GetVersionExA(byref(osi)) return osi + def GetVersionExW(): _GetVersionExW = windll.kernel32.GetVersionExW _GetVersionExW.argtypes = [POINTER(OSVERSIONINFOEXW)] - _GetVersionExW.restype = bool + _GetVersionExW.restype = bool _GetVersionExW.errcheck = RaiseIfZero osi = OSVERSIONINFOEXW() @@ -524,8 +549,10 @@ def GetVersionExW(): _GetVersionExW(byref(osi)) return osi + GetVersionEx = GuessStringType(GetVersionExA, GetVersionExW) + # BOOL WINAPI GetProductInfo( # __in DWORD dwOSMajorVersion, # __in DWORD dwOSMinorVersion, @@ -536,13 +563,14 @@ def GetVersionExW(): def GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion): _GetProductInfo = windll.kernel32.GetProductInfo _GetProductInfo.argtypes = [DWORD, DWORD, DWORD, DWORD, PDWORD] - _GetProductInfo.restype = BOOL + _GetProductInfo.restype = BOOL _GetProductInfo.errcheck = RaiseIfZero dwReturnedProductType = DWORD(0) _GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion, byref(dwReturnedProductType)) return dwReturnedProductType.value + # BOOL WINAPI VerifyVersionInfo( # __in LPOSVERSIONINFOEX lpVersionInfo, # __in DWORD dwTypeMask, @@ -555,18 +583,21 @@ def VerifyVersionInfo(lpVersionInfo, dwTypeMask, dwlConditionMask): return VerifyVersionInfoW(lpVersionInfo, dwTypeMask, dwlConditionMask) raise TypeError("Bad OSVERSIONINFOEX structure") + def VerifyVersionInfoA(lpVersionInfo, dwTypeMask, dwlConditionMask): _VerifyVersionInfoA = windll.kernel32.VerifyVersionInfoA _VerifyVersionInfoA.argtypes = [LPOSVERSIONINFOEXA, DWORD, DWORDLONG] - _VerifyVersionInfoA.restype = bool + _VerifyVersionInfoA.restype = bool return _VerifyVersionInfoA(byref(lpVersionInfo), dwTypeMask, dwlConditionMask) + def VerifyVersionInfoW(lpVersionInfo, dwTypeMask, dwlConditionMask): _VerifyVersionInfoW = windll.kernel32.VerifyVersionInfoW _VerifyVersionInfoW.argtypes = [LPOSVERSIONINFOEXW, DWORD, DWORDLONG] - _VerifyVersionInfoW.restype = bool + _VerifyVersionInfoW.restype = bool return _VerifyVersionInfoW(byref(lpVersionInfo), dwTypeMask, dwlConditionMask) + # ULONGLONG WINAPI VerSetConditionMask( # __in ULONGLONG dwlConditionMask, # __in DWORD dwTypeBitMask, @@ -575,33 +606,34 @@ def VerifyVersionInfoW(lpVersionInfo, dwTypeMask, dwlConditionMask): def VerSetConditionMask(dwlConditionMask, dwTypeBitMask, dwConditionMask): _VerSetConditionMask = windll.kernel32.VerSetConditionMask _VerSetConditionMask.argtypes = [ULONGLONG, DWORD, BYTE] - _VerSetConditionMask.restype = ULONGLONG + _VerSetConditionMask.restype = ULONGLONG return _VerSetConditionMask(dwlConditionMask, dwTypeBitMask, dwConditionMask) -#--- get_bits, get_arch and get_os -------------------------------------------- - -ARCH_UNKNOWN = "unknown" -ARCH_I386 = "i386" -ARCH_MIPS = "mips" -ARCH_ALPHA = "alpha" -ARCH_PPC = "ppc" -ARCH_SHX = "shx" -ARCH_ARM = "arm" -ARCH_ARM64 = "arm64" -ARCH_THUMB = "thumb" -ARCH_IA64 = "ia64" -ARCH_ALPHA64 = "alpha64" -ARCH_MSIL = "msil" -ARCH_AMD64 = "amd64" -ARCH_SPARC = "sparc" + +# --- get_bits, get_arch and get_os -------------------------------------------- + +ARCH_UNKNOWN = "unknown" +ARCH_I386 = "i386" +ARCH_MIPS = "mips" +ARCH_ALPHA = "alpha" +ARCH_PPC = "ppc" +ARCH_SHX = "shx" +ARCH_ARM = "arm" +ARCH_ARM64 = "arm64" +ARCH_THUMB = "thumb" +ARCH_IA64 = "ia64" +ARCH_ALPHA64 = "alpha64" +ARCH_MSIL = "msil" +ARCH_AMD64 = "amd64" +ARCH_SPARC = "sparc" # aliases -ARCH_IA32 = ARCH_I386 -ARCH_X86 = ARCH_I386 -ARCH_X64 = ARCH_AMD64 -ARCH_ARM7 = ARCH_ARM -ARCH_ARM8 = ARCH_ARM64 -ARCH_T32 = ARCH_THUMB +ARCH_IA32 = ARCH_I386 +ARCH_X86 = ARCH_I386 +ARCH_X64 = ARCH_AMD64 +ARCH_ARM7 = ARCH_ARM +ARCH_ARM8 = ARCH_ARM64 +ARCH_T32 = ARCH_THUMB ARCH_AARCH32 = ARCH_ARM7 ARCH_AARCH64 = ARCH_ARM8 ARCH_POWERPC = ARCH_PPC @@ -610,56 +642,57 @@ def VerSetConditionMask(dwlConditionMask, dwTypeBitMask, dwConditionMask): # win32 constants -> our constants _arch_map = { - PROCESSOR_ARCHITECTURE_INTEL : ARCH_I386, - PROCESSOR_ARCHITECTURE_MIPS : ARCH_MIPS, - PROCESSOR_ARCHITECTURE_ALPHA : ARCH_ALPHA, - PROCESSOR_ARCHITECTURE_PPC : ARCH_PPC, - PROCESSOR_ARCHITECTURE_SHX : ARCH_SHX, - PROCESSOR_ARCHITECTURE_ARM : ARCH_ARM, - PROCESSOR_ARCHITECTURE_IA64 : ARCH_IA64, - PROCESSOR_ARCHITECTURE_ALPHA64 : ARCH_ALPHA64, - PROCESSOR_ARCHITECTURE_MSIL : ARCH_MSIL, - PROCESSOR_ARCHITECTURE_AMD64 : ARCH_AMD64, - PROCESSOR_ARCHITECTURE_SPARC : ARCH_SPARC, + PROCESSOR_ARCHITECTURE_INTEL: ARCH_I386, + PROCESSOR_ARCHITECTURE_MIPS: ARCH_MIPS, + PROCESSOR_ARCHITECTURE_ALPHA: ARCH_ALPHA, + PROCESSOR_ARCHITECTURE_PPC: ARCH_PPC, + PROCESSOR_ARCHITECTURE_SHX: ARCH_SHX, + PROCESSOR_ARCHITECTURE_ARM: ARCH_ARM, + PROCESSOR_ARCHITECTURE_IA64: ARCH_IA64, + PROCESSOR_ARCHITECTURE_ALPHA64: ARCH_ALPHA64, + PROCESSOR_ARCHITECTURE_MSIL: ARCH_MSIL, + PROCESSOR_ARCHITECTURE_AMD64: ARCH_AMD64, + PROCESSOR_ARCHITECTURE_SPARC: ARCH_SPARC, } -OS_UNKNOWN = "Unknown" -OS_NT = "Windows NT" -OS_W2K = "Windows 2000" -OS_XP = "Windows XP" -OS_XP_64 = "Windows XP (64 bits)" -OS_W2K3 = "Windows 2003" -OS_W2K3_64 = "Windows 2003 (64 bits)" -OS_W2K3R2 = "Windows 2003 R2" +OS_UNKNOWN = "Unknown" +OS_NT = "Windows NT" +OS_W2K = "Windows 2000" +OS_XP = "Windows XP" +OS_XP_64 = "Windows XP (64 bits)" +OS_W2K3 = "Windows 2003" +OS_W2K3_64 = "Windows 2003 (64 bits)" +OS_W2K3R2 = "Windows 2003 R2" OS_W2K3R2_64 = "Windows 2003 R2 (64 bits)" -OS_W2K8 = "Windows 2008" -OS_W2K8_64 = "Windows 2008 (64 bits)" -OS_W2K8R2 = "Windows 2008 R2" +OS_W2K8 = "Windows 2008" +OS_W2K8_64 = "Windows 2008 (64 bits)" +OS_W2K8R2 = "Windows 2008 R2" OS_W2K8R2_64 = "Windows 2008 R2 (64 bits)" -OS_VISTA = "Windows Vista" -OS_VISTA_64 = "Windows Vista (64 bits)" -OS_W7 = "Windows 7" -OS_W7_64 = "Windows 7 (64 bits)" +OS_VISTA = "Windows Vista" +OS_VISTA_64 = "Windows Vista (64 bits)" +OS_W7 = "Windows 7" +OS_W7_64 = "Windows 7 (64 bits)" -OS_SEVEN = OS_W7 +OS_SEVEN = OS_W7 OS_SEVEN_64 = OS_W7_64 -OS_WINDOWS_NT = OS_NT -OS_WINDOWS_2000 = OS_W2K -OS_WINDOWS_XP = OS_XP -OS_WINDOWS_XP_64 = OS_XP_64 -OS_WINDOWS_2003 = OS_W2K3 -OS_WINDOWS_2003_64 = OS_W2K3_64 -OS_WINDOWS_2003_R2 = OS_W2K3R2 +OS_WINDOWS_NT = OS_NT +OS_WINDOWS_2000 = OS_W2K +OS_WINDOWS_XP = OS_XP +OS_WINDOWS_XP_64 = OS_XP_64 +OS_WINDOWS_2003 = OS_W2K3 +OS_WINDOWS_2003_64 = OS_W2K3_64 +OS_WINDOWS_2003_R2 = OS_W2K3R2 OS_WINDOWS_2003_R2_64 = OS_W2K3R2_64 -OS_WINDOWS_2008 = OS_W2K8 -OS_WINDOWS_2008_64 = OS_W2K8_64 -OS_WINDOWS_2008_R2 = OS_W2K8R2 +OS_WINDOWS_2008 = OS_W2K8 +OS_WINDOWS_2008_64 = OS_W2K8_64 +OS_WINDOWS_2008_R2 = OS_W2K8R2 OS_WINDOWS_2008_R2_64 = OS_W2K8R2_64 -OS_WINDOWS_VISTA = OS_VISTA -OS_WINDOWS_VISTA_64 = OS_VISTA_64 -OS_WINDOWS_SEVEN = OS_W7 -OS_WINDOWS_SEVEN_64 = OS_W7_64 +OS_WINDOWS_VISTA = OS_VISTA +OS_WINDOWS_VISTA_64 = OS_VISTA_64 +OS_WINDOWS_SEVEN = OS_W7 +OS_WINDOWS_SEVEN_64 = OS_W7_64 + def _get_bits(): """ @@ -672,6 +705,7 @@ def _get_bits(): """ return sizeof(SIZE_T) * 8 + def _get_arch(): """ Determines the current processor architecture. @@ -715,6 +749,7 @@ def _get_arch(): except KeyError: return ARCH_UNKNOWN + def _get_wow64(): """ Determines if the current process is running in Windows-On-Windows 64 bits. @@ -730,12 +765,13 @@ def _get_wow64(): wow64 = False else: try: - wow64 = IsWow64Process( GetCurrentProcess() ) + wow64 = IsWow64Process(GetCurrentProcess()) except Exception: wow64 = False return wow64 -def _get_os(osvi = None): + +def _get_os(osvi=None): """ Determines the current operating system. @@ -780,44 +816,45 @@ def _get_os(osvi = None): if osvi.dwMinorVersion == 0: if osvi.wProductType == VER_NT_WORKSTATION: if bits == 64 or wow64: - return 'Windows Vista (64 bits)' - return 'Windows Vista' + return "Windows Vista (64 bits)" + return "Windows Vista" else: if bits == 64 or wow64: - return 'Windows 2008 (64 bits)' - return 'Windows 2008' + return "Windows 2008 (64 bits)" + return "Windows 2008" if osvi.dwMinorVersion == 1: if osvi.wProductType == VER_NT_WORKSTATION: if bits == 64 or wow64: - return 'Windows 7 (64 bits)' - return 'Windows 7' + return "Windows 7 (64 bits)" + return "Windows 7" else: if bits == 64 or wow64: - return 'Windows 2008 R2 (64 bits)' - return 'Windows 2008 R2' + return "Windows 2008 R2 (64 bits)" + return "Windows 2008 R2" if osvi.dwMajorVersion == 5: if osvi.dwMinorVersion == 2: if GetSystemMetrics(SM_SERVERR2): if bits == 64 or wow64: - return 'Windows 2003 R2 (64 bits)' - return 'Windows 2003 R2' + return "Windows 2003 R2 (64 bits)" + return "Windows 2003 R2" if osvi.wSuiteMask in (VER_SUITE_STORAGE_SERVER, VER_SUITE_WH_SERVER): if bits == 64 or wow64: - return 'Windows 2003 (64 bits)' - return 'Windows 2003' + return "Windows 2003 (64 bits)" + return "Windows 2003" if osvi.wProductType == VER_NT_WORKSTATION and arch == ARCH_AMD64: - return 'Windows XP (64 bits)' + return "Windows XP (64 bits)" else: if bits == 64 or wow64: - return 'Windows 2003 (64 bits)' - return 'Windows 2003' + return "Windows 2003 (64 bits)" + return "Windows 2003" if osvi.dwMinorVersion == 1: - return 'Windows XP' + return "Windows XP" if osvi.dwMinorVersion == 0: - return 'Windows 2000' + return "Windows 2000" if osvi.dwMajorVersion == 4: - return 'Windows NT' - return 'Unknown' + return "Windows NT" + return "Unknown" + def _get_ntddi(osvi): """ @@ -841,12 +878,13 @@ def _get_ntddi(osvi): if not osvi: osvi = GetVersionEx() ntddi = 0 - ntddi += (osvi.dwMajorVersion & 0xFF) << 24 - ntddi += (osvi.dwMinorVersion & 0xFF) << 16 + ntddi += (osvi.dwMajorVersion & 0xFF) << 24 + ntddi += (osvi.dwMinorVersion & 0xFF) << 16 ntddi += (osvi.wServicePackMajor & 0xFF) << 8 - ntddi += (osvi.wServicePackMinor & 0xFF) + ntddi += osvi.wServicePackMinor & 0xFF return ntddi + # The order of the following definitions DOES matter! # Current integer size in bits. See L{_get_bits} for more details. @@ -869,58 +907,59 @@ def _get_ntddi(osvi): # Upper word of L{NTDDI_VERSION}, contains the OS major and minor version number. WINVER = NTDDI_VERSION >> 16 -#--- version.dll -------------------------------------------------------------- - -VS_FF_DEBUG = 0x00000001 -VS_FF_PRERELEASE = 0x00000002 -VS_FF_PATCHED = 0x00000004 -VS_FF_PRIVATEBUILD = 0x00000008 -VS_FF_INFOINFERRED = 0x00000010 -VS_FF_SPECIALBUILD = 0x00000020 - -VOS_UNKNOWN = 0x00000000 -VOS__WINDOWS16 = 0x00000001 -VOS__PM16 = 0x00000002 -VOS__PM32 = 0x00000003 -VOS__WINDOWS32 = 0x00000004 -VOS_DOS = 0x00010000 -VOS_OS216 = 0x00020000 -VOS_OS232 = 0x00030000 -VOS_NT = 0x00040000 - -VOS_DOS_WINDOWS16 = 0x00010001 -VOS_DOS_WINDOWS32 = 0x00010004 -VOS_NT_WINDOWS32 = 0x00040004 -VOS_OS216_PM16 = 0x00020002 -VOS_OS232_PM32 = 0x00030003 - -VFT_UNKNOWN = 0x00000000 -VFT_APP = 0x00000001 -VFT_DLL = 0x00000002 -VFT_DRV = 0x00000003 -VFT_FONT = 0x00000004 -VFT_VXD = 0x00000005 -VFT_RESERVED = 0x00000006 # undocumented -VFT_STATIC_LIB = 0x00000007 - -VFT2_UNKNOWN = 0x00000000 - -VFT2_DRV_PRINTER = 0x00000001 -VFT2_DRV_KEYBOARD = 0x00000002 -VFT2_DRV_LANGUAGE = 0x00000003 -VFT2_DRV_DISPLAY = 0x00000004 -VFT2_DRV_MOUSE = 0x00000005 -VFT2_DRV_NETWORK = 0x00000006 -VFT2_DRV_SYSTEM = 0x00000007 -VFT2_DRV_INSTALLABLE = 0x00000008 -VFT2_DRV_SOUND = 0x00000009 -VFT2_DRV_COMM = 0x0000000A -VFT2_DRV_RESERVED = 0x0000000B # undocumented -VFT2_DRV_VERSIONED_PRINTER = 0x0000000C - -VFT2_FONT_RASTER = 0x00000001 -VFT2_FONT_VECTOR = 0x00000002 -VFT2_FONT_TRUETYPE = 0x00000003 +# --- version.dll -------------------------------------------------------------- + +VS_FF_DEBUG = 0x00000001 +VS_FF_PRERELEASE = 0x00000002 +VS_FF_PATCHED = 0x00000004 +VS_FF_PRIVATEBUILD = 0x00000008 +VS_FF_INFOINFERRED = 0x00000010 +VS_FF_SPECIALBUILD = 0x00000020 + +VOS_UNKNOWN = 0x00000000 +VOS__WINDOWS16 = 0x00000001 +VOS__PM16 = 0x00000002 +VOS__PM32 = 0x00000003 +VOS__WINDOWS32 = 0x00000004 +VOS_DOS = 0x00010000 +VOS_OS216 = 0x00020000 +VOS_OS232 = 0x00030000 +VOS_NT = 0x00040000 + +VOS_DOS_WINDOWS16 = 0x00010001 +VOS_DOS_WINDOWS32 = 0x00010004 +VOS_NT_WINDOWS32 = 0x00040004 +VOS_OS216_PM16 = 0x00020002 +VOS_OS232_PM32 = 0x00030003 + +VFT_UNKNOWN = 0x00000000 +VFT_APP = 0x00000001 +VFT_DLL = 0x00000002 +VFT_DRV = 0x00000003 +VFT_FONT = 0x00000004 +VFT_VXD = 0x00000005 +VFT_RESERVED = 0x00000006 # undocumented +VFT_STATIC_LIB = 0x00000007 + +VFT2_UNKNOWN = 0x00000000 + +VFT2_DRV_PRINTER = 0x00000001 +VFT2_DRV_KEYBOARD = 0x00000002 +VFT2_DRV_LANGUAGE = 0x00000003 +VFT2_DRV_DISPLAY = 0x00000004 +VFT2_DRV_MOUSE = 0x00000005 +VFT2_DRV_NETWORK = 0x00000006 +VFT2_DRV_SYSTEM = 0x00000007 +VFT2_DRV_INSTALLABLE = 0x00000008 +VFT2_DRV_SOUND = 0x00000009 +VFT2_DRV_COMM = 0x0000000A +VFT2_DRV_RESERVED = 0x0000000B # undocumented +VFT2_DRV_VERSIONED_PRINTER = 0x0000000C + +VFT2_FONT_RASTER = 0x00000001 +VFT2_FONT_VECTOR = 0x00000002 +VFT2_FONT_TRUETYPE = 0x00000003 + # typedef struct tagVS_FIXEDFILEINFO { # DWORD dwSignature; @@ -939,23 +978,26 @@ def _get_ntddi(osvi): # } VS_FIXEDFILEINFO; class VS_FIXEDFILEINFO(Structure): _fields_ = [ - ("dwSignature", DWORD), - ("dwStrucVersion", DWORD), - ("dwFileVersionMS", DWORD), - ("dwFileVersionLS", DWORD), - ("dwProductVersionMS", DWORD), - ("dwProductVersionLS", DWORD), - ("dwFileFlagsMask", DWORD), - ("dwFileFlags", DWORD), - ("dwFileOS", DWORD), - ("dwFileType", DWORD), - ("dwFileSubtype", DWORD), - ("dwFileDateMS", DWORD), - ("dwFileDateLS", DWORD), -] + ("dwSignature", DWORD), + ("dwStrucVersion", DWORD), + ("dwFileVersionMS", DWORD), + ("dwFileVersionLS", DWORD), + ("dwProductVersionMS", DWORD), + ("dwProductVersionLS", DWORD), + ("dwFileFlagsMask", DWORD), + ("dwFileFlags", DWORD), + ("dwFileOS", DWORD), + ("dwFileType", DWORD), + ("dwFileSubtype", DWORD), + ("dwFileDateMS", DWORD), + ("dwFileDateLS", DWORD), + ] + + PVS_FIXEDFILEINFO = POINTER(VS_FIXEDFILEINFO) LPVS_FIXEDFILEINFO = PVS_FIXEDFILEINFO + # BOOL WINAPI GetFileVersionInfo( # _In_ LPCTSTR lptstrFilename, # _Reserved_ DWORD dwHandle, @@ -969,12 +1011,12 @@ class VS_FIXEDFILEINFO(Structure): def GetFileVersionInfoA(lptstrFilename): _GetFileVersionInfoA = windll.version.GetFileVersionInfoA _GetFileVersionInfoA.argtypes = [LPSTR, DWORD, DWORD, LPVOID] - _GetFileVersionInfoA.restype = bool + _GetFileVersionInfoA.restype = bool _GetFileVersionInfoA.errcheck = RaiseIfZero _GetFileVersionInfoSizeA = windll.version.GetFileVersionInfoSizeA _GetFileVersionInfoSizeA.argtypes = [LPSTR, LPVOID] - _GetFileVersionInfoSizeA.restype = DWORD + _GetFileVersionInfoSizeA.restype = DWORD _GetFileVersionInfoSizeA.errcheck = RaiseIfZero dwLen = _GetFileVersionInfoSizeA(lptstrFilename, None) @@ -982,15 +1024,16 @@ def GetFileVersionInfoA(lptstrFilename): _GetFileVersionInfoA(lptstrFilename, 0, dwLen, byref(lpData)) return lpData + def GetFileVersionInfoW(lptstrFilename): _GetFileVersionInfoW = windll.version.GetFileVersionInfoW _GetFileVersionInfoW.argtypes = [LPWSTR, DWORD, DWORD, LPVOID] - _GetFileVersionInfoW.restype = bool + _GetFileVersionInfoW.restype = bool _GetFileVersionInfoW.errcheck = RaiseIfZero _GetFileVersionInfoSizeW = windll.version.GetFileVersionInfoSizeW _GetFileVersionInfoSizeW.argtypes = [LPWSTR, LPVOID] - _GetFileVersionInfoSizeW.restype = DWORD + _GetFileVersionInfoSizeW.restype = DWORD _GetFileVersionInfoSizeW.errcheck = RaiseIfZero dwLen = _GetFileVersionInfoSizeW(lptstrFilename, None) @@ -998,8 +1041,10 @@ def GetFileVersionInfoW(lptstrFilename): _GetFileVersionInfoW(lptstrFilename, 0, dwLen, byref(lpData)) return lpData + GetFileVersionInfo = GuessStringType(GetFileVersionInfoA, GetFileVersionInfoW) + # BOOL WINAPI VerQueryValue( # _In_ LPCVOID pBlock, # _In_ LPCTSTR lpSubBlock, @@ -1009,7 +1054,7 @@ def GetFileVersionInfoW(lptstrFilename): def VerQueryValueA(pBlock, lpSubBlock): _VerQueryValueA = windll.version.VerQueryValueA _VerQueryValueA.argtypes = [LPVOID, LPSTR, LPVOID, POINTER(UINT)] - _VerQueryValueA.restype = bool + _VerQueryValueA.restype = bool _VerQueryValueA.errcheck = RaiseIfZero lpBuffer = LPVOID(0) @@ -1017,10 +1062,11 @@ def VerQueryValueA(pBlock, lpSubBlock): _VerQueryValueA(pBlock, lpSubBlock, byref(lpBuffer), byref(uLen)) return lpBuffer, uLen.value + def VerQueryValueW(pBlock, lpSubBlock): _VerQueryValueW = windll.version.VerQueryValueW _VerQueryValueW.argtypes = [LPVOID, LPWSTR, LPVOID, POINTER(UINT)] - _VerQueryValueW.restype = bool + _VerQueryValueW.restype = bool _VerQueryValueW.errcheck = RaiseIfZero lpBuffer = LPVOID(0) @@ -1028,11 +1074,12 @@ def VerQueryValueW(pBlock, lpSubBlock): _VerQueryValueW(pBlock, lpSubBlock, byref(lpBuffer), byref(uLen)) return lpBuffer, uLen.value + VerQueryValue = GuessStringType(VerQueryValueA, VerQueryValueW) -#============================================================================== +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py index 13227db32..438094a18 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/win32/wtsapi32.py @@ -37,18 +37,18 @@ from winappdbg.win32.defines import * from winappdbg.win32.advapi32 import * -#============================================================================== +# ============================================================================== # This is used later on to calculate the list of exported symbols. _all = None _all = set(vars().keys()) -#============================================================================== +# ============================================================================== -#--- Constants ---------------------------------------------------------------- +# --- Constants ---------------------------------------------------------------- WTS_CURRENT_SERVER_HANDLE = 0 -WTS_CURRENT_SESSION = 1 +WTS_CURRENT_SESSION = 1 -#--- WTS_PROCESS_INFO structure ----------------------------------------------- +# --- WTS_PROCESS_INFO structure ----------------------------------------------- # typedef struct _WTS_PROCESS_INFO { # DWORD SessionId; @@ -57,25 +57,31 @@ # PSID pUserSid; # } WTS_PROCESS_INFO, *PWTS_PROCESS_INFO; + class WTS_PROCESS_INFOA(Structure): _fields_ = [ - ("SessionId", DWORD), - ("ProcessId", DWORD), + ("SessionId", DWORD), + ("ProcessId", DWORD), ("pProcessName", LPSTR), - ("pUserSid", PSID), + ("pUserSid", PSID), ] + + PWTS_PROCESS_INFOA = POINTER(WTS_PROCESS_INFOA) + class WTS_PROCESS_INFOW(Structure): _fields_ = [ - ("SessionId", DWORD), - ("ProcessId", DWORD), + ("SessionId", DWORD), + ("ProcessId", DWORD), ("pProcessName", LPWSTR), - ("pUserSid", PSID), + ("pUserSid", PSID), ] + + PWTS_PROCESS_INFOW = POINTER(WTS_PROCESS_INFOW) -#--- WTSQuerySessionInformation enums and structures -------------------------- +# --- WTSQuerySessionInformation enums and structures -------------------------- # typedef enum _WTS_INFO_CLASS { # WTSInitialProgram = 0, @@ -110,36 +116,36 @@ class WTS_PROCESS_INFOW(Structure): # WTSIsRemoteSession = 29 # } WTS_INFO_CLASS; -WTSInitialProgram = 0 -WTSApplicationName = 1 -WTSWorkingDirectory = 2 -WTSOEMId = 3 -WTSSessionId = 4 -WTSUserName = 5 -WTSWinStationName = 6 -WTSDomainName = 7 -WTSConnectState = 8 -WTSClientBuildNumber = 9 -WTSClientName = 10 -WTSClientDirectory = 11 -WTSClientProductId = 12 -WTSClientHardwareId = 13 -WTSClientAddress = 14 -WTSClientDisplay = 15 -WTSClientProtocolType = 16 -WTSIdleTime = 17 -WTSLogonTime = 18 -WTSIncomingBytes = 19 -WTSOutgoingBytes = 20 -WTSIncomingFrames = 21 -WTSOutgoingFrames = 22 -WTSClientInfo = 23 -WTSSessionInfo = 24 -WTSSessionInfoEx = 25 -WTSConfigInfo = 26 -WTSValidationInfo = 27 -WTSSessionAddressV4 = 28 -WTSIsRemoteSession = 29 +WTSInitialProgram = 0 +WTSApplicationName = 1 +WTSWorkingDirectory = 2 +WTSOEMId = 3 +WTSSessionId = 4 +WTSUserName = 5 +WTSWinStationName = 6 +WTSDomainName = 7 +WTSConnectState = 8 +WTSClientBuildNumber = 9 +WTSClientName = 10 +WTSClientDirectory = 11 +WTSClientProductId = 12 +WTSClientHardwareId = 13 +WTSClientAddress = 14 +WTSClientDisplay = 15 +WTSClientProtocolType = 16 +WTSIdleTime = 17 +WTSLogonTime = 18 +WTSIncomingBytes = 19 +WTSOutgoingBytes = 20 +WTSIncomingFrames = 21 +WTSOutgoingFrames = 22 +WTSClientInfo = 23 +WTSSessionInfo = 24 +WTSSessionInfoEx = 25 +WTSConfigInfo = 26 +WTSValidationInfo = 27 +WTSSessionAddressV4 = 28 +WTSIsRemoteSession = 29 WTS_INFO_CLASS = ctypes.c_int @@ -156,19 +162,20 @@ class WTS_PROCESS_INFOW(Structure): # WTSInit # } WTS_CONNECTSTATE_CLASS; -WTSActive = 0 -WTSConnected = 1 +WTSActive = 0 +WTSConnected = 1 WTSConnectQuery = 2 -WTSShadow = 3 +WTSShadow = 3 WTSDisconnected = 4 -WTSIdle = 5 -WTSListen = 6 -WTSReset = 7 -WTSDown = 8 -WTSInit = 9 +WTSIdle = 5 +WTSListen = 6 +WTSReset = 7 +WTSDown = 8 +WTSInit = 9 WTS_CONNECTSTATE_CLASS = ctypes.c_int + # typedef struct _WTS_CLIENT_DISPLAY { # DWORD HorizontalResolution; # DWORD VerticalResolution; @@ -177,9 +184,11 @@ class WTS_PROCESS_INFOW(Structure): class WTS_CLIENT_DISPLAY(Structure): _fields_ = [ ("HorizontalResolution", DWORD), - ("VerticalResolution", DWORD), - ("ColorDepth", DWORD), + ("VerticalResolution", DWORD), + ("ColorDepth", DWORD), ] + + PWTS_CLIENT_DISPLAY = POINTER(WTS_CLIENT_DISPLAY) # typedef struct _WTS_CLIENT_ADDRESS { @@ -239,7 +248,8 @@ class WTS_CLIENT_DISPLAY(Structure): # XXX TODO -#--- wtsapi32.dll ------------------------------------------------------------- +# --- wtsapi32.dll ------------------------------------------------------------- + # void WTSFreeMemory( # __in PVOID pMemory @@ -247,9 +257,10 @@ class WTS_CLIENT_DISPLAY(Structure): def WTSFreeMemory(pMemory): _WTSFreeMemory = windll.wtsapi32.WTSFreeMemory _WTSFreeMemory.argtypes = [PVOID] - _WTSFreeMemory.restype = None + _WTSFreeMemory.restype = None _WTSFreeMemory(pMemory) + # BOOL WTSEnumerateProcesses( # __in HANDLE hServer, # __in DWORD Reserved, @@ -257,10 +268,10 @@ def WTSFreeMemory(pMemory): # __out PWTS_PROCESS_INFO *ppProcessInfo, # __out DWORD *pCount # ); -def WTSEnumerateProcessesA(hServer = WTS_CURRENT_SERVER_HANDLE): +def WTSEnumerateProcessesA(hServer=WTS_CURRENT_SERVER_HANDLE): _WTSEnumerateProcessesA = windll.wtsapi32.WTSEnumerateProcessesA _WTSEnumerateProcessesA.argtypes = [HANDLE, DWORD, DWORD, POINTER(PWTS_PROCESS_INFOA), PDWORD] - _WTSEnumerateProcessesA.restype = bool + _WTSEnumerateProcessesA.restype = bool _WTSEnumerateProcessesA.errcheck = RaiseIfZero pProcessInfo = PWTS_PROCESS_INFOA() @@ -268,10 +279,11 @@ def WTSEnumerateProcessesA(hServer = WTS_CURRENT_SERVER_HANDLE): _WTSEnumerateProcessesA(hServer, 0, 1, byref(pProcessInfo), byref(Count)) return pProcessInfo, Count.value -def WTSEnumerateProcessesW(hServer = WTS_CURRENT_SERVER_HANDLE): + +def WTSEnumerateProcessesW(hServer=WTS_CURRENT_SERVER_HANDLE): _WTSEnumerateProcessesW = windll.wtsapi32.WTSEnumerateProcessesW _WTSEnumerateProcessesW.argtypes = [HANDLE, DWORD, DWORD, POINTER(PWTS_PROCESS_INFOW), PDWORD] - _WTSEnumerateProcessesW.restype = bool + _WTSEnumerateProcessesW.restype = bool _WTSEnumerateProcessesW.errcheck = RaiseIfZero pProcessInfo = PWTS_PROCESS_INFOW() @@ -279,8 +291,10 @@ def WTSEnumerateProcessesW(hServer = WTS_CURRENT_SERVER_HANDLE): _WTSEnumerateProcessesW(hServer, 0, 1, byref(pProcessInfo), byref(Count)) return pProcessInfo, Count.value + WTSEnumerateProcesses = DefaultStringType(WTSEnumerateProcessesA, WTSEnumerateProcessesW) + # BOOL WTSTerminateProcess( # __in HANDLE hServer, # __in DWORD ProcessId, @@ -289,10 +303,11 @@ def WTSEnumerateProcessesW(hServer = WTS_CURRENT_SERVER_HANDLE): def WTSTerminateProcess(hServer, ProcessId, ExitCode): _WTSTerminateProcess = windll.wtsapi32.WTSTerminateProcess _WTSTerminateProcess.argtypes = [HANDLE, DWORD, DWORD] - _WTSTerminateProcess.restype = bool + _WTSTerminateProcess.restype = bool _WTSTerminateProcess.errcheck = RaiseIfZero _WTSTerminateProcess(hServer, ProcessId, ExitCode) + # BOOL WTSQuerySessionInformation( # __in HANDLE hServer, # __in DWORD SessionId, @@ -303,10 +318,11 @@ def WTSTerminateProcess(hServer, ProcessId, ExitCode): # XXX TODO -#--- kernel32.dll ------------------------------------------------------------- +# --- kernel32.dll ------------------------------------------------------------- # I've no idea why these functions are in kernel32.dll instead of wtsapi32.dll + # BOOL ProcessIdToSessionId( # __in DWORD dwProcessId, # __out DWORD *pSessionId @@ -314,24 +330,26 @@ def WTSTerminateProcess(hServer, ProcessId, ExitCode): def ProcessIdToSessionId(dwProcessId): _ProcessIdToSessionId = windll.kernel32.ProcessIdToSessionId _ProcessIdToSessionId.argtypes = [DWORD, PDWORD] - _ProcessIdToSessionId.restype = bool + _ProcessIdToSessionId.restype = bool _ProcessIdToSessionId.errcheck = RaiseIfZero dwSessionId = DWORD(0) _ProcessIdToSessionId(dwProcessId, byref(dwSessionId)) return dwSessionId.value + # DWORD WTSGetActiveConsoleSessionId(void); def WTSGetActiveConsoleSessionId(): _WTSGetActiveConsoleSessionId = windll.kernel32.WTSGetActiveConsoleSessionId _WTSGetActiveConsoleSessionId.argtypes = [] - _WTSGetActiveConsoleSessionId.restype = DWORD + _WTSGetActiveConsoleSessionId.restype = DWORD _WTSGetActiveConsoleSessionId.errcheck = RaiseIfZero return _WTSGetActiveConsoleSessionId() -#============================================================================== + +# ============================================================================== # This calculates the list of exported symbols. _all = set(vars().keys()).difference(_all) -__all__ = [_x for _x in _all if not _x.startswith('_')] +__all__ = [_x for _x in _all if not _x.startswith("_")] __all__.sort() -#============================================================================== +# ============================================================================== diff --git a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py index 6e865e7aa..bb98f793e 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py +++ b/src/debugpy/_vendored/pydevd/pydevd_attach_to_process/winappdbg/window.py @@ -37,15 +37,15 @@ __revision__ = "$Id$" -__all__ = ['Window'] +__all__ = ["Window"] from winappdbg import win32 # delayed imports Process = None -Thread = None +Thread = None -#============================================================================== +# ============================================================================== # Unlike Process, Thread and Module, there's no container for Window objects. # That's because Window objects don't really store any data besides the handle. @@ -65,7 +65,8 @@ # point the hook callback to it. We'd need to have the remote procedure call # feature first as (I believe) the hook can't be set remotely in this case. -class Window (object): + +class Window(object): """ Interface to an open window in the current desktop. @@ -120,7 +121,7 @@ class Window (object): @ivar placement: Window placement in the desktop. """ - def __init__(self, hWnd = None, process = None, thread = None): + def __init__(self, hWnd=None, process=None, thread=None): """ @type hWnd: int or L{win32.HWND} @param hWnd: Window handle. @@ -131,9 +132,9 @@ def __init__(self, hWnd = None, process = None, thread = None): @type thread: L{Thread} @param thread: (Optional) Thread that owns this window. """ - self.hWnd = hWnd + self.hWnd = hWnd self.dwProcessId = None - self.dwThreadId = None + self.dwThreadId = None self.set_process(process) self.set_thread(thread) @@ -177,16 +178,15 @@ def get_tid(self): def __get_pid_and_tid(self): "Internally used by get_pid() and get_tid()." - self.dwThreadId, self.dwProcessId = \ - win32.GetWindowThreadProcessId(self.get_handle()) + self.dwThreadId, self.dwProcessId = win32.GetWindowThreadProcessId(self.get_handle()) def __load_Process_class(self): - global Process # delayed import + global Process # delayed import if Process is None: from winappdbg.process import Process def __load_Thread_class(self): - global Thread # delayed import + global Thread # delayed import if Thread is None: from winappdbg.thread import Thread @@ -201,7 +201,7 @@ def get_process(self): self.__process = Process(self.get_pid()) return self.__process - def set_process(self, process = None): + def set_process(self, process=None): """ Manually set the parent process. Use with care! @@ -213,7 +213,7 @@ def set_process(self, process = None): else: self.__load_Process_class() if not isinstance(process, Process): - msg = "Parent process must be a Process instance, " + msg = "Parent process must be a Process instance, " msg += "got %s instead" % type(process) raise TypeError(msg) self.dwProcessId = process.get_pid() @@ -230,7 +230,7 @@ def get_thread(self): self.__thread = Thread(self.get_tid()) return self.__thread - def set_thread(self, thread = None): + def set_thread(self, thread=None): """ Manually set the thread process. Use with care! @@ -242,7 +242,7 @@ def set_thread(self, thread = None): else: self.__load_Thread_class() if not isinstance(thread, Thread): - msg = "Parent thread must be a Thread instance, " + msg = "Parent thread must be a Thread instance, " msg += "got %s instead" % type(thread) raise TypeError(msg) self.dwThreadId = thread.get_tid() @@ -255,12 +255,12 @@ def __get_window(self, hWnd): """ window = Window(hWnd) if window.get_pid() == self.get_pid(): - window.set_process( self.get_process() ) + window.set_process(self.get_process()) if window.get_tid() == self.get_tid(): - window.set_thread( self.get_thread() ) + window.set_thread(self.get_thread()) return window -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_classname(self): """ @@ -269,7 +269,7 @@ def get_classname(self): @raise WindowsError: An error occured while processing this request. """ - return win32.GetClassName( self.get_handle() ) + return win32.GetClassName(self.get_handle()) def get_style(self): """ @@ -278,7 +278,7 @@ def get_style(self): @raise WindowsError: An error occured while processing this request. """ - return win32.GetWindowLongPtr( self.get_handle(), win32.GWL_STYLE ) + return win32.GetWindowLongPtr(self.get_handle(), win32.GWL_STYLE) def get_extended_style(self): """ @@ -287,7 +287,7 @@ def get_extended_style(self): @raise WindowsError: An error occured while processing this request. """ - return win32.GetWindowLongPtr( self.get_handle(), win32.GWL_EXSTYLE ) + return win32.GetWindowLongPtr(self.get_handle(), win32.GWL_EXSTYLE) def get_text(self): """ @@ -296,7 +296,7 @@ def get_text(self): @return: Window text (caption) on success, C{None} on error. """ try: - return win32.GetWindowText( self.get_handle() ) + return win32.GetWindowText(self.get_handle()) except WindowsError: return None @@ -311,7 +311,7 @@ def set_text(self, text): @raise WindowsError: An error occured while processing this request. """ - win32.SetWindowText( self.get_handle(), text ) + win32.SetWindowText(self.get_handle(), text) def get_placement(self): """ @@ -324,7 +324,7 @@ def get_placement(self): @raise WindowsError: An error occured while processing this request. """ - return win32.GetWindowPlacement( self.get_handle() ) + return win32.GetWindowPlacement(self.get_handle()) def set_placement(self, placement): """ @@ -337,7 +337,7 @@ def set_placement(self, placement): @raise WindowsError: An error occured while processing this request. """ - win32.SetWindowPlacement( self.get_handle(), placement ) + win32.SetWindowPlacement(self.get_handle(), placement) def get_screen_rect(self): """ @@ -348,7 +348,7 @@ def get_screen_rect(self): @raise WindowsError: An error occured while processing this request. """ - return win32.GetWindowRect( self.get_handle() ) + return win32.GetWindowRect(self.get_handle()) def get_client_rect(self): """ @@ -359,8 +359,8 @@ def get_client_rect(self): @raise WindowsError: An error occured while processing this request. """ - cr = win32.GetClientRect( self.get_handle() ) - cr.left, cr.top = self.client_to_screen(cr.left, cr.top) + cr = win32.GetClientRect(self.get_handle()) + cr.left, cr.top = self.client_to_screen(cr.left, cr.top) cr.right, cr.bottom = self.client_to_screen(cr.right, cr.bottom) return cr @@ -376,7 +376,7 @@ def get_client_rect(self): text = property(get_text, set_text, doc="") placement = property(get_placement, set_placement, doc="") -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def client_to_screen(self, x, y): """ @@ -397,7 +397,7 @@ def client_to_screen(self, x, y): @raise WindowsError: An error occured while processing this request. """ - return tuple( win32.ClientToScreen( self.get_handle(), (x, y) ) ) + return tuple(win32.ClientToScreen(self.get_handle(), (x, y))) def screen_to_client(self, x, y): """ @@ -418,9 +418,9 @@ def screen_to_client(self, x, y): @raise WindowsError: An error occured while processing this request. """ - return tuple( win32.ScreenToClient( self.get_handle(), (x, y) ) ) + return tuple(win32.ScreenToClient(self.get_handle(), (x, y))) -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def get_parent(self): """ @@ -429,7 +429,7 @@ def get_parent(self): @return: Parent window. Returns C{None} if the window has no parent. @raise WindowsError: An error occured while processing this request. """ - hWnd = win32.GetParent( self.get_handle() ) + hWnd = win32.GetParent(self.get_handle()) if hWnd: return self.__get_window(hWnd) @@ -440,10 +440,7 @@ def get_children(self): @return: List of child windows. @raise WindowsError: An error occured while processing this request. """ - return [ - self.__get_window(hWnd) \ - for hWnd in win32.EnumChildWindows( self.get_handle() ) - ] + return [self.__get_window(hWnd) for hWnd in win32.EnumChildWindows(self.get_handle())] def get_tree(self): """ @@ -454,7 +451,7 @@ def get_tree(self): """ subtree = dict() for aWindow in self.get_children(): - subtree[ aWindow ] = aWindow.get_tree() + subtree[aWindow] = aWindow.get_tree() return subtree def get_root(self): @@ -466,13 +463,13 @@ def get_root(self): If this window is already a top-level window, returns itself. @raise WindowsError: An error occured while processing this request. """ - hWnd = self.get_handle() - history = set() + hWnd = self.get_handle() + history = set() hPrevWnd = hWnd while hWnd and hWnd not in history: history.add(hWnd) hPrevWnd = hWnd - hWnd = win32.GetParent(hWnd) + hWnd = win32.GetParent(hWnd) if hWnd in history: # See: https://docs.google.com/View?id=dfqd62nk_228h28szgz return self @@ -480,7 +477,7 @@ def get_root(self): return self.__get_window(hPrevWnd) return self - def get_child_at(self, x, y, bAllowTransparency = True): + def get_child_at(self, x, y, bAllowTransparency=True): """ Get the child window located at the given coordinates. If no such window exists an exception is raised. @@ -504,23 +501,23 @@ def get_child_at(self, x, y, bAllowTransparency = True): """ try: if bAllowTransparency: - hWnd = win32.RealChildWindowFromPoint( self.get_handle(), (x, y) ) + hWnd = win32.RealChildWindowFromPoint(self.get_handle(), (x, y)) else: - hWnd = win32.ChildWindowFromPoint( self.get_handle(), (x, y) ) + hWnd = win32.ChildWindowFromPoint(self.get_handle(), (x, y)) if hWnd: return self.__get_window(hWnd) except WindowsError: pass return None -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def is_valid(self): """ @rtype: bool @return: C{True} if the window handle is still valid. """ - return win32.IsWindow( self.get_handle() ) + return win32.IsWindow(self.get_handle()) def is_visible(self): """ @@ -528,7 +525,7 @@ def is_visible(self): @rtype: bool @return: C{True} if the window is in a visible state. """ - return win32.IsWindowVisible( self.get_handle() ) + return win32.IsWindowVisible(self.get_handle()) def is_enabled(self): """ @@ -536,7 +533,7 @@ def is_enabled(self): @rtype: bool @return: C{True} if the window is in an enabled state. """ - return win32.IsWindowEnabled( self.get_handle() ) + return win32.IsWindowEnabled(self.get_handle()) def is_maximized(self): """ @@ -544,7 +541,7 @@ def is_maximized(self): @rtype: bool @return: C{True} if the window is maximized. """ - return win32.IsZoomed( self.get_handle() ) + return win32.IsZoomed(self.get_handle()) def is_minimized(self): """ @@ -552,7 +549,7 @@ def is_minimized(self): @rtype: bool @return: C{True} if the window is minimized. """ - return win32.IsIconic( self.get_handle() ) + return win32.IsIconic(self.get_handle()) def is_child(self): """ @@ -560,12 +557,12 @@ def is_child(self): @rtype: bool @return: C{True} if the window is a child window. """ - return win32.IsChild( self.get_handle() ) + return win32.IsChild(self.get_handle()) is_zoomed = is_maximized is_iconic = is_minimized -#------------------------------------------------------------------------------ + # ------------------------------------------------------------------------------ def enable(self): """ @@ -575,7 +572,7 @@ def enable(self): @raise WindowsError: An error occured while processing this request. """ - win32.EnableWindow( self.get_handle(), True ) + win32.EnableWindow(self.get_handle(), True) def disable(self): """ @@ -585,9 +582,9 @@ def disable(self): @raise WindowsError: An error occured while processing this request. """ - win32.EnableWindow( self.get_handle(), False ) + win32.EnableWindow(self.get_handle(), False) - def show(self, bAsync = True): + def show(self, bAsync=True): """ Make the window visible. @@ -599,11 +596,11 @@ def show(self, bAsync = True): @raise WindowsError: An error occured while processing this request. """ if bAsync: - win32.ShowWindowAsync( self.get_handle(), win32.SW_SHOW ) + win32.ShowWindowAsync(self.get_handle(), win32.SW_SHOW) else: - win32.ShowWindow( self.get_handle(), win32.SW_SHOW ) + win32.ShowWindow(self.get_handle(), win32.SW_SHOW) - def hide(self, bAsync = True): + def hide(self, bAsync=True): """ Make the window invisible. @@ -615,11 +612,11 @@ def hide(self, bAsync = True): @raise WindowsError: An error occured while processing this request. """ if bAsync: - win32.ShowWindowAsync( self.get_handle(), win32.SW_HIDE ) + win32.ShowWindowAsync(self.get_handle(), win32.SW_HIDE) else: - win32.ShowWindow( self.get_handle(), win32.SW_HIDE ) + win32.ShowWindow(self.get_handle(), win32.SW_HIDE) - def maximize(self, bAsync = True): + def maximize(self, bAsync=True): """ Maximize the window. @@ -631,11 +628,11 @@ def maximize(self, bAsync = True): @raise WindowsError: An error occured while processing this request. """ if bAsync: - win32.ShowWindowAsync( self.get_handle(), win32.SW_MAXIMIZE ) + win32.ShowWindowAsync(self.get_handle(), win32.SW_MAXIMIZE) else: - win32.ShowWindow( self.get_handle(), win32.SW_MAXIMIZE ) + win32.ShowWindow(self.get_handle(), win32.SW_MAXIMIZE) - def minimize(self, bAsync = True): + def minimize(self, bAsync=True): """ Minimize the window. @@ -647,11 +644,11 @@ def minimize(self, bAsync = True): @raise WindowsError: An error occured while processing this request. """ if bAsync: - win32.ShowWindowAsync( self.get_handle(), win32.SW_MINIMIZE ) + win32.ShowWindowAsync(self.get_handle(), win32.SW_MINIMIZE) else: - win32.ShowWindow( self.get_handle(), win32.SW_MINIMIZE ) + win32.ShowWindow(self.get_handle(), win32.SW_MINIMIZE) - def restore(self, bAsync = True): + def restore(self, bAsync=True): """ Unmaximize and unminimize the window. @@ -663,12 +660,11 @@ def restore(self, bAsync = True): @raise WindowsError: An error occured while processing this request. """ if bAsync: - win32.ShowWindowAsync( self.get_handle(), win32.SW_RESTORE ) + win32.ShowWindowAsync(self.get_handle(), win32.SW_RESTORE) else: - win32.ShowWindow( self.get_handle(), win32.SW_RESTORE ) + win32.ShowWindow(self.get_handle(), win32.SW_RESTORE) - def move(self, x = None, y = None, width = None, height = None, - bRepaint = True): + def move(self, x=None, y=None, width=None, height=None, bRepaint=True): """ Moves and/or resizes the window. @@ -714,7 +710,7 @@ def kill(self): """ self.post(win32.WM_QUIT) - def send(self, uMsg, wParam = None, lParam = None, dwTimeout = None): + def send(self, uMsg, wParam=None, lParam=None, dwTimeout=None): """ Send a low-level window message syncronically. @@ -737,11 +733,9 @@ def send(self, uMsg, wParam = None, lParam = None, dwTimeout = None): """ if dwTimeout is None: return win32.SendMessage(self.get_handle(), uMsg, wParam, lParam) - return win32.SendMessageTimeout( - self.get_handle(), uMsg, wParam, lParam, - win32.SMTO_ABORTIFHUNG | win32.SMTO_ERRORONEXIT, dwTimeout) + return win32.SendMessageTimeout(self.get_handle(), uMsg, wParam, lParam, win32.SMTO_ABORTIFHUNG | win32.SMTO_ERRORONEXIT, dwTimeout) - def post(self, uMsg, wParam = None, lParam = None): + def post(self, uMsg, wParam=None, lParam=None): """ Post a low-level window message asyncronically. diff --git a/src/debugpy/_vendored/pydevd/pydevd_file_utils.py b/src/debugpy/_vendored/pydevd/pydevd_file_utils.py index 8e300c7ea..c5289c3c1 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_file_utils.py +++ b/src/debugpy/_vendored/pydevd/pydevd_file_utils.py @@ -1,4 +1,4 @@ -r''' +r""" This module provides utilities to get the absolute filenames so that we can be sure that: - The case of a file will match the actual file in the filesystem (otherwise breakpoints won't be hit). - Providing means for the user to make path conversions when doing a remote debugging session in @@ -39,11 +39,10 @@ @note: for doing a remote debugging session, all the pydevd_ files must be on the server accessible through the PYTHONPATH (and the PATHS_FROM_ECLIPSE_TO_PYTHON only needs to be set on the target machine for the paths that'll actually have breakpoints). -''' +""" from _pydev_bundle import pydev_log -from _pydevd_bundle.pydevd_constants import DebugInfoHolder, IS_WINDOWS, IS_JYTHON, \ - DISABLE_FILE_VALIDATION, is_true_in_env, IS_MAC +from _pydevd_bundle.pydevd_constants import DebugInfoHolder, IS_WINDOWS, IS_JYTHON, DISABLE_FILE_VALIDATION, is_true_in_env, IS_MAC from _pydev_bundle._pydev_filesystem_encoding import getfilesystemencoding from _pydevd_bundle.pydevd_comm_constants import file_system_encoding, filesystem_encoding_is_utf8 from _pydev_bundle.pydev_log import error_once @@ -77,13 +76,14 @@ def _get_library_dir(): library_dir = None try: import sysconfig - library_dir = sysconfig.get_path('purelib') + + library_dir = sysconfig.get_path("purelib") except ImportError: pass # i.e.: Only 2.7 onwards if library_dir is None or not os_path_exists(library_dir): for path in sys.path: - if os_path_exists(path) and os.path.basename(path) == 'site-packages': + if os_path_exists(path) and os.path.basename(path) == "site-packages": library_dir = path break @@ -101,14 +101,14 @@ def _get_library_dir(): # and the 2nd element is the path in the server machine. # see module docstring for more details. try: - PATHS_FROM_ECLIPSE_TO_PYTHON = json.loads(os.environ.get('PATHS_FROM_ECLIPSE_TO_PYTHON', '[]')) + PATHS_FROM_ECLIPSE_TO_PYTHON = json.loads(os.environ.get("PATHS_FROM_ECLIPSE_TO_PYTHON", "[]")) except Exception: - pydev_log.critical('Error loading PATHS_FROM_ECLIPSE_TO_PYTHON from environment variable.') + pydev_log.critical("Error loading PATHS_FROM_ECLIPSE_TO_PYTHON from environment variable.") pydev_log.exception() PATHS_FROM_ECLIPSE_TO_PYTHON = [] else: if not isinstance(PATHS_FROM_ECLIPSE_TO_PYTHON, list): - pydev_log.critical('Expected PATHS_FROM_ECLIPSE_TO_PYTHON loaded from environment variable to be a list.') + pydev_log.critical("Expected PATHS_FROM_ECLIPSE_TO_PYTHON loaded from environment variable to be a list.") PATHS_FROM_ECLIPSE_TO_PYTHON = [] else: # Converting json lists to tuple @@ -120,9 +120,9 @@ def _get_library_dir(): # r'd:\temp\temp_workspace_2\test_python\src\hhh\xxx') # ] -convert_to_long_pathname = lambda filename:filename -convert_to_short_pathname = lambda filename:filename -get_path_with_real_case = lambda filename:filename +convert_to_long_pathname = lambda filename: filename +convert_to_short_pathname = lambda filename: filename +get_path_with_real_case = lambda filename: filename # Note that we have a cache for previous list dirs... the only case where this may be an # issue is if the user actually changes the case of an existing file on while @@ -155,15 +155,14 @@ def _resolve_listing(resolved, iter_parts_lowercase, cache=_listdir_cache): cache[(resolved_lower, resolve_lowercase)] = resolved_joined break else: - raise FileNotFoundError('Unable to find: %s in %s. Dir Contents: %s' % ( - resolve_lowercase, resolved, dir_contents)) + raise FileNotFoundError("Unable to find: %s in %s. Dir Contents: %s" % (resolve_lowercase, resolved, dir_contents)) resolved = resolved_joined def _resolve_listing_parts(resolved, parts_in_lowercase, filename): try: - if parts_in_lowercase == ['']: + if parts_in_lowercase == [""]: return resolved return _resolve_listing(resolved, iter(parts_in_lowercase)) except FileNotFoundError: @@ -175,10 +174,12 @@ def _resolve_listing_parts(resolved, parts_in_lowercase, filename): if os_path_exists(filename): # This is really strange, ask the user to report as error. pydev_log.critical( - 'pydev debugger: critical: unable to get real case for file. Details:\n' - 'filename: %s\ndrive: %s\nparts: %s\n' - '(please create a ticket in the tracker to address this).', - filename, resolved, parts_in_lowercase + "pydev debugger: critical: unable to get real case for file. Details:\n" + "filename: %s\ndrive: %s\nparts: %s\n" + "(please create a ticket in the tracker to address this).", + filename, + resolved, + parts_in_lowercase, ) pydev_log.exception() # Don't fail, just return the original file passed. @@ -189,15 +190,16 @@ def _resolve_listing_parts(resolved, parts_in_lowercase, filename): # Don't fail nor log unless the trace level is at least info. Just return the original file passed. if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: pydev_log.info( - 'pydev debugger: OSError: Unable to get real case for file. Details:\n' - 'filename: %s\ndrive: %s\nparts: %s\n', - filename, resolved, parts_in_lowercase + "pydev debugger: OSError: Unable to get real case for file. Details:\n" "filename: %s\ndrive: %s\nparts: %s\n", + filename, + resolved, + parts_in_lowercase, ) pydev_log.exception() return filename -if sys.platform == 'win32': +if sys.platform == "win32": try: import ctypes from ctypes.wintypes import MAX_PATH, LPCWSTR, LPWSTR, DWORD @@ -235,10 +237,10 @@ def _get_path_with_real_case(filename): # consistently (there are settings to disable it on Windows). # So, using approach which resolves by listing the dir. - if '~' in filename: + if "~" in filename: filename = convert_to_long_pathname(filename) - if filename.startswith('<') or not os_path_exists(filename): + if filename.startswith("<") or not os_path_exists(filename): return filename # Not much we can do. drive, parts = os.path.splitdrive(os.path.normpath(filename)) @@ -263,10 +265,11 @@ def _get_path_with_real_case(filename): elif IS_JYTHON and IS_WINDOWS: def get_path_with_real_case(filename): - if filename.startswith('<'): + if filename.startswith("<"): return filename from java.io import File # noqa + f = File(filename) ret = f.getCanonicalPath() return ret @@ -274,18 +277,19 @@ def get_path_with_real_case(filename): elif IS_MAC: def get_path_with_real_case(filename): - if filename.startswith('<') or not os_path_exists(filename): + if filename.startswith("<") or not os_path_exists(filename): return filename # Not much we can do. - parts = filename.lower().split('/') + parts = filename.lower().split("/") - found = '' - while parts and parts[0] == '': - found += '/' + found = "" + while parts and parts[0] == "": + found += "/" parts = parts[1:] return _resolve_listing_parts(found, parts, filename) + if IS_JYTHON: def _normcase_windows(filename): @@ -295,7 +299,7 @@ def _normcase_windows(filename): def _normcase_windows(filename): # `normcase` doesn't lower case on Python 2 for non-English locale, so we should do it manually. - if '~' in filename: + if "~" in filename: filename = convert_to_long_pathname(filename) filename = _nt_os_normcase(filename) @@ -306,8 +310,8 @@ def _normcase_linux(filename): return filename # no-op -_filename_normalization = os.environ.get('PYDEVD_FILENAME_NORMALIZATION', '').lower() -if _filename_normalization == 'lower': +_filename_normalization = os.environ.get("PYDEVD_FILENAME_NORMALIZATION", "").lower() +if _filename_normalization == "lower": # Note: this is mostly for testing (forcing to always lower-case all contents # internally -- used to mimick Windows normalization on Linux). @@ -316,7 +320,7 @@ def _normcase_lower(filename): _default_normcase = _normcase_lower -elif _filename_normalization == 'none': +elif _filename_normalization == "none": # Disable any filename normalization may be an option on Windows if the # user is having issues under some circumstances. _default_normcase = _normcase_linux @@ -343,7 +347,7 @@ def normcase(s, NORMCASE_CACHE={}): return normalized -_ide_os = 'WINDOWS' if IS_WINDOWS else 'UNIX' +_ide_os = "WINDOWS" if IS_WINDOWS else "UNIX" _normcase_from_client = normcase @@ -352,32 +356,31 @@ def normcase_from_client(s): return _normcase_from_client(s) -DEBUG_CLIENT_SERVER_TRANSLATION = os.environ.get('DEBUG_PYDEVD_PATHS_TRANSLATION', 'False').lower() in ('1', 'true') +DEBUG_CLIENT_SERVER_TRANSLATION = os.environ.get("DEBUG_PYDEVD_PATHS_TRANSLATION", "False").lower() in ("1", "true") def set_ide_os(os): - ''' + """ We need to set the IDE os because the host where the code is running may be actually different from the client (and the point is that we want the proper paths to translate from the client to the server). :param os: 'UNIX' or 'WINDOWS' - ''' + """ global _ide_os global _normcase_from_client prev = _ide_os - if os == 'WIN': # Apparently PyCharm uses 'WIN' (https://github.com/fabioz/PyDev.Debugger/issues/116) - os = 'WINDOWS' + if os == "WIN": # Apparently PyCharm uses 'WIN' (https://github.com/fabioz/PyDev.Debugger/issues/116) + os = "WINDOWS" - assert os in ('WINDOWS', 'UNIX') + assert os in ("WINDOWS", "UNIX") if DEBUG_CLIENT_SERVER_TRANSLATION: - print('pydev debugger: client OS: %s' % (os,)) + print("pydev debugger: client OS: %s" % (os,)) _normcase_from_client = normcase - if os == 'WINDOWS': - + if os == "WINDOWS": # Client in Windows and server in Unix, we need to normalize the case. if not IS_WINDOWS: _normcase_from_client = _normcase_windows @@ -399,28 +402,28 @@ def set_ide_os(os): def canonical_normalized_path(filename): - ''' + """ This returns a filename that is canonical and it's meant to be used internally to store information on breakpoints and see if there's any hit on it. Note that this version is only internal as it may not match the case and may have symlinks resolved (and thus may not match what the user expects in the editor). - ''' + """ return get_abs_path_real_path_and_base_from_file(filename)[1] def absolute_path(filename): - ''' + """ Provides a version of the filename that's absolute (and NOT normalized). - ''' + """ return get_abs_path_real_path_and_base_from_file(filename)[0] def basename(filename): - ''' + """ Provides the basename for a file. - ''' + """ return get_abs_path_real_path_and_base_from_file(filename)[2] @@ -430,7 +433,7 @@ def _abs_and_canonical_path(filename, NORM_PATHS_CONTAINER=NORM_PATHS_CONTAINER) return NORM_PATHS_CONTAINER[filename] except: if filename.__class__ != str: - raise AssertionError('Paths passed to _abs_and_canonical_path must be str. Found: %s (%s)' % (filename, type(filename))) + raise AssertionError("Paths passed to _abs_and_canonical_path must be str. Found: %s (%s)" % (filename, type(filename))) if os is None: # Interpreter shutdown return filename, filename @@ -475,7 +478,7 @@ def _get_relative_filename_abs_path(filename, func, os_path_exists=os_path_exist def _apply_func_and_normalize_case(filename, func, isabs, normalize_case, os_path_exists=os_path_exists, join=join): - if filename.startswith('<'): + if filename.startswith("<"): # Not really a file, rather a synthetic name like or ; # shouldn't be normalized. return filename @@ -486,23 +489,23 @@ def _apply_func_and_normalize_case(filename, func, isabs, normalize_case, os_pat if not os_path_exists(r): r = _get_relative_filename_abs_path(filename, func) - ind = r.find('.zip') + ind = r.find(".zip") if ind == -1: - ind = r.find('.egg') + ind = r.find(".egg") if ind != -1: ind += 4 zip_path = r[:ind] inner_path = r[ind:] - if inner_path.startswith('!'): + if inner_path.startswith("!"): # Note (fabioz): although I can replicate this by creating a file ending as # .zip! or .egg!, I don't really know what's the real-world case for this # (still kept as it was added by @jetbrains, but it should probably be reviewed # later on). # Note 2: it goes hand-in-hand with 'exists'. inner_path = inner_path[1:] - zip_path = zip_path + '!' + zip_path = zip_path + "!" - if inner_path.startswith('/') or inner_path.startswith('\\'): + if inner_path.startswith("/") or inner_path.startswith("\\"): inner_path = inner_path[1:] if inner_path: if normalize_case: @@ -529,9 +532,9 @@ def exists(filename): if os_path_exists(filename): return True - ind = filename.find('.zip') + ind = filename.find(".zip") if ind == -1: - ind = filename.find('.egg') + ind = filename.find(".egg") if ind != -1: ind += 4 @@ -544,7 +547,7 @@ def exists(filename): # later on). # Note 2: it goes hand-in-hand with '_apply_func_and_normalize_case'. inner_path = inner_path[1:] - zip_path = zip_path + '!' + zip_path = zip_path + "!" zip_file_obj = _ZIP_SEARCH_CACHE.get(zip_path, _NOT_FOUND_SENTINEL) if zip_file_obj is None: @@ -552,24 +555,25 @@ def exists(filename): elif zip_file_obj is _NOT_FOUND_SENTINEL: try: import zipfile - zip_file_obj = zipfile.ZipFile(zip_path, 'r') + + zip_file_obj = zipfile.ZipFile(zip_path, "r") _ZIP_SEARCH_CACHE[zip_path] = zip_file_obj except: _ZIP_SEARCH_CACHE[zip_path] = _NOT_FOUND_SENTINEL return False try: - if inner_path.startswith('/') or inner_path.startswith('\\'): + if inner_path.startswith("/") or inner_path.startswith("\\"): inner_path = inner_path[1:] - _info = zip_file_obj.getinfo(inner_path.replace('\\', '/')) + _info = zip_file_obj.getinfo(inner_path.replace("\\", "/")) return join(zip_path, inner_path) except KeyError: return False else: - pydev_log.debug('os.path.exists(%r) returned False.', filename) + pydev_log.debug("os.path.exists(%r) returned False.", filename) return False @@ -584,22 +588,22 @@ def exists(filename): except AttributeError: code = os_path_real_path.__code__ - if code.co_filename.startswith(' in this case). - f = '' + f = "" - if f.startswith('<'): + if f.startswith("<"): return f, normcase(f), f if _abs_and_canonical_path is None: # Interpreter shutdown - i = max(f.rfind('/'), f.rfind('\\')) - return (f, f, f[i + 1:]) + i = max(f.rfind("/"), f.rfind("\\")) + return (f, f, f[i + 1 :]) if f is not None: - if f.endswith('.pyc'): + if f.endswith(".pyc"): f = f[:-1] - elif f.endswith('$py.class'): - f = f[:-len('$py.class')] + '.py' + elif f.endswith("$py.class"): + f = f[: -len("$py.class")] + ".py" abs_path, canonical_normalized_filename = _abs_and_canonical_path(f) @@ -900,8 +909,8 @@ def get_abs_path_real_path_and_base_from_file( base = os_path_basename(canonical_normalized_filename) except AttributeError: # Error during shutdown. - i = max(f.rfind('/'), f.rfind('\\')) - base = f[i + 1:] + i = max(f.rfind("/"), f.rfind("\\")) + base = f[i + 1 :] ret = abs_path, canonical_normalized_filename, base NORM_PATHS_AND_BASE_CONTAINER[filename] = ret return ret @@ -914,18 +923,18 @@ def get_abs_path_real_path_and_base_from_frame(frame, NORM_PATHS_AND_BASE_CONTAI # This one is just internal (so, does not need any kind of client-server translation) f = frame.f_code.co_filename - if f is not None and f.startswith (('build/bdist.', 'build\\bdist.')): + if f is not None and f.startswith(("build/bdist.", "build\\bdist.")): # files from eggs in Python 2.7 have paths like build/bdist.linux-x86_64/egg/ - f = frame.f_globals['__file__'] + f = frame.f_globals["__file__"] if get_abs_path_real_path_and_base_from_file is None: # Interpreter shutdown if not f: # i.e.: it's possible that the user compiled code with an empty string (consider # it as in this case). - f = '' - i = max(f.rfind('/'), f.rfind('\\')) - return f, f, f[i + 1:] + f = "" + i = max(f.rfind("/"), f.rfind("\\")) + return f, f, f[i + 1 :] ret = get_abs_path_real_path_and_base_from_file(f) # Also cache based on the frame.f_code.co_filename (if we had it inside build/bdist it can make a difference). @@ -935,6 +944,7 @@ def get_abs_path_real_path_and_base_from_frame(frame, NORM_PATHS_AND_BASE_CONTAI def get_fullname(mod_name): import pkgutil + try: loader = pkgutil.get_loader(mod_name) except: @@ -949,8 +959,19 @@ def get_fullname(mod_name): def get_package_dir(mod_name): for path in sys.path: - mod_path = join(path, mod_name.replace('.', '/')) + mod_path = join(path, mod_name.replace(".", "/")) if os.path.isdir(mod_path): return mod_path return None +def contains_dir(path, dir_name): + try: + while path: + path, tail = os.path.split(path) + if tail == dir_name: + return True + if tail is None and path == dir_name: + return True + except: + pass + return False \ No newline at end of file diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py index bb61062c9..f77af49c2 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/__init__.py @@ -1,2 +1,3 @@ import pkgutil + __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py index ff7f1eb93..b7baa372b 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/django_debug.py @@ -2,8 +2,7 @@ from _pydev_bundle import pydev_log from _pydevd_bundle.pydevd_comm import CMD_SET_BREAK, CMD_ADD_EXCEPTION_BREAK -from _pydevd_bundle.pydevd_constants import STATE_SUSPEND, DJANGO_SUSPEND, \ - DebugInfoHolder +from _pydevd_bundle.pydevd_constants import STATE_SUSPEND, DJANGO_SUSPEND, DebugInfoHolder from _pydevd_bundle.pydevd_frame_utils import add_exception_to_frame, FCode, just_raised, ignore_exception_trace from pydevd_file_utils import canonical_normalized_path, absolute_path from _pydevd_bundle.pydevd_api import PyDevdAPI @@ -15,26 +14,29 @@ IS_DJANGO19_OR_HIGHER = False try: import django + version = django.VERSION IS_DJANGO18 = version[0] == 1 and version[1] == 8 IS_DJANGO19 = version[0] == 1 and version[1] == 9 - IS_DJANGO19_OR_HIGHER = ((version[0] == 1 and version[1] >= 9) or version[0] > 1) + IS_DJANGO19_OR_HIGHER = (version[0] == 1 and version[1] >= 9) or version[0] > 1 except: pass class DjangoLineBreakpoint(LineBreakpointWithLazyValidation): - - def __init__(self, canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=None, is_logpoint=False): + def __init__( + self, canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=None, is_logpoint=False + ): self.canonical_normalized_filename = canonical_normalized_filename - LineBreakpointWithLazyValidation.__init__(self, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint) + LineBreakpointWithLazyValidation.__init__( + self, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint + ) def __str__(self): return "DjangoLineBreakpoint: %s-%d" % (self.canonical_normalized_filename, self.line) class _DjangoValidationInfo(ValidationInfo): - @overrides(ValidationInfo._collect_valid_lines_in_template_uncached) def _collect_valid_lines_in_template_uncached(self, template): lines = set() @@ -47,7 +49,7 @@ def _collect_valid_lines_in_template_uncached(self, template): return lines def _get_lineno(self, node): - if hasattr(node, 'token') and hasattr(node.token, 'lineno'): + if hasattr(node, "token") and hasattr(node.token, "lineno"): return node.token.lineno return None @@ -68,10 +70,32 @@ def _iternodes(self, nodelist): yield node -def add_line_breakpoint(plugin, pydb, type, canonical_normalized_filename, breakpoint_id, line, condition, expression, func_name, hit_condition=None, is_logpoint=False, add_breakpoint_result=None, on_changed_breakpoint_state=None): - if type == 'django-line': - django_line_breakpoint = DjangoLineBreakpoint(canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint) - if not hasattr(pydb, 'django_breakpoints'): +def add_line_breakpoint( + pydb, + type, + canonical_normalized_filename, + breakpoint_id, + line, + condition, + expression, + func_name, + hit_condition=None, + is_logpoint=False, + add_breakpoint_result=None, + on_changed_breakpoint_state=None, +): + if type == "django-line": + django_line_breakpoint = DjangoLineBreakpoint( + canonical_normalized_filename, + breakpoint_id, + line, + condition, + func_name, + expression, + hit_condition=hit_condition, + is_logpoint=is_logpoint, + ) + if not hasattr(pydb, "django_breakpoints"): _init_plugin_breaks(pydb) if IS_DJANGO19_OR_HIGHER: @@ -85,24 +109,25 @@ def add_line_breakpoint(plugin, pydb, type, canonical_normalized_filename, break return None -def after_breakpoints_consolidated(plugin, py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): +def after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): if IS_DJANGO19_OR_HIGHER: django_breakpoints_for_file = file_to_line_to_breakpoints.get(canonical_normalized_filename) if not django_breakpoints_for_file: return - if not hasattr(py_db, 'django_validation_info'): + if not hasattr(py_db, "django_validation_info"): _init_plugin_breaks(py_db) # In general we validate the breakpoints only when the template is loaded, but if the template # was already loaded, we can validate the breakpoints based on the last loaded value. py_db.django_validation_info.verify_breakpoints_from_template_cached_lines( - py_db, canonical_normalized_filename, django_breakpoints_for_file) + py_db, canonical_normalized_filename, django_breakpoints_for_file + ) -def add_exception_breakpoint(plugin, pydb, type, exception): - if type == 'django': - if not hasattr(pydb, 'django_exception_break'): +def add_exception_breakpoint(pydb, type, exception): + if type == "django": + if not hasattr(pydb, "django_exception_break"): _init_plugin_breaks(pydb) pydb.django_exception_break[exception] = True return True @@ -116,25 +141,25 @@ def _init_plugin_breaks(pydb): pydb.django_validation_info = _DjangoValidationInfo() -def remove_exception_breakpoint(plugin, pydb, type, exception): - if type == 'django': +def remove_exception_breakpoint(pydb, exception_type, exception): + if exception_type == "django": try: del pydb.django_exception_break[exception] return True - except: + except KeyError: pass return False -def remove_all_exception_breakpoints(plugin, pydb): - if hasattr(pydb, 'django_exception_break'): +def remove_all_exception_breakpoints(pydb): + if hasattr(pydb, "django_exception_break"): pydb.django_exception_break = {} return True return False -def get_breakpoints(plugin, pydb, type): - if type == 'django-line': +def get_breakpoints(pydb, breakpoint_type): + if breakpoint_type == "django-line": return pydb.django_breakpoints return None @@ -150,21 +175,21 @@ def _inherits(cls, *names): return inherits_node -_IGNORE_RENDER_OF_CLASSES = ('TextNode', 'NodeList') +_IGNORE_RENDER_OF_CLASSES = ("TextNode", "NodeList") -def _is_django_render_call(frame, debug=False): +def _is_django_render_call(frame): try: name = frame.f_code.co_name - if name != 'render': + if name != "render": return False - if 'self' not in frame.f_locals: + if "self" not in frame.f_locals: return False - cls = frame.f_locals['self'].__class__ + cls = frame.f_locals["self"].__class__ - inherits_node = _inherits(cls, 'Node') + inherits_node = _inherits(cls, "Node") if not inherits_node: return False @@ -172,9 +197,9 @@ def _is_django_render_call(frame, debug=False): clsname = cls.__name__ if IS_DJANGO19: # in Django 1.9 we need to save the flag that there is included template - if clsname == 'IncludeNode': - if 'context' in frame.f_locals: - context = frame.f_locals['context'] + if clsname == "IncludeNode": + if "context" in frame.f_locals: + context = frame.f_locals["context"] context._has_included_template = True return clsname not in _IGNORE_RENDER_OF_CLASSES @@ -185,12 +210,12 @@ def _is_django_render_call(frame, debug=False): def _is_django_context_get_call(frame): try: - if 'self' not in frame.f_locals: + if "self" not in frame.f_locals: return False - cls = frame.f_locals['self'].__class__ + cls = frame.f_locals["self"].__class__ - return _inherits(cls, 'BaseContext') + return _inherits(cls, "BaseContext") except: pydev_log.exception() return False @@ -199,16 +224,16 @@ def _is_django_context_get_call(frame): def _is_django_resolve_call(frame): try: name = frame.f_code.co_name - if name != '_resolve_lookup': + if name != "_resolve_lookup": return False - if 'self' not in frame.f_locals: + if "self" not in frame.f_locals: return False - cls = frame.f_locals['self'].__class__ + cls = frame.f_locals["self"].__class__ clsname = cls.__name__ - return clsname == 'Variable' + return clsname == "Variable" except: pydev_log.exception() return False @@ -218,11 +243,11 @@ def _is_django_suspended(thread): return thread.additional_info.suspend_type == DJANGO_SUSPEND -def suspend_django(main_debugger, thread, frame, cmd=CMD_SET_BREAK): +def suspend_django(py_db, thread, frame, cmd=CMD_SET_BREAK): if frame.f_lineno is None: return None - main_debugger.set_suspend(thread, cmd) + py_db.set_suspend(thread, cmd) thread.additional_info.suspend_type = DJANGO_SUSPEND return frame @@ -234,14 +259,15 @@ def _find_django_render_frame(frame): return frame -#======================================================================================================================= + +# ======================================================================================================================= # Django Frame -#======================================================================================================================= +# ======================================================================================================================= def _read_file(filename): # type: (str) -> str - f = open(filename, 'r', encoding='utf-8', errors='replace') + f = open(filename, "r", encoding="utf-8", errors="replace") s = f.read() f.close() return s @@ -254,11 +280,11 @@ def _offset_to_line_number(text, offset): if curOffset == len(text): return -1 c = text[curOffset] - if c == '\n': + if c == "\n": curLine += 1 - elif c == '\r': + elif c == "\r": curLine += 1 - if curOffset < len(text) and text[curOffset + 1] == '\n': + if curOffset < len(text) and text[curOffset + 1] == "\n": curOffset += 1 curOffset += 1 @@ -269,18 +295,21 @@ def _offset_to_line_number(text, offset): def _get_source_django_18_or_lower(frame): # This method is usable only for the Django <= 1.8 try: - node = frame.f_locals['self'] - if hasattr(node, 'source'): + node = frame.f_locals["self"] + if hasattr(node, "source"): return node.source else: if IS_DJANGO18: # The debug setting was changed since Django 1.8 - pydev_log.error_once("WARNING: Template path is not available. Set the 'debug' option in the OPTIONS of a DjangoTemplates " - "backend.") + pydev_log.error_once( + "WARNING: Template path is not available. Set the 'debug' option in the OPTIONS of a DjangoTemplates " "backend." + ) else: # The debug setting for Django < 1.8 - pydev_log.error_once("WARNING: Template path is not available. Please set TEMPLATE_DEBUG=True in your settings.py to make " - "django template breakpoints working") + pydev_log.error_once( + "WARNING: Template path is not available. Please set TEMPLATE_DEBUG=True in your settings.py to make " + "django template breakpoints working" + ) return None except: @@ -296,29 +325,27 @@ def _get_template_original_file_name_from_frame(frame): try: if IS_DJANGO19: # The Node source was removed since Django 1.9 - if 'context' in frame.f_locals: - context = frame.f_locals['context'] - if hasattr(context, '_has_included_template'): + if "context" in frame.f_locals: + context = frame.f_locals["context"] + if hasattr(context, "_has_included_template"): # if there was included template we need to inspect the previous frames and find its name back = frame.f_back - while back is not None and frame.f_code.co_name in ('render', '_render'): + while back is not None and frame.f_code.co_name in ("render", "_render"): locals = back.f_locals - if 'self' in locals: - self = locals['self'] - if self.__class__.__name__ == 'Template' and hasattr(self, 'origin') and \ - hasattr(self.origin, 'name'): + if "self" in locals: + self = locals["self"] + if self.__class__.__name__ == "Template" and hasattr(self, "origin") and hasattr(self.origin, "name"): return _convert_to_str(self.origin.name) back = back.f_back else: - if hasattr(context, 'template') and hasattr(context.template, 'origin') and \ - hasattr(context.template.origin, 'name'): + if hasattr(context, "template") and hasattr(context.template, "origin") and hasattr(context.template.origin, "name"): return _convert_to_str(context.template.origin.name) return None elif IS_DJANGO19_OR_HIGHER: # For Django 1.10 and later there is much simpler way to get template name - if 'self' in frame.f_locals: - self = frame.f_locals['self'] - if hasattr(self, 'origin') and hasattr(self.origin, 'name'): + if "self" in frame.f_locals: + self = frame.f_locals["self"] + if hasattr(self, "origin") and hasattr(self.origin, "name"): return _convert_to_str(self.origin.name) return None @@ -328,21 +355,21 @@ def _get_template_original_file_name_from_frame(frame): return None fname = _convert_to_str(source[0].name) - if fname == '': + if fname == "": pydev_log.debug("Source name is %s\n" % fname) return None else: return fname except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 2: - pydev_log.exception('Error getting django template filename.') + pydev_log.exception("Error getting django template filename.") return None def _get_template_line(frame): if IS_DJANGO19_OR_HIGHER: - node = frame.f_locals['self'] - if hasattr(node, 'token') and hasattr(node.token, 'lineno'): + node = frame.f_locals["self"] + if hasattr(node, "token") and hasattr(node.token, "lineno"): return node.token.lineno else: return None @@ -359,13 +386,12 @@ def _get_template_line(frame): class DjangoTemplateFrame(object): - IS_PLUGIN_FRAME = True def __init__(self, frame): original_filename = _get_template_original_file_name_from_frame(frame) - self._back_context = frame.f_locals['context'] - self.f_code = FCode('Django Template', original_filename) + self._back_context = frame.f_locals["context"] + self.f_code = FCode("Django Template", original_filename) self.f_lineno = _get_template_line(frame) self.f_back = frame self.f_globals = {} @@ -378,7 +404,7 @@ def _collect_context(self, context): for d in context.dicts: for k, v in d.items(): res[k] = v - except AttributeError: + except AttributeError: pass return res @@ -390,11 +416,10 @@ def _change_variable(self, name, value): class DjangoTemplateSyntaxErrorFrame(object): - IS_PLUGIN_FRAME = True def __init__(self, frame, original_filename, lineno, f_locals): - self.f_code = FCode('Django TemplateSyntaxError', original_filename) + self.f_code = FCode("Django TemplateSyntaxError", original_filename) self.f_lineno = lineno self.f_back = frame self.f_globals = {} @@ -402,12 +427,12 @@ def __init__(self, frame, original_filename, lineno, f_locals): self.f_trace = None -def change_variable(plugin, frame, attr, expression): +def change_variable(frame, attr, expression, default): if isinstance(frame, DjangoTemplateFrame): result = eval(expression, frame.f_globals, frame.f_locals) frame._change_variable(attr, result) return result - return False + return default def _is_django_variable_does_not_exist_exception_break_context(frame): @@ -415,102 +440,103 @@ def _is_django_variable_does_not_exist_exception_break_context(frame): name = frame.f_code.co_name except: name = None - return name in ('_resolve_lookup', 'find_template') + return name in ("_resolve_lookup", "find_template") def _is_ignoring_failures(frame): while frame is not None: - if frame.f_code.co_name == 'resolve': - ignore_failures = frame.f_locals.get('ignore_failures') + if frame.f_code.co_name == "resolve": + ignore_failures = frame.f_locals.get("ignore_failures") if ignore_failures: return True frame = frame.f_back return False -#======================================================================================================================= + +# ======================================================================================================================= # Django Step Commands -#======================================================================================================================= +# ======================================================================================================================= -def can_skip(plugin, main_debugger, frame): - if main_debugger.django_breakpoints: +def can_skip(py_db, frame): + if py_db.django_breakpoints: if _is_django_render_call(frame): return False - if main_debugger.django_exception_break: - module_name = frame.f_globals.get('__name__', '') + if py_db.django_exception_break: + module_name = frame.f_globals.get("__name__", "") - if module_name == 'django.template.base': + if module_name == "django.template.base": # Exceptions raised at django.template.base must be checked. return False return True -def has_exception_breaks(plugin): - if len(plugin.main_debugger.django_exception_break) > 0: +is_tracked_frame = _is_django_render_call + + +def required_events_breakpoint(): + return ("call",) + + +def required_events_stepping(): + return ("call", "return") + + +def has_exception_breaks(py_db): + if len(py_db.django_exception_break) > 0: return True return False -def has_line_breaks(plugin): - for _canonical_normalized_filename, breakpoints in plugin.main_debugger.django_breakpoints.items(): +def has_line_breaks(py_db): + for _canonical_normalized_filename, breakpoints in py_db.django_breakpoints.items(): if len(breakpoints) > 0: return True return False -def cmd_step_into(plugin, main_debugger, frame, event, args, stop_info, stop): - info = args[2] - thread = args[3] +def cmd_step_into(py_db, frame, event, info, thread, stop_info, stop): plugin_stop = False if _is_django_suspended(thread): - stop_info['django_stop'] = event == 'call' and _is_django_render_call(frame) - plugin_stop = stop_info['django_stop'] + plugin_stop = stop_info["django_stop"] = event == "call" and _is_django_render_call(frame) stop = stop and _is_django_resolve_call(frame.f_back) and not _is_django_context_get_call(frame) if stop: info.pydev_django_resolve_frame = True # we remember that we've go into python code from django rendering frame return stop, plugin_stop -def cmd_step_over(plugin, main_debugger, frame, event, args, stop_info, stop): - info = args[2] - thread = args[3] +def cmd_step_over(py_db, frame, event, info, thread, stop_info, stop): plugin_stop = False if _is_django_suspended(thread): - stop_info['django_stop'] = event == 'call' and _is_django_render_call(frame) - plugin_stop = stop_info['django_stop'] + plugin_stop = stop_info["django_stop"] = event == "call" and _is_django_render_call(frame) stop = False return stop, plugin_stop else: - if event == 'return' and info.pydev_django_resolve_frame and _is_django_resolve_call(frame.f_back): + if event == "return" and info.pydev_django_resolve_frame and _is_django_resolve_call(frame.f_back): # we return to Django suspend mode and should not stop before django rendering frame info.pydev_step_stop = frame.f_back info.pydev_django_resolve_frame = False thread.additional_info.suspend_type = DJANGO_SUSPEND - stop = info.pydev_step_stop is frame and event in ('line', 'return') + stop = info.pydev_step_stop is frame and event in ("line", "return") return stop, plugin_stop -def stop(plugin, main_debugger, frame, event, args, stop_info, arg, step_cmd): - main_debugger = args[0] - thread = args[3] - if 'django_stop' in stop_info and stop_info['django_stop']: - frame = suspend_django(main_debugger, thread, DjangoTemplateFrame(frame), step_cmd) +def stop(py_db, frame, event, thread, stop_info, arg, step_cmd): + if "django_stop" in stop_info and stop_info["django_stop"]: + frame = suspend_django(py_db, thread, DjangoTemplateFrame(frame), step_cmd) if frame: - main_debugger.do_wait_suspend(thread, frame, event, arg) + py_db.do_wait_suspend(thread, frame, event, arg) return True return False -def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): - py_db = args[0] - _filename = args[1] - info = args[2] - breakpoint_type = 'django' +def get_breakpoint(py_db, frame, event, info): + breakpoint_type = "django" - if event == 'call' and info.pydev_state != STATE_SUSPEND and py_db.django_breakpoints and _is_django_render_call(frame): + if event == "call" and info.pydev_state != STATE_SUSPEND and py_db.django_breakpoints and _is_django_render_call(frame): original_filename = _get_template_original_file_name_from_frame(frame) pydev_log.debug("Django is rendering a template: %s", original_filename) @@ -518,13 +544,14 @@ def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): django_breakpoints_for_file = py_db.django_breakpoints.get(canonical_normalized_filename) if django_breakpoints_for_file: - # At this point, let's validate whether template lines are correct. if IS_DJANGO19_OR_HIGHER: django_validation_info = py_db.django_validation_info - context = frame.f_locals['context'] + context = frame.f_locals["context"] django_template = context.template - django_validation_info.verify_breakpoints(py_db, canonical_normalized_filename, django_breakpoints_for_file, django_template) + django_validation_info.verify_breakpoints( + py_db, canonical_normalized_filename, django_breakpoints_for_file, django_template + ) pydev_log.debug("Breakpoints for that file: %s", django_breakpoints_for_file) template_line = _get_template_line(frame) @@ -533,14 +560,14 @@ def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): if template_line in django_breakpoints_for_file: django_breakpoint = django_breakpoints_for_file[template_line] new_frame = DjangoTemplateFrame(frame) - return True, django_breakpoint, new_frame, breakpoint_type + return django_breakpoint, new_frame, breakpoint_type - return False, None, None, breakpoint_type + return None -def suspend(plugin, main_debugger, thread, frame, bp_type): - if bp_type == 'django': - return suspend_django(main_debugger, thread, DjangoTemplateFrame(frame)) +def suspend(py_db, thread, frame, bp_type): + if bp_type == "django": + return suspend_django(py_db, thread, DjangoTemplateFrame(frame)) return None @@ -552,60 +579,59 @@ def _get_original_filename_from_origin_in_parent_frame_locals(frame, parent_fram origin = None if parent_frame is not None: - origin = parent_frame.f_locals.get('origin') + origin = parent_frame.f_locals.get("origin") - if hasattr(origin, 'name') and origin.name is not None: + if hasattr(origin, "name") and origin.name is not None: filename = _convert_to_str(origin.name) return filename -def exception_break(plugin, main_debugger, pydb_frame, frame, args, arg): - main_debugger = args[0] - thread = args[3] +def exception_break(py_db, frame, thread, arg): exception, value, trace = arg - if main_debugger.django_exception_break and exception is not None: - if exception.__name__ in ['VariableDoesNotExist', 'TemplateDoesNotExist', 'TemplateSyntaxError'] and \ - just_raised(trace) and not ignore_exception_trace(trace): - - if exception.__name__ == 'TemplateSyntaxError': + if py_db.django_exception_break and exception is not None: + if ( + exception.__name__ in ["VariableDoesNotExist", "TemplateDoesNotExist", "TemplateSyntaxError"] + and just_raised(trace) + and not ignore_exception_trace(trace) + ): + if exception.__name__ == "TemplateSyntaxError": # In this case we don't actually have a regular render frame with the context # (we didn't really get to that point). - token = getattr(value, 'token', None) + token = getattr(value, "token", None) if token is None: # Django 1.7 does not have token in exception. Try to get it from locals. - token = frame.f_locals.get('token') + token = frame.f_locals.get("token") - lineno = getattr(token, 'lineno', None) + lineno = getattr(token, "lineno", None) original_filename = None if lineno is not None: - original_filename = _get_original_filename_from_origin_in_parent_frame_locals(frame, 'get_template') + original_filename = _get_original_filename_from_origin_in_parent_frame_locals(frame, "get_template") if original_filename is None: # Django 1.7 does not have origin in get_template. Try to get it from # load_template. - original_filename = _get_original_filename_from_origin_in_parent_frame_locals(frame, 'load_template') + original_filename = _get_original_filename_from_origin_in_parent_frame_locals(frame, "load_template") if original_filename is not None and lineno is not None: syntax_error_frame = DjangoTemplateSyntaxErrorFrame( - frame, original_filename, lineno, {'token': token, 'exception': exception}) + frame, original_filename, lineno, {"token": token, "exception": exception} + ) - suspend_frame = suspend_django( - main_debugger, thread, syntax_error_frame, CMD_ADD_EXCEPTION_BREAK) + suspend_frame = suspend_django(py_db, thread, syntax_error_frame, CMD_ADD_EXCEPTION_BREAK) return True, suspend_frame - elif exception.__name__ == 'VariableDoesNotExist': + elif exception.__name__ == "VariableDoesNotExist": if _is_django_variable_does_not_exist_exception_break_context(frame): - if not getattr(exception, 'silent_variable_failure', False) and not _is_ignoring_failures(frame): + if not getattr(exception, "silent_variable_failure", False) and not _is_ignoring_failures(frame): render_frame = _find_django_render_frame(frame) if render_frame: - suspend_frame = suspend_django( - main_debugger, thread, DjangoTemplateFrame(render_frame), CMD_ADD_EXCEPTION_BREAK) + suspend_frame = suspend_django(py_db, thread, DjangoTemplateFrame(render_frame), CMD_ADD_EXCEPTION_BREAK) if suspend_frame: add_exception_to_frame(suspend_frame, (exception, value, trace)) - thread.additional_info.pydev_message = 'VariableDoesNotExist' + thread.additional_info.pydev_message = "VariableDoesNotExist" suspend_frame.f_back = frame frame = suspend_frame return True, frame diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py index bb61062c9..f77af49c2 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/__init__.py @@ -1,2 +1,3 @@ import pkgutil + __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py index bb61062c9..f77af49c2 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/__init__.py @@ -1,2 +1,3 @@ import pkgutil + __path__ = pkgutil.extend_path(__path__, __name__) diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py index 7c5a4fee4..3360e1f88 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_helpers.py @@ -4,6 +4,7 @@ def find_cached_module(mod_name): return sys.modules.get(mod_name, None) + def find_mod_attr(mod_name, attr): mod = find_cached_module(mod_name) if mod is None: @@ -13,14 +14,13 @@ def find_mod_attr(mod_name, attr): def find_class_name(val): class_name = str(val.__class__) - if class_name.find('.') != -1: - class_name = class_name.split('.')[-1] + if class_name.find(".") != -1: + class_name = class_name.split(".")[-1] - elif class_name.find("'") != -1: #does not have '.' (could be something like ) - class_name = class_name[class_name.index("'") + 1:] + elif class_name.find("'") != -1: # does not have '.' (could be something like ) + class_name = class_name[class_name.index("'") + 1 :] if class_name.endswith("'>"): class_name = class_name[:-2] return class_name - diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py index 571f7a9cb..57ed2b4f9 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_numpy_types.py @@ -3,8 +3,8 @@ from .pydevd_helpers import find_mod_attr from _pydevd_bundle import pydevd_constants -TOO_LARGE_MSG = 'Maximum number of items (%s) reached. To show more items customize the value of the PYDEVD_CONTAINER_NUMPY_MAX_ITEMS environment variable.' -TOO_LARGE_ATTR = 'Unable to handle:' +TOO_LARGE_MSG = "Maximum number of items (%s) reached. To show more items customize the value of the PYDEVD_CONTAINER_NUMPY_MAX_ITEMS environment variable." +TOO_LARGE_ATTR = "Unable to handle:" class NdArrayItemsContainer(object): @@ -12,42 +12,42 @@ class NdArrayItemsContainer(object): class NDArrayTypeResolveProvider(object): - ''' + """ This resolves a numpy ndarray returning some metadata about the NDArray - ''' + """ def can_provide(self, type_object, type_name): - nd_array = find_mod_attr('numpy', 'ndarray') + nd_array = find_mod_attr("numpy", "ndarray") return nd_array is not None and issubclass(type_object, nd_array) def is_numeric(self, obj): - if not hasattr(obj, 'dtype'): + if not hasattr(obj, "dtype"): return False - return obj.dtype.kind in 'biufc' + return obj.dtype.kind in "biufc" def resolve(self, obj, attribute): - if attribute == '__internals__': + if attribute == "__internals__": return defaultResolver.get_dictionary(obj) - if attribute == 'min': + if attribute == "min": if self.is_numeric(obj) and obj.size > 0: return obj.min() else: return None - if attribute == 'max': + if attribute == "max": if self.is_numeric(obj) and obj.size > 0: return obj.max() else: return None - if attribute == 'shape': + if attribute == "shape": return obj.shape - if attribute == 'dtype': + if attribute == "dtype": return obj.dtype - if attribute == 'size': + if attribute == "size": return obj.size - if attribute.startswith('['): + if attribute.startswith("["): container = NdArrayItemsContainer() i = 0 - format_str = '%0' + str(int(len(str(len(obj))))) + 'd' + format_str = "%0" + str(int(len(str(len(obj))))) + "d" for item in obj: setattr(container, format_str % i, item) i += 1 @@ -59,25 +59,25 @@ def resolve(self, obj, attribute): def get_dictionary(self, obj): ret = dict() - ret['__internals__'] = defaultResolver.get_dictionary(obj) + ret["__internals__"] = defaultResolver.get_dictionary(obj) if obj.size > 1024 * 1024: - ret['min'] = 'ndarray too big, calculating min would slow down debugging' - ret['max'] = 'ndarray too big, calculating max would slow down debugging' + ret["min"] = "ndarray too big, calculating min would slow down debugging" + ret["max"] = "ndarray too big, calculating max would slow down debugging" elif obj.size == 0: - ret['min'] = 'array is empty' - ret['max'] = 'array is empty' + ret["min"] = "array is empty" + ret["max"] = "array is empty" else: if self.is_numeric(obj): - ret['min'] = obj.min() - ret['max'] = obj.max() + ret["min"] = obj.min() + ret["max"] = obj.max() else: - ret['min'] = 'not a numeric object' - ret['max'] = 'not a numeric object' - ret['shape'] = obj.shape - ret['dtype'] = obj.dtype - ret['size'] = obj.size + ret["min"] = "not a numeric object" + ret["max"] = "not a numeric object" + ret["shape"] = obj.shape + ret["dtype"] = obj.dtype + ret["size"] = obj.size try: - ret['[0:%s] ' % (len(obj))] = list(obj[0:pydevd_constants.PYDEVD_CONTAINER_NUMPY_MAX_ITEMS]) + ret["[0:%s] " % (len(obj))] = list(obj[0 : pydevd_constants.PYDEVD_CONTAINER_NUMPY_MAX_ITEMS]) except: # This may not work depending on the array shape. pass diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py index abddc27bc..631691ef3 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugin_pandas_types.py @@ -13,7 +13,6 @@ def _get_dictionary(obj, replacements): ret = dict() cls = obj.__class__ for attr_name in dir(obj): - # This is interesting but it actually hides too much info from the dataframe. # attr_type_in_cls = type(getattr(cls, attr_name, None)) # if attr_type_in_cls == property: @@ -27,12 +26,12 @@ def _get_dictionary(obj, replacements): ret[attr_name] = replacement continue - attr_value = getattr(obj, attr_name, '') + attr_value = getattr(obj, attr_name, "") if inspect.isroutine(attr_value) or isinstance(attr_value, MethodWrapperType): continue ret[attr_name] = attr_value except Exception as e: - ret[attr_name] = '' % (e,) + ret[attr_name] = "" % (e,) finally: timer.report_if_getting_attr_slow(cls, attr_name) @@ -70,6 +69,7 @@ def customize_pandas_options(): if custom_options: from pandas import option_context + with option_context(*custom_options): yield else: @@ -77,9 +77,8 @@ def customize_pandas_options(): class PandasDataFrameTypeResolveProvider(object): - def can_provide(self, type_object, type_name): - data_frame_class = find_mod_attr('pandas.core.frame', 'DataFrame') + data_frame_class = find_mod_attr("pandas.core.frame", "DataFrame") return data_frame_class is not None and issubclass(type_object, data_frame_class) def resolve(self, obj, attribute): @@ -89,26 +88,24 @@ def get_dictionary(self, obj): replacements = { # This actually calls: DataFrame.transpose(), which can be expensive, so, # let's just add some string representation for it. - 'T': '', - + "T": "", # This creates a whole new dict{index: Series) for each column. Doing a # subsequent repr() from this dict can be very slow, so, don't return it. - '_series': '', - - 'style': '', + "_series": "", + "style": "", } return _get_dictionary(obj, replacements) - def get_str_in_context(self, df, context:str): - ''' + def get_str_in_context(self, df, context: str): + """ :param context: This is the context in which the variable is being requested. Valid values: "watch", "repl", "hover", "clipboard" - ''' - if context in ('repl', 'clipboard'): + """ + if context in ("repl", "clipboard"): return repr(df) return self.get_str(df) @@ -118,9 +115,8 @@ def get_str(self, df): class PandasSeriesTypeResolveProvider(object): - def can_provide(self, type_object, type_name): - series_class = find_mod_attr('pandas.core.series', 'Series') + series_class = find_mod_attr("pandas.core.series", "Series") return series_class is not None and issubclass(type_object, series_class) def resolve(self, obj, attribute): @@ -130,26 +126,24 @@ def get_dictionary(self, obj): replacements = { # This actually calls: DataFrame.transpose(), which can be expensive, so, # let's just add some string representation for it. - 'T': '', - + "T": "", # This creates a whole new dict{index: Series) for each column. Doing a # subsequent repr() from this dict can be very slow, so, don't return it. - '_series': '', - - 'style': '', + "_series": "", + "style": "", } return _get_dictionary(obj, replacements) - def get_str_in_context(self, df, context:str): - ''' + def get_str_in_context(self, df, context: str): + """ :param context: This is the context in which the variable is being requested. Valid values: "watch", "repl", "hover", "clipboard" - ''' - if context in ('repl', 'clipboard'): + """ + if context in ("repl", "clipboard"): return repr(df) return self.get_str(df) @@ -159,9 +153,8 @@ def get_str(self, series): class PandasStylerTypeResolveProvider(object): - def can_provide(self, type_object, type_name): - series_class = find_mod_attr('pandas.io.formats.style', 'Styler') + series_class = find_mod_attr("pandas.io.formats.style", "Styler") return series_class is not None and issubclass(type_object, series_class) def resolve(self, obj, attribute): @@ -169,9 +162,8 @@ def resolve(self, obj, attribute): def get_dictionary(self, obj): replacements = { - 'data': '', - - '__dict__': '', + "data": "", + "__dict__": "", } return _get_dictionary(obj, replacements) diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py index 8d64095e7..1d6d07315 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/extensions/types/pydevd_plugins_django_form_str.py @@ -4,11 +4,12 @@ class DjangoFormStr(object): def can_provide(self, type_object, type_name): - form_class = find_mod_attr('django.forms', 'Form') + form_class = find_mod_attr("django.forms", "Form") return form_class is not None and issubclass(type_object, form_class) def get_str(self, val): - return '%s: %r' % (find_class_name(val), val) + return "%s: %r" % (find_class_name(val), val) + import sys diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py index a5e4a000c..a8b3e310d 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/jinja2_debug.py @@ -9,17 +9,19 @@ class Jinja2LineBreakpoint(LineBreakpointWithLazyValidation): - - def __init__(self, canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=None, is_logpoint=False): + def __init__( + self, canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=None, is_logpoint=False + ): self.canonical_normalized_filename = canonical_normalized_filename - LineBreakpointWithLazyValidation.__init__(self, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint) + LineBreakpointWithLazyValidation.__init__( + self, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint + ) def __str__(self): return "Jinja2LineBreakpoint: %s-%d" % (self.canonical_normalized_filename, self.line) class _Jinja2ValidationInfo(ValidationInfo): - @overrides(ValidationInfo._collect_valid_lines_in_template_uncached) def _collect_valid_lines_in_template_uncached(self, template): lineno_mapping = _get_frame_lineno_mapping(template) @@ -29,10 +31,32 @@ def _collect_valid_lines_in_template_uncached(self, template): return set(x[0] for x in lineno_mapping) -def add_line_breakpoint(plugin, pydb, type, canonical_normalized_filename, breakpoint_id, line, condition, expression, func_name, hit_condition=None, is_logpoint=False, add_breakpoint_result=None, on_changed_breakpoint_state=None): - if type == 'jinja2-line': - jinja2_line_breakpoint = Jinja2LineBreakpoint(canonical_normalized_filename, breakpoint_id, line, condition, func_name, expression, hit_condition=hit_condition, is_logpoint=is_logpoint) - if not hasattr(pydb, 'jinja2_breakpoints'): +def add_line_breakpoint( + pydb, + type, + canonical_normalized_filename, + breakpoint_id, + line, + condition, + expression, + func_name, + hit_condition=None, + is_logpoint=False, + add_breakpoint_result=None, + on_changed_breakpoint_state=None, +): + if type == "jinja2-line": + jinja2_line_breakpoint = Jinja2LineBreakpoint( + canonical_normalized_filename, + breakpoint_id, + line, + condition, + func_name, + expression, + hit_condition=hit_condition, + is_logpoint=is_logpoint, + ) + if not hasattr(pydb, "jinja2_breakpoints"): _init_plugin_breaks(pydb) add_breakpoint_result.error_code = PyDevdAPI.ADD_BREAKPOINT_LAZY_VALIDATION @@ -43,23 +67,24 @@ def add_line_breakpoint(plugin, pydb, type, canonical_normalized_filename, break return None -def after_breakpoints_consolidated(plugin, py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): +def after_breakpoints_consolidated(py_db, canonical_normalized_filename, id_to_pybreakpoint, file_to_line_to_breakpoints): jinja2_breakpoints_for_file = file_to_line_to_breakpoints.get(canonical_normalized_filename) if not jinja2_breakpoints_for_file: return - if not hasattr(py_db, 'jinja2_validation_info'): + if not hasattr(py_db, "jinja2_validation_info"): _init_plugin_breaks(py_db) # In general we validate the breakpoints only when the template is loaded, but if the template # was already loaded, we can validate the breakpoints based on the last loaded value. py_db.jinja2_validation_info.verify_breakpoints_from_template_cached_lines( - py_db, canonical_normalized_filename, jinja2_breakpoints_for_file) + py_db, canonical_normalized_filename, jinja2_breakpoints_for_file + ) -def add_exception_breakpoint(plugin, pydb, type, exception): - if type == 'jinja2': - if not hasattr(pydb, 'jinja2_exception_break'): +def add_exception_breakpoint(pydb, type, exception): + if type == "jinja2": + if not hasattr(pydb, "jinja2_exception_break"): _init_plugin_breaks(pydb) pydb.jinja2_exception_break[exception] = True return True @@ -73,25 +98,25 @@ def _init_plugin_breaks(pydb): pydb.jinja2_validation_info = _Jinja2ValidationInfo() -def remove_all_exception_breakpoints(plugin, pydb): - if hasattr(pydb, 'jinja2_exception_break'): +def remove_all_exception_breakpoints(pydb): + if hasattr(pydb, "jinja2_exception_break"): pydb.jinja2_exception_break = {} return True return False -def remove_exception_breakpoint(plugin, pydb, type, exception): - if type == 'jinja2': +def remove_exception_breakpoint(pydb, exception_type, exception): + if exception_type == "jinja2": try: del pydb.jinja2_exception_break[exception] return True - except: + except KeyError: pass return False -def get_breakpoints(plugin, pydb, type): - if type == 'jinja2-line': +def get_breakpoints(pydb, breakpoint_type): + if breakpoint_type == "jinja2-line": return pydb.jinja2_breakpoints return None @@ -134,8 +159,12 @@ def _is_jinja2_context_call(frame): def _is_jinja2_internal_function(frame): - return 'self' in frame.f_locals and frame.f_locals['self'].__class__.__name__ in \ - ('LoopContext', 'TemplateReference', 'Macro', 'BlockReference') + return "self" in frame.f_locals and frame.f_locals["self"].__class__.__name__ in ( + "LoopContext", + "TemplateReference", + "Macro", + "BlockReference", + ) def _find_jinja2_render_frame(frame): @@ -144,17 +173,16 @@ def _find_jinja2_render_frame(frame): return frame -#======================================================================================================================= + +# ======================================================================================================================= # Jinja2 Frame -#======================================================================================================================= +# ======================================================================================================================= class Jinja2TemplateFrame(object): - IS_PLUGIN_FRAME = True def __init__(self, frame, original_filename=None, template_lineno=None): - if original_filename is None: original_filename = _get_jinja2_template_original_filename(frame) @@ -162,10 +190,10 @@ def __init__(self, frame, original_filename=None, template_lineno=None): template_lineno = _get_jinja2_template_line(frame) self.back_context = None - if 'context' in frame.f_locals: + if "context" in frame.f_locals: # sometimes we don't have 'context', e.g. in macros - self.back_context = frame.f_locals['context'] - self.f_code = FCode('template', original_filename) + self.back_context = frame.f_locals["context"] + self.f_code = FCode("template", original_filename) self.f_lineno = template_lineno self.f_back = frame self.f_globals = {} @@ -174,7 +202,7 @@ def __init__(self, frame, original_filename=None, template_lineno=None): def _get_real_var_name(self, orig_name): # replace leading number for local variables - parts = orig_name.split('_') + parts = orig_name.split("_") if len(parts) > 1 and parts[0].isdigit(): return parts[1] return orig_name @@ -182,7 +210,7 @@ def _get_real_var_name(self, orig_name): def collect_context(self, frame): res = {} for k, v in frame.f_locals.items(): - if not k.startswith('l_'): + if not k.startswith("l_"): res[k] = v elif v and not _is_missing(v): res[self._get_real_var_name(k[2:])] = v @@ -193,15 +221,15 @@ def collect_context(self, frame): def _change_variable(self, frame, name, value): in_vars_or_parents = False - if 'context' in frame.f_locals: - if name in frame.f_locals['context'].parent: + if "context" in frame.f_locals: + if name in frame.f_locals["context"].parent: self.back_context.parent[name] = value in_vars_or_parents = True - if name in frame.f_locals['context'].vars: + if name in frame.f_locals["context"].vars: self.back_context.vars[name] = value in_vars_or_parents = True - l_name = 'l_' + name + l_name = "l_" + name if l_name in frame.f_locals: if in_vars_or_parents: frame.f_locals[l_name] = self.back_context.resolve(name) @@ -210,11 +238,10 @@ def _change_variable(self, frame, name, value): class Jinja2TemplateSyntaxErrorFrame(object): - IS_PLUGIN_FRAME = True def __init__(self, frame, exception_cls_name, filename, lineno, f_locals): - self.f_code = FCode('Jinja2 %s' % (exception_cls_name,), filename) + self.f_code = FCode("Jinja2 %s" % (exception_cls_name,), filename) self.f_lineno = lineno self.f_back = frame self.f_globals = {} @@ -222,16 +249,16 @@ def __init__(self, frame, exception_cls_name, filename, lineno, f_locals): self.f_trace = None -def change_variable(plugin, frame, attr, expression): +def change_variable(frame, attr, expression, default): if isinstance(frame, Jinja2TemplateFrame): result = eval(expression, frame.f_globals, frame.f_locals) frame._change_variable(frame.f_back, attr, result) return result - return False + return default def _is_missing(item): - if item.__class__.__name__ == 'MissingType': + if item.__class__.__name__ == "MissingType": return True return False @@ -240,8 +267,9 @@ def _find_render_function_frame(frame): # in order to hide internal rendering functions old_frame = frame try: - while not ('self' in frame.f_locals and frame.f_locals['self'].__class__.__name__ == 'Template' and \ - frame.f_code.co_name == 'render'): + while not ( + "self" in frame.f_locals and frame.f_locals["self"].__class__.__name__ == "Template" and frame.f_code.co_name == "render" + ): frame = frame.f_back if frame is None: return old_frame @@ -253,7 +281,7 @@ def _find_render_function_frame(frame): def _get_jinja2_template_debug_info(frame): frame_globals = frame.f_globals - jinja_template = frame_globals.get('__jinja_template__') + jinja_template = frame_globals.get("__jinja_template__") if jinja_template is None: return None @@ -262,10 +290,10 @@ def _get_jinja2_template_debug_info(frame): def _get_frame_lineno_mapping(jinja_template): - ''' + """ :rtype: list(tuple(int,int)) :return: list((original_line, line_in_frame)) - ''' + """ # _debug_info is a string with the mapping from frame line to actual line # i.e.: "5=13&8=14" _debug_info = jinja_template._debug_info @@ -297,30 +325,31 @@ def _convert_to_str(s): def _get_jinja2_template_original_filename(frame): - if '__jinja_template__' in frame.f_globals: - return _convert_to_str(frame.f_globals['__jinja_template__'].filename) + if "__jinja_template__" in frame.f_globals: + return _convert_to_str(frame.f_globals["__jinja_template__"].filename) return None -#======================================================================================================================= + +# ======================================================================================================================= # Jinja2 Step Commands -#======================================================================================================================= +# ======================================================================================================================= -def has_exception_breaks(plugin): - if len(plugin.main_debugger.jinja2_exception_break) > 0: +def has_exception_breaks(py_db): + if len(py_db.jinja2_exception_break) > 0: return True return False -def has_line_breaks(plugin): - for _canonical_normalized_filename, breakpoints in plugin.main_debugger.jinja2_breakpoints.items(): +def has_line_breaks(py_db): + for _canonical_normalized_filename, breakpoints in py_db.jinja2_breakpoints.items(): if len(breakpoints) > 0: return True return False -def can_skip(plugin, pydb, frame): +def can_skip(pydb, frame): if pydb.jinja2_breakpoints and _is_jinja2_render_call(frame): filename = _get_jinja2_template_original_filename(frame) if filename is not None: @@ -333,39 +362,46 @@ def can_skip(plugin, pydb, frame): name = frame.f_code.co_name # errors in compile time - if name in ('template', 'top-level template code', '') or name.startswith('block '): + if name in ("template", "top-level template code", "") or name.startswith("block "): f_back = frame.f_back - module_name = '' + module_name = "" if f_back is not None: - module_name = f_back.f_globals.get('__name__', '') - if module_name.startswith('jinja2.'): + module_name = f_back.f_globals.get("__name__", "") + if module_name.startswith("jinja2."): return False return True -def cmd_step_into(plugin, pydb, frame, event, args, stop_info, stop): - info = args[2] - thread = args[3] +is_tracked_frame = _is_jinja2_render_call + + +def required_events_breakpoint(): + return ("line",) + + +def required_events_stepping(): + return ("call", "line", "return") + + +def cmd_step_into(pydb, frame, event, info, thread, stop_info, stop): plugin_stop = False - stop_info['jinja2_stop'] = False if _is_jinja2_suspended(thread): - stop_info['jinja2_stop'] = event in ('call', 'line') and _is_jinja2_render_call(frame) - plugin_stop = stop_info['jinja2_stop'] + plugin_stop = stop_info["jinja2_stop"] = event in ("call", "line") and _is_jinja2_render_call(frame) stop = False if info.pydev_call_from_jinja2 is not None: if _is_jinja2_internal_function(frame): - # if internal Jinja2 function was called, we sould continue debugging inside template + # if internal Jinja2 function was called, we should continue debugging inside template info.pydev_call_from_jinja2 = None else: # we go into python code from Jinja2 rendering frame stop = True - if event == 'call' and _is_jinja2_context_call(frame.f_back): + if event == "call" and _is_jinja2_context_call(frame.f_back): # we called function from context, the next step will be in function info.pydev_call_from_jinja2 = 1 - if event == 'return' and _is_jinja2_context_call(frame.f_back): + if event == "return" and _is_jinja2_context_call(frame.f_back): # we return from python code to Jinja2 rendering frame info.pydev_step_stop = info.pydev_call_from_jinja2 info.pydev_call_from_jinja2 = None @@ -378,31 +414,27 @@ def cmd_step_into(plugin, pydb, frame, event, args, stop_info, stop): return stop, plugin_stop -def cmd_step_over(plugin, pydb, frame, event, args, stop_info, stop): - info = args[2] - thread = args[3] +def cmd_step_over(pydb, frame, event, info, thread, stop_info, stop): plugin_stop = False - stop_info['jinja2_stop'] = False if _is_jinja2_suspended(thread): stop = False if info.pydev_call_inside_jinja2 is None: if _is_jinja2_render_call(frame): - if event == 'call': + if event == "call": info.pydev_call_inside_jinja2 = frame.f_back - if event in ('line', 'return'): + if event in ("line", "return"): info.pydev_call_inside_jinja2 = frame else: - if event == 'line': + if event == "line": if _is_jinja2_render_call(frame) and info.pydev_call_inside_jinja2 is frame: - stop_info['jinja2_stop'] = True - plugin_stop = stop_info['jinja2_stop'] - if event == 'return': - if frame is info.pydev_call_inside_jinja2 and 'event' not in frame.f_back.f_locals: + plugin_stop = stop_info["jinja2_stop"] = True + if event == "return": + if frame is info.pydev_call_inside_jinja2 and "event" not in frame.f_back.f_locals: info.pydev_call_inside_jinja2 = _find_jinja2_render_frame(frame.f_back) return stop, plugin_stop else: - if event == 'return' and _is_jinja2_context_call(frame.f_back): + if event == "return" and _is_jinja2_context_call(frame.f_back): # we return from python code to Jinja2 rendering frame info.pydev_call_from_jinja2 = None info.pydev_call_inside_jinja2 = _find_jinja2_render_frame(frame) @@ -419,10 +451,8 @@ def cmd_step_over(plugin, pydb, frame, event, args, stop_info, stop): return stop, plugin_stop -def stop(plugin, pydb, frame, event, args, stop_info, arg, step_cmd): - pydb = args[0] - thread = args[3] - if 'jinja2_stop' in stop_info and stop_info['jinja2_stop']: +def stop(pydb, frame, event, thread, stop_info, arg, step_cmd): + if "jinja2_stop" in stop_info and stop_info["jinja2_stop"]: frame = _suspend_jinja2(pydb, thread, frame, step_cmd) if frame: pydb.do_wait_suspend(thread, frame, event, arg) @@ -430,17 +460,13 @@ def stop(plugin, pydb, frame, event, args, stop_info, arg, step_cmd): return False -def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): - py_db = args[0] - _filename = args[1] - info = args[2] - break_type = 'jinja2' +def get_breakpoint(py_db, frame, event, info): + break_type = "jinja2" - if event == 'line' and info.pydev_state != STATE_SUSPEND and py_db.jinja2_breakpoints and _is_jinja2_render_call(frame): - - jinja_template = frame.f_globals.get('__jinja_template__') + if event == "line" and info.pydev_state != STATE_SUSPEND and py_db.jinja2_breakpoints and _is_jinja2_render_call(frame): + jinja_template = frame.f_globals.get("__jinja_template__") if jinja_template is None: - return False, None, None, break_type + return None original_filename = _get_jinja2_template_original_filename(frame) if original_filename is not None: @@ -449,7 +475,6 @@ def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): jinja2_breakpoints_for_file = py_db.jinja2_breakpoints.get(canonical_normalized_filename) if jinja2_breakpoints_for_file: - jinja2_validation_info = py_db.jinja2_validation_info jinja2_validation_info.verify_breakpoints(py_db, canonical_normalized_filename, jinja2_breakpoints_for_file, jinja_template) @@ -458,24 +483,22 @@ def get_breakpoint(plugin, py_db, pydb_frame, frame, event, args): jinja2_breakpoint = jinja2_breakpoints_for_file.get(template_lineno) if jinja2_breakpoint is not None: new_frame = Jinja2TemplateFrame(frame, original_filename, template_lineno) - return True, jinja2_breakpoint, new_frame, break_type + return jinja2_breakpoint, new_frame, break_type - return False, None, None, break_type + return None -def suspend(plugin, pydb, thread, frame, bp_type): - if bp_type == 'jinja2': +def suspend(pydb, thread, frame, bp_type): + if bp_type == "jinja2": return _suspend_jinja2(pydb, thread, frame) return None -def exception_break(plugin, pydb, pydb_frame, frame, args, arg): - pydb = args[0] - thread = args[3] +def exception_break(pydb, frame, thread, arg): exception, value, trace = arg if pydb.jinja2_exception_break and exception is not None: exception_type = list(pydb.jinja2_exception_break.keys())[0] - if exception.__name__ in ('UndefinedError', 'TemplateNotFound', 'TemplatesNotFound'): + if exception.__name__ in ("UndefinedError", "TemplateNotFound", "TemplatesNotFound"): # errors in rendering render_frame = _find_jinja2_render_frame(frame) if render_frame: @@ -486,19 +509,18 @@ def exception_break(plugin, pydb, pydb_frame, frame, args, arg): frame = suspend_frame return True, frame - elif exception.__name__ in ('TemplateSyntaxError', 'TemplateAssertionError'): + elif exception.__name__ in ("TemplateSyntaxError", "TemplateAssertionError"): name = frame.f_code.co_name # errors in compile time - if name in ('template', 'top-level template code', '') or name.startswith('block '): - + if name in ("template", "top-level template code", "") or name.startswith("block "): f_back = frame.f_back if f_back is not None: - module_name = f_back.f_globals.get('__name__', '') + module_name = f_back.f_globals.get("__name__", "") - if module_name.startswith('jinja2.'): + if module_name.startswith("jinja2."): # Jinja2 translates exception info and creates fake frame on his own - pydb_frame.set_suspend(thread, CMD_ADD_EXCEPTION_BREAK) + pydb.set_suspend(thread, CMD_ADD_EXCEPTION_BREAK) add_exception_to_frame(frame, (exception, value, trace)) thread.additional_info.suspend_type = JINJA2_SUSPEND thread.additional_info.pydev_message = str(exception_type) diff --git a/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py b/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py index 2b64a5255..e32aea654 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py +++ b/src/debugpy/_vendored/pydevd/pydevd_plugins/pydevd_line_validation.py @@ -5,7 +5,6 @@ class LineBreakpointWithLazyValidation(LineBreakpoint): - def __init__(self, *args, **kwargs): LineBreakpoint.__init__(self, *args, **kwargs) # This is the _AddBreakpointResult that'll be modified (and then re-sent on the @@ -23,7 +22,6 @@ def __init__(self, *args, **kwargs): class ValidationInfo(object): - def __init__(self): self._canonical_normalized_filename_to_last_template_lines = {} @@ -32,7 +30,7 @@ def _collect_valid_lines_in_template(self, template): # template may be a different instance (because the template contents could be # changed on disk), but this may still be called multiple times during the # same render session, so, caching is interesting. - lines_cache = getattr(template, '__pydevd_lines_cache__', None) + lines_cache = getattr(template, "__pydevd_lines_cache__", None) if lines_cache is not None: lines, sorted_lines = lines_cache return lines, sorted_lines @@ -48,28 +46,34 @@ def _collect_valid_lines_in_template_uncached(self, template): raise NotImplementedError() def verify_breakpoints(self, py_db, canonical_normalized_filename, template_breakpoints_for_file, template): - ''' + """ This function should be called whenever a rendering is detected. :param str canonical_normalized_filename: :param dict[int:LineBreakpointWithLazyValidation] template_breakpoints_for_file: - ''' + """ valid_lines_frozenset, sorted_lines = self._collect_valid_lines_in_template(template) self._canonical_normalized_filename_to_last_template_lines[canonical_normalized_filename] = valid_lines_frozenset, sorted_lines - self._verify_breakpoints_with_lines_collected(py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines) + self._verify_breakpoints_with_lines_collected( + py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines + ) def verify_breakpoints_from_template_cached_lines(self, py_db, canonical_normalized_filename, template_breakpoints_for_file): - ''' + """ This is used when the lines are already available (if just the template is available, `verify_breakpoints` should be used instead). - ''' + """ cached = self._canonical_normalized_filename_to_last_template_lines.get(canonical_normalized_filename) if cached is not None: valid_lines_frozenset, sorted_lines = cached - self._verify_breakpoints_with_lines_collected(py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines) + self._verify_breakpoints_with_lines_collected( + py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines + ) - def _verify_breakpoints_with_lines_collected(self, py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines): + def _verify_breakpoints_with_lines_collected( + self, py_db, canonical_normalized_filename, template_breakpoints_for_file, valid_lines_frozenset, sorted_lines + ): for line, template_bp in list(template_breakpoints_for_file.items()): # Note: iterate in a copy (we may mutate it). if template_bp.verified_cache_key != valid_lines_frozenset: template_bp.verified_cache_key = valid_lines_frozenset @@ -86,8 +90,13 @@ def _verify_breakpoints_with_lines_collected(self, py_db, canonical_normalized_f if new_line >= 0 and new_line not in template_breakpoints_for_file: # We just add it if found and if there's no existing breakpoint at that # location. - if template_bp.add_breakpoint_result.error_code != PyDevdAPI.ADD_BREAKPOINT_NO_ERROR and template_bp.add_breakpoint_result.translated_line != new_line: - pydev_log.debug('Template breakpoint in %s in line: %s moved to line: %s', canonical_normalized_filename, line, new_line) + if ( + template_bp.add_breakpoint_result.error_code != PyDevdAPI.ADD_BREAKPOINT_NO_ERROR + and template_bp.add_breakpoint_result.translated_line != new_line + ): + pydev_log.debug( + "Template breakpoint in %s in line: %s moved to line: %s", canonical_normalized_filename, line, new_line + ) template_bp.add_breakpoint_result.error_code = PyDevdAPI.ADD_BREAKPOINT_NO_ERROR template_bp.add_breakpoint_result.translated_line = new_line @@ -97,11 +106,15 @@ def _verify_breakpoints_with_lines_collected(self, py_db, canonical_normalized_f template_bp.on_changed_breakpoint_state(template_bp.breakpoint_id, template_bp.add_breakpoint_result) else: if template_bp.add_breakpoint_result.error_code != PyDevdAPI.ADD_BREAKPOINT_INVALID_LINE: - pydev_log.debug('Template breakpoint in %s in line: %s invalid (valid lines: %s)', canonical_normalized_filename, line, valid_lines_frozenset) + pydev_log.debug( + "Template breakpoint in %s in line: %s invalid (valid lines: %s)", + canonical_normalized_filename, + line, + valid_lines_frozenset, + ) template_bp.add_breakpoint_result.error_code = PyDevdAPI.ADD_BREAKPOINT_INVALID_LINE template_bp.on_changed_breakpoint_state(template_bp.breakpoint_id, template_bp.add_breakpoint_result) else: if template_bp.add_breakpoint_result.error_code != PyDevdAPI.ADD_BREAKPOINT_NO_ERROR: template_bp.add_breakpoint_result.error_code = PyDevdAPI.ADD_BREAKPOINT_NO_ERROR template_bp.on_changed_breakpoint_state(template_bp.breakpoint_id, template_bp.add_breakpoint_result) - diff --git a/src/debugpy/_vendored/pydevd/pydevd_tracing.py b/src/debugpy/_vendored/pydevd/pydevd_tracing.py index d658b1248..dddca43f7 100644 --- a/src/debugpy/_vendored/pydevd/pydevd_tracing.py +++ b/src/debugpy/_vendored/pydevd/pydevd_tracing.py @@ -1,6 +1,16 @@ -from _pydevd_bundle.pydevd_constants import get_frame, IS_CPYTHON, IS_64BIT_PROCESS, IS_WINDOWS, \ - IS_LINUX, IS_MAC, DebugInfoHolder, LOAD_NATIVE_LIB_FLAG, \ - ENV_FALSE_LOWER_VALUES, ForkSafeLock +from _pydevd_bundle.pydevd_constants import ( + get_frame, + IS_CPYTHON, + IS_64BIT_PROCESS, + IS_WINDOWS, + IS_LINUX, + IS_MAC, + DebugInfoHolder, + LOAD_NATIVE_LIB_FLAG, + ENV_FALSE_LOWER_VALUES, + ForkSafeLock, + PYDEVD_USE_SYS_MONITORING, +) from _pydev_bundle._pydev_saved_modules import thread, threading from _pydev_bundle import pydev_log, pydev_monkey import os.path @@ -14,8 +24,8 @@ class TracingFunctionHolder: - '''This class exists just to keep some variables (so that we don't keep them in the global namespace). - ''' + """This class exists just to keep some variables (so that we don't keep them in the global namespace).""" + _original_tracing = None _warn = True _traceback_limit = 1 @@ -30,14 +40,15 @@ def get_exception_traceback_str(): def _get_stack_str(frame): - - msg = '\nIf this is needed, please check: ' + \ - '\nhttp://pydev.blogspot.com/2007/06/why-cant-pydev-debugger-work-with.html' + \ - '\nto see how to restore the debug tracing back correctly.\n' + msg = ( + "\nIf this is needed, please check: " + + "\nhttp://pydev.blogspot.com/2007/06/why-cant-pydev-debugger-work-with.html" + + "\nto see how to restore the debug tracing back correctly.\n" + ) if TracingFunctionHolder._traceback_limit: s = StringIO() - s.write('Call Location:\n') + s.write("Call Location:\n") traceback.print_stack(f=frame, limit=TracingFunctionHolder._traceback_limit, file=s) msg = msg + s.getvalue() @@ -45,32 +56,34 @@ def _get_stack_str(frame): def _internal_set_trace(tracing_func): + if PYDEVD_USE_SYS_MONITORING: + raise RuntimeError("pydevd: Using sys.monitoring, sys.settrace should not be called.") if TracingFunctionHolder._warn: frame = get_frame() if frame is not None and frame.f_back is not None: filename = os.path.splitext(frame.f_back.f_code.co_filename.lower())[0] - if filename.endswith('threadpool') and 'gevent' in filename: + if filename.endswith("threadpool") and "gevent" in filename: if tracing_func is None: - pydev_log.debug('Disabled internal sys.settrace from gevent threadpool.') + pydev_log.debug("Disabled internal sys.settrace from gevent threadpool.") return elif not filename.endswith( - ( - 'threading', - 'pydevd_tracing', - ) - ): - - message = \ - '\nPYDEV DEBUGGER WARNING:' + \ - '\nsys.settrace() should not be used when the debugger is being used.' + \ - '\nThis may cause the debugger to stop working correctly.' + \ - '%s' % _get_stack_str(frame.f_back) + ( + "threading", + "pydevd_tracing", + ) + ): + message = ( + "\nPYDEV DEBUGGER WARNING:" + + "\nsys.settrace() should not be used when the debugger is being used." + + "\nThis may cause the debugger to stop working correctly." + + "%s" % _get_stack_str(frame.f_back) + ) if message not in TracingFunctionHolder._warnings_shown: # only warn about each message once... TracingFunctionHolder._warnings_shown[message] = 1 - sys.stderr.write('%s\n' % (message,)) + sys.stderr.write("%s\n" % (message,)) sys.stderr.flush() if TracingFunctionHolder._original_tracing: @@ -81,6 +94,8 @@ def _internal_set_trace(tracing_func): def SetTrace(tracing_func): + if PYDEVD_USE_SYS_MONITORING: + raise RuntimeError("SetTrace should not be used when using sys.monitoring.") _last_tracing_func_thread_local.tracing_func = tracing_func if tracing_func is not None: @@ -108,12 +123,16 @@ def reapply_settrace(): def replace_sys_set_trace_func(): + if PYDEVD_USE_SYS_MONITORING: + return if TracingFunctionHolder._original_tracing is None: TracingFunctionHolder._original_tracing = sys.settrace sys.settrace = _internal_set_trace def restore_sys_set_trace_func(): + if PYDEVD_USE_SYS_MONITORING: + return if TracingFunctionHolder._original_tracing is not None: sys.settrace = TracingFunctionHolder._original_tracing TracingFunctionHolder._original_tracing = None @@ -146,40 +165,40 @@ def get_python_helper_lib_filename(): # debugger -- the only situation where it's imported is if the user actually does an attach to # process, through `attach_pydevd.py`, but this should usually be called from the IDE directly # and not from the debugger). - libdir = os.path.join(os.path.dirname(__file__), 'pydevd_attach_to_process') + libdir = os.path.join(os.path.dirname(__file__), "pydevd_attach_to_process") - arch = '' + arch = "" if IS_WINDOWS: # prefer not using platform.machine() when possible (it's a bit heavyweight as it may # spawn a subprocess). - arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get('PROCESSOR_ARCHITECTURE', '')) + arch = os.environ.get("PROCESSOR_ARCHITEW6432", os.environ.get("PROCESSOR_ARCHITECTURE", "")) if not arch: arch = platform.machine() if not arch: - pydev_log.info('platform.machine() did not return valid value.') # This shouldn't happen... + pydev_log.info("platform.machine() did not return valid value.") # This shouldn't happen... return None if IS_WINDOWS: - extension = '.dll' - suffix_64 = 'amd64' - suffix_32 = 'x86' + extension = ".dll" + suffix_64 = "amd64" + suffix_32 = "x86" elif IS_LINUX: - extension = '.so' - suffix_64 = 'amd64' - suffix_32 = 'x86' + extension = ".so" + suffix_64 = "amd64" + suffix_32 = "x86" elif IS_MAC: - extension = '.dylib' - suffix_64 = 'x86_64' - suffix_32 = 'x86' + extension = ".dylib" + suffix_64 = "x86_64" + suffix_32 = "x86" else: - pydev_log.info('Unable to set trace to all threads in platform: %s', sys.platform) + pydev_log.info("Unable to set trace to all threads in platform: %s", sys.platform) return None - if arch.lower() not in ('amd64', 'x86', 'x86_64', 'i386', 'x86'): + if arch.lower() not in ("amd64", "x86", "x86_64", "i386", "x86"): # We don't support this processor by default. Still, let's support the case where the # user manually compiled it himself with some heuristics. # @@ -190,15 +209,15 @@ def get_python_helper_lib_filename(): # - linux_and_mac/compile_mac.sh try: - found = [name for name in os.listdir(libdir) if name.startswith('attach_') and name.endswith(extension)] + found = [name for name in os.listdir(libdir) if name.startswith("attach_") and name.endswith(extension)] except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: # There is no need to show this unless debug tracing is enabled. - pydev_log.exception('Error listing dir: %s', libdir) + pydev_log.exception("Error listing dir: %s", libdir) return None - expected_name = 'attach_' + arch + extension - expected_name_linux = 'attach_linux_' + arch + extension + expected_name = "attach_" + arch + extension + expected_name_linux = "attach_linux_" + arch + extension filename = None if expected_name in found: # Heuristic: user compiled with "attach_." @@ -216,14 +235,10 @@ def get_python_helper_lib_filename(): filename = os.path.join(libdir, found[0]) if filename is None: - pydev_log.info( - 'Unable to set trace to all threads in arch: %s (did not find a %s lib in %s).', - arch, expected_name, libdir - - ) + pydev_log.info("Unable to set trace to all threads in arch: %s (did not find a %s lib in %s).", arch, expected_name, libdir) return None - pydev_log.info('Using %s lib in arch: %s.', filename, arch) + pydev_log.info("Using %s lib in arch: %s.", filename, arch) else: # Happy path for which we have pre-compiled binaries. @@ -233,26 +248,30 @@ def get_python_helper_lib_filename(): suffix = suffix_32 if IS_WINDOWS or IS_MAC: # just the extension changes - prefix = 'attach_' + prefix = "attach_" elif IS_LINUX: # - prefix = 'attach_linux_' # historically it has a different name + prefix = "attach_linux_" # historically it has a different name else: - pydev_log.info('Unable to set trace to all threads in platform: %s', sys.platform) + pydev_log.info("Unable to set trace to all threads in platform: %s", sys.platform) return None - filename = os.path.join(libdir, '%s%s%s' % (prefix, suffix, extension)) + filename = os.path.join(libdir, "%s%s%s" % (prefix, suffix, extension)) if not os.path.exists(filename): - pydev_log.critical('Expected: %s to exist.', filename) + pydev_log.critical("Expected: %s to exist.", filename) return None return filename def _load_python_helper_lib_uncached(): - if (not IS_CPYTHON or sys.version_info[:2] > (3, 11) - or hasattr(sys, 'gettotalrefcount') or LOAD_NATIVE_LIB_FLAG in ENV_FALSE_LOWER_VALUES): - pydev_log.info('Helper lib to set tracing to all threads not loaded.') + if ( + not IS_CPYTHON + or sys.version_info[:2] > (3, 11) + or hasattr(sys, "gettotalrefcount") + or LOAD_NATIVE_LIB_FLAG in ENV_FALSE_LOWER_VALUES + ): + pydev_log.info("Helper lib to set tracing to all threads not loaded.") return None try: @@ -261,17 +280,19 @@ def _load_python_helper_lib_uncached(): return None # Load as pydll so that we don't release the gil. lib = ctypes.pydll.LoadLibrary(filename) - pydev_log.info('Successfully Loaded helper lib to set tracing to all threads.') + pydev_log.info("Successfully Loaded helper lib to set tracing to all threads.") return lib except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: # Only show message if tracing is on (we don't have pre-compiled # binaries for all architectures -- i.e.: ARM). - pydev_log.exception('Error loading: %s', filename) + pydev_log.exception("Error loading: %s", filename) return None def set_trace_to_threads(tracing_func, thread_idents=None, create_dummy_thread=True): + if PYDEVD_USE_SYS_MONITORING: + raise RuntimeError("Should not be called when using sys.monitoring.") assert tracing_func is not None ret = 0 @@ -288,7 +309,7 @@ def set_trace_to_threads(tracing_func, thread_idents=None, create_dummy_thread=T # PY-44778: ignore pydevd threads and also add any thread that wasn't found on # sys._current_frames() as some existing threads may not appear in # sys._current_frames() but may be available through the `threading` module. - if getattr(t, 'pydev_do_not_trace', False): + if getattr(t, "pydev_do_not_trace", False): thread_idents.discard(t.ident) else: thread_idents.add(t.ident) @@ -310,7 +331,6 @@ def set_trace_to_threads(tracing_func, thread_idents=None, create_dummy_thread=T if thread_ident not in threading._active: class _DummyThread(threading._DummyThread): - def _set_ident(self): # Note: Hack to set the thread ident that we want. self._ident = thread_ident @@ -331,7 +351,7 @@ def _set_ident(self): if t.ident != thread_ident: # Check if it actually worked. - pydev_log.critical('pydevd: creation of _DummyThread with fixed thread ident did not succeed.') + pydev_log.critical("pydevd: creation of _DummyThread with fixed thread ident did not succeed.") # Some (ptvsd) tests failed because of this, so, leave it always disabled for now. # show_debug_info = 1 if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1 else 0 @@ -360,7 +380,7 @@ def increase_tracing_count(): lib = _load_python_helper_lib() if lib is None: # This is the case if it's not CPython. - pydev_log.info('Unable to load helper lib to set tracing to all threads (unsupported python vm).') + pydev_log.info("Unable to load helper lib to set tracing to all threads (unsupported python vm).") ret = -1 else: try: @@ -374,12 +394,11 @@ def increase_tracing_count(): except: if DebugInfoHolder.DEBUG_TRACE_LEVEL >= 1: # There is no need to show this unless debug tracing is enabled. - pydev_log.exception('Error attaching debugger tracing') + pydev_log.exception("Error attaching debugger tracing") ret = -1 else: if result != 0: - pydev_log.info('Unable to set tracing for existing thread. Result: %s', result) + pydev_log.info("Unable to set tracing for existing thread. Result: %s", result) ret = result return ret - diff --git a/src/debugpy/_vendored/pydevd/pyproject.toml b/src/debugpy/_vendored/pydevd/pyproject.toml new file mode 100644 index 000000000..79c68d11e --- /dev/null +++ b/src/debugpy/_vendored/pydevd/pyproject.toml @@ -0,0 +1,20 @@ +# See: https://cibuildwheel.readthedocs.io/en/stable/options/ + +[tool.cibuildwheel] +# Customize what to build +# build="cp36-manylinux_x86_64" + +before-build = """ +pydevd_attach_to_process/linux_and_mac/compile_linux.sh +pip install cython +python build_tools/build.py +""" + +[tool.ruff] +line-length = 140 +exclude = [ + "tests_python/resources/*", + "tests_python/my_django_proj*", + "tests_python/test_collect_bytecode_info.py", + "tests_python/test_smart_step_into_bytecode.py" +] diff --git a/src/debugpy/_vendored/pydevd/runfiles.py b/src/debugpy/_vendored/pydevd/runfiles.py index 15b9f3aae..3599769f9 100644 --- a/src/debugpy/_vendored/pydevd/runfiles.py +++ b/src/debugpy/_vendored/pydevd/runfiles.py @@ -1,8 +1,8 @@ -''' +""" Entry point module (keep at root): Used to run with tests with unittest/pytest/nose. -''' +""" import os @@ -15,8 +15,8 @@ def main(): other_test_framework_params = [] found_other_test_framework_param = None - NOSE_PARAMS = '--nose-params' - PY_TEST_PARAMS = '--py-test-params' + NOSE_PARAMS = "--nose-params" + PY_TEST_PARAMS = "--py-test-params" for arg in sys.argv[1:]: if not found_other_test_framework_param and arg != NOSE_PARAMS and arg != PY_TEST_PARAMS: @@ -48,15 +48,15 @@ def get_with_filesystem_case(f): DEBUG = 0 if DEBUG: - sys.stdout.write('Received parameters: %s\n' % (sys.argv,)) - sys.stdout.write('Params for pydev: %s\n' % (pydev_params,)) + sys.stdout.write("Received parameters: %s\n" % (sys.argv,)) + sys.stdout.write("Params for pydev: %s\n" % (pydev_params,)) if found_other_test_framework_param: - sys.stdout.write('Params for test framework: %s, %s\n' % (found_other_test_framework_param, other_test_framework_params)) + sys.stdout.write("Params for test framework: %s, %s\n" % (found_other_test_framework_param, other_test_framework_params)) try: configuration = pydev_runfiles.parse_cmdline([sys.argv[0]] + pydev_params) except: - sys.stderr.write('Command line received: %s\n' % (sys.argv,)) + sys.stderr.write("Command line received: %s\n" % (sys.argv,)) raise pydev_runfiles_xml_rpc.initialize_server(configuration.port) # Note that if the port is None, a Null server will be initialized. @@ -74,7 +74,7 @@ def get_with_filesystem_case(f): import pytest else: - raise ImportError('Test framework: %s not supported.' % (found_other_test_framework_param,)) + raise ImportError("Test framework: %s not supported." % (found_other_test_framework_param,)) else: raise ImportError() @@ -87,11 +87,10 @@ def get_with_filesystem_case(f): # Clear any exception that may be there so that clients don't see it. # See: https://sourceforge.net/tracker/?func=detail&aid=3408057&group_id=85796&atid=577329 - if hasattr(sys, 'exc_clear'): + if hasattr(sys, "exc_clear"): sys.exc_clear() if not test_framework: - return pydev_runfiles.main(configuration) # Note: still doesn't return a proper value. else: @@ -116,7 +115,7 @@ def get_with_filesystem_case(f): for file, tests in files_to_tests.items(): if test_framework == NOSE_FRAMEWORK: for test in tests: - files_or_dirs.append(file + ':' + test) + files_or_dirs.append(file + ":" + test) elif test_framework == PY_TEST_FRAMEWORK: py_test_accept_filter[file] = tests @@ -124,7 +123,7 @@ def get_with_filesystem_case(f): files_or_dirs.append(file) else: - raise AssertionError('Cannot handle test framework: %s at this point.' % (test_framework,)) + raise AssertionError("Cannot handle test framework: %s at this point." % (test_framework,)) else: if configuration.tests: @@ -133,7 +132,7 @@ def get_with_filesystem_case(f): for file in configuration.files_or_dirs: if test_framework == NOSE_FRAMEWORK: for t in configuration.tests: - files_or_dirs.append(file + ':' + t) + files_or_dirs.append(file + ":" + t) elif test_framework == PY_TEST_FRAMEWORK: py_test_accept_filter[file] = configuration.tests @@ -141,7 +140,7 @@ def get_with_filesystem_case(f): files_or_dirs.append(file) else: - raise AssertionError('Cannot handle test framework: %s at this point.' % (test_framework,)) + raise AssertionError("Cannot handle test framework: %s at this point." % (test_framework,)) else: # Only files or dirs passed (let it do the test-loading based on those paths) files_or_dirs = configuration.files_or_dirs @@ -154,42 +153,45 @@ def get_with_filesystem_case(f): # processes_option = ['--processes=2'] argv.insert(0, sys.argv[0]) if DEBUG: - sys.stdout.write('Final test framework args: %s\n' % (argv[1:],)) + sys.stdout.write("Final test framework args: %s\n" % (argv[1:],)) from _pydev_runfiles import pydev_runfiles_nose + PYDEV_NOSE_PLUGIN_SINGLETON = pydev_runfiles_nose.start_pydev_nose_plugin_singleton(configuration) - argv.append('--with-pydevplugin') + argv.append("--with-pydevplugin") # Return 'not' because it will return 'success' (so, exit == 0 if success) return not nose.run(argv=argv, addplugins=[PYDEV_NOSE_PLUGIN_SINGLETON]) elif test_framework == PY_TEST_FRAMEWORK: - - if '--coverage_output_dir' in pydev_params and '--coverage_include' in pydev_params: - coverage_output_dir = pydev_params[pydev_params.index('--coverage_output_dir') + 1] - coverage_include = pydev_params[pydev_params.index('--coverage_include') + 1] + if "--coverage_output_dir" in pydev_params and "--coverage_include" in pydev_params: + coverage_output_dir = pydev_params[pydev_params.index("--coverage_output_dir") + 1] + coverage_include = pydev_params[pydev_params.index("--coverage_include") + 1] try: import pytest_cov except ImportError: - sys.stderr.write('To do a coverage run with pytest the pytest-cov library is needed (i.e.: pip install pytest-cov).\n\n') + sys.stderr.write( + "To do a coverage run with pytest the pytest-cov library is needed (i.e.: pip install pytest-cov).\n\n" + ) raise - argv.insert(0, '--cov-append') - argv.insert(1, '--cov-report=') - argv.insert(2, '--cov=%s' % (coverage_include,)) + argv.insert(0, "--cov-append") + argv.insert(1, "--cov-report=") + argv.insert(2, "--cov=%s" % (coverage_include,)) import time - os.environ['COVERAGE_FILE'] = os.path.join(coverage_output_dir, '.coverage.%s' % (time.time(),)) + + os.environ["COVERAGE_FILE"] = os.path.join(coverage_output_dir, ".coverage.%s" % (time.time(),)) if DEBUG: - sys.stdout.write('Final test framework args: %s\n' % (argv,)) - sys.stdout.write('py_test_accept_filter: %s\n' % (py_test_accept_filter,)) + sys.stdout.write("Final test framework args: %s\n" % (argv,)) + sys.stdout.write("py_test_accept_filter: %s\n" % (py_test_accept_filter,)) def dotted(p): # Helper to convert path to have dots instead of slashes - return os.path.normpath(p).replace(os.sep, "/").replace('/', '.') + return os.path.normpath(p).replace(os.sep, "/").replace("/", ".") - curr_dir = os.path.realpath('.') - curr_dotted = dotted(curr_dir) + '.' + curr_dir = os.path.realpath(".") + curr_dotted = dotted(curr_dir) + "." # Overcome limitation on py.test: # When searching conftest if we have a structure as: @@ -203,11 +205,26 @@ def dotted(p): # See related issue (for which we work-around below): # https://bitbucket.org/hpk42/pytest/issue/639/conftest-being-loaded-twice-giving - for path in sys.path: - path_dotted = dotted(path) - if curr_dotted.startswith(path_dotted): - os.chdir(path) + found_conftest = False + + curdir_abs = os.path.abspath(os.curdir) + while True: + if os.path.exists(os.path.join(curdir_abs, "conftest.py")): + os.chdir(curdir_abs) + found_conftest = True + break + + parent = os.path.dirname(curdir_abs) + if curdir_abs == parent or not parent: break + curdir_abs = parent + + if not found_conftest: + for path in sys.path: + path_dotted = dotted(path) + if curr_dotted.startswith(path_dotted): + os.chdir(path) + break remove = [] for i in range(len(argv)): @@ -215,13 +232,13 @@ def dotted(p): # Workaround bug in py.test: if we pass the full path it ends up importing conftest # more than once (so, always work with relative paths). if os.path.isfile(arg) or os.path.isdir(arg): - # Args must be passed with the proper case in the filesystem (otherwise # python itself may not recognize it). arg = get_with_filesystem_case(arg) argv[i] = arg from os.path import relpath + try: # May fail if on different drives arg = relpath(arg) @@ -229,7 +246,7 @@ def dotted(p): pass else: argv[i] = arg - elif '' in arg: + elif "" in arg: remove.append(i) for i in reversed(remove): @@ -243,74 +260,76 @@ def dotted(p): import pickle, zlib, base64 # Update environment PYTHONPATH so that it finds our plugin if using xdist. - os.environ['PYTHONPATH'] = os.pathsep.join(sys.path) + os.environ["PYTHONPATH"] = os.pathsep.join(sys.path) # Set what should be skipped in the plugin through an environment variable s = base64.b64encode(zlib.compress(pickle.dumps(py_test_accept_filter))) - s = s.decode('ascii') # Must be str in py3. - os.environ['PYDEV_PYTEST_SKIP'] = s + s = s.decode("ascii") # Must be str in py3. + os.environ["PYDEV_PYTEST_SKIP"] = s # Identifies the main pid (i.e.: if it's not the main pid it has to connect back to the # main pid to give xml-rpc notifications). - os.environ['PYDEV_MAIN_PID'] = str(os.getpid()) - os.environ['PYDEV_PYTEST_SERVER'] = str(configuration.port) + os.environ["PYDEV_MAIN_PID"] = str(os.getpid()) + os.environ["PYDEV_PYTEST_SERVER"] = str(configuration.port) - argv.append('-p') - argv.append('_pydev_runfiles.pydev_runfiles_pytest2') + argv.append("-p") + argv.append("_pydev_runfiles.pydev_runfiles_pytest2") return pytest.main(argv) else: - raise AssertionError('Cannot handle test framework: %s at this point.' % (test_framework,)) + raise AssertionError("Cannot handle test framework: %s at this point." % (test_framework,)) -if __name__ == '__main__': +if __name__ == "__main__": try: main() finally: try: # The server is not a daemon thread, so, we have to ask for it to be killed! from _pydev_runfiles import pydev_runfiles_xml_rpc + pydev_runfiles_xml_rpc.force_server_kill() except: pass # Ignore any errors here import sys import threading - if hasattr(sys, '_current_frames') and hasattr(threading, 'enumerate'): + + if hasattr(sys, "_current_frames") and hasattr(threading, "enumerate"): import time import traceback class DumpThreads(threading.Thread): - def run(self): time.sleep(10) thread_id_to_name = {} try: for t in threading.enumerate(): - thread_id_to_name[t.ident] = '%s (daemon: %s)' % (t.name, t.daemon) + thread_id_to_name[t.ident] = "%s (daemon: %s)" % (t.name, t.daemon) except: pass stack_trace = [ - '===============================================================================', - 'pydev pyunit runner: Threads still found running after tests finished', - '================================= Thread Dump ================================='] + "===============================================================================", + "pydev pyunit runner: Threads still found running after tests finished", + "================================= Thread Dump =================================", + ] for thread_id, stack in sys._current_frames().items(): - stack_trace.append('\n-------------------------------------------------------------------------------') + stack_trace.append("\n-------------------------------------------------------------------------------") stack_trace.append(" Thread %s" % thread_id_to_name.get(thread_id, thread_id)) - stack_trace.append('') + stack_trace.append("") - if 'self' in stack.f_locals: - sys.stderr.write(str(stack.f_locals['self']) + '\n') + if "self" in stack.f_locals: + sys.stderr.write(str(stack.f_locals["self"]) + "\n") for filename, lineno, name, line in traceback.extract_stack(stack): stack_trace.append(' File "%s", line %d, in %s' % (filename, lineno, name)) if line: stack_trace.append(" %s" % (line.strip())) - stack_trace.append('\n=============================== END Thread Dump ===============================') - sys.stderr.write('\n'.join(stack_trace)) + stack_trace.append("\n=============================== END Thread Dump ===============================") + sys.stderr.write("\n".join(stack_trace)) dump_current_frames_thread = DumpThreads() dump_current_frames_thread.daemon = True # Daemon so that this thread doesn't halt it! diff --git a/src/debugpy/_vendored/pydevd/setup.py b/src/debugpy/_vendored/pydevd/setup.py index 25e886e66..d90f44912 100644 --- a/src/debugpy/_vendored/pydevd/setup.py +++ b/src/debugpy/_vendored/pydevd/setup.py @@ -1,4 +1,4 @@ -r''' +r""" Full setup, used to distribute the debugger backend to PyPi. Note that this is mostly so that users can do: @@ -19,7 +19,7 @@ build_tools\pydevd_release_process.txt for release process. -''' +""" from setuptools import setup from setuptools.dist import Distribution @@ -35,109 +35,117 @@ def is_pure(self): data_files = [] +this_dir = os.path.dirname(os.path.abspath(__file__)) +attach_to_process_dir = os.path.join(this_dir, "pydevd_attach_to_process") + def accept_file(f): f = f.lower() - for ext in '.py .dll .so .dylib .txt .cpp .h .bat .c .sh .md .txt'.split(): + for ext in ".py .dll .so .dylib .txt .cpp .h .bat .c .sh .md .txt".split(): if f.endswith(ext): return True - return f in ['readme', 'makefile'] + return f in ["readme", "makefile"] + +def make_rel(p): + return os.path.relpath(p, this_dir) -data_files.append(('pydevd_attach_to_process', [os.path.join('pydevd_attach_to_process', f) for f in os.listdir('pydevd_attach_to_process') if accept_file(f)])) -for root, dirs, files in os.walk("pydevd_attach_to_process"): + +data_files.append( + ( + "pydevd_attach_to_process", + [make_rel(os.path.join(attach_to_process_dir, f)) for f in os.listdir(attach_to_process_dir) if accept_file(f)], + ) +) +for root, dirs, files in os.walk(attach_to_process_dir): for d in dirs: - data_files.append((os.path.join(root, d), [os.path.join(root, d, f) for f in os.listdir(os.path.join(root, d)) if accept_file(f)])) + data_files.append((make_rel(os.path.join(root, d)), [make_rel(os.path.join(root, d, f)) for f in os.listdir(os.path.join(root, d)) if accept_file(f)])) import pydevd + version = pydevd.__version__ -with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'README.md'), 'r', encoding='utf-8') as stream: +with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), "README.md"), "r", encoding="utf-8") as stream: long_description = stream.read() args = dict( - name='pydevd', + name="pydevd", version=version, - description='PyDev.Debugger (used in PyDev, PyCharm and VSCode Python)', - long_description_content_type='text/markdown', + description="PyDev.Debugger (used in PyDev, PyCharm and VSCode Python)", + long_description_content_type="text/markdown", long_description=long_description, - author='Fabio Zadrozny and others', - url='https://github.com/fabioz/PyDev.Debugger/', - license='EPL, Apache 2.0', + author="Fabio Zadrozny and others", + url="https://github.com/fabioz/PyDev.Debugger/", + license="EPL", packages=[ - '_pydev_bundle', - '_pydev_bundle.fsnotify', - '_pydev_runfiles', - '_pydevd_bundle', - '_pydevd_bundle._debug_adapter', - '_pydevd_bundle.pydevd_concurrency_analyser', - '_pydevd_frame_eval', - '_pydevd_frame_eval.vendored', - '_pydevd_frame_eval.vendored.bytecode', - 'pydev_ipython', - + "_pydev_bundle", + "_pydev_bundle.fsnotify", + "_pydev_runfiles", + "_pydevd_bundle", + "_pydevd_bundle._debug_adapter", + "_pydevd_bundle.pydevd_concurrency_analyser", + "_pydevd_frame_eval", + "_pydevd_sys_monitoring", + "_pydevd_frame_eval.vendored", + "_pydevd_frame_eval.vendored.bytecode", + "pydev_ipython", # 'pydev_sitecustomize', -- Not actually a package (not added) - - 'pydevd_attach_to_process', - - 'pydevd_plugins', - 'pydevd_plugins.extensions', - 'pydevd_plugins.extensions.types', + "pydevd_attach_to_process", + "pydevd_plugins", + "pydevd_plugins.extensions", + "pydevd_plugins.extensions.types", ], py_modules=[ # 'interpreterInfo', -- Not needed for debugger # 'pycompletionserver', -- Not needed for debugger - 'pydev_app_engine_debug_startup', + "pydev_app_engine_debug_startup", # 'pydev_coverage', -- Not needed for debugger # 'pydev_pysrc', -- Not needed for debugger - 'pydev_run_in_console', - 'pydevconsole', - 'pydevd_file_utils', - 'pydevd', - 'pydevd_tracing', + "pydev_run_in_console", + "pydevconsole", + "pydevd_file_utils", + "pydevd", + "pydevd_tracing", # 'runfiles', -- Not needed for debugger - 'setup_pydevd_cython', # Distributed to clients. See: https://github.com/fabioz/PyDev.Debugger/issues/102 + "setup_pydevd_cython", # Distributed to clients. See: https://github.com/fabioz/PyDev.Debugger/issues/102 # 'setup', -- Should not be included as a module ], classifiers=[ - 'Development Status :: 6 - Mature', - 'Environment :: Console', - 'Intended Audience :: Developers', - - 'License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)', - 'License :: OSI Approved :: Apache Software License', - - 'Operating System :: MacOS :: MacOS X', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: POSIX', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Topic :: Software Development :: Debuggers', + "Development Status :: 6 - Mature", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Debuggers", ], entry_points={ - 'console_scripts':[ - 'pydevd = pydevd:main', + "console_scripts": [ + "pydevd = pydevd:main", ], }, data_files=data_files, - keywords=['pydev', 'pydevd', 'pydev.debugger'], + keywords=["pydev", "pydevd", "pydev.debugger"], include_package_data=True, zip_safe=False, ) import sys + try: extra_compile_args = [] extra_link_args = [] - if 'linux' in sys.platform: + if "linux" in sys.platform: # Enabling -flto brings executable from 4MB to 0.56MB and -Os to 0.41MB # Profiling shows an execution around 3-5% slower with -Os vs -O3, # so, kept only -flto. @@ -153,7 +161,7 @@ def accept_file(f): # extra_compile_args = ["-flto", "-fprofile-generate"] # ... Run benchmarks ... # extra_compile_args = ["-flto", "-fprofile-use", "-fprofile-correction"] - elif 'win32' in sys.platform: + elif "win32" in sys.platform: pass # uncomment to generate pdbs for visual studio. # extra_compile_args=["-Zi", "/Od"] @@ -161,26 +169,54 @@ def accept_file(f): kwargs = {} if extra_link_args: - kwargs['extra_link_args'] = extra_link_args + kwargs["extra_link_args"] = extra_link_args if extra_compile_args: - kwargs['extra_compile_args'] = extra_compile_args + kwargs["extra_compile_args"] = extra_compile_args + + ext_modules = [ + # In this setup, don't even try to compile with cython, just go with the .c file which should've + # been properly generated from a tested version. + Extension( + "_pydevd_bundle.pydevd_cython", + [ + "_pydevd_bundle/pydevd_cython.c", + ], + define_macros=[("Py_BUILD_CORE_MODULE", "1")], + **kwargs, + ) + ] + + py_version = sys.version_info[:2] + if (3, 6) <= py_version <= (3, 10): + ext_modules.append( + Extension( + "_pydevd_frame_eval.pydevd_frame_evaluator", + [ + "_pydevd_frame_eval/pydevd_frame_evaluator.c", + ], + define_macros=[("Py_BUILD_CORE_MODULE", "1")], + **kwargs, + ) + ) - args_with_binaries = args.copy() - args_with_binaries.update(dict( - distclass=BinaryDistribution, - ext_modules=[ - # In this setup, don't even try to compile with cython, just go with the .c file which should've - # been properly generated from a tested version. + # Note: 3.11 does not have frame eval implemented (nor sys.monitoring) + + if py_version >= (3, 12): + ext_modules.append( Extension( - '_pydevd_bundle.pydevd_cython', - ["_pydevd_bundle/pydevd_cython.c", ], - define_macros=[('Py_BUILD_CORE_MODULE', '1')], - **kwargs + "_pydevd_sys_monitoring._pydevd_sys_monitoring_cython", + [ + "_pydevd_sys_monitoring/_pydevd_sys_monitoring_cython.c", + ], + define_macros=[("Py_BUILD_CORE_MODULE", "1")], + **kwargs, ) - ] - )) + ) + + args_with_binaries = args.copy() + args_with_binaries.update(dict(distclass=BinaryDistribution, ext_modules=ext_modules)) setup(**args_with_binaries) except: # Compile failed: just setup without compiling cython deps. setup(**args) - sys.stdout.write('Plain-python version of pydevd installed (cython speedups not available).\n') + sys.stdout.write("Plain-python version of pydevd installed (cython speedups not available).\n") diff --git a/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py b/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py index 5b395ddcf..01b2e6cce 100644 --- a/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py +++ b/src/debugpy/_vendored/pydevd/setup_pydevd_cython.py @@ -1,4 +1,4 @@ -''' +""" A simpler setup version just to compile the speedup module. It should be used as: @@ -7,7 +7,7 @@ Note: the .c file and other generated files are regenerated from the .pyx file by running "python build_tools/build.py" -''' +""" import os import sys @@ -15,8 +15,9 @@ os.chdir(os.path.dirname(os.path.abspath(__file__))) -IS_PY36_OR_GREATER = sys.version_info > (3, 6) -TODO_PY311 = sys.version_info > (3, 11) +IS_PY36_OR_GREATER = sys.version_info[:2] >= (3, 6) +IS_PY311_ONWARDS = sys.version_info[:2] >= (3, 11) +IS_PY312_ONWARDS = sys.version_info[:2] >= (3, 12) def process_args(): @@ -26,16 +27,16 @@ def process_args(): force_cython = False for i, arg in enumerate(sys.argv[:]): - if arg == '--build-lib': + if arg == "--build-lib": extension_folder = sys.argv[i + 1] # It shouldn't be removed from sys.argv (among with --build-temp) because they're passed further to setup() - if arg.startswith('--target-pyd-name='): + if arg.startswith("--target-pyd-name="): sys.argv.remove(arg) - target_pydevd_name = arg[len('--target-pyd-name='):] - if arg.startswith('--target-pyd-frame-eval='): + target_pydevd_name = arg[len("--target-pyd-name=") :] + if arg.startswith("--target-pyd-frame-eval="): sys.argv.remove(arg) - target_frame_eval = arg[len('--target-pyd-frame-eval='):] - if arg == '--force-cython': + target_frame_eval = arg[len("--target-pyd-frame-eval=") :] + if arg == "--force-cython": sys.argv.remove(arg) force_cython = True @@ -44,26 +45,32 @@ def process_args(): def process_template_lines(template_lines): # Create 2 versions of the template, one for Python 3.8 and another for Python 3.9 - for version in ('38', '39'): - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' + for version in ("38", "39"): + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" for line in template_lines: - if version == '38': - line = line.replace('get_bytecode_while_frame_eval(PyFrameObject * frame_obj, int exc)', 'get_bytecode_while_frame_eval_38(PyFrameObject * frame_obj, int exc)') - line = line.replace('CALL_EvalFrameDefault', 'CALL_EvalFrameDefault_38(frame_obj, exc)') + if version == "38": + line = line.replace( + "get_bytecode_while_frame_eval(PyFrameObject * frame_obj, int exc)", + "get_bytecode_while_frame_eval_38(PyFrameObject * frame_obj, int exc)", + ) + line = line.replace("CALL_EvalFrameDefault", "CALL_EvalFrameDefault_38(frame_obj, exc)") else: # 3.9 - line = line.replace('get_bytecode_while_frame_eval(PyFrameObject * frame_obj, int exc)', 'get_bytecode_while_frame_eval_39(PyThreadState* tstate, PyFrameObject * frame_obj, int exc)') - line = line.replace('CALL_EvalFrameDefault', 'CALL_EvalFrameDefault_39(tstate, frame_obj, exc)') + line = line.replace( + "get_bytecode_while_frame_eval(PyFrameObject * frame_obj, int exc)", + "get_bytecode_while_frame_eval_39(PyThreadState* tstate, PyFrameObject * frame_obj, int exc)", + ) + line = line.replace("CALL_EvalFrameDefault", "CALL_EvalFrameDefault_39(tstate, frame_obj, exc)") yield line - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' - yield '### WARNING: GENERATED CODE, DO NOT EDIT!' - yield '' - yield '' + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" + yield "### WARNING: GENERATED CODE, DO NOT EDIT!" + yield "" + yield "" def process_template_file(contents): @@ -72,16 +79,16 @@ def process_template_file(contents): append_to = ret for line in contents.splitlines(keepends=False): - if line.strip() == '### TEMPLATE_START': + if line.strip() == "### TEMPLATE_START": append_to = template_lines - elif line.strip() == '### TEMPLATE_END': + elif line.strip() == "### TEMPLATE_END": append_to = ret for line in process_template_lines(template_lines): ret.append(line) else: append_to.append(line) - return '\n'.join(ret) + return "\n".join(ret) def build_extension(dir_name, extension_name, target_pydevd_name, force_cython, extended=False, has_pxd=False, template=False): @@ -89,12 +96,12 @@ def build_extension(dir_name, extension_name, target_pydevd_name, force_cython, if template: pyx_template_file = os.path.join(os.path.dirname(__file__), dir_name, "%s.template.pyx" % (extension_name,)) - with open(pyx_template_file, 'r') as stream: + with open(pyx_template_file, "r") as stream: contents = stream.read() contents = process_template_file(contents) - with open(pyx_file, 'w') as stream: + with open(pyx_file, "w") as stream: stream.write(contents) if target_pydevd_name != extension_name: @@ -117,7 +124,9 @@ def build_extension(dir_name, extension_name, target_pydevd_name, force_cython, assert os.path.exists(pyx_file) try: - c_files = [os.path.join(dir_name, "%s.c" % target_pydevd_name), ] + c_files = [ + os.path.join(dir_name, "%s.c" % target_pydevd_name), + ] if force_cython: for c_file in c_files: try: @@ -127,45 +136,57 @@ def build_extension(dir_name, extension_name, target_pydevd_name, force_cython, from Cython.Build import cythonize # @UnusedImport # Generate the .c files in cythonize (will not compile at this point). - target = "%s/%s.pyx" % (dir_name, target_pydevd_name,) + target = "%s/%s.pyx" % ( + dir_name, + target_pydevd_name, + ) cythonize([target]) # Workarounds needed in CPython 3.8 and 3.9 to access PyInterpreterState.eval_frame. for c_file in c_files: - with open(c_file, 'r') as stream: + with open(c_file, "r") as stream: c_file_contents = stream.read() if '#include "internal/pycore_gc.h"' not in c_file_contents: - c_file_contents = c_file_contents.replace('#include "Python.h"', '''#include "Python.h" + c_file_contents = c_file_contents.replace( + '#include "Python.h"', + """#include "Python.h" #if PY_VERSION_HEX >= 0x03090000 #include "internal/pycore_gc.h" #include "internal/pycore_interp.h" #endif -''') +""", + ) if '#include "internal/pycore_pystate.h"' not in c_file_contents: - c_file_contents = c_file_contents.replace('#include "pystate.h"', '''#include "pystate.h" + c_file_contents = c_file_contents.replace( + '#include "pystate.h"', + """#include "pystate.h" #if PY_VERSION_HEX >= 0x03080000 #include "internal/pycore_pystate.h" #endif -''') +""", + ) # We want the same output on Windows and Linux. - c_file_contents = c_file_contents.replace('\r\n', '\n').replace('\r', '\n') - c_file_contents = c_file_contents.replace(r'_pydevd_frame_eval\\release_mem.h', '_pydevd_frame_eval/release_mem.h') - c_file_contents = c_file_contents.replace(r'_pydevd_frame_eval\\pydevd_frame_evaluator.pyx', '_pydevd_frame_eval/pydevd_frame_evaluator.pyx') - c_file_contents = c_file_contents.replace(r'_pydevd_bundle\\pydevd_cython.pxd', '_pydevd_bundle/pydevd_cython.pxd') - c_file_contents = c_file_contents.replace(r'_pydevd_bundle\\pydevd_cython.pyx', '_pydevd_bundle/pydevd_cython.pyx') - - with open(c_file, 'w') as stream: + c_file_contents = c_file_contents.replace("\r\n", "\n").replace("\r", "\n") + c_file_contents = c_file_contents.replace(r"_pydevd_frame_eval\\release_mem.h", "_pydevd_frame_eval/release_mem.h") + c_file_contents = c_file_contents.replace( + r"_pydevd_frame_eval\\pydevd_frame_evaluator.pyx", "_pydevd_frame_eval/pydevd_frame_evaluator.pyx" + ) + c_file_contents = c_file_contents.replace(r"_pydevd_bundle\\pydevd_cython.pxd", "_pydevd_bundle/pydevd_cython.pxd") + c_file_contents = c_file_contents.replace(r"_pydevd_bundle\\pydevd_cython.pyx", "_pydevd_bundle/pydevd_cython.pyx") + + with open(c_file, "w") as stream: stream.write(c_file_contents) # Always compile the .c (and not the .pyx) file (which we should keep up-to-date by running build_tools/build.py). from distutils.extension import Extension + extra_compile_args = [] extra_link_args = [] - if 'linux' in sys.platform: + if "linux" in sys.platform: # Enabling -flto brings executable from 4MB to 0.56MB and -Os to 0.41MB # Profiling shows an execution around 3-5% slower with -Os vs -O3, # so, kept only -flto. @@ -181,70 +202,86 @@ def build_extension(dir_name, extension_name, target_pydevd_name, force_cython, # extra_compile_args = ["-flto", "-fprofile-generate"] # ... Run benchmarks ... # extra_compile_args = ["-flto", "-fprofile-use", "-fprofile-correction"] - elif 'win32' in sys.platform: + elif "win32" in sys.platform: pass # uncomment to generate pdbs for visual studio. # extra_compile_args=["-Zi", "/Od"] # extra_link_args=["-debug"] + if IS_PY311_ONWARDS: + # On py311 we need to add the CPython include folder to the include path. + extra_compile_args.append("-I%s\\include\\CPython" % sys.exec_prefix) kwargs = {} if extra_link_args: - kwargs['extra_link_args'] = extra_link_args + kwargs["extra_link_args"] = extra_link_args if extra_compile_args: - kwargs['extra_compile_args'] = extra_compile_args + kwargs["extra_compile_args"] = extra_compile_args ext_modules = [ Extension( - "%s%s.%s" % (dir_name, "_ext" if extended else "", target_pydevd_name,), + "%s%s.%s" + % ( + dir_name, + "_ext" if extended else "", + target_pydevd_name, + ), c_files, - **kwargs - )] + **kwargs, + ) + ] # This is needed in CPython 3.8 to be able to include internal/pycore_pystate.h # (needed to set PyInterpreterState.eval_frame). for module in ext_modules: - module.define_macros = [('Py_BUILD_CORE_MODULE', '1')] - setup( - name='Cythonize', - ext_modules=ext_modules - ) + module.define_macros = [("Py_BUILD_CORE_MODULE", "1")] + setup(name="Cythonize", ext_modules=ext_modules) finally: if target_pydevd_name != extension_name: try: os.remove(new_pyx_file) except: import traceback + traceback.print_exc() try: os.remove(new_c_file) except: import traceback + traceback.print_exc() if has_pxd: try: os.remove(new_pxd_file) except: import traceback + traceback.print_exc() extension_folder, target_pydevd_name, target_frame_eval, force_cython = process_args() +FORCE_BUILD_ALL = os.environ.get("PYDEVD_FORCE_BUILD_ALL", "").lower() in ("true", "1") + extension_name = "pydevd_cython" if target_pydevd_name is None: target_pydevd_name = extension_name build_extension("_pydevd_bundle", extension_name, target_pydevd_name, force_cython, extension_folder, True) -if IS_PY36_OR_GREATER and not TODO_PY311: +if IS_PY36_OR_GREATER and not IS_PY311_ONWARDS or FORCE_BUILD_ALL: extension_name = "pydevd_frame_evaluator" if target_frame_eval is None: target_frame_eval = extension_name build_extension("_pydevd_frame_eval", extension_name, target_frame_eval, force_cython, extension_folder, True, template=True) +if IS_PY312_ONWARDS or FORCE_BUILD_ALL: + extension_name = "_pydevd_sys_monitoring_cython" + build_extension("_pydevd_sys_monitoring", extension_name, extension_name, force_cython, extension_folder, True) + if extension_folder: os.chdir(extension_folder) - for folder in [file for file in os.listdir(extension_folder) if - file != 'build' and os.path.isdir(os.path.join(extension_folder, file))]: + for folder in [ + file for file in os.listdir(extension_folder) if file != "build" and os.path.isdir(os.path.join(extension_folder, file)) + ]: file = os.path.join(folder, "__init__.py") if not os.path.exists(file): - open(file, 'a').close() + open(file, "a").close() diff --git a/src/debugpy/_vendored/pydevd/stubs/_django_manager_body.py b/src/debugpy/_vendored/pydevd/stubs/_django_manager_body.py index 2bf47067c..15564b743 100644 --- a/src/debugpy/_vendored/pydevd/stubs/_django_manager_body.py +++ b/src/debugpy/_vendored/pydevd/stubs/_django_manager_body.py @@ -1,10 +1,12 @@ # This is a dummy for code-completion purposes. + def __unicode__(self): """ - Return "app_label.model_label.manager_name". + Return "app_label.model_label.manager_name". """ + def _copy_to_model(self, model): """ Makes a copy of the manager and assigns it to 'model', which should be @@ -14,15 +16,11 @@ def _copy_to_model(self, model): def _db(self): - """ - - """ + """ """ def _get_queryset_methods(cls, queryset_class): - """ - - """ + """ """ def _hints(self): @@ -40,9 +38,7 @@ def _hints(self): def _inherited(self): - """ - - """ + """ """ def _insert(self, *args, **kwargs): @@ -78,7 +74,7 @@ def aggregate(self, *args, **kwargs): """ Returns a dictionary containing the calculations (aggregation) over the current queryset - + If args is present the expression is passed as a kwarg using the Aggregate object's default alias. """ @@ -107,36 +103,32 @@ def bulk_create(self, *args, **kwargs): def check(self, **kwargs): - """ - - """ + """ """ def complex_filter(self, *args, **kwargs): """ Returns a new QuerySet instance with filter_obj added to the filters. - + filter_obj can be a Q object (or anything with an add_to_query() method) or a dictionary of keyword lookup arguments. - + This exists to support framework features such as 'limit_choices_to', and usually it will be more natural to use other methods. - + @rtype: django.db.models.query.QuerySet """ def contribute_to_class(self, model, name): - """ - - """ + """ """ def count(self, *args, **kwargs): """ Performs a SELECT COUNT() and returns the number of records as an integer. - + If the QuerySet is already fully cached this simply returns the length of the cached results set to avoid multiple SELECT COUNT(*) calls. """ @@ -150,9 +142,7 @@ def create(self, *args, **kwargs): def creation_counter(self): - """ - - """ + """ """ def dates(self, *args, **kwargs): @@ -170,15 +160,11 @@ def datetimes(self, *args, **kwargs): def db(self): - """ - - """ + """ """ def db_manager(self, using=None, hints=None): - """ - - """ + """ """ def defer(self, *args, **kwargs): @@ -194,30 +180,26 @@ def defer(self, *args, **kwargs): def distinct(self, *args, **kwargs): """ Returns a new QuerySet instance that will select only distinct results. - + @rtype: django.db.models.query.QuerySet """ def earliest(self, *args, **kwargs): - """ - - """ + """ """ def exclude(self, *args, **kwargs): """ Returns a new QuerySet instance with NOT (args) ANDed to the existing set. - + @rtype: django.db.models.query.QuerySet """ def exists(self, *args, **kwargs): - """ - - """ + """ """ def extra(self, *args, **kwargs): @@ -230,7 +212,7 @@ def filter(self, *args, **kwargs): """ Returns a new QuerySet instance with the args ANDed to the existing set. - + @rtype: django.db.models.query.QuerySet """ @@ -242,9 +224,7 @@ def first(self, *args, **kwargs): def from_queryset(cls, queryset_class, class_name=None): - """ - - """ + """ """ def get(self, *args, **kwargs): @@ -266,7 +246,7 @@ def get_queryset(self): """ Returns a new QuerySet object. Subclasses can override this method to easily customize the behavior of the Manager. - + @rtype: django.db.models.query.QuerySet """ @@ -292,9 +272,7 @@ def last(self, *args, **kwargs): def latest(self, *args, **kwargs): - """ - - """ + """ """ def model(self): @@ -306,7 +284,7 @@ def model(self): def none(self, *args, **kwargs): """ Returns an empty QuerySet. - + @rtype: django.db.models.query.QuerySet """ @@ -322,7 +300,7 @@ def only(self, *args, **kwargs): def order_by(self, *args, **kwargs): """ Returns a new QuerySet instance with the ordering changed. - + @rtype: django.db.models.query.QuerySet """ @@ -332,25 +310,23 @@ def prefetch_related(self, *args, **kwargs): Returns a new QuerySet instance that will prefetch the specified Many-To-One and Many-To-Many related objects when the QuerySet is evaluated. - + When prefetch_related() is called more than once, the list of lookups to prefetch is appended to. If prefetch_related(None) is called, the list is cleared. - + @rtype: django.db.models.query.QuerySet """ def raw(self, *args, **kwargs): - """ - - """ + """ """ def reverse(self, *args, **kwargs): """ Reverses the ordering of the QuerySet. - + @rtype: django.db.models.query.QuerySet """ @@ -359,7 +335,7 @@ def select_for_update(self, *args, **kwargs): """ Returns a new QuerySet instance that will select objects with a FOR UPDATE lock. - + @rtype: django.db.models.query.QuerySet """ @@ -367,12 +343,12 @@ def select_for_update(self, *args, **kwargs): def select_related(self, *args, **kwargs): """ Returns a new QuerySet instance that will select related objects. - + If fields are specified, they must be ForeignKey fields and only those related objects are included in the selection. - + If select_related(None) is called, the list is cleared. - + @rtype: django.db.models.query.QuerySet """ @@ -396,19 +372,14 @@ def update_or_create(self, *args, **kwargs): def using(self, *args, **kwargs): """ Selects which database this QuerySet should execute its query against. - + @rtype: django.db.models.query.QuerySet """ def values(self, *args, **kwargs): - """ - - """ + """ """ def values_list(self, *args, **kwargs): - """ - - """ - + """ """ diff --git a/src/debugpy/_vendored/pydevd/test_pydevd_reload/test_pydevd_reload.py b/src/debugpy/_vendored/pydevd/test_pydevd_reload/test_pydevd_reload.py index 067f3da6d..faa5c263a 100644 --- a/src/debugpy/_vendored/pydevd/test_pydevd_reload/test_pydevd_reload.py +++ b/src/debugpy/_vendored/pydevd/test_pydevd_reload/test_pydevd_reload.py @@ -26,9 +26,8 @@ def unchanged(self): from _pydevd_bundle.pydevd_constants import IS_JYTHON, IS_IRONPYTHON -@pytest.mark.skipif(IS_JYTHON or IS_IRONPYTHON, reason='CPython related test') +@pytest.mark.skipif(IS_JYTHON or IS_IRONPYTHON, reason="CPython related test") class Test(unittest.TestCase): - def setUp(self): unittest.TestCase.setUp(self) self.tempdir = None @@ -37,7 +36,7 @@ def setUp(self): self.save_path = list(sys.path) sys.path.append(self.tempdir) try: - del sys.modules['x'] + del sys.modules["x"] except: pass @@ -45,14 +44,14 @@ def tearDown(self): unittest.TestCase.tearDown(self) sys.path = self.save_path try: - del sys.modules['x'] + del sys.modules["x"] except: pass def make_mod(self, name="x", repl=None, subst=None, sample=SAMPLE_CODE): basedir = self.tempdir - if '.' in name: - splitted = name.split('.') + if "." in name: + splitted = name.split(".") basedir = os.path.join(self.tempdir, *splitted[:-1]) name = splitted[-1] try: @@ -70,7 +69,6 @@ def make_mod(self, name="x", repl=None, subst=None, sample=SAMPLE_CODE): f.close() def test_pydevd_reload(self): - self.make_mod() import x # @UnresolvedImport @@ -112,7 +110,6 @@ def check(expected): check(count) def test_pydevd_reload2(self): - self.make_mod() import x # @UnresolvedImport @@ -121,20 +118,17 @@ def test_pydevd_reload2(self): self.assertEqual(0, c.foo()) self.assertEqual(0, cfoo()) - self.make_mod(repl="0", subst='1') + self.make_mod(repl="0", subst="1") pydevd_reload.xreload(x) self.assertEqual(1, c.foo()) self.assertEqual(1, cfoo()) def test_pydevd_reload3(self): - class F: - def m1(self): return 1 class G: - def m1(self): return 2 @@ -143,39 +137,34 @@ def m1(self): self.assertEqual(F().m1(), 2) def test_pydevd_reload4(self): - class F: pass - F.m1 = lambda a:None + F.m1 = lambda a: None class G: pass - G.m1 = lambda a:10 + G.m1 = lambda a: 10 self.assertEqual(F().m1(), None) pydevd_reload.Reload(None)._update(None, None, F, G) self.assertEqual(F().m1(), 10) def test_if_code_obj_equals(self): - class F: - def m1(self): return 1 class G: - def m1(self): return 1 class H: - def m1(self): return 2 - if hasattr(F.m1, 'func_code'): + if hasattr(F.m1, "func_code"): self.assertTrue(pydevd_reload.code_objects_equal(F.m1.func_code, G.m1.func_code)) self.assertFalse(pydevd_reload.code_objects_equal(F.m1.func_code, H.m1.func_code)) else: @@ -183,9 +172,7 @@ def m1(self): self.assertFalse(pydevd_reload.code_objects_equal(F.m1.__code__, H.m1.__code__)) def test_metaclass(self): - class Meta(type): - def __init__(cls, name, bases, attrs): super(Meta, cls).__init__(name, bases, attrs) @@ -206,19 +193,15 @@ def m1(self): self.assertEqual(F().m1(), 2) def test_change_hierarchy(self): - class F(object): - def m1(self): return 1 class B(object): - def super_call(self): return 2 class G(B): - def m1(self): return self.super_call() @@ -237,19 +220,15 @@ def on_error(*args): pydevd_reload.notify_error = old def test_change_hierarchy_old_style(self): - class F: - def m1(self): return 1 class B: - def super_call(self): return 2 class G(B): - def m1(self): return self.super_call() @@ -285,11 +264,12 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.C().foo self.assertEqual(foo(), 0) self.make_mod(sample=SAMPLE_CODE2) pydevd_reload.xreload(x) - self.assertEqual(foo().__name__, 'B') + self.assertEqual(foo().__name__, "B") def test_create_class2(self): SAMPLE_CODE1 = """ @@ -309,11 +289,12 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.C().foo self.assertEqual(foo(), 0) self.make_mod(sample=SAMPLE_CODE2) pydevd_reload.xreload(x) - self.assertEqual(foo().__name__, 'B') + self.assertEqual(foo().__name__, "B") def test_parent_function(self): SAMPLE_CODE1 = """ @@ -340,11 +321,12 @@ def call(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + call = x.C().call self.assertEqual(call(), 0) self.make_mod(sample=SAMPLE_CODE2) pydevd_reload.xreload(x) - self.assertEqual(call(), 'bar') + self.assertEqual(call(), "bar") def test_update_constant(self): SAMPLE_CODE1 = """ @@ -364,6 +346,7 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.B().foo self.assertEqual(foo(), 1) self.make_mod(sample=SAMPLE_CODE2) @@ -392,6 +375,7 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.B().foo self.assertEqual(foo(), 1) self.make_mod(sample=SAMPLE_CODE2) @@ -419,6 +403,7 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.B().foo self.assertEqual(foo(), 1) self.make_mod(sample=SAMPLE_CODE2) @@ -450,6 +435,7 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.B().foo self.assertEqual(foo(), 1) self.make_mod(sample=SAMPLE_CODE2) @@ -483,6 +469,7 @@ def foo(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + foo = x.B().foo self.assertEqual(foo(), 1) self.make_mod(sample=SAMPLE_CODE2) @@ -509,13 +496,14 @@ def m1(self): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport + B = x.B self.make_mod(sample=SAMPLE_CODE2) pydevd_reload.xreload(x) b = B() self.assertEqual(1, b.m1()) self.assertEqual(10, b.bar) - self.assertRaises(Exception, setattr, b, 'foo', 20) # __slots__ can't be updated + self.assertRaises(Exception, setattr, b, "foo", 20) # __slots__ can't be updated def test_reload_numpy(self): SAMPLE_CODE1 = """ @@ -533,13 +521,14 @@ def method(): self.make_mod(sample=SAMPLE_CODE1) import x # @UnresolvedImport - assert str(x.global_numpy) == '[1 2 3]' + + assert str(x.global_numpy) == "[1 2 3]" self.make_mod(sample=SAMPLE_CODE2) pydevd_reload.xreload(x) # Note that we don't patch globals (the user could do that in a module, # but he'd have to create a custom `__xreload_old_new__` method to # do it). - assert str(x.global_numpy) == '[1 2 3]' + assert str(x.global_numpy) == "[1 2 3]" def test_reload_relative(self): MODULE_CODE = """ @@ -562,12 +551,13 @@ def add_more_text(s): return s + ' module1V2' """ - self.make_mod(sample='', name='package.__init__') - self.make_mod(sample=MODULE_CODE, name='package.module') - self.make_mod(sample=MODULE1_CODE, name='package.module1') + self.make_mod(sample="", name="package.__init__") + self.make_mod(sample=MODULE_CODE, name="package.module") + self.make_mod(sample=MODULE1_CODE, name="package.module1") from package import module1 # @UnresolvedImport - assert module1.add_more_text('1') == '1 module module1' - self.make_mod(sample=MODULE1_CODE_V2, name='package.module1') + assert module1.add_more_text("1") == "1 module module1" + + self.make_mod(sample=MODULE1_CODE_V2, name="package.module1") pydevd_reload.xreload(module1) - assert module1.add_more_text('1') == '1 module module1V2' + assert module1.add_more_text("1") == "1 module module1V2" diff --git a/src/debugpy/_vendored/pydevd/tests/test_check_pydevconsole.py b/src/debugpy/_vendored/pydevd/tests/test_check_pydevconsole.py index 8795918b1..53eb28c7e 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_check_pydevconsole.py +++ b/src/debugpy/_vendored/pydevd/tests/test_check_pydevconsole.py @@ -9,23 +9,23 @@ try: raw_input - raw_input_name = 'raw_input' + raw_input_name = "raw_input" except NameError: - raw_input_name = 'input' - + raw_input_name = "input" + try: from IPython import core # @UnusedImport + has_ipython = True except: has_ipython = False -#======================================================================================================================= +# ======================================================================================================================= # Test -#======================================================================================================================= -@pytest.mark.skipif(os.environ.get('TRAVIS') == 'true' or not has_ipython, reason='Too flaky on Travis (and requires IPython).') +# ======================================================================================================================= +@pytest.mark.skipif(os.environ.get("TRAVIS") == "true" or not has_ipython, reason="Too flaky on Travis (and requires IPython).") class Test(unittest.TestCase): - def start_client_thread(self, client_port): class ClientThread(threading.Thread): def __init__(self, client_port): @@ -36,7 +36,7 @@ def run(self): class HandleRequestInput: def RequestInput(self): client_thread.requested_input = True - return 'RequestInput: OK' + return "RequestInput: OK" def NotifyFinished(self, *args, **kwargs): client_thread.notified_finished += 1 @@ -45,7 +45,10 @@ def NotifyFinished(self, *args, **kwargs): handle_request_input = HandleRequestInput() from _pydev_bundle import pydev_localhost - self.client_server = client_server = SimpleXMLRPCServer((pydev_localhost.get_localhost(), self.client_port), logRequests=False) + + self.client_server = client_server = SimpleXMLRPCServer( + (pydev_localhost.get_localhost(), self.client_port), logRequests=False + ) client_server.register_function(handle_request_input.RequestInput) client_server.register_function(handle_request_input.NotifyFinished) client_server.serve_forever() @@ -61,18 +64,20 @@ def shutdown(self): client_thread.start() return client_thread - def get_free_addresses(self): from _pydev_bundle.pydev_localhost import get_socket_names + socket_names = get_socket_names(2, close=True) return [socket_name[1] for socket_name in socket_names] def test_server(self): # Just making sure that the singleton is created in this thread. from _pydev_bundle.pydev_ipython_console_011 import get_pydev_frontend + get_pydev_frontend(get_localhost(), 0) client_port, server_port = self.get_free_addresses() + class ServerThread(threading.Thread): def __init__(self, client_port, server_port): threading.Thread.__init__(self) @@ -81,33 +86,36 @@ def __init__(self, client_port, server_port): def run(self): from _pydev_bundle import pydev_localhost - print('Starting server with:', pydev_localhost.get_localhost(), self.server_port, self.client_port) + + print("Starting server with:", pydev_localhost.get_localhost(), self.server_port, self.client_port) pydevconsole.start_server(pydev_localhost.get_localhost(), self.server_port, self.client_port) + server_thread = ServerThread(client_port, server_port) server_thread.daemon = True server_thread.start() - client_thread = self.start_client_thread(client_port) #@UnusedVariable + client_thread = self.start_client_thread(client_port) # @UnusedVariable try: import time - time.sleep(.3) #let's give it some time to start the threads + + time.sleep(0.3) # let's give it some time to start the threads from _pydev_bundle import pydev_localhost - server = xmlrpclib.Server('http://%s:%s' % (pydev_localhost.get_localhost(), server_port)) + + server = xmlrpclib.Server("http://%s:%s" % (pydev_localhost.get_localhost(), server_port)) server.execLine("import sys; print('Running with: %s %s' % (sys.executable or sys.platform, sys.version))") - server.execLine('class Foo:') - server.execLine(' pass') - server.execLine('') - server.execLine('foo = Foo()') - server.execLine('a = %s()' % raw_input_name) + server.execLine("class Foo:") + server.execLine(" pass") + server.execLine("") + server.execLine("foo = Foo()") + server.execLine("a = %s()" % raw_input_name) initial = time.time() while not client_thread.requested_input: if time.time() - initial > 2: - raise AssertionError('Did not get the return asked before the timeout.') - time.sleep(.1) + raise AssertionError("Did not get the return asked before the timeout.") + time.sleep(0.1) frame_xml = server.getFrame() - self.assertTrue('RequestInput' in frame_xml, 'Did not fid RequestInput in:\n%s' % (frame_xml,)) + self.assertTrue("RequestInput" in frame_xml, "Did not fid RequestInput in:\n%s" % (frame_xml,)) finally: client_thread.shutdown() - diff --git a/src/debugpy/_vendored/pydevd/tests/test_file_utils.py b/src/debugpy/_vendored/pydevd/tests/test_file_utils.py new file mode 100644 index 000000000..b362158bd --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests/test_file_utils.py @@ -0,0 +1,11 @@ +import unittest +import pydevd_file_utils + +class TestFileUtils(unittest.TestCase): + def test_path_search(self): + self.assertTrue(pydevd_file_utils.contains_dir("foo/bar/inspect.py", "inspect.py")) + self.assertTrue(pydevd_file_utils.contains_dir("foo/bar/inspect.py", "foo")) + self.assertTrue(pydevd_file_utils.contains_dir("foo/bar/inspect.py", "bar")) + self.assertFalse(pydevd_file_utils.contains_dir("foo/bar/inspect.py", "boo")) + self.assertFalse(pydevd_file_utils.contains_dir("foo/bar/inspect.py", "foo/bar")) + self.assertFalse(pydevd_file_utils.contains_dir("", "path")) \ No newline at end of file diff --git a/src/debugpy/_vendored/pydevd/tests/test_get_referrers.py b/src/debugpy/_vendored/pydevd/tests/test_get_referrers.py index c4f7c149a..88f688d44 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_get_referrers.py +++ b/src/debugpy/_vendored/pydevd/tests/test_get_referrers.py @@ -9,6 +9,7 @@ try: import gc + gc.get_referrers(unittest) has_referrers = True except NotImplementedError: @@ -16,11 +17,9 @@ # Only do get referrers tests if it's actually available. -@pytest.mark.skipif(not has_referrers or IS_PYPY, reason='gc.get_referrers not implemented') +@pytest.mark.skipif(not has_referrers or IS_PYPY, reason="gc.get_referrers not implemented") class Test(unittest.TestCase): - def test_get_referrers1(self): - container = [] contained = [1, 2] container.append(0) @@ -29,13 +28,11 @@ def test_get_referrers1(self): # Ok, we have the contained in this frame and inside the given list (which on turn is in this frame too). # we should skip temporary references inside the get_referrer_info. result = pydevd_referrers.get_referrer_info(contained) - assert 'list[1]' in result + assert "list[1]" in result pydevd_referrers.print_referrers(contained, stream=StringIO()) def test_get_referrers2(self): - class MyClass(object): - def __init__(self): pass @@ -48,12 +45,10 @@ def __init__(self): # we should skip temporary references inside the get_referrer_info. result = pydevd_referrers.get_referrer_info(obj.contained) assert 'found_as="contained"' in result - assert 'MyClass' in result + assert "MyClass" in result def test_get_referrers3(self): - class MyClass(object): - def __init__(self): pass @@ -66,12 +61,10 @@ def __init__(self): # we should skip temporary references inside the get_referrer_info. result = pydevd_referrers.get_referrer_info(obj.contained) assert 'found_as="contained"' in result - assert 'MyClass' in result + assert "MyClass" in result def test_get_referrers4(self): - class MyClass(object): - def __init__(self): pass @@ -86,40 +79,38 @@ def test_get_referrers5(self): container = dict(a=[1]) # Let's see if we detect the cycle... - result = pydevd_referrers.get_referrer_info(container['a']) - assert 'test_get_referrers5' not in result # I.e.: NOT in the current method + result = pydevd_referrers.get_referrer_info(container["a"]) + assert "test_get_referrers5" not in result # I.e.: NOT in the current method assert 'found_as="a"' in result - assert 'dict' in result + assert "dict" in result assert str(id(container)) in result def test_get_referrers6(self): import sys + container = dict(a=[1]) def should_appear(obj): # Let's see if we detect the cycle... return pydevd_referrers.get_referrer_info(obj) - result = should_appear(container['a']) + result = should_appear(container["a"]) if sys.version_info[:2] >= (3, 7): # In Python 3.7 the frame is not appearing in gc.get_referrers. - assert 'should_appear' not in result + assert "should_appear" not in result else: - assert 'should_appear' in result + assert "should_appear" in result def test_get_referrers7(self): - class MyThread(threading.Thread): - def run(self): # Note: we do that because if we do self.frame = sys._getframe() t = MyThread() t.start() - while not hasattr(t, 'frame'): + while not hasattr(t, "frame"): time.sleep(0.01) result = pydevd_referrers.get_referrer_info(t.frame) - assert 'MyThread' in result - + assert "MyThread" in result diff --git a/src/debugpy/_vendored/pydevd/tests/test_jyserver.py b/src/debugpy/_vendored/pydevd/tests/test_jyserver.py index 7e7a9f5fb..eb67a649d 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_jyserver.py +++ b/src/debugpy/_vendored/pydevd/tests/test_jyserver.py @@ -1,6 +1,6 @@ -''' +""" @author Fabio Zadrozny -''' +""" import sys import unittest import socket @@ -9,87 +9,83 @@ import pycompletionserver -IS_JYTHON = sys.platform.find('java') != -1 +IS_JYTHON = sys.platform.find("java") != -1 DEBUG = 0 + def dbg(s): if DEBUG: - sys.stdout.write('TEST %s\n' % s) + sys.stdout.write("TEST %s\n" % s) -@pytest.mark.skipif(not IS_JYTHON, reason='Jython related test') -class TestJython(unittest.TestCase): +@pytest.mark.skipif(not IS_JYTHON, reason="Jython related test") +class TestJython(unittest.TestCase): def test_it(self): - dbg('ok') + dbg("ok") - def test_message(self): t = pycompletionserver.CompletionServer(0) t.exit_process_on_kill = False l = [] - l.append(('Def', 'description' , 'args')) - l.append(('Def1', 'description1', 'args1')) - l.append(('Def2', 'description2', 'args2')) + l.append(("Def", "description", "args")) + l.append(("Def1", "description1", "args1")) + l.append(("Def2", "description2", "args2")) - msg = t.processor.format_completion_message('test_jyserver.py', l) + msg = t.processor.format_completion_message("test_jyserver.py", l) - self.assertEqual('@@COMPLETIONS(test_jyserver.py,(Def,description,args),(Def1,description1,args1),(Def2,description2,args2))END@@', msg) + self.assertEqual( + "@@COMPLETIONS(test_jyserver.py,(Def,description,args),(Def1,description1,args1),(Def2,description2,args2))END@@", msg + ) l = [] - l.append(('Def', 'desc,,r,,i()ption', '')) - l.append(('Def(1', 'descriptio(n1', '')) - l.append(('De,f)2', 'de,s,c,ription2', '')) + l.append(("Def", "desc,,r,,i()ption", "")) + l.append(("Def(1", "descriptio(n1", "")) + l.append(("De,f)2", "de,s,c,ription2", "")) msg = t.processor.format_completion_message(None, l) - expected = '@@COMPLETIONS(None,(Def,desc%2C%2Cr%2C%2Ci%28%29ption, ),(Def%281,descriptio%28n1, ),(De%2Cf%292,de%2Cs%2Cc%2Cription2, ))END@@' + expected = "@@COMPLETIONS(None,(Def,desc%2C%2Cr%2C%2Ci%28%29ption, ),(Def%281,descriptio%28n1, ),(De%2Cf%292,de%2Cs%2Cc%2Cription2, ))END@@" self.assertEqual(expected, msg) - def test_completion_sockets_and_messages(self): - dbg('test_completion_sockets_and_messages') + dbg("test_completion_sockets_and_messages") t, socket = self.create_connections() self.socket = socket - dbg('connections created') + dbg("connections created") try: - #now that we have the connections all set up, check the code completion messages. - msg = urllib.quote_plus('math') + # now that we have the connections all set up, check the code completion messages. + msg = urllib.quote_plus("math") - toWrite = '@@IMPORTS:%sEND@@' % msg - dbg('writing' + str(toWrite)) - socket.send(toWrite) #math completions + toWrite = "@@IMPORTS:%sEND@@" % msg + dbg("writing" + str(toWrite)) + socket.send(toWrite) # math completions completions = self.read_msg() dbg(urllib.unquote_plus(completions)) - start = '@@COMPLETIONS(' - self.assertTrue(completions.startswith(start), '%s DOESNT START WITH %s' % (completions, start)) - self.assertTrue(completions.find('@@COMPLETIONS') != -1) - self.assertTrue(completions.find('END@@') != -1) + start = "@@COMPLETIONS(" + self.assertTrue(completions.startswith(start), "%s DOESNT START WITH %s" % (completions, start)) + self.assertTrue(completions.find("@@COMPLETIONS") != -1) + self.assertTrue(completions.find("END@@") != -1) - - msg = urllib.quote_plus('__builtin__.str') - toWrite = '@@IMPORTS:%sEND@@' % msg - dbg('writing' + str(toWrite)) - socket.send(toWrite) #math completions + msg = urllib.quote_plus("__builtin__.str") + toWrite = "@@IMPORTS:%sEND@@" % msg + dbg("writing" + str(toWrite)) + socket.send(toWrite) # math completions completions = self.read_msg() dbg(urllib.unquote_plus(completions)) - start = '@@COMPLETIONS(' - self.assertTrue(completions.startswith(start), '%s DOESNT START WITH %s' % (completions, start)) - self.assertTrue(completions.find('@@COMPLETIONS') != -1) - self.assertTrue(completions.find('END@@') != -1) - - + start = "@@COMPLETIONS(" + self.assertTrue(completions.startswith(start), "%s DOESNT START WITH %s" % (completions, start)) + self.assertTrue(completions.find("@@COMPLETIONS") != -1) + self.assertTrue(completions.find("END@@") != -1) finally: try: self.send_kill_msg(socket) - while not t.ended: - pass #wait until it receives the message and quits. - + pass # wait until it receives the message and quits. socket.close() except: @@ -97,18 +93,20 @@ def test_completion_sockets_and_messages(self): def get_free_port(self): from _pydev_bundle.pydev_localhost import get_socket_name + return get_socket_name(close=True)[1] def create_connections(self): - ''' + """ Creates the connections needed for testing. - ''' + """ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((pycompletionserver.HOST, 0)) - server.listen(1) #socket to receive messages. + server.listen(1) # socket to receive messages. from thread import start_new_thread + t = pycompletionserver.CompletionServer(server.getsockname()[1]) t.exit_process_on_kill = False @@ -119,13 +117,13 @@ def create_connections(self): return t, sock def read_msg(self): - msg = '@@PROCESSING_END@@' - while msg.startswith('@@PROCESSING'): + msg = "@@PROCESSING_END@@" + while msg.startswith("@@PROCESSING"): msg = self.socket.recv(1024) - if msg.startswith('@@PROCESSING:'): - dbg('Status msg:' + str(msg)) + if msg.startswith("@@PROCESSING:"): + dbg("Status msg:" + str(msg)) - while msg.find('END@@') == -1: + while msg.find("END@@") == -1: msg += self.socket.recv(1024) return msg @@ -134,7 +132,5 @@ def send_kill_msg(self, socket): socket.send(pycompletionserver.MSG_KILL_SERVER) - - # Run for jython in command line: # c:\bin\jython2.7.0\bin\jython.exe -m py.test tests\test_jyserver.py diff --git a/src/debugpy/_vendored/pydevd/tests/test_jysimpleTipper.py b/src/debugpy/_vendored/pydevd/tests/test_jysimpleTipper.py index a1790cf39..89c7e6df7 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_jysimpleTipper.py +++ b/src/debugpy/_vendored/pydevd/tests/test_jysimpleTipper.py @@ -6,7 +6,7 @@ # Note: ant.jar and junit.jar must be in the PYTHONPATH (see jython_test_deps) IS_JYTHON = False -if sys.platform.find('java') != -1: +if sys.platform.find("java") != -1: IS_JYTHON = True from _pydev_bundle._pydev_jy_imports_tipper import ismethod from _pydev_bundle._pydev_jy_imports_tipper import isclass @@ -25,178 +25,178 @@ def dbg(s): if __DBG: - sys.stdout.write('%s\n' % (s,)) + sys.stdout.write("%s\n" % (s,)) -@pytest.mark.skipif(not IS_JYTHON, reason='Jython related test') +@pytest.mark.skipif(not IS_JYTHON, reason="Jython related test") class TestMod(unittest.TestCase): - def assert_args(self, tok, args, tips): for a in tips: if tok == a[0]: self.assertEqual(args, a[2]) return - raise AssertionError('%s not in %s', tok, tips) + raise AssertionError("%s not in %s", tok, tips) def assert_in(self, tok, tips): self.assertEqual(4, len(tips[0])) for a in tips: if tok == a[0]: return a - s = '' + s = "" for a in tips: s += str(a) - s += '\n' - raise AssertionError('%s not in %s' % (tok, s)) + s += "\n" + raise AssertionError("%s not in %s" % (tok, s)) def test_imports1a(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('java.util.HashMap') + f, tip = _pydev_jy_imports_tipper.generate_tip("java.util.HashMap") if f is None: return # Not ok with java 9 - assert f.endswith('rt.jar') + assert f.endswith("rt.jar") def test_imports1c(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('java.lang.Class') + f, tip = _pydev_jy_imports_tipper.generate_tip("java.lang.Class") if f is None: return # Not ok with java 9 - assert f.endswith('rt.jar') + assert f.endswith("rt.jar") def test_imports1b(self): try: - f, tip = _pydev_jy_imports_tipper.generate_tip('__builtin__.m') - self.fail('err') + f, tip = _pydev_jy_imports_tipper.generate_tip("__builtin__.m") + self.fail("err") except: pass def test_imports1(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('junit.framework.TestCase') - assert f.endswith('junit.jar') - ret = self.assert_in('assertEquals', tip) -# self.assertEqual('', ret[2]) + f, tip = _pydev_jy_imports_tipper.generate_tip("junit.framework.TestCase") + assert f.endswith("junit.jar") + ret = self.assert_in("assertEquals", tip) + + # self.assertEqual('', ret[2]) def test_imports2(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('junit.framework') - assert f.endswith('junit.jar') - ret = self.assert_in('TestCase', tip) - self.assertEqual('', ret[2]) + f, tip = _pydev_jy_imports_tipper.generate_tip("junit.framework") + assert f.endswith("junit.jar") + ret = self.assert_in("TestCase", tip) + self.assertEqual("", ret[2]) def test_imports2a(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('org.apache.tools.ant') - assert f.endswith('ant.jar') - ret = self.assert_in('Task', tip) - self.assertEqual('', ret[2]) + f, tip = _pydev_jy_imports_tipper.generate_tip("org.apache.tools.ant") + assert f.endswith("ant.jar") + ret = self.assert_in("Task", tip) + self.assertEqual("", ret[2]) def test_imports3(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('os') - assert f.endswith('os.py') - ret = self.assert_in('path', tip) - self.assertEqual('', ret[2]) + f, tip = _pydev_jy_imports_tipper.generate_tip("os") + assert f.endswith("os.py") + ret = self.assert_in("path", tip) + self.assertEqual("", ret[2]) def test_tip_on_string(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('string') - self.assert_in('join', tip) - self.assert_in('uppercase', tip) + f, tip = _pydev_jy_imports_tipper.generate_tip("string") + self.assert_in("join", tip) + self.assert_in("uppercase", tip) def test_imports(self): - tip = _pydev_jy_imports_tipper.generate_tip('__builtin__')[1] - self.assert_in('tuple' , tip) - self.assert_in('RuntimeError' , tip) - self.assert_in('RuntimeWarning' , tip) + tip = _pydev_jy_imports_tipper.generate_tip("__builtin__")[1] + self.assert_in("tuple", tip) + self.assert_in("RuntimeError", tip) + self.assert_in("RuntimeWarning", tip) def test_imports5(self): - f, tip = _pydev_jy_imports_tipper.generate_tip('java.lang') + f, tip = _pydev_jy_imports_tipper.generate_tip("java.lang") if f is None: return # Not ok with java 9 - assert f.endswith('rt.jar') - tup = self.assert_in('String' , tip) + assert f.endswith("rt.jar") + tup = self.assert_in("String", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_CLASS), tup[3]) - tip = _pydev_jy_imports_tipper.generate_tip('java')[1] - tup = self.assert_in('lang' , tip) + tip = _pydev_jy_imports_tipper.generate_tip("java")[1] + tup = self.assert_in("lang", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_IMPORT), tup[3]) - tip = _pydev_jy_imports_tipper.generate_tip('java.lang.String')[1] - tup = self.assert_in('indexOf' , tip) + tip = _pydev_jy_imports_tipper.generate_tip("java.lang.String")[1] + tup = self.assert_in("indexOf", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_FUNCTION), tup[3]) - tip = _pydev_jy_imports_tipper.generate_tip('java.lang.String')[1] - tup = self.assert_in('charAt' , tip) + tip = _pydev_jy_imports_tipper.generate_tip("java.lang.String")[1] + tup = self.assert_in("charAt", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_FUNCTION), tup[3]) - self.assertEqual('(int)', tup[2]) + self.assertEqual("(int)", tup[2]) - tup = self.assert_in('format' , tip) + tup = self.assert_in("format", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_FUNCTION), tup[3]) - self.assertEqual('(string, objectArray)', tup[2]) - self.assertTrue(tup[1].find('[Ljava.lang.Object;') == -1) + self.assertEqual("(string, objectArray)", tup[2]) + self.assertTrue(tup[1].find("[Ljava.lang.Object;") == -1) - tup = self.assert_in('getBytes', tip) + tup = self.assert_in("getBytes", tip) self.assertEqual(str(_pydev_jy_imports_tipper.TYPE_FUNCTION), tup[3]) - assert '[B' not in tup[1] - assert 'byte[]' in tup[1] + assert "[B" not in tup[1] + assert "byte[]" in tup[1] - f, tip = _pydev_jy_imports_tipper.generate_tip('__builtin__.str') - assert f is None or f.endswith('jython.jar') # Depends on jython version - self.assert_in('find' , tip) + f, tip = _pydev_jy_imports_tipper.generate_tip("__builtin__.str") + assert f is None or f.endswith("jython.jar") # Depends on jython version + self.assert_in("find", tip) - f, tip = _pydev_jy_imports_tipper.generate_tip('__builtin__.dict') - assert f is None or f.endswith('jython.jar') # Depends on jython version - self.assert_in('get' , tip) + f, tip = _pydev_jy_imports_tipper.generate_tip("__builtin__.dict") + assert f is None or f.endswith("jython.jar") # Depends on jython version + self.assert_in("get", tip) -@pytest.mark.skipif(not IS_JYTHON, reason='Jython related test') +@pytest.mark.skipif(not IS_JYTHON, reason="Jython related test") class TestSearch(unittest.TestCase): - def test_search_on_jython(self): - assert _pydev_jy_imports_tipper.search_definition('os')[0][0].split(os.sep)[-1] in ('javaos.py', 'os.py') - self.assertEqual(0, _pydev_jy_imports_tipper.search_definition('os')[0][1]) + assert _pydev_jy_imports_tipper.search_definition("os")[0][0].split(os.sep)[-1] in ("javaos.py", "os.py") + self.assertEqual(0, _pydev_jy_imports_tipper.search_definition("os")[0][1]) - assert _pydev_jy_imports_tipper.search_definition('os.makedirs')[0][0].split(os.sep)[-1] in ('javaos.py', 'os.py') - self.assertNotEqual(0, _pydev_jy_imports_tipper.search_definition('os.makedirs')[0][1]) + assert _pydev_jy_imports_tipper.search_definition("os.makedirs")[0][0].split(os.sep)[-1] in ("javaos.py", "os.py") + self.assertNotEqual(0, _pydev_jy_imports_tipper.search_definition("os.makedirs")[0][1]) # print _pydev_jy_imports_tipper.search_definition('os.makedirs') -@pytest.mark.skipif(not IS_JYTHON, reason='Jython related test') +@pytest.mark.skipif(not IS_JYTHON, reason="Jython related test") class TestCompl(unittest.TestCase): - def test_getting_info_on_jython(self): - - dbg('\n\n--------------------------- java') + dbg("\n\n--------------------------- java") assert not ismethod(java)[0] assert not isclass(java) assert _pydev_jy_imports_tipper.ismodule(java) - dbg('\n\n--------------------------- java.lang') + dbg("\n\n--------------------------- java.lang") assert not ismethod(java.lang)[0] assert not isclass(java.lang) assert _pydev_jy_imports_tipper.ismodule(java.lang) - dbg('\n\n--------------------------- Method') + dbg("\n\n--------------------------- Method") assert not ismethod(Method)[0] assert isclass(Method) - dbg('\n\n--------------------------- System') + dbg("\n\n--------------------------- System") assert not ismethod(System)[0] assert isclass(System) - dbg('\n\n--------------------------- String') + dbg("\n\n--------------------------- String") assert not ismethod(System)[0] assert isclass(String) assert len(dir_obj(String)) > 10 - dbg('\n\n--------------------------- arraycopy') + dbg("\n\n--------------------------- arraycopy") isMet = ismethod(arraycopy) assert isMet[0] - assert isMet[1][0].basic_as_str() == "function:arraycopy args=['java.lang.Object', 'int', 'java.lang.Object', 'int', 'int'], varargs=None, kwargs=None, docs:None" + assert ( + isMet[1][0].basic_as_str() + == "function:arraycopy args=['java.lang.Object', 'int', 'java.lang.Object', 'int', 'int'], varargs=None, kwargs=None, docs:None" + ) assert not isclass(arraycopy) - dbg('\n\n--------------------------- out') + dbg("\n\n--------------------------- out") isMet = ismethod(out) assert not isMet[0] assert not isclass(out) - dbg('\n\n--------------------------- out.println') + dbg("\n\n--------------------------- out.println") isMet = ismethod(out.println) # @UndefinedVariable assert isMet[0] assert len(isMet[1]) == 10 @@ -204,7 +204,7 @@ def test_getting_info_on_jython(self): assert isMet[1][1].basic_as_str() == "function:println args=['long'], varargs=None, kwargs=None, docs:None" assert not isclass(out.println) # @UndefinedVariable - dbg('\n\n--------------------------- str') + dbg("\n\n--------------------------- str") isMet = ismethod(str) # the code below should work, but is failing on jython 22a1 # assert isMet[0] @@ -215,24 +215,25 @@ def met1(): a = 3 return a - dbg('\n\n--------------------------- met1') + dbg("\n\n--------------------------- met1") isMet = ismethod(met1) assert isMet[0] assert isMet[1][0].basic_as_str() == "function:met1 args=[], varargs=None, kwargs=None, docs:None" assert not isclass(met1) def met2(arg1, arg2, *vararg, **kwarg): - '''docmet2''' + """docmet2""" a = 1 return a - dbg('\n\n--------------------------- met2') + dbg("\n\n--------------------------- met2") isMet = ismethod(met2) assert isMet[0] assert isMet[1][0].basic_as_str() == "function:met2 args=['arg1', 'arg2'], varargs=vararg, kwargs=kwarg, docs:docmet2" assert not isclass(met2) + # Run for jython in command line: # On Windows: diff --git a/src/debugpy/_vendored/pydevd/tests/test_pydev_ipython_011.py b/src/debugpy/_vendored/pydevd/tests/test_pydev_ipython_011.py index 030dc4a9d..8e415511c 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_pydev_ipython_011.py +++ b/src/debugpy/_vendored/pydevd/tests/test_pydev_ipython_011.py @@ -13,19 +13,19 @@ def eq_(a, b): if a != b: - raise AssertionError('%s != %s' % (a, b)) + raise AssertionError("%s != %s" % (a, b)) try: from IPython import core + has_ipython = True except: has_ipython = False -@pytest.mark.skipif(not has_ipython, reason='IPython not available') +@pytest.mark.skipif(not has_ipython, reason="IPython not available") class TestBase(unittest.TestCase): - def setUp(self): from _pydev_bundle.pydev_ipython_console_011 import get_pydev_frontend @@ -35,7 +35,8 @@ def setUp(self): self.front_end = get_pydev_frontend(get_localhost(), 0) from pydev_ipython.inputhook import set_return_control_callback - set_return_control_callback(lambda:True) + + set_return_control_callback(lambda: True) self.front_end.clear_buffer() def tearDown(self): @@ -53,99 +54,98 @@ def redirect_stdout(self): def restore_stdout(self): from IPython.utils import io + io.stdout = sys.stdout = self.original_stdout -@pytest.mark.skipif(not has_ipython, reason='IPython not available') +@pytest.mark.skipif(not has_ipython, reason="IPython not available") class TestPyDevFrontEnd(TestBase): - def testAddExec_1(self): - self.add_exec('if True:', True) + self.add_exec("if True:", True) def testAddExec_2(self): # Change: 'more' must now be controlled in the client side after the initial 'True' returned. - self.add_exec('if True:\n testAddExec_a = 10\n', False) - assert 'testAddExec_a' in self.front_end.get_namespace() + self.add_exec("if True:\n testAddExec_a = 10\n", False) + assert "testAddExec_a" in self.front_end.get_namespace() def testAddExec_3(self): - assert 'testAddExec_x' not in self.front_end.get_namespace() - self.add_exec('if True:\n testAddExec_x = 10\n\n') - assert 'testAddExec_x' in self.front_end.get_namespace() - eq_(self.front_end.get_namespace()['testAddExec_x'], 10) + assert "testAddExec_x" not in self.front_end.get_namespace() + self.add_exec("if True:\n testAddExec_x = 10\n\n") + assert "testAddExec_x" in self.front_end.get_namespace() + eq_(self.front_end.get_namespace()["testAddExec_x"], 10) def test_get_namespace(self): - assert 'testGetNamespace_a' not in self.front_end.get_namespace() - self.add_exec('testGetNamespace_a = 10') - assert 'testGetNamespace_a' in self.front_end.get_namespace() - eq_(self.front_end.get_namespace()['testGetNamespace_a'], 10) + assert "testGetNamespace_a" not in self.front_end.get_namespace() + self.add_exec("testGetNamespace_a = 10") + assert "testGetNamespace_a" in self.front_end.get_namespace() + eq_(self.front_end.get_namespace()["testGetNamespace_a"], 10) def test_complete(self): - unused_text, matches = self.front_end.complete('%') - assert len(matches) > 1, 'at least one magic should appear in completions' + unused_text, matches = self.front_end.complete("%") + assert len(matches) > 1, "at least one magic should appear in completions" def test_complete_does_not_do_python_matches(self): # Test that IPython's completions do not do the things that # PyDev's completions will handle - self.add_exec('testComplete_a = 5') - self.add_exec('testComplete_b = 10') - self.add_exec('testComplete_c = 15') - unused_text, matches = self.front_end.complete('testComplete_') + self.add_exec("testComplete_a = 5") + self.add_exec("testComplete_b = 10") + self.add_exec("testComplete_c = 15") + unused_text, matches = self.front_end.complete("testComplete_") assert len(matches) == 0 def testGetCompletions_1(self): # Test the merged completions include the standard completions - self.add_exec('testComplete_a = 5') - self.add_exec('testComplete_b = 10') - self.add_exec('testComplete_c = 15') - res = self.front_end.getCompletions('testComplete_', 'testComplete_') + self.add_exec("testComplete_a = 5") + self.add_exec("testComplete_b = 10") + self.add_exec("testComplete_c = 15") + res = self.front_end.getCompletions("testComplete_", "testComplete_") matches = [f[0] for f in res] assert len(matches) == 3 - eq_(set(['testComplete_a', 'testComplete_b', 'testComplete_c']), set(matches)) + eq_(set(["testComplete_a", "testComplete_b", "testComplete_c"]), set(matches)) def testGetCompletions_2(self): # Test that we get IPython completions in results # we do this by checking kw completion which PyDev does # not do by default - self.add_exec('def ccc(ABC=123): pass') - res = self.front_end.getCompletions('ccc(', '') + self.add_exec("def ccc(ABC=123): pass") + res = self.front_end.getCompletions("ccc(", "") matches = [f[0] for f in res] - assert 'ABC=' in matches + assert "ABC=" in matches def testGetCompletions_3(self): # Test that magics return IPYTHON magic as type - res = self.front_end.getCompletions('%cd', '%cd') + res = self.front_end.getCompletions("%cd", "%cd") assert len(res) == 1 - eq_(res[0][3], '12') # '12' == IToken.TYPE_IPYTHON_MAGIC - assert len(res[0][1]) > 100, 'docstring for %cd should be a reasonably long string' + eq_(res[0][3], "12") # '12' == IToken.TYPE_IPYTHON_MAGIC + assert len(res[0][1]) > 100, "docstring for %cd should be a reasonably long string" -@pytest.mark.skipif(not has_ipython, reason='IPython not available') +@pytest.mark.skipif(not has_ipython, reason="IPython not available") class TestRunningCode(TestBase): - def test_print(self): self.redirect_stdout() try: self.add_exec('print("output")') - eq_(sys.stdout.getvalue(), 'output\n') + eq_(sys.stdout.getvalue(), "output\n") finally: self.restore_stdout() def testQuestionMark_1(self): self.redirect_stdout() try: - self.add_exec('?') + self.add_exec("?") found = sys.stdout.getvalue() if len(found) < 1000: - raise AssertionError('Expected IPython help to be big. Found: %s' % (found,)) + raise AssertionError("Expected IPython help to be big. Found: %s" % (found,)) finally: self.restore_stdout() def testQuestionMark_2(self): self.redirect_stdout() try: - self.add_exec('int?') + self.add_exec("int?") found = sys.stdout.getvalue() - if 'Convert' not in found: + if "Convert" not in found: raise AssertionError('Expected to find "Convert" in %s' % (found,)) finally: self.restore_stdout() @@ -157,36 +157,37 @@ def test_gui(self): return else: from pydev_ipython.inputhook import get_inputhook + assert get_inputhook() is None - self.add_exec('%gui tk') + self.add_exec("%gui tk") # we can't test the GUI works here because we aren't connected to XML-RPC so # nowhere for hook to run assert get_inputhook() is not None - self.add_exec('%gui none') + self.add_exec("%gui none") assert get_inputhook() is None def test_history(self): - ''' Make sure commands are added to IPython's history ''' + """Make sure commands are added to IPython's history""" self.redirect_stdout() try: - self.add_exec('a=1') - self.add_exec('b=2') - _ih = self.front_end.get_namespace()['_ih'] - eq_(_ih[-1], 'b=2') - eq_(_ih[-2], 'a=1') - - self.add_exec('history') - hist = sys.stdout.getvalue().split('\n') - eq_(hist[-1], '') - eq_(hist[-2], 'history') - eq_(hist[-3], 'b=2') - eq_(hist[-4], 'a=1') + self.add_exec("a=1") + self.add_exec("b=2") + _ih = self.front_end.get_namespace()["_ih"] + eq_(_ih[-1], "b=2") + eq_(_ih[-2], "a=1") + + self.add_exec("history") + hist = sys.stdout.getvalue().split("\n") + eq_(hist[-1], "") + eq_(hist[-2], "history") + eq_(hist[-3], "b=2") + eq_(hist[-4], "a=1") finally: self.restore_stdout() def test_edit(self): - ''' Make sure we can issue an edit command''' - if os.environ.get('TRAVIS') == 'true': + """Make sure we can issue an edit command""" + if os.environ.get("TRAVIS") == "true": # This test is too flaky on travis. return @@ -196,20 +197,16 @@ def test_edit(self): called_IPythonEditor = [False] def start_client_thread(client_port): - class ClientThread(threading.Thread): - def __init__(self, client_port): threading.Thread.__init__(self) self.client_port = client_port def run(self): - class HandleRequestInput: - def RequestInput(self): called_RequestInput[0] = True - return '\n' + return "\n" def IPythonEditor(self, name, line): called_IPythonEditor[0] = (name, line) @@ -218,8 +215,10 @@ def IPythonEditor(self, name, line): handle_request_input = HandleRequestInput() from _pydev_bundle import pydev_localhost + self.client_server = client_server = SimpleXMLRPCServer( - (pydev_localhost.get_localhost(), self.client_port), logRequests=False) + (pydev_localhost.get_localhost(), self.client_port), logRequests=False + ) client_server.register_function(handle_request_input.RequestInput) client_server.register_function(handle_request_input.IPythonEditor) client_server.serve_forever() @@ -237,7 +236,7 @@ def shutdown(self): # can't make multiple versions. So we reuse self.front_end for # all the tests s = socket.socket() - s.bind(('', 0)) + s.bind(("", 0)) self.client_port = client_port = s.getsockname()[1] s.close() self.front_end = get_pydev_frontend(get_localhost(), client_port) @@ -246,13 +245,13 @@ def shutdown(self): orig_stdin = sys.stdin sys.stdin = StdIn(self, get_localhost(), self.client_port) try: - filename = 'made_up_file.py' - self.add_exec('%edit ' + filename) + filename = "made_up_file.py" + self.add_exec("%edit " + filename) for i in range(10): - if called_IPythonEditor[0] == (os.path.abspath(filename), '0'): + if called_IPythonEditor[0] == (os.path.abspath(filename), "0"): break - time.sleep(.1) + time.sleep(0.1) if not called_IPythonEditor[0]: # File "/home/travis/miniconda/lib/python3.3/site-packages/IPython/core/interactiveshell.py", line 2883, in run_code @@ -297,12 +296,13 @@ def shutdown(self): # ConnectionRefusedError: [Errno 111] Connection refused # I.e.: just warn that the test failing, don't actually fail. - sys.stderr.write('Test failed: this test is brittle in travis because sometimes the connection is refused (as above) and we do not have a callback.\n') + sys.stderr.write( + "Test failed: this test is brittle in travis because sometimes the connection is refused (as above) and we do not have a callback.\n" + ) return - eq_(called_IPythonEditor[0], (os.path.abspath(filename), '0')) + eq_(called_IPythonEditor[0], (os.path.abspath(filename), "0")) assert called_RequestInput[0], "Make sure the 'wait' parameter has been respected" finally: sys.stdin = orig_stdin client_thread.shutdown() - diff --git a/src/debugpy/_vendored/pydevd/tests/test_pydevconsole.py b/src/debugpy/_vendored/pydevd/tests/test_pydevconsole.py index bbfc16efd..ef0c31f53 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_pydevconsole.py +++ b/src/debugpy/_vendored/pydevd/tests/test_pydevconsole.py @@ -9,16 +9,16 @@ try: from ast import PyCF_ALLOW_TOP_LEVEL_AWAIT # @UnusedImport + CAN_EVALUATE_TOP_LEVEL_ASYNC = True except: CAN_EVALUATE_TOP_LEVEL_ASYNC = False -#======================================================================================================================= +# ======================================================================================================================= # Test -#======================================================================================================================= +# ======================================================================================================================= class Test(unittest.TestCase): - @contextmanager def interpreter(self): self.original_stdout = sys.stdout @@ -36,9 +36,11 @@ def interpreter(self): client_port, _server_port = self.get_free_addresses() client_thread = self.start_client_thread(client_port) # @UnusedVariable import time - time.sleep(.3) # let's give it some time to start the threads + + time.sleep(0.3) # let's give it some time to start the threads from _pydev_bundle import pydev_localhost + interpreter = pydevconsole.InterpreterInterface(pydev_localhost.get_localhost(), client_port, threading.current_thread()) yield interpreter except: @@ -55,121 +57,123 @@ def test_console_hello(self): (result,) = interpreter.hello("Hello pydevconsole") self.assertEqual(result, "Hello eclipse") - @pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async.') + @pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async.") def test_console_async(self): with self.interpreter() as interpreter: from _pydev_bundle.pydev_console_utils import CodeFragment - more = interpreter.add_exec(CodeFragment(''' + + more = interpreter.add_exec( + CodeFragment( + """ async def async_func(a): return a -''')) +""" + ) + ) assert not more assert not sys.stderr.getvalue() assert not sys.stdout.getvalue() - more = interpreter.add_exec(CodeFragment('''x = await async_func(1111)''')) + more = interpreter.add_exec(CodeFragment("""x = await async_func(1111)""")) assert not more assert not sys.stderr.getvalue() assert not sys.stdout.getvalue() - more = interpreter.add_exec(CodeFragment('''print(x)''')) + more = interpreter.add_exec(CodeFragment("""print(x)""")) assert not more assert not sys.stderr.getvalue() - assert '1111' in sys.stdout.getvalue() + assert "1111" in sys.stdout.getvalue() def test_console_requests(self): with self.interpreter() as interpreter: from _pydev_bundle.pydev_console_utils import CodeFragment - interpreter.add_exec(CodeFragment('class Foo:\n CONSTANT=1\n')) - interpreter.add_exec(CodeFragment('foo=Foo()')) - interpreter.add_exec(CodeFragment('foo.__doc__=None')) - interpreter.add_exec(CodeFragment('val = input()')) - interpreter.add_exec(CodeFragment('50')) - interpreter.add_exec(CodeFragment('print (val)')) + + interpreter.add_exec(CodeFragment("class Foo:\n CONSTANT=1\n")) + interpreter.add_exec(CodeFragment("foo=Foo()")) + interpreter.add_exec(CodeFragment("foo.__doc__=None")) + interpreter.add_exec(CodeFragment("val = input()")) + interpreter.add_exec(CodeFragment("50")) + interpreter.add_exec(CodeFragment("print (val)")) found = sys.stdout.getvalue().split() try: - self.assertEqual(['50', 'input_request'], found) + self.assertEqual(["50", "input_request"], found) except: try: - self.assertEqual(['input_request'], found) # IPython + self.assertEqual(["input_request"], found) # IPython except: - self.assertEqual([u'50', u'input_request'], found[1:]) # IPython 5.1 - self.assertTrue(found[0].startswith(u'Out')) + self.assertEqual(["50", "input_request"], found[1:]) # IPython 5.1 + self.assertTrue(found[0].startswith("Out")) - comps = interpreter.getCompletions('foo.', 'foo.') - self.assertTrue( - ('CONSTANT', '', '', '3') in comps or ('CONSTANT', '', '', '4') in comps, \ - 'Found: %s' % comps - ) + comps = interpreter.getCompletions("foo.", "foo.") + self.assertTrue(("CONSTANT", "", "", "3") in comps or ("CONSTANT", "", "", "4") in comps, "Found: %s" % comps) comps = interpreter.getCompletions('"".', '"".') self.assertTrue( - ('__add__', 'x.__add__(y) <==> x+y', '', '3') in comps or - ('__add__', '', '', '4') in comps or - ('__add__', 'x.__add__(y) <==> x+y\r\nx.__add__(y) <==> x+y', '()', '2') in comps or - ('__add__', 'x.\n__add__(y) <==> x+yx.\n__add__(y) <==> x+y', '()', '2'), - 'Did not find __add__ in : %s' % (comps,) + ("__add__", "x.__add__(y) <==> x+y", "", "3") in comps + or ("__add__", "", "", "4") in comps + or ("__add__", "x.__add__(y) <==> x+y\r\nx.__add__(y) <==> x+y", "()", "2") in comps + or ("__add__", "x.\n__add__(y) <==> x+yx.\n__add__(y) <==> x+y", "()", "2"), + "Did not find __add__ in : %s" % (comps,), ) - completions = interpreter.getCompletions('', '') + completions = interpreter.getCompletions("", "") for c in completions: - if c[0] == 'AssertionError': + if c[0] == "AssertionError": break else: - self.fail('Could not find AssertionError') + self.fail("Could not find AssertionError") - completions = interpreter.getCompletions('Assert', 'Assert') + completions = interpreter.getCompletions("Assert", "Assert") for c in completions: - if c[0] == 'RuntimeError': - self.fail('Did not expect to find RuntimeError there') + if c[0] == "RuntimeError": + self.fail("Did not expect to find RuntimeError there") - assert ('__doc__', None, '', '3') not in interpreter.getCompletions('foo.CO', 'foo.') + assert ("__doc__", None, "", "3") not in interpreter.getCompletions("foo.CO", "foo.") - comps = interpreter.getCompletions('va', 'va') - assert ('val', '', '', '3') in comps or ('val', '', '', '4') in comps + comps = interpreter.getCompletions("va", "va") + assert ("val", "", "", "3") in comps or ("val", "", "", "4") in comps interpreter.add_exec(CodeFragment('s = "mystring"')) - desc = interpreter.getDescription('val') - self.assertTrue(desc.find('str(object) -> string') >= 0 or - desc == "'input_request'" or - desc.find('str(string[, encoding[, errors]]) -> str') >= 0 or - desc.find('str(Char* value)') >= 0 or - desc.find('str(object=\'\') -> string') >= 0 or - desc.find('str(value: Char*)') >= 0 or - desc.find('str(object=\'\') -> str') >= 0 or - desc.find('The most base type') >= 0 # Jython 2.7 is providing this :P - , - 'Could not find what was needed in %s' % desc) - - desc = interpreter.getDescription('val.join') - self.assertTrue(desc.find('S.join(sequence) -> string') >= 0 or - desc.find('S.join(sequence) -> str') >= 0 or - desc.find('S.join(iterable) -> string') >= 0 or - desc == "" or - desc == "" or - desc.find('str join(str self, list sequence)') >= 0 or - desc.find('S.join(iterable) -> str') >= 0 or - desc.find('join(self: str, sequence: list) -> str') >= 0 or - desc.find('Concatenate any number of strings.') >= 0 or - desc.find('bound method str.join') >= 0, # PyPy - "Could not recognize: %s" % (desc,)) + desc = interpreter.getDescription("val") + self.assertTrue( + desc.find("str(object) -> string") >= 0 + or desc == "'input_request'" + or desc.find("str(string[, encoding[, errors]]) -> str") >= 0 + or desc.find("str(Char* value)") >= 0 + or desc.find("str(object='') -> string") >= 0 + or desc.find("str(value: Char*)") >= 0 + or desc.find("str(object='') -> str") >= 0 + or desc.find("The most base type") >= 0, # Jython 2.7 is providing this :P + "Could not find what was needed in %s" % desc, + ) - def start_client_thread(self, client_port): + desc = interpreter.getDescription("val.join") + self.assertTrue( + desc.find("S.join(sequence) -> string") >= 0 + or desc.find("S.join(sequence) -> str") >= 0 + or desc.find("S.join(iterable) -> string") >= 0 + or desc == "" + or desc == "" + or desc.find("str join(str self, list sequence)") >= 0 + or desc.find("S.join(iterable) -> str") >= 0 + or desc.find("join(self: str, sequence: list) -> str") >= 0 + or desc.find("Concatenate any number of strings.") >= 0 + or desc.find("bound method str.join") >= 0, # PyPy + "Could not recognize: %s" % (desc,), + ) + def start_client_thread(self, client_port): class ClientThread(threading.Thread): - def __init__(self, client_port): threading.Thread.__init__(self) self.client_port = client_port def run(self): - class HandleRequestInput: - def RequestInput(self): client_thread.requested_input = True - return 'input_request' + return "input_request" def NotifyFinished(self, *args, **kwargs): client_thread.notified_finished += 1 @@ -178,6 +182,7 @@ def NotifyFinished(self, *args, **kwargs): handle_request_input = HandleRequestInput() from _pydev_bundle import pydev_localhost + client_server = SimpleXMLRPCServer((pydev_localhost.get_localhost(), self.client_port), logRequests=False) client_server.register_function(handle_request_input.RequestInput) client_server.register_function(handle_request_input.NotifyFinished) @@ -191,9 +196,7 @@ def NotifyFinished(self, *args, **kwargs): return client_thread def start_debugger_server_thread(self, debugger_port, socket_code): - class DebuggerServerThread(threading.Thread): - def __init__(self, debugger_port, socket_code): threading.Thread.__init__(self) self.debugger_port = debugger_port @@ -201,8 +204,9 @@ def __init__(self, debugger_port, socket_code): def run(self): import socket + s = socket.socket() - s.bind(('', debugger_port)) + s.bind(("", debugger_port)) s.listen(1) socket, unused_addr = s.accept() socket_code(socket) @@ -214,6 +218,7 @@ def run(self): def get_free_addresses(self): from _pydev_bundle.pydev_localhost import get_socket_names + socket_names = get_socket_names(2, True) port0 = socket_names[0][1] port1 = socket_names[1][1] @@ -231,7 +236,6 @@ def test_server(self): client_port, server_port = self.get_free_addresses() class ServerThread(threading.Thread): - def __init__(self, client_port, server_port): threading.Thread.__init__(self) self.client_port = client_port @@ -239,6 +243,7 @@ def __init__(self, client_port, server_port): def run(self): from _pydev_bundle import pydev_localhost + pydevconsole.start_server(pydev_localhost.get_localhost(), self.server_port, self.client_port) server_thread = ServerThread(client_port, server_port) @@ -248,30 +253,31 @@ def run(self): client_thread = self.start_client_thread(client_port) # @UnusedVariable import time - time.sleep(.3) # let's give it some time to start the threads + + time.sleep(0.3) # let's give it some time to start the threads sys.stdout = pydevd_io.IOBuf() from _pydev_bundle import pydev_localhost - server = xmlrpclib.Server('http://%s:%s' % (pydev_localhost.get_localhost(), server_port)) - server.execLine('class Foo:') - server.execLine(' pass') - server.execLine('') - server.execLine('foo = Foo()') - server.execLine('a = input()') - server.execLine('print (a)') + + server = xmlrpclib.Server("http://%s:%s" % (pydev_localhost.get_localhost(), server_port)) + server.execLine("class Foo:") + server.execLine(" pass") + server.execLine("") + server.execLine("foo = Foo()") + server.execLine("a = input()") + server.execLine("print (a)") initial = time.time() while not client_thread.requested_input: if time.time() - initial > 2: - raise AssertionError('Did not get the return asked before the timeout.') - time.sleep(.1) + raise AssertionError("Did not get the return asked before the timeout.") + time.sleep(0.1) found = sys.stdout.getvalue() - while ['input_request'] != found.split(): + while ["input_request"] != found.split(): found += sys.stdout.getvalue() if time.time() - initial > 2: break - time.sleep(.1) - self.assertEqual(['input_request'], found.split()) + time.sleep(0.1) + self.assertEqual(["input_request"], found.split()) finally: sys.stdout = self.original_stdout - diff --git a/src/debugpy/_vendored/pydevd/tests/test_pyserver.py b/src/debugpy/_vendored/pydevd/tests/test_pyserver.py index da82aad44..fa1696920 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_pyserver.py +++ b/src/debugpy/_vendored/pydevd/tests/test_pyserver.py @@ -6,40 +6,42 @@ start_new_thread = thread.start_new_thread -BUILTIN_MOD = 'builtins' +BUILTIN_MOD = "builtins" def send(s, msg): - s.send(bytearray(msg, 'utf-8')) + s.send(bytearray(msg, "utf-8")) import unittest class TestCPython(unittest.TestCase): - def test_message(self): t = pycompletionserver.CompletionServer(0) l = [] - l.append(('Def', 'description' , 'args')) - l.append(('Def1', 'description1', 'args1')) - l.append(('Def2', 'description2', 'args2')) + l.append(("Def", "description", "args")) + l.append(("Def1", "description1", "args1")) + l.append(("Def2", "description2", "args2")) msg = t.processor.format_completion_message(None, l) - self.assertEqual('@@COMPLETIONS(None,(Def,description,args),(Def1,description1,args1),(Def2,description2,args2))END@@', msg) + self.assertEqual("@@COMPLETIONS(None,(Def,description,args),(Def1,description1,args1),(Def2,description2,args2))END@@", msg) l = [] - l.append(('Def', 'desc,,r,,i()ption', '')) - l.append(('Def(1', 'descriptio(n1', '')) - l.append(('De,f)2', 'de,s,c,ription2', '')) + l.append(("Def", "desc,,r,,i()ption", "")) + l.append(("Def(1", "descriptio(n1", "")) + l.append(("De,f)2", "de,s,c,ription2", "")) msg = t.processor.format_completion_message(None, l) - self.assertEqual('@@COMPLETIONS(None,(Def,desc%2C%2Cr%2C%2Ci%28%29ption, ),(Def%281,descriptio%28n1, ),(De%2Cf%292,de%2Cs%2Cc%2Cription2, ))END@@', msg) + self.assertEqual( + "@@COMPLETIONS(None,(Def,desc%2C%2Cr%2C%2Ci%28%29ption, ),(Def%281,descriptio%28n1, ),(De%2Cf%292,de%2Cs%2Cc%2Cription2, ))END@@", + msg, + ) def create_connections(self): - ''' + """ Creates the connections needed for testing. - ''' + """ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((pycompletionserver.HOST, 0)) @@ -55,16 +57,16 @@ def create_connections(self): def read_msg(self): finish = False - msg = '' + msg = "" while finish == False: m = self.socket.recv(1024 * 4) - m = m.decode('utf-8') - if m.startswith('@@PROCESSING'): - sys.stdout.write('Status msg: %s\n' % (msg,)) + m = m.decode("utf-8") + if m.startswith("@@PROCESSING"): + sys.stdout.write("Status msg: %s\n" % (msg,)) else: msg += m - if msg.find('END@@') != -1: + if msg.find("END@@") != -1: finish = True return msg @@ -75,75 +77,80 @@ def test_completion_sockets_and_messages(self): try: # now that we have the connections all set up, check the code completion messages. - msg = quote_plus('math') - send(socket, '@@IMPORTS:%sEND@@' % msg) # math completions + msg = quote_plus("math") + send(socket, "@@IMPORTS:%sEND@@" % msg) # math completions completions = self.read_msg() # print_ unquote_plus(completions) # math is a builtin and because of that, it starts with None as a file - start = '@@COMPLETIONS(None,(__doc__,' - start_2 = '@@COMPLETIONS(None,(__name__,' - if ('/math.so,' in completions or - '/math.cpython-33m.so,' in completions or - '/math.cpython-34m.so,' in completions or - 'math.cpython-35m' in completions or - 'math.cpython-36m' in completions or - 'math.cpython-37m' in completions or - 'math.cpython-38' in completions or - 'math.cpython-39' in completions or - 'math.cpython-310' in completions or - 'math.cpython-311' in completions - ): + start = "@@COMPLETIONS(None,(__doc__," + start_2 = "@@COMPLETIONS(None,(__name__," + if ( + "/math.so," in completions + or "/math.cpython-33m.so," in completions + or "/math.cpython-34m.so," in completions + or "math.cpython-35m" in completions + or "math.cpython-36m" in completions + or "math.cpython-37m" in completions + or "math.cpython-38" in completions + or "math.cpython-39" in completions + or "math.cpython-310" in completions + or "math.cpython-311" in completions + or "math.cpython-312" in completions + ): return - self.assertTrue(completions.startswith(start) or completions.startswith(start_2), '%s DOESNT START WITH %s' % (completions, (start, start_2))) + self.assertTrue( + completions.startswith(start) or completions.startswith(start_2), + "%s DOESNT START WITH %s" % (completions, (start, start_2)), + ) - self.assertTrue('@@COMPLETIONS' in completions) - self.assertTrue('END@@' in completions) + self.assertTrue("@@COMPLETIONS" in completions) + self.assertTrue("END@@" in completions) # now, test i - msg = quote_plus('%s.list' % BUILTIN_MOD) + msg = quote_plus("%s.list" % BUILTIN_MOD) send(socket, "@@IMPORTS:%s\nEND@@" % msg) found = self.read_msg() - self.assertTrue('sort' in found, 'Could not find sort in: %s' % (found,)) + self.assertTrue("sort" in found, "Could not find sort in: %s" % (found,)) # now, test search - msg = quote_plus('inspect.ismodule') - send(socket, '@@SEARCH%sEND@@' % msg) # math completions + msg = quote_plus("inspect.ismodule") + send(socket, "@@SEARCH%sEND@@" % msg) # math completions found = self.read_msg() - self.assertTrue('inspect.py' in found) + self.assertTrue("inspect.py" in found) for i in range(33, 100): if str(i) in found: break else: - self.fail('Could not find the ismodule line in %s' % (found,)) + self.fail("Could not find the ismodule line in %s" % (found,)) # now, test search - msg = quote_plus('inspect.CO_NEWLOCALS') - send(socket, '@@SEARCH%sEND@@' % msg) # math completions + msg = quote_plus("inspect.CO_NEWLOCALS") + send(socket, "@@SEARCH%sEND@@" % msg) # math completions found = self.read_msg() - self.assertTrue('inspect.py' in found) - self.assertTrue('CO_NEWLOCALS' in found) + self.assertTrue("inspect.py" in found) + self.assertTrue("CO_NEWLOCALS" in found) # now, test search - msg = quote_plus('inspect.BlockFinder.tokeneater') - send(socket, '@@SEARCH%sEND@@' % msg) + msg = quote_plus("inspect.BlockFinder.tokeneater") + send(socket, "@@SEARCH%sEND@@" % msg) found = self.read_msg() - self.assertTrue('inspect.py' in found) -# self.assertTrue('CO_NEWLOCALS' in found) + self.assertTrue("inspect.py" in found) + # self.assertTrue('CO_NEWLOCALS' in found) # reload modules test -# send(socket, '@@RELOAD_MODULES_END@@') -# ok = self.read_msg() -# self.assertEqual('@@MSG_OK_END@@' , ok) -# this test is not executed because it breaks our current enviroment. + # send(socket, '@@RELOAD_MODULES_END@@') + # ok = self.read_msg() + # self.assertEqual('@@MSG_OK_END@@' , ok) + # this test is not executed because it breaks our current enviroment. finally: try: - sys.stdout.write('succedded...sending kill msg\n') + sys.stdout.write("succedded...sending kill msg\n") self.send_kill_msg(socket) -# while not hasattr(t, 'ended'): -# pass #wait until it receives the message and quits. + # while not hasattr(t, 'ended'): + # pass #wait until it receives the message and quits. socket.close() self.socket.close() @@ -152,4 +159,3 @@ def test_completion_sockets_and_messages(self): def send_kill_msg(self, socket): socket.send(pycompletionserver.MSG_KILL_SERVER) - diff --git a/src/debugpy/_vendored/pydevd/tests/test_simpleTipper.py b/src/debugpy/_vendored/pydevd/tests/test_simpleTipper.py index a08136bdd..5719a6346 100644 --- a/src/debugpy/_vendored/pydevd/tests/test_simpleTipper.py +++ b/src/debugpy/_vendored/pydevd/tests/test_simpleTipper.py @@ -1,6 +1,6 @@ -''' +""" @author Fabio Zadrozny -''' +""" from _pydev_bundle import _pydev_imports_tipper import inspect import pytest @@ -9,59 +9,59 @@ try: import __builtin__ # @UnusedImport - BUILTIN_MOD = '__builtin__' + + BUILTIN_MOD = "__builtin__" except ImportError: - BUILTIN_MOD = 'builtins' + BUILTIN_MOD = "builtins" -IS_JYTHON = sys.platform.find('java') != -1 +IS_JYTHON = sys.platform.find("java") != -1 HAS_WX = False -@pytest.mark.skipif(IS_JYTHON, reason='CPython related test') +@pytest.mark.skipif(IS_JYTHON, reason="CPython related test") class TestCPython(unittest.TestCase): - def p(self, t): for a in t: - sys.stdout.write('%s\n' % (a,)) + sys.stdout.write("%s\n" % (a,)) def test_imports3(self): - tip = _pydev_imports_tipper.generate_tip('os') - ret = self.assert_in('path', tip) - self.assertEqual('', ret[2]) + tip = _pydev_imports_tipper.generate_tip("os") + ret = self.assert_in("path", tip) + self.assertEqual("", ret[2]) def test_imports2(self): try: - tip = _pydev_imports_tipper.generate_tip('OpenGL.GLUT') - self.assert_in('glutDisplayFunc', tip) - self.assert_in('glutInitDisplayMode', tip) + tip = _pydev_imports_tipper.generate_tip("OpenGL.GLUT") + self.assert_in("glutDisplayFunc", tip) + self.assert_in("glutInitDisplayMode", tip) except ImportError: pass def test_imports4(self): try: - tip = _pydev_imports_tipper.generate_tip('mx.DateTime.mxDateTime.mxDateTime') - self.assert_in('now', tip) + tip = _pydev_imports_tipper.generate_tip("mx.DateTime.mxDateTime.mxDateTime") + self.assert_in("now", tip) except ImportError: pass def test_imports5(self): - tip = _pydev_imports_tipper.generate_tip('%s.list' % BUILTIN_MOD) - s = self.assert_in('sort', tip) + tip = _pydev_imports_tipper.generate_tip("%s.list" % BUILTIN_MOD) + s = self.assert_in("sort", tip) self.check_args( s, - '(cmp=None, key=None, reverse=False)', - '(self, object cmp, object key, bool reverse)', - '(self, cmp: object, key: object, reverse: bool)', - '(key=None, reverse=False)', - '(self, key=None, reverse=False)', - '(self, cmp, key, reverse)', - '(self, key, reverse)', + "(cmp=None, key=None, reverse=False)", + "(self, object cmp, object key, bool reverse)", + "(self, cmp: object, key: object, reverse: bool)", + "(key=None, reverse=False)", + "(self, key=None, reverse=False)", + "(self, cmp, key, reverse)", + "(self, key, reverse)", ) def test_imports2a(self): - tips = _pydev_imports_tipper.generate_tip('%s.RuntimeError' % BUILTIN_MOD) - self.assert_in('__doc__', tips) + tips = _pydev_imports_tipper.generate_tip("%s.RuntimeError" % BUILTIN_MOD) + self.assert_in("__doc__", tips) def test_imports2b(self): try: @@ -69,9 +69,9 @@ def test_imports2b(self): except: pass else: - tips = _pydev_imports_tipper.generate_tip('%s' % BUILTIN_MOD) - t = self.assert_in('file' , tips) - self.assertTrue('->' in t[1].strip() or 'file' in t[1]) + tips = _pydev_imports_tipper.generate_tip("%s" % BUILTIN_MOD) + t = self.assert_in("file", tips) + self.assertTrue("->" in t[1].strip() or "file" in t[1]) def test_imports2c(self): try: @@ -79,112 +79,113 @@ def test_imports2c(self): except: pass else: - tips = _pydev_imports_tipper.generate_tip('%s.file' % BUILTIN_MOD) - t = self.assert_in('readlines' , tips) - self.assertTrue('->' in t[1] or 'sizehint' in t[1]) + tips = _pydev_imports_tipper.generate_tip("%s.file" % BUILTIN_MOD) + t = self.assert_in("readlines", tips) + self.assertTrue("->" in t[1] or "sizehint" in t[1]) def test_imports(self): - ''' + """ You can print_ the results to check... - ''' + """ if HAS_WX: - tip = _pydev_imports_tipper.generate_tip('wxPython.wx') - self.assert_in('wxApp' , tip) + tip = _pydev_imports_tipper.generate_tip("wxPython.wx") + self.assert_in("wxApp", tip) - tip = _pydev_imports_tipper.generate_tip('wxPython.wx.wxApp') + tip = _pydev_imports_tipper.generate_tip("wxPython.wx.wxApp") try: - tip = _pydev_imports_tipper.generate_tip('qt') - self.assert_in('QWidget' , tip) - self.assert_in('QDialog' , tip) + tip = _pydev_imports_tipper.generate_tip("qt") + self.assert_in("QWidget", tip) + self.assert_in("QDialog", tip) - tip = _pydev_imports_tipper.generate_tip('qt.QWidget') - self.assert_in('rect' , tip) - self.assert_in('rect' , tip) - self.assert_in('AltButton' , tip) + tip = _pydev_imports_tipper.generate_tip("qt.QWidget") + self.assert_in("rect", tip) + self.assert_in("rect", tip) + self.assert_in("AltButton", tip) - tip = _pydev_imports_tipper.generate_tip('qt.QWidget.AltButton') - self.assert_in('__xor__' , tip) + tip = _pydev_imports_tipper.generate_tip("qt.QWidget.AltButton") + self.assert_in("__xor__", tip) - tip = _pydev_imports_tipper.generate_tip('qt.QWidget.AltButton.__xor__') - self.assert_in('__class__' , tip) + tip = _pydev_imports_tipper.generate_tip("qt.QWidget.AltButton.__xor__") + self.assert_in("__class__", tip) except ImportError: pass tip = _pydev_imports_tipper.generate_tip(BUILTIN_MOD) -# for t in tip[1]: -# print_ t - self.assert_in('object' , tip) - self.assert_in('tuple' , tip) - self.assert_in('list' , tip) - self.assert_in('RuntimeError' , tip) - self.assert_in('RuntimeWarning' , tip) + # for t in tip[1]: + # print_ t + self.assert_in("object", tip) + self.assert_in("tuple", tip) + self.assert_in("list", tip) + self.assert_in("RuntimeError", tip) + self.assert_in("RuntimeWarning", tip) # Remove cmp as it's not available on py 3 # t = self.assert_in('cmp' , tip) # self.check_args(t, '(x, y)', '(object x, object y)', '(x: object, y: object)') #args - t = self.assert_in('isinstance' , tip) + t = self.assert_in("isinstance", tip) self.check_args( t, - '(object, class_or_type_or_tuple)', - '(object o, type typeinfo)', - '(o: object, typeinfo: type)', - '(obj, class_or_tuple)', - '(obj, klass_or_tuple)', + "(object, class_or_type_or_tuple)", + "(object o, type typeinfo)", + "(o: object, typeinfo: type)", + "(obj, class_or_tuple)", + "(obj, klass_or_tuple)", ) # args - t = self.assert_in('compile' , tip) + t = self.assert_in("compile", tip) self.check_args( t, - '(source, filename, mode)', - '()', - '(o: object, name: str, val: object)', - '(source, filename, mode, flags, dont_inherit, optimize)', - '(source, filename, mode, flags, dont_inherit)', - '(source, filename, mode, flags, dont_inherit, optimize, _feature_version=-1)' + "(source, filename, mode)", + "()", + "(o: object, name: str, val: object)", + "(source, filename, mode, flags, dont_inherit, optimize)", + "(source, filename, mode, flags, dont_inherit)", + "(source, filename, mode, flags, dont_inherit, optimize, _feature_version=-1)", + "(source, filename, mode, flags, dont_inherit, optimize, _feature_version)", ) # args - t = self.assert_in('setattr' , tip) + t = self.assert_in("setattr", tip) self.check_args( t, - '(object, name, value)', - '(object o, str name, object val)', - '(o: object, name: str, val: object)', - '(obj, name, value)', - '(object, name, val)', + "(object, name, value)", + "(object o, str name, object val)", + "(o: object, name: str, val: object)", + "(obj, name, value)", + "(object, name, val)", ) # args try: import compiler - compiler_module = 'compiler' + + compiler_module = "compiler" except ImportError: try: import ast - compiler_module = 'ast' + + compiler_module = "ast" except ImportError: compiler_module = None if compiler_module is not None: # Not available in iron python tip = _pydev_imports_tipper.generate_tip(compiler_module) - if compiler_module == 'compiler': - self.assert_args('parse', '(buf, mode)', tip) - self.assert_args('walk', '(tree, visitor, walker, verbose)', tip) - self.assert_in('parseFile' , tip) + if compiler_module == "compiler": + self.assert_args("parse", "(buf, mode)", tip) + self.assert_args("walk", "(tree, visitor, walker, verbose)", tip) + self.assert_in("parseFile", tip) else: - self.assert_args('parse', [ - '(source, filename, mode)', - '(source, filename, mode, type_comments=False, feature_version=None)' - ], tip + self.assert_args( + "parse", ["(source, filename, mode)", "(source, filename, mode, type_comments=False, feature_version=None)"], tip ) - self.assert_args('walk', '(node)', tip) - self.assert_in('parse' , tip) + self.assert_args("walk", "(node)", tip) + self.assert_in("parse", tip) def check_args(self, t, *expected): for x in expected: if x == t[2]: return - self.fail('Found: %s. Expected: %s' % (t[2], expected)) + self.fail("Found: %s. Expected: %s" % (t[2], expected)) def assert_args(self, tok, args, tips): if not isinstance(args, (list, tuple)): @@ -195,33 +196,31 @@ def assert_args(self, tok, args, tips): for arg in args: if arg == a[2]: return - raise AssertionError('%s not in %s', a[2], args) + raise AssertionError("%s not in %s", a[2], args) - raise AssertionError('%s not in %s', tok, tips) + raise AssertionError("%s not in %s", tok, tips) def assert_in(self, tok, tips): for a in tips[1]: if tok == a[0]: return a - raise AssertionError('%s not in %s' % (tok, tips)) + raise AssertionError("%s not in %s" % (tok, tips)) def test_search(self): - s = _pydev_imports_tipper.search_definition('inspect.ismodule') + s = _pydev_imports_tipper.search_definition("inspect.ismodule") (f, line, col), foundAs = s self.assertTrue(line > 0) def test_dot_net_libraries(self): - if sys.platform == 'cli': - tip = _pydev_imports_tipper.generate_tip('System.Drawing') - self.assert_in('Brushes' , tip) + if sys.platform == "cli": + tip = _pydev_imports_tipper.generate_tip("System.Drawing") + self.assert_in("Brushes", tip) - tip = _pydev_imports_tipper.generate_tip('System.Drawing.Brushes') - self.assert_in('Aqua' , tip) + tip = _pydev_imports_tipper.generate_tip("System.Drawing.Brushes") + self.assert_in("Aqua", tip) def test_tips_hasattr_failure(self): - class MyClass(object): - def __getattribute__(self, attr): raise RuntimeError() @@ -230,14 +229,14 @@ def __getattribute__(self, attr): _pydev_imports_tipper.generate_imports_tip_for_module(obj) def test_inspect(self): - class C(object): - def metA(self, a, b): pass obj = C.metA - if inspect.ismethod (obj): + if inspect.ismethod(obj): pass + + # print_ obj.im_func # print_ inspect.getargspec(obj.im_func) diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-glut.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-glut.py index 34a16b454..f9373690f 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-glut.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-glut.py @@ -9,44 +9,41 @@ 4) run: gl.glClearColor(1,1,1,1) """ -if __name__ == '__main__': - +if __name__ == "__main__": #!/usr/bin/env python import sys import OpenGL.GL as gl import OpenGL.GLUT as glut - + def close(): glut.glutDestroyWindow(glut.glutGetWindow()) - + def display(): - gl.glClear (gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT) + gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT) glut.glutSwapBuffers() - - def resize(width,height): - gl.glViewport(0, 0, width, height+4) + + def resize(width, height): + gl.glViewport(0, 0, width, height + 4) gl.glMatrixMode(gl.GL_PROJECTION) gl.glLoadIdentity() - gl.glOrtho(0, width, 0, height+4, -1, 1) + gl.glOrtho(0, width, 0, height + 4, -1, 1) gl.glMatrixMode(gl.GL_MODELVIEW) - + if glut.glutGetWindow() > 0: interactive = True glut.glutInit(sys.argv) - glut.glutInitDisplayMode(glut.GLUT_DOUBLE | - glut.GLUT_RGBA | - glut.GLUT_DEPTH) + glut.glutInitDisplayMode(glut.GLUT_DOUBLE | glut.GLUT_RGBA | glut.GLUT_DEPTH) else: interactive = False - - glut.glutCreateWindow('gui-glut') + + glut.glutCreateWindow("gui-glut") glut.glutDisplayFunc(display) glut.glutReshapeFunc(resize) # This is necessary on osx to be able to close the window # (else the close button is disabled) - if sys.platform == 'darwin' and not bool(glut.HAVE_FREEGLUT): + if sys.platform == "darwin" and not bool(glut.HAVE_FREEGLUT): glut.glutWMCloseFunc(close) - gl.glClearColor(0,0,0,1) - + gl.glClearColor(0, 0, 0, 1) + if not interactive: glut.glutMainLoop() diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk.py index 6df5c782e..629400401 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk.py @@ -8,28 +8,27 @@ interactive console """ -if __name__ == '__main__': +if __name__ == "__main__": import pygtk - pygtk.require('2.0') + + pygtk.require("2.0") import gtk - - + def hello_world(wigdet, data=None): print("Hello World") - + def delete_event(widget, event, data=None): return False - + def destroy(widget, data=None): gtk.main_quit() - + window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.connect("delete_event", delete_event) window.connect("destroy", destroy) button = gtk.Button("Hello World") button.connect("clicked", hello_world, None) - + window.add(button) button.show() window.show() - diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk3.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk3.py index 6351d5235..4c3b0052b 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk3.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-gtk3.py @@ -8,26 +8,24 @@ interactive console """ -if __name__ == '__main__': +if __name__ == "__main__": from gi.repository import Gtk - - + def hello_world(wigdet, data=None): print("Hello World") - + def delete_event(widget, event, data=None): return False - + def destroy(widget, data=None): Gtk.main_quit() - + window = Gtk.Window(Gtk.WindowType.TOPLEVEL) window.connect("delete_event", delete_event) window.connect("destroy", destroy) button = Gtk.Button("Hello World") button.connect("clicked", hello_world, None) - + window.add(button) button.show() window.show() - diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-pyglet.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-pyglet.py index 70f1a7f64..0bbffe178 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-pyglet.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-pyglet.py @@ -8,20 +8,24 @@ interactive console """ -if __name__ == '__main__': +if __name__ == "__main__": import pyglet - - + window = pyglet.window.Window() - label = pyglet.text.Label('Hello, world', - font_name='Times New Roman', - font_size=36, - x=window.width//2, y=window.height//2, - anchor_x='center', anchor_y='center') + label = pyglet.text.Label( + "Hello, world", + font_name="Times New Roman", + font_size=36, + x=window.width // 2, + y=window.height // 2, + anchor_x="center", + anchor_y="center", + ) + @window.event def on_close(): window.close() - + @window.event def on_draw(): window.clear() diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-qt.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-qt.py index 30fc48d38..8a2a63b52 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-qt.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-qt.py @@ -10,27 +10,26 @@ Ref: Modified from http://zetcode.com/tutorials/pyqt4/firstprograms/ """ -if __name__ == '__main__': +if __name__ == "__main__": import sys from PyQt4 import QtGui, QtCore - + class SimpleWindow(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) - + self.setGeometry(300, 300, 200, 80) - self.setWindowTitle('Hello World') - - quit = QtGui.QPushButton('Close', self) + self.setWindowTitle("Hello World") + + quit = QtGui.QPushButton("Close", self) quit.setGeometry(10, 10, 60, 35) - - self.connect(quit, QtCore.SIGNAL('clicked()'), - self, QtCore.SLOT('close()')) - - if __name__ == '__main__': + + self.connect(quit, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("close()")) + + if __name__ == "__main__": app = QtCore.QCoreApplication.instance() if app is None: app = QtGui.QApplication([]) - + sw = SimpleWindow() sw.show() diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-tk.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-tk.py index 4cef45f91..d16e638c9 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-tk.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-tk.py @@ -8,26 +8,24 @@ interactive console """ -if __name__ == '__main__': - +if __name__ == "__main__": try: from Tkinter import * except: # Python 3 from tkinter import * - + class MyApp: - def __init__(self, root): frame = Frame(root) frame.pack() - + self.button = Button(frame, text="Hello", command=self.hello_world) self.button.pack(side=LEFT) - + def hello_world(self): print("Hello World!") - + root = Tk() - + app = MyApp(root) diff --git a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-wx.py b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-wx.py index dfd35d841..5bc54cc33 100644 --- a/src/debugpy/_vendored/pydevd/tests_mainloop/gui-wx.py +++ b/src/debugpy/_vendored/pydevd/tests_mainloop/gui-wx.py @@ -11,54 +11,52 @@ Ref: Modified from wxPython source code wxPython/samples/simple/simple.py """ -if __name__ == '__main__': - +if __name__ == "__main__": import wx - - + class MyFrame(wx.Frame): """ This is MyFrame. It just shows a few controls on a wxPanel, and has a simple menu. """ + def __init__(self, parent, title): - wx.Frame.__init__(self, parent, -1, title, - pos=(150, 150), size=(350, 200)) - + wx.Frame.__init__(self, parent, -1, title, pos=(150, 150), size=(350, 200)) + # Create the menubar menuBar = wx.MenuBar() - + # and a menu menu = wx.Menu() - + # add an item to the menu, using \tKeyName automatically # creates an accelerator, the third param is some help text # that will show up in the statusbar menu.Append(wx.ID_EXIT, "E&xit\tAlt-X", "Exit this simple sample") - + # bind the menu event to an event handler self.Bind(wx.EVT_MENU, self.on_time_to_close, id=wx.ID_EXIT) - + # and put the menu on the menubar menuBar.Append(menu, "&File") self.SetMenuBar(menuBar) - + self.CreateStatusBar() - + # Now create the Panel to put the other controls on. panel = wx.Panel(self) - + # and a few controls text = wx.StaticText(panel, -1, "Hello World!") text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)) text.SetSize(text.GetBestSize()) btn = wx.Button(panel, -1, "Close") funbtn = wx.Button(panel, -1, "Just for fun...") - + # bind the button events to handlers self.Bind(wx.EVT_BUTTON, self.on_time_to_close, btn) self.Bind(wx.EVT_BUTTON, self.on_fun_button, funbtn) - + # Use a sizer to layout the controls, stacked vertically and with # a 10 pixel border around each sizer = wx.BoxSizer(wx.VERTICAL) @@ -67,31 +65,27 @@ def __init__(self, parent, title): sizer.Add(funbtn, 0, wx.ALL, 10) panel.SetSizer(sizer) panel.Layout() - - + def on_time_to_close(self, evt): """Event handler for the button click.""" print("See ya later!") self.Close() - + def on_fun_button(self, evt): """Event handler for the button click.""" print("Having fun yet?") - - + class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, "Simple wxPython App") self.SetTopWindow(frame) - + print("Print statements go to this stdout window by default.") - + frame.Show(True) return True - - - if __name__ == '__main__': - + + if __name__ == "__main__": app = wx.GetApp() if app is None: app = MyApp(redirect=False, clearSigInt=False) @@ -100,4 +94,3 @@ def OnInit(self): app.SetTopWindow(frame) print("Print statements go to this stdout window by default.") frame.Show(True) - diff --git a/src/debugpy/_vendored/pydevd/tests_python/check_debug_python.py b/src/debugpy/_vendored/pydevd/tests_python/check_debug_python.py index 3027e9a9d..371a8be98 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/check_debug_python.py +++ b/src/debugpy/_vendored/pydevd/tests_python/check_debug_python.py @@ -5,14 +5,13 @@ def check(): with pydev_log.log_context(3, sys.stderr): - assert hasattr(sys, 'gettotalrefcount') + assert hasattr(sys, "gettotalrefcount") import pydevd_tracing proceed1 = threading.Event() proceed2 = threading.Event() class SomeThread(threading.Thread): - def run(self): proceed1.set() proceed2.wait() @@ -31,8 +30,8 @@ def some_func(frame, event, arg): lib = pydevd_tracing._load_python_helper_lib() assert lib is None - print('Finished OK') + print("Finished OK") -if __name__ == '__main__': +if __name__ == "__main__": check() diff --git a/src/debugpy/_vendored/pydevd/tests_python/debug_constants.py b/src/debugpy/_vendored/pydevd/tests_python/debug_constants.py index ed4c6f2e3..18f75692b 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/debug_constants.py +++ b/src/debugpy/_vendored/pydevd/tests_python/debug_constants.py @@ -2,14 +2,18 @@ import sys import platform -TEST_CYTHON = os.getenv('PYDEVD_USE_CYTHON', None) == 'YES' -PYDEVD_TEST_VM = os.getenv('PYDEVD_TEST_VM', None) +TEST_CYTHON = os.getenv("PYDEVD_USE_CYTHON", None) == "YES" +PYDEVD_TEST_VM = os.getenv("PYDEVD_TEST_VM", None) IS_PY36_OR_GREATER = sys.version_info[0:2] >= (3, 6) IS_PY311_OR_GREATER = sys.version_info[0:2] >= (3, 11) -IS_CPYTHON = platform.python_implementation() == 'CPython' +IS_PY311 = sys.version_info[0:2] == (3, 11) +IS_PY312 = sys.version_info[0:2] == (3, 12) +IS_CPYTHON = platform.python_implementation() == "CPython" +IS_PYPY = platform.python_implementation() == "PyPy" -TODO_PY311 = IS_PY311_OR_GREATER # Code which needs to be fixed in 3.11 should use this constant. +TODO_PY312 = IS_PY312 # Code which needs to be fixed in 3.12 should use this constant. +TODO_PYPY = IS_PYPY # Code which needs to be fixed in pypy. IS_PY36 = False if sys.version_info[0] == 3 and sys.version_info[1] == 6: @@ -22,24 +26,28 @@ try: import django + TEST_DJANGO = True except: pass try: import flask + TEST_FLASK = True except: pass try: import cherrypy + TEST_CHERRYPY = True except: pass try: import gevent + TEST_GEVENT = True except: pass diff --git a/src/debugpy/_vendored/pydevd/tests_python/debugger_fixtures.py b/src/debugpy/_vendored/pydevd/tests_python/debugger_fixtures.py index e503d1121..b3ef16c28 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/debugger_fixtures.py +++ b/src/debugpy/_vendored/pydevd/tests_python/debugger_fixtures.py @@ -5,9 +5,18 @@ import pytest from tests_python import debugger_unittest -from tests_python.debugger_unittest import (get_free_port, overrides, IS_CPYTHON, IS_JYTHON, IS_IRONPYTHON, - CMD_ADD_DJANGO_EXCEPTION_BREAK, CMD_REMOVE_DJANGO_EXCEPTION_BREAK, - CMD_ADD_EXCEPTION_BREAK, wait_for_condition, IS_PYPY) +from tests_python.debugger_unittest import ( + get_free_port, + overrides, + IS_CPYTHON, + IS_JYTHON, + IS_IRONPYTHON, + CMD_ADD_DJANGO_EXCEPTION_BREAK, + CMD_REMOVE_DJANGO_EXCEPTION_BREAK, + CMD_ADD_EXCEPTION_BREAK, + wait_for_condition, + IS_PYPY, +) from _pydevd_bundle.pydevd_comm_constants import file_system_encoding import sys @@ -16,90 +25,91 @@ def get_java_location(): from java.lang import System # @UnresolvedImport + jre_dir = System.getProperty("java.home") - for f in [os.path.join(jre_dir, 'bin', 'java.exe'), os.path.join(jre_dir, 'bin', 'java')]: + for f in [os.path.join(jre_dir, "bin", "java.exe"), os.path.join(jre_dir, "bin", "java")]: if os.path.exists(f): return f - raise RuntimeError('Unable to find java executable') + raise RuntimeError("Unable to find java executable") def get_jython_jar(): from java.lang import ClassLoader # @UnresolvedImport + cl = ClassLoader.getSystemClassLoader() paths = map(lambda url: url.getFile(), cl.getURLs()) for p in paths: - if 'jython.jar' in p: + if "jython.jar" in p: return p - raise RuntimeError('Unable to find jython.jar') + raise RuntimeError("Unable to find jython.jar") class _WriterThreadCaseMSwitch(debugger_unittest.AbstractWriterThread): - - TEST_FILE = 'tests_python.resources._debugger_case_m_switch' + TEST_FILE = "tests_python.resources._debugger_case_m_switch" IS_MODULE = True @overrides(debugger_unittest.AbstractWriterThread.get_environ) def get_environ(self): env = os.environ.copy() - curr_pythonpath = env.get('PYTHONPATH', '') + curr_pythonpath = env.get("PYTHONPATH", "") root_dirname = os.path.dirname(os.path.dirname(__file__)) curr_pythonpath += root_dirname + os.pathsep - env['PYTHONPATH'] = curr_pythonpath + env["PYTHONPATH"] = curr_pythonpath return env @overrides(debugger_unittest.AbstractWriterThread.get_main_filename) def get_main_filename(self): - return debugger_unittest._get_debugger_test_file('_debugger_case_m_switch.py') + return debugger_unittest._get_debugger_test_file("_debugger_case_m_switch.py") class _WriterThreadCaseModuleWithEntryPoint(_WriterThreadCaseMSwitch): - - TEST_FILE = 'tests_python.resources._debugger_case_module_entry_point:main' + TEST_FILE = "tests_python.resources._debugger_case_module_entry_point:main" IS_MODULE = True @overrides(_WriterThreadCaseMSwitch.get_main_filename) def get_main_filename(self): - return debugger_unittest._get_debugger_test_file('_debugger_case_module_entry_point.py') + return debugger_unittest._get_debugger_test_file("_debugger_case_module_entry_point.py") class AbstractWriterThreadCaseFlask(debugger_unittest.AbstractWriterThread): - FORCE_KILL_PROCESS_WHEN_FINISHED_OK = True FLASK_FOLDER = None - TEST_FILE = 'flask' + TEST_FILE = "flask" IS_MODULE = True def write_add_breakpoint_jinja2(self, line, func, template): - ''' - @param line: starts at 1 - ''' + """ + @param line: starts at 1 + """ assert self.FLASK_FOLDER is not None breakpoint_id = self.next_breakpoint_id() - template_file = debugger_unittest._get_debugger_test_file(os.path.join(self.FLASK_FOLDER, 'templates', template)) - self.write("111\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" % (self.next_seq(), breakpoint_id, 'jinja2-line', template_file, line, func)) - self.log.append('write_add_breakpoint_jinja: %s line: %s func: %s' % (breakpoint_id, line, func)) + template_file = debugger_unittest._get_debugger_test_file(os.path.join(self.FLASK_FOLDER, "templates", template)) + self.write("111\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" % (self.next_seq(), breakpoint_id, "jinja2-line", template_file, line, func)) + self.log.append("write_add_breakpoint_jinja: %s line: %s func: %s" % (breakpoint_id, line, func)) return breakpoint_id - def write_add_exception_breakpoint_jinja2(self, exception='jinja2-Exception'): - self.write('%s\t%s\t%s\t%s\t%s\t%s' % (CMD_ADD_EXCEPTION_BREAK, self.next_seq(), exception, 2, 0, 0)) + def write_add_exception_breakpoint_jinja2(self, exception="jinja2-Exception"): + self.write("%s\t%s\t%s\t%s\t%s\t%s" % (CMD_ADD_EXCEPTION_BREAK, self.next_seq(), exception, 2, 0, 0)) @overrides(debugger_unittest.AbstractWriterThread.get_environ) def get_environ(self): import platform env = os.environ.copy() - env['FLASK_APP'] = 'app.py' - env['FLASK_ENV'] = 'development' - env['FLASK_DEBUG'] = '0' - if platform.system() != 'Windows': - locale = 'en_US.utf8' if platform.system() == 'Linux' else 'en_US.UTF-8' - env.update({ - 'LC_ALL': locale, - 'LANG': locale, - }) + env["FLASK_APP"] = "app.py" + env["FLASK_ENV"] = "development" + env["FLASK_DEBUG"] = "0" + if platform.system() != "Windows": + locale = "en_US.utf8" if platform.system() == "Linux" else "en_US.UTF-8" + env.update( + { + "LC_ALL": locale, + "LANG": locale, + } + ) return env def get_cwd(self): @@ -110,12 +120,12 @@ def get_command_line_args(self): free_port = get_free_port() self.flask_port = free_port return [ - 'flask', - 'run', - '--no-debugger', - '--no-reload', - '--with-threads', - '--port', + "flask", + "run", + "--no-debugger", + "--no-reload", + "--with-threads", + "--port", str(free_port), ] @@ -123,21 +133,19 @@ def _ignore_stderr_line(self, line): if debugger_unittest.AbstractWriterThread._ignore_stderr_line(self, line): return True - if 'Running on http:' in line: + if "Running on http:" in line: return True - if 'GET / HTTP/' in line: + if "GET / HTTP/" in line: return True return False - def create_request_thread(self, url=''): - return debugger_unittest.AbstractWriterThread.create_request_thread( - self, 'http://127.0.0.1:%s%s' % (self.flask_port, url)) + def create_request_thread(self, url=""): + return debugger_unittest.AbstractWriterThread.create_request_thread(self, "http://127.0.0.1:%s%s" % (self.flask_port, url)) class AbstractWriterThreadCaseDjango(debugger_unittest.AbstractWriterThread): - FORCE_KILL_PROCESS_WHEN_FINISHED_OK = True DJANGO_FOLDER = None @@ -145,7 +153,7 @@ def _ignore_stderr_line(self, line): if debugger_unittest.AbstractWriterThread._ignore_stderr_line(self, line): return True - if 'GET /my_app' in line: + if "GET /my_app" in line: return True return False @@ -155,67 +163,57 @@ def get_command_line_args(self): free_port = get_free_port() self.django_port = free_port return [ - debugger_unittest._get_debugger_test_file(os.path.join(self.DJANGO_FOLDER, 'manage.py')), - 'runserver', - '--noreload', - '--nothreading', + debugger_unittest._get_debugger_test_file(os.path.join(self.DJANGO_FOLDER, "manage.py")), + "runserver", + "--noreload", + "--nothreading", str(free_port), ] def write_add_breakpoint_django(self, line, func, template): - ''' - @param line: starts at 1 - ''' + """ + @param line: starts at 1 + """ assert self.DJANGO_FOLDER is not None breakpoint_id = self.next_breakpoint_id() - template_file = debugger_unittest._get_debugger_test_file(os.path.join(self.DJANGO_FOLDER, 'my_app', 'templates', 'my_app', template)) - self.write("111\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" % (self.next_seq(), breakpoint_id, 'django-line', template_file, line, func)) - self.log.append('write_add_django_breakpoint: %s line: %s func: %s' % (breakpoint_id, line, func)) + template_file = debugger_unittest._get_debugger_test_file( + os.path.join(self.DJANGO_FOLDER, "my_app", "templates", "my_app", template) + ) + self.write("111\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" % (self.next_seq(), breakpoint_id, "django-line", template_file, line, func)) + self.log.append("write_add_django_breakpoint: %s line: %s func: %s" % (breakpoint_id, line, func)) return breakpoint_id - def write_add_exception_breakpoint_django(self, exception='Exception'): - self.write('%s\t%s\t%s' % (CMD_ADD_DJANGO_EXCEPTION_BREAK, self.next_seq(), exception)) + def write_add_exception_breakpoint_django(self, exception="Exception"): + self.write("%s\t%s\t%s" % (CMD_ADD_DJANGO_EXCEPTION_BREAK, self.next_seq(), exception)) - def write_remove_exception_breakpoint_django(self, exception='Exception'): - self.write('%s\t%s\t%s' % (CMD_REMOVE_DJANGO_EXCEPTION_BREAK, self.next_seq(), exception)) + def write_remove_exception_breakpoint_django(self, exception="Exception"): + self.write("%s\t%s\t%s" % (CMD_REMOVE_DJANGO_EXCEPTION_BREAK, self.next_seq(), exception)) - def create_request_thread(self, url=''): - return debugger_unittest.AbstractWriterThread.create_request_thread( - self, 'http://127.0.0.1:%s/%s' % (self.django_port, url)) + def create_request_thread(self, url=""): + return debugger_unittest.AbstractWriterThread.create_request_thread(self, "http://127.0.0.1:%s/%s" % (self.django_port, url)) class DebuggerRunnerSimple(debugger_unittest.DebuggerRunner): - def get_command_line(self): if IS_JYTHON: if sys.executable is not None: # i.e.: we're running with the provided jython.exe return [sys.executable] else: - - return [ - get_java_location(), - '-classpath', - get_jython_jar(), - 'org.python.util.jython' - ] + return [get_java_location(), "-classpath", get_jython_jar(), "org.python.util.jython"] if IS_CPYTHON or IS_PYPY: - return [sys.executable, '-u'] + return [sys.executable, "-u"] if IS_IRONPYTHON: - return [ - sys.executable, - '-X:Frames' - ] + return [sys.executable, "-X:Frames"] - raise RuntimeError('Unable to provide command line') + raise RuntimeError("Unable to provide command line") class DebuggerRunnerRemote(debugger_unittest.DebuggerRunner): - def get_command_line(self): - return [sys.executable, '-u'] + return [sys.executable, "-u"] def add_command_line_args(self, args, dap=False): writer = self.writer @@ -243,27 +241,21 @@ class WriterThread(debugger_unittest.AbstractWriterThread): pass class CaseSetup(object): - check_non_ascii = False - NON_ASCII_CHARS = u'áéíóú汉字' + NON_ASCII_CHARS = "áéíóú汉字" dap = False @contextmanager - def test_file( - self, - filename, - wait_for_port=True, - wait_for_initialization=True, - **kwargs - ): + def test_file(self, filename, wait_for_port=True, wait_for_initialization=True, **kwargs): import shutil + filename = debugger_unittest._get_debugger_test_file(filename) if self.check_non_ascii: basedir = str(tmpdir) if isinstance(basedir, bytes): - basedir = basedir.decode('utf-8') + basedir = basedir.decode("utf-8") if isinstance(filename, bytes): - filename = filename.decode('utf-8') + filename = filename.decode("utf-8") new_dir = os.path.join(basedir, self.NON_ASCII_CHARS) os.makedirs(new_dir) @@ -278,11 +270,8 @@ def test_file( setattr(WriterThread, key, value) with runner.check_case( - WriterThread, - wait_for_port=wait_for_port, - wait_for_initialization=wait_for_initialization, - dap=self.dap - ) as writer: + WriterThread, wait_for_port=wait_for_port, wait_for_initialization=wait_for_initialization, dap=self.dap + ) as writer: yield writer return CaseSetup() @@ -296,21 +285,19 @@ def case_setup_dap(case_setup): @pytest.fixture def case_setup_unhandled_exceptions(case_setup): - original = case_setup.test_file def check_test_suceeded_msg(writer, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): # Don't call super as we have an expected exception - if 'ValueError: TEST SUCEEDED' not in stderr: - raise AssertionError('"ValueError: TEST SUCEEDED" not in stderr.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "ValueError: TEST SUCEEDED" not in stderr: + raise AssertionError('"ValueError: TEST SUCEEDED" not in stderr.\nstdout:\n%s\n\nstderr:\n%s' % (stdout, stderr)) def test_file(*args, **kwargs): - kwargs.setdefault('check_test_suceeded_msg', check_test_suceeded_msg) - kwargs.setdefault('additional_output_checks', additional_output_checks) + kwargs.setdefault("check_test_suceeded_msg", check_test_suceeded_msg) + kwargs.setdefault("additional_output_checks", additional_output_checks) return original(*args, **kwargs) case_setup.test_file = test_file @@ -320,39 +307,30 @@ def test_file(*args, **kwargs): @pytest.fixture def case_setup_remote(debugger_runner_remote): - class WriterThread(debugger_unittest.AbstractWriterThread): pass class CaseSetup(object): - dap = False @contextmanager def test_file( - self, - filename, - wait_for_port=True, - access_token=None, - client_access_token=None, - append_command_line_args=(), - **kwargs - ): - + self, filename, wait_for_port=True, access_token=None, client_access_token=None, append_command_line_args=(), **kwargs + ): def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - wait_for_condition(lambda: hasattr(writer, 'port')) + wait_for_condition(lambda: hasattr(writer, "port")) ret.append(str(writer.port)) if access_token is not None: - ret.append('--access-token') + ret.append("--access-token") ret.append(access_token) if client_access_token is not None: - ret.append('--client-access-token') + ret.append("--client-access-token") ret.append(client_access_token) if self.dap: - ret.append('--use-dap-mode') + ret.append("--use-dap-mode") ret.extend(append_command_line_args) return ret @@ -377,14 +355,13 @@ def case_setup_remote_dap(case_setup_remote): @pytest.fixture def case_setup_remote_attach_to_dap(debugger_runner_remote): - ''' + """ The difference from this to case_setup_remote is that this one will connect to a server socket started by the debugger and case_setup_remote will create the server socket and wait for a connection from the debugger. - ''' + """ class WriterThread(debugger_unittest.AbstractWriterThread): - @overrides(debugger_unittest.AbstractWriterThread.run) def run(self): # I.e.: don't start socket on start(), rather, the test should call @@ -392,23 +369,17 @@ def run(self): pass class CaseSetup(object): - dap = True @contextmanager - def test_file( - self, - filename, - port, - **kwargs - ): - additional_args = kwargs.pop('additional_args', []) + def test_file(self, filename, port, **kwargs): + additional_args = kwargs.pop("additional_args", []) def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) ret.append(str(port)) if self.dap: - ret.append('--use-dap-mode') + ret.append("--use-dap-mode") ret.extend(additional_args) return ret @@ -426,28 +397,21 @@ def update_command_line_args(writer, args): @pytest.fixture def case_setup_multiprocessing(debugger_runner_simple): - class WriterThread(debugger_unittest.AbstractWriterThread): pass class CaseSetup(object): - dap = False @contextmanager - def test_file( - self, - filename, - **kwargs - ): - + def test_file(self, filename, **kwargs): def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - ret.insert(ret.index('--client'), '--multiprocess') + ret.insert(ret.index("--client"), "--multiprocess") if self.dap: - ret.insert(ret.index('--client'), '--debug-mode') - ret.insert(ret.index('--client'), 'debugpy-dap') - ret.insert(ret.index('--client'), '--json-dap-http') + ret.insert(ret.index("--client"), "--debug-mode") + ret.insert(ret.index("--client"), "debugpy-dap") + ret.insert(ret.index("--client"), "--json-dap-http") return ret WriterThread.update_command_line_args = update_command_line_args @@ -470,12 +434,10 @@ def case_setup_multiprocessing_dap(case_setup_multiprocessing): @pytest.fixture def case_setup_m_switch(debugger_runner_simple): - class WriterThread(_WriterThreadCaseMSwitch): pass class CaseSetup(object): - @contextmanager def test_file(self, **kwargs): for key, value in kwargs.items(): @@ -489,14 +451,12 @@ def test_file(self, **kwargs): @pytest.fixture def case_setup_m_switch_entry_point(debugger_runner_simple): - runner = debugger_runner_simple class WriterThread(_WriterThreadCaseModuleWithEntryPoint): pass class CaseSetup(object): - @contextmanager def test_file(self, **kwargs): for key, value in kwargs.items(): @@ -510,24 +470,23 @@ def test_file(self, **kwargs): @pytest.fixture def case_setup_django(debugger_runner_simple): - class WriterThread(AbstractWriterThreadCaseDjango): pass class CaseSetup(object): - dap = False @contextmanager def test_file(self, **kwargs): import django - version = [int(x) for x in django.get_version().split('.')][:2] + + version = [int(x) for x in django.get_version().split(".")][:2] if version == [1, 7]: - django_folder = 'my_django_proj_17' - elif version in ([2, 1], [2, 2], [3, 0], [3, 1], [3, 2], [4, 0], [4, 1]): - django_folder = 'my_django_proj_21' + django_folder = "my_django_proj_17" + elif version in ([2, 1], [2, 2], [3, 0], [3, 1], [3, 2], [4, 0], [4, 1], [4, 2]): + django_folder = "my_django_proj_21" else: - raise AssertionError('Can only check django 1.7 -> 4.1 right now. Found: %s' % (version,)) + raise AssertionError("Can only check django 1.7 -> 4.2 right now. Found: %s" % (version,)) WriterThread.DJANGO_FOLDER = django_folder for key, value in kwargs.items(): @@ -548,17 +507,15 @@ def case_setup_django_dap(case_setup_django): @pytest.fixture def case_setup_flask(debugger_runner_simple): - class WriterThread(AbstractWriterThreadCaseFlask): pass class CaseSetup(object): - dap = False @contextmanager def test_file(self, **kwargs): - WriterThread.FLASK_FOLDER = 'flask1' + WriterThread.FLASK_FOLDER = "flask1" for key, value in kwargs.items(): assert hasattr(WriterThread, key) setattr(WriterThread, key, value) diff --git a/src/debugpy/_vendored/pydevd/tests_python/debugger_unittest.py b/src/debugpy/_vendored/pydevd/tests_python/debugger_unittest.py index 642f73e35..1725d0507 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/debugger_unittest.py +++ b/src/debugpy/_vendored/pydevd/tests_python/debugger_unittest.py @@ -113,24 +113,24 @@ import platform -IS_CPYTHON = platform.python_implementation() == 'CPython' -IS_IRONPYTHON = platform.python_implementation() == 'IronPython' -IS_JYTHON = platform.python_implementation() == 'Jython' -IS_PYPY = platform.python_implementation() == 'PyPy' -IS_APPVEYOR = os.environ.get('APPVEYOR', '') in ('True', 'true', '1') +IS_CPYTHON = platform.python_implementation() == "CPython" +IS_IRONPYTHON = platform.python_implementation() == "IronPython" +IS_JYTHON = platform.python_implementation() == "Jython" +IS_PYPY = platform.python_implementation() == "PyPy" +IS_APPVEYOR = os.environ.get("APPVEYOR", "") in ("True", "true", "1") try: from thread import start_new_thread except ImportError: from _thread import start_new_thread # @UnresolvedImport -Hit = namedtuple('Hit', 'thread_id, frame_id, line, suspend_type, name, file') +Hit = namedtuple("Hit", "thread_id, frame_id, line, suspend_type, name, file") def overrides(method): - ''' + """ Helper to check that one method overrides another (redeclared in unit-tests to avoid importing pydevd). - ''' + """ def wrapper(func): if func.__name__ != method.__name__: @@ -156,15 +156,15 @@ class TimeoutError(RuntimeError): # @ReservedAssignment pass -def wait_for_condition(condition, msg=None, timeout=TIMEOUT, sleep=.05): +def wait_for_condition(condition, msg=None, timeout=TIMEOUT, sleep=0.05): curtime = time.time() while True: if condition(): break if time.time() - curtime > timeout: - error_msg = 'Condition not reached in %s seconds' % (timeout,) + error_msg = "Condition not reached in %s seconds" % (timeout,) if msg is not None: - error_msg += '\n' + error_msg += "\n" if callable(msg): error_msg += msg() else: @@ -178,23 +178,22 @@ class IgnoreFailureError(RuntimeError): pass -#======================================================================================================================= +# ======================================================================================================================= # ReaderThread -#======================================================================================================================= +# ======================================================================================================================= class ReaderThread(threading.Thread): - - MESSAGES_TIMEOUT = 15 + MESSAGES_TIMEOUT = 10 def __init__(self, sock): threading.Thread.__init__(self) - self.name = 'Test Reader Thread' + self.name = "Test Reader Thread" try: from queue import Queue except ImportError: from Queue import Queue self.daemon = True - self._buffer = b'' + self._buffer = b"" self.sock = sock self._queue = Queue() self._kill = False @@ -211,21 +210,27 @@ def get_next_message(self, context_message, timeout=None): msg = self._queue.get(block=True, timeout=timeout) self.on_message_found(msg) except: - raise TimeoutError('No message was written in %s seconds. Error message:\n%s' % (timeout, context_message,)) + raise TimeoutError( + "No message was written in %s seconds. Error message:\n%s" + % ( + timeout, + context_message, + ) + ) else: frame = sys._getframe().f_back.f_back - frame_info = '' + frame_info = "" while frame: - if not frame.f_code.co_name.startswith('test_'): + if not frame.f_code.co_name.startswith("test_"): frame = frame.f_back continue - if frame.f_code.co_filename.endswith('debugger_unittest.py'): + if frame.f_code.co_filename.endswith("debugger_unittest.py"): frame = frame.f_back continue stack_msg = ' -- File "%s", line %s, in %s\n' % (frame.f_code.co_filename, frame.f_lineno, frame.f_code.co_name) - if 'run' == frame.f_code.co_name: + if "run" == frame.f_code.co_name: frame_info = stack_msg # Ok, found the writer thread 'run' method (show only that). break frame_info += stack_msg @@ -234,11 +239,14 @@ def get_next_message(self, context_message, timeout=None): break frame = None - sys.stdout.write('Message returned in get_next_message(): %s -- ctx: %s, asked at:\n%s\n' % (unquote_plus(unquote_plus(msg)), context_message, frame_info)) + sys.stdout.write( + "Message returned in get_next_message(): %s -- ctx: %s, asked at:\n%s\n" + % (unquote_plus(unquote_plus(msg)), context_message, frame_info) + ) if not self.accept_xml_messages: - if ' size: @@ -256,12 +264,12 @@ def _read(self, size): r = self.sock.recv(max(size - buffer_len, 1024)) if not r: - return b'' + return b"" self._buffer += r def _read_line(self): while True: - i = self._buffer.find(b'\n') + i = self._buffer.find(b"\n") if i != -1: i += 1 # Add the newline to the return ret = self._buffer[:i] @@ -270,7 +278,7 @@ def _read_line(self): else: r = self.sock.recv(1024) if not r: - return b'' + return b"" self._buffer += r def run(self): @@ -285,17 +293,23 @@ def run(self): if SHOW_WRITES_AND_READS: show_line = line - show_line = line.decode('utf-8') - - print('%s Received %s' % (self.name, show_line,)) - - if line.startswith(b'Content-Length:'): - content_len = int(line.strip().split(b':', 1)[1]) + show_line = line.decode("utf-8") + + print( + "%s Received %s" + % ( + self.name, + show_line, + ) + ) + + if line.startswith(b"Content-Length:"): + content_len = int(line.strip().split(b":", 1)[1]) continue if content_len != -1: # If we previously received a content length, read until a '\r\n'. - if line == b'\r\n': + if line == b"\r\n": json_contents = self._read(content_len) content_len = -1 @@ -304,25 +318,25 @@ def run(self): return # Finished communication. msg = json_contents - msg = msg.decode('utf-8') - print('Test Reader Thread Received %s' % (msg,)) + msg = msg.decode("utf-8") + print("Test Reader Thread Received %s" % (msg,)) self._queue.put(msg) continue else: # No content len, regular line-based protocol message (remove trailing new-line). - if line.endswith(b'\n\n'): + if line.endswith(b"\n\n"): line = line[:-2] - elif line.endswith(b'\n'): + elif line.endswith(b"\n"): line = line[:-1] - elif line.endswith(b'\r'): + elif line.endswith(b"\r"): line = line[:-1] msg = line - msg = msg.decode('utf-8') - print('Test Reader Thread Received %s' % (msg,)) + msg = msg.decode("utf-8") + print("Test Reader Thread Received %s" % (msg,)) self._queue.put(msg) except: @@ -341,8 +355,9 @@ def run(self): def do_kill(self): self._kill = True - if hasattr(self, 'sock'): + if hasattr(self, "sock"): from socket import SHUT_RDWR + try: self.sock.shutdown(SHUT_RDWR) except: @@ -351,7 +366,7 @@ def do_kill(self): self.sock.close() except: pass - delattr(self, 'sock') + delattr(self, "sock") def read_process(stream, buffer, debug_stream, stream_name, finish): @@ -360,10 +375,16 @@ def read_process(stream, buffer, debug_stream, stream_name, finish): if not line: break - line = line.decode('utf-8', errors='replace') + line = line.decode("utf-8", errors="replace") if SHOW_STDOUT: - debug_stream.write('%s: %s' % (stream_name, line,)) + debug_stream.write( + "%s: %s" + % ( + stream_name, + line, + ) + ) buffer.append(line) if finish[0]: @@ -377,17 +398,16 @@ def start_in_daemon_thread(target, args): class DebuggerRunner(object): - def __init__(self, tmpdir): if tmpdir is not None: - self.pydevd_debug_file = os.path.join(str(tmpdir), 'pydevd_debug_file_%s.txt' % (os.getpid(),)) + self.pydevd_debug_file = os.path.join(str(tmpdir), "pydevd_debug_file_%s.txt" % (os.getpid(),)) else: self.pydevd_debug_file = None def get_command_line(self): - ''' + """ Returns the base command line (i.e.: ['python.exe', '-u']) - ''' + """ raise NotImplementedError def add_command_line_args(self, args, dap=False): @@ -402,23 +422,23 @@ def add_command_line_args(self, args, dap=False): if not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON: # i.e.: in frame-eval mode we support native threads, whereas # on other cases we need the qt monkeypatch. - ret += ['--qt-support'] + ret += ["--qt-support"] ret += [ - '--client', + "--client", localhost, - '--port', + "--port", str(port), ] if dap: - ret += ['--debug-mode', 'debugpy-dap'] - ret += ['--json-dap-http'] + ret += ["--debug-mode", "debugpy-dap"] + ret += ["--json-dap-http"] if writer.IS_MODULE: - ret += ['--module'] + ret += ["--module"] - ret += ['--file'] + writer.get_command_line_args() + ret += ["--file"] + writer.get_command_line_args() ret = writer.update_command_line_args(ret) # Provide a hook for the writer return args + ret @@ -432,7 +452,7 @@ def check_case(self, writer_class, wait_for_port=True, wait_for_initialization=T try: writer.start() if wait_for_port: - wait_for_condition(lambda: hasattr(writer, 'port')) + wait_for_condition(lambda: hasattr(writer, "port")) self.writer = writer args = self.get_command_line() @@ -440,7 +460,7 @@ def check_case(self, writer_class, wait_for_port=True, wait_for_initialization=T args = self.add_command_line_args(args, dap=dap) if SHOW_OTHER_DEBUG_INFO: - print('executing: %s' % (' '.join(args),)) + print("executing: %s" % (" ".join(args),)) with self.run_process(args, writer) as dct_with_stdout_stder: try: @@ -451,26 +471,29 @@ def check_case(self, writer_class, wait_for_port=True, wait_for_initialization=T elif wait_for_port: wait_for_condition(lambda: writer.finished_initialization) except TimeoutError: - sys.stderr.write('Timed out waiting for initialization\n') - sys.stderr.write('stdout:\n%s\n\nstderr:\n%s\n' % ( - ''.join(dct_with_stdout_stder['stdout']), - ''.join(dct_with_stdout_stder['stderr']), - )) + sys.stderr.write("Timed out waiting for initialization\n") + sys.stderr.write( + "stdout:\n%s\n\nstderr:\n%s\n" + % ( + "".join(dct_with_stdout_stder["stdout"]), + "".join(dct_with_stdout_stder["stderr"]), + ) + ) raise finally: - writer.get_stdout = lambda: ''.join(dct_with_stdout_stder['stdout']) - writer.get_stderr = lambda: ''.join(dct_with_stdout_stder['stderr']) + writer.get_stdout = lambda: "".join(dct_with_stdout_stder["stdout"]) + writer.get_stderr = lambda: "".join(dct_with_stdout_stder["stderr"]) yield writer finally: writer.do_kill() writer.log = [] - stdout = dct_with_stdout_stder['stdout'] - stderr = dct_with_stdout_stder['stderr'] - writer.additional_output_checks(''.join(stdout), ''.join(stderr)) + stdout = dct_with_stdout_stder["stdout"] + stderr = dct_with_stdout_stder["stderr"] + writer.additional_output_checks("".join(stdout), "".join(stderr)) except IgnoreFailureError: - sys.stderr.write('Test finished with ignored failure.\n') + sys.stderr.write("Test finished with ignored failure.\n") return def create_process(self, args, writer): @@ -479,15 +502,15 @@ def create_process(self, args, writer): env = os.environ.copy() if self.pydevd_debug_file: - env['PYDEVD_DEBUG'] = 'True' - env['PYDEVD_DEBUG_FILE'] = self.pydevd_debug_file - print('Logging to: %s' % (self.pydevd_debug_file,)) + env["PYDEVD_DEBUG"] = "True" + env["PYDEVD_DEBUG_FILE"] = self.pydevd_debug_file + print("Logging to: %s" % (self.pydevd_debug_file,)) process = subprocess.Popen( args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, - cwd=writer.get_cwd() if writer is not None else '.', + cwd=writer.get_cwd() if writer is not None else ".", env=env, ) return process @@ -503,11 +526,11 @@ def run_process(self, args, writer): fail_with_message = False try: - start_in_daemon_thread(read_process, (process.stdout, stdout, sys.stdout, 'stdout', finish)) - start_in_daemon_thread(read_process, (process.stderr, stderr, sys.stderr, 'stderr', finish)) + start_in_daemon_thread(read_process, (process.stdout, stdout, sys.stdout, "stdout", finish)) + start_in_daemon_thread(read_process, (process.stderr, stderr, sys.stderr, "stderr", finish)) if SHOW_OTHER_DEBUG_INFO: - print('Both processes started') + print("Both processes started") # polls can fail (because the process may finish and the thread still not -- so, we give it some more chances to # finish successfully). @@ -515,21 +538,21 @@ def run_process(self, args, writer): shown_intermediate = False dumped_threads = False - dct_with_stdout_stder['stdout'] = stdout - dct_with_stdout_stder['stderr'] = stderr + dct_with_stdout_stder["stdout"] = stdout + dct_with_stdout_stder["stderr"] = stderr try: yield dct_with_stdout_stder except: fail_with_message = True # Let's print the actuayl exception here (it doesn't appear properly on Python 2 and # on Python 3 it's hard to find because pytest output is too verbose). - sys.stderr.write('***********\n') - sys.stderr.write('***********\n') - sys.stderr.write('***********\n') + sys.stderr.write("***********\n") + sys.stderr.write("***********\n") + sys.stderr.write("***********\n") traceback.print_exc() - sys.stderr.write('***********\n') - sys.stderr.write('***********\n') - sys.stderr.write('***********\n') + sys.stderr.write("***********\n") + sys.stderr.write("***********\n") + sys.stderr.write("***********\n") raise if not writer.finished_ok: @@ -537,19 +560,23 @@ def run_process(self, args, writer): "The thread that was doing the tests didn't finish successfully (writer.finished_ok = True not set).", stdout, stderr, - writer + writer, ) while True: if process.poll() is not None: - if writer.EXPECTED_RETURNCODE != 'any': + if writer.EXPECTED_RETURNCODE != "any": expected_returncode = writer.EXPECTED_RETURNCODE if not isinstance(expected_returncode, (list, tuple)): expected_returncode = (expected_returncode,) if process.returncode not in expected_returncode: - self.fail_with_message('Expected process.returncode to be %s. Found: %s' % ( - writer.EXPECTED_RETURNCODE, process.returncode), stdout, stderr, writer) + self.fail_with_message( + "Expected process.returncode to be %s. Found: %s" % (writer.EXPECTED_RETURNCODE, process.returncode), + stdout, + stderr, + writer, + ) break else: if writer is not None: @@ -557,11 +584,14 @@ def run_process(self, args, writer): process.kill() continue - if not shown_intermediate and (time.time() - initial_time > (TIMEOUT / 3.)): # 1/3 of timeout - print('Warning: writer thread exited and process still did not (%.2f seconds elapsed).' % (time.time() - initial_time,)) + if not shown_intermediate and (time.time() - initial_time > (TIMEOUT / 3.0)): # 1/3 of timeout + print( + "Warning: writer thread exited and process still did not (%.2f seconds elapsed)." + % (time.time() - initial_time,) + ) shown_intermediate = True - if time.time() - initial_time > ((TIMEOUT / 3.) * 2.): # 2/3 of timeout + if time.time() - initial_time > ((TIMEOUT / 3.0) * 2.0): # 2/3 of timeout if not dumped_threads: dumped_threads = True # It still didn't finish. Ask for a thread dump @@ -573,33 +603,37 @@ def run_process(self, args, writer): if time.time() - initial_time > TIMEOUT: # timed out process.kill() - time.sleep(.2) + time.sleep(0.2) self.fail_with_message( - "The other process should've exited but still didn't (%.2f seconds timeout for process to exit)." % (time.time() - initial_time,), - stdout, stderr, writer + "The other process should've exited but still didn't (%.2f seconds timeout for process to exit)." + % (time.time() - initial_time,), + stdout, + stderr, + writer, ) - time.sleep(.2) + time.sleep(0.2) if writer is not None: if not writer.FORCE_KILL_PROCESS_WHEN_FINISHED_OK: if stdout is None: self.fail_with_message( - "The other process may still be running -- and didn't give any output.", stdout, stderr, writer) + "The other process may still be running -- and didn't give any output.", stdout, stderr, writer + ) check = 0 while not writer.check_test_suceeded_msg(stdout, stderr): check += 1 if check == 50: self.fail_with_message("TEST SUCEEDED not found.", stdout, stderr, writer) - time.sleep(.1) + time.sleep(0.1) except TimeoutError: - msg = 'TimeoutError' + msg = "TimeoutError" try: writer.write_dump_threads() except: - msg += ' (note: error trying to dump threads on timeout).' - time.sleep(.2) + msg += " (note: error trying to dump threads on timeout)." + time.sleep(0.2) self.fail_with_message(msg, stdout, stderr, writer) except Exception as e: if fail_with_message: @@ -615,16 +649,23 @@ def run_process(self, args, writer): finish[0] = True def fail_with_message(self, msg, stdout, stderr, writerThread): - log_contents = '' - for f in pydev_log.list_log_files(self.pydevd_debug_file): - if os.path.exists(f): - with open(f, 'r') as stream: - log_contents += '\n-------------------- %s ------------------\n\n' % (f,) - log_contents += stream.read() - msg += ("\n\n===========================\nStdout: \n" + ''.join(stdout) + - "\n\n===========================\nStderr:" + ''.join(stderr) + - "\n\n===========================\nWriter Log:\n" + '\n'.join(getattr(writerThread, 'log', [])) + - "\n\n===========================\nLog:" + log_contents) + log_contents = "" + if self.pydevd_debug_file: + for f in pydev_log.list_log_files(self.pydevd_debug_file): + if os.path.exists(f): + with open(f, "r") as stream: + log_contents += "\n-------------------- %s ------------------\n\n" % (f,) + log_contents += stream.read() + msg += ( + "\n\n===========================\nStdout: \n" + + "".join(stdout) + + "\n\n===========================\nStderr:" + + "".join(stderr) + + "\n\n===========================\nWriter Log:\n" + + "\n".join(getattr(writerThread, "log", [])) + + "\n\n===========================\nLog:" + + log_contents + ) if IS_JYTHON: # It seems we have some spurious errors which make Jython tests flaky (on a test run it's @@ -646,16 +687,15 @@ def fail_with_message(self, msg, stdout, stderr, writerThread): # # So, ignore errors in this situation. - if 'error: [Errno -1] Unmapped exception: java.lang.NullPointerException' in msg: + if "error: [Errno -1] Unmapped exception: java.lang.NullPointerException" in msg: raise IgnoreFailureError() raise AssertionError(msg) -#======================================================================================================================= +# ======================================================================================================================= # AbstractWriterThread -#======================================================================================================================= +# ======================================================================================================================= class AbstractWriterThread(threading.Thread): - FORCE_KILL_PROCESS_WHEN_FINISHED_OK = False IS_MODULE = False TEST_FILE = None @@ -674,65 +714,68 @@ def run(self): self.start_socket() def check_test_suceeded_msg(self, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stdout) + return "TEST SUCEEDED" in "".join(stdout) def update_command_line_args(self, args): return args def _ignore_stderr_line(self, line): - if line.startswith(( - 'debugger: ', - '>>', - '<<', - 'warning: Debugger speedups', - 'pydev debugger: New process is launching', - 'pydev debugger: To debug that process', - '*** Multiprocess', - )): + if line.startswith( + ( + "debugger: ", + ">>", + "<<", + "warning: Debugger speedups", + "pydev debugger: New process is launching", + "pydev debugger: To debug that process", + "*** Multiprocess", + "WARNING: This is a development server. Do not use it in a production deployment", + "Press CTRL+C to quit", + ) + ): return True for expected in ( - 'PyDev console: using IPython', - 'Attempting to work in a virtualenv. If you encounter problems, please', - 'Unable to create basic Accelerated OpenGL', # Issue loading qt5 - 'Core Image is now using the software OpenGL', # Issue loading qt5 - 'XDG_RUNTIME_DIR not set', # Issue loading qt5 - ): + "PyDev console: using IPython", + "Attempting to work in a virtualenv. If you encounter problems, please", + "Unable to create basic Accelerated OpenGL", # Issue loading qt5 + "Core Image is now using the software OpenGL", # Issue loading qt5 + "XDG_RUNTIME_DIR not set", # Issue loading qt5 + ): if expected in line: return True - if re.match(r'^(\d+)\t(\d)+', line): + if re.match(r"^(\d+)\t(\d)+", line): return True if IS_JYTHON: for expected in ( - 'org.python.netty.util.concurrent.DefaultPromise', - 'org.python.netty.util.concurrent.SingleThreadEventExecutor', - 'Failed to submit a listener notification task. Event loop shut down?', - 'java.util.concurrent.RejectedExecutionException', - 'An event executor terminated with non-empty task', - 'java.lang.UnsupportedOperationException', + "org.python.netty.util.concurrent.DefaultPromise", + "org.python.netty.util.concurrent.SingleThreadEventExecutor", + "Failed to submit a listener notification task. Event loop shut down?", + "java.util.concurrent.RejectedExecutionException", + "An event executor terminated with non-empty task", + "java.lang.UnsupportedOperationException", "RuntimeWarning: Parent module '_pydevd_bundle' not found while handling absolute import", - 'from _pydevd_bundle.pydevd_additional_thread_info_regular import _current_frames', - 'from _pydevd_bundle.pydevd_additional_thread_info import _current_frames', - 'import org.python.core as PyCore #@UnresolvedImport', - 'from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info', + "from _pydevd_bundle.pydevd_additional_thread_info_regular import _current_frames", + "from _pydevd_bundle.pydevd_additional_thread_info import _current_frames", + "import org.python.core as PyCore #@UnresolvedImport", + "from _pydevd_bundle.pydevd_additional_thread_info import set_additional_thread_info", "RuntimeWarning: Parent module '_pydevd_bundle._debug_adapter' not found while handling absolute import", - 'import json', - + "import json", # Issues with Jython and Java 9. - 'WARNING: Illegal reflective access by org.python.core.PySystemState', - 'WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState', - 'WARNING: An illegal reflective access operation has occurred', - 'WARNING: Illegal reflective access by jnr.posix.JavaLibCHelper', - 'WARNING: Please consider reporting this to the maintainers of jnr.posix.JavaLibCHelper', - 'WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations', - 'WARNING: All illegal access operations will be denied in a future release', - ): + "WARNING: Illegal reflective access by org.python.core.PySystemState", + "WARNING: Please consider reporting this to the maintainers of org.python.core.PySystemState", + "WARNING: An illegal reflective access operation has occurred", + "WARNING: Illegal reflective access by jnr.posix.JavaLibCHelper", + "WARNING: Please consider reporting this to the maintainers of jnr.posix.JavaLibCHelper", + "WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations", + "WARNING: All illegal access operations will be denied in a future release", + ): if expected in line: return True - if line.strip().startswith('at '): + if line.strip().startswith("at "): return True return False @@ -747,8 +790,9 @@ def additional_output_checks(self, stdout, stderr): lines_with_error.append(line) if lines_with_error: - raise AssertionError('Did not expect to have line(s) in stderr:\n\n%s\n\nFull stderr:\n\n%s' % ( - '\n'.join(lines_with_error), stderr)) + raise AssertionError( + "Did not expect to have line(s) in stderr:\n\n%s\n\nFull stderr:\n\n%s" % ("\n".join(lines_with_error), stderr) + ) def get_environ(self): return None @@ -756,24 +800,24 @@ def get_environ(self): def get_pydevd_file(self): dirname = os.path.dirname(__file__) dirname = os.path.dirname(dirname) - return os.path.abspath(os.path.join(dirname, 'pydevd.py')) + return os.path.abspath(os.path.join(dirname, "pydevd.py")) def get_pydevconsole_file(self): dirname = os.path.dirname(__file__) dirname = os.path.dirname(dirname) - return os.path.abspath(os.path.join(dirname, 'pydevconsole.py')) + return os.path.abspath(os.path.join(dirname, "pydevconsole.py")) def get_line_index_with_content(self, line_content, filename=None): - ''' + """ :return the line index which has the given content (1-based). - ''' + """ if filename is None: filename = self.TEST_FILE - with open(filename, 'r') as stream: + with open(filename, "r") as stream: for i_line, line in enumerate(stream): if line_content in line: return i_line + 1 - raise AssertionError('Did not find: %s in %s' % (line_content, self.TEST_FILE)) + raise AssertionError("Did not find: %s in %s" % (line_content, self.TEST_FILE)) def get_cwd(self): return os.path.dirname(self.get_pydevd_file()) @@ -782,57 +826,71 @@ def get_command_line_args(self): return [self.TEST_FILE] def do_kill(self): - if hasattr(self, 'server_socket'): + if hasattr(self, "server_socket"): self.server_socket.close() - delattr(self, 'server_socket') + delattr(self, "server_socket") - if hasattr(self, 'reader_thread'): + if hasattr(self, "reader_thread"): # if it's not created, it's not there... self.reader_thread.do_kill() - delattr(self, 'reader_thread') + delattr(self, "reader_thread") - if hasattr(self, 'sock'): + if hasattr(self, "sock"): self.sock.close() - delattr(self, 'sock') + delattr(self, "sock") - if hasattr(self, 'port'): - delattr(self, 'port') + if hasattr(self, "port"): + delattr(self, "port") def write_with_content_len(self, msg): - self.log.append('write: %s' % (msg,)) + self.log.append("write: %s" % (msg,)) if SHOW_WRITES_AND_READS: - print('Test Writer Thread Written %s' % (msg,)) + print("Test Writer Thread Written %s" % (msg,)) - if not hasattr(self, 'sock'): - print('%s.sock not available when sending: %s' % (self, msg)) + if not hasattr(self, "sock"): + print("%s.sock not available when sending: %s" % (self, msg)) return if not isinstance(msg, bytes): - msg = msg.encode('utf-8') + msg = msg.encode("utf-8") - self.sock.sendall((u'Content-Length: %s\r\n\r\n' % len(msg)).encode('ascii')) + self.sock.sendall(("Content-Length: %s\r\n\r\n" % len(msg)).encode("ascii")) self.sock.sendall(msg) - _WRITE_LOG_PREFIX = 'write: ' + _WRITE_LOG_PREFIX = "write: " def write(self, s): from _pydevd_bundle.pydevd_comm import ID_TO_MEANING - meaning = ID_TO_MEANING.get(re.search(r'\d+', s).group(), '') - if meaning: - meaning += ': ' - self.log.append(self._WRITE_LOG_PREFIX + '%s%s' % (meaning, s,)) + meaning = ID_TO_MEANING.get(re.search(r"\d+", s).group(), "") + if meaning: + meaning += ": " + + self.log.append( + self._WRITE_LOG_PREFIX + + "%s%s" + % ( + meaning, + s, + ) + ) if SHOW_WRITES_AND_READS: - print('Test Writer Thread Written %s%s' % (meaning, s,)) - msg = s + '\n' + print( + "Test Writer Thread Written %s%s" + % ( + meaning, + s, + ) + ) + msg = s + "\n" - if not hasattr(self, 'sock'): - print('%s.sock not available when sending: %s' % (self, msg)) + if not hasattr(self, "sock"): + print("%s.sock not available when sending: %s" % (self, msg)) return - msg = msg.encode('utf-8') + msg = msg.encode("utf-8") self.sock.send(msg) @@ -840,10 +898,11 @@ def get_next_message(self, context_message, timeout=None): return self.reader_thread.get_next_message(context_message, timeout=timeout) def start_socket(self, port=None): - assert not hasattr(self, 'port'), 'Socket already initialized.' + assert not hasattr(self, "port"), "Socket already initialized." from _pydev_bundle.pydev_localhost import get_socket_name + if SHOW_WRITES_AND_READS: - print('start_socket') + print("start_socket") self._sequence = -1 if port is None: @@ -856,16 +915,16 @@ def start_socket(self, port=None): self.port = socket_name[1] server_socket.listen(1) if SHOW_WRITES_AND_READS: - print('Waiting in socket.accept()') + print("Waiting in socket.accept()") self.server_socket = server_socket new_socket, addr = server_socket.accept() if SHOW_WRITES_AND_READS: - print('Test Writer Thread Socket:', new_socket, addr) + print("Test Writer Thread Socket:", new_socket, addr) self._set_socket(new_socket) def _set_socket(self, new_socket): - curr_socket = getattr(self, 'sock', None) + curr_socket = getattr(self, "sock", None) if curr_socket: try: curr_socket.shutdown(socket.SHUT_WR) @@ -882,7 +941,7 @@ def _set_socket(self, new_socket): # initial command is always the version self.write_version() - self.log.append('start_socket') + self.log.append("start_socket") self.finished_initialization = True def start_socket_client(self, host, port): @@ -898,6 +957,7 @@ def start_socket_client(self, host, port): # and closes the connection after 5 failed ping (TCP_KEEPCNT), or 15 seconds try: from socket import IPPROTO_TCP, SO_KEEPALIVE, TCP_KEEPIDLE, TCP_KEEPINTVL, TCP_KEEPCNT + s.setsockopt(socket.SOL_SOCKET, SO_KEEPALIVE, 1) s.setsockopt(IPPROTO_TCP, TCP_KEEPIDLE, 1) s.setsockopt(IPPROTO_TCP, TCP_KEEPINTVL, 3) @@ -906,14 +966,14 @@ def start_socket_client(self, host, port): pass # May not be available everywhere. # 10 seconds default timeout - timeout = int(os.environ.get('PYDEVD_CONNECT_TIMEOUT', 10)) + timeout = int(os.environ.get("PYDEVD_CONNECT_TIMEOUT", 10)) s.settimeout(timeout) for _i in range(20): try: s.connect((host, port)) break except: - time.sleep(.5) # We may have to wait a bit more and retry (especially on PyPy). + time.sleep(0.5) # We may have to wait a bit more and retry (especially on PyPy). s.settimeout(None) # no timeout after connected if SHOW_WRITES_AND_READS: print("Connected.") @@ -930,9 +990,9 @@ def next_seq(self): def wait_for_new_thread(self): # wait for hit breakpoint - last = '' + last = "" while not ' splitted = last.split('"') @@ -943,14 +1003,14 @@ def wait_for_output(self): # Something as: # while True: - msg = self.get_next_message('wait_output') + msg = self.get_next_message("wait_output") if "' in last: - last = self.get_next_message('wait_for_get_next_statement_targets') + last = "" + while not "" in last: + last = self.get_next_message("wait_for_get_next_statement_targets") matches = re.finditer(r"(([0-9]*)<\/line>)", last, re.IGNORECASE) lines = [] @@ -1045,9 +1104,9 @@ def wait_for_get_next_statement_targets(self): def wait_for_custom_operation(self, expected): # wait for custom operation response, the response is double encoded expected_encoded = quote(quote_plus(expected)) - last = '' + last = "" while not expected_encoded in last: - last = self.get_next_message('wait_for_custom_operation. Expected (encoded): %s' % (expected_encoded,)) + last = self.get_next_message("wait_for_custom_operation. Expected (encoded): %s" % (expected_encoded,)) return True @@ -1075,14 +1134,22 @@ def wait_for_multiple_vars(self, expected_vars): while True: try: - last = self.get_next_message('wait_for_multiple_vars: %s' % (expected_vars,)) + last = self.get_next_message("wait_for_multiple_vars: %s" % (expected_vars,)) except: missing = [] for v in expected_vars: if v not in all_found: missing.append(v) - raise ValueError('Not Found:\n%s\nNot found messages: %s\nFound messages: %s\nExpected messages: %s\nIgnored messages:\n%s' % ( - '\n'.join(str(x) for x in missing), len(missing), len(all_found), len(expected_vars), '\n'.join(str(x) for x in ignored))) + raise ValueError( + "Not Found:\n%s\nNot found messages: %s\nFound messages: %s\nExpected messages: %s\nIgnored messages:\n%s" + % ( + "\n".join(str(x) for x in missing), + len(missing), + len(all_found), + len(expected_vars), + "\n".join(str(x) for x in ignored), + ) + ) was_message_used = False new_expected = [] @@ -1118,7 +1185,7 @@ def wait_for_multiple_vars(self, expected_vars): def write_make_initial_run(self): self.write("101\t%s\t" % self.next_seq()) - self.log.append('write_make_initial_run') + self.log.append("write_make_initial_run") def write_set_protocol(self, protocol): self.write("%s\t%s\t%s" % (CMD_SET_PROTOCOL, self.next_seq(), protocol)) @@ -1127,11 +1194,12 @@ def write_authenticate(self, access_token, client_access_token): msg = "%s\t%s\t%s" % (CMD_AUTHENTICATE, self.next_seq(), access_token) self.write(msg) - self.wait_for_message(lambda msg:client_access_token in msg, expect_xml=False) + self.wait_for_message(lambda msg: client_access_token in msg, expect_xml=False) def write_version(self): from _pydevd_bundle.pydevd_constants import IS_WINDOWS - self.write("%s\t%s\t1.0\t%s\tID" % (CMD_VERSION, self.next_seq(), 'WINDOWS' if IS_WINDOWS else 'UNIX')) + + self.write("%s\t%s\t1.0\t%s\tID" % (CMD_VERSION, self.next_seq(), "WINDOWS" if IS_WINDOWS else "UNIX")) def get_main_filename(self): return self.TEST_FILE @@ -1139,40 +1207,60 @@ def get_main_filename(self): def write_show_return_vars(self, show=1): self.write("%s\t%s\tCMD_SHOW_RETURN_VALUES\t%s" % (CMD_SHOW_RETURN_VALUES, self.next_seq(), show)) - def write_add_breakpoint(self, line, func='None', filename=None, hit_condition=None, is_logpoint=False, suspend_policy=None, condition=None): - ''' + def write_add_breakpoint( + self, line, func="None", filename=None, hit_condition=None, is_logpoint=False, suspend_policy=None, condition=None + ): + """ :param line: starts at 1 :param func: if None, may hit in any context, empty string only top level, otherwise must be method name. - ''' + """ if filename is None: filename = self.get_main_filename() breakpoint_id = self.next_breakpoint_id() if hit_condition is None and not is_logpoint and suspend_policy is None and condition is None: # Format kept for backward compatibility tests - self.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" % ( - CMD_SET_BREAK, self.next_seq(), breakpoint_id, 'python-line', filename, line, func)) + self.write( + "%s\t%s\t%s\t%s\t%s\t%s\t%s\tNone\tNone" + % (CMD_SET_BREAK, self.next_seq(), breakpoint_id, "python-line", filename, line, func) + ) else: # Format: breakpoint_id, type, file, line, func_name, condition, expression, hit_condition, is_logpoint, suspend_policy - self.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\tNone\t%s\t%s\t%s" % ( - CMD_SET_BREAK, self.next_seq(), breakpoint_id, 'python-line', filename, line, func, condition, hit_condition, is_logpoint, suspend_policy)) - self.log.append('write_add_breakpoint: %s line: %s func: %s' % (breakpoint_id, line, func)) + self.write( + "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\tNone\t%s\t%s\t%s" + % ( + CMD_SET_BREAK, + self.next_seq(), + breakpoint_id, + "python-line", + filename, + line, + func, + condition, + hit_condition, + is_logpoint, + suspend_policy, + ) + ) + self.log.append("write_add_breakpoint: %s line: %s func: %s" % (breakpoint_id, line, func)) return breakpoint_id def write_multi_threads_single_notification(self, multi_threads_single_notification): - self.write_json_config(dict( - multi_threads_single_notification=multi_threads_single_notification, - )) + self.write_json_config( + dict( + multi_threads_single_notification=multi_threads_single_notification, + ) + ) def write_suspend_on_breakpoint_exception(self, skip_suspend_on_breakpoint_exception, skip_print_breakpoint_exception): - self.write_json_config(dict( - skip_suspend_on_breakpoint_exception=skip_suspend_on_breakpoint_exception, - skip_print_breakpoint_exception=skip_print_breakpoint_exception - )) + self.write_json_config( + dict( + skip_suspend_on_breakpoint_exception=skip_suspend_on_breakpoint_exception, + skip_print_breakpoint_exception=skip_print_breakpoint_exception, + ) + ) def write_json_config(self, config_dict): - self.write("%s\t%s\t%s" % (CMD_PYDEVD_JSON_CONFIG, self.next_seq(), - json.dumps(config_dict) - )) + self.write("%s\t%s\t%s" % (CMD_PYDEVD_JSON_CONFIG, self.next_seq(), json.dumps(config_dict))) def write_stop_on_start(self, stop=True): self.write("%s\t%s\t%s" % (CMD_STOP_ON_START, self.next_seq(), stop)) @@ -1182,132 +1270,256 @@ def write_dump_threads(self): def write_add_exception_breakpoint(self, exception): self.write("%s\t%s\t%s" % (CMD_ADD_EXCEPTION_BREAK, self.next_seq(), exception)) - self.log.append('write_add_exception_breakpoint: %s' % (exception,)) + self.log.append("write_add_exception_breakpoint: %s" % (exception,)) def write_get_current_exception(self, thread_id): self.write("%s\t%s\t%s" % (CMD_GET_EXCEPTION_DETAILS, self.next_seq(), thread_id)) def write_set_py_exception_globals( - self, - break_on_uncaught, - break_on_caught, - skip_on_exceptions_thrown_in_same_context, - ignore_exceptions_thrown_in_lines_with_ignore_exception, - ignore_libraries, - exceptions=() - ): + self, + break_on_uncaught, + break_on_caught, + skip_on_exceptions_thrown_in_same_context, + ignore_exceptions_thrown_in_lines_with_ignore_exception, + ignore_libraries, + exceptions=(), + ): # Only set the globals, others - self.write("131\t%s\t%s" % (self.next_seq(), '%s;%s;%s;%s;%s;%s' % ( - 'true' if break_on_uncaught else 'false', - 'true' if break_on_caught else 'false', - 'true' if skip_on_exceptions_thrown_in_same_context else 'false', - 'true' if ignore_exceptions_thrown_in_lines_with_ignore_exception else 'false', - 'true' if ignore_libraries else 'false', - ';'.join(exceptions) - ))) - self.log.append('write_set_py_exception_globals') + self.write( + "131\t%s\t%s" + % ( + self.next_seq(), + "%s;%s;%s;%s;%s;%s" + % ( + "true" if break_on_uncaught else "false", + "true" if break_on_caught else "false", + "true" if skip_on_exceptions_thrown_in_same_context else "false", + "true" if ignore_exceptions_thrown_in_lines_with_ignore_exception else "false", + "true" if ignore_libraries else "false", + ";".join(exceptions), + ), + ) + ) + self.log.append("write_set_py_exception_globals") def write_start_redirect(self): - self.write("%s\t%s\t%s" % (CMD_REDIRECT_OUTPUT, self.next_seq(), 'STDERR STDOUT')) + self.write("%s\t%s\t%s" % (CMD_REDIRECT_OUTPUT, self.next_seq(), "STDERR STDOUT")) def write_set_project_roots(self, project_roots): - self.write("%s\t%s\t%s" % (CMD_SET_PROJECT_ROOTS, self.next_seq(), '\t'.join(str(x) for x in project_roots))) + self.write("%s\t%s\t%s" % (CMD_SET_PROJECT_ROOTS, self.next_seq(), "\t".join(str(x) for x in project_roots))) def write_add_exception_breakpoint_with_policy( - self, exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries): - self.write("%s\t%s\t%s" % (CMD_ADD_EXCEPTION_BREAK, self.next_seq(), '\t'.join(str(x) for x in [ - exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries]))) - self.log.append('write_add_exception_breakpoint: %s' % (exception,)) + self, exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries + ): + self.write( + "%s\t%s\t%s" + % ( + CMD_ADD_EXCEPTION_BREAK, + self.next_seq(), + "\t".join(str(x) for x in [exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries]), + ) + ) + self.log.append("write_add_exception_breakpoint: %s" % (exception,)) def write_remove_exception_breakpoint(self, exception): - self.write('%s\t%s\t%s' % (CMD_REMOVE_EXCEPTION_BREAK, self.next_seq(), exception)) + self.write("%s\t%s\t%s" % (CMD_REMOVE_EXCEPTION_BREAK, self.next_seq(), exception)) def write_remove_breakpoint(self, breakpoint_id): - self.write("%s\t%s\t%s\t%s\t%s" % ( - CMD_REMOVE_BREAK, self.next_seq(), 'python-line', self.get_main_filename(), breakpoint_id)) + self.write("%s\t%s\t%s\t%s\t%s" % (CMD_REMOVE_BREAK, self.next_seq(), "python-line", self.get_main_filename(), breakpoint_id)) def write_change_variable(self, thread_id, frame_id, varname, value): - self.write("%s\t%s\t%s\t%s\t%s\t%s\t%s" % ( - CMD_CHANGE_VARIABLE, self.next_seq(), thread_id, frame_id, 'FRAME', varname, value)) + self.write("%s\t%s\t%s\t%s\t%s\t%s\t%s" % (CMD_CHANGE_VARIABLE, self.next_seq(), thread_id, frame_id, "FRAME", varname, value)) def write_get_frame(self, thread_id, frame_id): self.write("%s\t%s\t%s\t%s\tFRAME" % (CMD_GET_FRAME, self.next_seq(), thread_id, frame_id)) - self.log.append('write_get_frame') + self.log.append("write_get_frame") def write_get_variable(self, thread_id, frame_id, var_attrs): self.write("%s\t%s\t%s\t%s\tFRAME\t%s" % (CMD_GET_VARIABLE, self.next_seq(), thread_id, frame_id, var_attrs)) def write_step_over(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_OVER, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_OVER, + self.next_seq(), + thread_id, + ) + ) def write_step_in(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_INTO, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_INTO, + self.next_seq(), + thread_id, + ) + ) def write_step_in_my_code(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_INTO_MY_CODE, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_INTO_MY_CODE, + self.next_seq(), + thread_id, + ) + ) def write_step_return(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_RETURN, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_RETURN, + self.next_seq(), + thread_id, + ) + ) def write_step_return_my_code(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_RETURN_MY_CODE, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_RETURN_MY_CODE, + self.next_seq(), + thread_id, + ) + ) def write_step_over_my_code(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_STEP_OVER_MY_CODE, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_STEP_OVER_MY_CODE, + self.next_seq(), + thread_id, + ) + ) def write_suspend_thread(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_THREAD_SUSPEND, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_THREAD_SUSPEND, + self.next_seq(), + thread_id, + ) + ) def write_reload(self, module_name): - self.log.append('write_reload') - self.write("%s\t%s\t%s" % (CMD_RELOAD_CODE, self.next_seq(), module_name,)) + self.log.append("write_reload") + self.write( + "%s\t%s\t%s" + % ( + CMD_RELOAD_CODE, + self.next_seq(), + module_name, + ) + ) def write_run_thread(self, thread_id): - self.log.append('write_run_thread') - self.write("%s\t%s\t%s" % (CMD_THREAD_RUN, self.next_seq(), thread_id,)) + self.log.append("write_run_thread") + self.write( + "%s\t%s\t%s" + % ( + CMD_THREAD_RUN, + self.next_seq(), + thread_id, + ) + ) def write_get_thread_stack(self, thread_id): - self.log.append('write_get_thread_stack') - self.write("%s\t%s\t%s" % (CMD_GET_THREAD_STACK, self.next_seq(), thread_id,)) + self.log.append("write_get_thread_stack") + self.write( + "%s\t%s\t%s" + % ( + CMD_GET_THREAD_STACK, + self.next_seq(), + thread_id, + ) + ) def write_load_source(self, filename): - self.log.append('write_load_source') - self.write("%s\t%s\t%s" % (CMD_LOAD_SOURCE, self.next_seq(), filename,)) + self.log.append("write_load_source") + self.write( + "%s\t%s\t%s" + % ( + CMD_LOAD_SOURCE, + self.next_seq(), + filename, + ) + ) def write_load_source_from_frame_id(self, frame_id): from _pydevd_bundle.pydevd_comm_constants import CMD_LOAD_SOURCE_FROM_FRAME_ID - self.log.append('write_load_source_from_frame_id') - self.write("%s\t%s\t%s" % (CMD_LOAD_SOURCE_FROM_FRAME_ID, self.next_seq(), frame_id,)) + + self.log.append("write_load_source_from_frame_id") + self.write( + "%s\t%s\t%s" + % ( + CMD_LOAD_SOURCE_FROM_FRAME_ID, + self.next_seq(), + frame_id, + ) + ) def write_kill_thread(self, thread_id): - self.write("%s\t%s\t%s" % (CMD_THREAD_KILL, self.next_seq(), thread_id,)) + self.write( + "%s\t%s\t%s" + % ( + CMD_THREAD_KILL, + self.next_seq(), + thread_id, + ) + ) def write_set_next_statement(self, thread_id, line, func_name): - self.write("%s\t%s\t%s\t%s\t%s" % (CMD_SET_NEXT_STATEMENT, self.next_seq(), thread_id, line, func_name,)) + self.write( + "%s\t%s\t%s\t%s\t%s" + % ( + CMD_SET_NEXT_STATEMENT, + self.next_seq(), + thread_id, + line, + func_name, + ) + ) def write_smart_step_into(self, thread_id, line, func_name): - self.write("%s\t%s\t%s\t%s\t%s" % (CMD_SMART_STEP_INTO, self.next_seq(), thread_id, line, func_name,)) + self.write( + "%s\t%s\t%s\t%s\t%s" + % ( + CMD_SMART_STEP_INTO, + self.next_seq(), + thread_id, + line, + func_name, + ) + ) def write_debug_console_expression(self, locator): self.write("%s\t%s\t%s" % (CMD_EVALUATE_CONSOLE_EXPRESSION, self.next_seq(), locator)) def write_custom_operation(self, locator, style, codeOrFile, operation_fn_name): - self.write("%s\t%s\t%s||%s\t%s\t%s" % ( - CMD_RUN_CUSTOM_OPERATION, self.next_seq(), locator, style, quote_plus(codeOrFile), operation_fn_name)) + self.write( + "%s\t%s\t%s||%s\t%s\t%s" + % (CMD_RUN_CUSTOM_OPERATION, self.next_seq(), locator, style, quote_plus(codeOrFile), operation_fn_name) + ) def write_evaluate_expression(self, locator, expression): self.write("%s\t%s\t%s\t%s\t1" % (CMD_EVALUATE_EXPRESSION, self.next_seq(), locator, expression)) def write_enable_dont_trace(self, enable): if enable: - enable = 'true' + enable = "true" else: - enable = 'false' + enable = "false" self.write("%s\t%s\t%s" % (CMD_ENABLE_DONT_TRACE, self.next_seq(), enable)) def write_get_next_statement_targets(self, thread_id, frame_id): self.write("201\t%s\t%s\t%s" % (self.next_seq(), thread_id, frame_id)) - self.log.append('write_get_next_statement_targets') + self.log.append("write_get_next_statement_targets") def write_list_threads(self): seq = self.next_seq() @@ -1315,7 +1527,7 @@ def write_list_threads(self): return seq def wait_for_list_threads(self, seq): - return self.wait_for_message('502') + return self.wait_for_message("502") def wait_for_get_thread_stack_message(self): return self.wait_for_message(CMD_GET_THREAD_STACK) @@ -1325,27 +1537,28 @@ def wait_for_curr_exc_stack(self): def wait_for_json_message(self, accept_message, unquote_msg=True, timeout=None): last = self.wait_for_message(accept_message, unquote_msg, expect_xml=False, timeout=timeout) - json_msg = last.split('\t', 2)[-1] # We have something as: CMD\tSEQ\tJSON + json_msg = last.split("\t", 2)[-1] # We have something as: CMD\tSEQ\tJSON if isinstance(json_msg, bytes): - json_msg = json_msg.decode('utf-8') + json_msg = json_msg.decode("utf-8") try: return json.loads(json_msg) except: traceback.print_exc() - raise AssertionError('Unable to parse:\n%s\njson:\n%s' % (last, json_msg)) + raise AssertionError("Unable to parse:\n%s\njson:\n%s" % (last, json_msg)) def wait_for_message(self, accept_message, unquote_msg=True, expect_xml=True, timeout=None, double_unquote=True): if isinstance(accept_message, (str, int)): - msg_starts_with = '%s\t' % (accept_message,) + msg_starts_with = "%s\t" % (accept_message,) def accept_message(msg): return msg.startswith(msg_starts_with) import untangle from io import StringIO + prev = None while True: - last = self.get_next_message('wait_for_message', timeout=timeout) + last = self.get_next_message("wait_for_message", timeout=timeout) if unquote_msg: last = unquote_plus(last) if double_unquote: @@ -1356,22 +1569,22 @@ def accept_message(msg): if accept_message(last): if expect_xml: # Extract xml and return untangled. - xml = '' + xml = "" try: - xml = last[last.index(''):] + xml = last[last.index("") :] if isinstance(xml, bytes): - xml = xml.decode('utf-8') + xml = xml.decode("utf-8") xml = untangle.parse(StringIO(xml)) except: traceback.print_exc() - raise AssertionError('Unable to parse:\n%s\nxml:\n%s' % (last, xml)) + raise AssertionError("Unable to parse:\n%s\nxml:\n%s" % (last, xml)) ret = xml.xml ret.original_xml = last return ret else: return last if prev != last: - sys.stderr.write('Ignored message: %r\n' % (last,)) + sys.stderr.write("Ignored message: %r\n" % (last,)) # Uncomment to know where in the stack it was ignored. # import traceback # traceback.print_stack(limit=7) @@ -1381,33 +1594,34 @@ def accept_message(msg): def wait_for_untangled_message(self, accept_message, timeout=None, double_unquote=False): import untangle from io import StringIO + prev = None while True: - last = self.get_next_message('wait_for_message', timeout=timeout) + last = self.get_next_message("wait_for_message", timeout=timeout) last = unquote_plus(last) if double_unquote: last = unquote_plus(last) # Extract xml with untangled. - xml = '' + xml = "" try: - xml = last[last.index(''):] + xml = last[last.index("") :] except: traceback.print_exc() - raise AssertionError('Unable to find xml in: %s' % (last,)) + raise AssertionError("Unable to find xml in: %s" % (last,)) try: if isinstance(xml, bytes): - xml = xml.decode('utf-8') + xml = xml.decode("utf-8") xml = untangle.parse(StringIO(xml)) except: traceback.print_exc() - raise AssertionError('Unable to parse:\n%s\nxml:\n%s' % (last, xml)) + raise AssertionError("Unable to parse:\n%s\nxml:\n%s" % (last, xml)) untangled = xml.xml - cmd_id = last.split('\t', 1)[0] + cmd_id = last.split("\t", 1)[0] if accept_message(int(cmd_id), untangled): return untangled if prev != last: - print('Ignored message: %r' % (last,)) + print("Ignored message: %r" % (last,)) prev = last @@ -1415,46 +1629,45 @@ def get_frame_names(self, thread_id): self.write_get_thread_stack(thread_id) msg = self.wait_for_message(CMD_GET_THREAD_STACK) if msg.thread.frame: - frame_names = [frame['name'] for frame in msg.thread.frame] + frame_names = [frame["name"] for frame in msg.thread.frame] return frame_names - return [msg.thread.frame['name']] + return [msg.thread.frame["name"]] def get_step_into_variants(self, thread_id, frame_id, start_line, end_line): - self.write("%s\t%s\t%s\t%s\t%s\t%s" % (CMD_GET_SMART_STEP_INTO_VARIANTS, self.next_seq(), thread_id, frame_id, start_line, end_line)) + self.write( + "%s\t%s\t%s\t%s\t%s\t%s" % (CMD_GET_SMART_STEP_INTO_VARIANTS, self.next_seq(), thread_id, frame_id, start_line, end_line) + ) msg = self.wait_for_message(CMD_GET_SMART_STEP_INTO_VARIANTS) if msg.variant: variant_info = [ - (variant['name'], variant['isVisited'], variant['line'], variant['callOrder'], variant['offset'], variant['childOffset']) + (variant["name"], variant["isVisited"], variant["line"], variant["callOrder"], variant["offset"], variant["childOffset"]) for variant in msg.variant ] return variant_info return [] def wait_for_thread_join(self, main_thread_id): - def condition(): return self.get_frame_names(main_thread_id) in ( - ['wait', 'join', ''], - ['_wait_for_tstate_lock', 'join', ''], - ['_wait_for_tstate_lock', 'join', '', '_run_code', '_run_module_code', 'run_path'], + ["wait", "join", ""], + ["_wait_for_tstate_lock", "join", ""], + ["_wait_for_tstate_lock", "join", "", "_run_code", "_run_module_code", "run_path"], ) def msg(): - return 'Found stack: %s' % (self.get_frame_names(main_thread_id),) + return "Found stack: %s" % (self.get_frame_names(main_thread_id),) - wait_for_condition(condition, msg, timeout=5, sleep=.5) + wait_for_condition(condition, msg, timeout=5, sleep=0.5) def create_request_thread(self, full_url): - class T(threading.Thread): - def wait_for_contents(self): for _ in range(10): - if hasattr(self, 'contents'): + if hasattr(self, "contents"): break - time.sleep(.3) + time.sleep(0.3) else: - raise AssertionError('Unable to get contents from server. Url: %s' % (full_url,)) + raise AssertionError("Unable to get contents from server. Url: %s" % (full_url,)) return self.contents def run(self): @@ -1466,7 +1679,7 @@ def run(self): try: stream = urlopen(full_url) contents = stream.read() - contents = contents.decode('utf-8') + contents = contents.decode("utf-8") self.contents = contents break except IOError: @@ -1480,12 +1693,13 @@ def run(self): def _get_debugger_test_file(filename): ret = os.path.abspath(os.path.join(os.path.dirname(__file__), filename)) if not os.path.exists(ret): - ret = os.path.join(os.path.dirname(__file__), 'resources', filename) + ret = os.path.join(os.path.dirname(__file__), "resources", filename) if not os.path.exists(ret): - raise AssertionError('Expected: %s to exist.' % (ret,)) + raise AssertionError("Expected: %s to exist." % (ret,)) return ret def get_free_port(): from _pydev_bundle.pydev_localhost import get_socket_name + return get_socket_name(close=True)[1] diff --git a/src/debugpy/_vendored/pydevd/tests_python/flask1/app.py b/src/debugpy/_vendored/pydevd/tests_python/flask1/app.py index 2f4e4a258..9b2b44b6a 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/flask1/app.py +++ b/src/debugpy/_vendored/pydevd/tests_python/flask1/app.py @@ -6,55 +6,40 @@ @app.route("/") def home(): - content = 'Flask-Jinja-Test' - return render_template( - "hello.html", - title='Hello', - content=content - ) + content = "Flask-Jinja-Test" + return render_template("hello.html", title="Hello", content=content) @app.route("/handled") def bad_route_handled(): try: - raise ArithmeticError('Hello') + raise ArithmeticError("Hello") except Exception: pass - return render_template( - "hello.html", - title='Hello', - content='Flask-Jinja-Test' - ) + return render_template("hello.html", title="Hello", content="Flask-Jinja-Test") @app.route("/unhandled") def bad_route_unhandled(): - raise ArithmeticError('Hello') - return render_template( - "hello.html", - title='Hello', - content='Flask-Jinja-Test' - ) + raise ArithmeticError("Hello") + return render_template("hello.html", title="Hello", content="Flask-Jinja-Test") @app.route("/bad_template") def bad_template(): - return render_template( - "bad.html", - title='Bad', - content='Flask-Jinja-Test' - ) + return render_template("bad.html", title="Bad", content="Flask-Jinja-Test") @app.route("/exit") def exit_app(): from flask import request - func = request.environ.get('werkzeug.server.shutdown') + + func = request.environ.get("werkzeug.server.shutdown") if func is None: - raise RuntimeError('No shutdown') + raise RuntimeError("No shutdown") func() - return 'Done' + return "Done" -if __name__ == '__main__': +if __name__ == "__main__": app.run() diff --git a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/__init__.py b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/__init__.py b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/__init__.py new file mode 100644 index 000000000..f77af49c2 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/__init__.py @@ -0,0 +1,3 @@ +import pkgutil + +__path__ = pkgutil.extend_path(__path__, __name__) diff --git a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/__init__.py b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/__init__.py new file mode 100644 index 000000000..f77af49c2 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/__init__.py @@ -0,0 +1,3 @@ +import pkgutil + +__path__ = pkgutil.extend_path(__path__, __name__) diff --git a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_events.py b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_events.py index 71c1ef9cd..54133f3e7 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_events.py +++ b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_events.py @@ -5,13 +5,13 @@ class VerifyEvent(object): def on_debugger_modules_loaded(self, **kwargs): - print ("INITIALIZE EVENT RECEIVED") + print("INITIALIZE EVENT RECEIVED") # check that some core modules are loaded before this callback is invoked - modules_loaded = all(mod in sys.modules for mod in ('pydevd_file_utils', '_pydevd_bundle.pydevd_constants')) + modules_loaded = all(mod in sys.modules for mod in ("pydevd_file_utils", "_pydevd_bundle.pydevd_constants")) if modules_loaded: - print ("TEST SUCEEDED") # incorrect spelling on purpose + print("TEST SUCEEDED") # incorrect spelling on purpose else: - print ("TEST FAILED") + print("TEST FAILED") if os.environ.get("VERIFY_EVENT_TEST"): diff --git a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_exttype.py b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_exttype.py index c3a7f7832..40af39147 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_exttype.py +++ b/src/debugpy/_vendored/pydevd/tests_python/my_extensions/pydevd_plugins/extensions/pydevd_plugin_test_exttype.py @@ -3,13 +3,13 @@ class RectResolver(TypeResolveProvider): def get_dictionary(self, var): - return {'length': var.length, 'width': var.width, 'area': var.length * var.width} + return {"length": var.length, "width": var.width, "area": var.length * var.width} def resolve(self, var, attribute): - return getattr(var, attribute, None) if attribute != 'area' else var.length * var.width + return getattr(var, attribute, None) if attribute != "area" else var.length * var.width def can_provide(self, type_object, type_name): - return type_name.endswith('Rect') + return type_name.endswith("Rect") class RectToString(StrPresentationProvider): @@ -17,4 +17,4 @@ def get_str(self, val): return "Rectangle[Length: %s, Width: %s , Area: %s]" % (val.length, val.width, val.length * val.width) def can_provide(self, type_object, type_name): - return type_name.endswith('Rect') + return type_name.endswith("Rect") diff --git a/src/debugpy/_vendored/pydevd/tests_python/performance_check.py b/src/debugpy/_vendored/pydevd/tests_python/performance_check.py index 37d02203d..4e97db116 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/performance_check.py +++ b/src/debugpy/_vendored/pydevd/tests_python/performance_check.py @@ -3,17 +3,16 @@ import re import os -CHECK_BASELINE, CHECK_REGULAR, CHECK_CYTHON, CHECK_FRAME_EVAL = 'baseline', 'regular', 'cython', 'frame_eval' +CHECK_BASELINE, CHECK_REGULAR, CHECK_CYTHON, CHECK_FRAME_EVAL = "baseline", "regular", "cython", "frame_eval" pytest_plugins = [ - str('tests_python.debugger_fixtures'), + str("tests_python.debugger_fixtures"), ] RUNS = 5 class PerformanceWriterThread(debugger_unittest.AbstractWriterThread): - CHECK = None debugger_unittest.AbstractWriterThread.get_environ # overrides @@ -21,19 +20,19 @@ class PerformanceWriterThread(debugger_unittest.AbstractWriterThread): def get_environ(self): env = os.environ.copy() if self.CHECK == CHECK_BASELINE: - env['PYTHONPATH'] = r'X:\PyDev.Debugger.baseline' + env["PYTHONPATH"] = r"X:\PyDev.Debugger.baseline" elif self.CHECK == CHECK_CYTHON: - env['PYDEVD_USE_CYTHON'] = 'YES' - env['PYDEVD_USE_FRAME_EVAL'] = 'NO' + env["PYDEVD_USE_CYTHON"] = "YES" + env["PYDEVD_USE_FRAME_EVAL"] = "NO" elif self.CHECK == CHECK_FRAME_EVAL: - env['PYDEVD_USE_CYTHON'] = 'YES' - env['PYDEVD_USE_FRAME_EVAL'] = 'YES' + env["PYDEVD_USE_CYTHON"] = "YES" + env["PYDEVD_USE_FRAME_EVAL"] = "YES" elif self.CHECK == CHECK_REGULAR: - env['PYDEVD_USE_CYTHON'] = 'NO' - env['PYDEVD_USE_FRAME_EVAL'] = 'NO' + env["PYDEVD_USE_CYTHON"] = "NO" + env["PYDEVD_USE_FRAME_EVAL"] = "NO" else: raise AssertionError("Don't know what to check.") @@ -43,24 +42,22 @@ def get_environ(self): def get_pydevd_file(self): if self.CHECK == CHECK_BASELINE: - return os.path.abspath(os.path.join(r'X:\PyDev.Debugger.baseline', 'pydevd.py')) + return os.path.abspath(os.path.join(r"X:\PyDev.Debugger.baseline", "pydevd.py")) dirname = os.path.dirname(__file__) dirname = os.path.dirname(dirname) - return os.path.abspath(os.path.join(dirname, 'pydevd.py')) + return os.path.abspath(os.path.join(dirname, "pydevd.py")) class CheckDebuggerPerformance(debugger_unittest.DebuggerRunner): - def get_command_line(self): return [sys.executable] def _get_time_from_result(self, stdout): - match = re.search(r'TotalTime>>((\d|\.)+)<<', stdout) + match = re.search(r"TotalTime>>((\d|\.)+)<<", stdout) time_taken = match.group(1) return float(time_taken) def obtain_results(self, benchmark_name, filename): - class PerformanceCheck(PerformanceWriterThread): TEST_FILE = debugger_unittest._get_debugger_test_file(filename) BENCHMARK_NAME = benchmark_name @@ -81,7 +78,7 @@ def store_stdout(stdout, stderr): assert len(stdout_ref) == 1 all_times.append(self._get_time_from_result(stdout_ref[0])) - print('partial for: %s: %.3fs' % (writer_thread_class.BENCHMARK_NAME, all_times[-1])) + print("partial for: %s: %.3fs" % (writer_thread_class.BENCHMARK_NAME, all_times[-1])) if len(all_times) > 3: all_times.remove(min(all_times)) all_times.remove(max(all_times)) @@ -92,13 +89,13 @@ def store_stdout(stdout, stderr): # regular_time = self._get_time_from_result(self.run_process(args, writer_thread=None)) # simple_trace_time = self._get_time_from_result(self.run_process(args+['--regular-trace'], writer_thread=None)) - if 'SPEEDTIN_AUTHORIZATION_KEY' in os.environ: - - SPEEDTIN_AUTHORIZATION_KEY = os.environ['SPEEDTIN_AUTHORIZATION_KEY'] + if "SPEEDTIN_AUTHORIZATION_KEY" in os.environ: + SPEEDTIN_AUTHORIZATION_KEY = os.environ["SPEEDTIN_AUTHORIZATION_KEY"] # sys.path.append(r'X:\speedtin\pyspeedtin') import pyspeedtin # If the authorization key is there, pyspeedtin must be available import pydevd + pydevd_cython_project_id, pydevd_pure_python_project_id = 6, 7 if writer_thread_class.CHECK == CHECK_BASELINE: project_ids = (pydevd_cython_project_id, pydevd_pure_python_project_id) @@ -107,17 +104,17 @@ def store_stdout(stdout, stderr): elif writer_thread_class.CHECK == CHECK_CYTHON: project_ids = (pydevd_cython_project_id,) else: - raise AssertionError('Wrong check: %s' % (writer_thread_class.CHECK)) + raise AssertionError("Wrong check: %s" % (writer_thread_class.CHECK)) for project_id in project_ids: api = pyspeedtin.PySpeedTinApi(authorization_key=SPEEDTIN_AUTHORIZATION_KEY, project_id=project_id) benchmark_name = writer_thread_class.BENCHMARK_NAME if writer_thread_class.CHECK == CHECK_BASELINE: - version = '0.0.1_baseline' + version = "0.0.1_baseline" return # No longer commit the baseline (it's immutable right now). else: - version = pydevd.__version__, + version = (pydevd.__version__,) commit_id, branch, commit_date = api.git_commit_id_branch_and_date_from_path(pydevd.__file__) api.add_benchmark(benchmark_name) @@ -132,32 +129,32 @@ def store_stdout(stdout, stderr): ) api.commit() - self.performance_msg = '%s: %.3fs ' % (writer_thread_class.BENCHMARK_NAME, time_when_debugged) + self.performance_msg = "%s: %.3fs " % (writer_thread_class.BENCHMARK_NAME, time_when_debugged) def method_calls_with_breakpoint(self): - for writer in self.obtain_results('method_calls_with_breakpoint', '_performance_1.py'): - writer.write_add_breakpoint(17, 'method') + for writer in self.obtain_results("method_calls_with_breakpoint", "_performance_1.py"): + writer.write_add_breakpoint(17, "method") writer.write_make_initial_run() writer.finished_ok = True return self.performance_msg def method_calls_without_breakpoint(self): - for writer in self.obtain_results('method_calls_without_breakpoint', '_performance_1.py'): + for writer in self.obtain_results("method_calls_without_breakpoint", "_performance_1.py"): writer.write_make_initial_run() writer.finished_ok = True return self.performance_msg def method_calls_with_step_over(self): - for writer in self.obtain_results('method_calls_with_step_over', '_performance_1.py'): + for writer in self.obtain_results("method_calls_with_step_over", "_performance_1.py"): writer.write_add_breakpoint(26, None) writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('108') + hit = writer.wait_for_breakpoint_hit("108") writer.write_run_thread(hit.thread_id) writer.finished_ok = True @@ -165,23 +162,23 @@ def method_calls_with_step_over(self): return self.performance_msg def method_calls_with_exception_breakpoint(self): - for writer in self.obtain_results('method_calls_with_exception_breakpoint', '_performance_1.py'): - writer.write_add_exception_breakpoint('ValueError') + for writer in self.obtain_results("method_calls_with_exception_breakpoint", "_performance_1.py"): + writer.write_add_exception_breakpoint("ValueError") writer.write_make_initial_run() writer.finished_ok = True return self.performance_msg def global_scope_1_with_breakpoint(self): - for writer in self.obtain_results('global_scope_1_with_breakpoint', '_performance_2.py'): - writer.write_add_breakpoint(writer.get_line_index_with_content('Breakpoint here'), None) + for writer in self.obtain_results("global_scope_1_with_breakpoint", "_performance_2.py"): + writer.write_add_breakpoint(writer.get_line_index_with_content("Breakpoint here"), None) writer.write_make_initial_run() writer.finished_ok = True return self.performance_msg def global_scope_2_with_breakpoint(self): - for writer in self.obtain_results('global_scope_2_with_breakpoint', '_performance_3.py'): + for writer in self.obtain_results("global_scope_2_with_breakpoint", "_performance_3.py"): writer.write_add_breakpoint(17, None) writer.write_make_initial_run() writer.finished_ok = True @@ -189,48 +186,89 @@ def global_scope_2_with_breakpoint(self): return self.performance_msg -if __name__ == '__main__': - # Local times gotten (python 3.6) - # method_calls_with_breakpoint: 1.150s - # method_calls_without_breakpoint: 0.240s - # method_calls_with_step_over: 2.680s - # method_calls_with_exception_breakpoint: 0.235s - # global_scope_1_with_breakpoint: 4.249s - # global_scope_2_with_breakpoint: 2.807s +if __name__ == "__main__": + # Python 3.10 + # Checking: regular + # method_calls_with_breakpoint: 0.160s + # method_calls_without_breakpoint: 0.162s + # method_calls_with_step_over: 0.160s + # method_calls_with_exception_breakpoint: 0.159s + # global_scope_1_with_breakpoint: 0.382s + # global_scope_2_with_breakpoint: 0.141s + # Partial profile time: 43.90s # Checking: cython - # method_calls_with_breakpoint: 0.526s - # method_calls_without_breakpoint: 0.130s - # method_calls_with_step_over: 1.133s - # method_calls_with_exception_breakpoint: 0.136s - # global_scope_1_with_breakpoint: 1.827s - # global_scope_2_with_breakpoint: 1.405s + # method_calls_with_breakpoint: 0.094s + # method_calls_without_breakpoint: 0.094s + # method_calls_with_step_over: 0.094s + # method_calls_with_exception_breakpoint: 0.093s + # global_scope_1_with_breakpoint: 0.252s + # global_scope_2_with_breakpoint: 0.143s + # Partial profile time: 41.39s # Checking: frame_eval - # method_calls_with_breakpoint: 0.133s - # method_calls_without_breakpoint: 0.128s - # method_calls_with_step_over: 0.130s - # method_calls_with_exception_breakpoint: 0.125s - # global_scope_1_with_breakpoint: 0.281s - # global_scope_2_with_breakpoint: 0.169s - # TotalTime for profile: 209.01s + # method_calls_with_breakpoint: 0.095s + # method_calls_without_breakpoint: 0.094s + # method_calls_with_step_over: 0.096s + # method_calls_with_exception_breakpoint: 0.096s + # global_scope_1_with_breakpoint: 0.253s + # global_scope_2_with_breakpoint: 0.140s + # Partial profile time: 41.56s + + # Python 3.12 (sys.monitoring) + # Checking: regular + # method_calls_with_breakpoint: 0.012s + # method_calls_without_breakpoint: 0.014s + # method_calls_with_step_over: 0.014s + # method_calls_with_exception_breakpoint: 0.013s + # global_scope_1_with_breakpoint: 0.058s + # global_scope_2_with_breakpoint: 0.078s + # Partial profile time: 42.59s + # Checking: cython + # method_calls_with_breakpoint: 0.012s + # method_calls_without_breakpoint: 0.014s + # method_calls_with_step_over: 0.014s + # method_calls_with_exception_breakpoint: 0.013s + # global_scope_1_with_breakpoint: 0.059s + # global_scope_2_with_breakpoint: 0.078s + # Partial profile time: 42.37s + + # Python 3.12 (tracing) + # Checking: regular + # method_calls_with_breakpoint: 0.205s + # method_calls_without_breakpoint: 0.201s + # method_calls_with_step_over: 0.203s + # method_calls_with_exception_breakpoint: 0.203s + # global_scope_1_with_breakpoint: 0.499s + # global_scope_2_with_breakpoint: 0.137s + # Partial profile time: 44.55s + # Checking: cython + # method_calls_with_breakpoint: 0.112s + # method_calls_without_breakpoint: 0.113s + # method_calls_with_step_over: 0.113s + # method_calls_with_exception_breakpoint: 0.115s + # global_scope_1_with_breakpoint: 0.304s + # global_scope_2_with_breakpoint: 0.139s + # Partial profile time: 43.14s debugger_unittest.SHOW_WRITES_AND_READS = False debugger_unittest.SHOW_OTHER_DEBUG_INFO = False debugger_unittest.SHOW_STDOUT = False import time + start_time = time.time() tmpdir = None msgs = [] for check in ( - # CHECK_BASELINE, -- Checks against the version checked out at X:\PyDev.Debugger.baseline. - CHECK_REGULAR, - CHECK_CYTHON, - CHECK_FRAME_EVAL, - ): + # CHECK_BASELINE, -- Checks against the version checked out at X:\PyDev.Debugger.baseline. + CHECK_REGULAR, + CHECK_CYTHON, + # CHECK_FRAME_EVAL, + ): + partial_time = time.time() PerformanceWriterThread.CHECK = check - msgs.append('Checking: %s' % (check,)) + msgs.append("Checking: %s" % (check,)) check_debugger_performance = CheckDebuggerPerformance(tmpdir) msgs.append(check_debugger_performance.method_calls_with_breakpoint()) msgs.append(check_debugger_performance.method_calls_without_breakpoint()) @@ -238,8 +276,8 @@ def global_scope_2_with_breakpoint(self): msgs.append(check_debugger_performance.method_calls_with_exception_breakpoint()) msgs.append(check_debugger_performance.global_scope_1_with_breakpoint()) msgs.append(check_debugger_performance.global_scope_2_with_breakpoint()) + msgs.append("Partial profile time: %.2fs" % (time.time() - partial_time,)) for msg in msgs: print(msg) - - print('TotalTime for profile: %.2fs' % (time.time() - start_time,)) + print("TotalTime for profile: %.2fs" % (time.time() - start_time,)) diff --git a/src/debugpy/_vendored/pydevd/tests_python/regression_check.py b/src/debugpy/_vendored/pydevd/tests_python/regression_check.py index a7dc74f8a..8140bf0c4 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/regression_check.py +++ b/src/debugpy/_vendored/pydevd/tests_python/regression_check.py @@ -21,6 +21,7 @@ def original_datadir(request): # Method from: https://github.com/gabrielcnr/pytest-datadir # License: MIT import os.path + return Path(os.path.splitext(request.module.__file__)[0]) @@ -29,6 +30,7 @@ def datadir(original_datadir, tmpdir): # Method from: https://github.com/gabrielcnr/pytest-datadir # License: MIT import shutil + result = Path(str(tmpdir.join(original_datadir.stem))) if original_datadir.is_dir(): shutil.copytree(str(original_datadir), str(result)) @@ -153,16 +155,12 @@ def make_location_message(banner, filename, aux_files): dump_fn(source_filename) aux_created = dump_aux_fn(source_filename) - msg = make_location_message( - "File not found in data directory, created:", source_filename, aux_created - ) + msg = make_location_message("File not found in data directory, created:", source_filename, aux_created) pytest.fail(msg) else: if obtained_filename is None: if fullpath: - obtained_filename = (datadir / basename).with_suffix( - ".obtained" + extension - ) + obtained_filename = (datadir / basename).with_suffix(".obtained" + extension) else: obtained_filename = filename.with_suffix(".obtained" + extension) @@ -220,10 +218,10 @@ def dump(filename): s = json.dumps(data_dict, sort_keys=True, indent=4) if isinstance(s, bytes): - s = s.decode('utf-8') + s = s.decode("utf-8") - s = u'\n'.join([line.rstrip() for line in s.splitlines()]) - s = s.encode('utf-8') + s = "\n".join([line.rstrip() for line in s.splitlines()]) + s = s.encode("utf-8") with filename.open("wb") as f: f.write(s) diff --git a/src/debugpy/_vendored/pydevd/tests_python/resource_path_translation/other.py b/src/debugpy/_vendored/pydevd/tests_python/resource_path_translation/other.py index 369a9b298..66d530126 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resource_path_translation/other.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resource_path_translation/other.py @@ -1,6 +1,4 @@ - - def call_me_back1(callback): - a = 'other' + a = "other" callback() return a diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case17a.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case17a.py index 51ea6fdd1..430cddd96 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case17a.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case17a.py @@ -8,7 +8,7 @@ def m2(): # @DontTrace def m3(): - m2() + m2() # break 2 on sys.monitoring here _a = 'm3' # break 2 here diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multi_threads_stepping.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multi_threads_stepping.py index be1eeb3cf..b275a974a 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multi_threads_stepping.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multi_threads_stepping.py @@ -1,8 +1,8 @@ -''' +""" After breaking on the thread 1, thread 2 should pause waiting for the event1 to be set, so, when we step return on thread 1, the program should finish if all threads are resumed or should keep waiting for the thread 2 to run if only thread 1 is resumed. -''' +""" import threading @@ -17,13 +17,13 @@ def _thread1(): _event2_set = False while not event0.is_set(): - event0.wait(timeout=.001) + event0.wait(timeout=0.001) event1.set() # Break thread 1 _event1_set = True while not event2.is_set(): - event2.wait(timeout=.001) + event2.wait(timeout=0.001) _event2_set = True # Note: we can only get here if thread 2 is also released. event3.set() @@ -33,18 +33,18 @@ def _thread2(): event0.set() while not event1.is_set(): - event1.wait(timeout=.001) + event1.wait(timeout=0.001) event2.set() while not event3.is_set(): - event3.wait(timeout=.001) + event3.wait(timeout=0.001) -if __name__ == '__main__': +if __name__ == "__main__": threads = [ - threading.Thread(target=_thread1, name='thread1'), - threading.Thread(target=_thread2, name='thread2'), + threading.Thread(target=_thread1, name="thread1"), + threading.Thread(target=_thread2, name="thread2"), ] for t in threads: t.start() @@ -52,4 +52,4 @@ def _thread2(): for t in threads: t.join() - print('TEST SUCEEDED!') + print("TEST SUCEEDED!") diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multiple_threads_same_code.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multiple_threads_same_code.py new file mode 100644 index 000000000..1289d6450 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_multiple_threads_same_code.py @@ -0,0 +1,42 @@ +import threading +import time + + +class MyThread(threading.Thread): + finished = False + + def __init__(self, stop): + threading.Thread.__init__(self) + self.stop = stop + + def func_to_stop(self): + if self.stop: + stop_now = True # break on thread + time.sleep(.1) + + def run(self): + i = 0 + while not self.finished: + i += 1 + if self.stop: + self.func_to_stop() + a = 1 + b = 2 + c = 3 + if i % 100 == 0: + time.sleep(.1) + + +threads = [MyThread(False), MyThread(True)] + +for t in threads: + t.start() + +stop_on_main = True # break on main + +for t in threads: + t.finished = True + +for t in threads: + t.join() +print('TEST SUCEEDED') diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_stop_async_iteration.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_stop_async_iteration.py index fe5413279..4cf6a13d9 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_stop_async_iteration.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_stop_async_iteration.py @@ -1,14 +1,33 @@ import asyncio +import sys + +# Useful for debugging function breakpoint: +# from _pydevd_bundle.pydevd_breakpoints import FunctionBreakpoint +# from _pydevd_bundle.pydevd_api import PyDevdAPI +# from _pydevd_bundle.pydevd_constants import get_global_debugger +# +# function_breakpoints = [] +# function_breakpoints.append( +# FunctionBreakpoint('gen', condition=None, expression=None, suspend_policy='ALL', hit_condition=None, is_logpoint=False)) +# +# py_db = get_global_debugger() +# PyDevdAPI().set_function_breakpoints(py_db, function_breakpoints) + async def gen(): for i in range(10): yield i + async def run(): async for p in gen(): print(p) + if __name__ == "__main__": - loop = asyncio.get_event_loop_policy().get_event_loop() - loop.run_until_complete(run()) - print('TEST SUCEEDED') \ No newline at end of file + if sys.version_info[:2] >= (3, 11): + asyncio.run(run()) + else: + loop = asyncio.get_event_loop_policy().get_event_loop() + loop.run_until_complete(run()) + print('TEST SUCEEDED') diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_unhandled_exceptions.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_unhandled_exceptions.py index f08e1d758..718a9878c 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_unhandled_exceptions.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_unhandled_exceptions.py @@ -34,7 +34,7 @@ def thread_func2(n): raise ValueError('in thread 2') -th = threading.Thread(target=lambda: thread_func2(1)) +th = threading.Thread(target=lambda: thread_func2(1), name="Thread2") th.daemon = True th.start() diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_debugpy_mode.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_debugpy_mode.py index 3b7f067ac..fe207ea5d 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_debugpy_mode.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_debugpy_mode.py @@ -1,5 +1,6 @@ import os import sys +from _pydevd_bundle.pydevd_constants import PYDEVD_USE_SYS_MONITORING port = int(sys.argv[1]) root_dirname = os.path.dirname(os.path.dirname(__file__)) @@ -32,7 +33,10 @@ assert pydevd.get_global_debugger() is not None # Set as a part of debugpy-dap assert pydevd.get_global_debugger().multi_threads_single_notification - assert sys.gettrace() is not None + if PYDEVD_USE_SYS_MONITORING: + assert sys.monitoring.get_tool(sys.monitoring.DEBUGGER_ID) == 'pydevd' + else: + assert sys.gettrace() is not None assert 'my_custom_module' in sys.modules diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_impl.py b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_impl.py index d84e49807..761ea8db6 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_impl.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/_debugger_case_wait_for_attach_impl.py @@ -1,6 +1,8 @@ import os import sys import time +from _pydevd_bundle.pydevd_constants import PYDEVD_USE_SYS_MONITORING + port = int(sys.argv[1]) root_dirname = os.path.dirname(os.path.dirname(__file__)) @@ -31,7 +33,10 @@ raise AssertionError('Expected _enable_attach to raise exception (because it is already hearing in another port).') assert pydevd.get_global_debugger() is not None -assert sys.gettrace() is not None +if PYDEVD_USE_SYS_MONITORING: + assert sys.monitoring.get_tool(sys.monitoring.DEBUGGER_ID) == 'pydevd' +else: + assert sys.gettrace() is not None a = 10 # Break 1 print('wait for attach') diff --git a/src/debugpy/_vendored/pydevd/tests_python/resources/my_code/my_code.py b/src/debugpy/_vendored/pydevd/tests_python/resources/my_code/my_code.py index 8d0e8f717..144ad24aa 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/resources/my_code/my_code.py +++ b/src/debugpy/_vendored/pydevd/tests_python/resources/my_code/my_code.py @@ -1,3 +1,8 @@ +# import pydevd +# py_db = pydevd.get_global_debugger() +# py_db.set_project_roots(r'X:\liclipsews\liclipsews\Pydev\plugins\org.python.pydev.core\pysrc\tests_python\resources\my_code') +# py_db.set_use_libraries_filter(False) + if __name__ == '__main__': import sys import os diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_additional_thread_info.py b/src/debugpy/_vendored/pydevd/tests_python/test_additional_thread_info.py index 7852b8fe0..12e7d4b97 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_additional_thread_info.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_additional_thread_info.py @@ -1,6 +1,7 @@ import sys import os from _pydev_bundle import pydev_monkey + sys.path.insert(0, os.path.split(os.path.split(__file__)[0])[0]) import unittest @@ -11,32 +12,32 @@ import _thread as thread # @UnresolvedImport -#======================================================================================================================= +# ======================================================================================================================= # TestCase -#======================================================================================================================= +# ======================================================================================================================= class TestCase(unittest.TestCase): - def test_start_new_thread(self): pydev_monkey.patch_thread_modules() try: found = {} def function(a, b, *args, **kwargs): - found['a'] = a - found['b'] = b - found['args'] = args - found['kwargs'] = kwargs + found["a"] = a + found["b"] = b + found["args"] = args + found["kwargs"] = kwargs - thread.start_new_thread(function, (1, 2, 3, 4), {'d':1, 'e':2}) + thread.start_new_thread(function, (1, 2, 3, 4), {"d": 1, "e": 2}) import time + for _i in range(20): if len(found) == 4: break - time.sleep(.1) + time.sleep(0.1) else: - raise AssertionError('Could not get to condition before 2 seconds') + raise AssertionError("Could not get to condition before 2 seconds") - self.assertEqual({'a': 1, 'b': 2, 'args': (3, 4), 'kwargs': {'e': 2, 'd': 1}}, found) + self.assertEqual({"a": 1, "b": 2, "args": (3, 4), "kwargs": {"e": 2, "d": 1}}, found) finally: pydev_monkey.undo_patch_thread_modules() @@ -50,33 +51,36 @@ class F(object): def start_it(self): try: - self.start_new_thread(self.function, (1, 2, 3, 4), {'d':1, 'e':2}) + self.start_new_thread(self.function, (1, 2, 3, 4), {"d": 1, "e": 2}) except: - import traceback;traceback.print_exc() + import traceback + + traceback.print_exc() def function(self, a, b, *args, **kwargs): - found['a'] = a - found['b'] = b - found['args'] = args - found['kwargs'] = kwargs + found["a"] = a + found["b"] = b + found["args"] = args + found["kwargs"] = kwargs f = F() f.start_it() import time + for _i in range(20): if len(found) == 4: break - time.sleep(.1) + time.sleep(0.1) else: - raise AssertionError('Could not get to condition before 2 seconds') + raise AssertionError("Could not get to condition before 2 seconds") - self.assertEqual({'a': 1, 'b': 2, 'args': (3, 4), 'kwargs': {'e': 2, 'd': 1}}, found) + self.assertEqual({"a": 1, "b": 2, "args": (3, 4), "kwargs": {"e": 2, "d": 1}}, found) finally: pydev_monkey.undo_patch_thread_modules() -#======================================================================================================================= +# ======================================================================================================================= # main -#======================================================================================================================= -if __name__ == '__main__': +# ======================================================================================================================= +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_bytecode_manipulation.py b/src/debugpy/_vendored/pydevd/tests_python/test_bytecode_manipulation.py index 6a3bc2a0f..3f1d5e712 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_bytecode_manipulation.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_bytecode_manipulation.py @@ -5,18 +5,15 @@ import pytest -from tests_python.debug_constants import IS_PY36_OR_GREATER, IS_CPYTHON, TEST_CYTHON, TODO_PY311 +from tests_python.debug_constants import IS_PY36_OR_GREATER, IS_CPYTHON, TEST_CYTHON, IS_PY311_OR_GREATER import dis pytestmark = pytest.mark.skipif( - not IS_PY36_OR_GREATER or - TODO_PY311 or - not IS_CPYTHON or - not TEST_CYTHON, reason='Requires CPython >= 3.6 < 3.11') + not IS_PY36_OR_GREATER or IS_PY311_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON, reason="Requires CPython >= 3.6 < 3.11" +) class _Tracer(object): - def __init__(self): self.stream = StringIO() self._in_print = False @@ -30,22 +27,24 @@ def tracer_printer(self, frame, event, arg): try: if self.accept_frame is None or self.accept_frame(frame): if arg is not None: - if event == 'exception': + if event == "exception": arg = arg[0].__name__ elif arg is not None: arg = str(arg) if arg is None: - arg = '' + arg = "" self.lines_executed.add(frame.f_lineno) - s = ' '.join(( - str(frame.f_lineno), - frame.f_code.co_name, - os.path.basename(frame.f_code.co_filename), - event.upper() if event != 'line' else event, - arg, - )) + s = " ".join( + ( + str(frame.f_lineno), + frame.f_code.co_name, + os.path.basename(frame.f_code.co_filename), + event.upper() if event != "line" else event, + arg, + ) + ) self.writeln(s) except: traceback.print_exc() @@ -54,11 +53,11 @@ def tracer_printer(self, frame, event, arg): def writeln(self, s): self.write(s) - self.write('\n') + self.write("\n") def write(self, s): if isinstance(s, bytes): - s = s.decode('utf-8') + s = s.decode("utf-8") self.stream.write(s) def call(self, c): @@ -76,8 +75,8 @@ def check( method_to_change=None, stop_at_all_lines=False, has_line_event_optimized_in_original_case=False, - ): - ''' +): + """ :param has_line_event_optimized_in_original_case: If True, we're handling a case where we have a double jump, i.e.: some case where there's a JUMP_FORWARD which points to a JUMP_ABSOLUTE and this is @@ -86,7 +85,7 @@ def check( the initial case but appears when we run after modifying the bytecode in memory. See: https://github.com/microsoft/debugpy/issues/973#issuecomment-1178090731 - ''' + """ from _pydevd_frame_eval.pydevd_modify_bytecode import _get_code_line_info from _pydevd_frame_eval import pydevd_modify_bytecode @@ -136,7 +135,9 @@ def call(): # Now, for each valid line, add a breakpoint and check if the tracing profile is exactly # the same (and if the line where we added the breakpoint was executed, see if our # callback got called). - success, new_code = pydevd_modify_bytecode.insert_pydevd_breaks(code, set([line]), _pydev_needs_stop_at_break=_pydev_needs_stop_at_break) + success, new_code = pydevd_modify_bytecode.insert_pydevd_breaks( + code, set([line]), _pydev_needs_stop_at_break=_pydev_needs_stop_at_break + ) assert success method_to_change.__code__ = new_code @@ -150,27 +151,27 @@ def call(): if has_line_event_optimized_in_original_case: lines = sorted(set(x[1] for x in dis.findlinestarts(new_code))) new_line_contents = [] - last_line = str(max(lines)) + ' ' + last_line = str(max(lines)) + " " for l in contents.splitlines(keepends=True): if not l.strip().startswith(last_line): new_line_contents.append(l) - contents = ''.join(new_line_contents) + contents = "".join(new_line_contents) if line in tracer.lines_executed: assert set([line]) == set(pydev_break_stops) breakpoint_hit_at_least_once = True else: if stop_at_all_lines: - raise AssertionError('Expected the debugger to stop at all lines. Did not stop at line: %s' % (line,)) + raise AssertionError("Expected the debugger to stop at all lines. Did not stop at line: %s" % (line,)) del pydev_break_stops[:] if baseline != contents: - print('------- replacement at line: %s ---------' % (line,)) - print('------- baseline ---------') + print("------- replacement at line: %s ---------" % (line,)) + print("------- baseline ---------") print(baseline) - print('------- contents ---------') + print("------- contents ---------") print(contents) - print('-------- error -----------') + print("-------- error -----------") assert baseline == contents # We must have found a break at least once! @@ -182,50 +183,56 @@ def call(): def test_set_pydevd_break_01(): from tests_python.resources import _bytecode_overflow_example - check('_bytecode_overflow_example.py', _bytecode_overflow_example.Dummy.fun, method_kwargs={'text': 'ing'}, has_line_event_optimized_in_original_case=True) + check( + "_bytecode_overflow_example.py", + _bytecode_overflow_example.Dummy.fun, + method_kwargs={"text": "ing"}, + has_line_event_optimized_in_original_case=True, + ) def test_set_pydevd_break_01a(): from tests_python.resources import _bytecode_overflow_example - check('_bytecode_overflow_example.py', _bytecode_overflow_example.check_backtrack, method_kwargs={'x': 'f'}) + check("_bytecode_overflow_example.py", _bytecode_overflow_example.check_backtrack, method_kwargs={"x": "f"}) def test_set_pydevd_break_02(): from tests_python.resources import _bytecode_many_names_example - check('_bytecode_many_names_example.py', _bytecode_many_names_example.foo) + check("_bytecode_many_names_example.py", _bytecode_many_names_example.foo) def test_set_pydevd_break_03(): from tests_python.resources import _bytecode_big_method - check('_bytecode_big_method.py', _bytecode_big_method.foo) + check("_bytecode_big_method.py", _bytecode_big_method.foo) def test_set_pydevd_break_04(): from tests_python.resources import _debugger_case_yield_from - check('_debugger_case_yield_from.py', _debugger_case_yield_from.method) + check("_debugger_case_yield_from.py", _debugger_case_yield_from.method) def test_set_pydevd_break_05(): from tests_python import debugger_unittest - add_to_pythonpath = debugger_unittest._get_debugger_test_file('wrong_bytecode') + + add_to_pythonpath = debugger_unittest._get_debugger_test_file("wrong_bytecode") sys.path.append(add_to_pythonpath) try: - with open(debugger_unittest._get_debugger_test_file('wrong_bytecode/_debugger_case_wrong_bytecode.py'), 'r') as stream: + with open(debugger_unittest._get_debugger_test_file("wrong_bytecode/_debugger_case_wrong_bytecode.py"), "r") as stream: contents = stream.read() - code = compile(contents, '_my_file_debugger_case_wrong_bytecode.py', 'exec') + code = compile(contents, "_my_file_debugger_case_wrong_bytecode.py", "exec") def method(): pass method.__code__ = code - check('_my_file_debugger_case_wrong_bytecode.py', method, skip_breaks_at_lines=set([1])) + check("_my_file_debugger_case_wrong_bytecode.py", method, skip_breaks_at_lines=set([1])) finally: sys.path.remove(add_to_pythonpath) @@ -233,23 +240,24 @@ def method(): def test_set_pydevd_break_06(pyfile): from tests_python.resources import _bytecode_super - check('_bytecode_super.py', _bytecode_super.B, method_to_change=_bytecode_super.B.__init__, stop_at_all_lines=True) + check("_bytecode_super.py", _bytecode_super.B, method_to_change=_bytecode_super.B.__init__, stop_at_all_lines=True) def test_set_pydevd_break_07(): from tests_python.resources import _bytecode_overflow_example - check('_bytecode_overflow_example.py', _bytecode_overflow_example.offset_overflow, method_kwargs={'stream': StringIO()}) + check("_bytecode_overflow_example.py", _bytecode_overflow_example.offset_overflow, method_kwargs={"stream": StringIO()}) def test_set_pydevd_break_08(): from tests_python.resources import _bytecode_overflow_example - check('_bytecode_overflow_example.py', _bytecode_overflow_example.long_lines, stop_at_all_lines=True) + check("_bytecode_overflow_example.py", _bytecode_overflow_example.long_lines, stop_at_all_lines=True) def test_internal_double_linked_list(): from _pydevd_frame_eval.pydevd_modify_bytecode import _HelperBytecodeList + lst = _HelperBytecodeList() node1 = lst.append(1) assert list(lst) == [1] diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_code_obj_to_source_code.py b/src/debugpy/_vendored/pydevd/tests_python/test_code_obj_to_source_code.py index 7516cbf48..5b7882475 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_code_obj_to_source_code.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_code_obj_to_source_code.py @@ -9,7 +9,7 @@ def check(obtained, expected, strip_return_none=True): keepends = False obtained_lines = list(obtained.rstrip().splitlines(keepends)) if strip_return_none: - obtained_lines = [x.replace('return None', '') for x in obtained_lines] + obtained_lines = [x.replace("return None", "") for x in obtained_lines] expected_lines = list(expected.rstrip().splitlines(keepends)) @@ -17,79 +17,79 @@ def check(obtained, expected, strip_return_none=True): def test_code_obj_to_source_make_class_and_func(): - code = ''' + code = """ class MyClass(object, other_class): def my_func(self): print(self) -''' - expected = ''' +""" + expected = """ __module__=__name____qualname__=MyClassMyClass=(def MyClass():MyClass,object,other_class,) def MyClass.my_func(self): print(self) -''' +""" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, expected) def test_code_obj_to_source_lambda(): - code = 'my_func = lambda arg: (2,)' + code = "my_func = lambda arg: (2,)" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) - check(contents, 'my_func=(arg):return return (2,)None') + check(contents, "my_func=(arg):return return (2,)None") def test_code_obj_to_source_make_func(): - code = ''' + code = """ def my_func(arg1, arg2=2, arg3=3): some_call(arg1) -''' +""" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, code) def test_code_obj_to_source_call_func(): - code = 'a=call1(call2(arg1))' + code = "a=call1(call2(arg1))" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, code) def test_for_list_comp(): - code = '[x for x in range(10)]' + code = "[x for x in range(10)]" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, code) def test_code_obj_to_source_for(): - code = 'for i in range(10):\n print(i)' + code = "for i in range(10):\n print(i)" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, code) def test_code_obj_to_source_call_func2(): - code = '''a=call1( + code = """a=call1( call2( arg1)) -''' +""" - co = compile(code, '', 'exec') + co = compile(code, "", "exec") contents = code_obj_to_source(co) check(contents, code) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_collect_bytecode_info.py b/src/debugpy/_vendored/pydevd/tests_python/test_collect_bytecode_info.py index c3e8b393f..353c50909 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_collect_bytecode_info.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_collect_bytecode_info.py @@ -8,7 +8,7 @@ collect_return_info, code_to_bytecode_representation from tests_python.debugger_unittest import IS_CPYTHON, IS_PYPY from _pydevd_bundle.pydevd_constants import IS_PY38_OR_GREATER, IS_JYTHON -from tests_python.debug_constants import IS_PY311_OR_GREATER +from tests_python.debug_constants import IS_PY311_OR_GREATER, TODO_PYPY def _method_call_with_error(): @@ -161,7 +161,7 @@ def check(self, method, expected_as_str, expected_as_str_source_version=None, up if update_try_except_infos is not None: update_try_except_infos(try_except_infos) - if sys.version_info[:2] not in ((3, 10), (3, 11)): + if sys.version_info[:2] not in ((3, 10), (3, 11), (3, 12)): assert str(try_except_infos) == expected_as_str from _pydevd_bundle.pydevd_collect_bytecode_info import collect_try_except_info_from_source @@ -193,7 +193,7 @@ def test_collect_try_except_info(data_regression, pyfile): info = collect_try_except_info(method.__code__, use_func_first_line=True) method_to_info[key] = sorted(str(x) for x in info) - if sys.version_info[:2] not in ((3, 10), (3, 11)): + if sys.version_info[:2] not in ((3, 10), (3, 11), (3, 12)): data_regression.check(method_to_info) data_regression.check(method_to_info_from_source) @@ -389,6 +389,9 @@ def test_collect_try_except_info_async_for(): if IS_PY311_OR_GREATER: pytest.skip('On Python 3.11 we just support collecting info from the AST.') + if TODO_PYPY: + pytest.skip('Not ok for pypy') + # Not valid on Python 2. code_str = ''' async def try_except_with(): diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_console.py b/src/debugpy/_vendored/pydevd/tests_python/test_console.py index 8d2152fca..216690822 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_console.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_console.py @@ -4,8 +4,13 @@ from _pydev_bundle.pydev_override import overrides from tests_python.debugger_fixtures import DebuggerRunnerSimple, debugger_runner_simple -from tests_python.debugger_unittest import AbstractWriterThread, SHOW_OTHER_DEBUG_INFO, \ - start_in_daemon_thread, wait_for_condition, IS_JYTHON +from tests_python.debugger_unittest import ( + AbstractWriterThread, + SHOW_OTHER_DEBUG_INFO, + start_in_daemon_thread, + wait_for_condition, + IS_JYTHON, +) from _pydev_bundle.pydev_localhost import get_socket_names, get_socket_name from _pydev_bundle.pydev_imports import xmlrpclib from _pydev_bundle.pydev_imports import _queue as queue @@ -18,23 +23,17 @@ @pytest.fixture def console_setup(tmpdir): - server_queue = queue.Queue() def notify_finished(more): - server_queue.put(('notify_finished', more)) - return '' + server_queue.put(("notify_finished", more)) + return "" class ConsoleRunner(DebuggerRunnerSimple): - @overrides(DebuggerRunnerSimple.add_command_line_args) def add_command_line_args(self, args, dap=False): port, client_port = get_socket_names(2, close=True) - args.extend(( - writer.get_pydevconsole_file(), - str(port[1]), - str(client_port[1]) - )) + args.extend((writer.get_pydevconsole_file(), str(port[1]), str(client_port[1]))) self.port = port self.client_port = client_port @@ -47,13 +46,12 @@ def add_command_line_args(self, args, dap=False): return args class WriterThread(AbstractWriterThread): - if IS_JYTHON: - EXPECTED_RETURNCODE = 'any' + EXPECTED_RETURNCODE = "any" @overrides(AbstractWriterThread.additional_output_checks) def additional_output_checks(self, stdout, stderr): - print('output found: %s - %s' % (stdout, stderr)) + print("output found: %s - %s" % (stdout, stderr)) @overrides(AbstractWriterThread.write_dump_threads) def write_dump_threads(self): @@ -61,17 +59,16 @@ def write_dump_threads(self): def execute_line(self, command, more=False): runner.proxy.execLine(command) - assert server_queue.get(timeout=5.) == ('notify_finished', more) + assert server_queue.get(timeout=5.0) == ("notify_finished", more) def hello(self): - def _hello(): try: - msg = runner.proxy.hello('ignored') + msg = runner.proxy.hello("ignored") if msg is not None: if isinstance(msg, (list, tuple)): msg = next(iter(msg)) - if msg.lower().startswith('hello'): + if msg.lower().startswith("hello"): return True except: # That's ok, communication still not ready. @@ -95,12 +92,8 @@ def connect_to_debugger(self, debugger_port): writer = WriterThread() class CaseSetup(object): - @contextmanager - def check_console( - self, - **kwargs - ): + def check_console(self, **kwargs): for key, value in kwargs.items(): assert hasattr(WriterThread, key) setattr(WriterThread, key, value) @@ -112,11 +105,11 @@ def check_console( args = runner.add_command_line_args(args) if SHOW_OTHER_DEBUG_INFO: - print('executing: %s' % (' '.join(args),)) + print("executing: %s" % (" ".join(args),)) try: with runner.run_process(args, writer) as dct_with_stdout_stder: - writer.get_stdout = lambda: ''.join(dct_with_stdout_stder['stdout']) - writer.get_stderr = lambda: ''.join(dct_with_stdout_stder['stderr']) + writer.get_stdout = lambda: "".join(dct_with_stdout_stder["stdout"]) + writer.get_stderr = lambda: "".join(dct_with_stdout_stder["stderr"]) # Make sure communication is setup. writer.hello() @@ -124,25 +117,23 @@ def check_console( finally: writer.log = [] - stdout = dct_with_stdout_stder['stdout'] - stderr = dct_with_stdout_stder['stderr'] - writer.additional_output_checks(''.join(stdout), ''.join(stderr)) + stdout = dct_with_stdout_stder["stdout"] + stderr = dct_with_stdout_stder["stderr"] + writer.additional_output_checks("".join(stdout), "".join(stderr)) return CaseSetup() def test_console_simple(console_setup): with console_setup.check_console() as writer: - writer.execute_line('a = 10') + writer.execute_line("a = 10") writer.execute_line('print("TEST SUCEEDED")') writer.close() writer.finished_ok = True def test_console_debugger_connected(console_setup): - class _DebuggerWriterThread(AbstractWriterThread): - FORCE_KILL_PROCESS_WHEN_FINISHED_OK = True def __init__(self): @@ -156,38 +147,41 @@ def __init__(self): self.__server_socket = server_socket def run(self): - print('waiting for second process') + print("waiting for second process") self.sock, addr = self.__server_socket.accept() - print('accepted second process') + print("accepted second process") from tests_python.debugger_unittest import ReaderThread + self.reader_thread = ReaderThread(self.sock) self.reader_thread.start() self._sequence = -1 # initial command is always the version self.write_version() - self.log.append('start_socket') + self.log.append("start_socket") self.write_make_initial_run() time.sleep(1) seq = self.write_list_threads() msg = self.wait_for_list_threads(seq) - assert msg.thread['name'] == 'MainThread' - assert msg.thread['id'] == 'console_main' + assert msg.thread["name"] == "MainThread" + assert msg.thread["id"] == "console_main" - self.write_get_frame('console_main', '1') - self.wait_for_vars([ + self.write_get_frame("console_main", "1") + self.wait_for_vars( [ - '') == '' + assert pydevd_file_utils.get_path_with_real_case("") == "" real_case = pydevd_file_utils.get_path_with_real_case(normalized) assert isinstance(real_case, str) # Note test_dir itself cannot be compared with because pytest may @@ -106,15 +108,17 @@ def test_convert_utilities(tmpdir): if i == 2: # Check that we have the expected paths in the cache. - assert pydevd_file_utils._listdir_cache[os.path.dirname(normalized).lower()] == ['Test_Convert_Utilities'] - assert pydevd_file_utils._listdir_cache[(os.path.dirname(normalized).lower(), 'Test_Convert_Utilities'.lower())] == real_case + assert pydevd_file_utils._listdir_cache[os.path.dirname(normalized).lower()] == ["Test_Convert_Utilities"] + assert ( + pydevd_file_utils._listdir_cache[(os.path.dirname(normalized).lower(), "Test_Convert_Utilities".lower())] == real_case + ) # Check that it works with a shortened path. shortened = pydevd_file_utils.convert_to_short_pathname(normalized) - assert '~' in shortened + assert "~" in shortened with_real_case = pydevd_file_utils.get_path_with_real_case(shortened) - assert with_real_case.endswith('Test_Convert_Utilities') - assert '~' not in with_real_case + assert with_real_case.endswith("Test_Convert_Utilities") + assert "~" not in with_real_case elif IS_MAC: assert pydevd_file_utils.normcase(test_dir) == test_dir.lower() @@ -129,45 +133,46 @@ def test_convert_utilities(tmpdir): def test_source_reference(tmpdir): import pydevd_file_utils - pydevd_file_utils.set_ide_os('WINDOWS') + pydevd_file_utils.set_ide_os("WINDOWS") if IS_WINDOWS: # Client and server are on windows. - pydevd_file_utils.setup_client_server_paths([('c:\\foo', 'c:\\bar')]) + pydevd_file_utils.setup_client_server_paths([("c:\\foo", "c:\\bar")]) - assert pydevd_file_utils.map_file_to_client('c:\\bar\\my') == ('c:\\foo\\my', True) - assert pydevd_file_utils.get_client_filename_source_reference('c:\\foo\\my') == 0 + assert pydevd_file_utils.map_file_to_client("c:\\bar\\my") == ("c:\\foo\\my", True) + assert pydevd_file_utils.get_client_filename_source_reference("c:\\foo\\my") == 0 - assert pydevd_file_utils.map_file_to_client('c:\\another\\my') == ('c:\\another\\my', False) - source_reference = pydevd_file_utils.get_client_filename_source_reference('c:\\another\\my') + assert pydevd_file_utils.map_file_to_client("c:\\another\\my") == ("c:\\another\\my", False) + source_reference = pydevd_file_utils.get_client_filename_source_reference("c:\\another\\my") assert source_reference != 0 - assert pydevd_file_utils.get_server_filename_from_source_reference(source_reference) == 'c:\\another\\my' + assert pydevd_file_utils.get_server_filename_from_source_reference(source_reference) == "c:\\another\\my" else: # Client on windows and server on unix - pydevd_file_utils.set_ide_os('WINDOWS') + pydevd_file_utils.set_ide_os("WINDOWS") - pydevd_file_utils.setup_client_server_paths([('c:\\foo', '/bar')]) + pydevd_file_utils.setup_client_server_paths([("c:\\foo", "/bar")]) - assert pydevd_file_utils.map_file_to_client('/bar/my') == ('c:\\foo\\my', True) - assert pydevd_file_utils.get_client_filename_source_reference('c:\\foo\\my') == 0 + assert pydevd_file_utils.map_file_to_client("/bar/my") == ("c:\\foo\\my", True) + assert pydevd_file_utils.get_client_filename_source_reference("c:\\foo\\my") == 0 - assert pydevd_file_utils.map_file_to_client('/another/my') == ('\\another\\my', False) - source_reference = pydevd_file_utils.get_client_filename_source_reference('\\another\\my') + assert pydevd_file_utils.map_file_to_client("/another/my") == ("\\another\\my", False) + source_reference = pydevd_file_utils.get_client_filename_source_reference("\\another\\my") assert source_reference != 0 - assert pydevd_file_utils.get_server_filename_from_source_reference(source_reference) == '/another/my' + assert pydevd_file_utils.get_server_filename_from_source_reference(source_reference) == "/another/my" -@pytest.mark.skipif(sys.platform != 'win32', reason='Windows-only test.') +@pytest.mark.skipif(sys.platform != "win32", reason="Windows-only test.") def test_translate_only_drive(): import pydevd_file_utils - assert pydevd_file_utils.get_path_with_real_case('c:\\') == 'C:\\' + + assert pydevd_file_utils.get_path_with_real_case("c:\\") == "C:\\" def test_to_server_and_to_client(tmpdir): try: def check(obtained, expected): - assert obtained == expected, '%s (%s) != %s (%s)' % (obtained, type(obtained), expected, type(expected)) + assert obtained == expected, "%s (%s) != %s (%s)" % (obtained, type(obtained), expected, type(expected)) if isinstance(obtained, tuple): assert isinstance(obtained[0], str) else: @@ -179,175 +184,162 @@ def check(obtained, expected): assert isinstance(expected, str) import pydevd_file_utils + if IS_WINDOWS: # Check with made-up files - pydevd_file_utils.setup_client_server_paths([('c:\\foo', 'c:\\bar'), ('c:\\foo2', 'c:\\bar2')]) + pydevd_file_utils.setup_client_server_paths([("c:\\foo", "c:\\bar"), ("c:\\foo2", "c:\\bar2")]) stream = io.StringIO() with log_context(0, stream=stream): - pydevd_file_utils.map_file_to_server('y:\\only_exists_in_client_not_in_server') - assert r'pydev debugger: unable to find translation for: "y:\only_exists_in_client_not_in_server" in ["c:\foo\", "c:\foo2\", "c:\foo", "c:\foo2"] (please revise your path mappings).' in stream.getvalue() + pydevd_file_utils.map_file_to_server("y:\\only_exists_in_client_not_in_server") + assert ( + r'pydev debugger: unable to find translation for: "y:\only_exists_in_client_not_in_server" in ["c:\foo\", "c:\foo2\", "c:\foo", "c:\foo2"] (please revise your path mappings).' + in stream.getvalue() + ) # Client and server are on windows. - pydevd_file_utils.set_ide_os('WINDOWS') - for in_eclipse, in_python in ([ - ('c:\\foo', 'c:\\bar'), - ('c:/foo', 'c:\\bar'), - ('c:\\foo', 'c:/bar'), - ('c:\\foo', 'c:\\bar\\'), - ('c:/foo', 'c:\\bar\\'), - ('c:\\foo', 'c:/bar/'), - ('c:\\foo\\', 'c:\\bar'), - ('c:/foo/', 'c:\\bar'), - ('c:\\foo\\', 'c:/bar'), - - ]): - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + pydevd_file_utils.set_ide_os("WINDOWS") + for in_eclipse, in_python in [ + ("c:\\foo", "c:\\bar"), + ("c:/foo", "c:\\bar"), + ("c:\\foo", "c:/bar"), + ("c:\\foo", "c:\\bar\\"), + ("c:/foo", "c:\\bar\\"), + ("c:\\foo", "c:/bar/"), + ("c:\\foo\\", "c:\\bar"), + ("c:/foo/", "c:\\bar"), + ("c:\\foo\\", "c:/bar"), + ]: + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - check(pydevd_file_utils.map_file_to_server('c:\\foo\\my'), 'c:\\bar\\my') - check(pydevd_file_utils.map_file_to_server('c:/foo/my'), 'c:\\bar\\my') - check(pydevd_file_utils.map_file_to_server('c:/foo/my/'), 'c:\\bar\\my') - check(pydevd_file_utils.map_file_to_server('c:\\foo\\áéíóú'.upper()), 'c:\\bar' + '\\áéíóú'.upper()) - check(pydevd_file_utils.map_file_to_client('c:\\bar\\my'), ('c:\\foo\\my', True)) + check(pydevd_file_utils.map_file_to_server("c:\\foo\\my"), "c:\\bar\\my") + check(pydevd_file_utils.map_file_to_server("c:/foo/my"), "c:\\bar\\my") + check(pydevd_file_utils.map_file_to_server("c:/foo/my/"), "c:\\bar\\my") + check(pydevd_file_utils.map_file_to_server("c:\\foo\\áéíóú".upper()), "c:\\bar" + "\\áéíóú".upper()) + check(pydevd_file_utils.map_file_to_client("c:\\bar\\my"), ("c:\\foo\\my", True)) # Client on unix and server on windows - pydevd_file_utils.set_ide_os('UNIX') - for in_eclipse, in_python in ([ - ('/foo', 'c:\\bar'), - ('/foo', 'c:/bar'), - ('/foo', 'c:\\bar\\'), - ('/foo', 'c:/bar/'), - ('/foo/', 'c:\\bar'), - ('/foo/', 'c:\\bar\\'), - ]): - - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + pydevd_file_utils.set_ide_os("UNIX") + for in_eclipse, in_python in [ + ("/foo", "c:\\bar"), + ("/foo", "c:/bar"), + ("/foo", "c:\\bar\\"), + ("/foo", "c:/bar/"), + ("/foo/", "c:\\bar"), + ("/foo/", "c:\\bar\\"), + ]: + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - check(pydevd_file_utils.map_file_to_server('/foo/my'), 'c:\\bar\\my') - check(pydevd_file_utils.map_file_to_client('c:\\bar\\my'), ('/foo/my', True)) - check(pydevd_file_utils.map_file_to_client('c:\\bar\\my\\'), ('/foo/my', True)) - check(pydevd_file_utils.map_file_to_client('c:/bar/my'), ('/foo/my', True)) - check(pydevd_file_utils.map_file_to_client('c:/bar/my/'), ('/foo/my', True)) + check(pydevd_file_utils.map_file_to_server("/foo/my"), "c:\\bar\\my") + check(pydevd_file_utils.map_file_to_client("c:\\bar\\my"), ("/foo/my", True)) + check(pydevd_file_utils.map_file_to_client("c:\\bar\\my\\"), ("/foo/my", True)) + check(pydevd_file_utils.map_file_to_client("c:/bar/my"), ("/foo/my", True)) + check(pydevd_file_utils.map_file_to_client("c:/bar/my/"), ("/foo/my", True)) # Test with 'real' files # Client and server are on windows. - pydevd_file_utils.set_ide_os('WINDOWS') + pydevd_file_utils.set_ide_os("WINDOWS") test_dir = pydevd_file_utils.get_path_with_real_case(str(tmpdir.mkdir("Foo"))) os.makedirs(os.path.join(test_dir, "Another")) - in_eclipse = os.path.join(os.path.dirname(test_dir), 'Bar') + in_eclipse = os.path.join(os.path.dirname(test_dir), "Bar") in_python = test_dir - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) if pydevd_file_utils.map_file_to_server(in_eclipse) != in_python.lower(): - raise AssertionError('%s != %s\ntmpdir:%s\nin_eclipse: %s\nin_python: %s\ntest_dir: %s' % ( - pydevd_file_utils.map_file_to_server(in_eclipse), in_python.lower(), tmpdir, in_eclipse, in_python, test_dir)) + raise AssertionError( + "%s != %s\ntmpdir:%s\nin_eclipse: %s\nin_python: %s\ntest_dir: %s" + % (pydevd_file_utils.map_file_to_server(in_eclipse), in_python.lower(), tmpdir, in_eclipse, in_python, test_dir) + ) found_in_eclipse = pydevd_file_utils.map_file_to_client(in_python)[0] - assert found_in_eclipse.endswith('Bar') + assert found_in_eclipse.endswith("Bar") - assert pydevd_file_utils.map_file_to_server( - os.path.join(in_eclipse, 'another')) == os.path.join(in_python, 'another').lower() - found_in_eclipse = pydevd_file_utils.map_file_to_client( - os.path.join(in_python, 'another'))[0] - assert found_in_eclipse.endswith('Bar\\Another') + assert pydevd_file_utils.map_file_to_server(os.path.join(in_eclipse, "another")) == os.path.join(in_python, "another").lower() + found_in_eclipse = pydevd_file_utils.map_file_to_client(os.path.join(in_python, "another"))[0] + assert found_in_eclipse.endswith("Bar\\Another") # Client on unix and server on windows - pydevd_file_utils.set_ide_os('UNIX') - in_eclipse = '/foo' + pydevd_file_utils.set_ide_os("UNIX") + in_eclipse = "/foo" in_python = test_dir - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - assert pydevd_file_utils.map_file_to_server('/foo').lower() == in_python.lower() + assert pydevd_file_utils.map_file_to_server("/foo").lower() == in_python.lower() assert pydevd_file_utils.map_file_to_client(in_python) == (in_eclipse, True) # Test without translation in place (still needs to fix case and separators) - pydevd_file_utils.set_ide_os('WINDOWS') + pydevd_file_utils.set_ide_os("WINDOWS") PATHS_FROM_ECLIPSE_TO_PYTHON = [] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) assert pydevd_file_utils.map_file_to_server(test_dir) == test_dir - assert pydevd_file_utils.map_file_to_client(test_dir.lower())[0].endswith('\\Foo') + assert pydevd_file_utils.map_file_to_client(test_dir.lower())[0].endswith("\\Foo") else: # Client on windows and server on unix - pydevd_file_utils.set_ide_os('WINDOWS') + pydevd_file_utils.set_ide_os("WINDOWS") - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - ('c:\\BAR', '/bar') - ] + PATHS_FROM_ECLIPSE_TO_PYTHON = [("c:\\BAR", "/bar")] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - assert pydevd_file_utils.map_file_to_server('c:\\bar\\my') == '/bar/my' - assert pydevd_file_utils.map_file_to_client('/bar/my') == ('c:\\BAR\\my', True) - - for in_eclipse, in_python in ([ - ('c:\\foo', '/báéíóúr'), - ('c:/foo', '/báéíóúr'), - ('c:/foo/', '/báéíóúr'), - ('c:/foo/', '/báéíóúr/'), - ('c:\\foo\\', '/báéíóúr/'), - ]): - - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + assert pydevd_file_utils.map_file_to_server("c:\\bar\\my") == "/bar/my" + assert pydevd_file_utils.map_file_to_client("/bar/my") == ("c:\\BAR\\my", True) + + for in_eclipse, in_python in [ + ("c:\\foo", "/báéíóúr"), + ("c:/foo", "/báéíóúr"), + ("c:/foo/", "/báéíóúr"), + ("c:/foo/", "/báéíóúr/"), + ("c:\\foo\\", "/báéíóúr/"), + ]: + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - assert pydevd_file_utils.map_file_to_server('c:\\foo\\my') == '/báéíóúr/my' - assert pydevd_file_utils.map_file_to_server('C:\\foo\\my') == '/báéíóúr/my' - assert pydevd_file_utils.map_file_to_server('C:\\foo\\MY') == '/báéíóúr/MY' - assert pydevd_file_utils.map_file_to_server('C:\\foo\\MY\\') == '/báéíóúr/MY' - assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\file.py') == '/báéíóúr/my/file.py' - assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\other\\file.py') == '/báéíóúr/my/other/file.py' - assert pydevd_file_utils.map_file_to_server('c:/foo/my') == '/báéíóúr/my' - assert pydevd_file_utils.map_file_to_server('c:\\foo\\my\\') == '/báéíóúr/my' - assert pydevd_file_utils.map_file_to_server('c:/foo/my/') == '/báéíóúr/my' - - assert pydevd_file_utils.map_file_to_client('/báéíóúr/my') == ('c:\\foo\\my', True) - assert pydevd_file_utils.map_file_to_client('/báéíóúr/my/') == ('c:\\foo\\my', True) + assert pydevd_file_utils.map_file_to_server("c:\\foo\\my") == "/báéíóúr/my" + assert pydevd_file_utils.map_file_to_server("C:\\foo\\my") == "/báéíóúr/my" + assert pydevd_file_utils.map_file_to_server("C:\\foo\\MY") == "/báéíóúr/MY" + assert pydevd_file_utils.map_file_to_server("C:\\foo\\MY\\") == "/báéíóúr/MY" + assert pydevd_file_utils.map_file_to_server("c:\\foo\\my\\file.py") == "/báéíóúr/my/file.py" + assert pydevd_file_utils.map_file_to_server("c:\\foo\\my\\other\\file.py") == "/báéíóúr/my/other/file.py" + assert pydevd_file_utils.map_file_to_server("c:/foo/my") == "/báéíóúr/my" + assert pydevd_file_utils.map_file_to_server("c:\\foo\\my\\") == "/báéíóúr/my" + assert pydevd_file_utils.map_file_to_server("c:/foo/my/") == "/báéíóúr/my" + + assert pydevd_file_utils.map_file_to_client("/báéíóúr/my") == ("c:\\foo\\my", True) + assert pydevd_file_utils.map_file_to_client("/báéíóúr/my/") == ("c:\\foo\\my", True) # Files for which there's no translation have only their separators updated. - assert pydevd_file_utils.map_file_to_client('/usr/bin/x.py') == ('\\usr\\bin\\x.py', False) - assert pydevd_file_utils.map_file_to_client('/usr/bin') == ('\\usr\\bin', False) - assert pydevd_file_utils.map_file_to_client('/usr/bin/') == ('\\usr\\bin', False) - assert pydevd_file_utils.map_file_to_server('\\usr\\bin') == '/usr/bin' - assert pydevd_file_utils.map_file_to_server('\\usr\\bin\\') == '/usr/bin' + assert pydevd_file_utils.map_file_to_client("/usr/bin/x.py") == ("\\usr\\bin\\x.py", False) + assert pydevd_file_utils.map_file_to_client("/usr/bin") == ("\\usr\\bin", False) + assert pydevd_file_utils.map_file_to_client("/usr/bin/") == ("\\usr\\bin", False) + assert pydevd_file_utils.map_file_to_server("\\usr\\bin") == "/usr/bin" + assert pydevd_file_utils.map_file_to_server("\\usr\\bin\\") == "/usr/bin" # When we have a client file and there'd be no translation, and making it absolute would # do something as '$cwd/$file_received' (i.e.: $cwd/c:/another in the case below), # warn the user that it's not correct and the path that should be translated instead # and don't make it absolute. - assert pydevd_file_utils.map_file_to_server('c:\\Another') == 'c:/Another' + assert pydevd_file_utils.map_file_to_server("c:\\Another") == "c:/Another" - assert pydevd_file_utils.map_file_to_server('c:/FoO/my/BAR') == '/báéíóúr/my/BAR' - assert pydevd_file_utils.map_file_to_client('/báéíóúr/my/BAR') == ('c:\\foo\\my\\BAR', True) + assert pydevd_file_utils.map_file_to_server("c:/FoO/my/BAR") == "/báéíóúr/my/BAR" + assert pydevd_file_utils.map_file_to_client("/báéíóúr/my/BAR") == ("c:\\foo\\my\\BAR", True) # Client and server on unix - pydevd_file_utils.set_ide_os('UNIX') - in_eclipse = '/foo' - in_python = '/báéíóúr' - PATHS_FROM_ECLIPSE_TO_PYTHON = [ - (in_eclipse, in_python) - ] + pydevd_file_utils.set_ide_os("UNIX") + in_eclipse = "/foo" + in_python = "/báéíóúr" + PATHS_FROM_ECLIPSE_TO_PYTHON = [(in_eclipse, in_python)] pydevd_file_utils.setup_client_server_paths(PATHS_FROM_ECLIPSE_TO_PYTHON) - assert pydevd_file_utils.map_file_to_server('/foo/my') == '/báéíóúr/my' - assert pydevd_file_utils.map_file_to_client('/báéíóúr/my') == ('/foo/my', True) + assert pydevd_file_utils.map_file_to_server("/foo/my") == "/báéíóúr/my" + assert pydevd_file_utils.map_file_to_client("/báéíóúr/my") == ("/foo/my", True) finally: pydevd_file_utils.setup_client_server_paths([]) def test_relative_paths(tmpdir): - ''' + """ We need to check that we can deal with relative paths. Use cases: @@ -359,31 +351,32 @@ def test_relative_paths(tmpdir): Use case is a cython-generated module which is generated from a .pyx which is distributed. In this case we need to resolve to the real file based on the sys.path entries. - ''' + """ import pydevd_file_utils import sys + sys.path.append(str(tmpdir)) try: pydevd_file_utils.NORM_PATHS_AND_BASE_CONTAINER.clear() pydevd_file_utils.NORM_PATHS_CONTAINER.clear() - abs_path = pydevd_file_utils.get_abs_path_real_path_and_base_from_file('my_dir/my_file.pyx')[0] - assert 'site-packages' in abs_path + abs_path = pydevd_file_utils.get_abs_path_real_path_and_base_from_file("my_dir/my_file.pyx")[0] + assert "site-packages" in abs_path assert os.path.normcase(str(tmpdir)) not in abs_path - assert not pydevd_file_utils.exists('my_dir/my_file.pyx') + assert not pydevd_file_utils.exists("my_dir/my_file.pyx") # If the relative file exists when joined with some entry in the PYTHONPATH we'll consider # that the relative path points to that absolute path. - target_dir = os.path.join(str(tmpdir), 'my_dir') + target_dir = os.path.join(str(tmpdir), "my_dir") os.makedirs(target_dir) - with open(os.path.join(target_dir, 'my_file.pyx'), 'w') as stream: - stream.write('empty') + with open(os.path.join(target_dir, "my_file.pyx"), "w") as stream: + stream.write("empty") pydevd_file_utils.NORM_PATHS_AND_BASE_CONTAINER.clear() pydevd_file_utils.NORM_PATHS_CONTAINER.clear() - abs_path = pydevd_file_utils.get_abs_path_real_path_and_base_from_file('my_dir/my_file.pyx')[0] - assert 'site-packages' not in abs_path + abs_path = pydevd_file_utils.get_abs_path_real_path_and_base_from_file("my_dir/my_file.pyx")[0] + assert "site-packages" not in abs_path assert str(tmpdir) in abs_path - assert pydevd_file_utils.exists('my_dir/my_file.pyx') + assert pydevd_file_utils.exists("my_dir/my_file.pyx") finally: sys.path.remove(str(tmpdir)) @@ -393,20 +386,20 @@ def test_zip_paths(tmpdir): import sys import zipfile - for i, zip_basename in enumerate(('MY1.zip', 'my2.egg!')): + for i, zip_basename in enumerate(("MY1.zip", "my2.egg!")): zipfile_path = str(tmpdir.join(zip_basename)) - zip_file = zipfile.ZipFile(zipfile_path, 'w') - zip_file.writestr('zipped%s/__init__.py' % (i,), '') - zip_file.writestr('zipped%s/zipped_contents.py' % (i,), 'def call_in_zip():\n return 1') + zip_file = zipfile.ZipFile(zipfile_path, "w") + zip_file.writestr("zipped%s/__init__.py" % (i,), "") + zip_file.writestr("zipped%s/zipped_contents.py" % (i,), "def call_in_zip():\n return 1") zip_file.close() sys.path.append(zipfile_path) try: import importlib except ImportError: - __import__('zipped%s' % (i,)) # Py2.6 does not have importlib + __import__("zipped%s" % (i,)) # Py2.6 does not have importlib else: - importlib.import_module('zipped%s' % (i,)) # Check that it's importable. + importlib.import_module("zipped%s" % (i,)) # Check that it's importable. # Check that we can deal with the zip path. assert pydevd_file_utils.exists(zipfile_path) @@ -420,22 +413,23 @@ def test_zip_paths(tmpdir): # Check that we can deal with zip contents. for path in [ - zipfile_path + '/zipped%s/__init__.py' % (i,), - zipfile_path + '/zipped%s/zipped_contents.py' % (i,), - zipfile_path + '\\zipped%s\\__init__.py' % (i,), - zipfile_path + '\\zipped%s\\zipped_contents.py' % (i,), - ]: - assert pydevd_file_utils.exists(path), 'Expected exists to return True for path:\n%s' % (path,) + zipfile_path + "/zipped%s/__init__.py" % (i,), + zipfile_path + "/zipped%s/zipped_contents.py" % (i,), + zipfile_path + "\\zipped%s\\__init__.py" % (i,), + zipfile_path + "\\zipped%s\\zipped_contents.py" % (i,), + ]: + assert pydevd_file_utils.exists(path), "Expected exists to return True for path:\n%s" % (path,) abspath, realpath, basename = pydevd_file_utils.get_abs_path_real_path_and_base_from_file(path) - assert pydevd_file_utils.exists(abspath), 'Expected exists to return True for path:\n%s' % (abspath,) - assert pydevd_file_utils.exists(realpath), 'Expected exists to return True for path:\n%s' % (realpath,) + assert pydevd_file_utils.exists(abspath), "Expected exists to return True for path:\n%s" % (abspath,) + assert pydevd_file_utils.exists(realpath), "Expected exists to return True for path:\n%s" % (realpath,) - assert zipfile_path in pydevd_file_utils._ZIP_SEARCH_CACHE, '%s not in %s' % ( - zipfile_path, '\n'.join(sorted(pydevd_file_utils._ZIP_SEARCH_CACHE.keys()))) + assert zipfile_path in pydevd_file_utils._ZIP_SEARCH_CACHE, "%s not in %s" % ( + zipfile_path, + "\n".join(sorted(pydevd_file_utils._ZIP_SEARCH_CACHE.keys())), + ) def test_source_mapping(): - from _pydevd_bundle.pydevd_source_mapping import SourceMapping, SourceMappingEntry from _pydevd_bundle import pydevd_api @@ -449,28 +443,28 @@ class _DummyPyDB(object): source_mapping = _DummyPyDB.source_mapping mapping = [ - SourceMappingEntry(line=3, end_line=6, runtime_line=5, runtime_source=''), - SourceMappingEntry(line=10, end_line=11, runtime_line=1, runtime_source=''), + SourceMappingEntry(line=3, end_line=6, runtime_line=5, runtime_source=""), + SourceMappingEntry(line=10, end_line=11, runtime_line=1, runtime_source=""), ] api = pydevd_api.PyDevdAPI() py_db = _DummyPyDB() - filename = 'c:\\temp\\bar.py' if IS_WINDOWS else '/temp/bar.py' + filename = "c:\\temp\\bar.py" if IS_WINDOWS else "/temp/bar.py" api.set_source_mapping(py_db, filename, mapping) # Map to server assert source_mapping.map_to_server(filename, 1) == (filename, 1, False) assert source_mapping.map_to_server(filename, 2) == (filename, 2, False) - assert source_mapping.map_to_server(filename, 3) == ('', 5, True) - assert source_mapping.map_to_server(filename, 4) == ('', 6, True) - assert source_mapping.map_to_server(filename, 5) == ('', 7, True) - assert source_mapping.map_to_server(filename, 6) == ('', 8, True) + assert source_mapping.map_to_server(filename, 3) == ("", 5, True) + assert source_mapping.map_to_server(filename, 4) == ("", 6, True) + assert source_mapping.map_to_server(filename, 5) == ("", 7, True) + assert source_mapping.map_to_server(filename, 6) == ("", 8, True) assert source_mapping.map_to_server(filename, 7) == (filename, 7, False) - assert source_mapping.map_to_server(filename, 10) == ('', 1, True) - assert source_mapping.map_to_server(filename, 11) == ('', 2, True) + assert source_mapping.map_to_server(filename, 10) == ("", 1, True) + assert source_mapping.map_to_server(filename, 11) == ("", 2, True) assert source_mapping.map_to_server(filename, 12) == (filename, 12, False) @@ -478,111 +472,82 @@ class _DummyPyDB(object): assert source_mapping.map_to_client(filename, 1) == (filename, 1, False) assert source_mapping.map_to_client(filename, 2) == (filename, 2, False) - assert source_mapping.map_to_client('', 5) == (filename, 3, True) - assert source_mapping.map_to_client('', 6) == (filename, 4, True) - assert source_mapping.map_to_client('', 7) == (filename, 5, True) - assert source_mapping.map_to_client('', 8) == (filename, 6, True) + assert source_mapping.map_to_client("", 5) == (filename, 3, True) + assert source_mapping.map_to_client("", 6) == (filename, 4, True) + assert source_mapping.map_to_client("", 7) == (filename, 5, True) + assert source_mapping.map_to_client("", 8) == (filename, 6, True) assert source_mapping.map_to_client(filename, 7) == (filename, 7, False) - assert source_mapping.map_to_client('', 1) == (filename, 10, True) - assert source_mapping.map_to_client('', 2) == (filename, 11, True) + assert source_mapping.map_to_client("", 1) == (filename, 10, True) + assert source_mapping.map_to_client("", 2) == (filename, 11, True) assert source_mapping.map_to_client(filename, 12) == (filename, 12, False) -@pytest.mark.skipif(IS_WINDOWS, reason='Linux/Mac-only test') +@pytest.mark.skipif(IS_WINDOWS, reason="Linux/Mac-only test") def test_mapping_conflict_to_client(): import pydevd_file_utils path_mappings = [] for pathMapping in _MAPPING_CONFLICT: - localRoot = pathMapping.get('localRoot', '') - remoteRoot = pathMapping.get('remoteRoot', '') - if (localRoot != '') and (remoteRoot != ''): + localRoot = pathMapping.get("localRoot", "") + remoteRoot = pathMapping.get("remoteRoot", "") + if (localRoot != "") and (remoteRoot != ""): path_mappings.append((localRoot, remoteRoot)) pydevd_file_utils.setup_client_server_paths(path_mappings) - assert pydevd_file_utils.map_file_to_client('/opt/pathsomething/foo.py') == \ - ('/var/home/p2/foo.py', True) + assert pydevd_file_utils.map_file_to_client("/opt/pathsomething/foo.py") == ("/var/home/p2/foo.py", True) - assert pydevd_file_utils.map_file_to_client('/opt/v2/pathsomething/foo.py') == \ - ('/var/home/p4/foo.py', True) + assert pydevd_file_utils.map_file_to_client("/opt/v2/pathsomething/foo.py") == ("/var/home/p4/foo.py", True) # This is an odd case, but the user didn't really put a slash in the end, # so, it's possible that this is what the user actually wants. - assert pydevd_file_utils.map_file_to_client('/opt/v2/path_r1/foo.py') == \ - ('/var/home/p3_r1/foo.py', True) + assert pydevd_file_utils.map_file_to_client("/opt/v2/path_r1/foo.py") == ("/var/home/p3_r1/foo.py", True) # The client said both local and remote end with a slash, so, we can only # match it with the slash in the end. - assert pydevd_file_utils.map_file_to_client('/opt/pathsomething_foo.py') == \ - ('/opt/pathsomething_foo.py', False) + assert pydevd_file_utils.map_file_to_client("/opt/pathsomething_foo.py") == ("/opt/pathsomething_foo.py", False) _MAPPING_CONFLICT = [ - { - "localRoot": "/var/home/p1/", - "remoteRoot": "/opt/path/" - }, - { - "localRoot": "/var/home/p2/", - "remoteRoot": "/opt/pathsomething/" - }, - { - "localRoot": "/var/home/p3", - "remoteRoot": "/opt/v2/path" - }, - { - "localRoot": "/var/home/p4", - "remoteRoot": "/opt/v2/pathsomething" - }, + {"localRoot": "/var/home/p1/", "remoteRoot": "/opt/path/"}, + {"localRoot": "/var/home/p2/", "remoteRoot": "/opt/pathsomething/"}, + {"localRoot": "/var/home/p3", "remoteRoot": "/opt/v2/path"}, + {"localRoot": "/var/home/p4", "remoteRoot": "/opt/v2/pathsomething"}, ] -@pytest.mark.skipif(IS_WINDOWS, reason='Linux/Mac-only test') +@pytest.mark.skipif(IS_WINDOWS, reason="Linux/Mac-only test") def test_mapping_conflict_to_server(): import pydevd_file_utils path_mappings = [] for pathMapping in _MAPPING_CONFLICT_TO_SERVER: - localRoot = pathMapping.get('localRoot', '') - remoteRoot = pathMapping.get('remoteRoot', '') - if (localRoot != '') and (remoteRoot != ''): + localRoot = pathMapping.get("localRoot", "") + remoteRoot = pathMapping.get("remoteRoot", "") + if (localRoot != "") and (remoteRoot != ""): path_mappings.append((localRoot, remoteRoot)) pydevd_file_utils.setup_client_server_paths(path_mappings) - assert pydevd_file_utils.map_file_to_server('/opt/pathsomething/foo.py') == '/var/home/p2/foo.py' + assert pydevd_file_utils.map_file_to_server("/opt/pathsomething/foo.py") == "/var/home/p2/foo.py" - assert pydevd_file_utils.map_file_to_server('/opt/v2/pathsomething/foo.py') == '/var/home/p4/foo.py' + assert pydevd_file_utils.map_file_to_server("/opt/v2/pathsomething/foo.py") == "/var/home/p4/foo.py" # This is an odd case, but the user didn't really put a slash in the end, # so, it's possible that this is what the user actually wants. - assert pydevd_file_utils.map_file_to_server('/opt/v2/path_r1/foo.py') == '/var/home/p3_r1/foo.py' + assert pydevd_file_utils.map_file_to_server("/opt/v2/path_r1/foo.py") == "/var/home/p3_r1/foo.py" # The client said both local and remote end with a slash, so, we can only # match it with the slash in the end. - assert pydevd_file_utils.map_file_to_server('/opt/pathsomething_foo.py') == '/opt/pathsomething_foo.py' + assert pydevd_file_utils.map_file_to_server("/opt/pathsomething_foo.py") == "/opt/pathsomething_foo.py" _MAPPING_CONFLICT_TO_SERVER = [ - { - "remoteRoot": "/var/home/p1/", - "localRoot": "/opt/path/" - }, - { - "remoteRoot": "/var/home/p2/", - "localRoot": "/opt/pathsomething/" - }, - { - "remoteRoot": "/var/home/p3", - "localRoot": "/opt/v2/path" - }, - { - "remoteRoot": "/var/home/p4", - "localRoot": "/opt/v2/pathsomething" - }, + {"remoteRoot": "/var/home/p1/", "localRoot": "/opt/path/"}, + {"remoteRoot": "/var/home/p2/", "localRoot": "/opt/pathsomething/"}, + {"remoteRoot": "/var/home/p3", "localRoot": "/opt/v2/path"}, + {"remoteRoot": "/var/home/p4", "localRoot": "/opt/v2/pathsomething"}, ] - diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_debugger.py b/src/debugpy/_vendored/pydevd/tests_python/test_debugger.py index 4bb77664c..bcda03813 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_debugger.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_debugger.py @@ -1,28 +1,58 @@ # coding: utf-8 -''' +""" The idea is that we record the commands sent to the debugger and reproduce them from this script (so, this works as the client, which spawns the debugger as a separate process and communicates to it as if it was run from the outside) Note that it's a python script but it'll spawn a process to run as jython, ironpython and as python. -''' +""" import time import pytest from tests_python import debugger_unittest -from tests_python.debugger_unittest import (CMD_SET_PROPERTY_TRACE, REASON_CAUGHT_EXCEPTION, - REASON_UNCAUGHT_EXCEPTION, REASON_STOP_ON_BREAKPOINT, REASON_THREAD_SUSPEND, overrides, CMD_THREAD_CREATE, - CMD_GET_THREAD_STACK, REASON_STEP_INTO_MY_CODE, CMD_GET_EXCEPTION_DETAILS, IS_IRONPYTHON, IS_JYTHON, IS_CPYTHON, - IS_APPVEYOR, wait_for_condition, CMD_GET_FRAME, CMD_GET_BREAKPOINT_EXCEPTION, - CMD_THREAD_SUSPEND, CMD_STEP_OVER, REASON_STEP_OVER, CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, - CMD_THREAD_RESUME_SINGLE_NOTIFICATION, REASON_STEP_RETURN, REASON_STEP_RETURN_MY_CODE, - REASON_STEP_OVER_MY_CODE, REASON_STEP_INTO, CMD_THREAD_KILL, IS_PYPY, REASON_STOP_ON_START, - CMD_SMART_STEP_INTO, CMD_GET_VARIABLE) -from _pydevd_bundle.pydevd_constants import IS_WINDOWS, IS_PY38_OR_GREATER, \ - IS_MAC -from _pydevd_bundle.pydevd_comm_constants import CMD_RELOAD_CODE, CMD_INPUT_REQUESTED, \ - CMD_RUN_CUSTOM_OPERATION +from tests_python.debugger_unittest import ( + CMD_SET_PROPERTY_TRACE, + REASON_CAUGHT_EXCEPTION, + REASON_UNCAUGHT_EXCEPTION, + REASON_STOP_ON_BREAKPOINT, + REASON_THREAD_SUSPEND, + overrides, + CMD_THREAD_CREATE, + CMD_GET_THREAD_STACK, + REASON_STEP_INTO_MY_CODE, + CMD_GET_EXCEPTION_DETAILS, + IS_IRONPYTHON, + IS_JYTHON, + IS_CPYTHON, + IS_APPVEYOR, + wait_for_condition, + CMD_GET_FRAME, + CMD_GET_BREAKPOINT_EXCEPTION, + CMD_THREAD_SUSPEND, + CMD_STEP_OVER, + REASON_STEP_OVER, + CMD_THREAD_SUSPEND_SINGLE_NOTIFICATION, + CMD_THREAD_RESUME_SINGLE_NOTIFICATION, + REASON_STEP_RETURN, + REASON_STEP_RETURN_MY_CODE, + REASON_STEP_OVER_MY_CODE, + REASON_STEP_INTO, + CMD_THREAD_KILL, + IS_PYPY, + REASON_STOP_ON_START, + CMD_SMART_STEP_INTO, + CMD_GET_VARIABLE, +) +from _pydevd_bundle.pydevd_constants import ( + IS_WINDOWS, + IS_PY38_OR_GREATER, + IS_MAC, + PYDEVD_USE_SYS_MONITORING, + SUPPORT_ATTACH_TO_PID, + IS_PY312_OR_GREATER, +) +from _pydevd_bundle.pydevd_comm_constants import CMD_RELOAD_CODE, CMD_INPUT_REQUESTED, CMD_RUN_CUSTOM_OPERATION import json import pydevd_file_utils import subprocess @@ -31,54 +61,58 @@ from urllib.parse import unquote, unquote_plus from tests_python.debug_constants import * # noqa +import sys pytest_plugins = [ - str('tests_python.debugger_fixtures'), + str("tests_python.debugger_fixtures"), ] builtin_qualifier = "builtins" -@pytest.mark.skipif(not IS_CPYTHON, reason='Test needs gc.get_referrers/reference counting to really check anything.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Test needs gc.get_referrers/reference counting to really check anything.") def test_case_referrers(case_setup): - with case_setup.test_file('_debugger_case1.py') as writer: - writer.log.append('writing add breakpoint') - writer.write_add_breakpoint(6, 'set_up') + with case_setup.test_file("_debugger_case1.py") as writer: + writer.log.append("writing add breakpoint") + writer.write_add_breakpoint(6, "set_up") - writer.log.append('making initial run') + writer.log.append("making initial run") writer.write_make_initial_run() - writer.log.append('waiting for breakpoint hit') + writer.log.append("waiting for breakpoint hit") hit = writer.wait_for_breakpoint_hit() thread_id = hit.thread_id frame_id = hit.frame_id - writer.log.append('get frame') + writer.log.append("get frame") writer.write_get_frame(thread_id, frame_id) - writer.log.append('step over') + writer.log.append("step over") writer.write_step_over(thread_id) + hit = writer.wait_for_breakpoint_hit(108) + thread_id = hit.thread_id + frame_id = hit.frame_id - writer.log.append('get frame') + writer.log.append("get frame") writer.write_get_frame(thread_id, frame_id) - writer.log.append('run thread') + writer.log.append("run thread") writer.write_run_thread(thread_id) - writer.log.append('asserting') + writer.log.append("asserting") try: - assert 13 == writer._sequence, 'Expected 13. Had: %s' % writer._sequence + assert 13 == writer._sequence, "Expected 13. Had: %s" % writer._sequence except: - writer.log.append('assert failed!') + writer.log.append("assert failed!") raise - writer.log.append('asserted') + writer.log.append("asserted") writer.finished_ok = True def test_case_2(case_setup): - with case_setup.test_file('_debugger_case2.py') as writer: - writer.write_add_breakpoint(3, 'Call4') # seq = 3 + with case_setup.test_file("_debugger_case2.py") as writer: + writer.write_add_breakpoint(3, "Call4") # seq = 3 writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() @@ -87,7 +121,7 @@ def test_case_2(case_setup): writer.write_get_frame(thread_id, frame_id) # Note: write get frame but not waiting for it to be gotten. - writer.write_add_breakpoint(14, 'Call2') + writer.write_add_breakpoint(14, "Call2") writer.write_run_thread(thread_id) @@ -99,29 +133,28 @@ def test_case_2(case_setup): writer.write_run_thread(thread_id) - writer.log.append('Checking sequence. Found: %s' % (writer._sequence)) - assert 15 == writer._sequence, 'Expected 15. Had: %s' % writer._sequence + writer.log.append("Checking sequence. Found: %s" % (writer._sequence)) + assert 15 == writer._sequence, "Expected 15. Had: %s" % writer._sequence - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True @pytest.mark.parametrize( - 'skip_suspend_on_breakpoint_exception, skip_print_breakpoint_exception', + "skip_suspend_on_breakpoint_exception, skip_print_breakpoint_exception", ( - [['NameError'], []], - [['NameError'], ['NameError']], + [["NameError"], []], + [["NameError"], ["NameError"]], [[], []], # Empty means it'll suspend/print in any exception - [[], ['NameError']], - [['ValueError'], ['Exception']], - [['Exception'], ['ValueError']], # ValueError will also suspend/print since we're dealing with a NameError - ) + [[], ["NameError"]], + [["ValueError"], ["Exception"]], + [["Exception"], ["ValueError"]], # ValueError will also suspend/print since we're dealing with a NameError + ), ) def test_case_breakpoint_condition_exc(case_setup, skip_suspend_on_breakpoint_exception, skip_print_breakpoint_exception): - msgs_in_stderr = ( - 'Error while evaluating expression in conditional breakpoint: i > 5', - 'Traceback (most recent call last):', + "Error while evaluating expression in conditional breakpoint: i > 5", + "Traceback (most recent call last):", 'File "", line 1, in ', ) @@ -141,18 +174,16 @@ def _ignore_stderr_line(line): return False - with case_setup.test_file('_debugger_case_breakpoint_condition_exc.py') as writer: - + with case_setup.test_file("_debugger_case_breakpoint_condition_exc.py") as writer: original_ignore_stderr_line = writer._ignore_stderr_line writer._ignore_stderr_line = _ignore_stderr_line writer.write_suspend_on_breakpoint_exception(skip_suspend_on_breakpoint_exception, skip_print_breakpoint_exception) - expect_print = skip_print_breakpoint_exception in ([], ['ValueError']) - expect_suspend = skip_suspend_on_breakpoint_exception in ([], ['ValueError']) + expect_print = skip_print_breakpoint_exception in ([], ["ValueError"]) + expect_suspend = skip_suspend_on_breakpoint_exception in ([], ["ValueError"]) - breakpoint_id = writer.write_add_breakpoint( - writer.get_line_index_with_content('break here'), 'Call', condition='i > 5') + breakpoint_id = writer.write_add_breakpoint(writer.get_line_index_with_content("break here"), "Call", condition="i > 5") if not expect_print: _original = writer.reader_thread.on_message_found @@ -173,24 +204,36 @@ def check_error_msg(stderr): if msg in stderr: break else: - raise AssertionError('Did not find any of: %s in stderr: %s' % ( - msgs_one_in_stderr, stderr)) + raise AssertionError("Did not find any of: %s in stderr: %s" % (msgs_one_in_stderr, stderr)) if expect_print: msg, ctx = writer.wait_for_output() - check_error_msg(msg.replace('>', '>')) + check_error_msg(msg.replace(">", ">")) - if expect_suspend: - writer.wait_for_message(CMD_GET_BREAKPOINT_EXCEPTION) - hit = writer.wait_for_breakpoint_hit() + def wait_for_suspend(): + def accept_message(msg): + if msg.startswith("%s\t" % CMD_GET_BREAKPOINT_EXCEPTION) or ('stop_reason="%s"' % REASON_STOP_ON_BREAKPOINT) in msg: + return True + return False + + # Order is not guaranteed. + msg1 = writer.wait_for_message(accept_message) + msg2 = writer.wait_for_message(accept_message) + try: + hitmsg = msg1 + msg1.thread["stop_reason"] + except: + hitmsg = msg2 + hit = writer._get_stack_as_hit(hitmsg) writer.write_run_thread(hit.thread_id) + if expect_suspend: + wait_for_suspend() + if IS_JYTHON: # Jython will break twice. if expect_suspend: - writer.wait_for_message(CMD_GET_BREAKPOINT_EXCEPTION) - hit = writer.wait_for_breakpoint_hit() - writer.write_run_thread(hit.thread_id) + wait_for_suspend() hit = writer.wait_for_breakpoint_hit() thread_id = hit.thread_id @@ -200,8 +243,8 @@ def check_error_msg(stderr): msg = writer.wait_for_message(CMD_GET_FRAME) name_to_value = {} for var in msg.var: - name_to_value[var['name']] = var['value'] - assert name_to_value == {'i': 'int: 6', 'last_i': 'int: 6'} + name_to_value[var["name"]] = var["value"] + assert name_to_value == {"i": "int: 6", "last_i": "int: 6"} writer.write_remove_breakpoint(breakpoint_id) @@ -211,8 +254,8 @@ def check_error_msg(stderr): def test_case_remove_breakpoint(case_setup): - with case_setup.test_file('_debugger_case_remove_breakpoint.py') as writer: - breakpoint_id = writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("_debugger_case_remove_breakpoint.py") as writer: + breakpoint_id = writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() @@ -223,9 +266,8 @@ def test_case_remove_breakpoint(case_setup): def test_case_double_remove_breakpoint(case_setup): - - with case_setup.test_file('_debugger_case_remove_breakpoint.py') as writer: - breakpoint_id = writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("_debugger_case_remove_breakpoint.py") as writer: + breakpoint_id = writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() @@ -236,12 +278,12 @@ def test_case_double_remove_breakpoint(case_setup): writer.finished_ok = True -@pytest.mark.skipif(IS_IRONPYTHON, reason='This test fails once in a while due to timing issues on IronPython, so, skipping it.') +@pytest.mark.skipif(IS_IRONPYTHON, reason="This test fails once in a while due to timing issues on IronPython, so, skipping it.") def test_case_3(case_setup): - with case_setup.test_file('_debugger_case3.py') as writer: + with case_setup.test_file("_debugger_case3.py") as writer: writer.write_make_initial_run() - time.sleep(.5) - breakpoint_id = writer.write_add_breakpoint(4, '') + time.sleep(0.5) + breakpoint_id = writer.write_add_breakpoint(4, "") hit = writer.wait_for_breakpoint_hit() thread_id = hit.thread_id @@ -265,7 +307,7 @@ def test_case_3(case_setup): def test_case_suspend_thread(case_setup): - with case_setup.test_file('_debugger_case4.py') as writer: + with case_setup.test_file("_debugger_case4.py") as writer: writer.write_make_initial_run() thread_id = writer.wait_for_new_thread() @@ -274,23 +316,25 @@ def test_case_suspend_thread(case_setup): while True: hit = writer.wait_for_breakpoint_hit((REASON_THREAD_SUSPEND, REASON_STOP_ON_BREAKPOINT)) - if hit.name == 'sleep': + if hit.name == "sleep": break # Ok, broke on 'sleep'. else: # i.e.: if it doesn't hit on 'sleep', release and pause again. writer.write_run_thread(thread_id) - time.sleep(.1) + time.sleep(0.1) writer.write_suspend_thread(thread_id) assert hit.thread_id == thread_id - writer.write_evaluate_expression('%s\t%s\t%s' % (hit.thread_id, hit.frame_id, 'LOCAL'), 'exit_while_loop()') - writer.wait_for_evaluation([ + writer.write_evaluate_expression("%s\t%s\t%s" % (hit.thread_id, hit.frame_id, "LOCAL"), "exit_while_loop()") + writer.wait_for_evaluation( [ - '') # no vars at this point + writer.wait_for_vars("") # no vars at this point writer.write_step_over(hit.thread_id) - writer.wait_for_breakpoint_hit('108') + writer.wait_for_breakpoint_hit("108") writer.write_get_frame(hit.thread_id, hit.frame_id) - writer.wait_for_vars([ + writer.wait_for_vars( [ - '%0A'.format(builtin_qualifier), - '%0A'.format( + builtin_qualifier + ), + '%0A%0A'.format(builtin_qualifier), - '%0A%0A', # jython + [ + '%0A%0A'.format( + builtin_qualifier + ), + '%0A%0A', # jython + ] ] - ]) + ) writer.write_run_thread(hit.thread_id) - assert 17 == writer._sequence, 'Expected 17. Had: %s' % writer._sequence + assert 17 == writer._sequence, "Expected 17. Had: %s" % writer._sequence writer.finished_ok = True def test_case_8(case_setup): - with case_setup.test_file('_debugger_case89.py') as writer: - writer.write_add_breakpoint(10, 'Method3') + with case_setup.test_file("_debugger_case89.py") as writer: + writer.write_add_breakpoint(10, "Method3") writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_step_return(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('109', line=15) + hit = writer.wait_for_breakpoint_hit("109", line=15) writer.write_run_thread(hit.thread_id) - assert 9 == writer._sequence, 'Expected 9. Had: %s' % writer._sequence + assert 9 == writer._sequence, "Expected 9. Had: %s" % writer._sequence writer.finished_ok = True def test_case_9(case_setup): - with case_setup.test_file('_debugger_case89.py') as writer: - writer.write_add_breakpoint(10, 'Method3') + with case_setup.test_file("_debugger_case89.py") as writer: + writer.write_add_breakpoint(10, "Method3") writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") # Note: no active exception (should not give an error and should return no # exception details as there's no exception). writer.write_get_current_exception(hit.thread_id) msg = writer.wait_for_message(CMD_GET_EXCEPTION_DETAILS) - assert msg.thread['id'] == hit.thread_id - assert not hasattr(msg.thread, 'frames') # No frames should be found. + assert msg.thread["id"] == hit.thread_id + assert not hasattr(msg.thread, "frames") # No frames should be found. writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('108', line=11) + hit = writer.wait_for_breakpoint_hit("108", line=11) writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('108', line=12) + hit = writer.wait_for_breakpoint_hit("108", line=12) writer.write_run_thread(hit.thread_id) - assert 13 == writer._sequence, 'Expected 13. Had: %s' % writer._sequence + assert 13 == writer._sequence, "Expected 13. Had: %s" % writer._sequence writer.finished_ok = True def test_case_10(case_setup): - with case_setup.test_file('_debugger_case_simple_calls.py') as writer: - writer.write_add_breakpoint(2, 'None') # None or Method should make hit. + with case_setup.test_file("_debugger_case_simple_calls.py") as writer: + writer.write_add_breakpoint(2, "None") # None or Method should make hit. writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_step_return(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('109', line=11) + hit = writer.wait_for_breakpoint_hit("109", line=11) writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('108', line=12) + hit = writer.wait_for_breakpoint_hit("108", line=12) writer.write_run_thread(hit.thread_id) - assert 11 == writer._sequence, 'Expected 11. Had: %s' % writer._sequence + assert 11 == writer._sequence, "Expected 11. Had: %s" % writer._sequence writer.finished_ok = True def test_case_11(case_setup): - with case_setup.test_file('_debugger_case_simple_calls.py') as writer: - writer.write_add_breakpoint(2, 'Method1') + with case_setup.test_file("_debugger_case_simple_calls.py") as writer: + writer.write_add_breakpoint(2, "Method1") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT, line=2) - assert hit.name == 'Method1' + assert hit.name == "Method1" writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=3) - assert hit.name == 'Method1' + assert hit.name == "Method1" writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=12) # Reverts to step in - assert hit.name == 'Method2' + if PYDEVD_USE_SYS_MONITORING: + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=11) # Reverts to step return + assert hit.name == "Method2" + + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=12) + assert hit.name == "Method2" + else: + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=12) # Reverts to step in + assert hit.name == "Method2" writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=13) - assert hit.name == 'Method2' + assert hit.name == "Method2" writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=18) # Reverts to step in - assert hit.name == '' + + if PYDEVD_USE_SYS_MONITORING: + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=17) # Reverts to step return + assert hit.name == "" + + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=18) + assert hit.name == "" + else: + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=18) # Reverts to step in + assert hit.name == "" # Finish with a step over writer.write_step_over(hit.thread_id) @@ -570,31 +635,31 @@ def test_case_12(case_setup): # Note: In CPython we now ignore the function names, so, we'll stop at the breakpoint in line 2 # regardless of the function name (we decide whether to stop in a line or not through the function # lines). - with case_setup.test_file('_debugger_case_simple_calls.py') as writer: - writer.write_add_breakpoint(2, '') # Should not be hit: setting empty function (not None) should only hit global. - writer.write_add_breakpoint(6, 'Method1a') - writer.write_add_breakpoint(11, 'Method2') + with case_setup.test_file("_debugger_case_simple_calls.py") as writer: + writer.write_add_breakpoint(2, "") # Should not be hit: setting empty function (not None) should only hit global. + writer.write_add_breakpoint(6, "Method1a") + writer.write_add_breakpoint(11, "Method2") writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111', line=11) + hit = writer.wait_for_breakpoint_hit("111", line=11) writer.write_step_return(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('111', line=6 if IS_JYTHON else 2) # not a return (it stopped in the other breakpoint) + hit = writer.wait_for_breakpoint_hit("111", line=6 if IS_JYTHON else 2) # not a return (it stopped in the other breakpoint) writer.write_run_thread(hit.thread_id) if not IS_JYTHON: - hit = writer.wait_for_breakpoint_hit('111', line=6) + hit = writer.wait_for_breakpoint_hit("111", line=6) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(IS_IRONPYTHON, reason='Failing on IronPython (needs to be investigated).') -def test_case_13(case_setup): - with case_setup.test_file('_debugger_case13.py') as writer: +@pytest.mark.skipif(IS_IRONPYTHON, reason="Failing on IronPython (needs to be investigated).") +def test_case_property_trace_enable_disable(case_setup): + with case_setup.test_file("_debugger_case13.py") as writer: def _ignore_stderr_line(line): if original_ignore_stderr_line(line): @@ -603,7 +668,8 @@ def _ignore_stderr_line(line): if IS_JYTHON: for expected in ( "RuntimeWarning: Parent module '_pydevd_bundle' not found while handling absolute import", - "import __builtin__"): + "import __builtin__", + ): if expected in line: return True @@ -612,37 +678,37 @@ def _ignore_stderr_line(line): original_ignore_stderr_line = writer._ignore_stderr_line writer._ignore_stderr_line = _ignore_stderr_line - writer.write_add_breakpoint(35, 'main') + writer.write_add_breakpoint(35, "main") writer.write("%s\t%s\t%s" % (CMD_SET_PROPERTY_TRACE, writer.next_seq(), "true;false;false;true")) writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_get_frame(hit.thread_id, hit.frame_id) writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107', line=25) + hit = writer.wait_for_breakpoint_hit("107", line=25) # Should go inside setter method writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107', line=36) + hit = writer.wait_for_breakpoint_hit("107", line=36) writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107', line=21) + hit = writer.wait_for_breakpoint_hit("107", line=21) # Should go inside getter method writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107') + hit = writer.wait_for_breakpoint_hit("107") # Disable property tracing writer.write("%s\t%s\t%s" % (CMD_SET_PROPERTY_TRACE, writer.next_seq(), "true;true;true;true")) writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107', line=39) + hit = writer.wait_for_breakpoint_hit("107", line=39) # Should Skip step into properties setter # Enable property tracing writer.write("%s\t%s\t%s" % (CMD_SET_PROPERTY_TRACE, writer.next_seq(), "true;false;false;true")) writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit('107', line=8) + hit = writer.wait_for_breakpoint_hit("107", line=8) # Should go inside getter method writer.write_run_thread(hit.thread_id) @@ -652,56 +718,62 @@ def _ignore_stderr_line(line): def test_case_14(case_setup): # Interactive Debug Console - with case_setup.test_file('_debugger_case14.py') as writer: - writer.write_add_breakpoint(22, 'main') + with case_setup.test_file("_debugger_case14.py") as writer: + writer.write_add_breakpoint(22, "main") writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') - assert hit.thread_id, '%s not valid.' % hit.thread_id - assert hit.frame_id, '%s not valid.' % hit.frame_id + hit = writer.wait_for_breakpoint_hit("111") + assert hit.thread_id, "%s not valid." % hit.thread_id + assert hit.frame_id, "%s not valid." % hit.frame_id # Access some variable writer.write_debug_console_expression("%s\t%s\tEVALUATE\tcarObj.color" % (hit.thread_id, hit.frame_id)) - writer.wait_for_var(['False', '%27Black%27']) - assert 7 == writer._sequence, 'Expected 9. Had: %s' % writer._sequence + writer.wait_for_var(["False", "%27Black%27"]) + assert 7 == writer._sequence, "Expected 9. Had: %s" % writer._sequence # Change some variable writer.write_debug_console_expression("%s\t%s\tEVALUATE\tcarObj.color='Red'" % (hit.thread_id, hit.frame_id)) writer.write_debug_console_expression("%s\t%s\tEVALUATE\tcarObj.color" % (hit.thread_id, hit.frame_id)) - writer.wait_for_var(['False', '%27Red%27']) - assert 11 == writer._sequence, 'Expected 13. Had: %s' % writer._sequence + writer.wait_for_var(["False", "%27Red%27"]) + assert 11 == writer._sequence, "Expected 13. Had: %s" % writer._sequence # Iterate some loop writer.write_debug_console_expression("%s\t%s\tEVALUATE\tfor i in range(3):" % (hit.thread_id, hit.frame_id)) - writer.wait_for_var(['True']) + writer.wait_for_var(["True"]) writer.write_debug_console_expression("%s\t%s\tEVALUATE\t print(i)" % (hit.thread_id, hit.frame_id)) - writer.wait_for_var(['True']) + writer.wait_for_var(["True"]) writer.write_debug_console_expression("%s\t%s\tEVALUATE\t" % (hit.thread_id, hit.frame_id)) writer.wait_for_var( - [ - 'False' ] - ) - assert 17 == writer._sequence, 'Expected 19. Had: %s' % writer._sequence + ['False'] + ) + assert 17 == writer._sequence, "Expected 19. Had: %s" % writer._sequence writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_case_15(case_setup): - with case_setup.test_file('_debugger_case15.py') as writer: - writer.write_add_breakpoint(22, 'main') + with case_setup.test_file("_debugger_case15.py") as writer: + writer.write_add_breakpoint(22, "main") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT) # Access some variable - writer.write_custom_operation("%s\t%s\tEXPRESSION\tcarObj.color" % (hit.thread_id, hit.frame_id), "EXEC", "f=lambda x: 'val=%s' % x", "f") - writer.wait_for_custom_operation('val=Black') - assert 7 == writer._sequence, 'Expected 7. Had: %s' % writer._sequence - - writer.write_custom_operation("%s\t%s\tEXPRESSION\tcarObj.color" % (hit.thread_id, hit.frame_id), "EXECFILE", debugger_unittest._get_debugger_test_file('_debugger_case15_execfile.py'), "f") - writer.wait_for_custom_operation('val=Black') - assert 9 == writer._sequence, 'Expected 9. Had: %s' % writer._sequence + writer.write_custom_operation( + "%s\t%s\tEXPRESSION\tcarObj.color" % (hit.thread_id, hit.frame_id), "EXEC", "f=lambda x: 'val=%s' % x", "f" + ) + writer.wait_for_custom_operation("val=Black") + assert 7 == writer._sequence, "Expected 7. Had: %s" % writer._sequence + + writer.write_custom_operation( + "%s\t%s\tEXPRESSION\tcarObj.color" % (hit.thread_id, hit.frame_id), + "EXECFILE", + debugger_unittest._get_debugger_test_file("_debugger_case15_execfile.py"), + "f", + ) + writer.wait_for_custom_operation("val=Black") + assert 9 == writer._sequence, "Expected 9. Had: %s" % writer._sequence writer.write_run_thread(hit.thread_id) writer.finished_ok = True @@ -712,9 +784,9 @@ def test_case_16_resolve_numpy_array(case_setup): try: import numpy except ImportError: - pytest.skip('numpy not available') - with case_setup.test_file('_debugger_case16.py') as writer: - writer.write_add_breakpoint(9, 'main') + pytest.skip("numpy not available") + with case_setup.test_file("_debugger_case16.py") as writer: + writer.write_add_breakpoint(9, "main") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT) @@ -724,116 +796,138 @@ def test_case_16_resolve_numpy_array(case_setup): # First pass check is that we have all three expected variables defined writer.write_get_frame(hit.thread_id, hit.frame_id) - writer.wait_for_multiple_vars(( - ( - '', - '' - ), - - ( - '', - '' - ), - - # Any of the ones below will do. + writer.wait_for_multiple_vars( ( - '', - '' + ( + '', + '', + ), + ( + '', + '', + ), + # Any of the ones below will do. + ( + '', + '', + ), ) - )) + ) # For each variable, check each of the resolved (meta data) attributes... - writer.write_get_variable(hit.thread_id, hit.frame_id, 'smallarray') - writer.wait_for_multiple_vars(( - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ], - [ - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ''.format(builtin_qualifier), - ], - ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ], + [ + ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ''.format( + builtin_qualifier + ), + ], + '%0A'.format(builtin_qualifier,)) + writer.write_change_variable(hit.thread_id, hit.frame_id, "a", "40") + writer.wait_for_var( + '%0A'.format( + builtin_qualifier, + ) + ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True @@ -881,28 +982,30 @@ def test_case_18(case_setup): def test_case_19(case_setup): # Check evaluate '__' attributes - with case_setup.test_file('_debugger_case19.py') as writer: + with case_setup.test_file("_debugger_case19.py") as writer: writer.write_add_breakpoint(8, None) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT, line=8) - writer.write_evaluate_expression('%s\t%s\t%s' % (hit.thread_id, hit.frame_id, 'LOCAL'), 'a.__var') - writer.wait_for_evaluation([ + writer.write_evaluate_expression("%s\t%s\t%s" % (hit.thread_id, hit.frame_id, "LOCAL"), "a.__var") + writer.wait_for_evaluation( [ - 'Hello' in contents - assert 'Flask-Jinja-Test' in contents + assert "Hello" in contents + assert "Flask-Jinja-Test" in contents writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") def test_case_django_a(case_setup_django): - def get_environ(writer): env = os.environ.copy() - env.update({ - 'PYDEVD_FILTER_LIBRARIES': '1', # Global setting for in project or not - }) + env.update( + { + "PYDEVD_FILTER_LIBRARIES": "1", # Global setting for in project or not + "IDE_PROJECT_ROOTS": debugger_unittest._get_debugger_test_file(writer.DJANGO_FOLDER), + } + ) return env - with case_setup_django.test_file(EXPECTED_RETURNCODE='any', get_environ=get_environ) as writer: + with case_setup_django.test_file(EXPECTED_RETURNCODE="any", get_environ=get_environ) as writer: writer.write_make_initial_run() # Wait for the first request that works... for i in range(4): try: - t = writer.create_request_thread('my_app') + t = writer.create_request_thread("my_app") t.start() contents = t.wait_for_contents() - contents = contents.replace(' ', '').replace('\r', '').replace('\n', '') - assert contents == '
  • v1:v1
  • v2:v2
' + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") + assert contents == "
  • v1:v1
  • v2:v2
" break except: if i == 3: raise continue - writer.write_add_breakpoint_django(5, None, 'index.html') - t = writer.create_request_thread('my_app') + writer.write_add_breakpoint_django(5, None, "index.html") + t = writer.create_request_thread("my_app") t.start() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT, line=5) - writer.write_get_variable(hit.thread_id, hit.frame_id, 'entry') - writer.wait_for_vars([ - '
  • v1:v1
  • v2:v2
  • ' % (contents,)) + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") + if contents != "
    • v1:v1
    • v2:v2
    ": + raise AssertionError("%s !=
    • v1:v1
    • v2:v2
    " % (contents,)) writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") +def test_case_django_step_next(case_setup_django): + def get_environ(writer): + env = os.environ.copy() + env.update( + { + "PYDEVD_FILTER_LIBRARIES": "1", # Global setting for in project or not + "IDE_PROJECT_ROOTS": debugger_unittest._get_debugger_test_file(writer.DJANGO_FOLDER), + } + ) + return env + + with case_setup_django.test_file(EXPECTED_RETURNCODE="any", get_environ=get_environ) as writer: + writer.write_make_initial_run() + + # Wait for the first request that works... + for i in range(4): + try: + t = writer.create_request_thread("my_app") + t.start() + contents = t.wait_for_contents() + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") + assert contents == "
    • v1:v1
    • v2:v2
    " + break + except: + if i == 3: + raise + continue + + writer.write_add_breakpoint_django(3, None, "index.html") + t = writer.create_request_thread("my_app") + t.start() + + hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT, line=3) + + writer.write_step_over(hit.thread_id) + + hit = writer.wait_for_breakpoint_hit(REASON_STEP_OVER, line=5) + + writer.write_step_in(hit.thread_id) + + hit = writer.wait_for_breakpoint_hit(REASON_STEP_INTO, line=7) + + writer.write_run_thread(hit.thread_id) + + contents = t.wait_for_contents() + + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") + if contents != "
    • v1:v1
    • v2:v2
    ": + raise AssertionError("%s !=
    • v1:v1
    • v2:v2
    " % (contents,)) + + writer.finished_ok = True + + +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") def test_case_django_b(case_setup_django): - with case_setup_django.test_file(EXPECTED_RETURNCODE='any') as writer: - writer.write_add_breakpoint_django(4, None, 'name.html') + with case_setup_django.test_file(EXPECTED_RETURNCODE="any") as writer: + writer.write_add_breakpoint_django(4, None, "name.html") writer.write_add_exception_breakpoint_django() writer.write_remove_exception_breakpoint_django() writer.write_make_initial_run() - t = writer.create_request_thread('my_app/name') + t = writer.create_request_thread("my_app/name") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() @@ -1019,47 +1172,45 @@ def test_case_django_b(case_setup_django): writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") def test_case_django_template_inherits_no_exception(case_setup_django): - with case_setup_django.test_file(EXPECTED_RETURNCODE='any') as writer: - + with case_setup_django.test_file(EXPECTED_RETURNCODE="any") as writer: # Check that it doesn't have issues with inherits + django exception breakpoints. writer.write_add_exception_breakpoint_django() writer.write_make_initial_run() - t = writer.create_request_thread('my_app/inherits') + t = writer.create_request_thread("my_app/inherits") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() contents = t.wait_for_contents() - contents = contents.replace(' ', '').replace('\r', '').replace('\n', '') + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") assert contents == '''"chat_mode=True""chat_mode=False"''' writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") def test_case_django_no_var_error(case_setup_django): - with case_setup_django.test_file(EXPECTED_RETURNCODE='any') as writer: - + with case_setup_django.test_file(EXPECTED_RETURNCODE="any") as writer: # Check that it doesn't have issues with inherits + django exception breakpoints. writer.write_add_exception_breakpoint_django() writer.write_make_initial_run() - t = writer.create_request_thread('my_app/no_var_error') + t = writer.create_request_thread("my_app/no_var_error") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() contents = t.wait_for_contents() - contents = contents.replace(' ', '').replace('\r', '').replace('\n', '') - assert contents == '''no_pat_name''' + contents = contents.replace(" ", "").replace("\r", "").replace("\n", "") + assert contents == """no_pat_name""" writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") @pytest.mark.parametrize("jmc", [False, True]) def test_case_django_no_attribute_exception_breakpoint(case_setup_django, jmc): kwargs = {} @@ -1067,23 +1218,25 @@ def test_case_django_no_attribute_exception_breakpoint(case_setup_django, jmc): def get_environ(writer): env = os.environ.copy() - env.update({ - 'PYDEVD_FILTER_LIBRARIES': '1', # Global setting for in project or not - }) + env.update( + { + "PYDEVD_FILTER_LIBRARIES": "1", # Global setting for in project or not + } + ) return env - kwargs['get_environ'] = get_environ + kwargs["get_environ"] = get_environ - with case_setup_django.test_file(EXPECTED_RETURNCODE='any', **kwargs) as writer: + with case_setup_django.test_file(EXPECTED_RETURNCODE="any", **kwargs) as writer: writer.write_add_exception_breakpoint_django() writer.write_make_initial_run() - t = writer.create_request_thread('my_app/template_error') + t = writer.create_request_thread("my_app/template_error") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() - hit = writer.wait_for_breakpoint_hit(REASON_CAUGHT_EXCEPTION, line=7, file='template_error.html') + hit = writer.wait_for_breakpoint_hit(REASON_CAUGHT_EXCEPTION, line=7, file="template_error.html") writer.write_get_frame(hit.thread_id, hit.frame_id) writer.wait_for_var('', 'f', ''] + if "generator" in target_file: + expected_frame_names = ["", "f", ""] else: - expected_frame_names = ['', 'f', ''] + if sys.version_info[:2] >= (3, 12): + expected_frame_names = ["f", ""] + else: + expected_frame_names = ["", "f", ""] writer.write_get_current_exception(hit.thread_id) - msg = writer.wait_for_message(accept_message=lambda msg:'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False) + msg = writer.wait_for_message(accept_message=lambda msg: 'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False) - frame_names = [unquote(f['name']).replace('<', '<').replace('>', '>') for f in msg.thread.frame] + frame_names = [unquote(f["name"]).replace("<", "<").replace(">", ">") for f in msg.thread.frame] assert frame_names == expected_frame_names writer.write_run_thread(hit.thread_id) if not unhandled: - expected_lines = [ - writer.get_line_index_with_content('# exc line'), - writer.get_line_index_with_content('# call exc'), - ] + if sys.version_info[:2] >= (3, 12) and "generator" not in target_file: + expected_lines = [ + writer.get_line_index_with_content("# call exc"), + ] + else: + expected_lines = [ + writer.get_line_index_with_content("# exc line"), + writer.get_line_index_with_content("# call exc"), + ] for expected_line in expected_lines: hit = writer.wait_for_breakpoint_hit(REASON_CAUGHT_EXCEPTION) assert hit.line == expected_line writer.write_get_current_exception(hit.thread_id) - msg = writer.wait_for_message(accept_message=lambda msg:'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False) + msg = writer.wait_for_message(accept_message=lambda msg: 'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False) - frame_names = [unquote(f['name']).replace('<', '<').replace('>', '>') for f in msg.thread.frame] + frame_names = [unquote(f["name"]).replace("<", "<").replace(">", ">") for f in msg.thread.frame] assert frame_names == expected_frame_names writer.write_run_thread(hit.thread_id) @@ -1402,40 +1572,39 @@ def additional_output_checks(writer, stdout, stderr): writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Failing on Jython -- needs to be investigated).') +@pytest.mark.skipif(IS_JYTHON, reason="Failing on Jython -- needs to be investigated).") def test_unhandled_exceptions_basic(case_setup): - def check_test_suceeded_msg(writer, stdout, stderr): # Don't call super (we have an unhandled exception in the stack trace). - return 'TEST SUCEEDED' in ''.join(stdout) and 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stdout) and "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'raise Exception' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "raise Exception" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) with case_setup.test_file( - '_debugger_case_unhandled_exceptions.py', - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - EXPECTED_RETURNCODE=1, - ) as writer: - - writer.write_add_exception_breakpoint_with_policy('Exception', "0", "1", "0") + "_debugger_case_unhandled_exceptions.py", + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + EXPECTED_RETURNCODE=1, + ) as writer: + writer.write_add_exception_breakpoint_with_policy("Exception", "0", "1", "0") writer.write_make_initial_run() def check(hit, exc_type, exc_desc): writer.write_get_current_exception(hit.thread_id) - msg = writer.wait_for_message(accept_message=lambda msg:exc_type in msg and 'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False) - assert unquote(msg.thread['exc_desc']) == exc_desc - assert unquote(msg.thread['exc_type']) in ( + msg = writer.wait_for_message( + accept_message=lambda msg: exc_type in msg and 'exc_type="' in msg and 'exc_desc="' in msg, unquote_msg=False + ) + assert unquote(msg.thread["exc_desc"]) == exc_desc + assert unquote(msg.thread["exc_type"]) in ( "<type 'exceptions.%s'>" % (exc_type,), # py2 - "<class '%s'>" % (exc_type,) # py3 + "<class '%s'>" % (exc_type,), # py3 ) if len(msg.thread.frame) == 0: - assert unquote(unquote(msg.thread.frame['file'])).endswith('_debugger_case_unhandled_exceptions.py') + assert unquote(unquote(msg.thread.frame["file"])).endswith("_debugger_case_unhandled_exceptions.py") else: - assert unquote(unquote(msg.thread.frame[0]['file'])).endswith('_debugger_case_unhandled_exceptions.py') + assert unquote(unquote(msg.thread.frame[0]["file"])).endswith("_debugger_case_unhandled_exceptions.py") writer.write_run_thread(hit.thread_id) # Will stop in 2 background threads @@ -1445,19 +1614,19 @@ def check(hit, exc_type, exc_desc): hit1 = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) thread_id2 = hit1.thread_id - if hit0.name == 'thread_func2': - check(hit0, 'ValueError', 'in thread 2') - check(hit1, 'Exception', 'in thread 1') + if hit0.name == "thread_func2": + check(hit0, "ValueError", "in thread 2") + check(hit1, "Exception", "in thread 1") else: - check(hit0, 'Exception', 'in thread 1') - check(hit1, 'ValueError', 'in thread 2') + check(hit0, "Exception", "in thread 1") + check(hit1, "ValueError", "in thread 2") writer.write_run_thread(thread_id1) writer.write_run_thread(thread_id2) # Will stop in main thread hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) - assert hit.name == '' + assert hit.name == "" thread_id3 = hit.thread_id # Requesting the stack in an unhandled exception should provide the stack of the exception, @@ -1465,84 +1634,76 @@ def check(hit, exc_type, exc_desc): writer.write_get_thread_stack(thread_id3) msg = writer.wait_for_message(CMD_GET_THREAD_STACK) assert len(msg.thread.frame) == 0 # In main thread (must have no back frames). - assert msg.thread.frame['name'] == '' - check(hit, 'IndexError', 'in main') + assert msg.thread.frame["name"] == "" + check(hit, "IndexError", "in main") - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Failing on Jython -- needs to be investigated).') +@pytest.mark.skipif(IS_JYTHON, reason="Failing on Jython -- needs to be investigated).") def test_unhandled_exceptions_in_top_level1(case_setup_unhandled_exceptions): - with case_setup_unhandled_exceptions.test_file( - '_debugger_case_unhandled_exceptions_on_top_level.py', - EXPECTED_RETURNCODE=1, - ) as writer: - - writer.write_add_exception_breakpoint_with_policy('Exception', "0", "1", "0") + "_debugger_case_unhandled_exceptions_on_top_level.py", + EXPECTED_RETURNCODE=1, + ) as writer: + writer.write_add_exception_breakpoint_with_policy("Exception", "0", "1", "0") writer.write_make_initial_run() # Will stop in main thread hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) writer.write_run_thread(hit.thread_id) - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Failing on Jython -- needs to be investigated).') +@pytest.mark.skipif(IS_JYTHON, reason="Failing on Jython -- needs to be investigated).") def test_unhandled_exceptions_in_top_level2(case_setup_unhandled_exceptions): # Note: expecting unhandled exception to be printed to stderr. def get_environ(writer): env = os.environ.copy() - curr_pythonpath = env.get('PYTHONPATH', '') + curr_pythonpath = env.get("PYTHONPATH", "") pydevd_dirname = os.path.dirname(writer.get_pydevd_file()) curr_pythonpath = pydevd_dirname + os.pathsep + curr_pythonpath - env['PYTHONPATH'] = curr_pythonpath + env["PYTHONPATH"] = curr_pythonpath return env def update_command_line_args(writer, args): # Start pydevd with '-m' to see how it deal with being called with # runpy at the start. - assert args[0].endswith('pydevd.py') - args = ['-m', 'pydevd'] + args[1:] + assert args[0].endswith("pydevd.py") + args = ["-m", "pydevd"] + args[1:] return args with case_setup_unhandled_exceptions.test_file( - '_debugger_case_unhandled_exceptions_on_top_level.py', - get_environ=get_environ, - update_command_line_args=update_command_line_args, - EXPECTED_RETURNCODE='any', - ) as writer: - - writer.write_add_exception_breakpoint_with_policy('Exception', "0", "1", "0") + "_debugger_case_unhandled_exceptions_on_top_level.py", + get_environ=get_environ, + update_command_line_args=update_command_line_args, + EXPECTED_RETURNCODE="any", + ) as writer: + writer.write_add_exception_breakpoint_with_policy("Exception", "0", "1", "0") writer.write_make_initial_run() # Should stop (only once) in the main thread. hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) writer.write_run_thread(hit.thread_id) - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Failing on Jython -- needs to be investigated).') +@pytest.mark.skipif(IS_JYTHON, reason="Failing on Jython -- needs to be investigated).") def test_unhandled_exceptions_in_top_level3(case_setup_unhandled_exceptions): - - with case_setup_unhandled_exceptions.test_file( - '_debugger_case_unhandled_exceptions_on_top_level.py', - EXPECTED_RETURNCODE=1 - ) as writer: - + with case_setup_unhandled_exceptions.test_file("_debugger_case_unhandled_exceptions_on_top_level.py", EXPECTED_RETURNCODE=1) as writer: # Handled and unhandled # PySide2 has a bug in shibokensupport which will try to do: sys._getframe(1). # during the teardown (which will fail as there's no back frame in this case). # So, mark ignore libraries in this case. - writer.write_add_exception_breakpoint_with_policy('Exception', "1", "1", ignore_libraries="1") + writer.write_add_exception_breakpoint_with_policy("Exception", "1", "1", ignore_libraries="1") writer.write_make_initial_run() # Will stop in main thread twice: once one we find that the exception is being @@ -1553,21 +1714,19 @@ def test_unhandled_exceptions_in_top_level3(case_setup_unhandled_exceptions): hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) writer.write_run_thread(hit.thread_id) - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Failing on Jython -- needs to be investigated).') +@pytest.mark.skipif(IS_JYTHON, reason="Failing on Jython -- needs to be investigated).") def test_unhandled_exceptions_in_top_level4(case_setup_unhandled_exceptions): - # Note: expecting unhandled exception to be printed to stderr. with case_setup_unhandled_exceptions.test_file( - '_debugger_case_unhandled_exceptions_on_top_level2.py', - EXPECTED_RETURNCODE=1, - ) as writer: - + "_debugger_case_unhandled_exceptions_on_top_level2.py", + EXPECTED_RETURNCODE=1, + ) as writer: # Handled and unhandled - writer.write_add_exception_breakpoint_with_policy('Exception', "1", "1", "0") + writer.write_add_exception_breakpoint_with_policy("Exception", "1", "1", "0") writer.write_make_initial_run() # We have an exception thrown and handled and another which is thrown and is then unhandled. @@ -1580,33 +1739,32 @@ def test_unhandled_exceptions_in_top_level4(case_setup_unhandled_exceptions): hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) writer.write_run_thread(hit.thread_id) - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='Only for Python.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Only for Python.") def test_case_set_next_statement(case_setup): - - with case_setup.test_file('_debugger_case_set_next_statement.py') as writer: + with case_setup.test_file("_debugger_case_set_next_statement.py") as writer: breakpoint_id = writer.write_add_breakpoint(6, None) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT, line=6) # Stop in line a=3 (before setting it) - writer.write_evaluate_expression('%s\t%s\t%s' % (hit.thread_id, hit.frame_id, 'LOCAL'), 'a') + writer.write_evaluate_expression("%s\t%s\t%s" % (hit.thread_id, hit.frame_id, "LOCAL"), "a") writer.wait_for_evaluation('' - assert msg.thread.frame['line'] == str(writer.get_line_index_with_content('break line on unhandled exception')) + assert msg.thread.frame["name"] == "" + assert msg.thread.frame["line"] == str(writer.get_line_index_with_content("break line on unhandled exception")) writer.write_run_thread(hit.thread_id) - writer.log.append('Marking finished ok.') + writer.log.append("Marking finished ok.") writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Requires Python 3.') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Requires Python 3.") def test_case_throw_exc_reason_xml(case_setup): + from _pydevd_bundle.pydevd_comm_constants import CMD_SEND_CURR_EXCEPTION_TRACE def check_test_suceeded_msg(self, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): assert "raise RuntimeError('TEST SUCEEDED')" in stderr @@ -1656,31 +1815,45 @@ def additional_output_checks(writer, stdout, stderr): assert "raise Exception('another while handling')" in stderr with case_setup.test_file( - '_debugger_case_raise_with_cause.py', - EXPECTED_RETURNCODE=1, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks - ) as writer: - - writer.write_add_exception_breakpoint_with_policy('Exception', "0", "1", "0") + "_debugger_case_raise_with_cause.py", + EXPECTED_RETURNCODE=1, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: + writer.write_add_exception_breakpoint_with_policy("Exception", "0", "1", "0") writer.write_make_initial_run() - el = writer.wait_for_curr_exc_stack() + def accept_message(msg): + if msg.startswith("%s\t" % CMD_SEND_CURR_EXCEPTION_TRACE) or ('stop_reason="%s"' % REASON_UNCAUGHT_EXCEPTION) in msg: + return True + return False + + # Order is not guaranteed. + msg1 = writer.wait_for_message(accept_message) + msg2 = writer.wait_for_message(accept_message) + try: + hitmsg = msg1 + exctracemsg = msg2 + msg1.thread["stop_reason"] + except: + hitmsg = msg2 + exctracemsg = msg1 + hit = writer._get_stack_as_hit(hitmsg) + name_and_lines = [] - for frame in el.thread.frame: - name_and_lines.append((frame['name'], frame['line'])) + for frame in exctracemsg.thread.frame: + name_and_lines.append((frame["name"], frame["line"])) assert name_and_lines == [ - ('foobar', '20'), - ('', '23'), - ('[Chained Exc: another while handling] foobar', '18'), - ('[Chained Exc: another while handling] handle', '10'), - ('[Chained Exc: TEST SUCEEDED] foobar', '16'), - ('[Chained Exc: TEST SUCEEDED] method', '6'), - ('[Chained Exc: TEST SUCEEDED] method2', '2'), + ("foobar", "20"), + ("", "23"), + ("[Chained Exc: another while handling] foobar", "18"), + ("[Chained Exc: another while handling] handle", "10"), + ("[Chained Exc: TEST SUCEEDED] foobar", "16"), + ("[Chained Exc: TEST SUCEEDED] method", "6"), + ("[Chained Exc: TEST SUCEEDED] method2", "2"), ] - hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION) writer.write_get_thread_stack(hit.thread_id) writer.write_run_thread(hit.thread_id) @@ -1688,9 +1861,9 @@ def additional_output_checks(writer, stdout, stderr): writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='Only for Python.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Only for Python.") def test_case_get_next_statement_targets(case_setup): - with case_setup.test_file('_debugger_case_get_next_statement_targets.py') as writer: + with case_setup.test_file("_debugger_case_get_next_statement_targets.py") as writer: breakpoint_id = writer.write_add_breakpoint(21, None) writer.write_make_initial_run() @@ -1706,7 +1879,7 @@ def test_case_get_next_statement_targets(case_setup): # On Python 3.11 there's now a line 1 (which should be harmless). targets.discard(1) expected = set((2, 3, 5, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 21)) - assert targets == expected, 'Expected targets to be %s, was: %s' % (expected, targets) + assert targets == expected, "Expected targets to be %s, was: %s" % (expected, targets) writer.write_remove_breakpoint(breakpoint_id) writer.write_run_thread(hit.thread_id) @@ -1714,7 +1887,7 @@ def test_case_get_next_statement_targets(case_setup): writer.finished_ok = True -@pytest.mark.skipif(IS_IRONPYTHON or IS_JYTHON, reason='Failing on IronPython and Jython (needs to be investigated).') +@pytest.mark.skipif(IS_IRONPYTHON or IS_JYTHON, reason="Failing on IronPython and Jython (needs to be investigated).") def test_case_type_ext(case_setup): # Custom type presentation extensions @@ -1722,144 +1895,143 @@ def get_environ(self): env = os.environ.copy() python_path = env.get("PYTHONPATH", "") - ext_base = debugger_unittest._get_debugger_test_file('my_extensions') - env['PYTHONPATH'] = ext_base + os.pathsep + python_path if python_path else ext_base + ext_base = debugger_unittest._get_debugger_test_file("my_extensions") + env["PYTHONPATH"] = ext_base + os.pathsep + python_path if python_path else ext_base return env - with case_setup.test_file('_debugger_case_type_ext.py', get_environ=get_environ) as writer: + with case_setup.test_file("_debugger_case_type_ext.py", get_environ=get_environ) as writer: writer.get_environ = get_environ writer.write_add_breakpoint(7, None) writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_get_frame(hit.thread_id, hit.frame_id) - assert writer.wait_for_var([ + assert writer.wait_for_var( [ - r'', - r'', + r''.format(builtin_qualifier)) writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_case_variable_access(case_setup, pyfile, data_regression): - @pyfile def case_custom(): obj = [ tuple(range(9)), [ tuple(range(5)), - ] + ], ] - print('TEST SUCEEDED') + print("TEST SUCEEDED") with case_setup.test_file(case_custom) as writer: - line = writer.get_line_index_with_content('TEST SUCEEDED') + line = writer.get_line_index_with_content("TEST SUCEEDED") writer.write_add_breakpoint(line) writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") writer.write_get_frame(hit.thread_id, hit.frame_id) - frame_vars = writer.wait_for_untangled_message( - accept_message=lambda cmd_id, untangled: cmd_id == CMD_GET_FRAME) + frame_vars = writer.wait_for_untangled_message(accept_message=lambda cmd_id, untangled: cmd_id == CMD_GET_FRAME) - obj_var = [v for v in frame_vars.var if v['name'] == 'obj'][0] - assert obj_var['type'] == 'list' - assert unquote_plus(obj_var['value']) == ": [(0, 1, 2, 3, 4, 5, 6, 7, 8), [(0, 1, 2, 3, 4)]]" - assert obj_var['isContainer'] == "True" + obj_var = [v for v in frame_vars.var if v["name"] == "obj"][0] + assert obj_var["type"] == "list" + assert unquote_plus(obj_var["value"]) == ": [(0, 1, 2, 3, 4, 5, 6, 7, 8), [(0, 1, 2, 3, 4)]]" + assert obj_var["isContainer"] == "True" def _skip_key_in_dict(key): try: int(key) except ValueError: - if 'more' in key or '[' in key: + if "more" in key or "[" in key: return False return True return False def collect_vars(locator, level=0): writer.write("%s\t%s\t%s\t%s" % (CMD_GET_VARIABLE, writer.next_seq(), hit.thread_id, locator)) - obj_vars = writer.wait_for_untangled_message( - accept_message=lambda cmd_id, _untangled: cmd_id == CMD_GET_VARIABLE) + obj_vars = writer.wait_for_untangled_message(accept_message=lambda cmd_id, _untangled: cmd_id == CMD_GET_VARIABLE) for v in obj_vars.var: - if _skip_key_in_dict(v['name']): + if _skip_key_in_dict(v["name"]): continue - new_locator = locator + '\t' + v['name'] + new_locator = locator + "\t" + v["name"] yield level, v, new_locator - if v['isContainer'] == 'True': + if v["isContainer"] == "True": yield from collect_vars(new_locator, level + 1) found = [] - for level, val, _locator in collect_vars('%s\tFRAME\tobj' % hit.frame_id): - found.append(((' ' * level) + val['name'] + ': ' + unquote_plus(val['value']))) + for level, val, _locator in collect_vars("%s\tFRAME\tobj" % hit.frame_id): + found.append(((" " * level) + val["name"] + ": " + unquote_plus(val["value"]))) data_regression.check(found) # Check referrers - full_loc = '%s\t%s\t%s' % (hit.thread_id, hit.frame_id, 'FRAME\tobj\t1\t0') - writer.write_custom_operation(full_loc, 'EXEC', "from _pydevd_bundle.pydevd_referrers import get_referrer_info", "get_referrer_info") + full_loc = "%s\t%s\t%s" % (hit.thread_id, hit.frame_id, "FRAME\tobj\t1\t0") + writer.write_custom_operation( + full_loc, "EXEC", "from _pydevd_bundle.pydevd_referrers import get_referrer_info", "get_referrer_info" + ) msg = writer.wait_for_untangled_message( - double_unquote=True, - accept_message=lambda cmd_id, _untangled: cmd_id == CMD_RUN_CUSTOM_OPERATION) + double_unquote=True, accept_message=lambda cmd_id, _untangled: cmd_id == CMD_RUN_CUSTOM_OPERATION + ) msg_vars = msg.var try: - msg_vars['found_as'] + msg_vars["found_as"] msg_vars = [msg_vars] except: pass # it's a container. for v in msg_vars: - if v['found_as'] == 'list[0]': + if v["found_as"] == "list[0]": # In pypy we may have more than one reference, find out the one - referrer_id = v['id'] + referrer_id = v["id"] assert int(referrer_id) - assert unquote_plus(v['value']) == ": [(0, 1, 2, 3, 4)]" + assert unquote_plus(v["value"]) == ": [(0, 1, 2, 3, 4)]" break else: raise AssertionError("Unable to find ref with list[0]. Found: %s" % (msg_vars,)) found = [] - by_id_locator = '%s\t%s' % (referrer_id, 'BY_ID') + by_id_locator = "%s\t%s" % (referrer_id, "BY_ID") for level, val, _locator in collect_vars(by_id_locator): - found.append(((' ' * level) + val['name'] + ': ' + unquote_plus(val['value']))) + found.append(((" " * level) + val["name"] + ": " + unquote_plus(val["value"]))) - data_regression.check(found, basename='test_case_variable_access_by_id') + data_regression.check(found, basename="test_case_variable_access_by_id") writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(IS_IRONPYTHON or IS_JYTHON, reason='Failing on IronPython and Jython (needs to be investigated).') +@pytest.mark.skipif(IS_IRONPYTHON or IS_JYTHON, reason="Failing on IronPython and Jython (needs to be investigated).") def test_case_event_ext(case_setup): - def get_environ(self): env = os.environ.copy() python_path = env.get("PYTHONPATH", "") - ext_base = debugger_unittest._get_debugger_test_file('my_extensions') - env['PYTHONPATH'] = ext_base + os.pathsep + python_path if python_path else ext_base + ext_base = debugger_unittest._get_debugger_test_file("my_extensions") + env["PYTHONPATH"] = ext_base + os.pathsep + python_path if python_path else ext_base env["VERIFY_EVENT_TEST"] = "1" return env # Test initialize event for extensions - with case_setup.test_file('_debugger_case_event_ext.py', get_environ=get_environ) as writer: - + with case_setup.test_file("_debugger_case_event_ext.py", get_environ=get_environ) as writer: original_additional_output_checks = writer.additional_output_checks @overrides(writer.additional_output_checks) def additional_output_checks(stdout, stderr): original_additional_output_checks(stdout, stderr) - if 'INITIALIZE EVENT RECEIVED' not in stdout: - raise AssertionError('No initialize event received') + if "INITIALIZE EVENT RECEIVED" not in stdout: + raise AssertionError("No initialize event received") writer.additional_output_checks = additional_output_checks @@ -1867,19 +2039,21 @@ def additional_output_checks(stdout, stderr): writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Jython does not seem to be creating thread started inside tracing (investigate).') +@pytest.mark.skipif(IS_JYTHON, reason="Jython does not seem to be creating thread started inside tracing (investigate).") def test_case_writer_creation_deadlock(case_setup): # check case where there was a deadlock evaluating expressions - with case_setup.test_file('_debugger_case_thread_creation_deadlock.py') as writer: + with case_setup.test_file("_debugger_case_thread_creation_deadlock.py") as writer: writer.write_add_breakpoint(26, None) writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit('111') + hit = writer.wait_for_breakpoint_hit("111") - assert hit.line == 26, 'Expected return to be in line 26, was: %s' % (hit.line,) + assert hit.line == 26, "Expected return to be in line 26, was: %s" % (hit.line,) - writer.write_evaluate_expression('%s\t%s\t%s' % (hit.thread_id, hit.frame_id, 'LOCAL'), 'create_thread()') - writer.wait_for_evaluation('= 3: - binary_junk = binary_junk.decode('utf-8', 'replace') - - return line.startswith(( - 'text', - 'binary', - 'a', - binary_junk, - )) + binary_junk = binary_junk.decode("utf-8", "replace") + + return line.startswith( + ( + "text", + "binary", + "a", + binary_junk, + ) + ) writer._ignore_stderr_line = _ignore_stderr_line # Note: writes to stdout and stderr are now synchronous (so, the order # must always be consistent and there's a message for each write). expected = [ - 'text\n', - 'binary or text\n', - 'ação1\n', + "text\n", + "binary or text\n", + "ação1\n", ] if sys.version_info[0] >= 3: - expected.extend(( - 'binary\n', - 'ação2\n'.encode(encoding='latin1').decode('utf-8', 'replace'), - 'ação3\n', - )) + expected.extend( + ( + "binary\n", + "ação2\n".encode(encoding="latin1").decode("utf-8", "replace"), + "ação3\n", + ) + ) - binary_junk = '\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\n' + binary_junk = "\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\n" if sys.version_info[0] >= 3: binary_junk = "\ufffd\ufffd\ufffd\ufffd\ufffd\n\n" expected.append(binary_junk) - new_expected = [(x, 'stdout') for x in expected] - new_expected.extend([(x, 'stderr') for x in expected]) + new_expected = [(x, "stdout") for x in expected] + new_expected.extend([(x, "stderr") for x in expected]) writer.write_start_redirect() @@ -2141,11 +2308,11 @@ def _ignore_stderr_line(line): msg = writer.wait_for_output() except AssertionError: for msg in msgs: - sys.stderr.write('Found: %s\n' % (msg,)) + sys.stderr.write("Found: %s\n" % (msg,)) for msg in new_expected: - sys.stderr.write('Expected: %s\n' % (msg,)) + sys.stderr.write("Expected: %s\n" % (msg,)) for msg in ignored: - sys.stderr.write('Ignored: %s\n' % (msg,)) + sys.stderr.write("Ignored: %s\n" % (msg,)) raise if msg not in new_expected: ignored.append(msg) @@ -2165,47 +2332,44 @@ def _path_equals(path1, path2): return path1 == path2 -@pytest.mark.parametrize('mixed_case', [True, False] if sys.platform == 'win32' else [False]) +@pytest.mark.parametrize("mixed_case", [True, False] if sys.platform == "win32" else [False]) def test_path_translation(case_setup, mixed_case): - def get_file_in_client(writer): # Instead of using: test_python/_debugger_case_path_translation.py # we'll set the breakpoints at foo/_debugger_case_path_translation.py file_in_client = os.path.dirname(os.path.dirname(writer.TEST_FILE)) - return os.path.join(os.path.dirname(file_in_client), 'foo', '_debugger_case_path_translation.py') + return os.path.join(os.path.dirname(file_in_client), "foo", "_debugger_case_path_translation.py") def get_environ(writer): import json + env = os.environ.copy() - env["PYTHONIOENCODING"] = 'utf-8' + env["PYTHONIOENCODING"] = "utf-8" - assert writer.TEST_FILE.endswith('_debugger_case_path_translation.py') + assert writer.TEST_FILE.endswith("_debugger_case_path_translation.py") file_in_client = get_file_in_client(writer) if mixed_case: - new_file_in_client = ''.join([file_in_client[i].upper() if i % 2 == 0 else file_in_client[i].lower() for i in range(len(file_in_client))]) - assert _path_equals(file_in_client, new_file_in_client) - env["PATHS_FROM_ECLIPSE_TO_PYTHON"] = json.dumps([ - ( - os.path.dirname(file_in_client), - os.path.dirname(writer.TEST_FILE) + new_file_in_client = "".join( + [file_in_client[i].upper() if i % 2 == 0 else file_in_client[i].lower() for i in range(len(file_in_client))] ) - ]) + assert _path_equals(file_in_client, new_file_in_client) + env["PATHS_FROM_ECLIPSE_TO_PYTHON"] = json.dumps([(os.path.dirname(file_in_client), os.path.dirname(writer.TEST_FILE))]) return env - with case_setup.test_file('_debugger_case_path_translation.py', get_environ=get_environ) as writer: + with case_setup.test_file("_debugger_case_path_translation.py", get_environ=get_environ) as writer: from tests_python.debugger_unittest import CMD_LOAD_SOURCE + writer.write_start_redirect() file_in_client = get_file_in_client(writer) - assert 'tests_python' not in file_in_client - writer.write_add_breakpoint( - writer.get_line_index_with_content('break here'), 'call_this', filename=file_in_client) + assert "tests_python" not in file_in_client + writer.write_add_breakpoint(writer.get_line_index_with_content("break here"), "call_this", filename=file_in_client) writer.write_make_initial_run() - xml = writer.wait_for_message(lambda msg:'stop_reason="111"' in msg) - assert xml.thread.frame[0]['file'] == file_in_client - thread_id = xml.thread['id'] + xml = writer.wait_for_message(lambda msg: 'stop_reason="111"' in msg) + assert xml.thread.frame[0]["file"] == file_in_client + thread_id = xml.thread["id"] # Request a file that exists files_to_match = [file_in_client] @@ -2214,30 +2378,28 @@ def get_environ(writer): for f in files_to_match: writer.write_load_source(f) writer.wait_for_message( - lambda msg: - '%s\t' % CMD_LOAD_SOURCE in msg and \ - "def main():" in msg and \ - "print('break here')" in msg and \ - "print('TEST SUCEEDED!')" in msg - , expect_xml=False) + lambda msg: "%s\t" % CMD_LOAD_SOURCE in msg + and "def main():" in msg + and "print('break here')" in msg + and "print('TEST SUCEEDED!')" in msg, + expect_xml=False, + ) # Request a file that does not exist - writer.write_load_source(file_in_client + 'not_existent.py') - writer.wait_for_message( - lambda msg:'901\t' in msg and ('FileNotFoundError' in msg or 'IOError' in msg), - expect_xml=False) + writer.write_load_source(file_in_client + "not_existent.py") + writer.wait_for_message(lambda msg: "901\t" in msg and ("FileNotFoundError" in msg or "IOError" in msg), expect_xml=False) writer.write_run_thread(thread_id) writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") def test_linecache_xml(case_setup, tmpdir): from _pydevd_bundle.pydevd_comm_constants import CMD_LOAD_SOURCE_FROM_FRAME_ID - with case_setup.test_file('_debugger_case_linecache.py') as writer: - writer.write_add_breakpoint(writer.get_line_index_with_content('breakpoint')) + with case_setup.test_file("_debugger_case_linecache.py") as writer: + writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) writer.write_make_initial_run() # First hit is for breakpoint reached via a stack frame that doesn't have source. @@ -2246,32 +2408,31 @@ def test_linecache_xml(case_setup, tmpdir): writer.write_get_thread_stack(hit.thread_id) msg = writer.wait_for_get_thread_stack_message() frame_ids = set() - for frame in msg.thread.frame: - if frame['file'] == '': - frame_ids.add(frame['id']) + for frame in msg.thread.frame: + if frame["file"] == "": + frame_ids.add(frame["id"]) assert len(frame_ids) == 2 for frame_id in frame_ids: writer.write_load_source_from_frame_id(frame_id) writer.wait_for_message( - lambda msg: - '%s\t' % CMD_LOAD_SOURCE_FROM_FRAME_ID in msg and ( - "[x for x in range(10)]" in msg and "def somemethod():" in msg - ) - , expect_xml=False) + lambda msg: "%s\t" % CMD_LOAD_SOURCE_FROM_FRAME_ID in msg + and ("[x for x in range(10)]" in msg and "def somemethod():" in msg), + expect_xml=False, + ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") def test_show_bytecode_xml(case_setup, tmpdir): from _pydevd_bundle.pydevd_comm_constants import CMD_LOAD_SOURCE_FROM_FRAME_ID - with case_setup.test_file('_debugger_case_show_bytecode.py') as writer: - writer.write_add_breakpoint(writer.get_line_index_with_content('breakpoint')) + with case_setup.test_file("_debugger_case_show_bytecode.py") as writer: + writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) writer.write_make_initial_run() # First hit is for breakpoint reached via a stack frame that doesn't have source. @@ -2280,20 +2441,17 @@ def test_show_bytecode_xml(case_setup, tmpdir): writer.write_get_thread_stack(hit.thread_id) msg = writer.wait_for_get_thread_stack_message() frame_ids = set() - for frame in msg.thread.frame: - if frame['file'] == '': - frame_ids.add(frame['id']) + for frame in msg.thread.frame: + if frame["file"] == "": + frame_ids.add(frame["id"]) assert len(frame_ids) == 2 for frame_id in frame_ids: writer.write_load_source_from_frame_id(frame_id) writer.wait_for_message( - lambda msg: - '%s\t' % CMD_LOAD_SOURCE_FROM_FRAME_ID in msg and ( - "MyClass" in msg or "foo()" in msg - ) - , expect_xml=False) + lambda msg: "%s\t" % CMD_LOAD_SOURCE_FROM_FRAME_ID in msg and ("MyClass" in msg or "foo()" in msg), expect_xml=False + ) writer.write_run_thread(hit.thread_id) @@ -2301,23 +2459,23 @@ def test_show_bytecode_xml(case_setup, tmpdir): def test_evaluate_errors(case_setup): - with case_setup.test_file('_debugger_case_local_variables.py') as writer: - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here'), 'Call') + with case_setup.test_file("_debugger_case_local_variables.py") as writer: + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here"), "Call") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() thread_id = hit.thread_id frame_id = hit.frame_id - writer.write_evaluate_expression('%s\t%s\t%s' % (thread_id, frame_id, 'LOCAL'), 'name_error') + writer.write_evaluate_expression("%s\t%s\t%s" % (thread_id, frame_id, "LOCAL"), "name_error") writer.wait_for_evaluation('' + assert msg.thread.frame["name"] == "" else: assert len(msg.thread.frame) > 1 # Stopped in threading (must have back frames). - assert msg.thread.frame[0]['name'] == 'method' + assert msg.thread.frame[0]["name"] == "method" writer.write_run_thread(hit.thread_id) @@ -2466,42 +2628,39 @@ def _ignore_stderr_line(line): def test_case_dump_threads_to_stderr(case_setup): - from tests_python.debugger_unittest import wait_for_condition def additional_output_checks(writer, stdout, stderr): assert is_stderr_ok(stderr), make_error_msg(stderr) def make_error_msg(stderr): - return 'Did not find thread dump in stderr. stderr:\n%s' % (stderr,) + return "Did not find thread dump in stderr. stderr:\n%s" % (stderr,) def is_stderr_ok(stderr): - return 'Thread Dump' in stderr and 'Thread pydevd.CommandThread (daemon: True, pydevd thread: True)' in stderr + return "Thread Dump" in stderr and "Thread pydevd.CommandThread (daemon: True, pydevd thread: True)" in stderr - with case_setup.test_file( - '_debugger_case_get_thread_stack.py', additional_output_checks=additional_output_checks) as writer: + with case_setup.test_file("_debugger_case_get_thread_stack.py", additional_output_checks=additional_output_checks) as writer: writer.write_add_breakpoint(12, None) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_BREAKPOINT) writer.write_dump_threads() - wait_for_condition( - lambda: is_stderr_ok(writer.get_stderr()), - lambda: make_error_msg(writer.get_stderr()) - ) + wait_for_condition(lambda: is_stderr_ok(writer.get_stderr()), lambda: make_error_msg(writer.get_stderr())) writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_stop_on_start_regular(case_setup): + if TODO_PYPY: + raise pytest.skip("Not ok in pypy") - with case_setup.test_file('_debugger_case_simple_calls.py') as writer: + with case_setup.test_file("_debugger_case_simple_calls.py") as writer: writer.write_stop_on_start() writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file='_debugger_case_simple_calls.py', line=1) + hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file="_debugger_case_simple_calls.py", line=1) writer.write_run_thread(hit.thread_id) @@ -2511,10 +2670,10 @@ def test_stop_on_start_regular(case_setup): def _get_breakpoint_cases(): if sys.version_info >= (3, 7): # Just check breakpoint() - return ('_debugger_case_breakpoint.py',) + return ("_debugger_case_breakpoint.py",) else: # Check breakpoint() and sys.__breakpointhook__ replacement. - return ('_debugger_case_breakpoint.py', '_debugger_case_breakpoint2.py') + return ("_debugger_case_breakpoint.py", "_debugger_case_breakpoint2.py") @pytest.mark.parametrize("filename", _get_breakpoint_cases()) @@ -2522,7 +2681,8 @@ def test_py_37_breakpoint(case_setup, filename): with case_setup.test_file(filename) as writer: writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(file=filename, line=3) + hit = writer.wait_for_breakpoint_hit(file=filename) + assert hit.line in (3, 6), "Expected hit in line 3 or 6. Found at: %s" % (hit.line,) writer.write_run_thread(hit.thread_id) @@ -2532,15 +2692,15 @@ def test_py_37_breakpoint(case_setup, filename): def _get_generator_cases(): # On py3 we should check both versions. return ( - '_debugger_case_generator_py2.py', - '_debugger_case_generator_py3.py', + "_debugger_case_generator_py2.py", + "_debugger_case_generator_py3.py", ) @pytest.mark.parametrize("filename", _get_generator_cases()) def test_generator_cases(case_setup, filename): with case_setup.test_file(filename) as writer: - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() @@ -2551,12 +2711,14 @@ def test_generator_cases(case_setup, filename): def test_stop_on_start_m_switch(case_setup_m_switch): + if TODO_PYPY: + raise pytest.skip("Not ok in pypy") with case_setup_m_switch.test_file() as writer: writer.write_stop_on_start() writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file='_debugger_case_m_switch.py', line=1) + hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file="_debugger_case_m_switch.py", line=1) writer.write_run_thread(hit.thread_id) @@ -2564,83 +2726,76 @@ def test_stop_on_start_m_switch(case_setup_m_switch): def test_stop_on_start_entry_point(case_setup_m_switch_entry_point): - with case_setup_m_switch_entry_point.test_file() as writer: writer.write_stop_on_start() writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file='_debugger_case_module_entry_point.py', line=1) + hit = writer.wait_for_breakpoint_hit(REASON_STOP_ON_START, file="_debugger_case_module_entry_point.py", line=1) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Not working properly on Jython (needs investigation).') +@pytest.mark.skipif(IS_JYTHON, reason="Not working properly on Jython (needs investigation).") def test_debug_zip_files(case_setup, tmpdir): - def get_environ(writer): env = os.environ.copy() - curr_pythonpath = env.get('PYTHONPATH', '') + curr_pythonpath = env.get("PYTHONPATH", "") - curr_pythonpath = str(tmpdir.join('myzip.zip')) + os.pathsep + curr_pythonpath - curr_pythonpath = str(tmpdir.join('myzip2.egg!')) + os.pathsep + curr_pythonpath - env['PYTHONPATH'] = curr_pythonpath + curr_pythonpath = str(tmpdir.join("myzip.zip")) + os.pathsep + curr_pythonpath + curr_pythonpath = str(tmpdir.join("myzip2.egg!")) + os.pathsep + curr_pythonpath + env["PYTHONPATH"] = curr_pythonpath - env["IDE_PROJECT_ROOTS"] = str(tmpdir.join('myzip.zip')) + env["IDE_PROJECT_ROOTS"] = str(tmpdir.join("myzip.zip")) return env import zipfile - zip_file = zipfile.ZipFile( - str(tmpdir.join('myzip.zip')), 'w') - zip_file.writestr('zipped/__init__.py', '') - zip_file.writestr('zipped/zipped_contents.py', 'def call_in_zip():\n return 1') + + zip_file = zipfile.ZipFile(str(tmpdir.join("myzip.zip")), "w") + zip_file.writestr("zipped/__init__.py", "") + zip_file.writestr("zipped/zipped_contents.py", "def call_in_zip():\n return 1") zip_file.close() - zip_file = zipfile.ZipFile( - str(tmpdir.join('myzip2.egg!')), 'w') - zip_file.writestr('zipped2/__init__.py', '') - zip_file.writestr('zipped2/zipped_contents2.py', 'def call_in_zip2():\n return 1') + zip_file = zipfile.ZipFile(str(tmpdir.join("myzip2.egg!")), "w") + zip_file.writestr("zipped2/__init__.py", "") + zip_file.writestr("zipped2/zipped_contents2.py", "def call_in_zip2():\n return 1") zip_file.close() - with case_setup.test_file('_debugger_case_zip_files.py', get_environ=get_environ) as writer: - writer.write_add_breakpoint( - 2, - 'None', - filename=os.path.join(str(tmpdir.join('myzip.zip')), 'zipped', 'zipped_contents.py') - ) + with case_setup.test_file("_debugger_case_zip_files.py", get_environ=get_environ) as writer: + writer.write_add_breakpoint(2, "None", filename=os.path.join(str(tmpdir.join("myzip.zip")), "zipped", "zipped_contents.py")) - writer.write_add_breakpoint( - 2, - 'None', - filename=os.path.join(str(tmpdir.join('myzip2.egg!')), 'zipped2', 'zipped_contents2.py') - ) + writer.write_add_breakpoint(2, "None", filename=os.path.join(str(tmpdir.join("myzip2.egg!")), "zipped2", "zipped_contents2.py")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() - assert hit.name == 'call_in_zip' + assert hit.name == "call_in_zip" writer.write_run_thread(hit.thread_id) hit = writer.wait_for_breakpoint_hit() - assert hit.name == 'call_in_zip2' + assert hit.name == "call_in_zip2" writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') -@pytest.mark.parametrize('file_to_check', [ - '_debugger_case_multiprocessing_2.py', - '_debugger_case_multiprocessing.py', - '_debugger_case_python_c.py', - '_debugger_case_multiprocessing_pool.py' -]) +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") +@pytest.mark.parametrize( + "file_to_check", + [ + "_debugger_case_multiprocessing_2.py", + "_debugger_case_multiprocessing.py", + "_debugger_case_python_c.py", + "_debugger_case_multiprocessing_pool.py", + ], +) def test_multiprocessing_simple(case_setup_multiprocessing, file_to_check): import threading from tests_python.debugger_unittest import AbstractWriterThread + with case_setup_multiprocessing.test_file(file_to_check) as writer: - break1_line = writer.get_line_index_with_content('break 1 here') - break2_line = writer.get_line_index_with_content('break 2 here') + break1_line = writer.get_line_index_with_content("break 1 here") + break2_line = writer.get_line_index_with_content("break 2 here") writer.write_add_breakpoint(break1_line) writer.write_add_breakpoint(break2_line) @@ -2648,15 +2803,14 @@ def test_multiprocessing_simple(case_setup_multiprocessing, file_to_check): server_socket = writer.server_socket class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread - expected_connections = 1 + + expected_connections = 2 if sys.platform == "darwin" else 1 for _ in range(expected_connections): server_socket.listen(1) @@ -2664,7 +2818,7 @@ def run(self): new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -2686,20 +2840,21 @@ def run(self): hit2 = writer.wait_for_breakpoint_hit() secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") writer.write_run_thread(hit2.thread_id) writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') -@pytest.mark.parametrize('count', range(5)) # Call multiple times to exercise timing issues. +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") +@pytest.mark.parametrize("count", range(5)) # Call multiple times to exercise timing issues. def test_multiprocessing_with_stopped_breakpoints(case_setup_multiprocessing, count, debugger_runner_simple): import threading from tests_python.debugger_unittest import AbstractWriterThread - with case_setup_multiprocessing.test_file('_debugger_case_multiprocessing_stopped_threads.py') as writer: - break_main_line = writer.get_line_index_with_content('break in main here') - break_thread_line = writer.get_line_index_with_content('break in thread here') - break_process_line = writer.get_line_index_with_content('break in process here') + + with case_setup_multiprocessing.test_file("_debugger_case_multiprocessing_stopped_threads.py") as writer: + break_main_line = writer.get_line_index_with_content("break in main here") + break_thread_line = writer.get_line_index_with_content("break in thread here") + break_process_line = writer.get_line_index_with_content("break in process here") writer.write_add_breakpoint(break_main_line) writer.write_add_breakpoint(break_thread_line) @@ -2709,27 +2864,26 @@ def test_multiprocessing_with_stopped_breakpoints(case_setup_multiprocessing, co listening_event = threading.Event() class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + server_socket.listen(1) self.server_socket = server_socket listening_event.set() - writer.log.append(' *** Multiprocess waiting on server_socket.accept()') + writer.log.append(" *** Multiprocess waiting on server_socket.accept()") new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() - writer.log.append(' *** Multiprocess started ReaderThread') + writer.log.append(" *** Multiprocess started ReaderThread") writer2 = SecondaryProcessWriterThread() - writer2._WRITE_LOG_PREFIX = ' *** Multiprocess write: ' + writer2._WRITE_LOG_PREFIX = " *** Multiprocess write: " writer2.log = writer.log writer2.reader_thread = reader_thread @@ -2763,7 +2917,7 @@ def run(self): secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") writer.write_run_thread(hit2.thread_id) writer.write_run_thread(main_hit.thread_id) @@ -2774,27 +2928,23 @@ def run(self): writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') -@pytest.mark.parametrize('target', [ - '_debugger_case_quoting.py', - '_debugger_case_subprocess_zip.py' -]) +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") +@pytest.mark.parametrize("target", ["_debugger_case_quoting.py", "_debugger_case_subprocess_zip.py"]) def test_subprocess_quoted_args(case_setup_multiprocessing, target): from tests_python.debugger_unittest import AbstractWriterThread + with case_setup_multiprocessing.test_file(target) as writer: - break_subprocess_line = writer.get_line_index_with_content('break here') + break_subprocess_line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(break_subprocess_line) server_socket = writer.server_socket class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread # Note: on linux on Python 2 because on Python 2 CPython subprocess.call will actually @@ -2811,7 +2961,7 @@ def run(self): new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -2831,32 +2981,33 @@ def run(self): secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") writer.finished_ok = True def _attach_to_writer_pid(writer): import pydevd + assert writer.process is not None def attach(): - attach_pydevd_file = os.path.join(os.path.dirname(pydevd.__file__), 'pydevd_attach_to_process', 'attach_pydevd.py') - subprocess.call([sys.executable, attach_pydevd_file, '--pid', str(writer.process.pid), '--port', str(writer.port)]) + attach_pydevd_file = os.path.join(os.path.dirname(pydevd.__file__), "pydevd_attach_to_process", "attach_pydevd.py") + subprocess.call([sys.executable, attach_pydevd_file, "--pid", str(writer.process.pid), "--port", str(writer.port)]) threading.Thread(target=attach).start() wait_for_condition(lambda: writer.finished_initialization) -@pytest.mark.skipif(not IS_CPYTHON or IS_MAC, reason='CPython only test (brittle on Mac).') -@pytest.mark.parametrize('reattach', [True, False]) +@pytest.mark.skipif(not IS_CPYTHON or IS_MAC or not SUPPORT_ATTACH_TO_PID, reason="CPython only test (brittle on Mac).") +@pytest.mark.parametrize("reattach", [True, False]) def test_attach_to_pid_no_threads(case_setup_remote, reattach): - with case_setup_remote.test_file('_debugger_case_attach_to_pid_simple.py', wait_for_port=False) as writer: + with case_setup_remote.test_file("_debugger_case_attach_to_pid_simple.py", wait_for_port=False) as writer: time.sleep(1) # Give it some time to initialize to get to the while loop. _attach_to_writer_pid(writer) - bp_line = writer.get_line_index_with_content('break here') + bp_line = writer.get_line_index_with_content("break here") bp_id = writer.write_add_breakpoint(bp_line) writer.write_make_initial_run() @@ -2873,11 +3024,11 @@ def test_attach_to_pid_no_threads(case_setup_remote, reattach): t = threading.Thread(target=writer.start_socket) t.start() - wait_for_condition(lambda: hasattr(writer, 'port')) + wait_for_condition(lambda: hasattr(writer, "port")) time.sleep(1) writer.process = writer.process _attach_to_writer_pid(writer) - wait_for_condition(lambda: hasattr(writer, 'reader_thread')) + wait_for_condition(lambda: hasattr(writer, "reader_thread")) time.sleep(1) bp_id = writer.write_add_breakpoint(bp_line) @@ -2885,7 +3036,7 @@ def test_attach_to_pid_no_threads(case_setup_remote, reattach): hit = writer.wait_for_breakpoint_hit(line=bp_line) - writer.write_change_variable(hit.thread_id, hit.frame_id, 'wait', 'False') + writer.write_change_variable(hit.thread_id, hit.frame_id, "wait", "False") writer.wait_for_var('' + assert hit.name == "" writer.write_step_return_my_code(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(TODO_PY311, reason='Needs bytecode support in Python 3.11') def test_smart_step_into_case1(case_setup): - with case_setup.test_file('_debugger_case_smart_step_into.py') as writer: - line = writer.get_line_index_with_content('break here') + with case_setup.test_file("_debugger_case_smart_step_into.py") as writer: + line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(line) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(line=line) @@ -3615,22 +3775,28 @@ def test_smart_step_into_case1(case_setup): found = writer.get_step_into_variants(hit.thread_id, hit.frame_id, line, line) # Remove the offset/childOffset to compare (as it changes for each python version) - assert [x[:-2] for x in found] == [ - ('bar', 'false', '14', '1'), ('foo', 'false', '14', '1'), ('call_outer', 'false', '14', '1')] + found_info = [x[:-2] for x in found] + if IS_PY311_OR_GREATER: + assert found_info == [ + ("bar()", "false", "14", "1"), + ("foo(bar())", "false", "14", "1"), + ("call_outer(foo(bar()))", "false", "14", "1"), + ] + else: + assert found_info == [("bar", "false", "14", "1"), ("foo", "false", "14", "1"), ("call_outer", "false", "14", "1")] # Note: this is just using the name, not really taking using the context. - writer.write_smart_step_into(hit.thread_id, line, 'foo') + writer.write_smart_step_into(hit.thread_id, line, "foo") hit = writer.wait_for_breakpoint_hit(reason=CMD_SMART_STEP_INTO) - assert hit.line == writer.get_line_index_with_content('on foo mark') + assert hit.line == writer.get_line_index_with_content("on foo mark") writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(TODO_PY311, reason='Needs bytecode support in Python 3.11') def test_smart_step_into_case2(case_setup): - with case_setup.test_file('_debugger_case_smart_step_into2.py') as writer: - line = writer.get_line_index_with_content('break here') + with case_setup.test_file("_debugger_case_smart_step_into2.py") as writer: + line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(line) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(line=line) @@ -3640,26 +3806,27 @@ def test_smart_step_into_case2(case_setup): # Note: we have multiple 'foo' calls, so, we have to differentiate to # know in which one we want to stop. OFFSET_POS = 4 - writer.write_smart_step_into(hit.thread_id, 'offset=' + found[2][OFFSET_POS], 'foo') + writer.write_smart_step_into(hit.thread_id, "offset=" + found[2][OFFSET_POS], "foo") hit = writer.wait_for_breakpoint_hit(reason=CMD_SMART_STEP_INTO) - assert hit.line == writer.get_line_index_with_content('on foo mark') + assert hit.line == writer.get_line_index_with_content("on foo mark") writer.write_get_frame(hit.thread_id, hit.frame_id) - writer.wait_for_var([ - ( - '' + assert hit.name == "" writer.write_step_over_my_code(hit.thread_id) hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_OVER_MY_CODE) - assert hit.name == '' + assert hit.name == "" writer.write_step_over_my_code(hit.thread_id) writer.finished_ok = True @@ -3716,9 +3883,9 @@ def test_step_over_my_code(case_setup): @pytest.fixture( params=[ - 'step_over', - 'step_return', - 'step_in', + "step_over", + "step_return", + "step_in", ] ) def step_method(request): @@ -3726,109 +3893,102 @@ def step_method(request): def test_sysexit_on_filtered_file(case_setup): - def get_environ(writer): env = os.environ.copy() - env.update({'PYDEVD_FILTERS': json.dumps({'**/_debugger_case_sysexit.py': True})}) + env.update({"PYDEVD_FILTERS": json.dumps({"**/_debugger_case_sysexit.py": True})}) return env - with case_setup.test_file('_debugger_case_sysexit.py', get_environ=get_environ, EXPECTED_RETURNCODE=1) as writer: + with case_setup.test_file("_debugger_case_sysexit.py", get_environ=get_environ, EXPECTED_RETURNCODE=1) as writer: writer.write_add_exception_breakpoint_with_policy( - 'SystemExit', + "SystemExit", notify_on_handled_exceptions=1, # Notify multiple times notify_on_unhandled_exceptions=1, - ignore_libraries=0 + ignore_libraries=0, ) writer.write_make_initial_run() writer.finished_ok = True -@pytest.mark.parametrize("scenario", [ - 'handled_once', - 'handled_multiple', - 'unhandled', -]) +@pytest.mark.parametrize( + "scenario", + [ + "handled_once", + "handled_multiple", + "unhandled", + ], +) def test_exception_not_on_filtered_file(case_setup, scenario): - def get_environ(writer): env = os.environ.copy() - env.update({'PYDEVD_FILTERS': json.dumps({'**/other.py': True})}) + env.update({"PYDEVD_FILTERS": json.dumps({"**/other.py": True})}) return env def check_test_suceeded_msg(writer, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'raise RuntimeError' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "raise RuntimeError" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) with case_setup.test_file( - 'my_code/my_code_exception.py', - get_environ=get_environ, - EXPECTED_RETURNCODE='any', - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - ) as writer: - - if scenario == 'handled_once': + "my_code/my_code_exception.py", + get_environ=get_environ, + EXPECTED_RETURNCODE="any", + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: + if scenario == "handled_once": writer.write_add_exception_breakpoint_with_policy( - 'RuntimeError', + "RuntimeError", notify_on_handled_exceptions=2, # Notify only once notify_on_unhandled_exceptions=0, - ignore_libraries=0 + ignore_libraries=0, ) - elif scenario == 'handled_multiple': + elif scenario == "handled_multiple": writer.write_add_exception_breakpoint_with_policy( - 'RuntimeError', + "RuntimeError", notify_on_handled_exceptions=1, # Notify multiple times notify_on_unhandled_exceptions=0, - ignore_libraries=0 + ignore_libraries=0, ) - elif scenario == 'unhandled': + elif scenario == "unhandled": writer.write_add_exception_breakpoint_with_policy( - 'RuntimeError', - notify_on_handled_exceptions=0, - notify_on_unhandled_exceptions=1, - ignore_libraries=0 + "RuntimeError", notify_on_handled_exceptions=0, notify_on_unhandled_exceptions=1, ignore_libraries=0 ) writer.write_make_initial_run() - for _i in range(3 if scenario == 'handled_multiple' else 1): - hit = writer.wait_for_breakpoint_hit( - REASON_UNCAUGHT_EXCEPTION if scenario == 'unhandled' else REASON_CAUGHT_EXCEPTION) + for _i in range(3 if scenario == "handled_multiple" else 1): + hit = writer.wait_for_breakpoint_hit(REASON_UNCAUGHT_EXCEPTION if scenario == "unhandled" else REASON_CAUGHT_EXCEPTION) writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_exception_on_filtered_file(case_setup): - def get_environ(writer): env = os.environ.copy() - env.update({'PYDEVD_FILTERS': json.dumps({'**/other.py': True})}) + env.update({"PYDEVD_FILTERS": json.dumps({"**/other.py": True})}) return env def check_test_suceeded_msg(writer, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'raise RuntimeError' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "raise RuntimeError" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) with case_setup.test_file( - 'my_code/my_code_exception_on_other.py', - get_environ=get_environ, - EXPECTED_RETURNCODE='any', - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - ) as writer: + "my_code/my_code_exception_on_other.py", + get_environ=get_environ, + EXPECTED_RETURNCODE="any", + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: writer.write_add_exception_breakpoint_with_policy( - 'RuntimeError', + "RuntimeError", notify_on_handled_exceptions=2, # Notify only once notify_on_unhandled_exceptions=1, - ignore_libraries=0 + ignore_libraries=0, ) writer.write_make_initial_run() @@ -3837,60 +3997,62 @@ def additional_output_checks(writer, stdout, stderr): # should be able to see the frames which are part of the project. hit = writer.wait_for_breakpoint_hit( REASON_UNCAUGHT_EXCEPTION, - file='my_code_exception_on_other.py', - line=writer.get_line_index_with_content('other.raise_exception()') + file="my_code_exception_on_other.py", + line=writer.get_line_index_with_content("other.raise_exception()"), ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.parametrize("environ", [ - {'PYDEVD_FILTER_LIBRARIES': '1'}, # Global setting for step over - {'PYDEVD_FILTERS': json.dumps({'**/other.py': True})}, # specify as json - {'PYDEVD_FILTERS': '**/other.py'}, # specify ';' separated list -]) -@pytest.mark.skipif(IS_JYTHON, reason='Flaky on Jython.') +@pytest.mark.parametrize( + "environ", + [ + {"PYDEVD_FILTER_LIBRARIES": "1"}, # Global setting for step over + {"PYDEVD_FILTERS": json.dumps({"**/other.py": True})}, # specify as json + {"PYDEVD_FILTERS": "**/other.py"}, # specify ';' separated list + ], +) +@pytest.mark.skipif(IS_JYTHON, reason="Flaky on Jython.") def test_step_over_my_code_global_settings(case_setup, environ, step_method): - def get_environ(writer): env = os.environ.copy() env.update(environ) return env def do_step(): - if step_method == 'step_over': + if step_method == "step_over": writer.write_step_over(hit.thread_id) return REASON_STEP_OVER # Note: goes from step over to step into - elif step_method == 'step_return': + elif step_method == "step_return": writer.write_step_return(hit.thread_id) return REASON_STEP_RETURN else: - assert step_method == 'step_in' + assert step_method == "step_in" writer.write_step_in(hit.thread_id) return REASON_STEP_INTO - with case_setup.test_file('my_code/my_code.py', get_environ=get_environ) as writer: - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("my_code/my_code.py", get_environ=get_environ) as writer: + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() writer.write_step_in(hit.thread_id) hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO) - assert hit.name == 'callback1' + assert hit.name == "callback1" writer.write_step_in(hit.thread_id) hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO) - assert hit.name == 'callback2' + assert hit.name == "callback2" stop_reason = do_step() hit = writer.wait_for_breakpoint_hit(reason=stop_reason) - assert hit.name == 'callback1' + assert hit.name == "callback1" stop_reason = do_step() hit = writer.wait_for_breakpoint_hit(reason=stop_reason) - assert hit.name == '' + assert hit.name == "" if IS_JYTHON: # Jython may get to exit functions, so, just resume the thread. @@ -3899,13 +4061,13 @@ def do_step(): else: stop_reason = do_step() - if step_method != 'step_return': + if step_method != "step_return": stop_reason = do_step() - if step_method == 'step_over': + if step_method == "step_over": stop_reason = REASON_STEP_OVER hit = writer.wait_for_breakpoint_hit(reason=stop_reason) - assert hit.name == '' + assert hit.name == "" writer.write_step_over(hit.thread_id) @@ -3913,19 +4075,20 @@ def do_step(): def test_step_over_my_code_global_setting_and_explicit_include(case_setup): - def get_environ(writer): env = os.environ.copy() - env.update({ - 'PYDEVD_FILTER_LIBRARIES': '1', # Global setting for in project or not - # specify as json (force include). - 'PYDEVD_FILTERS': json.dumps({'**/other.py': False}) - }) + env.update( + { + "PYDEVD_FILTER_LIBRARIES": "1", # Global setting for in project or not + # specify as json (force include). + "PYDEVD_FILTERS": json.dumps({"**/other.py": False}), + } + ) return env - with case_setup.test_file('my_code/my_code.py', get_environ=get_environ) as writer: - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("my_code/my_code.py", get_environ=get_environ) as writer: + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() @@ -3933,29 +4096,28 @@ def get_environ(writer): hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO) # Although we filtered out non-project files, other.py is explicitly included. - assert hit.name == 'call_me_back1' + assert hit.name == "call_me_back1" writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_access_token(case_setup): - def update_command_line_args(self, args): - i = args.index('--client') + i = args.index("--client") assert i > 0 - args.insert(i, '--access-token') - args.insert(i + 1, 'bar123') - args.insert(i, '--client-access-token') - args.insert(i + 1, 'foo234') + args.insert(i, "--access-token") + args.insert(i + 1, "bar123") + args.insert(i, "--client-access-token") + args.insert(i + 1, "foo234") return args - with case_setup.test_file('_debugger_case_print.py', update_command_line_args=update_command_line_args) as writer: - writer.write_add_breakpoint(1, 'None') # I.e.: should not work (not authenticated). + with case_setup.test_file("_debugger_case_print.py", update_command_line_args=update_command_line_args) as writer: + writer.write_add_breakpoint(1, "None") # I.e.: should not work (not authenticated). - writer.wait_for_message(lambda msg:'Client not authenticated.' in msg, expect_xml=False) + writer.wait_for_message(lambda msg: "Client not authenticated." in msg, expect_xml=False) - writer.write_authenticate(access_token='bar123', client_access_token='foo234') + writer.write_authenticate(access_token="bar123", client_access_token="foo234") writer.write_version() @@ -3965,11 +4127,11 @@ def update_command_line_args(self, args): def test_namedtuple(case_setup): - ''' + """ Check that we don't step into in the namedtuple constructor. - ''' - with case_setup.test_file('_debugger_case_namedtuple.py') as writer: - line = writer.get_line_index_with_content('break here') + """ + with case_setup.test_file("_debugger_case_namedtuple.py") as writer: + line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -3980,8 +4142,7 @@ def test_namedtuple(case_setup): for _ in range(2): expected_line += 1 writer.write_step_in(hit.thread_id) - hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_INTO, file='_debugger_case_namedtuple.py', line=expected_line) + hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO, file="_debugger_case_namedtuple.py", line=expected_line) writer.write_run_thread(hit.thread_id) writer.finished_ok = True @@ -3995,13 +4156,15 @@ def test_matplotlib_activation(case_setup): def get_environ(writer): env = os.environ.copy() - env.update({ - 'IPYTHONENABLE': 'True', - }) + env.update( + { + "IPYTHONENABLE": "True", + } + ) return env - with case_setup.test_file('_debugger_case_matplotlib.py', get_environ=get_environ) as writer: - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("_debugger_case_matplotlib.py", get_environ=get_environ) as writer: + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() for _ in range(3): hit = writer.wait_for_breakpoint_hit() @@ -4011,17 +4174,17 @@ def get_environ(writer): _GENERATOR_FILES = [ - '_debugger_case_generator3.py', - '_debugger_case_generator.py', - '_debugger_case_generator2.py', + "_debugger_case_generator3.py", + "_debugger_case_generator.py", + "_debugger_case_generator2.py", ] -@pytest.mark.parametrize('target_filename', _GENERATOR_FILES) -@pytest.mark.skipif(IS_JYTHON, reason='We do not detect generator returns on Jython.') +@pytest.mark.parametrize("target_filename", _GENERATOR_FILES) +@pytest.mark.skipif(IS_JYTHON, reason="We do not detect generator returns on Jython.") def test_generator_step_over_basic(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break here') + line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4030,43 +4193,41 @@ def test_generator_step_over_basic(case_setup, target_filename): # Note: not using for so that we know which step failed in the ci if it fails. writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('step 1') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("step 1") ) writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('step 2') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("step 2") ) - if IS_PY38_OR_GREATER and target_filename == '_debugger_case_generator2.py': + if IS_PY38_OR_GREATER and target_filename == "_debugger_case_generator2.py": # On py 3.8 it goes back to the return line. writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('return \\') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("return \\") + ) + + if PYDEVD_USE_SYS_MONITORING: + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("generator return") ) writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('step 3') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("step 3") ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.parametrize('target_filename', _GENERATOR_FILES) -@pytest.mark.skipif(IS_JYTHON, reason='We do not detect generator returns on Jython.') +@pytest.mark.parametrize("target_filename", _GENERATOR_FILES) +@pytest.mark.skipif(IS_JYTHON, reason="We do not detect generator returns on Jython.") def test_generator_step_return(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break here') + line = writer.get_line_index_with_content("break here") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4075,49 +4236,44 @@ def test_generator_step_return(case_setup, target_filename): # Note: not using for so that we know which step failed in the ci if it fails. writer.write_step_return(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_RETURN, - file=target_filename, - line=writer.get_line_index_with_content('generator return') + reason=REASON_STEP_RETURN, file=target_filename, line=writer.get_line_index_with_content("generator return") ) writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('step 3') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("step 3") ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_stepin_not_my_code_coroutine(case_setup): - def get_environ(writer): - environ = {'PYDEVD_FILTERS': '{"**/not_my_coroutine.py": true}'} + environ = {"PYDEVD_FILTERS": '{"**/not_my_coroutine.py": true}'} env = os.environ.copy() env.update(environ) return env - with case_setup.test_file('my_code/my_code_coroutine.py', get_environ=get_environ) as writer: - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + with case_setup.test_file("my_code/my_code_coroutine.py", get_environ=get_environ) as writer: + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() writer.write_step_in(hit.thread_id) hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO) - assert hit.name == 'main' + assert hit.name == "main" writer.write_run_thread(hit.thread_id) writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Flaky on Jython') +@pytest.mark.skipif(IS_JYTHON, reason="Flaky on Jython") def test_generator_step_in(case_setup): - with case_setup.test_file('_debugger_case_generator_step_in.py') as writer: - line = writer.get_line_index_with_content('stop 1') + with case_setup.test_file("_debugger_case_generator_step_in.py") as writer: + line = writer.get_line_index_with_content("stop 1") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4127,28 +4283,24 @@ def test_generator_step_in(case_setup): writer.write_step_in(hit.thread_id) kwargs = {} if not IS_JYTHON: - kwargs['line'] = writer.get_line_index_with_content('stop %s' % (i,)) - hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_INTO, - file='_debugger_case_generator_step_in.py', - **kwargs - ) + kwargs["line"] = writer.get_line_index_with_content("stop %s" % (i,)) + hit = writer.wait_for_breakpoint_hit(reason=REASON_STEP_INTO, file="_debugger_case_generator_step_in.py", **kwargs) writer.write_run_thread(hit.thread_id) writer.finished_ok = True @pytest.mark.parametrize( - 'target_filename', + "target_filename", [ - '_debugger_case_asyncio.py', - '_debugger_case_trio.py', - ] + "_debugger_case_asyncio.py", + "_debugger_case_trio.py", + ], ) -@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_asyncio_step_over_basic(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break main') + line = writer.get_line_index_with_content("break main") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4156,9 +4308,7 @@ def test_asyncio_step_over_basic(case_setup, target_filename): writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_OVER, - file=target_filename, - line=writer.get_line_index_with_content('step main') + reason=REASON_STEP_OVER, file=target_filename, line=writer.get_line_index_with_content("step main") ) writer.write_run_thread(hit.thread_id) @@ -4166,41 +4316,44 @@ def test_asyncio_step_over_basic(case_setup, target_filename): @pytest.mark.parametrize( - 'target_filename', + "target_filename", [ - '_debugger_case_asyncio.py', - '_debugger_case_trio.py', - ] + "_debugger_case_asyncio.py", + "_debugger_case_trio.py", + ], ) -@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_asyncio_step_over_end_of_function(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break count 2') + line = writer.get_line_index_with_content("break count 2") writer.write_add_breakpoint(line) writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit() writer.write_step_over(hit.thread_id) + names = ("sleep", "wait_task_rescheduled") + if PYDEVD_USE_SYS_MONITORING: + names = ("main",) hit = writer.wait_for_breakpoint_hit( reason=REASON_STEP_OVER, - name=('sleep', 'wait_task_rescheduled'), + name=names, ) writer.write_run_thread(hit.thread_id) writer.finished_ok = True @pytest.mark.parametrize( - 'target_filename', + "target_filename", [ - '_debugger_case_asyncio.py', - '_debugger_case_trio.py', - ] + "_debugger_case_asyncio.py", + "_debugger_case_trio.py", + ], ) -@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_asyncio_step_in(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break count 1') + line = writer.get_line_index_with_content("break count 1") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4208,15 +4361,17 @@ def test_asyncio_step_in(case_setup, target_filename): writer.write_step_return(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_RETURN, - file=target_filename, - line=writer.get_line_index_with_content('break main') + reason=REASON_STEP_RETURN, file=target_filename, line=writer.get_line_index_with_content("break main") ) writer.write_step_in(hit.thread_id) + names = ("sleep", "wait_task_rescheduled") + if PYDEVD_USE_SYS_MONITORING: + names = ("main",) + hit = writer.wait_for_breakpoint_hit( reason=REASON_STEP_INTO, - name=('sleep', 'wait_task_rescheduled'), + name=names, ) writer.write_run_thread(hit.thread_id) @@ -4224,16 +4379,16 @@ def test_asyncio_step_in(case_setup, target_filename): @pytest.mark.parametrize( - 'target_filename', + "target_filename", [ - '_debugger_case_asyncio.py', - '_debugger_case_trio.py', - ] + "_debugger_case_asyncio.py", + "_debugger_case_trio.py", + ], ) -@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_CPYTHON or not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_asyncio_step_return(case_setup, target_filename): with case_setup.test_file(target_filename) as writer: - line = writer.get_line_index_with_content('break count 1') + line = writer.get_line_index_with_content("break count 1") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4241,9 +4396,7 @@ def test_asyncio_step_return(case_setup, target_filename): writer.write_step_return(hit.thread_id) hit = writer.wait_for_breakpoint_hit( - reason=REASON_STEP_RETURN, - file=target_filename, - line=writer.get_line_index_with_content('break main') + reason=REASON_STEP_RETURN, file=target_filename, line=writer.get_line_index_with_content("break main") ) writer.write_run_thread(hit.thread_id) @@ -4251,248 +4404,257 @@ def test_asyncio_step_return(case_setup, target_filename): def test_notify_stdin(case_setup, pyfile): - @pyfile def case_stdin(): import sys - print('Write something:') + + print("Write something:") contents = sys.stdin.readline() - print('Found: ' + contents) + print("Found: " + contents) - print('TEST SUCEEDED') + print("TEST SUCEEDED") def additional_output_checks(writer, stdout, stderr): - assert 'Found: foo' in stdout + assert "Found: foo" in stdout with case_setup.test_file( - case_stdin, - additional_output_checks=additional_output_checks, - ) as writer: - writer.write_make_initial_run() - msg = writer.wait_for_message(CMD_INPUT_REQUESTED, expect_xml=False) - assert msg.split('\t')[-1] == 'True' - process = writer.process - process.stdin.write(b'foo\n') - process.stdin.flush() - msg = writer.wait_for_message(CMD_INPUT_REQUESTED, expect_xml=False) - assert msg.split('\t')[-1] == 'False' + case_stdin, + additional_output_checks=additional_output_checks, + ) as writer: + writer.write_make_initial_run() + msg = writer.wait_for_message(CMD_INPUT_REQUESTED, expect_xml=False) + assert msg.split("\t")[-1] == "True" + process = writer.process + process.stdin.write(b"foo\n") + process.stdin.flush() + msg = writer.wait_for_message(CMD_INPUT_REQUESTED, expect_xml=False) + assert msg.split("\t")[-1] == "False" - writer.finished_ok = True + writer.finished_ok = True def test_frame_eval_mode_corner_case_01(case_setup): - with case_setup.test_file( - 'wrong_bytecode/_debugger_case_wrong_bytecode.py', - ) as writer: - line = writer.get_line_index_with_content('break here') - writer.write_add_breakpoint(line) - writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('break here'), file='_debugger_case_wrong_bytecode.py') - writer.write_step_over(hit.thread_id) + "wrong_bytecode/_debugger_case_wrong_bytecode.py", + ) as writer: + line = writer.get_line_index_with_content("break here") + writer.write_add_breakpoint(line) + writer.write_make_initial_run() + hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content("break here"), file="_debugger_case_wrong_bytecode.py") + writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('step 1'), file='_debugger_case_wrong_bytecode.py', reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + line=writer.get_line_index_with_content("step 1"), file="_debugger_case_wrong_bytecode.py", reason=REASON_STEP_OVER + ) + writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('step 2'), file='_debugger_case_wrong_bytecode.py', reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + line=writer.get_line_index_with_content("step 2"), file="_debugger_case_wrong_bytecode.py", reason=REASON_STEP_OVER + ) + writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('step 3'), file='_debugger_case_wrong_bytecode.py', reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + line=writer.get_line_index_with_content("step 3"), file="_debugger_case_wrong_bytecode.py", reason=REASON_STEP_OVER + ) + writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('step 4'), file='_debugger_case_wrong_bytecode.py', reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + line=writer.get_line_index_with_content("step 4"), file="_debugger_case_wrong_bytecode.py", reason=REASON_STEP_OVER + ) + writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=writer.get_line_index_with_content('step 5'), file='_debugger_case_wrong_bytecode.py', reason=REASON_STEP_OVER) - writer.write_run_thread(hit.thread_id) + hit = writer.wait_for_breakpoint_hit( + line=writer.get_line_index_with_content("step 5"), file="_debugger_case_wrong_bytecode.py", reason=REASON_STEP_OVER + ) + writer.write_run_thread(hit.thread_id) - writer.finished_ok = True + writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_frame_eval_mode_corner_case_02(case_setup): - with case_setup.test_file( - '_bytecode_super.py', - ) as writer: - line = writer.get_line_index_with_content('break here') - writer.write_add_breakpoint(line) - writer.write_make_initial_run() + "_bytecode_super.py", + ) as writer: + line = writer.get_line_index_with_content("break here") + writer.write_add_breakpoint(line) + writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(line=line, file='_bytecode_super.py') + hit = writer.wait_for_breakpoint_hit(line=line, file="_bytecode_super.py") - writer.write_run_thread(hit.thread_id) + writer.write_run_thread(hit.thread_id) - writer.finished_ok = True + writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_frame_eval_mode_corner_case_03(case_setup): - with case_setup.test_file( - '_bytecode_constructs.py', - ) as writer: - line = writer.get_line_index_with_content('break while') - writer.write_add_breakpoint(line) - writer.write_make_initial_run() + "_bytecode_constructs.py", + ) as writer: + line = writer.get_line_index_with_content("break while") + writer.write_add_breakpoint(line) + writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(line=line) + hit = writer.wait_for_breakpoint_hit(line=line) - writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=line + 1, reason=REASON_STEP_OVER) + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(line=line + 1, reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) # i.e.: check that the jump target is still ok. - hit = writer.wait_for_breakpoint_hit(line=line, reason=REASON_STOP_ON_BREAKPOINT) + writer.write_step_over(hit.thread_id) # i.e.: check that the jump target is still ok. + hit = writer.wait_for_breakpoint_hit(line=line, reason=REASON_STOP_ON_BREAKPOINT) + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(line=line + 1, reason=REASON_STEP_OVER) + + if TODO_PY312: writer.write_step_over(hit.thread_id) hit = writer.wait_for_breakpoint_hit(line=line + 1, reason=REASON_STEP_OVER) - writer.write_step_over(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=line, reason=REASON_STOP_ON_BREAKPOINT) + writer.write_step_over(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(line=line, reason=REASON_STOP_ON_BREAKPOINT) - writer.write_run_thread(hit.thread_id) + writer.write_run_thread(hit.thread_id) - writer.finished_ok = True + writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") def test_frame_eval_mode_corner_case_04(case_setup): - with case_setup.test_file( - '_bytecode_constructs.py', - ) as writer: - line = writer.get_line_index_with_content('break for') - writer.write_add_breakpoint(line) - writer.write_make_initial_run() - - hit = writer.wait_for_breakpoint_hit(line=line) - writer.write_run_thread(hit.thread_id) - - hit = writer.wait_for_breakpoint_hit(line=line) - writer.write_run_thread(hit.thread_id) + "_bytecode_constructs.py", + ) as writer: + line = writer.get_line_index_with_content("break for") + writer.write_add_breakpoint(line) + writer.write_make_initial_run() + for i in range(3): hit = writer.wait_for_breakpoint_hit(line=line) writer.write_run_thread(hit.thread_id) - writer.finished_ok = True + writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") @pytest.mark.parametrize( - 'break_name', + "break_name", [ - 'break except', - 'break with', - 'break try 1', - 'break try 2', - 'break finally 1', - 'break except 2', - 'break finally 2', - 'break finally 3', - 'break finally 4', - 'break in dict', - 'break else', - ] + "break except", + "break with", + "break try 1", + "break try 2", + "break finally 1", + "break except 2", + "break finally 2", + "break finally 3", + "break finally 4", + "break in dict", + "break else", + ], ) def test_frame_eval_mode_corner_case_many(case_setup, break_name): - if break_name == 'break finally 4' and sys.version_info[:2] == (3, 9): + if break_name == "break finally 4" and sys.version_info[:2] == (3, 9): # This case is currently failing in Python 3.9 return # Check the constructs where we stop only once and proceed. with case_setup.test_file( - '_bytecode_constructs.py', - ) as writer: - line = writer.get_line_index_with_content(break_name) - writer.write_add_breakpoint(line) - writer.write_make_initial_run() + "_bytecode_constructs.py", + ) as writer: + line = writer.get_line_index_with_content(break_name) + writer.write_add_breakpoint(line) + writer.write_make_initial_run() - hit = writer.wait_for_breakpoint_hit(line=line) - writer.write_run_thread(hit.thread_id) + hit = writer.wait_for_breakpoint_hit(line=line) + writer.write_run_thread(hit.thread_id) - if break_name == 'break with': - if sys.version_info[:2] >= (3, 10): - # On Python 3.10 it'll actually backtrack for the - # with and thus will execute the line where the - # 'with' statement was started again. - hit = writer.wait_for_breakpoint_hit(line=line) - writer.write_run_thread(hit.thread_id) + if break_name == "break with": + if sys.version_info[:2] >= (3, 10): + # On Python 3.10 it'll actually backtrack for the + # with and thus will execute the line where the + # 'with' statement was started again. + hit = writer.wait_for_breakpoint_hit(line=line) + writer.write_run_thread(hit.thread_id) - writer.finished_ok = True + writer.finished_ok = True check_shadowed = [ ( - u''' + """ if __name__ == '__main__': import queue print(queue) -''', - 'queue.py', - u'shadowed = True\n' +""", + "queue.py", + "shadowed = True\n", ), - ( - u''' + """ if __name__ == '__main__': import queue print(queue) -''', - 'queue.py', - u'raise AssertionError("error on import")' - ) +""", + "queue.py", + 'raise AssertionError("error on import")', + ), ] -@pytest.mark.parametrize('module_name_and_content', check_shadowed) +@pytest.mark.parametrize("module_name_and_content", check_shadowed) def test_debugger_shadowed_imports(case_setup, tmpdir, module_name_and_content): main_content, module_name, content = module_name_and_content - target = tmpdir.join('main.py') + target = tmpdir.join("main.py") shadowed = tmpdir.join(module_name) - target.write_text(main_content, encoding='utf-8') + target.write_text(main_content, encoding="utf-8") - shadowed.write_text(content, encoding='utf-8') + shadowed.write_text(content, encoding="utf-8") def get_environ(writer): env = os.environ.copy() - env.update({ - 'PYTHONPATH': str(tmpdir), - }) + env.update( + { + "PYTHONPATH": str(tmpdir), + } + ) return env try: with case_setup.test_file( - str(target), - get_environ=get_environ, - wait_for_initialization=False, - ) as writer: + str(target), + get_environ=get_environ, + wait_for_initialization=False, + ) as writer: writer.write_make_initial_run() except AssertionError: pass # This is expected as pydevd didn't start-up. - assert ('the module "%s" could not be imported because it is shadowed by:' % (module_name.split('.')[0])) in writer.get_stderr() + assert ('the module "%s" could not be imported because it is shadowed by:' % (module_name.split(".")[0])) in writer.get_stderr() def test_debugger_hide_pydevd_threads(case_setup, pyfile): + if TODO_PYPY: + raise pytest.skip("Not ok in pypy") @pyfile def target_file(): import threading from _pydevd_bundle import pydevd_constants + found_pydevd_thread = False for t in threading.enumerate(): - if getattr(t, 'is_pydev_daemon_thread', False): + if getattr(t, "is_pydev_daemon_thread", False): found_pydevd_thread = True if pydevd_constants.IS_CPYTHON: assert not found_pydevd_thread else: assert found_pydevd_thread - print('TEST SUCEEDED') + print("TEST SUCEEDED") with case_setup.test_file(target_file) as writer: - line = writer.get_line_index_with_content('TEST SUCEEDED') + line = writer.get_line_index_with_content("TEST SUCEEDED") writer.write_add_breakpoint(line) writer.write_make_initial_run() @@ -4500,6 +4662,38 @@ def target_file(): writer.write_run_thread(hit.thread_id) writer.finished_ok = True + +def test_multiple_threads_same_code(case_setup, pyfile): + with case_setup.test_file("_debugger_case_multiple_threads_same_code.py") as writer: + line = writer.get_line_index_with_content("break on main") + bpid_main = writer.write_add_breakpoint(line) + writer.write_make_initial_run() + hit_main = writer.wait_for_breakpoint_hit(line=line) + + line = writer.get_line_index_with_content("break on thread") + bpid_thread = writer.write_add_breakpoint(line) + + hit_thread = writer.wait_for_breakpoint_hit(line=line) + writer.write_run_thread(hit_thread.thread_id) + + writer.write_step_return(hit_thread.thread_id) + hit_thread = writer.wait_for_breakpoint_hit(REASON_STEP_RETURN) + + # Multiple steps in that thread. + for _i in range(2): + writer.write_step_over(hit_thread.thread_id) + hit_thread = writer.wait_for_breakpoint_hit((REASON_STEP_OVER, REASON_STOP_ON_BREAKPOINT)) + + # Remove breakpoint from thread so that it can finish cleanly. + writer.write_remove_breakpoint(bpid_thread) + writer.write_run_thread(hit_thread.thread_id) + + # Ok, resume main + writer.write_run_thread(hit_main.thread_id) + + writer.finished_ok = True + + # Jython needs some vars to be set locally. # set JAVA_HOME=c:\bin\jdk1.8.0_172 # set PATH=%PATH%;C:\bin\jython2.7.0\bin @@ -4507,5 +4701,5 @@ def target_file(): # c:\bin\jython2.7.0\bin\jython.exe -m py.test tests_python -if __name__ == '__main__': - pytest.main(['-k', 'test_case_12']) +if __name__ == "__main__": + pytest.main(["-k", "test_case_12"]) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_debugger_json.py b/src/debugpy/_vendored/pydevd/tests_python/test_debugger_json.py index 4d3c81ddb..cbb696399 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_debugger_json.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_debugger_json.py @@ -11,32 +11,60 @@ from _pydev_bundle.pydev_localhost import get_socket_name from _pydevd_bundle._debug_adapter import pydevd_schema, pydevd_base_schema from _pydevd_bundle._debug_adapter.pydevd_base_schema import from_json -from _pydevd_bundle._debug_adapter.pydevd_schema import (ThreadEvent, ModuleEvent, OutputEvent, - ExceptionOptions, Response, StoppedEvent, ContinuedEvent, ProcessEvent, InitializeRequest, - InitializeRequestArguments, TerminateArguments, TerminateRequest, TerminatedEvent, - FunctionBreakpoint, SetFunctionBreakpointsRequest, SetFunctionBreakpointsArguments, - BreakpointEvent, InitializedEvent) +from _pydevd_bundle._debug_adapter.pydevd_schema import ( + ThreadEvent, + ModuleEvent, + OutputEvent, + ExceptionOptions, + Response, + StoppedEvent, + ContinuedEvent, + ProcessEvent, + InitializeRequest, + InitializeRequestArguments, + TerminateArguments, + TerminateRequest, + TerminatedEvent, + FunctionBreakpoint, + SetFunctionBreakpointsRequest, + SetFunctionBreakpointsArguments, + BreakpointEvent, + InitializedEvent, + ContinueResponse, +) from _pydevd_bundle.pydevd_comm_constants import file_system_encoding -from _pydevd_bundle.pydevd_constants import (int_types, IS_64BIT_PROCESS, - PY_VERSION_STR, PY_IMPL_VERSION_STR, PY_IMPL_NAME, IS_PY36_OR_GREATER, - IS_PYPY, GENERATED_LEN_ATTR_NAME, IS_WINDOWS, IS_LINUX, IS_MAC, IS_PY38_OR_GREATER, - IS_PY311_OR_GREATER) +from _pydevd_bundle.pydevd_constants import ( + int_types, + IS_64BIT_PROCESS, + PY_VERSION_STR, + PY_IMPL_VERSION_STR, + PY_IMPL_NAME, + IS_PY36_OR_GREATER, + IS_PYPY, + GENERATED_LEN_ATTR_NAME, + IS_WINDOWS, + IS_LINUX, + IS_MAC, + IS_PY38_OR_GREATER, + IS_PY311_OR_GREATER, + PYDEVD_USE_SYS_MONITORING, + IS_PY312_OR_GREATER, + SUPPORT_ATTACH_TO_PID, +) from tests_python import debugger_unittest -from tests_python.debug_constants import TEST_CHERRYPY, TEST_DJANGO, TEST_FLASK, \ - IS_CPYTHON, TEST_GEVENT, TEST_CYTHON, TODO_PY311 -from tests_python.debugger_unittest import (IS_JYTHON, IS_APPVEYOR, overrides, - get_free_port, wait_for_condition) +from tests_python.debug_constants import TEST_CHERRYPY, TEST_DJANGO, TEST_FLASK, IS_CPYTHON, TEST_GEVENT, TEST_CYTHON, IS_PY311 +from tests_python.debugger_unittest import IS_JYTHON, IS_APPVEYOR, overrides, get_free_port, wait_for_condition from _pydevd_bundle.pydevd_utils import DAPGrouper import pydevd_file_utils from _pydevd_bundle import pydevd_constants pytest_plugins = [ - str('tests_python.debugger_fixtures'), + str("tests_python.debugger_fixtures"), ] -_JsonHit = namedtuple('_JsonHit', 'thread_id, frame_id, stack_trace_response') +_JsonHit = namedtuple("_JsonHit", "thread_id, frame_id, stack_trace_response") -pytestmark = pytest.mark.skipif(IS_JYTHON, reason='Single notification is not OK in Jython (investigate).') +pytestmark = pytest.mark.skipif(IS_JYTHON, reason="Single notification is not OK in Jython (investigate).") # Note: in reality must be < int32, but as it's created sequentially this should be # a reasonable number for tests. @@ -44,21 +72,19 @@ class _MessageWithMark(object): - def __init__(self, msg): self.msg = msg self.marked = False class JsonFacade(object): - def __init__(self, writer): self.writer = writer writer.reader_thread.accept_xml_messages = False self._all_json_messages_found = [] self._sent_launch_or_attach = False - def mark_messages(self, expected_class, accept_message=lambda obj:True): + def mark_messages(self, expected_class, accept_message=lambda obj: True): ret = [] for message_with_mark in self._all_json_messages_found: if not message_with_mark.marked: @@ -68,10 +94,9 @@ def mark_messages(self, expected_class, accept_message=lambda obj:True): ret.append(message_with_mark.msg) return ret - def wait_for_json_message(self, expected_class, accept_message=lambda obj:True): - + def wait_for_json_message(self, expected_class, accept_message=lambda obj: True): def accept_json_message(msg): - if msg.startswith('{'): + if msg.startswith("{"): decoded_msg = from_json(msg) self._all_json_messages_found.append(_MessageWithMark(decoded_msg)) @@ -84,25 +109,29 @@ def accept_json_message(msg): msg = self.writer.wait_for_message(accept_json_message, unquote_msg=False, expect_xml=False) return from_json(msg) - def wait_for_response(self, request, response_class=None): + def build_accept_response(self, request, response_class=None): if response_class is None: response_class = pydevd_base_schema.get_response_class(request) def accept_message(response): if isinstance(request, dict): - if response.request_seq == request['seq']: + if response.request_seq == request["seq"]: return True else: if response.request_seq == request.seq: return True return False - return self.wait_for_json_message((response_class, Response), accept_message) + return (response_class, Response), accept_message + + def wait_for_response(self, request, response_class=None): + expected_classes, accept_message = self.build_accept_response(request, response_class) + return self.wait_for_json_message(expected_classes, accept_message) def write_request(self, request): seq = self.writer.next_seq() if isinstance(request, dict): - request['seq'] = seq + request["seq"] = seq self.writer.write_with_content_len(json.dumps(request)) else: request.seq = seq @@ -122,56 +151,60 @@ def write_list_threads(self): def wait_for_terminated(self): return self.wait_for_json_message(TerminatedEvent) - def wait_for_thread_stopped(self, reason='breakpoint', line=None, file=None, name=None, preserve_focus_hint=None): - ''' + def wait_for_thread_stopped(self, reason="breakpoint", line=None, file=None, name=None, preserve_focus_hint=None): + """ :param file: utf-8 bytes encoded file or unicode - ''' + """ stopped_event = self.wait_for_json_message(StoppedEvent) assert stopped_event.body.reason == reason if preserve_focus_hint is not None: assert stopped_event.body.preserveFocusHint == preserve_focus_hint json_hit = self.get_stack_as_json_hit(stopped_event.body.threadId) if file is not None: - path = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] + path = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] if not path.endswith(file): # pytest may give a lowercase tempdir, so, also check with # the real case if possible file = pydevd_file_utils.get_path_with_real_case(file) if not path.endswith(file): - raise AssertionError('Expected path: %s to end with: %s' % (path, file)) + raise AssertionError("Expected path: %s to end with: %s" % (path, file)) if name is not None: - assert json_hit.stack_trace_response.body.stackFrames[0]['name'] == name + assert json_hit.stack_trace_response.body.stackFrames[0]["name"] == name if line is not None: - found_line = json_hit.stack_trace_response.body.stackFrames[0]['line'] - path = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] + found_line = json_hit.stack_trace_response.body.stackFrames[0]["line"] + path = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] if not isinstance(line, (tuple, list)): line = [line] - assert found_line in line, 'Expect to break at line: %s. Found: %s (file: %s)' % (line, found_line, path) + assert found_line in line, "Expect to break at line: %s. Found: %s (file: %s)" % (line, found_line, path) return json_hit - def write_set_function_breakpoints( - self, function_names): - function_breakpoints = [FunctionBreakpoint(name,) for name in function_names] + def write_set_function_breakpoints(self, function_names): + function_breakpoints = [ + FunctionBreakpoint( + name, + ) + for name in function_names + ] arguments = SetFunctionBreakpointsArguments(function_breakpoints) request = SetFunctionBreakpointsRequest(arguments) response = self.wait_for_response(self.write_request(request)) assert response.success def write_set_breakpoints( - self, - lines, - filename=None, - line_to_info=None, - success=True, - verified=True, - send_launch_if_needed=True, - expected_lines_in_response=None, - ): - ''' + self, + lines, + filename=None, + line_to_info=None, + success=True, + verified=True, + send_launch_if_needed=True, + expected_lines_in_response=None, + ): + """ Adds a breakpoint. - ''' + """ if send_launch_if_needed and not self._sent_launch_or_attach: self._auto_write_launch() @@ -186,7 +219,7 @@ def write_set_breakpoints( if isinstance(filename, bytes): filename = filename.decode(file_system_encoding) # file is in the filesystem encoding but protocol needs it in utf-8 - filename = filename.encode('utf-8') + filename = filename.encode("utf-8") source = pydevd_schema.Source(path=filename) breakpoints = [] @@ -197,12 +230,13 @@ def write_set_breakpoints( if line in line_to_info: line_info = line_to_info.get(line) - condition = line_info.get('condition') - hit_condition = line_info.get('hit_condition') - log_message = line_info.get('log_message') + condition = line_info.get("condition") + hit_condition = line_info.get("hit_condition") + log_message = line_info.get("log_message") - breakpoints.append(pydevd_schema.SourceBreakpoint( - line, condition=condition, hitCondition=hit_condition, logMessage=log_message).to_dict()) + breakpoints.append( + pydevd_schema.SourceBreakpoint(line, condition=condition, hitCondition=hit_condition, logMessage=log_message).to_dict() + ) arguments = pydevd_schema.SetBreakpointsArguments(source, breakpoints) request = pydevd_schema.SetBreakpointsRequest(arguments) @@ -216,7 +250,7 @@ def write_set_breakpoints( if success: # : :type body: SetBreakpointsResponseBody assert len(body.breakpoints) == len(lines) - lines_in_response = [b['line'] for b in body.breakpoints] + lines_in_response = [b["line"] for b in body.breakpoints] if expected_lines_in_response is None: expected_lines_in_response = lines @@ -224,25 +258,27 @@ def write_set_breakpoints( for b in body.breakpoints: if isinstance(verified, dict): - if b['verified'] != verified[b['id']]: - raise AssertionError('Expected verified breakpoint to be: %s. Found: %s.\nBreakpoint: %s' % ( - verified, verified[b['id']], b)) - - elif b['verified'] != verified: - raise AssertionError('Expected verified breakpoint to be: %s. Found: %s.\nBreakpoint: %s' % ( - verified, b['verified'], b)) + if b["verified"] != verified[b["id"]]: + raise AssertionError( + "Expected verified breakpoint to be: %s. Found: %s.\nBreakpoint: %s" % (verified, verified[b["id"]], b) + ) + + elif b["verified"] != verified: + raise AssertionError( + "Expected verified breakpoint to be: %s. Found: %s.\nBreakpoint: %s" % (verified, b["verified"], b) + ) return response def write_set_exception_breakpoints(self, filters=None, exception_options=None): - ''' + """ :param list(str) filters: A list with 'raised' or 'uncaught' entries. :param list(ExceptionOptions) exception_options: - ''' + """ filters = filters or [] - assert set(filters).issubset(set(('raised', 'uncaught', 'userUnhandled'))) + assert set(filters).issubset(set(("raised", "uncaught", "userUnhandled"))) exception_options = exception_options or [] exception_options = [exception_option.to_dict() for exception_option in exception_options] @@ -259,21 +295,23 @@ def reset_sent_launch_or_attach(self): def _write_launch_or_attach(self, command, **arguments): assert not self._sent_launch_or_attach self._sent_launch_or_attach = True - arguments['noDebug'] = False - request = {'type': 'request', 'command': command, 'arguments': arguments, 'seq':-1} + arguments["noDebug"] = False + request = {"type": "request", "command": command, "arguments": arguments, "seq": -1} self.wait_for_response(self.write_request(request)) def _auto_write_launch(self): - self.write_launch(variablePresentation={ - "all": "hide", - "protected": "inline", - }) + self.write_launch( + variablePresentation={ + "all": "hide", + "protected": "inline", + } + ) def write_launch(self, **arguments): - return self._write_launch_or_attach('launch', **arguments) + return self._write_launch_or_attach("launch", **arguments) def write_attach(self, **arguments): - return self._write_launch_or_attach('attach', **arguments) + return self._write_launch_or_attach("attach", **arguments) def write_disconnect(self, wait_for_response=True, terminate_debugee=False): assert self._sent_launch_or_attach @@ -285,8 +323,7 @@ def write_disconnect(self, wait_for_response=True, terminate_debugee=False): self.wait_for_response(request) def get_stack_as_json_hit(self, thread_id, no_stack_frame=False): - stack_trace_request = self.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) + stack_trace_request = self.write_request(pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) # : :type stack_trace_response: StackTraceResponse # : :type stack_trace_response_body: StackTraceResponseBody @@ -299,18 +336,18 @@ def get_stack_as_json_hit(self, thread_id, no_stack_frame=False): else: assert len(stack_trace_response_body.stackFrames) > 0 for stack_frame in stack_trace_response_body.stackFrames: - assert stack_frame['id'] < MAX_EXPECTED_ID + assert stack_frame["id"] < MAX_EXPECTED_ID stack_frame = next(iter(stack_trace_response_body.stackFrames)) - frame_id = stack_frame['id'] + frame_id = stack_frame["id"] - return _JsonHit( - thread_id=thread_id, frame_id=frame_id, stack_trace_response=stack_trace_response) + return _JsonHit(thread_id=thread_id, frame_id=frame_id, stack_trace_response=stack_trace_response) def get_variables_response(self, variables_reference, fmt=None, success=True): assert variables_reference < MAX_EXPECTED_ID variables_request = self.write_request( - pydevd_schema.VariablesRequest(pydevd_schema.VariablesArguments(variables_reference, format=fmt))) + pydevd_schema.VariablesRequest(pydevd_schema.VariablesArguments(variables_reference, format=fmt)) + ) variables_response = self.wait_for_response(variables_request) assert variables_response.success == success return variables_response @@ -318,41 +355,58 @@ def get_variables_response(self, variables_reference, fmt=None, success=True): def filter_return_variables(self, variables): ret = [] for variable in variables: - if variable['name'].startswith('(return)'): + if variable["name"].startswith("(return)"): ret.append(variable) return ret def pop_variables_reference(self, lst): - ''' + """ Modifies dicts in-place to remove the variablesReference and returns those (in the same order in which they were received). - ''' + """ references = [] for dct in lst: - reference = dct.pop('variablesReference', None) + reference = dct.pop("variablesReference", None) if reference is not None: assert isinstance(reference, int_types) assert reference < MAX_EXPECTED_ID references.append(reference) return references - def wait_for_continued_event(self): - assert self.wait_for_json_message(ContinuedEvent).body.allThreadsContinued + def wait_for_continued_event(self, all_threads_continued=True): + ev = self.wait_for_json_message(ContinuedEvent) + assert ev.body.allThreadsContinued == all_threads_continued - def write_continue(self, wait_for_response=True): - continue_request = self.write_request( - pydevd_schema.ContinueRequest(pydevd_schema.ContinueArguments('*'))) + def _by_type(self, *msgs): + ret = {} + for msg in msgs: + assert msg.__class__ not in ret + ret[msg.__class__] = msg + return ret - if wait_for_response: - # The continued event is received before the response. - self.wait_for_continued_event() + def write_continue(self, wait_for_response=True, thread_id="*"): + continue_request = self.write_request(pydevd_schema.ContinueRequest(pydevd_schema.ContinueArguments(threadId=thread_id))) - continue_response = self.wait_for_response(continue_request) - assert continue_response.body.allThreadsContinued + if wait_for_response: + if thread_id != "*": + # event, response may be sent in any order + msg1 = self.wait_for_json_message((ContinuedEvent, ContinueResponse)) + msg2 = self.wait_for_json_message((ContinuedEvent, ContinueResponse)) + by_type = self._by_type(msg1, msg2) + continued_ev = by_type[ContinuedEvent] + continue_response = by_type[ContinueResponse] + assert continue_response.request_seq == continue_request.seq + + assert continued_ev.body.allThreadsContinued == False + assert continue_response.body.allThreadsContinued == False + else: + # The continued event is received before the response. + self.wait_for_continued_event(all_threads_continued=True) + continue_response = self.wait_for_response(continue_request) + assert continue_response.body.allThreadsContinued def write_pause(self): - pause_request = self.write_request( - pydevd_schema.PauseRequest(pydevd_schema.PauseArguments('*'))) + pause_request = self.write_request(pydevd_schema.PauseRequest(pydevd_schema.PauseArguments("*"))) pause_response = self.wait_for_response(pause_request) assert pause_response.success @@ -361,48 +415,49 @@ def write_step_in(self, thread_id, target_id=None): self.wait_for_response(self.write_request(pydevd_schema.StepInRequest(arguments))) def write_step_next(self, thread_id, wait_for_response=True): - next_request = self.write_request( - pydevd_schema.NextRequest(pydevd_schema.NextArguments(thread_id))) + next_request = self.write_request(pydevd_schema.NextRequest(pydevd_schema.NextArguments(thread_id))) if wait_for_response: self.wait_for_response(next_request) def write_step_out(self, thread_id, wait_for_response=True): - stepout_request = self.write_request( - pydevd_schema.StepOutRequest(pydevd_schema.StepOutArguments(thread_id))) + stepout_request = self.write_request(pydevd_schema.StepOutRequest(pydevd_schema.StepOutArguments(thread_id))) if wait_for_response: self.wait_for_response(stepout_request) def write_set_variable(self, frame_variables_reference, name, value, success=True): set_variable_request = self.write_request( - pydevd_schema.SetVariableRequest(pydevd_schema.SetVariableArguments( - frame_variables_reference, name, value, - ))) + pydevd_schema.SetVariableRequest( + pydevd_schema.SetVariableArguments( + frame_variables_reference, + name, + value, + ) + ) + ) set_variable_response = self.wait_for_response(set_variable_request) if set_variable_response.success != success: raise AssertionError( - 'Expected %s. Found: %s\nResponse: %s\n' % ( - success, set_variable_response.success, set_variable_response.to_json())) + "Expected %s. Found: %s\nResponse: %s\n" % (success, set_variable_response.success, set_variable_response.to_json()) + ) return set_variable_response def get_name_to_scope(self, frame_id): - scopes_request = self.write_request(pydevd_schema.ScopesRequest( - pydevd_schema.ScopesArguments(frame_id))) + scopes_request = self.write_request(pydevd_schema.ScopesRequest(pydevd_schema.ScopesArguments(frame_id))) scopes_response = self.wait_for_response(scopes_request) scopes = scopes_response.body.scopes - name_to_scopes = dict((scope['name'], pydevd_schema.Scope(**scope)) for scope in scopes) + name_to_scopes = dict((scope["name"], pydevd_schema.Scope(**scope)) for scope in scopes) assert len(scopes) == 2 - assert sorted(name_to_scopes.keys()) == ['Globals', 'Locals'] - assert not name_to_scopes['Locals'].expensive - assert name_to_scopes['Locals'].presentationHint == 'locals' + assert sorted(name_to_scopes.keys()) == ["Globals", "Locals"] + assert not name_to_scopes["Locals"].expensive + assert name_to_scopes["Locals"].presentationHint == "locals" return name_to_scopes def get_step_in_targets(self, frame_id): - request = self.write_request(pydevd_schema.StepInTargetsRequest( - pydevd_schema.StepInTargetsArguments(frame_id))) + request = self.write_request(pydevd_schema.StepInTargetsRequest(pydevd_schema.StepInTargetsArguments(frame_id))) # : :type response: StepInTargetsResponse response = self.wait_for_response(request) @@ -415,17 +470,17 @@ def get_step_in_targets(self, frame_id): def get_name_to_var(self, variables_reference): variables_response = self.get_variables_response(variables_reference) - return dict((variable['name'], pydevd_schema.Variable(**variable)) for variable in variables_response.body.variables) + return dict((variable["name"], pydevd_schema.Variable(**variable)) for variable in variables_response.body.variables) def get_locals_name_to_var(self, frame_id): name_to_scope = self.get_name_to_scope(frame_id) - return self.get_name_to_var(name_to_scope['Locals'].variablesReference) + return self.get_name_to_var(name_to_scope["Locals"].variablesReference) def get_globals_name_to_var(self, frame_id): name_to_scope = self.get_name_to_scope(frame_id) - return self.get_name_to_var(name_to_scope['Globals'].variablesReference) + return self.get_name_to_var(name_to_scope["Globals"].variablesReference) def get_local_var(self, frame_id, var_name): ret = self.get_locals_name_to_var(frame_id)[var_name] @@ -441,51 +496,54 @@ def get_var(self, variables_reference, var_name=None, index=None): if var_name is not None: return self.get_name_to_var(variables_reference)[var_name] else: - assert index is not None, 'Either var_name or index must be passed.' + assert index is not None, "Either var_name or index must be passed." variables_response = self.get_variables_response(variables_reference) return pydevd_schema.Variable(**variables_response.body.variables[index]) def write_set_debugger_property( - self, - dont_trace_start_patterns=None, - dont_trace_end_patterns=None, - multi_threads_single_notification=None, - success=True - ): + self, dont_trace_start_patterns=None, dont_trace_end_patterns=None, multi_threads_single_notification=None, success=True + ): dbg_request = self.write_request( - pydevd_schema.SetDebuggerPropertyRequest(pydevd_schema.SetDebuggerPropertyArguments( - dontTraceStartPatterns=dont_trace_start_patterns, - dontTraceEndPatterns=dont_trace_end_patterns, - multiThreadsSingleNotification=multi_threads_single_notification, - ))) + pydevd_schema.SetDebuggerPropertyRequest( + pydevd_schema.SetDebuggerPropertyArguments( + dontTraceStartPatterns=dont_trace_start_patterns, + dontTraceEndPatterns=dont_trace_end_patterns, + multiThreadsSingleNotification=multi_threads_single_notification, + ) + ) + ) response = self.wait_for_response(dbg_request) assert response.success == success return response def write_set_pydevd_source_map(self, source, pydevd_source_maps, success=True): dbg_request = self.write_request( - pydevd_schema.SetPydevdSourceMapRequest(pydevd_schema.SetPydevdSourceMapArguments( - source=source, - pydevdSourceMaps=pydevd_source_maps, - ))) + pydevd_schema.SetPydevdSourceMapRequest( + pydevd_schema.SetPydevdSourceMapArguments( + source=source, + pydevdSourceMaps=pydevd_source_maps, + ) + ) + ) response = self.wait_for_response(dbg_request) assert response.success == success return response def write_initialize(self, success=True): arguments = InitializeRequestArguments( - adapterID='pydevd_test_case', + adapterID="pydevd_test_case", ) response = self.wait_for_response(self.write_request(InitializeRequest(arguments))) assert response.success == success if success: - process_id = response.body.kwargs['pydevd']['processId'] + process_id = response.body.kwargs["pydevd"]["processId"] assert isinstance(process_id, int) return response def write_authorize(self, access_token, success=True): from _pydevd_bundle._debug_adapter.pydevd_schema import PydevdAuthorizeArguments from _pydevd_bundle._debug_adapter.pydevd_schema import PydevdAuthorizeRequest + arguments = PydevdAuthorizeArguments( debugServerAccessToken=access_token, ) @@ -494,15 +552,15 @@ def write_authorize(self, access_token, success=True): return response def evaluate(self, expression, frameId=None, context=None, fmt=None, success=True, wait_for_response=True): - ''' + """ :param wait_for_response: If True returns the response, otherwise returns the request. :returns EvaluateResponse - ''' + """ eval_request = self.write_request( - pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments( - expression, frameId=frameId, context=context, format=fmt))) + pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments(expression, frameId=frameId, context=context, format=fmt)) + ) if wait_for_response: eval_response = self.wait_for_response(eval_request) assert eval_response.success == success @@ -515,38 +573,29 @@ def write_terminate(self): self.write_request(TerminateRequest(arguments=TerminateArguments())) def write_get_source(self, source_reference, success=True): - response = self.wait_for_response(self.write_request( - pydevd_schema.SourceRequest(pydevd_schema.SourceArguments(source_reference)))) + response = self.wait_for_response(self.write_request(pydevd_schema.SourceRequest(pydevd_schema.SourceArguments(source_reference)))) assert response.success == success return response -@pytest.mark.parametrize('scenario', ['basic', 'condition', 'hitCondition']) +@pytest.mark.parametrize("scenario", ["basic", "condition", "hitCondition"]) def test_case_json_logpoints(case_setup_dap, scenario): - with case_setup_dap.test_file('_debugger_case_change_breaks.py') as writer: + with case_setup_dap.test_file("_debugger_case_change_breaks.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break_2 = writer.get_line_index_with_content('break 2') - break_3 = writer.get_line_index_with_content('break 3') - if scenario == 'basic': - json_facade.write_set_breakpoints( - [break_2, break_3], - line_to_info={ - break_2: {'log_message': 'var {repr("_a")} is {_a}'} - }) - elif scenario == 'condition': + break_2 = writer.get_line_index_with_content("break 2") + break_3 = writer.get_line_index_with_content("break 3") + if scenario == "basic": + json_facade.write_set_breakpoints([break_2, break_3], line_to_info={break_2: {"log_message": 'var {repr("_a")} is {_a}'}}) + elif scenario == "condition": json_facade.write_set_breakpoints( - [break_2, break_3], - line_to_info={ - break_2: {'log_message': 'var {repr("_a")} is {_a}', 'condition': 'True'} - }) - elif scenario == 'hitCondition': + [break_2, break_3], line_to_info={break_2: {"log_message": 'var {repr("_a")} is {_a}', "condition": "True"}} + ) + elif scenario == "hitCondition": json_facade.write_set_breakpoints( - [break_2, break_3], - line_to_info={ - break_2: {'log_message': 'var {repr("_a")} is {_a}', 'hit_condition': '1'} - }) + [break_2, break_3], line_to_info={break_2: {"log_message": 'var {repr("_a")} is {_a}', "hit_condition": "1"}} + ) json_facade.write_make_initial_run() # Should only print, not stop on logpoints. @@ -559,12 +608,12 @@ def accept_message(output_event): msg = output_event.body.output ctx = output_event.body.category - if ctx == 'stdout': + if ctx == "stdout": msg = msg.strip() return msg == "var '_a' is 2" messages = json_facade.mark_messages(OutputEvent, accept_message) - if scenario == 'hitCondition': + if scenario == "hitCondition": assert len(messages) == 1 else: assert len(messages) == 2 @@ -573,27 +622,25 @@ def accept_message(output_event): def test_case_json_logpoint_and_step_failure_ok(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_hit_count.py') as writer: + with case_setup_dap.test_file("_debugger_case_hit_count.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - before_loop_line = writer.get_line_index_with_content('before loop line') - for_line = writer.get_line_index_with_content('for line') - print_line = writer.get_line_index_with_content('print line') + before_loop_line = writer.get_line_index_with_content("before loop line") + for_line = writer.get_line_index_with_content("for line") + print_line = writer.get_line_index_with_content("print line") json_facade.write_set_breakpoints( - [before_loop_line, print_line], - line_to_info={ - print_line: {'log_message': 'var {repr("_a")} is {_a}'} - }) + [before_loop_line, print_line], line_to_info={print_line: {"log_message": 'var {repr("_a")} is {_a}'}} + ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=before_loop_line) json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=for_line) + json_hit = json_facade.wait_for_thread_stopped("step", line=for_line) json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=print_line) + json_hit = json_facade.wait_for_thread_stopped("step", line=print_line) json_facade.write_continue() @@ -601,17 +648,15 @@ def test_case_json_logpoint_and_step_failure_ok(case_setup_dap): def test_case_json_logpoint_and_step_still_prints(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_hit_count.py') as writer: + with case_setup_dap.test_file("_debugger_case_hit_count.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - before_loop_line = writer.get_line_index_with_content('before loop line') - print_line = writer.get_line_index_with_content('print line') + before_loop_line = writer.get_line_index_with_content("before loop line") + print_line = writer.get_line_index_with_content("print line") json_facade.write_set_breakpoints( - [before_loop_line, print_line], - line_to_info={ - print_line: {'log_message': 'var {repr("i")} is {i}'} - }) + [before_loop_line, print_line], line_to_info={print_line: {"log_message": 'var {repr("i")} is {i}'}} + ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=before_loop_line) @@ -619,7 +664,7 @@ def test_case_json_logpoint_and_step_still_prints(case_setup_dap): for _i in range(4): # I.e.: even when stepping we should have the messages. json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step') + json_hit = json_facade.wait_for_thread_stopped("step") json_facade.write_continue() @@ -637,28 +682,24 @@ def accept_message(output_event): def test_case_json_hit_count_and_step(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_hit_count.py') as writer: + with case_setup_dap.test_file("_debugger_case_hit_count.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - for_line = writer.get_line_index_with_content('for line') - print_line = writer.get_line_index_with_content('print line') - json_facade.write_set_breakpoints( - [print_line], - line_to_info={ - print_line: {'hit_condition': '5'} - }) + for_line = writer.get_line_index_with_content("for line") + print_line = writer.get_line_index_with_content("print line") + json_facade.write_set_breakpoints([print_line], line_to_info={print_line: {"hit_condition": "5"}}) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=print_line) - i_local_var = json_facade.get_local_var(json_hit.frame_id, 'i') # : :type i_local_var: pydevd_schema.Variable - assert i_local_var.value == '4' + i_local_var = json_facade.get_local_var(json_hit.frame_id, "i") # : :type i_local_var: pydevd_schema.Variable + assert i_local_var.value == "4" json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=for_line) + json_hit = json_facade.wait_for_thread_stopped("step", line=for_line) json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=print_line) + json_hit = json_facade.wait_for_thread_stopped("step", line=print_line) json_facade.write_continue() @@ -666,21 +707,17 @@ def test_case_json_hit_count_and_step(case_setup_dap): def test_case_json_hit_condition_error(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_hit_count.py') as writer: + with case_setup_dap.test_file("_debugger_case_hit_count.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - bp = writer.get_line_index_with_content('before loop line') - json_facade.write_set_breakpoints( - [bp], - line_to_info={ - bp: {'condition': 'range.range.range'} - }) + bp = writer.get_line_index_with_content("before loop line") + json_facade.write_set_breakpoints([bp], line_to_info={bp: {"condition": "range.range.range"}}) json_facade.write_make_initial_run() def accept_message(msg): - if msg.body.category == 'important': - if 'Error while evaluating expression in conditional breakpoint' in msg.body.output: + if msg.body.category == "important": + if "Error while evaluating expression in conditional breakpoint" in msg.body.output: return True return False @@ -694,7 +731,7 @@ def accept_message(msg): def test_case_process_event(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_change_breaks.py') as writer: + with case_setup_dap.test_file("_debugger_case_change_breaks.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() @@ -704,10 +741,10 @@ def test_case_process_event(case_setup_dap): def test_case_json_change_breaks(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_change_breaks.py') as writer: + with case_setup_dap.test_file("_debugger_case_change_breaks.py") as writer: json_facade = JsonFacade(writer) - break1_line = writer.get_line_index_with_content('break 1') + break1_line = writer.get_line_index_with_content("break 1") # Note: we can only write breakpoints after the launch is received. json_facade.write_set_breakpoints(break1_line, success=False, send_launch_if_needed=False) @@ -722,21 +759,38 @@ def test_case_json_change_breaks(case_setup_dap): writer.finished_ok = True +def test_case_json_suspend_notification(case_setup_dap): + with case_setup_dap.test_file("_debugger_case_change_breaks.py") as writer: + json_facade = JsonFacade(writer) + json_facade.writer.write_multi_threads_single_notification(False) + break1_line = writer.get_line_index_with_content("break 1") + json_facade.write_launch() + json_facade.write_set_breakpoints(break1_line) + json_facade.write_make_initial_run() + + json_hit = json_facade.wait_for_thread_stopped(line=break1_line) + json_facade.write_continue(thread_id=json_hit.thread_id) + + json_hit = json_facade.wait_for_thread_stopped(line=break1_line) + json_facade.write_continue(thread_id=json_hit.thread_id, wait_for_response=False) + + writer.finished_ok = True + + def test_case_handled_exception_no_break_on_generator(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_ignore_exceptions.py') as writer: + with case_setup_dap.test_file("_debugger_case_ignore_exceptions.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['raised']) + json_facade.write_set_exception_breakpoints(["raised"]) json_facade.write_make_initial_run() writer.finished_ok = True def test_case_throw_exc_reason(case_setup_dap): - def check_test_suceeded_msg(self, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): assert "raise RuntimeError('TEST SUCEEDED')" in stderr @@ -744,54 +798,57 @@ def additional_output_checks(writer, stdout, stderr): assert "raise Exception('another while handling')" in stderr with case_setup_dap.test_file( - '_debugger_case_raise_with_cause.py', - EXPECTED_RETURNCODE=1, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks - ) as writer: + "_debugger_case_raise_with_cause.py", + EXPECTED_RETURNCODE=1, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('raise RuntimeError from e')) + reason="exception", line=writer.get_line_index_with_content("raise RuntimeError from e") + ) exc_info_request = json_facade.write_request( - pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id))) + pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id)) + ) exc_info_response = json_facade.wait_for_response(exc_info_request) stack_frames = json_hit.stack_trace_response.body.stackFrames # Note that the additional context doesn't really appear in the stack # frames, only in the details. - assert [x['name'] for x in stack_frames] == [ - 'foobar', - '', - '[Chained Exc: another while handling] foobar', - '[Chained Exc: another while handling] handle', - '[Chained Exc: TEST SUCEEDED] foobar', - '[Chained Exc: TEST SUCEEDED] method', - '[Chained Exc: TEST SUCEEDED] method2', + assert [x["name"] for x in stack_frames] == [ + "foobar", + "", + "[Chained Exc: another while handling] foobar", + "[Chained Exc: another while handling] handle", + "[Chained Exc: TEST SUCEEDED] foobar", + "[Chained Exc: TEST SUCEEDED] method", + "[Chained Exc: TEST SUCEEDED] method2", ] body = exc_info_response.body - assert body.exceptionId.endswith('RuntimeError') - assert body.description == 'another while handling' - assert normcase(body.details.kwargs['source']) == normcase(writer.TEST_FILE) + assert body.exceptionId.endswith("RuntimeError") + assert body.description == "another while handling" + assert normcase(body.details.kwargs["source"]) == normcase(writer.TEST_FILE) # Check that we have all the lines (including the cause/context) in the stack trace. import re - lines_and_names = re.findall(r',\sline\s(\d+),\sin\s(\[Chained Exception\]\s)?([\w|<|>]+)', body.details.stackTrace) + + lines_and_names = re.findall(r",\sline\s(\d+),\sin\s(\[Chained Exception\]\s)?([\w|<|>]+)", body.details.stackTrace) assert lines_and_names == [ - ('16', '', 'foobar'), - ('6', '', 'method'), - ('2', '', 'method2'), - ('18', '', 'foobar'), - ('10', '', 'handle'), - ('20', '', 'foobar'), - ('23', '', ''), - ], 'Did not find the expected names in:\n%s' % (body.details.stackTrace,) + ("16", "", "foobar"), + ("6", "", "method"), + ("2", "", "method2"), + ("18", "", "foobar"), + ("10", "", "handle"), + ("20", "", "foobar"), + ("23", "", ""), + ], "Did not find the expected names in:\n%s" % (body.details.stackTrace,) json_facade.write_continue() @@ -799,9 +856,8 @@ def additional_output_checks(writer, stdout, stderr): def test_case_throw_exc_reason_shown(case_setup_dap): - def check_test_suceeded_msg(self, stdout, stderr): - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): assert "raise Exception('TEST SUCEEDED') from e" in stderr @@ -809,40 +865,42 @@ def additional_output_checks(writer, stdout, stderr): assert "KeyError: 'foo'" in stderr with case_setup_dap.test_file( - '_debugger_case_raise_with_cause_msg.py', - EXPECTED_RETURNCODE=1, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks - ) as writer: + "_debugger_case_raise_with_cause_msg.py", + EXPECTED_RETURNCODE=1, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content("raise Exception('TEST SUCEEDED') from e")) + reason="exception", line=writer.get_line_index_with_content("raise Exception('TEST SUCEEDED') from e") + ) exc_info_request = json_facade.write_request( - pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id))) + pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id)) + ) exc_info_response = json_facade.wait_for_response(exc_info_request) stack_frames = json_hit.stack_trace_response.body.stackFrames # Note that the additional context doesn't really appear in the stack # frames, only in the details. - assert [x['name'] for x in stack_frames] == [ - 'method', - '', + assert [x["name"] for x in stack_frames] == [ + "method", + "", "[Chained Exc: 'foo'] method", "[Chained Exc: 'foo'] method2", ] body = exc_info_response.body - assert body.exceptionId == 'Exception' - assert body.description == 'TEST SUCEEDED' + assert body.exceptionId == "Exception" + assert body.description == "TEST SUCEEDED" if IS_PY311_OR_GREATER: - assert '^^^^' in body.details.stackTrace - assert normcase(body.details.kwargs['source']) == normcase(writer.TEST_FILE) + assert "^^^^" in body.details.stackTrace + assert normcase(body.details.kwargs["source"]) == normcase(writer.TEST_FILE) # Check that we have the exception cause in the stack trace. assert "KeyError: 'foo'" in body.details.stackTrace @@ -853,19 +911,17 @@ def additional_output_checks(writer, stdout, stderr): def test_case_handled_exception_breaks(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_exceptions.py') as writer: + with case_setup_dap.test_file("_debugger_case_exceptions.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['raised']) + json_facade.write_set_exception_breakpoints(["raised"]) json_facade.write_make_initial_run() - json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('raise indexerror line')) + json_facade.wait_for_thread_stopped(reason="exception", line=writer.get_line_index_with_content("raise indexerror line")) json_facade.write_continue() - json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('reraise on method2')) + json_facade.wait_for_thread_stopped(reason="exception", line=writer.get_line_index_with_content("reraise on method2")) # Clear so that the last one is not hit. json_facade.write_set_exception_breakpoints([]) @@ -878,109 +934,99 @@ def _check_current_line(json_hit, current_line): if not isinstance(current_line, (list, tuple)): current_line = (current_line,) for frame in json_hit.stack_trace_response.body.stackFrames: - if '(Current frame)' in frame['name']: - if frame['line'] not in current_line: + if "(Current frame)" in frame["name"]: + if frame["line"] not in current_line: rep = json.dumps(json_hit.stack_trace_response.body.stackFrames, indent=4) - raise AssertionError('Expected: %s to be one of: %s\nFrames:\n%s.' % ( - frame['line'], - current_line, - rep - )) + raise AssertionError("Expected: %s to be one of: %s\nFrames:\n%s." % (frame["line"], current_line, rep)) break else: rep = json.dumps(json_hit.stack_trace_response.body.stackFrames, indent=4) - raise AssertionError('Could not find (Current frame) in any frame name in: %s.' % ( - rep)) + raise AssertionError("Could not find (Current frame) in any frame name in: %s." % (rep)) -@pytest.mark.parametrize('stop', [False, True]) +@pytest.mark.parametrize("stop", [False, True]) def test_case_user_unhandled_exception(case_setup_dap, stop): - def get_environ(self): env = os.environ.copy() # Note that we put the working directory in the project roots to check that when expanded # the relative file that doesn't exist is still considered a library file. - env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath('.') + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") return env if stop: - target = '_debugger_case_user_unhandled.py' + target = "_debugger_case_user_unhandled.py" else: - target = '_debugger_case_user_unhandled2.py' + target = "_debugger_case_user_unhandled2.py" with case_setup_dap.test_file(target, get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['userUnhandled']) + json_facade.write_set_exception_breakpoints(["userUnhandled"]) json_facade.write_make_initial_run() if stop: json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('raise here'), file=target) - _check_current_line(json_hit, writer.get_line_index_with_content('stop here')) + reason="exception", line=writer.get_line_index_with_content("raise here"), file=target + ) + _check_current_line(json_hit, writer.get_line_index_with_content("stop here")) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Only CPython 3.6 onwards') -@pytest.mark.parametrize('stop', [False, True]) +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Only CPython 3.6 onwards") +@pytest.mark.parametrize("stop", [False, True]) def test_case_user_unhandled_exception_coroutine(case_setup_dap, stop): if stop: - target = 'my_code/my_code_coroutine_user_unhandled.py' + target = "my_code/my_code_coroutine_user_unhandled.py" else: - target = 'my_code/my_code_coroutine_user_unhandled_no_stop.py' + target = "my_code/my_code_coroutine_user_unhandled_no_stop.py" basename = os.path.basename(target) def additional_output_checks(writer, stdout, stderr): if stop: - assert 'raise RuntimeError' in stderr + assert "raise RuntimeError" in stderr else: - assert 'raise RuntimeError' not in stderr + assert "raise RuntimeError" not in stderr with case_setup_dap.test_file( - target, - EXPECTED_RETURNCODE=1 if stop else 0, - additional_output_checks=additional_output_checks - ) as writer: + target, EXPECTED_RETURNCODE=1 if stop else 0, additional_output_checks=additional_output_checks + ) as writer: json_facade = JsonFacade(writer) - not_my_code_dir = debugger_unittest._get_debugger_test_file('not_my_code') + not_my_code_dir = debugger_unittest._get_debugger_test_file("not_my_code") json_facade.write_launch( rules=[ - {'path': not_my_code_dir, 'include':False}, + {"path": not_my_code_dir, "include": False}, ] ) - json_facade.write_set_exception_breakpoints(['userUnhandled']) + json_facade.write_set_exception_breakpoints(["userUnhandled"]) json_facade.write_make_initial_run() if stop: - stop_line = writer.get_line_index_with_content('stop here 1') + stop_line = writer.get_line_index_with_content("stop here 1") current_line = stop_line - json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=stop_line, file=basename) + json_hit = json_facade.wait_for_thread_stopped(reason="exception", line=stop_line, file=basename) _check_current_line(json_hit, current_line) json_facade.write_continue() - current_line = writer.get_line_index_with_content('stop here 2') - json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=stop_line, file=basename) + current_line = writer.get_line_index_with_content("stop here 2") + json_hit = json_facade.wait_for_thread_stopped(reason="exception", line=stop_line, file=basename) _check_current_line(json_hit, current_line) json_facade.write_continue() current_line = ( - writer.get_line_index_with_content('stop here 3a'), - writer.get_line_index_with_content('stop here 3b'), + writer.get_line_index_with_content("stop here 3a"), + writer.get_line_index_with_content("stop here 3b"), ) - json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=stop_line, file=basename) + json_hit = json_facade.wait_for_thread_stopped(reason="exception", line=stop_line, file=basename) _check_current_line(json_hit, current_line) json_facade.write_continue() @@ -989,30 +1035,28 @@ def additional_output_checks(writer, stdout, stderr): def test_case_user_unhandled_exception_dont_stop(case_setup_dap): - with case_setup_dap.test_file( - 'my_code/my_code_exception_user_unhandled.py',) as writer: + "my_code/my_code_exception_user_unhandled.py", + ) as writer: json_facade = JsonFacade(writer) - not_my_code_dir = debugger_unittest._get_debugger_test_file('not_my_code') + not_my_code_dir = debugger_unittest._get_debugger_test_file("not_my_code") json_facade.write_launch( debugStdLib=True, rules=[ - {'path': not_my_code_dir, 'include':False}, - ] + {"path": not_my_code_dir, "include": False}, + ], ) - json_facade.write_set_exception_breakpoints(['userUnhandled']) + json_facade.write_set_exception_breakpoints(["userUnhandled"]) json_facade.write_make_initial_run() writer.finished_ok = True def test_case_user_unhandled_exception_stop_on_yield(case_setup_dap, pyfile): - @pyfile def case_error_on_yield(): - def on_yield(): yield raise AssertionError() # raise here @@ -1021,7 +1065,7 @@ def on_yield(): for _ in on_yield(): # stop here pass except: - print('TEST SUCEEDED!') + print("TEST SUCEEDED!") raise def get_environ(self): @@ -1029,120 +1073,122 @@ def get_environ(self): # Note that we put the working directory in the project roots to check that when expanded # the relative file that doesn't exist is still considered a library file. - env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath('.') + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") return env def additional_output_checks(writer, stdout, stderr): - assert 'raise AssertionError' in stderr + assert "raise AssertionError" in stderr with case_setup_dap.test_file( - case_error_on_yield, - get_environ=get_environ, - EXPECTED_RETURNCODE=1, - additional_output_checks=additional_output_checks) as writer: + case_error_on_yield, get_environ=get_environ, EXPECTED_RETURNCODE=1, additional_output_checks=additional_output_checks + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['userUnhandled']) + json_facade.write_set_exception_breakpoints(["userUnhandled"]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('raise here'), file=case_error_on_yield) - _check_current_line(json_hit, writer.get_line_index_with_content('stop here')) + reason="exception", line=writer.get_line_index_with_content("raise here"), file=case_error_on_yield + ) + _check_current_line(json_hit, writer.get_line_index_with_content("stop here")) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('target', [ - 'absolute', - 'relative', - ]) -@pytest.mark.parametrize('just_my_code', [ - True, - False, - ]) +@pytest.mark.parametrize( + "target", + [ + "absolute", + "relative", + ], +) +@pytest.mark.parametrize( + "just_my_code", + [ + True, + False, + ], +) def test_case_unhandled_exception_just_my_code(case_setup_dap, target, just_my_code): - def check_test_suceeded_msg(writer, stdout, stderr): # Don't call super (we have an unhandled exception in the stack trace). - return 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'call_exception_in_exec()' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "call_exception_in_exec()" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) def get_environ(self): env = os.environ.copy() # Note that we put the working directory in the project roots to check that when expanded # the relative file that doesn't exist is still considered a library file. - env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath('.') + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") return env def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - if target == 'absolute': - if sys.platform == 'win32': - ret.append('c:/temp/folder/my_filename.pyx') + if target == "absolute": + if sys.platform == "win32": + ret.append("c:/temp/folder/my_filename.pyx") else: - ret.append('/temp/folder/my_filename.pyx') + ret.append("/temp/folder/my_filename.pyx") - elif target == 'relative': - ret.append('folder/my_filename.pyx') + elif target == "relative": + ret.append("folder/my_filename.pyx") else: - raise AssertionError('Unhandled case: %s' % (target,)) + raise AssertionError("Unhandled case: %s" % (target,)) return args - target_filename = '_debugger_case_unhandled_just_my_code.py' + target_filename = "_debugger_case_unhandled_just_my_code.py" with case_setup_dap.test_file( - target_filename, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - update_command_line_args=update_command_line_args, - get_environ=get_environ, - EXPECTED_RETURNCODE=1, - ) as writer: + target_filename, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + update_command_line_args=update_command_line_args, + get_environ=get_environ, + EXPECTED_RETURNCODE=1, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=just_my_code) - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() - json_hit = json_facade.wait_for_thread_stopped(reason='exception') + json_hit = json_facade.wait_for_thread_stopped(reason="exception") frames = json_hit.stack_trace_response.body.stackFrames if just_my_code: assert len(frames) == 1 - assert frames[0]['source']['path'].endswith(target_filename) + assert frames[0]["source"]["path"].endswith(target_filename) else: assert len(frames) > 1 - assert frames[0]['source']['path'].endswith('my_filename.pyx') + assert frames[0]["source"]["path"].endswith("my_filename.pyx") json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Python 3.6 onwards required for test.') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Python 3.6 onwards required for test.") def test_case_stop_async_iteration_exception(case_setup_dap): - def get_environ(self): env = os.environ.copy() - env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath('.') + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") return env with case_setup_dap.test_file( - '_debugger_case_stop_async_iteration.py', - get_environ=get_environ, - ) as writer: + "_debugger_case_stop_async_iteration.py", + get_environ=get_environ, + ) as writer: json_facade = JsonFacade(writer) # We don't want to hit common library exceptions here. json_facade.write_launch(justMyCode=True) - json_facade.write_set_exception_breakpoints(['raised']) + json_facade.write_set_exception_breakpoints(["raised"]) json_facade.write_make_initial_run() # Just making sure that no exception breakpoints are hit. @@ -1150,181 +1196,184 @@ def get_environ(self): writer.finished_ok = True -@pytest.mark.parametrize('target_file', [ - '_debugger_case_unhandled_exceptions.py', - '_debugger_case_unhandled_exceptions_custom.py', - ]) +@pytest.mark.parametrize( + "target_file", + [ + "_debugger_case_unhandled_exceptions.py", + "_debugger_case_unhandled_exceptions_custom.py", + ], +) def test_case_unhandled_exception(case_setup_dap, target_file): - def check_test_suceeded_msg(writer, stdout, stderr): # Don't call super (we have an unhandled exception in the stack trace). - return 'TEST SUCEEDED' in ''.join(stdout) and 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stdout) and "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'raise MyError' not in stderr and 'raise Exception' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "raise MyError" not in stderr and "raise Exception" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) with case_setup_dap.test_file( - target_file, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - EXPECTED_RETURNCODE=1, - ) as writer: + target_file, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + EXPECTED_RETURNCODE=1, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() - line_in_thread1 = writer.get_line_index_with_content('in thread 1') - line_in_thread2 = writer.get_line_index_with_content('in thread 2') - line_in_main = writer.get_line_index_with_content('in main') - json_facade.wait_for_thread_stopped( - reason='exception', line=(line_in_thread1, line_in_thread2), file=target_file) + line_in_thread1 = writer.get_line_index_with_content("in thread 1") + line_in_thread2 = writer.get_line_index_with_content("in thread 2") + line_in_main = writer.get_line_index_with_content("in main") + json_facade.wait_for_thread_stopped(reason="exception", line=(line_in_thread1, line_in_thread2), file=target_file) json_facade.write_continue() - json_facade.wait_for_thread_stopped( - reason='exception', line=(line_in_thread1, line_in_thread2), file=target_file) + json_facade.wait_for_thread_stopped(reason="exception", line=(line_in_thread1, line_in_thread2), file=target_file) json_facade.write_continue() - json_facade.wait_for_thread_stopped( - reason='exception', line=line_in_main, file=target_file) + json_facade.wait_for_thread_stopped(reason="exception", line=line_in_main, file=target_file) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('target_file', [ - '_debugger_case_unhandled_exceptions_generator.py', - '_debugger_case_unhandled_exceptions_listcomp.py', - ]) +@pytest.mark.parametrize( + "target_file", + [ + "_debugger_case_unhandled_exceptions_generator.py", + "_debugger_case_unhandled_exceptions_listcomp.py", + ], +) def test_case_unhandled_exception_generator(case_setup_dap, target_file): - def check_test_suceeded_msg(writer, stdout, stderr): # Don't call super (we have an unhandled exception in the stack trace). - return 'TEST SUCEEDED' in ''.join(stdout) and 'TEST SUCEEDED' in ''.join(stderr) + return "TEST SUCEEDED" in "".join(stdout) and "TEST SUCEEDED" in "".join(stderr) def additional_output_checks(writer, stdout, stderr): - if 'ZeroDivisionError' not in stderr: - raise AssertionError('Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s' % ( - stdout, stderr)) + if "ZeroDivisionError" not in stderr: + raise AssertionError("Expected test to have an unhandled exception.\nstdout:\n%s\n\nstderr:\n%s" % (stdout, stderr)) with case_setup_dap.test_file( - target_file, - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - EXPECTED_RETURNCODE=1, - ) as writer: + target_file, + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + EXPECTED_RETURNCODE=1, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() - line_in_main = writer.get_line_index_with_content('exc line') + line_in_main = writer.get_line_index_with_content("exc line") - json_hit = json_facade.wait_for_thread_stopped( - reason='exception', line=line_in_main, file=target_file) + json_hit = json_facade.wait_for_thread_stopped(reason="exception", line=line_in_main, file=target_file) frames = json_hit.stack_trace_response.body.stackFrames json_facade.write_continue() - if 'generator' in target_file: - expected_frame_names = ['', 'f', ''] + if "generator" in target_file: + expected_frame_names = ["", "f", ""] else: - expected_frame_names = ['', 'f', ''] + if IS_PY312_OR_GREATER: + expected_frame_names = ["f", ""] + else: + expected_frame_names = ["", "f", ""] - frame_names = [f['name'] for f in frames] + frame_names = [f["name"] for f in frames] assert frame_names == expected_frame_names writer.finished_ok = True def test_case_sys_exit_unhandled_exception(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_sysexit.py', EXPECTED_RETURNCODE=1) as writer: + with case_setup_dap.test_file("_debugger_case_sysexit.py", EXPECTED_RETURNCODE=1) as writer: json_facade = JsonFacade(writer) - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() - break_line = writer.get_line_index_with_content('sys.exit(1)') - json_facade.wait_for_thread_stopped( - reason='exception', line=break_line) + break_line = writer.get_line_index_with_content("sys.exit(1)") + json_facade.wait_for_thread_stopped(reason="exception", line=break_line) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('break_on_system_exit_zero', [True, False]) -@pytest.mark.parametrize('target', ['_debugger_case_sysexit_0.py', '_debugger_case_sysexit_none.py']) +@pytest.mark.parametrize("break_on_system_exit_zero", [True, False]) +@pytest.mark.parametrize("target", ["_debugger_case_sysexit_0.py", "_debugger_case_sysexit_none.py"]) def test_case_sys_exit_0_unhandled_exception(case_setup_dap, break_on_system_exit_zero, target): - with case_setup_dap.test_file(target, EXPECTED_RETURNCODE=0) as writer: json_facade = JsonFacade(writer) kwargs = {} if break_on_system_exit_zero: - kwargs = {'breakOnSystemExitZero': True} + kwargs = {"breakOnSystemExitZero": True} json_facade.write_launch(**kwargs) - json_facade.write_set_exception_breakpoints(['uncaught']) + json_facade.write_set_exception_breakpoints(["uncaught"]) json_facade.write_make_initial_run() - break_line = writer.get_line_index_with_content('sys.exit(') + break_line = writer.get_line_index_with_content("sys.exit(") if break_on_system_exit_zero: - json_facade.wait_for_thread_stopped( - reason='exception', line=break_line) + json_facade.wait_for_thread_stopped(reason="exception", line=break_line) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('break_on_system_exit_zero', [True, False]) +@pytest.mark.parametrize("break_on_system_exit_zero", [True, False]) def test_case_sys_exit_0_handled_exception(case_setup_dap, break_on_system_exit_zero): - - with case_setup_dap.test_file('_debugger_case_sysexit_0.py', EXPECTED_RETURNCODE=0) as writer: + with case_setup_dap.test_file("_debugger_case_sysexit_0.py", EXPECTED_RETURNCODE=0) as writer: json_facade = JsonFacade(writer) json_facade.write_launch( - debugOptions=['BreakOnSystemExitZero'] if break_on_system_exit_zero else [], + debugOptions=["BreakOnSystemExitZero"] if break_on_system_exit_zero else [], ) - json_facade.write_set_exception_breakpoints(['raised']) + json_facade.write_set_exception_breakpoints(["raised"]) json_facade.write_make_initial_run() - break_line = writer.get_line_index_with_content('sys.exit(0)') - break_main_line = writer.get_line_index_with_content('call_main_line') + break_line = writer.get_line_index_with_content("sys.exit(0)") + break_main_line = writer.get_line_index_with_content("call_main_line") if break_on_system_exit_zero: - json_facade.wait_for_thread_stopped( - reason='exception', line=break_line) + json_facade.wait_for_thread_stopped(reason="exception", line=break_line) json_facade.write_continue() - json_facade.wait_for_thread_stopped( - reason='exception', line=break_main_line) + json_facade.wait_for_thread_stopped(reason="exception", line=break_main_line) json_facade.write_continue() writer.finished_ok = True def test_case_handled_exception_breaks_by_type(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_exceptions.py') as writer: + with case_setup_dap.test_file("_debugger_case_exceptions.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_exception_breakpoints(exception_options=[ - ExceptionOptions(breakMode='always', path=[ - {'names': ['Python Exceptions']}, - {'names': ['IndexError']}, - ]) - ]) + json_facade.write_set_exception_breakpoints( + exception_options=[ + ExceptionOptions( + breakMode="always", + path=[ + {"names": ["Python Exceptions"]}, + {"names": ["IndexError"]}, + ], + ) + ] + ) json_facade.write_make_initial_run() - json_facade.wait_for_thread_stopped( - reason='exception', line=writer.get_line_index_with_content('raise indexerror line')) + json_facade.wait_for_thread_stopped(reason="exception", line=writer.get_line_index_with_content("raise indexerror line")) # Deal only with RuntimeErorr now. - json_facade.write_set_exception_breakpoints(exception_options=[ - ExceptionOptions(breakMode='always', path=[ - {'names': ['Python Exceptions']}, - {'names': ['RuntimeError']}, - ]) - ]) + json_facade.write_set_exception_breakpoints( + exception_options=[ + ExceptionOptions( + breakMode="always", + path=[ + {"names": ["Python Exceptions"]}, + {"names": ["RuntimeError"]}, + ], + ) + ] + ) json_facade.write_continue() @@ -1332,22 +1381,22 @@ def test_case_handled_exception_breaks_by_type(case_setup_dap): def test_case_json_protocol(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_print.py') as writer: + with case_setup_dap.test_file("_debugger_case_print.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break_line = writer.get_line_index_with_content('Break here') + break_line = writer.get_line_index_with_content("Break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() - json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == 'started') + json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == "started") json_facade.wait_for_thread_stopped(line=break_line) # : :type response: ThreadsResponse response = json_facade.write_list_threads() assert len(response.body.threads) == 1 - assert next(iter(response.body.threads))['name'] == 'MainThread' + assert next(iter(response.body.threads))["name"] == "MainThread" # Removes breakpoints and proceeds running. json_facade.write_disconnect() @@ -1356,18 +1405,18 @@ def test_case_json_protocol(case_setup_dap): def test_case_started_exited_threads_protocol(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_thread_started_exited.py') as writer: + with case_setup_dap.test_file("_debugger_case_thread_started_exited.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break_line = writer.get_line_index_with_content('Break here') + break_line = writer.get_line_index_with_content("Break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() _stopped_event = json_facade.wait_for_json_message(StoppedEvent) - started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == 'started') - exited_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == 'exited') + started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == "started") + exited_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == "exited") assert len(started_events) == 4 assert len(exited_events) == 3 # Main is still running. json_facade.write_continue() @@ -1377,11 +1426,12 @@ def test_case_started_exited_threads_protocol(case_setup_dap): def test_case_path_translation_not_skipped(case_setup_dap): import site + sys_folder = None - if hasattr(site, 'getusersitepackages'): + if hasattr(site, "getusersitepackages"): sys_folder = site.getusersitepackages() - if not sys_folder and hasattr(site, 'getsitepackages'): + if not sys_folder and hasattr(site, "getsitepackages"): sys_folder = site.getsitepackages() if not sys_folder: @@ -1390,223 +1440,244 @@ def test_case_path_translation_not_skipped(case_setup_dap): if isinstance(sys_folder, (list, tuple)): sys_folder = next(iter(sys_folder)) - with case_setup_dap.test_file('my_code/my_code.py') as writer: + with case_setup_dap.test_file("my_code/my_code.py") as writer: json_facade = JsonFacade(writer) # We need to set up path mapping to enable source references. - my_code = debugger_unittest._get_debugger_test_file('my_code') + my_code = debugger_unittest._get_debugger_test_file("my_code") json_facade.write_launch( justMyCode=False, - pathMappings=[{ - 'localRoot': sys_folder, - 'remoteRoot': my_code, - }] + pathMappings=[ + { + "localRoot": sys_folder, + "remoteRoot": my_code, + } + ], ) - bp_line = writer.get_line_index_with_content('break here') + bp_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints( bp_line, - filename=os.path.join(sys_folder, 'my_code.py'), + filename=os.path.join(sys_folder, "my_code.py"), ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=bp_line) stack_frame = json_hit.stack_trace_response.body.stackFrames[-1] - assert stack_frame['source']['path'] == os.path.join(sys_folder, 'my_code.py') + assert stack_frame["source"]["path"] == os.path.join(sys_folder, "my_code.py") for stack_frame in json_hit.stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 json_facade.write_continue() writer.finished_ok = True def test_case_exclude_double_step(case_setup_dap): - with case_setup_dap.test_file('my_code/my_code_double_step.py') as writer: + with case_setup_dap.test_file("my_code/my_code_double_step.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( justMyCode=False, # i.e.: exclude through rules and not my code rules=[ - {'path': '**/other_noop.py', 'include':False}, - ] + {"path": "**/other_noop.py", "include": False}, + ], ) - break_line = writer.get_line_index_with_content('break here') + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=break_line) json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', file='my_code_double_step.py', line=break_line + 1) + json_hit = json_facade.wait_for_thread_stopped("step", file="my_code_double_step.py", line=break_line + 1) json_facade.write_continue() writer.finished_ok = True def test_case_update_rules(case_setup_dap): - with case_setup_dap.test_file('my_code/my_code.py') as writer: + with case_setup_dap.test_file("my_code/my_code.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( rules=[ - {'path': '**/other.py', 'include':False}, + {"path": "**/other.py", "include": False}, ] ) - break_line = writer.get_line_index_with_content('break here') + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() - json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == 'started') + json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == "started") json_hit = json_facade.wait_for_thread_stopped(line=break_line) json_facade.reset_sent_launch_or_attach() json_facade.write_launch( rules=[ - {'path': '**/other.py', 'include':True}, + {"path": "**/other.py", "include": True}, ] ) json_facade.write_step_in(json_hit.thread_id) # Not how we stoppen in the file that wasn't initially included. - json_hit = json_facade.wait_for_thread_stopped('step', name='call_me_back1') + json_hit = json_facade.wait_for_thread_stopped("step", name="call_me_back1") json_facade.reset_sent_launch_or_attach() json_facade.write_launch( rules=[ - {'path': '**/other.py', 'include':False}, + {"path": "**/other.py", "include": False}, ] ) json_facade.write_step_in(json_hit.thread_id) # Not how we go back to the callback and not to the `call_me_back1` because # `call_me_back1` is now excluded again. - json_hit = json_facade.wait_for_thread_stopped('step', name='callback1') + json_hit = json_facade.wait_for_thread_stopped("step", name="callback1") json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize("custom_setup", [ - 'set_exclude_launch_module_full', - 'set_exclude_launch_module_prefix', - 'set_exclude_launch_path_match_filename', - 'set_exclude_launch_path_match_folder', - 'set_just_my_code', - 'set_just_my_code_and_include', -]) +@pytest.mark.parametrize( + "custom_setup", + [ + "set_exclude_launch_module_full", + "set_exclude_launch_module_prefix", + "set_exclude_launch_path_match_filename", + "set_exclude_launch_path_match_folder", + "set_just_my_code", + "set_just_my_code_and_include", + ], +) def test_case_skipping_filters(case_setup_dap, custom_setup): - with case_setup_dap.test_file('my_code/my_code.py') as writer: + with case_setup_dap.test_file("my_code/my_code.py") as writer: json_facade = JsonFacade(writer) expect_just_my_code = False - if custom_setup == 'set_exclude_launch_path_match_filename': + if custom_setup == "set_exclude_launch_path_match_filename": json_facade.write_launch( justMyCode=False, rules=[ - {'path': '**/other.py', 'include':False}, - ] + {"path": "**/other.py", "include": False}, + ], ) - elif custom_setup == 'set_exclude_launch_path_match_folder': - not_my_code_dir = debugger_unittest._get_debugger_test_file('not_my_code') + elif custom_setup == "set_exclude_launch_path_match_folder": + not_my_code_dir = debugger_unittest._get_debugger_test_file("not_my_code") json_facade.write_launch( debugStdLib=True, rules=[ - {'path': not_my_code_dir, 'include':False}, - ] + {"path": not_my_code_dir, "include": False}, + ], ) - other_filename = os.path.join(not_my_code_dir, 'other.py') + other_filename = os.path.join(not_my_code_dir, "other.py") response = json_facade.write_set_breakpoints(1, filename=other_filename, verified=False) assert response.body.breakpoints == [ - {'verified': False, 'id': 0, 'message': 'Breakpoint in file excluded by filters.', 'source': {'path': other_filename}, 'line': 1}] + { + "verified": False, + "id": 0, + "message": "Breakpoint in file excluded by filters.", + "source": {"path": other_filename}, + "line": 1, + } + ] # Note: there's actually a use-case where we'd hit that breakpoint even if it was excluded # by filters, so, we must actually clear it afterwards (the use-case is that when we're # stepping into the context with the breakpoint we wouldn't skip it). json_facade.write_set_breakpoints([], filename=other_filename) - other_filename = os.path.join(not_my_code_dir, 'file_that_does_not_exist.py') + other_filename = os.path.join(not_my_code_dir, "file_that_does_not_exist.py") response = json_facade.write_set_breakpoints(1, filename=other_filename, verified=False) assert response.body.breakpoints == [ - {'verified': False, 'id': 1, 'message': 'Breakpoint in file that does not exist.', 'source': {'path': other_filename}, 'line': 1}] + { + "verified": False, + "id": 1, + "message": "Breakpoint in file that does not exist.", + "source": {"path": other_filename}, + "line": 1, + } + ] - elif custom_setup == 'set_exclude_launch_module_full': + elif custom_setup == "set_exclude_launch_module_full": json_facade.write_launch( - debugOptions=['DebugStdLib'], + debugOptions=["DebugStdLib"], rules=[ - {'module': 'not_my_code.other', 'include':False}, - ] + {"module": "not_my_code.other", "include": False}, + ], ) - elif custom_setup == 'set_exclude_launch_module_prefix': + elif custom_setup == "set_exclude_launch_module_prefix": json_facade.write_launch( - debugOptions=['DebugStdLib'], + debugOptions=["DebugStdLib"], rules=[ - {'module': 'not_my_code', 'include':False}, - ] + {"module": "not_my_code", "include": False}, + ], ) - elif custom_setup == 'set_just_my_code': + elif custom_setup == "set_just_my_code": expect_just_my_code = True - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) json_facade.write_launch(debugOptions=[]) - not_my_code_dir = debugger_unittest._get_debugger_test_file('not_my_code') - other_filename = os.path.join(not_my_code_dir, 'other.py') - response = json_facade.write_set_breakpoints( - 33, filename=other_filename, verified=False, expected_lines_in_response=[14]) - assert response.body.breakpoints == [{ - 'verified': False, - 'id': 0, - 'message': 'Breakpoint in file excluded by filters.\nNote: may be excluded because of \"justMyCode\" option (default == true).Try setting \"justMyCode\": false in the debug configuration (e.g., launch.json).\n', - 'source': {'path': other_filename}, - 'line': 14 - }] - elif custom_setup == 'set_just_my_code_and_include': + not_my_code_dir = debugger_unittest._get_debugger_test_file("not_my_code") + other_filename = os.path.join(not_my_code_dir, "other.py") + response = json_facade.write_set_breakpoints(33, filename=other_filename, verified=False, expected_lines_in_response=[14]) + assert response.body.breakpoints == [ + { + "verified": False, + "id": 0, + "message": 'Breakpoint in file excluded by filters.\nNote: may be excluded because of "justMyCode" option (default == true).Try setting "justMyCode": false in the debug configuration (e.g., launch.json).\n', + "source": {"path": other_filename}, + "line": 14, + } + ] + elif custom_setup == "set_just_my_code_and_include": expect_just_my_code = True # I.e.: nothing in my_code (add it with rule). - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('launch')]) + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("launch")]) json_facade.write_launch( debugOptions=[], rules=[ - {'module': '__main__', 'include':True}, - ] + {"module": "__main__", "include": True}, + ], ) else: - raise AssertionError('Unhandled: %s' % (custom_setup,)) + raise AssertionError("Unhandled: %s" % (custom_setup,)) - break_line = writer.get_line_index_with_content('break here') + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() - json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == 'started') + json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == "started") json_hit = json_facade.wait_for_thread_stopped(line=break_line) json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='callback1') + json_hit = json_facade.wait_for_thread_stopped("step", name="callback1") messages = json_facade.mark_messages( - OutputEvent, lambda output_event: 'Frame skipped from debugging during step-in.' in output_event.body.output) + OutputEvent, lambda output_event: "Frame skipped from debugging during step-in." in output_event.body.output + ) assert len(messages) == 1 body = next(iter(messages)).body - found_just_my_code = 'Note: may have been skipped because of \"justMyCode\" option (default == true)' in body.output + found_just_my_code = 'Note: may have been skipped because of "justMyCode" option (default == true)' in body.output assert found_just_my_code == expect_just_my_code - assert body.category == 'important' + assert body.category == "important" json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='callback2') + json_hit = json_facade.wait_for_thread_stopped("step", name="callback2") json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='callback1') + json_hit = json_facade.wait_for_thread_stopped("step", name="callback1") json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='') + json_hit = json_facade.wait_for_thread_stopped("step", name="") json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='') + json_hit = json_facade.wait_for_thread_stopped("step", name="") json_facade.write_step_next(json_hit.thread_id) @@ -1614,17 +1685,23 @@ def test_case_skipping_filters(case_setup_dap, custom_setup): json_facade.write_continue() # Check that it's sent only once. - assert len(json_facade.mark_messages( - OutputEvent, lambda output_event: 'Frame skipped from debugging during step-in.' in output_event.body.output)) == 0 + assert ( + len( + json_facade.mark_messages( + OutputEvent, lambda output_event: "Frame skipped from debugging during step-in." in output_event.body.output + ) + ) + == 0 + ) writer.finished_ok = True def test_case_completions_json(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_completions.py') as writer: + with case_setup_dap.test_file("_debugger_case_completions.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -1636,51 +1713,41 @@ def test_case_completions_json(case_setup_dap): if i == 0: first_hit = json_hit - completions_arguments = pydevd_schema.CompletionsArguments( - 'dict.', 6, frameId=json_hit.frame_id, line=0) - completions_request = json_facade.write_request( - pydevd_schema.CompletionsRequest(completions_arguments)) + completions_arguments = pydevd_schema.CompletionsArguments("dict.", 6, frameId=json_hit.frame_id, line=0) + completions_request = json_facade.write_request(pydevd_schema.CompletionsRequest(completions_arguments)) response = json_facade.wait_for_response(completions_request) assert response.success - labels = [x['label'] for x in response.body.targets] - assert set(labels).issuperset(set(['__contains__', 'items', 'keys', 'values'])) + labels = [x["label"] for x in response.body.targets] + assert set(labels).issuperset(set(["__contains__", "items", "keys", "values"])) - completions_arguments = pydevd_schema.CompletionsArguments( - 'dict.item', 10, frameId=json_hit.frame_id) - completions_request = json_facade.write_request( - pydevd_schema.CompletionsRequest(completions_arguments)) + completions_arguments = pydevd_schema.CompletionsArguments("dict.item", 10, frameId=json_hit.frame_id) + completions_request = json_facade.write_request(pydevd_schema.CompletionsRequest(completions_arguments)) response = json_facade.wait_for_response(completions_request) assert response.success if IS_JYTHON: - assert response.body.targets == [ - {'start': 5, 'length': 4, 'type': 'keyword', 'label': 'items'}] + assert response.body.targets == [{"start": 5, "length": 4, "type": "keyword", "label": "items"}] else: - assert response.body.targets == [ - {'start': 5, 'length': 4, 'type': 'function', 'label': 'items'}] + assert response.body.targets == [{"start": 5, "length": 4, "type": "function", "label": "items"}] if i == 1: # Check with a previously existing frameId. assert first_hit.frame_id != json_hit.frame_id - completions_arguments = pydevd_schema.CompletionsArguments( - 'dict.item', 10, frameId=first_hit.frame_id) - completions_request = json_facade.write_request( - pydevd_schema.CompletionsRequest(completions_arguments)) + completions_arguments = pydevd_schema.CompletionsArguments("dict.item", 10, frameId=first_hit.frame_id) + completions_request = json_facade.write_request(pydevd_schema.CompletionsRequest(completions_arguments)) response = json_facade.wait_for_response(completions_request) assert not response.success - assert response.message == 'Thread to get completions seems to have resumed already.' + assert response.message == "Thread to get completions seems to have resumed already." # Check with a never frameId which never existed. - completions_arguments = pydevd_schema.CompletionsArguments( - 'dict.item', 10, frameId=99999) - completions_request = json_facade.write_request( - pydevd_schema.CompletionsRequest(completions_arguments)) + completions_arguments = pydevd_schema.CompletionsArguments("dict.item", 10, frameId=99999) + completions_request = json_facade.write_request(pydevd_schema.CompletionsRequest(completions_arguments)) response = json_facade.wait_for_response(completions_request) assert not response.success - assert response.message.startswith('Wrong ID sent from the client:') + assert response.message.startswith("Wrong ID sent from the client:") json_facade.write_continue() @@ -1688,39 +1755,37 @@ def test_case_completions_json(case_setup_dap): def test_modules(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break 2 here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break 2 here")) json_facade.write_make_initial_run() stopped_event = json_facade.wait_for_json_message(StoppedEvent) thread_id = stopped_event.body.threadId - json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) + json_facade.write_request(pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) json_facade.wait_for_json_message(ModuleEvent) # : :type response: ModulesResponse # : :type modules_response_body: ModulesResponseBody - response = json_facade.wait_for_response(json_facade.write_request( - pydevd_schema.ModulesRequest(pydevd_schema.ModulesArguments()))) + response = json_facade.wait_for_response(json_facade.write_request(pydevd_schema.ModulesRequest(pydevd_schema.ModulesArguments()))) modules_response_body = response.body assert len(modules_response_body.modules) == 1 module = next(iter(modules_response_body.modules)) - assert module['name'] == '__main__' - assert module['path'].endswith('_debugger_case_local_variables.py') + assert module["name"] == "__main__" + assert module["path"].endswith("_debugger_case_local_variables.py") json_facade.write_continue() writer.finished_ok = True def test_dict_ordered(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_odict.py') as writer: + with case_setup_dap.test_file("_debugger_case_odict.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1730,35 +1795,37 @@ def test_dict_ordered(case_setup_dap): variables_references = variables_response.body.variables for dct in variables_references: - if dct['name'] == 'odict': + if dct["name"] == "odict": break else: raise AssertionError('Expected to find "odict".') - ref = dct['variablesReference'] + ref = dct["variablesReference"] assert isinstance(ref, int_types) # : :type variables_response: VariablesResponse variables_response = json_facade.get_variables_response(ref) - assert [(d['name'], d['value']) for d in variables_response.body.variables if (not d['name'].startswith('_OrderedDict')) and (d['name'] not in DAPGrouper.SCOPES_SORTED)] == [ - ('4', "'first'"), ('3', "'second'"), ('2', "'last'"), (GENERATED_LEN_ATTR_NAME, '3')] + assert [ + (d["name"], d["value"]) + for d in variables_response.body.variables + if (not d["name"].startswith("_OrderedDict")) and (d["name"] not in DAPGrouper.SCOPES_SORTED) + ] == [("4", "'first'"), ("3", "'second'"), ("2", "'last'"), (GENERATED_LEN_ATTR_NAME, "3")] json_facade.write_continue() writer.finished_ok = True def test_dict_contents(case_setup_dap, pyfile): - @pyfile def check(): - dct = {'a': 1, '_b_': 2, '__c__': 3} - print('TEST SUCEEDED') # break here + dct = {"a": 1, "_b_": 2, "__c__": 3} + print("TEST SUCEEDED") # break here with case_setup_dap.test_file(check) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1768,30 +1835,30 @@ def check(): variables_references = variables_response.body.variables for dct in variables_references: - if dct['name'] == 'dct': + if dct["name"] == "dct": break else: raise AssertionError('Expected to find "dct".') - ref = dct['variablesReference'] + ref = dct["variablesReference"] assert isinstance(ref, int_types) # : :type variables_response: VariablesResponse variables_response = json_facade.get_variables_response(ref) - variable_names = set(v['name'] for v in variables_response.body.variables) - for n in ("'a'", "'_b_'", "'__c__'", 'len()'): + variable_names = set(v["name"] for v in variables_response.body.variables) + for n in ("'a'", "'_b_'", "'__c__'", "len()"): assert n in variable_names json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Putting unicode on frame vars does not work on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="Putting unicode on frame vars does not work on Jython.") def test_stack_and_variables_dict(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break 2 here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break 2 here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1805,25 +1872,32 @@ def test_stack_and_variables_dict(case_setup_dap): # : :type variables_response: VariablesResponse expected_unicode = { - 'name': u'\u16A0', - 'value': "'\u16a1'", - 'type': 'str', - 'presentationHint': {'attributes': ['rawString']}, - 'evaluateName': u'\u16A0', + "name": "\u16A0", + "value": "'\u16a1'", + "type": "str", + "presentationHint": {"attributes": ["rawString"]}, + "evaluateName": "\u16A0", } assert variables_response.body.variables == [ - {'name': 'variable_for_test_1', 'value': '10', 'type': 'int', 'evaluateName': 'variable_for_test_1'}, - {'name': 'variable_for_test_2', 'value': '20', 'type': 'int', 'evaluateName': 'variable_for_test_2'}, - {'name': 'variable_for_test_3', 'value': "{'a': 30, 'b': 20}", 'type': 'dict', 'evaluateName': 'variable_for_test_3'}, - expected_unicode + {"name": "variable_for_test_1", "value": "10", "type": "int", "evaluateName": "variable_for_test_1"}, + {"name": "variable_for_test_2", "value": "20", "type": "int", "evaluateName": "variable_for_test_2"}, + {"name": "variable_for_test_3", "value": "{'a': 30, 'b': 20}", "type": "dict", "evaluateName": "variable_for_test_3"}, + expected_unicode, ] variables_response = json_facade.get_variables_response(dict_variable_reference) - check = [x for x in variables_response.body.variables if x['name'] not in DAPGrouper.SCOPES_SORTED] + check = [x for x in variables_response.body.variables if x["name"] not in DAPGrouper.SCOPES_SORTED] assert check == [ - {'name': "'a'", 'value': '30', 'type': 'int', 'evaluateName': "variable_for_test_3['a']", 'variablesReference': 0 }, - {'name': "'b'", 'value': '20', 'type': 'int', 'evaluateName': "variable_for_test_3['b']", 'variablesReference': 0}, - {'name': GENERATED_LEN_ATTR_NAME, 'value': '2', 'type': 'int', 'evaluateName': 'len(variable_for_test_3)', 'variablesReference': 0, 'presentationHint': {'attributes': ['readOnly']}} + {"name": "'a'", "value": "30", "type": "int", "evaluateName": "variable_for_test_3['a']", "variablesReference": 0}, + {"name": "'b'", "value": "20", "type": "int", "evaluateName": "variable_for_test_3['b']", "variablesReference": 0}, + { + "name": GENERATED_LEN_ATTR_NAME, + "value": "2", + "type": "int", + "evaluateName": "len(variable_for_test_3)", + "variablesReference": 0, + "presentationHint": {"attributes": ["readOnly"]}, + }, ] json_facade.write_continue() @@ -1831,10 +1905,10 @@ def test_stack_and_variables_dict(case_setup_dap): def test_variables_with_same_name(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_variables_with_same_name.py') as writer: + with case_setup_dap.test_file("_debugger_case_variables_with_same_name.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1848,7 +1922,7 @@ def test_variables_with_same_name(case_setup_dap): # : :type variables_response: VariablesResponse assert variables_response.body.variables == [ - {'name': 'td', 'value': "{foo: 'bar', gad: 'zooks', foo: 'bur'}", 'type': 'dict', 'evaluateName': 'td'} + {"name": "td", "value": "{foo: 'bar', gad: 'zooks', foo: 'bur'}", "type": "dict", "evaluateName": "td"} ] dict_variables_response = json_facade.get_variables_response(dict_variable_reference) @@ -1859,68 +1933,68 @@ def test_variables_with_same_name(case_setup_dap): found_foo = False found_foo_with_id = False for v in variables: - if v['name'].startswith('foo'): + if v["name"].startswith("foo"): if not found_foo: - assert v['name'] == 'foo' + assert v["name"] == "foo" found_foo = True else: - assert v['name'].startswith('foo (id: ') - v['name'] = 'foo' + assert v["name"].startswith("foo (id: ") + v["name"] = "foo" found_foo_with_id = True assert found_foo assert found_foo_with_id def compute_key(entry): - return (entry['name'], entry['value']) + return (entry["name"], entry["value"]) # Sort because the order may be different on Py2/Py3. - assert sorted(variables, key=compute_key) == sorted([ - { - 'name': 'foo', - 'value': "'bar'", - 'type': 'str', - 'variablesReference': 0, - 'presentationHint': {'attributes': ['rawString']} - }, - - { - # 'name': 'foo (id: 2699272929584)', In the code above we changed this - # to 'name': 'foo' for the comparisson. - 'name': 'foo', - 'value': "'bur'", - 'type': 'str', - 'variablesReference': 0, - 'presentationHint': {'attributes': ['rawString']} - }, - - { - 'name': 'gad', - 'value': "'zooks'", - 'type': 'str', - 'variablesReference': 0, - 'presentationHint': {'attributes': ['rawString']} - }, - - { - 'name': 'len()', - 'value': '3', - 'type': 'int', - 'evaluateName': 'len(td)', - 'variablesReference': 0, - 'presentationHint': {'attributes': ['readOnly']} - }, - ], key=compute_key) + assert sorted(variables, key=compute_key) == sorted( + [ + { + "name": "foo", + "value": "'bar'", + "type": "str", + "variablesReference": 0, + "presentationHint": {"attributes": ["rawString"]}, + }, + { + # 'name': 'foo (id: 2699272929584)', In the code above we changed this + # to 'name': 'foo' for the comparisson. + "name": "foo", + "value": "'bur'", + "type": "str", + "variablesReference": 0, + "presentationHint": {"attributes": ["rawString"]}, + }, + { + "name": "gad", + "value": "'zooks'", + "type": "str", + "variablesReference": 0, + "presentationHint": {"attributes": ["rawString"]}, + }, + { + "name": "len()", + "value": "3", + "type": "int", + "evaluateName": "len(td)", + "variablesReference": 0, + "presentationHint": {"attributes": ["readOnly"]}, + }, + ], + key=compute_key, + ) json_facade.write_continue() writer.finished_ok = True def test_hasattr_failure(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_hasattr_crash.py') as writer: + with case_setup_dap.test_file("_debugger_case_hasattr_crash.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1929,17 +2003,17 @@ def test_hasattr_failure(case_setup_dap): variables_response = json_facade.get_variables_response(json_hit.frame_id) for variable in variables_response.body.variables: - if variable['evaluateName'] == 'obj': + if variable["evaluateName"] == "obj": break else: raise AssertionError('Did not find "obj" in %s' % (variables_response.body.variables,)) - evaluate_response = json_facade.evaluate('obj', json_hit.frame_id, context='hover') + evaluate_response = json_facade.evaluate("obj", json_hit.frame_id, context="hover") evaluate_response_body = evaluate_response.body.to_dict() - assert evaluate_response_body['result'] == 'An exception was raised: RuntimeError()' + assert evaluate_response_body["result"] == "An exception was raised: RuntimeError()" - json_facade.evaluate('not_there', json_hit.frame_id, context='hover', success=False) - json_facade.evaluate('not_there', json_hit.frame_id, context='watch', success=False) + json_facade.evaluate("not_there", json_hit.frame_id, context="hover", success=False) + json_facade.evaluate("not_there", json_hit.frame_id, context="watch", success=False) json_facade.write_continue() @@ -1947,10 +2021,10 @@ def test_hasattr_failure(case_setup_dap): def test_getattr_warning(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_warnings.py') as writer: + with case_setup_dap.test_file("_debugger_case_warnings.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -1959,14 +2033,14 @@ def test_getattr_warning(case_setup_dap): variables_response = json_facade.get_variables_response(json_hit.frame_id) for variable in variables_response.body.variables: - if variable['evaluateName'] == 'obj': + if variable["evaluateName"] == "obj": break else: raise AssertionError('Did not find "obj" in %s' % (variables_response.body.variables,)) - json_facade.evaluate('obj', json_hit.frame_id, context='hover') - json_facade.evaluate('not_there', json_hit.frame_id, context='hover', success=False) - json_facade.evaluate('not_there', json_hit.frame_id, context='watch', success=False) + json_facade.evaluate("obj", json_hit.frame_id, context="hover") + json_facade.evaluate("not_there", json_hit.frame_id, context="hover", success=False) + json_facade.evaluate("not_there", json_hit.frame_id, context="watch", success=False) json_facade.write_continue() @@ -1975,24 +2049,19 @@ def test_getattr_warning(case_setup_dap): def test_warning_on_repl(case_setup_dap): - def additional_output_checks(writer, stdout, stderr): assert "WarningCalledOnRepl" in stderr - with case_setup_dap.test_file( - '_debugger_case_evaluate.py', - additional_output_checks=additional_output_checks - ) as writer: + with case_setup_dap.test_file("_debugger_case_evaluate.py", additional_output_checks=additional_output_checks) as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # We want warnings from the in evaluate in the repl (but not hover/watch). - json_facade.evaluate( - 'import warnings; warnings.warn("WarningCalledOnRepl")', json_hit.frame_id, context='repl') + json_facade.evaluate('import warnings; warnings.warn("WarningCalledOnRepl")', json_hit.frame_id, context="repl") json_facade.write_continue() @@ -2000,25 +2069,24 @@ def additional_output_checks(writer, stdout, stderr): def test_evaluate_none(case_setup_dap, pyfile): - @pyfile def eval_none(): - print('TEST SUCEEDED') # break here + print("TEST SUCEEDED") # break here with case_setup_dap.test_file(eval_none) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) - evaluate_response = json_facade.evaluate('None', json_hit.frame_id, context='repl') + evaluate_response = json_facade.evaluate("None", json_hit.frame_id, context="repl") assert evaluate_response.body.result is not None - assert evaluate_response.body.result == '' + assert evaluate_response.body.result == "" json_facade.write_continue() @@ -2029,7 +2097,7 @@ def test_evaluate_numpy(case_setup_dap, pyfile): try: import numpy except ImportError: - pytest.skip('numpy not available') + pytest.skip("numpy not available") @pyfile def numpy_small_array_file(): @@ -2037,14 +2105,14 @@ def numpy_small_array_file(): test_array = numpy.array(2) - print('TEST SUCEEDED') # break here + print("TEST SUCEEDED") # break here with case_setup_dap.test_file(numpy_small_array_file) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2053,33 +2121,21 @@ def numpy_small_array_file(): variables_response = json_facade.get_variables_response(json_hit.frame_id) for variable in variables_response.body.variables: - if variable['evaluateName'] == 'test_array': + if variable["evaluateName"] == "test_array": break else: raise AssertionError('Did not find "test_array" in %s' % (variables_response.body.variables,)) - evaluate_response = json_facade.evaluate('test_array', json_hit.frame_id, context='repl') + evaluate_response = json_facade.evaluate("test_array", json_hit.frame_id, context="repl") variables_response = json_facade.get_variables_response(evaluate_response.body.variablesReference) - check = [dict([(variable['name'], variable['value'])]) for variable in variables_response.body.variables] + check = [dict([(variable["name"], variable["value"])]) for variable in variables_response.body.variables] assert check in ( - [ - {'special variables': ''}, - {'dtype': "dtype('int32')"}, - {'max': '2'}, - {'min': '2'}, - {'shape': '()'}, - {'size': '1'} - ], - [ - {'special variables': ''}, - {'dtype': "dtype('int64')"}, - {'max': '2'}, - {'min': '2'}, - {'shape': '()'}, - {'size': '1'} - ], + [{'special variables': ''}, {'dtype': "dtype('int64')"}, {'max': 'np.int64(2)'}, {'min': 'np.int64(2)'}, {'shape': '()'}, {'size': '1'}], + [{'special variables': ''}, {'dtype': "dtype('int32')"}, {'max': 'np.int32(2)'}, {'min': 'np.int32(2)'}, {'shape': '()'}, {'size': '1'}], + [{"special variables": ""}, {"dtype": "dtype('int32')"}, {"max": "2"}, {"min": "2"}, {"shape": "()"}, {"size": "1"}], + [{"special variables": ""}, {"dtype": "dtype('int64')"}, {"max": "2"}, {"min": "2"}, {"shape": "()"}, {"size": "1"}], ) json_facade.write_continue() @@ -2088,24 +2144,21 @@ def numpy_small_array_file(): def test_evaluate_name_mangling(case_setup_dap, pyfile): - @pyfile def target(): - class SomeObj(object): - def __init__(self): self.__value = 10 - print('here') # Break here + print("here") # Break here SomeObj() - print('TEST SUCEEDED') + print("TEST SUCEEDED") with case_setup_dap.test_file(target) as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_launch(justMyCode=False) json_facade.write_make_initial_run() @@ -2114,46 +2167,40 @@ def __init__(self): # Check eval with a properly indented block evaluate_response = json_facade.evaluate( - 'self.__value', + "self.__value", frameId=json_hit.frame_id, context="repl", ) - assert evaluate_response.body.result == '10' + assert evaluate_response.body.result == "10" json_facade.write_continue() writer.finished_ok = True def test_evaluate_no_name_mangling(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) # Check eval with a properly indented block - evaluate_response = json_facade.evaluate( - 'x = "_"', frameId=json_hit.frame_id, context="repl") + evaluate_response = json_facade.evaluate('x = "_"', frameId=json_hit.frame_id, context="repl") assert not evaluate_response.body.result - evaluate_response = json_facade.evaluate( - 'x', frameId=json_hit.frame_id, context="repl") + evaluate_response = json_facade.evaluate("x", frameId=json_hit.frame_id, context="repl") assert evaluate_response.body.result == "'_'" - evaluate_response = json_facade.evaluate( - 'y = "__"', frameId=json_hit.frame_id, context="repl") + evaluate_response = json_facade.evaluate('y = "__"', frameId=json_hit.frame_id, context="repl") assert not evaluate_response.body.result - evaluate_response = json_facade.evaluate( - 'y', frameId=json_hit.frame_id, context="repl") + evaluate_response = json_facade.evaluate("y", frameId=json_hit.frame_id, context="repl") assert evaluate_response.body.result == "'__'" - evaluate_response = json_facade.evaluate( - 'None', json_hit.frame_id, context='repl') + evaluate_response = json_facade.evaluate("None", json_hit.frame_id, context="repl") assert not evaluate_response.body.result json_facade.write_continue() @@ -2161,11 +2208,10 @@ def test_evaluate_no_name_mangling(case_setup_dap): def test_evaluate_block_repl(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2178,11 +2224,9 @@ def test_evaluate_block_repl(case_setup_dap): context="repl", ) - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'var0' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "var0" in output_event.body.output) assert len(messages) == 1 - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'var1' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "var1" in output_event.body.output) assert len(messages) == 1 # Check eval with a block that needs to be dedented @@ -2192,11 +2236,9 @@ def test_evaluate_block_repl(case_setup_dap): context="repl", ) - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'foo0' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "foo0" in output_event.body.output) assert len(messages) == 1 - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'foo1' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "foo1" in output_event.body.output) assert len(messages) == 1 json_facade.write_continue() @@ -2204,58 +2246,51 @@ def test_evaluate_block_repl(case_setup_dap): def test_evaluate_block_clipboard(case_setup_dap, pyfile): - @pyfile def target(): MAX_LIMIT = 65538 class SomeObj(object): - def __str__(self): return var1 __repr__ = __str__ - var1 = 'a' * 80000 + var1 = "a" * 80000 var2 = 20000 var3 = SomeObj() - print('TEST SUCEEDED') # Break here + print("TEST SUCEEDED") # Break here def verify(evaluate_response): # : :type evaluate_response: EvaluateResponse assert len(evaluate_response.body.result) >= 80000 - assert '...' not in evaluate_response.body.result - assert set(evaluate_response.body.result).issubset(set(['a', "'"])) + assert "..." not in evaluate_response.body.result + assert set(evaluate_response.body.result).issubset(set(["a", "'"])) with case_setup_dap.test_file(target) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) evaluate_response = json_facade.evaluate( - 'var1', + "var1", frameId=json_hit.frame_id, - context='clipboard', + context="clipboard", ) verify(evaluate_response) - evaluate_response = json_facade.evaluate( - 'var2', - frameId=json_hit.frame_id, - context='clipboard', - fmt={'hex': True} - ) + evaluate_response = json_facade.evaluate("var2", frameId=json_hit.frame_id, context="clipboard", fmt={"hex": True}) assert evaluate_response.body.result == "0x4e20" evaluate_response = json_facade.evaluate( - 'var3', + "var3", frameId=json_hit.frame_id, - context='clipboard', + context="clipboard", ) verify(evaluate_response) @@ -2264,10 +2299,10 @@ def verify(evaluate_response): def test_exception_on_dir(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_dir_exception.py') as writer: + with case_setup_dap.test_file("_debugger_case_dir_exception.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2278,70 +2313,76 @@ def test_exception_on_dir(case_setup_dap): variables_references = json_facade.pop_variables_reference(variables_response.body.variables) variables_response = json_facade.get_variables_response(variables_references[0]) assert variables_response.body.variables == [ - {'variablesReference': 0, 'type': 'int', 'evaluateName': 'self.__dict__[var1]', 'name': 'var1', 'value': '10'}] + {"variablesReference": 0, "type": "int", "evaluateName": "self.__dict__[var1]", "name": "var1", "value": "10"} + ] json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('scenario', [ - 'step_in', - 'step_next', - 'step_out', -]) -@pytest.mark.parametrize('asyncio', [True, False]) +@pytest.mark.parametrize( + "scenario", + [ + "step_in", + "step_next", + "step_out", + ], +) +@pytest.mark.parametrize("asyncio", [True, False]) def test_return_value_regular(case_setup_dap, scenario, asyncio): - with case_setup_dap.test_file('_debugger_case_return_value.py' if not asyncio else '_debugger_case_return_value_asyncio.py') as writer: + with case_setup_dap.test_file("_debugger_case_return_value.py" if not asyncio else "_debugger_case_return_value_asyncio.py") as writer: json_facade = JsonFacade(writer) - break_line = writer.get_line_index_with_content('break here') - json_facade.write_launch(debugOptions=['ShowReturnValue']) + break_line = writer.get_line_index_with_content("break here") + json_facade.write_launch(debugOptions=["ShowReturnValue"]) json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - if scenario == 'step_next': + if scenario == "step_next": json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='main', line=break_line + 1) + json_hit = json_facade.wait_for_thread_stopped("step", name="main", line=break_line + 1) - elif scenario == 'step_in': + elif scenario == "step_in": json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='method1') + json_hit = json_facade.wait_for_thread_stopped("step", name="method1") json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='main') + json_hit = json_facade.wait_for_thread_stopped("step", name="main") - elif scenario == 'step_out': + elif scenario == "step_out": json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='method1') + json_hit = json_facade.wait_for_thread_stopped("step", name="method1") json_facade.write_step_out(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='main') + json_hit = json_facade.wait_for_thread_stopped("step", name="main") else: - raise AssertionError('unhandled scenario: %s' % (scenario,)) + raise AssertionError("unhandled scenario: %s" % (scenario,)) variables_response = json_facade.get_variables_response(json_hit.frame_id) return_variables = json_facade.filter_return_variables(variables_response.body.variables) - assert return_variables == [{ - 'name': '(return) method1', - 'value': '1', - 'type': 'int', - 'evaluateName': "__pydevd_ret_val_dict['method1']", - 'presentationHint': {'attributes': ['readOnly']}, - 'variablesReference': 0, - }] + assert return_variables == [ + { + "name": "(return) method1", + "value": "1", + "type": "int", + "evaluateName": "__pydevd_ret_val_dict['method1']", + "presentationHint": {"attributes": ["readOnly"]}, + "variablesReference": 0, + } + ] json_facade.write_continue() writer.finished_ok = True def test_stack_and_variables_set_and_list(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2351,8 +2392,8 @@ def test_stack_and_variables_set_and_list(case_setup_dap): variables_references = json_facade.pop_variables_reference(variables_response.body.variables) expected_set = "{'a'}" assert variables_response.body.variables == [ - {'type': 'list', 'evaluateName': 'variable_for_test_1', 'name': 'variable_for_test_1', 'value': "['a', 'b']"}, - {'type': 'set', 'evaluateName': 'variable_for_test_2', 'name': 'variable_for_test_2', 'value': expected_set} + {"type": "list", "evaluateName": "variable_for_test_1", "name": "variable_for_test_1", "value": "['a', 'b']"}, + {"type": "set", "evaluateName": "variable_for_test_2", "name": "variable_for_test_2", "value": expected_set}, ] variables_response = json_facade.get_variables_response(variables_references[0]) @@ -2362,45 +2403,47 @@ def test_stack_and_variables_set_and_list(case_setup_dap): assert cleaned_vars.groups_found == set([DAPGrouper.SCOPE_SPECIAL_VARS]) else: assert cleaned_vars.groups_found == set([DAPGrouper.SCOPE_SPECIAL_VARS, DAPGrouper.SCOPE_FUNCTION_VARS]) - assert cleaned_vars.variables == [{ - u'name': u'0', - u'type': u'str', - u'value': u"'a'", - u'presentationHint': {u'attributes': [u'rawString']}, - u'evaluateName': u'variable_for_test_1[0]', - u'variablesReference': 0, - }, - { - u'name': u'1', - u'type': u'str', - u'value': u"'b'", - u'presentationHint': {u'attributes': [u'rawString']}, - u'evaluateName': u'variable_for_test_1[1]', - u'variablesReference': 0, - }, - { - u'name': GENERATED_LEN_ATTR_NAME, - u'type': u'int', - u'value': u'2', - u'evaluateName': u'len(variable_for_test_1)', - u'variablesReference': 0, - u'presentationHint': {'attributes': ['readOnly']}, - }] + assert cleaned_vars.variables == [ + { + "name": "0", + "type": "str", + "value": "'a'", + "presentationHint": {"attributes": ["rawString"]}, + "evaluateName": "variable_for_test_1[0]", + "variablesReference": 0, + }, + { + "name": "1", + "type": "str", + "value": "'b'", + "presentationHint": {"attributes": ["rawString"]}, + "evaluateName": "variable_for_test_1[1]", + "variablesReference": 0, + }, + { + "name": GENERATED_LEN_ATTR_NAME, + "type": "int", + "value": "2", + "evaluateName": "len(variable_for_test_1)", + "variablesReference": 0, + "presentationHint": {"attributes": ["readOnly"]}, + }, + ] json_facade.write_continue() writer.finished_ok = True -_CleanedVars = namedtuple('_CleanedVars', 'variables, groups_found') +_CleanedVars = namedtuple("_CleanedVars", "variables, groups_found") def _clear_groups(variables): groups_found = set() new_variables = [] for v in variables: - if v['name'] in DAPGrouper.SCOPES_SORTED: - groups_found.add(v['name']) - assert not v['type'] + if v["name"] in DAPGrouper.SCOPES_SORTED: + groups_found.add(v["name"]) + assert not v["type"] continue else: @@ -2409,26 +2452,26 @@ def _clear_groups(variables): return _CleanedVars(new_variables, groups_found) -@pytest.mark.skipif(IS_JYTHON, reason='Putting unicode on frame vars does not work on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="Putting unicode on frame vars does not work on Jython.") def test_evaluate_unicode(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break 2 here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break 2 here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) - evaluate_response = json_facade.evaluate(u'\u16A0', json_hit.frame_id) + evaluate_response = json_facade.evaluate("\u16A0", json_hit.frame_id) evaluate_response_body = evaluate_response.body.to_dict() assert evaluate_response_body == { - 'result': "'\u16a1'", - 'type': 'str', - 'variablesReference': 0, - 'presentationHint': {'attributes': ['rawString']}, + "result": "'\u16a1'", + "type": "str", + "variablesReference": 0, + "presentationHint": {"attributes": ["rawString"]}, } json_facade.write_continue() @@ -2436,18 +2479,17 @@ def test_evaluate_unicode(case_setup_dap): def test_evaluate_exec_unicode(case_setup_dap): - def get_environ(writer): env = os.environ.copy() - env["PYTHONIOENCODING"] = 'utf-8' + env["PYTHONIOENCODING"] = "utf-8" return env - with case_setup_dap.test_file('_debugger_case_local_variables2.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) writer.write_start_redirect() - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2461,7 +2503,8 @@ def get_environ(writer): ) messages = json_facade.mark_messages( - OutputEvent, lambda output_event: (u'中' in output_event.body.output) and ('pydevd warning' not in output_event.body.output)) + OutputEvent, lambda output_event: ("中" in output_event.body.output) and ("pydevd warning" not in output_event.body.output) + ) assert len(messages) == 1 # Check exec @@ -2472,7 +2515,8 @@ def get_environ(writer): ) messages = json_facade.mark_messages( - OutputEvent, lambda output_event: (u'中' in output_event.body.output) and ('pydevd warning' not in output_event.body.output)) + OutputEvent, lambda output_event: ("中" in output_event.body.output) and ("pydevd warning" not in output_event.body.output) + ) assert len(messages) == 1 response = json_facade.evaluate( @@ -2483,7 +2527,8 @@ def get_environ(writer): assert response.body.result in ("u'\\u4e2d'", "'\u4e2d'") # py2 or py3 messages = json_facade.mark_messages( - OutputEvent, lambda output_event: (u'中' in output_event.body.output) and ('pydevd warning' not in output_event.body.output)) + OutputEvent, lambda output_event: ("中" in output_event.body.output) and ("pydevd warning" not in output_event.body.output) + ) assert len(messages) == 0 # i.e.: we don't print in this case. json_facade.write_continue() @@ -2491,11 +2536,10 @@ def get_environ(writer): def test_evaluate_repl_redirect(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2508,8 +2552,7 @@ def test_evaluate_repl_redirect(case_setup_dap): context="repl", ) - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'var' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "var" in output_event.body.output) assert len(messages) == 1 json_facade.write_continue() @@ -2517,21 +2560,19 @@ def test_evaluate_repl_redirect(case_setup_dap): def test_evaluate_no_double_exec(case_setup_dap, pyfile): - @pyfile def exec_code(): - def print_and_raise(): - print('Something') + print("Something") raise RuntimeError() - print('Break here') - print('TEST SUCEEDED!') + print("Break here") + print("TEST SUCEEDED!") with case_setup_dap.test_file(exec_code) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -2544,8 +2585,7 @@ def print_and_raise(): success=False, ) - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: u'Something' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "Something" in output_event.body.output) assert len(messages) == 1 json_facade.write_continue() @@ -2555,51 +2595,53 @@ def print_and_raise(): def test_evaluate_variable_references(case_setup_dap): from _pydevd_bundle._debug_adapter.pydevd_schema import EvaluateRequest from _pydevd_bundle._debug_adapter.pydevd_schema import EvaluateArguments - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) evaluate_response = json_facade.wait_for_response( - json_facade.write_request(EvaluateRequest(EvaluateArguments('variable_for_test_2', json_hit.frame_id)))) + json_facade.write_request(EvaluateRequest(EvaluateArguments("variable_for_test_2", json_hit.frame_id))) + ) evaluate_response_body = evaluate_response.body.to_dict() variables_reference = json_facade.pop_variables_reference([evaluate_response_body]) assert evaluate_response_body == { - 'type': 'set', - 'result': "{'a'}", - 'presentationHint': {}, + "type": "set", + "result": "{'a'}", + "presentationHint": {}, } assert len(variables_reference) == 1 reference = variables_reference[0] assert reference > 0 variables_response = json_facade.get_variables_response(reference) - child_variables = variables_response.to_dict()['body']['variables'] + child_variables = variables_response.to_dict()["body"]["variables"] # The name for a reference in a set is the id() of the variable and can change at each run. - del child_variables[0]['name'] + del child_variables[0]["name"] assert child_variables == [ { - 'type': 'str', - 'value': "'a'", - 'presentationHint': {'attributes': ['rawString']}, - 'variablesReference': 0, + "type": "str", + "value": "'a'", + "presentationHint": {"attributes": ["rawString"]}, + "variablesReference": 0, }, { - 'name': GENERATED_LEN_ATTR_NAME, - 'type': 'int', - 'value': '1', - 'presentationHint': {'attributes': ['readOnly']}, - 'evaluateName': 'len(variable_for_test_2)', - 'variablesReference': 0, - } + "name": GENERATED_LEN_ATTR_NAME, + "type": "int", + "value": "1", + "presentationHint": {"attributes": ["readOnly"]}, + "evaluateName": "len(variable_for_test_2)", + "variablesReference": 0, + }, ] json_facade.write_continue() @@ -2609,24 +2651,25 @@ def test_evaluate_variable_references(case_setup_dap): def test_set_expression(case_setup_dap): from _pydevd_bundle._debug_adapter.pydevd_schema import SetExpressionRequest from _pydevd_bundle._debug_adapter.pydevd_schema import SetExpressionArguments - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) set_expression_response = json_facade.wait_for_response( - json_facade.write_request(SetExpressionRequest( - SetExpressionArguments('bb', '20', frameId=json_hit.frame_id)))) - assert set_expression_response.to_dict()['body'] == { - 'value': '20', 'type': 'int', 'presentationHint': {}, 'variablesReference': 0} + json_facade.write_request(SetExpressionRequest(SetExpressionArguments("bb", "20", frameId=json_hit.frame_id))) + ) + assert set_expression_response.to_dict()["body"] == {"value": "20", "type": "int", "presentationHint": {}, "variablesReference": 0} variables_response = json_facade.get_variables_response(json_hit.frame_id) - assert {'name': 'bb', 'value': '20', 'type': 'int', 'evaluateName': 'bb', 'variablesReference': 0} in \ - variables_response.to_dict()['body']['variables'] + assert {"name": "bb", "value": "20", "type": "int", "evaluateName": "bb", "variablesReference": 0} in variables_response.to_dict()[ + "body" + ]["variables"] json_facade.write_continue() writer.finished_ok = True @@ -2636,10 +2679,10 @@ def test_set_expression_failures(case_setup_dap): from _pydevd_bundle._debug_adapter.pydevd_schema import SetExpressionRequest from _pydevd_bundle._debug_adapter.pydevd_schema import SetExpressionArguments - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -2647,10 +2690,10 @@ def test_set_expression_failures(case_setup_dap): json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) set_expression_response = json_facade.wait_for_response( - json_facade.write_request(SetExpressionRequest( - SetExpressionArguments('frame_not_there', '10', frameId=0)))) + json_facade.write_request(SetExpressionRequest(SetExpressionArguments("frame_not_there", "10", frameId=0))) + ) assert not set_expression_response.success - assert set_expression_response.message == 'Unable to find thread to set expression.' + assert set_expression_response.message == "Unable to find thread to set expression." json_facade.write_continue() @@ -2658,17 +2701,17 @@ def test_set_expression_failures(case_setup_dap): def test_get_variable_errors(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_completions.py') as writer: + with case_setup_dap.test_file("_debugger_case_completions.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # First, try with wrong id. response = json_facade.get_variables_response(9999, success=False) - assert response.message == 'Wrong ID sent from the client: 9999' + assert response.message == "Wrong ID sent from the client: 9999" first_hit = None for i in range(2): @@ -2679,7 +2722,7 @@ def test_get_variable_errors(case_setup_dap): if i == 1: # Now, check with a previously existing frameId. response = json_facade.get_variables_response(first_hit.frame_id, success=False) - assert response.message == 'Unable to find thread to evaluate variable reference.' + assert response.message == "Unable to find thread to evaluate variable reference." json_facade.write_continue(wait_for_response=i == 0) if i == 0: @@ -2689,19 +2732,19 @@ def test_get_variable_errors(case_setup_dap): def test_set_variable_failure(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables2.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables2.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() # Wrong frame - set_variable_response = json_facade.write_set_variable(0, 'invalid_reference', 'invalid_reference', success=False) + set_variable_response = json_facade.write_set_variable(0, "invalid_reference", "invalid_reference", success=False) assert not set_variable_response.success - assert set_variable_response.message == 'Unable to find thread to evaluate variable reference.' + assert set_variable_response.message == "Unable to find thread to evaluate variable reference." json_facade.write_continue() @@ -2709,121 +2752,122 @@ def test_set_variable_failure(case_setup_dap): def _check_list(json_facade, json_hit): - - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_1') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_1") assert variable.value == "['a', 'b', self.var1: 11]" - var0 = json_facade.get_var(variable.variablesReference, '0') + var0 = json_facade.get_var(variable.variablesReference, "0") - json_facade.write_set_variable(variable.variablesReference, var0.name, '1') + json_facade.write_set_variable(variable.variablesReference, var0.name, "1") # Check that it was actually changed. - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_1') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_1") assert variable.value == "[1, 'b', self.var1: 11]" - var1 = json_facade.get_var(variable.variablesReference, 'var1') + var1 = json_facade.get_var(variable.variablesReference, "var1") - json_facade.write_set_variable(variable.variablesReference, var1.name, '2') + json_facade.write_set_variable(variable.variablesReference, var1.name, "2") - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_1') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_1") assert variable.value == "[1, 'b', self.var1: 2]" def _check_tuple(json_facade, json_hit): - - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_4') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_4") assert variable.value == "tuple('a', 1, self.var1: 13)" - var0 = json_facade.get_var(variable.variablesReference, '0') + var0 = json_facade.get_var(variable.variablesReference, "0") - response = json_facade.write_set_variable(variable.variablesReference, var0.name, '1', success=False) + response = json_facade.write_set_variable(variable.variablesReference, var0.name, "1", success=False) assert response.message.startswith("Unable to change: ") - var1 = json_facade.get_var(variable.variablesReference, 'var1') - json_facade.write_set_variable(variable.variablesReference, var1.name, '2') + var1 = json_facade.get_var(variable.variablesReference, "var1") + json_facade.write_set_variable(variable.variablesReference, var1.name, "2") - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_4') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_4") assert variable.value == "tuple('a', 1, self.var1: 2)" def _check_dict_subclass(json_facade, json_hit): - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_3') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_3") assert variable.value == "{in_dct: 20; self.var1: 10}" - var1 = json_facade.get_var(variable.variablesReference, 'var1') + var1 = json_facade.get_var(variable.variablesReference, "var1") - json_facade.write_set_variable(variable.variablesReference, var1.name, '2') + json_facade.write_set_variable(variable.variablesReference, var1.name, "2") # Check that it was actually changed. - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_3') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_3") assert variable.value == "{in_dct: 20; self.var1: 2}" var_in_dct = json_facade.get_var(variable.variablesReference, "'in_dct'") - json_facade.write_set_variable(variable.variablesReference, var_in_dct.name, '5') + json_facade.write_set_variable(variable.variablesReference, var_in_dct.name, "5") # Check that it was actually changed. - variable = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_3') + variable = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_3") assert variable.value == "{in_dct: 5; self.var1: 2}" def _check_set(json_facade, json_hit): - set_var = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_2') + set_var = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_2") assert set_var.value == "set(['a', self.var1: 12])" var_in_set = json_facade.get_var(set_var.variablesReference, index=1) - assert var_in_set.name != 'var1' + assert var_in_set.name != "var1" - set_variables_response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, '1') + set_variables_response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, "1") assert set_variables_response.body.type == "int" assert set_variables_response.body.value == "1" # Check that it was actually changed (which for a set means removing the existing entry # and adding a new one). - set_var = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_2') + set_var = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_2") assert set_var.value == "set([1, self.var1: 12])" # Check that it can be changed again. var_in_set = json_facade.get_var(set_var.variablesReference, index=1) # Check that adding a mutable object to the set does not work. - response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, '[22]', success=False) - assert response.message.startswith('Unable to change: ') + response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, "[22]", success=False) + assert response.message.startswith("Unable to change: ") # Check that it's still the same (the existing entry was not removed). - assert json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_2').value == "set([1, self.var1: 12])" + assert json_facade.get_local_var(json_hit.frame_id, "variable_for_test_2").value == "set([1, self.var1: 12])" - set_variables_response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, '(22,)') + set_variables_response = json_facade.write_set_variable(set_var.variablesReference, var_in_set.name, "(22,)") assert set_variables_response.body.type == "tuple" assert set_variables_response.body.value == "(22,)" # Check that the tuple created can be accessed and is correct in the response. - var_in_tuple_in_set = json_facade.get_var(set_variables_response.body.variablesReference, '0') - assert var_in_tuple_in_set.name == '0' - assert var_in_tuple_in_set.value == '22' + var_in_tuple_in_set = json_facade.get_var(set_variables_response.body.variablesReference, "0") + assert var_in_tuple_in_set.name == "0" + assert var_in_tuple_in_set.value == "22" # Check that we can change the variable in the instance. - var1 = json_facade.get_var(set_var.variablesReference, 'var1') + var1 = json_facade.get_var(set_var.variablesReference, "var1") - json_facade.write_set_variable(set_var.variablesReference, var1.name, '2') + json_facade.write_set_variable(set_var.variablesReference, var1.name, "2") # Check that it was actually changed. - set_var = json_facade.get_local_var(json_hit.frame_id, 'variable_for_test_2') + set_var = json_facade.get_local_var(json_hit.frame_id, "variable_for_test_2") assert set_var.value == "set([(22,), self.var1: 2])" -@pytest.mark.parametrize('_check_func', [ - _check_tuple, - _check_set, - _check_list, - _check_dict_subclass, -]) +@pytest.mark.parametrize( + "_check_func", + [ + _check_tuple, + _check_set, + _check_list, + _check_dict_subclass, + ], +) def test_set_variable_multiple_cases(case_setup_dap, _check_func): - with case_setup_dap.test_file('_debugger_case_local_variables3.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables3.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -2837,12 +2881,10 @@ def test_set_variable_multiple_cases(case_setup_dap, _check_func): def test_get_variables_corner_case(case_setup_dap, pyfile): - @pyfile def case_with_class_as_object(): - class ClassField(object): - __name__ = 'name?' + __name__ = "name?" def __hash__(self): raise RuntimeError() @@ -2851,32 +2893,31 @@ class SomeClass(object): __class__ = ClassField() some_class = SomeClass() - print('TEST SUCEEDED') # Break here + print("TEST SUCEEDED") # Break here with case_setup_dap.test_file(case_with_class_as_object) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - set_var = json_facade.get_local_var(json_hit.frame_id, 'some_class') - assert '__main__.SomeClass' in set_var.value + set_var = json_facade.get_local_var(json_hit.frame_id, "some_class") + assert "__main__.SomeClass" in set_var.value json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Putting unicode on frame vars does not work on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="Putting unicode on frame vars does not work on Jython.") def test_stack_and_variables(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_local_variables.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -2888,14 +2929,14 @@ def test_stack_and_variables(case_setup_dap): # Check stack trace format. stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - format={'module': True, 'line': True} - ))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body stack_frame = next(iter(stack_trace_response_body.stackFrames)) - assert stack_frame['name'] == '__main__.Call : 4' + assert stack_frame["name"] == "__main__.Call : 4" # Regular stack trace request (no format). json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) @@ -2903,11 +2944,11 @@ def test_stack_and_variables(case_setup_dap): stack_trace_response_body = stack_trace_response.body assert len(stack_trace_response_body.stackFrames) == 2 stack_frame = next(iter(stack_trace_response_body.stackFrames)) - assert stack_frame['name'] == 'Call' - assert stack_frame['source']['path'].endswith('_debugger_case_local_variables.py') + assert stack_frame["name"] == "Call" + assert stack_frame["source"]["path"].endswith("_debugger_case_local_variables.py") - name_to_scope = json_facade.get_name_to_scope(stack_frame['id']) - scope = name_to_scope['Locals'] + name_to_scope = json_facade.get_name_to_scope(stack_frame["id"]) + scope = name_to_scope["Locals"] frame_variables_reference = scope.variablesReference assert isinstance(frame_variables_reference, int) @@ -2916,28 +2957,32 @@ def test_stack_and_variables(case_setup_dap): assert len(variables_response.body.variables) == 0 # No variables expected here json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step') + json_hit = json_facade.wait_for_thread_stopped("step") variables_response = json_facade.get_variables_response(frame_variables_reference) # : :type variables_response: VariablesResponse - assert variables_response.body.variables == [{ - 'name': 'variable_for_test_1', - 'value': '10', - 'type': 'int', - 'evaluateName': 'variable_for_test_1', - 'variablesReference': 0, - }] + assert variables_response.body.variables == [ + { + "name": "variable_for_test_1", + "value": "10", + "type": "int", + "evaluateName": "variable_for_test_1", + "variablesReference": 0, + } + ] # Same thing with hex format - variables_response = json_facade.get_variables_response(frame_variables_reference, fmt={'hex': True}) + variables_response = json_facade.get_variables_response(frame_variables_reference, fmt={"hex": True}) # : :type variables_response: VariablesResponse - assert variables_response.body.variables == [{ - 'name': 'variable_for_test_1', - 'value': '0xa', - 'type': 'int', - 'evaluateName': 'variable_for_test_1', - 'variablesReference': 0, - }] + assert variables_response.body.variables == [ + { + "name": "variable_for_test_1", + "value": "0xa", + "type": "int", + "evaluateName": "variable_for_test_1", + "variablesReference": 0, + } + ] # Note: besides the scope/stack/variables we can also have references when: # - setting variable @@ -2949,13 +2994,12 @@ def test_stack_and_variables(case_setup_dap): # Reference is for parent (in this case the frame). # We'll change `variable_for_test_1` from 10 to [1]. - set_variable_response = json_facade.write_set_variable( - frame_variables_reference, 'variable_for_test_1', '[1]') - set_variable_response_as_dict = set_variable_response.to_dict()['body'] + set_variable_response = json_facade.write_set_variable(frame_variables_reference, "variable_for_test_1", "[1]") + set_variable_response_as_dict = set_variable_response.to_dict()["body"] if not IS_JYTHON: # Not properly changing var on Jython. - assert isinstance(set_variable_response_as_dict.pop('variablesReference'), int) - assert set_variable_response_as_dict == {'value': "[1]", 'type': 'list'} + assert isinstance(set_variable_response_as_dict.pop("variablesReference"), int) + assert set_variable_response_as_dict == {"value": "[1]", "type": "list"} variables_response = json_facade.get_variables_response(frame_variables_reference) # : :type variables_response: VariablesResponse @@ -2964,12 +3008,12 @@ def test_stack_and_variables(case_setup_dap): var_as_dict = next(iter(variables)) if not IS_JYTHON: # Not properly changing var on Jython. - assert isinstance(var_as_dict.pop('variablesReference'), int) + assert isinstance(var_as_dict.pop("variablesReference"), int) assert var_as_dict == { - 'name': 'variable_for_test_1', - 'value': "[1]", - 'type': 'list', - 'evaluateName': 'variable_for_test_1', + "name": "variable_for_test_1", + "value": "[1]", + "type": "list", + "evaluateName": "variable_for_test_1", } json_facade.write_continue() @@ -2978,10 +3022,10 @@ def test_stack_and_variables(case_setup_dap): def test_hex_variables(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables_hex.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables_hex.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -2991,59 +3035,61 @@ def test_hex_variables(case_setup_dap): # : :type stack_trace_response_body: StackTraceResponseBody # : :type stack_frame: StackFrame stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body assert len(stack_trace_response_body.stackFrames) == 2 stack_frame = next(iter(stack_trace_response_body.stackFrames)) - assert stack_frame['name'] == 'Call' - assert stack_frame['source']['path'].endswith('_debugger_case_local_variables_hex.py') + assert stack_frame["name"] == "Call" + assert stack_frame["source"]["path"].endswith("_debugger_case_local_variables_hex.py") - name_to_scope = json_facade.get_name_to_scope(stack_frame['id']) + name_to_scope = json_facade.get_name_to_scope(stack_frame["id"]) - scope = name_to_scope['Locals'] + scope = name_to_scope["Locals"] frame_variables_reference = scope.variablesReference assert isinstance(frame_variables_reference, int) - fmt = {'hex': True} + fmt = {"hex": True} variables_request = json_facade.write_request( - pydevd_schema.VariablesRequest(pydevd_schema.VariablesArguments(frame_variables_reference, format=fmt))) + pydevd_schema.VariablesRequest(pydevd_schema.VariablesArguments(frame_variables_reference, format=fmt)) + ) variables_response = json_facade.wait_for_response(variables_request) # : :type variables_response: VariablesResponse - variable_for_test_1, variable_for_test_2, variable_for_test_3, variable_for_test_4 = sorted(list( - v for v in variables_response.body.variables if v['name'].startswith('variables_for_test') - ), key=lambda v: v['name']) + variable_for_test_1, variable_for_test_2, variable_for_test_3, variable_for_test_4 = sorted( + list(v for v in variables_response.body.variables if v["name"].startswith("variables_for_test")), key=lambda v: v["name"] + ) assert variable_for_test_1 == { - 'name': 'variables_for_test_1', - 'value': "0x64", - 'type': 'int', - 'evaluateName': 'variables_for_test_1', - 'variablesReference': 0, + "name": "variables_for_test_1", + "value": "0x64", + "type": "int", + "evaluateName": "variables_for_test_1", + "variablesReference": 0, } - assert isinstance(variable_for_test_2.pop('variablesReference'), int) + assert isinstance(variable_for_test_2.pop("variablesReference"), int) assert variable_for_test_2 == { - 'name': 'variables_for_test_2', - 'value': "[0x1, 0xa, 0x64]", - 'type': 'list', - 'evaluateName': 'variables_for_test_2' + "name": "variables_for_test_2", + "value": "[0x1, 0xa, 0x64]", + "type": "list", + "evaluateName": "variables_for_test_2", } - assert isinstance(variable_for_test_3.pop('variablesReference'), int) + assert isinstance(variable_for_test_3.pop("variablesReference"), int) assert variable_for_test_3 == { - 'name': 'variables_for_test_3', - 'value': '{0xa: 0xa, 0x64: 0x64, 0x3e8: 0x3e8}', - 'type': 'dict', - 'evaluateName': 'variables_for_test_3' + "name": "variables_for_test_3", + "value": "{0xa: 0xa, 0x64: 0x64, 0x3e8: 0x3e8}", + "type": "dict", + "evaluateName": "variables_for_test_3", } - assert isinstance(variable_for_test_4.pop('variablesReference'), int) + assert isinstance(variable_for_test_4.pop("variablesReference"), int) assert variable_for_test_4 == { - 'name': 'variables_for_test_4', - 'value': '{(0x1, 0xa, 0x64): (0x2710, 0x186a0, 0x186a0)}', - 'type': 'dict', - 'evaluateName': 'variables_for_test_4' + "name": "variables_for_test_4", + "value": "{(0x1, 0xa, 0x64): (0x2710, 0x186a0, 0x186a0)}", + "type": "dict", + "evaluateName": "variables_for_test_4", } json_facade.write_continue() @@ -3052,10 +3098,10 @@ def test_hex_variables(case_setup_dap): def test_stopped_event(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_print.py') as writer: + with case_setup_dap.test_file("_debugger_case_print.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -3067,12 +3113,12 @@ def test_stopped_event(case_setup_dap): writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Not Jython compatible (fails on set variable).') +@pytest.mark.skipif(IS_JYTHON, reason="Not Jython compatible (fails on set variable).") def test_pause_and_continue(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_pause_continue.py') as writer: + with case_setup_dap.test_file("_debugger_case_pause_continue.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() @@ -3086,27 +3132,29 @@ def test_pause_and_continue(case_setup_dap): stack_frame = next(iter(json_hit.stack_trace_response.body.stackFrames)) - name_to_scope = json_facade.get_name_to_scope(stack_frame['id']) - frame_variables_reference = name_to_scope['Locals'].variablesReference + name_to_scope = json_facade.get_name_to_scope(stack_frame["id"]) + frame_variables_reference = name_to_scope["Locals"].variablesReference - set_variable_response = json_facade.write_set_variable(frame_variables_reference, 'loop', 'False') - set_variable_response_as_dict = set_variable_response.to_dict()['body'] - assert set_variable_response_as_dict == {'value': "False", 'type': 'bool', 'variablesReference': 0} + set_variable_response = json_facade.write_set_variable(frame_variables_reference, "loop", "False") + set_variable_response_as_dict = set_variable_response.to_dict()["body"] + assert set_variable_response_as_dict == {"value": "False", "type": "bool", "variablesReference": 0} json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('stepping_resumes_all_threads', [False, True]) +@pytest.mark.parametrize("stepping_resumes_all_threads", [False, True]) def test_step_out_multi_threads(case_setup_dap, stepping_resumes_all_threads): - with case_setup_dap.test_file('_debugger_case_multi_threads_stepping.py') as writer: + with case_setup_dap.test_file("_debugger_case_multi_threads_stepping.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(steppingResumesAllThreads=stepping_resumes_all_threads) - json_facade.write_set_breakpoints([ - writer.get_line_index_with_content('Break thread 1'), - ]) + json_facade.write_set_breakpoints( + [ + writer.get_line_index_with_content("Break thread 1"), + ] + ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -3114,42 +3162,44 @@ def test_step_out_multi_threads(case_setup_dap, stepping_resumes_all_threads): response = json_facade.write_list_threads() assert len(response.body.threads) == 3 - thread_name_to_id = dict((t['name'], t['id']) for t in response.body.threads) - assert json_hit.thread_id == thread_name_to_id['thread1'] + thread_name_to_id = dict((t["name"], t["id"]) for t in response.body.threads) + assert json_hit.thread_id == thread_name_to_id["thread1"] if stepping_resumes_all_threads: # If we're stepping with multiple threads, we'll exit here. - json_facade.write_step_out(thread_name_to_id['thread1']) + json_facade.write_step_out(thread_name_to_id["thread1"]) else: - json_facade.write_step_out(thread_name_to_id['thread1']) + json_facade.write_step_out(thread_name_to_id["thread1"]) # Timeout is expected... make it shorter. writer.reader_thread.set_messages_timeout(2) try: - json_hit = json_facade.wait_for_thread_stopped('step') - raise AssertionError('Expected timeout!') + json_hit = json_facade.wait_for_thread_stopped("step") + raise AssertionError("Expected timeout!") except debugger_unittest.TimeoutError: pass - json_facade.write_step_out(thread_name_to_id['thread2']) - json_facade.write_step_next(thread_name_to_id['MainThread']) - json_hit = json_facade.wait_for_thread_stopped('step') - assert json_hit.thread_id == thread_name_to_id['MainThread'] + json_facade.write_step_out(thread_name_to_id["thread2"]) + json_facade.write_step_next(thread_name_to_id["MainThread"]) + json_hit = json_facade.wait_for_thread_stopped("step") + assert json_hit.thread_id == thread_name_to_id["MainThread"] json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('stepping_resumes_all_threads', [True, False]) -@pytest.mark.parametrize('step_mode', ['step_next', 'step_in']) +@pytest.mark.parametrize("stepping_resumes_all_threads", [True, False]) +@pytest.mark.parametrize("step_mode", ["step_next", "step_in"]) def test_step_next_step_in_multi_threads(case_setup_dap, stepping_resumes_all_threads, step_mode): - with case_setup_dap.test_file('_debugger_case_multi_threads_stepping.py') as writer: + with case_setup_dap.test_file("_debugger_case_multi_threads_stepping.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_launch(steppingResumesAllThreads=stepping_resumes_all_threads) - json_facade.write_set_breakpoints([ - writer.get_line_index_with_content('Break thread 1'), - ]) + json_facade.write_launch(steppingResumesAllThreads=stepping_resumes_all_threads, justMyCode=True) + json_facade.write_set_breakpoints( + [ + writer.get_line_index_with_content("Break thread 1"), + ] + ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -3157,35 +3207,35 @@ def test_step_next_step_in_multi_threads(case_setup_dap, stepping_resumes_all_th response = json_facade.write_list_threads() assert len(response.body.threads) == 3 - thread_name_to_id = dict((t['name'], t['id']) for t in response.body.threads) - assert json_hit.thread_id == thread_name_to_id['thread1'] + thread_name_to_id = dict((t["name"], t["id"]) for t in response.body.threads) + assert json_hit.thread_id == thread_name_to_id["thread1"] - for _i in range(20): - if step_mode == 'step_next': - json_facade.write_step_next(thread_name_to_id['thread1']) + for _i in range(15): + if step_mode == "step_next": + json_facade.write_step_next(thread_name_to_id["thread1"]) - elif step_mode == 'step_in': - json_facade.write_step_in(thread_name_to_id['thread1']) + elif step_mode == "step_in": + json_facade.write_step_in(thread_name_to_id["thread1"]) else: - raise AssertionError('Unexpected step_mode: %s' % (step_mode,)) + raise AssertionError("Unexpected step_mode: %s" % (step_mode,)) - json_hit = json_facade.wait_for_thread_stopped('step') - assert json_hit.thread_id == thread_name_to_id['thread1'] - local_var = json_facade.get_local_var(json_hit.frame_id, '_event2_set') + json_hit = json_facade.wait_for_thread_stopped("step") + assert json_hit.thread_id == thread_name_to_id["thread1"] + local_var = json_facade.get_local_var(json_hit.frame_id, "_event2_set") # We're stepping in a single thread which depends on events being set in # another thread, so, we can only get here if the other thread was also released. - if local_var.value == 'True': + if local_var.value == "True": if stepping_resumes_all_threads: break else: - raise AssertionError('Did not expect _event2_set to be set when not resuming other threads on step.') + raise AssertionError("Did not expect _event2_set to be set when not resuming other threads on step.") - time.sleep(.01) + time.sleep(0.01) else: if stepping_resumes_all_threads: - raise AssertionError('Expected _event2_set to be set already.') + raise AssertionError("Expected _event2_set to be set already.") else: # That's correct, we should never reach the condition where _event2_set is set if # we're not resuming other threads on step. @@ -3197,14 +3247,13 @@ def test_step_next_step_in_multi_threads(case_setup_dap, stepping_resumes_all_th def test_stepping(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_stepping.py') as writer: + with case_setup_dap.test_file("_debugger_case_stepping.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints([ - writer.get_line_index_with_content('Break here 1'), - writer.get_line_index_with_content('Break here 2') - ]) + json_facade.write_set_breakpoints( + [writer.get_line_index_with_content("Break here 1"), writer.get_line_index_with_content("Break here 2")] + ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -3212,24 +3261,24 @@ def test_stepping(case_setup_dap): # Test Step-Over or 'next' stack_trace_response = json_hit.stack_trace_response for stack_frame in stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 stack_frame = next(iter(stack_trace_response.body.stackFrames)) - before_step_over_line = stack_frame['line'] + before_step_over_line = stack_frame["line"] json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=before_step_over_line + 1) + json_hit = json_facade.wait_for_thread_stopped("step", line=before_step_over_line + 1) # Test step into or 'stepIn' json_facade.write_step_in(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='step_into') + json_hit = json_facade.wait_for_thread_stopped("step", name="step_into") # Test step return or 'stepOut' json_facade.write_continue() - json_hit = json_facade.wait_for_thread_stopped(name='step_out') + json_hit = json_facade.wait_for_thread_stopped(name="step_out") json_facade.write_step_out(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', name='Call') + json_hit = json_facade.wait_for_thread_stopped("step", name="Call") json_facade.write_continue() @@ -3237,56 +3286,55 @@ def test_stepping(case_setup_dap): def test_evaluate(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_evaluate.py') as writer: + with case_setup_dap.test_file("_debugger_case_evaluate.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_frame = next(iter(stack_trace_response.body.stackFrames)) - stack_frame_id = stack_frame['id'] + stack_frame_id = stack_frame["id"] # Check that evaluating variable that does not exist in hover returns success == False. - json_facade.evaluate( - 'var_does_not_exist', frameId=stack_frame_id, context='hover', success=False) + json_facade.evaluate("var_does_not_exist", frameId=stack_frame_id, context="hover", success=False) # Test evaluate request that results in 'eval' - eval_response = json_facade.evaluate('var_1', frameId=stack_frame_id, context='repl') - assert eval_response.body.result == '5' - assert eval_response.body.type == 'int' + eval_response = json_facade.evaluate("var_1", frameId=stack_frame_id, context="repl") + assert eval_response.body.result == "5" + assert eval_response.body.type == "int" # Test evaluate request that results in 'exec' - exec_response = json_facade.evaluate('var_1 = 6', frameId=stack_frame_id, context='repl') - assert exec_response.body.result == '' + exec_response = json_facade.evaluate("var_1 = 6", frameId=stack_frame_id, context="repl") + assert exec_response.body.result == "" # Test evaluate request that results in 'exec' but fails - exec_response = json_facade.evaluate( - 'var_1 = "abc"/6', frameId=stack_frame_id, context='repl', success=False) - assert 'TypeError' in exec_response.body.result - assert 'TypeError' in exec_response.message + exec_response = json_facade.evaluate('var_1 = "abc"/6', frameId=stack_frame_id, context="repl", success=False) + assert "TypeError" in exec_response.body.result + assert "TypeError" in exec_response.message # Evaluate without a frameId. # Error because 'foo_value' is not set in 'sys'. - exec_response = json_facade.evaluate('import email;email.foo_value', success=False) - assert 'AttributeError' in exec_response.body.result - assert 'AttributeError' in exec_response.message + exec_response = json_facade.evaluate("import email;email.foo_value", success=False) + assert "AttributeError" in exec_response.body.result + assert "AttributeError" in exec_response.message # Reading foo_value didn't work, but 'email' should be in the namespace now. - json_facade.evaluate('email.foo_value=True') + json_facade.evaluate("email.foo_value=True") # Ok, 'foo_value' is now set in 'email' module. - exec_response = json_facade.evaluate('email.foo_value') + exec_response = json_facade.evaluate("email.foo_value") # We don't actually get variables without a frameId, we can just evaluate and observe side effects # (so, the result is always empty -- or an error). - assert exec_response.body.result == '' + assert exec_response.body.result == "" json_facade.write_continue() @@ -3294,20 +3342,21 @@ def test_evaluate(case_setup_dap): def test_evaluate_failures(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_completions.py') as writer: + with case_setup_dap.test_file("_debugger_case_completions.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # First, try with wrong id. exec_request = json_facade.write_request( - pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments('a = 10', frameId=9999, context='repl'))) + pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments("a = 10", frameId=9999, context="repl")) + ) exec_response = json_facade.wait_for_response(exec_request) assert exec_response.success == False - assert exec_response.message == 'Wrong ID sent from the client: 9999' + assert exec_response.message == "Wrong ID sent from the client: 9999" first_hit = None for i in range(2): @@ -3315,16 +3364,16 @@ def test_evaluate_failures(case_setup_dap): if i == 0: first_hit = json_hit # Check that watch exceptions are shown as string/failure. - response = json_facade.evaluate( - 'invalid_var', frameId=first_hit.frame_id, context='watch', success=False) + response = json_facade.evaluate("invalid_var", frameId=first_hit.frame_id, context="watch", success=False) assert response.body.result == "NameError: name 'invalid_var' is not defined" if i == 1: # Now, check with a previously existing frameId. exec_request = json_facade.write_request( - pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments('a = 10', frameId=first_hit.frame_id, context='repl'))) + pydevd_schema.EvaluateRequest(pydevd_schema.EvaluateArguments("a = 10", frameId=first_hit.frame_id, context="repl")) + ) exec_response = json_facade.wait_for_response(exec_request) assert exec_response.success == False - assert exec_response.message == 'Unable to find thread for evaluation.' + assert exec_response.message == "Unable to find thread for evaluation." json_facade.write_continue(wait_for_response=i == 0) if i == 0: @@ -3334,12 +3383,9 @@ def test_evaluate_failures(case_setup_dap): def test_evaluate_exception_trace(case_setup_dap, pyfile): - @pyfile def exception_trace_file(): - class A(object): - def __init__(self, a): pass @@ -3352,43 +3398,43 @@ def method2(): def method3(): method2() - print('TEST SUCEEDED') # Break here + print("TEST SUCEEDED") # Break here with case_setup_dap.test_file(exception_trace_file) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - exec_response = json_facade.evaluate('method3()', json_hit.frame_id, 'repl', success=False) - assert 'pydevd' not in exec_response.message # i.e.: don't show pydevd in the trace - assert 'method3' in exec_response.message - assert 'method2' in exec_response.message + exec_response = json_facade.evaluate("method3()", json_hit.frame_id, "repl", success=False) + assert "pydevd" not in exec_response.message # i.e.: don't show pydevd in the trace + assert "method3" in exec_response.message + assert "method2" in exec_response.message - exec_response = json_facade.evaluate('method2()', json_hit.frame_id, 'repl', success=False) - assert 'pydevd' not in exec_response.message - assert 'method3' not in exec_response.message - assert 'method2' in exec_response.message + exec_response = json_facade.evaluate("method2()", json_hit.frame_id, "repl", success=False) + assert "pydevd" not in exec_response.message + assert "method3" not in exec_response.message + assert "method2" in exec_response.message json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('max_frames', ['default', 'all', 10]) # -1 = default, 0 = all, 10 = 10 frames +@pytest.mark.parametrize("max_frames", ["default", "all", 10]) # -1 = default, 0 = all, 10 = 10 frames def test_exception_details(case_setup_dap, max_frames): - with case_setup_dap.test_file('_debugger_case_large_exception_stack.py') as writer: + with case_setup_dap.test_file("_debugger_case_large_exception_stack.py") as writer: json_facade = JsonFacade(writer) - if max_frames == 'all': + if max_frames == "all": json_facade.write_launch(maxExceptionStackFrames=0) # trace back compresses repeated text min_expected_lines = 100 max_expected_lines = 220 - elif max_frames == 'default': + elif max_frames == "default": json_facade.write_launch() # default is all frames # trace back compresses repeated text @@ -3399,26 +3445,27 @@ def test_exception_details(case_setup_dap, max_frames): min_expected_lines = 10 max_expected_lines = 22 - json_facade.write_set_exception_breakpoints(['raised']) + json_facade.write_set_exception_breakpoints(["raised"]) json_facade.write_make_initial_run() - json_hit = json_facade.wait_for_thread_stopped('exception') + json_hit = json_facade.wait_for_thread_stopped("exception") exc_info_request = json_facade.write_request( - pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id))) + pydevd_schema.ExceptionInfoRequest(pydevd_schema.ExceptionInfoArguments(json_hit.thread_id)) + ) exc_info_response = json_facade.wait_for_response(exc_info_request) stack_frames = json_hit.stack_trace_response.body.stackFrames assert 100 <= len(stack_frames) <= 104 - assert stack_frames[-1]['name'] == '' - assert stack_frames[0]['name'] == 'method1' + assert stack_frames[-1]["name"] == "" + assert stack_frames[0]["name"] == "method1" body = exc_info_response.body - assert body.exceptionId.endswith('IndexError') - assert body.description == 'foo' - assert normcase(body.details.kwargs['source']) == normcase(writer.TEST_FILE) - stack_line_count = len(body.details.stackTrace.split('\n')) - assert min_expected_lines <= stack_line_count <= max_expected_lines + assert body.exceptionId.endswith("IndexError") + assert body.description == "foo" + assert normcase(body.details.kwargs["source"]) == normcase(writer.TEST_FILE) + stack_line_count = len(body.details.stackTrace.split("\n")) + assert min_expected_lines <= stack_line_count <= max_expected_lines json_facade.write_set_exception_breakpoints([]) # Don't stop on reraises. json_facade.write_continue() @@ -3427,17 +3474,18 @@ def test_exception_details(case_setup_dap, max_frames): def test_stack_levels(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_deep_stacks.py') as writer: + with case_setup_dap.test_file("_debugger_case_deep_stacks.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # get full stack stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) full_stack_frames = stack_trace_response.body.stackFrames total_frames = stack_trace_response.body.totalFrames @@ -3447,10 +3495,10 @@ def test_stack_levels(case_setup_dap): received_frames = [] while startFrame < total_frames: stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - startFrame=startFrame, - levels=20))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, startFrame=startFrame, levels=20) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) received_frames += stack_trace_response.body.stackFrames startFrame += levels @@ -3463,45 +3511,49 @@ def test_stack_levels(case_setup_dap): def test_breakpoint_adjustment(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_adjust_breakpoint.py') as writer: + with case_setup_dap.test_file("_debugger_case_adjust_breakpoint.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - bp_requested = writer.get_line_index_with_content('requested') - bp_expected = writer.get_line_index_with_content('expected') + bp_requested = writer.get_line_index_with_content("requested") + bp_expected = writer.get_line_index_with_content("expected") set_bp_request = json_facade.write_request( - pydevd_schema.SetBreakpointsRequest(pydevd_schema.SetBreakpointsArguments( - source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), - breakpoints=[pydevd_schema.SourceBreakpoint(bp_requested).to_dict()])) + pydevd_schema.SetBreakpointsRequest( + pydevd_schema.SetBreakpointsArguments( + source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), + breakpoints=[pydevd_schema.SourceBreakpoint(bp_requested).to_dict()], + ) + ) ) set_bp_response = json_facade.wait_for_response(set_bp_request) assert set_bp_response.success - assert set_bp_response.body.breakpoints[0]['line'] == bp_expected + assert set_bp_response.body.breakpoints[0]["line"] == bp_expected json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_frame = next(iter(stack_trace_response.body.stackFrames)) - assert stack_frame['line'] == bp_expected + assert stack_frame["line"] == bp_expected json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='No goto on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="No goto on Jython.") def test_goto(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_set_next_statement.py') as writer: + with case_setup_dap.test_file("_debugger_case_set_next_statement.py") as writer: json_facade = JsonFacade(writer) - break_line = writer.get_line_index_with_content('Break here') - step_line = writer.get_line_index_with_content('Step here') + break_line = writer.get_line_index_with_content("Break here") + step_line = writer.get_line_index_with_content("Step here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() @@ -3509,38 +3561,39 @@ def test_goto(case_setup_dap): json_hit = json_facade.wait_for_thread_stopped() stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_frame = next(iter(stack_trace_response.body.stackFrames)) - assert stack_frame['line'] == break_line + assert stack_frame["line"] == break_line goto_targets_request = json_facade.write_request( - pydevd_schema.GotoTargetsRequest(pydevd_schema.GotoTargetsArguments( - source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), - line=step_line))) + pydevd_schema.GotoTargetsRequest( + pydevd_schema.GotoTargetsArguments(source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), line=step_line) + ) + ) goto_targets_response = json_facade.wait_for_response(goto_targets_request) - target_id = goto_targets_response.body.targets[0]['id'] + target_id = goto_targets_response.body.targets[0]["id"] goto_request = json_facade.write_request( - pydevd_schema.GotoRequest(pydevd_schema.GotoArguments( - threadId=json_hit.thread_id, - targetId=12345))) + pydevd_schema.GotoRequest(pydevd_schema.GotoArguments(threadId=json_hit.thread_id, targetId=12345)) + ) goto_response = json_facade.wait_for_response(goto_request) assert not goto_response.success goto_request = json_facade.write_request( - pydevd_schema.GotoRequest(pydevd_schema.GotoArguments( - threadId=json_hit.thread_id, - targetId=target_id))) + pydevd_schema.GotoRequest(pydevd_schema.GotoArguments(threadId=json_hit.thread_id, targetId=target_id)) + ) goto_response = json_facade.wait_for_response(goto_request) - json_hit = json_facade.wait_for_thread_stopped('goto') + json_hit = json_facade.wait_for_thread_stopped("goto") stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id))) + pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id)) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_frame = next(iter(stack_trace_response.body.stackFrames)) - assert stack_frame['line'] == step_line + assert stack_frame["line"] == step_line json_facade.write_continue() @@ -3553,67 +3606,60 @@ def test_goto(case_setup_dap): def _collect_stack_frames_ending_with(json_hit, end_with_pattern): stack_trace_response = json_hit.stack_trace_response - dont_trace_frames = list(frame for frame in stack_trace_response.body.stackFrames - if frame['source']['path'].endswith(end_with_pattern)) + dont_trace_frames = list(frame for frame in stack_trace_response.body.stackFrames if frame["source"]["path"].endswith(end_with_pattern)) return dont_trace_frames def _check_dont_trace_filtered_out(json_hit): - assert _collect_stack_frames_ending_with(json_hit, 'dont_trace.py') == [] + assert _collect_stack_frames_ending_with(json_hit, "dont_trace.py") == [] def _check_dont_trace_not_filtered_out(json_hit): - assert len(_collect_stack_frames_ending_with(json_hit, 'dont_trace.py')) == 1 + assert len(_collect_stack_frames_ending_with(json_hit, "dont_trace.py")) == 1 -@pytest.mark.parametrize('dbg_property', [ - 'dont_trace', - 'trace', - 'change_pattern', - 'dont_trace_after_start' -]) +@pytest.mark.parametrize("dbg_property", ["dont_trace", "trace", "change_pattern", "dont_trace_after_start"]) def test_set_debugger_property(case_setup_dap, dbg_property): - kwargs = {} - with case_setup_dap.test_file('_debugger_case_dont_trace_test.py', **kwargs) as writer: + with case_setup_dap.test_file("_debugger_case_dont_trace_test.py", **kwargs) as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) - if dbg_property in ('dont_trace', 'change_pattern', 'dont_trace_after_start'): - json_facade.write_set_debugger_property([], ['dont_trace.py'] if not IS_WINDOWS else ['Dont_Trace.py']) + if dbg_property in ("dont_trace", "change_pattern", "dont_trace_after_start"): + json_facade.write_set_debugger_property([], ["dont_trace.py"] if not IS_WINDOWS else ["Dont_Trace.py"]) - if dbg_property == 'change_pattern': - json_facade.write_set_debugger_property([], ['something_else.py']) + if dbg_property == "change_pattern": + json_facade.write_set_debugger_property([], ["something_else.py"]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - if dbg_property in ('dont_trace', 'dont_trace_after_start'): + if dbg_property in ("dont_trace", "dont_trace_after_start"): _check_dont_trace_filtered_out(json_hit) - elif dbg_property in ('change_pattern', 'trace'): + elif dbg_property in ("change_pattern", "trace"): _check_dont_trace_not_filtered_out(json_hit) else: - raise AssertionError('Unexpected: %s' % (dbg_property,)) + raise AssertionError("Unexpected: %s" % (dbg_property,)) - if dbg_property == 'dont_trace_after_start': - json_facade.write_set_debugger_property([], ['something_else.py']) + if dbg_property == "dont_trace_after_start": + json_facade.write_set_debugger_property([], ["something_else.py"]) json_facade.write_continue() json_hit = json_facade.wait_for_thread_stopped() - if dbg_property in ('dont_trace',): + if dbg_property in ("dont_trace",): _check_dont_trace_filtered_out(json_hit) - elif dbg_property in ('change_pattern', 'trace', 'dont_trace_after_start'): + elif dbg_property in ("change_pattern", "trace", "dont_trace_after_start"): _check_dont_trace_not_filtered_out(json_hit) else: - raise AssertionError('Unexpected: %s' % (dbg_property,)) + raise AssertionError("Unexpected: %s" % (dbg_property,)) json_facade.write_continue() @@ -3624,17 +3670,15 @@ def test_source_mapping_errors(case_setup_dap): from _pydevd_bundle._debug_adapter.pydevd_schema import Source from _pydevd_bundle._debug_adapter.pydevd_schema import PydevdSourceMap - with case_setup_dap.test_file('_debugger_case_source_mapping.py') as writer: + with case_setup_dap.test_file("_debugger_case_source_mapping.py") as writer: json_facade = JsonFacade(writer) - map_to_cell_1_line2 = writer.get_line_index_with_content('map to cEll1, line 2') - map_to_cell_2_line2 = writer.get_line_index_with_content('map to cEll2, line 2') + map_to_cell_1_line2 = writer.get_line_index_with_content("map to cEll1, line 2") + map_to_cell_2_line2 = writer.get_line_index_with_content("map to cEll2, line 2") - cell1_map = PydevdSourceMap(map_to_cell_1_line2, map_to_cell_1_line2 + 1, Source(path=''), 2) - cell2_map = PydevdSourceMap(map_to_cell_2_line2, map_to_cell_2_line2 + 1, Source(path=''), 2) - pydevd_source_maps = [ - cell1_map, cell2_map - ] + cell1_map = PydevdSourceMap(map_to_cell_1_line2, map_to_cell_1_line2 + 1, Source(path=""), 2) + cell2_map = PydevdSourceMap(map_to_cell_2_line2, map_to_cell_2_line2 + 1, Source(path=""), 2) + pydevd_source_maps = [cell1_map, cell2_map] json_facade.write_set_pydevd_source_map( Source(path=writer.TEST_FILE), @@ -3646,7 +3690,7 @@ def test_source_mapping_errors(case_setup_dap): # set to a file (so, any file matching that breakpoint can be removed instead of needing to check # which lines are corresponding to that file). json_facade.write_set_pydevd_source_map( - Source(path=os.path.join(os.path.dirname(writer.TEST_FILE), 'foo.py')), + Source(path=os.path.join(os.path.dirname(writer.TEST_FILE), "foo.py")), pydevd_source_maps=pydevd_source_maps, success=False, ) @@ -3655,29 +3699,33 @@ def test_source_mapping_errors(case_setup_dap): writer.finished_ok = True -@pytest.mark.parametrize( - 'target', - ['_debugger_case_source_mapping.py', '_debugger_case_source_mapping_and_reference.py'] -) -@pytest.mark.parametrize('jmc', [True, False]) +@pytest.mark.parametrize("target", ["_debugger_case_source_mapping.py", "_debugger_case_source_mapping_and_reference.py"]) +@pytest.mark.parametrize("jmc", [True, False]) def test_source_mapping_base(case_setup_dap, target, jmc): from _pydevd_bundle._debug_adapter.pydevd_schema import Source from _pydevd_bundle._debug_adapter.pydevd_schema import PydevdSourceMap case_setup_dap.check_non_ascii = True - with case_setup_dap.test_file(target) as writer: + def get_environ(self): + env = os.environ.copy() + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") + return env + + with case_setup_dap.test_file(target, get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=jmc) - map_to_cell_1_line2 = writer.get_line_index_with_content('map to cEll1, line 2') - map_to_cell_2_line2 = writer.get_line_index_with_content('map to cEll2, line 2') + map_to_cell_1_line2 = writer.get_line_index_with_content("map to cEll1, line 2") + map_to_cell_2_line2 = writer.get_line_index_with_content("map to cEll2, line 2") - cell1_map = PydevdSourceMap(map_to_cell_1_line2, map_to_cell_1_line2 + 1, Source(path=''), 2) - cell2_map = PydevdSourceMap(map_to_cell_2_line2, map_to_cell_2_line2 + 1, Source(path=''), 2) + cell1_map = PydevdSourceMap(map_to_cell_1_line2, map_to_cell_1_line2 + 1, Source(path=""), 2) + cell2_map = PydevdSourceMap(map_to_cell_2_line2, map_to_cell_2_line2 + 1, Source(path=""), 2) pydevd_source_maps = [ - cell1_map, cell2_map, cell2_map, # The one repeated should be ignored. + cell1_map, + cell2_map, + cell2_map, # The one repeated should be ignored. ] # Set breakpoints before setting the source map (check that we reapply them). @@ -3687,7 +3735,7 @@ def test_source_mapping_base(case_setup_dap, target, jmc): if isinstance(test_file, bytes): # file is in the filesystem encoding (needed for launch) but protocol needs it in utf-8 test_file = test_file.decode(file_system_encoding) - test_file = test_file.encode('utf-8') + test_file = test_file.encode("utf-8") json_facade.write_set_pydevd_source_map( Source(path=test_file), @@ -3698,13 +3746,13 @@ def test_source_mapping_base(case_setup_dap, target, jmc): json_hit = json_facade.wait_for_thread_stopped(line=map_to_cell_1_line2, file=os.path.basename(test_file)) for stack_frame in json_hit.stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 # Check that we no longer stop at the cEll1 breakpoint (its mapping should be removed when # the new one is added and we should only stop at cEll2). json_facade.write_set_breakpoints(map_to_cell_2_line2) for stack_frame in json_hit.stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 json_facade.write_continue() json_hit = json_facade.wait_for_thread_stopped(line=map_to_cell_2_line2, file=os.path.basename(test_file)) @@ -3720,16 +3768,21 @@ def test_source_mapping_just_my_code(case_setup_dap): case_setup_dap.check_non_ascii = True - with case_setup_dap.test_file('_debugger_case_source_mapping_jmc.py') as writer: + def get_environ(self): + env = os.environ.copy() + env["IDE_PROJECT_ROOTS"] = os.path.dirname(self.TEST_FILE) + os.pathsep + os.path.abspath(".") + return env + + with case_setup_dap.test_file("_debugger_case_source_mapping_jmc.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=True) - map_to_cell_1_line1 = writer.get_line_index_with_content('map to cEll1, line 1') - map_to_cell_1_line6 = writer.get_line_index_with_content('map to cEll1, line 6') - map_to_cell_1_line7 = writer.get_line_index_with_content('map to cEll1, line 7') + map_to_cell_1_line1 = writer.get_line_index_with_content("map to cEll1, line 1") + map_to_cell_1_line6 = writer.get_line_index_with_content("map to cEll1, line 6") + map_to_cell_1_line7 = writer.get_line_index_with_content("map to cEll1, line 7") - cell1_map = PydevdSourceMap(map_to_cell_1_line1, map_to_cell_1_line7, Source(path=''), 1) + cell1_map = PydevdSourceMap(map_to_cell_1_line1, map_to_cell_1_line7, Source(path=""), 1) pydevd_source_maps = [cell1_map] # Set breakpoints before setting the source map (check that we reapply them). @@ -3739,7 +3792,7 @@ def test_source_mapping_just_my_code(case_setup_dap): if isinstance(test_file, bytes): # file is in the filesystem encoding (needed for launch) but protocol needs it in utf-8 test_file = test_file.decode(file_system_encoding) - test_file = test_file.encode('utf-8') + test_file = test_file.encode("utf-8") json_facade.write_set_pydevd_source_map( Source(path=test_file), @@ -3750,7 +3803,7 @@ def test_source_mapping_just_my_code(case_setup_dap): json_hit = json_facade.wait_for_thread_stopped(line=map_to_cell_1_line6, file=os.path.basename(test_file)) for stack_frame in json_hit.stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 # i.e.: Remove the source maps json_facade.write_set_pydevd_source_map( @@ -3768,25 +3821,25 @@ def test_source_mapping_goto_target(case_setup_dap): from _pydevd_bundle._debug_adapter.pydevd_schema import PydevdSourceMap def additional_output_checks(writer, stdout, stderr): - assert 'Skip this print' not in stdout - assert 'TEST SUCEEDED' in stdout + assert "Skip this print" not in stdout + assert "TEST SUCEEDED" in stdout - with case_setup_dap.test_file('_debugger_case_source_map_goto_target.py', additional_output_checks=additional_output_checks) as writer: + with case_setup_dap.test_file("_debugger_case_source_map_goto_target.py", additional_output_checks=additional_output_checks) as writer: test_file = writer.TEST_FILE if isinstance(test_file, bytes): # file is in the filesystem encoding (needed for launch) but protocol needs it in utf-8 test_file = test_file.decode(file_system_encoding) - test_file = test_file.encode('utf-8') + test_file = test_file.encode("utf-8") json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - map_to_cell_1_line1 = writer.get_line_index_with_content('map to Cell1, line 1') - map_to_cell_1_line2 = writer.get_line_index_with_content('map to Cell1, line 2') - map_to_cell_1_line4 = writer.get_line_index_with_content('map to Cell1, line 4') - map_to_cell_1_line5 = writer.get_line_index_with_content('map to Cell1, line 5') + map_to_cell_1_line1 = writer.get_line_index_with_content("map to Cell1, line 1") + map_to_cell_1_line2 = writer.get_line_index_with_content("map to Cell1, line 2") + map_to_cell_1_line4 = writer.get_line_index_with_content("map to Cell1, line 4") + map_to_cell_1_line5 = writer.get_line_index_with_content("map to Cell1, line 5") - cell1_map = PydevdSourceMap(map_to_cell_1_line1, map_to_cell_1_line5, Source(path=''), 1) + cell1_map = PydevdSourceMap(map_to_cell_1_line1, map_to_cell_1_line5, Source(path=""), 1) pydevd_source_maps = [cell1_map] json_facade.write_set_pydevd_source_map( Source(path=test_file), @@ -3798,42 +3851,45 @@ def additional_output_checks(writer, stdout, stderr): json_hit = json_facade.wait_for_thread_stopped(line=map_to_cell_1_line2, file=os.path.basename(test_file)) for stack_frame in json_hit.stack_trace_response.body.stackFrames: - assert stack_frame['source']['sourceReference'] == 0 + assert stack_frame["source"]["sourceReference"] == 0 goto_targets_request = json_facade.write_request( - pydevd_schema.GotoTargetsRequest(pydevd_schema.GotoTargetsArguments( - source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), - line=map_to_cell_1_line4))) + pydevd_schema.GotoTargetsRequest( + pydevd_schema.GotoTargetsArguments( + source=pydevd_schema.Source(path=writer.TEST_FILE, sourceReference=0), line=map_to_cell_1_line4 + ) + ) + ) goto_targets_response = json_facade.wait_for_response(goto_targets_request) - target_id = goto_targets_response.body.targets[0]['id'] + target_id = goto_targets_response.body.targets[0]["id"] goto_request = json_facade.write_request( - pydevd_schema.GotoRequest(pydevd_schema.GotoArguments( - threadId=json_hit.thread_id, - targetId=target_id))) + pydevd_schema.GotoRequest(pydevd_schema.GotoArguments(threadId=json_hit.thread_id, targetId=target_id)) + ) goto_response = json_facade.wait_for_response(goto_request) assert goto_response.success - json_hit = json_facade.wait_for_thread_stopped('goto') + json_hit = json_facade.wait_for_thread_stopped("goto") json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not TEST_CHERRYPY or IS_WINDOWS, reason='No CherryPy available / not ok in Windows.') +@pytest.mark.skipif(not TEST_CHERRYPY or IS_WINDOWS, reason="No CherryPy available / not ok in Windows.") def test_process_autoreload_cherrypy(case_setup_multiprocessing_dap, tmpdir): - ''' + """ CherryPy does an os.execv(...) which will kill the running process and replace it with a new process when a reload takes place, so, it mostly works as a new process connection (everything is the same except that the existing process is stopped). - ''' + """ + raise pytest.skip("This is failing with the latest cherrypy -- needs investigation.") port = get_free_port() # We write a temp file because we'll change it to autoreload later on. - f = tmpdir.join('_debugger_case_cherrypy.py') + f = tmpdir.join("_debugger_case_cherrypy.py") - tmplt = ''' + tmplt = """ import cherrypy cherrypy.config.update({ 'engine.autoreload.on': True, @@ -3851,37 +3907,37 @@ def exit(self): cherrypy.engine.exit() cherrypy.quickstart(HelloWorld()) -''' +""" - f.write(tmplt % dict(port=port, str='INITIAL')) + f.write(tmplt % dict(port=port, str="INITIAL")) file_to_check = str(f) def get_environ(writer): env = os.environ.copy() - env["PYTHONIOENCODING"] = 'utf-8' + env["PYTHONIOENCODING"] = "utf-8" env["PYTHONPATH"] = str(tmpdir) return env import threading from tests_python.debugger_unittest import AbstractWriterThread - with case_setup_multiprocessing_dap.test_file(file_to_check, get_environ=get_environ) as writer: + with case_setup_multiprocessing_dap.test_file(file_to_check, get_environ=get_environ) as writer: original_ignore_stderr_line = writer._ignore_stderr_line @overrides(writer._ignore_stderr_line) def _ignore_stderr_line(line): if original_ignore_stderr_line(line): return True - return 'ENGINE ' in line or 'CherryPy Checker' in line or 'has an empty config' in line + return "ENGINE " in line or "CherryPy Checker" in line or "has an empty config" in line writer._ignore_stderr_line = _ignore_stderr_line json_facade = JsonFacade(writer) - json_facade.write_launch(debugOptions=['DebugStdLib']) + json_facade.write_launch(debugOptions=["DebugStdLib"]) - break1_line = writer.get_line_index_with_content('break here') + break1_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break1_line) server_socket = writer.server_socket @@ -3890,15 +3946,14 @@ def _ignore_stderr_line(line): secondary_thread_errors = [] class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): try: from tests_python.debugger_unittest import ReaderThread + expected_connections = 1 for _ in range(expected_connections): server_socket.listen(1) @@ -3906,7 +3961,7 @@ def run(self): new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -3918,26 +3973,26 @@ def run(self): writer2.write_add_breakpoint(break1_line) writer2.write_make_initial_run() - secondary_thread_log.append('Initial run') + secondary_thread_log.append("Initial run") # Give it some time to startup time.sleep(2) - t = writer.create_request_thread('http://127.0.0.1:%s/' % (port,)) + t = writer.create_request_thread("http://127.0.0.1:%s/" % (port,)) t.start() - secondary_thread_log.append('Waiting for first breakpoint') + secondary_thread_log.append("Waiting for first breakpoint") hit = writer2.wait_for_breakpoint_hit() - secondary_thread_log.append('Hit first breakpoint') + secondary_thread_log.append("Hit first breakpoint") writer2.write_run_thread(hit.thread_id) contents = t.wait_for_contents() - assert 'Hello World NEW!' in contents + assert "Hello World NEW!" in contents - secondary_thread_log.append('Requesting exit.') - t = writer.create_request_thread('http://127.0.0.1:%s/exit' % (port,)) + secondary_thread_log.append("Requesting exit.") + t = writer.create_request_thread("http://127.0.0.1:%s/exit" % (port,)) t.start() except Exception as e: - secondary_thread_errors.append('Error from secondary thread: %s' % (e,)) + secondary_thread_errors.append("Error from secondary thread: %s" % (e,)) raise secondary_process_thread_communication = SecondaryProcessThreadCommunication() @@ -3947,30 +4002,32 @@ def run(self): # Give it some time to startup time.sleep(2) - t = writer.create_request_thread('http://127.0.0.1:%s/' % (port,)) + t = writer.create_request_thread("http://127.0.0.1:%s/" % (port,)) t.start() json_facade.wait_for_thread_stopped() json_facade.write_continue() contents = t.wait_for_contents() - assert 'Hello World INITIAL!' in contents + assert "Hello World INITIAL!" in contents # Sleep a bit more to make sure that the initial timestamp was gotten in the # CherryPy background thread. time.sleep(2) - f.write(tmplt % dict(port=port, str='NEW')) + f.write(tmplt % dict(port=port, str="NEW")) def check_condition(): return not secondary_process_thread_communication.is_alive() def create_msg(): - return 'Expected secondary thread to finish before timeout.\nSecondary thread log:\n%s\nSecondary thread errors:\n%s\n' % ( - '\n'.join(secondary_thread_log), '\n'.join(secondary_thread_errors)) + return "Expected secondary thread to finish before timeout.\nSecondary thread log:\n%s\nSecondary thread errors:\n%s\n" % ( + "\n".join(secondary_thread_log), + "\n".join(secondary_thread_errors), + ) wait_for_condition(check_condition, msg=create_msg) if secondary_thread_errors: - raise AssertionError('Found errors in secondary thread: %s' % (secondary_thread_errors,)) + raise AssertionError("Found errors in secondary thread: %s" % (secondary_thread_errors,)) writer.finished_ok = True @@ -3978,14 +4035,14 @@ def create_msg(): def test_wait_for_attach_debugpy_mode(case_setup_remote_attach_to_dap): host_port = get_socket_name(close=True) - with case_setup_remote_attach_to_dap.test_file('_debugger_case_wait_for_attach_debugpy_mode.py', host_port[1]) as writer: + with case_setup_remote_attach_to_dap.test_file("_debugger_case_wait_for_attach_debugpy_mode.py", host_port[1]) as writer: time.sleep(1) # Give some time for it to pass the first breakpoint and wait in 'wait_for_attach'. writer.start_socket_client(*host_port) # We don't send initial messages because everything should be pre-configured to # the DAP mode already (i.e.: making sure it works). json_facade = JsonFacade(writer) - break2_line = writer.get_line_index_with_content('Break 2') + break2_line = writer.get_line_index_with_content("Break 2") json_facade.write_attach() # Make sure we also received the initialized in the attach. @@ -4005,39 +4062,39 @@ def test_wait_for_attach(case_setup_remote_attach_to_dap): def check_thread_events(json_facade): json_facade.write_list_threads() # Check that we have the started thread event (whenever we reconnect). - started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == 'started') + started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == "started") assert len(started_events) == 1 def check_process_event(json_facade, start_method): - if start_method == 'attach': + if start_method == "attach": json_facade.write_attach() - elif start_method == 'launch': + elif start_method == "launch": json_facade.write_launch() else: - raise AssertionError('Unexpected: %s' % (start_method,)) + raise AssertionError("Unexpected: %s" % (start_method,)) process_events = json_facade.mark_messages(ProcessEvent) assert len(process_events) == 1 assert next(iter(process_events)).body.startMethod == start_method - with case_setup_remote_attach_to_dap.test_file('_debugger_case_wait_for_attach.py', host_port[1]) as writer: - writer.TEST_FILE = debugger_unittest._get_debugger_test_file('_debugger_case_wait_for_attach_impl.py') + with case_setup_remote_attach_to_dap.test_file("_debugger_case_wait_for_attach.py", host_port[1]) as writer: + writer.TEST_FILE = debugger_unittest._get_debugger_test_file("_debugger_case_wait_for_attach_impl.py") time.sleep(1) # Give some time for it to pass the first breakpoint and wait in 'wait_for_attach'. writer.start_socket_client(*host_port) json_facade = JsonFacade(writer) check_thread_events(json_facade) - break1_line = writer.get_line_index_with_content('Break 1') - break2_line = writer.get_line_index_with_content('Break 2') - break3_line = writer.get_line_index_with_content('Break 3') + break1_line = writer.get_line_index_with_content("Break 1") + break2_line = writer.get_line_index_with_content("Break 2") + break3_line = writer.get_line_index_with_content("Break 3") - pause1_line = writer.get_line_index_with_content('Pause 1') - pause2_line = writer.get_line_index_with_content('Pause 2') + pause1_line = writer.get_line_index_with_content("Pause 1") + pause2_line = writer.get_line_index_with_content("Pause 2") - check_process_event(json_facade, start_method='launch') + check_process_event(json_facade, start_method="launch") json_facade.write_set_breakpoints([break1_line, break2_line, break3_line]) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped(line=break2_line) @@ -4049,7 +4106,7 @@ def check_process_event(json_facade, start_method): writer.start_socket_client(*host_port) json_facade = JsonFacade(writer) check_thread_events(json_facade) - check_process_event(json_facade, start_method='attach') + check_process_event(json_facade, start_method="attach") json_facade.write_set_breakpoints([break1_line, break2_line, break3_line]) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped(line=break3_line) @@ -4061,50 +4118,52 @@ def check_process_event(json_facade, start_method): writer.start_socket_client(*host_port) json_facade = JsonFacade(writer) check_thread_events(json_facade) - check_process_event(json_facade, start_method='attach') + check_process_event(json_facade, start_method="attach") json_facade.write_make_initial_run() # Connect back without a disconnect (auto-disconnects previous and connects new client). writer.start_socket_client(*host_port) json_facade = JsonFacade(writer) check_thread_events(json_facade) - check_process_event(json_facade, start_method='attach') + check_process_event(json_facade, start_method="attach") json_facade.write_make_initial_run() json_facade.write_pause() - json_hit = json_facade.wait_for_thread_stopped(reason='pause', line=[pause1_line, pause2_line]) + json_hit = json_facade.wait_for_thread_stopped(reason="pause", line=[pause1_line, pause2_line]) # Change value of 'a' for test to finish. - json_facade.write_set_variable(json_hit.frame_id, 'a', '10') + json_facade.write_set_variable(json_hit.frame_id, "a", "10") json_facade.write_disconnect() writer.finished_ok = True -@pytest.mark.skipif(not TEST_GEVENT, reason='Gevent not installed.') +@pytest.mark.skipif(not TEST_GEVENT, reason="Gevent not installed.") def test_wait_for_attach_gevent(case_setup_remote_attach_to_dap): host_port = get_socket_name(close=True) def get_environ(writer): env = os.environ.copy() - env['GEVENT_SUPPORT'] = 'True' + env["GEVENT_SUPPORT"] = "True" return env def check_thread_events(json_facade): json_facade.write_list_threads() # Check that we have the started thread event (whenever we reconnect). - started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == 'started') + started_events = json_facade.mark_messages(ThreadEvent, lambda x: x.body.reason == "started") assert len(started_events) == 1 - with case_setup_remote_attach_to_dap.test_file('_debugger_case_gevent.py', host_port[1], additional_args=['remote', 'as-server'], get_environ=get_environ) as writer: - writer.TEST_FILE = debugger_unittest._get_debugger_test_file('_debugger_case_gevent.py') - time.sleep(.5) # Give some time for it to pass the first breakpoint and wait. + with case_setup_remote_attach_to_dap.test_file( + "_debugger_case_gevent.py", host_port[1], additional_args=["remote", "as-server"], get_environ=get_environ + ) as writer: + writer.TEST_FILE = debugger_unittest._get_debugger_test_file("_debugger_case_gevent.py") + time.sleep(0.5) # Give some time for it to pass the first breakpoint and wait. writer.start_socket_client(*host_port) json_facade = JsonFacade(writer) check_thread_events(json_facade) - break1_line = writer.get_line_index_with_content('break here') + break1_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break1_line) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped(line=break1_line) @@ -4113,23 +4172,22 @@ def check_thread_events(json_facade): writer.finished_ok = True -@pytest.mark.skipif(not TEST_GEVENT, reason='Gevent not installed.') -@pytest.mark.parametrize('show', [True, False]) +@pytest.mark.skipif(not TEST_GEVENT, reason="Gevent not installed.") +@pytest.mark.parametrize("show", [True, False]) def test_gevent_show_paused_greenlets(case_setup_dap, show): - def get_environ(writer): env = os.environ.copy() - env['GEVENT_SUPPORT'] = 'True' + env["GEVENT_SUPPORT"] = "True" if show: - env['GEVENT_SHOW_PAUSED_GREENLETS'] = 'True' + env["GEVENT_SHOW_PAUSED_GREENLETS"] = "True" else: - env['GEVENT_SHOW_PAUSED_GREENLETS'] = 'False' + env["GEVENT_SHOW_PAUSED_GREENLETS"] = "False" return env - with case_setup_dap.test_file('_debugger_case_gevent_simple.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_gevent_simple.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) - break1_line = writer.get_line_index_with_content('break here') + break1_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break1_line) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped(line=break1_line) @@ -4138,19 +4196,18 @@ def get_environ(writer): if show: assert len(response.body.threads) > 1 - thread_name_to_id = dict((t['name'], t['id']) for t in response.body.threads) - assert set(thread_name_to_id.keys()) == set(( - 'MainThread', - 'greenlet: - _debugger_case_gevent_simple.py', - 'Greenlet: foo - _debugger_case_gevent_simple.py', - 'Hub: run - hub.py' - )) + thread_name_to_id = dict((t["name"], t["id"]) for t in response.body.threads) + assert set(thread_name_to_id.keys()) == set( + ( + "MainThread", + "greenlet: - _debugger_case_gevent_simple.py", + "Greenlet: foo - _debugger_case_gevent_simple.py", + "Hub: run - hub.py", + ) + ) for tname, tid in thread_name_to_id.items(): - stack = json_facade.get_stack_as_json_hit( - tid, - no_stack_frame=tname == 'Hub: run - hub.py' - ) + stack = json_facade.get_stack_as_json_hit(tid, no_stack_frame=tname == "Hub: run - hub.py") assert stack else: @@ -4160,17 +4217,16 @@ def get_environ(writer): writer.finished_ok = True -@pytest.mark.skipif(not TEST_GEVENT, reason='Gevent not installed.') -@pytest.mark.skipif(sys.platform == 'win32', reason='tput requires Linux.') +@pytest.mark.skipif(not TEST_GEVENT, reason="Gevent not installed.") +@pytest.mark.skipif(sys.platform == "win32", reason="tput requires Linux.") def test_gevent_subprocess_not_python(case_setup_dap): - def get_environ(writer): env = os.environ.copy() - env['GEVENT_SUPPORT'] = 'True' - env['CALL_PYTHON_SUB'] = '0' + env["GEVENT_SUPPORT"] = "True" + env["CALL_PYTHON_SUB"] = "0" return env - with case_setup_dap.test_file('_debugger_case_gevent_subprocess.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_gevent_subprocess.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) break1_line = writer.get_line_index_with_content("print('TEST SUCEEDED')") @@ -4182,21 +4238,21 @@ def get_environ(writer): writer.finished_ok = True -@pytest.mark.skipif(not TEST_GEVENT, reason='Gevent not installed.') +@pytest.mark.skipif(not TEST_GEVENT, reason="Gevent not installed.") def test_gevent_subprocess_python(case_setup_multiprocessing_dap): import threading from tests_python.debugger_unittest import AbstractWriterThread def get_environ(writer): env = os.environ.copy() - env['GEVENT_SUPPORT'] = 'True' - env['CALL_PYTHON_SUB'] = '1' + env["GEVENT_SUPPORT"] = "True" + env["CALL_PYTHON_SUB"] = "1" return env with case_setup_multiprocessing_dap.test_file( - '_debugger_case_gevent_subprocess.py', - get_environ=get_environ, - ) as writer: + "_debugger_case_gevent_subprocess.py", + get_environ=get_environ, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() @@ -4207,20 +4263,19 @@ def get_environ(writer): secondary_finished_ok = [False] class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + server_socket.listen(1) self.server_socket = server_socket new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -4228,7 +4283,11 @@ def run(self): writer2.sock = new_sock json_facade2 = JsonFacade(writer2) - json_facade2.write_set_breakpoints([break1_line, ]) + json_facade2.write_set_breakpoints( + [ + break1_line, + ] + ) json_facade2.write_make_initial_run() json_facade2.wait_for_thread_stopped() @@ -4237,12 +4296,12 @@ def run(self): secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") assert secondary_finished_ok[0] writer.finished_ok = True @@ -4250,65 +4309,65 @@ def run(self): @pytest.mark.skipif( not TEST_GEVENT or IS_WINDOWS, - reason='Gevent not installed / Sometimes the debugger crashes on Windows as the compiled extensions conflict with gevent.' + reason="Gevent not installed / Sometimes the debugger crashes on Windows as the compiled extensions conflict with gevent.", ) def test_notify_gevent(case_setup_dap, pyfile): - def get_environ(writer): # I.e.: Make sure that gevent support is disabled env = os.environ.copy() - env['GEVENT_SUPPORT'] = '' + env["GEVENT_SUPPORT"] = "" return env @pyfile def case_gevent(): from gevent import monkey import os + monkey.patch_all() - print('TEST SUCEEDED') # Break here + print("TEST SUCEEDED") # Break here os._exit(0) def additional_output_checks(writer, stdout, stderr): - assert 'environment variable' in stderr - assert 'GEVENT_SUPPORT=True' in stderr + assert "environment variable" in stderr + assert "GEVENT_SUPPORT=True" in stderr with case_setup_dap.test_file( - case_gevent, - get_environ=get_environ, - additional_output_checks=additional_output_checks, - EXPECTED_RETURNCODE='any', - FORCE_KILL_PROCESS_WHEN_FINISHED_OK=True - ) as writer: + case_gevent, + get_environ=get_environ, + additional_output_checks=additional_output_checks, + EXPECTED_RETURNCODE="any", + FORCE_KILL_PROCESS_WHEN_FINISHED_OK=True, + ) as writer: json_facade = JsonFacade(writer) - json_facade.write_launch() - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_launch(justMyCode=False) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() json_facade.write_continue(wait_for_response=False) - wait_for_condition(lambda: 'GEVENT_SUPPORT=True' in writer.get_stderr()) + wait_for_condition(lambda: "GEVENT_SUPPORT=True" in writer.get_stderr()) writer.finished_ok = True def test_ppid(case_setup_dap, pyfile): - @pyfile def case_ppid(): from pydevd import get_global_debugger + assert get_global_debugger().get_arg_ppid() == 22 - print('TEST SUCEEDED') + print("TEST SUCEEDED") def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - ret.insert(ret.index('--client'), '--ppid') - ret.insert(ret.index('--client'), '22') + ret.insert(ret.index("--client"), "--ppid") + ret.insert(ret.index("--client"), "22") return ret with case_setup_dap.test_file( - case_ppid, - update_command_line_args=update_command_line_args, - ) as writer: + case_ppid, + update_command_line_args=update_command_line_args, + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() json_facade.write_make_initial_run() @@ -4316,37 +4375,40 @@ def update_command_line_args(writer, args): writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Flaky on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="Flaky on Jython.") def test_path_translation_and_source_reference(case_setup_dap): - - translated_dir_not_ascii = u'áéíóú汉字' + translated_dir_not_ascii = "áéíóú汉字" def get_file_in_client(writer): # Instead of using: test_python/_debugger_case_path_translation.py # we'll set the breakpoints at foo/_debugger_case_path_translation.py file_in_client = os.path.dirname(os.path.dirname(writer.TEST_FILE)) - return os.path.join(os.path.dirname(file_in_client), translated_dir_not_ascii, '_debugger_case_path_translation.py') + return os.path.join(os.path.dirname(file_in_client), translated_dir_not_ascii, "_debugger_case_path_translation.py") def get_environ(writer): env = os.environ.copy() - env["PYTHONIOENCODING"] = 'utf-8' + env["PYTHONIOENCODING"] = "utf-8" return env - with case_setup_dap.test_file('_debugger_case_path_translation.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_path_translation.py", get_environ=get_environ) as writer: file_in_client = get_file_in_client(writer) - assert 'tests_python' not in file_in_client + assert "tests_python" not in file_in_client assert translated_dir_not_ascii in file_in_client json_facade = JsonFacade(writer) - bp_line = writer.get_line_index_with_content('break here') - assert writer.TEST_FILE.endswith('_debugger_case_path_translation.py') + bp_line = writer.get_line_index_with_content("break here") + assert writer.TEST_FILE.endswith("_debugger_case_path_translation.py") local_root = os.path.dirname(get_file_in_client(writer)) - json_facade.write_launch(pathMappings=[{ - 'localRoot': local_root, - 'remoteRoot': os.path.dirname(writer.TEST_FILE), - }]) + json_facade.write_launch( + pathMappings=[ + { + "localRoot": local_root, + "remoteRoot": os.path.dirname(writer.TEST_FILE), + } + ] + ) json_facade.write_set_breakpoints(bp_line, filename=file_in_client) json_facade.write_make_initial_run() @@ -4358,29 +4420,28 @@ def get_environ(writer): # Check stack trace format. stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - format={'module': True, 'line': True} - ))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body stack_frame = stack_trace_response_body.stackFrames[0] - assert stack_frame['name'] == '__main__.call_this : %s' % (bp_line,) + assert stack_frame["name"] == "__main__.call_this : %s" % (bp_line,) - path = stack_frame['source']['path'] + path = stack_frame["source"]["path"] file_in_client_unicode = file_in_client assert path == file_in_client_unicode - source_reference = stack_frame['source']['sourceReference'] + source_reference = stack_frame["source"]["sourceReference"] assert source_reference == 0 # When it's translated the source reference must be == 0 stack_frame_not_path_translated = stack_trace_response_body.stackFrames[1] - if not stack_frame_not_path_translated['name'].startswith( - 'tests_python.resource_path_translation.other.call_me_back1 :'): - raise AssertionError('Error. Found: >>%s<<.' % (stack_frame_not_path_translated['name'],)) + if not stack_frame_not_path_translated["name"].startswith("tests_python.resource_path_translation.other.call_me_back1 :"): + raise AssertionError("Error. Found: >>%s<<." % (stack_frame_not_path_translated["name"],)) - assert stack_frame_not_path_translated['source']['path'].endswith('other.py') - source_reference = stack_frame_not_path_translated['source']['sourceReference'] + assert stack_frame_not_path_translated["source"]["path"].endswith("other.py") + source_reference = stack_frame_not_path_translated["source"]["sourceReference"] assert source_reference != 0 # Not translated response = json_facade.write_get_source(source_reference) @@ -4391,35 +4452,37 @@ def get_environ(writer): writer.finished_ok = True -@pytest.mark.skipif(IS_JYTHON, reason='Flaky on Jython.') +@pytest.mark.skipif(IS_JYTHON, reason="Flaky on Jython.") def test_source_reference_no_file(case_setup_dap, tmpdir): - - with case_setup_dap.test_file('_debugger_case_source_reference.py') as writer: + with case_setup_dap.test_file("_debugger_case_source_reference.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( - debugOptions=['DebugStdLib'], - pathMappings=[{ - 'localRoot': os.path.dirname(writer.TEST_FILE), - 'remoteRoot': os.path.dirname(writer.TEST_FILE), - }]) + debugOptions=["DebugStdLib"], + pathMappings=[ + { + "localRoot": os.path.dirname(writer.TEST_FILE), + "remoteRoot": os.path.dirname(writer.TEST_FILE), + } + ], + ) - writer.write_add_breakpoint(writer.get_line_index_with_content('breakpoint')) + writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) json_facade.write_make_initial_run() # First hit is for breakpoint reached via a stack frame that doesn't have source. json_hit = json_facade.wait_for_thread_stopped() stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - format={'module': True, 'line': True} - ))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body stack_frame = stack_trace_response_body.stackFrames[1] - assert stack_frame['source']['path'] == '' - source_reference = stack_frame['source']['sourceReference'] + assert stack_frame["source"]["path"] == "" + source_reference = stack_frame["source"]["sourceReference"] assert source_reference != 0 json_facade.write_get_source(source_reference, success=False) @@ -4431,57 +4494,55 @@ def test_source_reference_no_file(case_setup_dap, tmpdir): json_hit = json_facade.wait_for_thread_stopped() stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - format={'module': True, 'line': True} - ))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body stack_frame = stack_trace_response_body.stackFrames[1] - print(stack_frame['source']['path']) - assert stack_frame['source']['path'] == '' - source_reference = stack_frame['source']['sourceReference'] + print(stack_frame["source"]["path"]) + assert stack_frame["source"]["path"] == "" + source_reference = stack_frame["source"]["sourceReference"] assert source_reference != 0 response = json_facade.write_get_source(source_reference) - assert response.body.content == 'foo()\n' + assert response.body.content == "foo()\n" json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") def test_linecache_json_existing_file(case_setup_dap, tmpdir): - - with case_setup_dap.test_file('_debugger_case_linecache_existing_file.py') as writer: + with case_setup_dap.test_file("_debugger_case_linecache_existing_file.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - debugger_case_stepping_filename = debugger_unittest._get_debugger_test_file('_debugger_case_stepping.py') - bp_line = writer.get_line_index_with_content('Break here 1', filename=debugger_case_stepping_filename) + debugger_case_stepping_filename = debugger_unittest._get_debugger_test_file("_debugger_case_stepping.py") + bp_line = writer.get_line_index_with_content("Break here 1", filename=debugger_case_stepping_filename) json_facade.write_set_breakpoints(bp_line, filename=debugger_case_stepping_filename) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() stack_trace_response_body = json_hit.stack_trace_response.body for stack_frame in stack_trace_response_body.stackFrames: - source_reference = stack_frame['source']['sourceReference'] + source_reference = stack_frame["source"]["sourceReference"] assert source_reference == 0 json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") def test_linecache_json(case_setup_dap, tmpdir): - - with case_setup_dap.test_file('_debugger_case_linecache.py') as writer: + with case_setup_dap.test_file("_debugger_case_linecache.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - writer.write_add_breakpoint(writer.get_line_index_with_content('breakpoint')) + writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) json_facade.write_make_initial_run() # First hit is for breakpoint reached via a stack frame that doesn't have source. @@ -4490,8 +4551,8 @@ def test_linecache_json(case_setup_dap, tmpdir): stack_trace_response_body = json_hit.stack_trace_response.body source_references = [] for stack_frame in stack_trace_response_body.stackFrames: - if stack_frame['source']['path'] == '': - source_reference = stack_frame['source']['sourceReference'] + if stack_frame["source"]["path"] == "": + source_reference = stack_frame["source"]["sourceReference"] assert source_reference != 0 source_references.append(source_reference) @@ -4500,23 +4561,22 @@ def test_linecache_json(case_setup_dap, tmpdir): for source_reference in source_references: response = json_facade.write_get_source(source_reference) - assert 'def somemethod():' in response.body.content - assert ' foo()' in response.body.content - assert '[x for x in range(10)]' in response.body.content + assert "def somemethod():" in response.body.content + assert " foo()" in response.body.content + assert "[x for x in range(10)]" in response.body.content json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_CPYTHON, reason='CPython only test.') +@pytest.mark.skipif(not IS_CPYTHON, reason="CPython only test.") def test_show_bytecode_json(case_setup_dap, tmpdir): - - with case_setup_dap.test_file('_debugger_case_show_bytecode.py') as writer: + with case_setup_dap.test_file("_debugger_case_show_bytecode.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - writer.write_add_breakpoint(writer.get_line_index_with_content('breakpoint')) + writer.write_add_breakpoint(writer.get_line_index_with_content("breakpoint")) json_facade.write_make_initial_run() # First hit is for breakpoint reached via a stack frame that doesn't have source. @@ -4525,8 +4585,8 @@ def test_show_bytecode_json(case_setup_dap, tmpdir): stack_trace_response_body = json_hit.stack_trace_response.body source_references = [] for stack_frame in stack_trace_response_body.stackFrames: - if stack_frame['source']['path'] == '': - source_reference = stack_frame['source']['sourceReference'] + if stack_frame["source"]["path"] == "": + source_reference = stack_frame["source"]["sourceReference"] assert source_reference != 0 source_references.append(source_reference) @@ -4535,92 +4595,121 @@ def test_show_bytecode_json(case_setup_dap, tmpdir): for source_reference in source_references: response = json_facade.write_get_source(source_reference) - assert 'MyClass' in response.body.content or 'foo()' in response.body.content + assert "MyClass" in response.body.content or "foo()" in response.body.content json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") @pytest.mark.parametrize("jmc", [False, True]) def test_case_django_no_attribute_exception_breakpoint(case_setup_django_dap, jmc): import django # noqa (may not be there if TEST_DJANGO == False) - django_version = [int(x) for x in django.get_version().split('.')][:2] + + django_version = [int(x) for x in django.get_version().split(".")][:2] if django_version < [2, 1]: - pytest.skip('Template exceptions only supporting Django 2.1 onwards.') + pytest.skip("Template exceptions only supporting Django 2.1 onwards.") - with case_setup_django_dap.test_file(EXPECTED_RETURNCODE='any') as writer: + with case_setup_django_dap.test_file(EXPECTED_RETURNCODE="any") as writer: json_facade = JsonFacade(writer) if jmc: - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) - json_facade.write_launch(debugOptions=['Django'], variablePresentation={ - "all": "hide", - "protected": "inline", - }) - json_facade.write_set_exception_breakpoints(['raised']) + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) + json_facade.write_launch( + debugOptions=["Django"], + variablePresentation={ + "all": "hide", + "protected": "inline", + }, + ) + json_facade.write_set_exception_breakpoints(["raised"]) else: - json_facade.write_launch(debugOptions=['DebugStdLib', 'Django'], variablePresentation={ - "all": "hide", - "protected": "inline", - }) + json_facade.write_launch( + debugOptions=["DebugStdLib", "Django"], + variablePresentation={ + "all": "hide", + "protected": "inline", + }, + ) # Don't set to all 'raised' because we'd stop on standard library exceptions here # (which is not something we want). - json_facade.write_set_exception_breakpoints(exception_options=[ - ExceptionOptions(breakMode='always', path=[ - {'names': ['Python Exceptions']}, - {'names': ['AssertionError']}, - ]) - ]) + json_facade.write_set_exception_breakpoints( + exception_options=[ + ExceptionOptions( + breakMode="always", + path=[ + {"names": ["Python Exceptions"]}, + {"names": ["AssertionError"]}, + ], + ) + ] + ) writer.write_make_initial_run() - t = writer.create_request_thread('my_app/template_error') + t = writer.create_request_thread("my_app/template_error") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() - json_hit = json_facade.wait_for_thread_stopped('exception', line=7, file='template_error.html') + json_hit = json_facade.wait_for_thread_stopped("exception", line=7, file="template_error.html") stack_trace_request = json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments( - threadId=json_hit.thread_id, - format={'module': True, 'line': True} - ))) + pydevd_schema.StackTraceRequest( + pydevd_schema.StackTraceArguments(threadId=json_hit.thread_id, format={"module": True, "line": True}) + ) + ) stack_trace_response = json_facade.wait_for_response(stack_trace_request) stack_trace_response_body = stack_trace_response.body stack_frame = next(iter(stack_trace_response_body.stackFrames)) - assert stack_frame['source']['path'].endswith('template_error.html') + assert stack_frame["source"]["path"].endswith("template_error.html") json_hit = json_facade.get_stack_as_json_hit(json_hit.thread_id) variables_response = json_facade.get_variables_response(json_hit.frame_id) - entries = [x for x in variables_response.to_dict()['body']['variables'] if x['name'] == 'entry'] + entries = [x for x in variables_response.to_dict()["body"]["variables"] if x["name"] == "entry"] assert len(entries) == 1 - variables_response = json_facade.get_variables_response(entries[0]['variablesReference']) - assert variables_response.to_dict()['body']['variables'] == [ - {'name': 'key', 'value': "'v1'", 'type': 'str', 'evaluateName': 'entry.key', 'presentationHint': {'attributes': ['rawString']}, 'variablesReference': 0}, - {'name': 'val', 'value': "'v1'", 'type': 'str', 'evaluateName': 'entry.val', 'presentationHint': {'attributes': ['rawString']}, 'variablesReference': 0} + variables_response = json_facade.get_variables_response(entries[0]["variablesReference"]) + assert variables_response.to_dict()["body"]["variables"] == [ + { + "name": "key", + "value": "'v1'", + "type": "str", + "evaluateName": "entry.key", + "presentationHint": {"attributes": ["rawString"]}, + "variablesReference": 0, + }, + { + "name": "val", + "value": "'v1'", + "type": "str", + "evaluateName": "entry.val", + "presentationHint": {"attributes": ["rawString"]}, + "variablesReference": 0, + }, ] json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not TEST_DJANGO, reason='No django available') +@pytest.mark.skipif(not TEST_DJANGO, reason="No django available") def test_case_django_line_validation(case_setup_django_dap): import django # noqa (may not be there if TEST_DJANGO == False) - django_version = [int(x) for x in django.get_version().split('.')][:2] + + django_version = [int(x) for x in django.get_version().split(".")][:2] support_lazy_line_validation = django_version >= [1, 9] import django # noqa (may not be there if TEST_DJANGO == False) - with case_setup_django_dap.test_file(EXPECTED_RETURNCODE='any') as writer: + with case_setup_django_dap.test_file(EXPECTED_RETURNCODE="any") as writer: json_facade = JsonFacade(writer) - json_facade.write_launch(debugOptions=['DebugStdLib', 'Django']) - template_file = debugger_unittest._get_debugger_test_file(os.path.join(writer.DJANGO_FOLDER, 'my_app', 'templates', 'my_app', 'index.html')) - file_doesnt_exist = os.path.join(os.path.dirname(template_file), 'this_does_not_exist.html') + json_facade.write_launch(debugOptions=["DebugStdLib", "Django"]) + template_file = debugger_unittest._get_debugger_test_file( + os.path.join(writer.DJANGO_FOLDER, "my_app", "templates", "my_app", "index.html") + ) + file_doesnt_exist = os.path.join(os.path.dirname(template_file), "this_does_not_exist.html") # At this point, breakpoints will still not be verified (that'll happen when we # actually load the template). @@ -4631,7 +4720,7 @@ def test_case_django_line_validation(case_setup_django_dap): writer.write_make_initial_run() - t = writer.create_request_thread('my_app') + t = writer.create_request_thread("my_app") time.sleep(5) # Give django some time to get to startup before requesting the page t.start() @@ -4660,12 +4749,14 @@ def test_case_django_line_validation(case_setup_django_dap): # know about the template validation. if support_lazy_line_validation: json_facade.write_set_breakpoints( - [1, 2, 8], template_file, expected_lines_in_response=set((1, 2, 7)), + [1, 2, 8], + template_file, + expected_lines_in_response=set((1, 2, 7)), # i.e.: breakpoint id to whether it's verified. - verified={3: True, 4: False, 5: True}) + verified={3: True, 4: False, 5: True}, + ) else: - json_facade.write_set_breakpoints( - [1, 2, 7], template_file, verified=True) + json_facade.write_set_breakpoints([1, 2, 7], template_file, verified=True) json_facade.write_continue() json_facade.wait_for_thread_stopped(line=7) @@ -4676,21 +4767,21 @@ def test_case_django_line_validation(case_setup_django_dap): # To finish, check that setting on a file that doesn't exist is not verified. response = json_facade.write_set_breakpoints([1], file_doesnt_exist, verified=False) for bp in response.body.breakpoints: - assert 'Breakpoint in file that does not exist' in bp['message'] + assert "Breakpoint in file that does not exist" in bp["message"] json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not TEST_FLASK, reason='No flask available') +@pytest.mark.skipif(not TEST_FLASK, reason="No flask available") def test_case_flask_line_validation(case_setup_flask_dap): - with case_setup_flask_dap.test_file(EXPECTED_RETURNCODE='any') as writer: + with case_setup_flask_dap.test_file(EXPECTED_RETURNCODE="any") as writer: json_facade = JsonFacade(writer) - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('flask1')]) - json_facade.write_launch(debugOptions=['Jinja']) + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("flask1")]) + json_facade.write_launch(debugOptions=["Jinja"]) json_facade.write_make_initial_run() - template_file = debugger_unittest._get_debugger_test_file(os.path.join('flask1', 'templates', 'hello.html')) + template_file = debugger_unittest._get_debugger_test_file(os.path.join("flask1", "templates", "hello.html")) # At this point, breakpoints will still not be verified (that'll happen when we # actually load the template). @@ -4729,62 +4820,66 @@ def test_case_flask_line_validation(case_setup_flask_dap): writer.finished_ok = True -@pytest.mark.skipif(not TEST_FLASK, reason='No flask available') +@pytest.mark.skipif(not TEST_FLASK, reason="No flask available") @pytest.mark.parametrize("jmc", [False, True]) def test_case_flask_exceptions(case_setup_flask_dap, jmc): - with case_setup_flask_dap.test_file(EXPECTED_RETURNCODE='any') as writer: + with case_setup_flask_dap.test_file(EXPECTED_RETURNCODE="any") as writer: json_facade = JsonFacade(writer) if jmc: ignore_py_exceptions = False - writer.write_set_project_roots([debugger_unittest._get_debugger_test_file('my_code')]) - json_facade.write_launch(debugOptions=['Jinja']) - json_facade.write_set_exception_breakpoints(['raised']) + writer.write_set_project_roots([debugger_unittest._get_debugger_test_file("my_code")]) + json_facade.write_launch(debugOptions=["Jinja"]) + json_facade.write_set_exception_breakpoints(["raised"]) else: ignore_py_exceptions = True - json_facade.write_launch(debugOptions=['DebugStdLib', 'Jinja']) + json_facade.write_launch(debugOptions=["DebugStdLib", "Jinja"]) # Don't set to all 'raised' because we'd stop on standard library exceptions here # (which is not something we want). - json_facade.write_set_exception_breakpoints(exception_options=[ - ExceptionOptions(breakMode='always', path=[ - {'names': ['Python Exceptions']}, - {'names': ['IndexError']}, - ]) - ]) + json_facade.write_set_exception_breakpoints( + exception_options=[ + ExceptionOptions( + breakMode="always", + path=[ + {"names": ["Python Exceptions"]}, + {"names": ["IndexError"]}, + ], + ) + ] + ) json_facade.write_make_initial_run() - t = writer.create_request_thread('/bad_template') + t = writer.create_request_thread("/bad_template") time.sleep(2) # Give flask some time to get to startup before requesting the page t.start() while True: - json_hit = json_facade.wait_for_thread_stopped('exception') - path = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] - found_line = json_hit.stack_trace_response.body.stackFrames[0]['line'] - if path.endswith('bad.html'): + json_hit = json_facade.wait_for_thread_stopped("exception") + path = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] + found_line = json_hit.stack_trace_response.body.stackFrames[0]["line"] + if path.endswith("bad.html"): assert found_line == 8 json_facade.write_continue() break - if ignore_py_exceptions and path.endswith('.py'): + if ignore_py_exceptions and path.endswith(".py"): json_facade.write_continue() continue - raise AssertionError('Unexpected thread stop: at %s, %s' % (path, found_line)) + raise AssertionError("Unexpected thread stop: at %s, %s" % (path, found_line)) writer.finished_ok = True -@pytest.mark.skipif(IS_APPVEYOR or IS_JYTHON, reason='Flaky on appveyor / Jython encoding issues (needs investigation).') +@pytest.mark.skipif(IS_APPVEYOR or IS_JYTHON, reason="Flaky on appveyor / Jython encoding issues (needs investigation).") def test_redirect_output(case_setup_dap): - def get_environ(writer): env = os.environ.copy() - env["PYTHONIOENCODING"] = 'utf-8' + env["PYTHONIOENCODING"] = "utf-8" return env - with case_setup_dap.test_file('_debugger_case_redirect.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_redirect.py", get_environ=get_environ) as writer: original_ignore_stderr_line = writer._ignore_stderr_line json_facade = JsonFacade(writer) @@ -4794,16 +4889,18 @@ def _ignore_stderr_line(line): if original_ignore_stderr_line(line): return True - binary_junk = b'\xe8\xF0\x80\x80\x80' + binary_junk = b"\xe8\xF0\x80\x80\x80" if sys.version_info[0] >= 3: - binary_junk = binary_junk.decode('utf-8', 'replace') - - return line.startswith(( - 'text', - 'binary', - 'a', - binary_junk, - )) + binary_junk = binary_junk.decode("utf-8", "replace") + + return line.startswith( + ( + "text", + "binary", + "a", + binary_junk, + ) + ) writer._ignore_stderr_line = _ignore_stderr_line @@ -4811,25 +4908,27 @@ def _ignore_stderr_line(line): # must always be consistent and there's a message for each write). expected = [ - 'text\n', - 'binary or text\n', - 'ação1\n', + "text\n", + "binary or text\n", + "ação1\n", ] if sys.version_info[0] >= 3: - expected.extend(( - 'binary\n', - 'ação2\n'.encode(encoding='latin1').decode('utf-8', 'replace'), - 'ação3\n', - )) + expected.extend( + ( + "binary\n", + "ação2\n".encode(encoding="latin1").decode("utf-8", "replace"), + "ação3\n", + ) + ) - binary_junk = '\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\n' + binary_junk = "\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n\n" if sys.version_info[0] >= 3: binary_junk = "\ufffd\ufffd\ufffd\ufffd\ufffd\n\n" expected.append(binary_junk) - new_expected = [(x, 'stdout') for x in expected] - new_expected.extend([(x, 'stderr') for x in expected]) + new_expected = [(x, "stdout") for x in expected] + new_expected.extend([(x, "stderr") for x in expected]) writer.write_start_redirect() @@ -4844,11 +4943,11 @@ def _ignore_stderr_line(line): msg = (output, category) except Exception: for msg in msgs: - sys.stderr.write('Found: %s\n' % (msg,)) + sys.stderr.write("Found: %s\n" % (msg,)) for msg in new_expected: - sys.stderr.write('Expected: %s\n' % (msg,)) + sys.stderr.write("Expected: %s\n" % (msg,)) for msg in ignored: - sys.stderr.write('Ignored: %s\n' % (msg,)) + sys.stderr.write("Ignored: %s\n" % (msg,)) raise if msg not in new_expected: ignored.append(msg) @@ -4863,12 +4962,13 @@ def _ignore_stderr_line(line): def test_listen_dap_messages(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_listen_dap_messages.py') as writer: + with case_setup_dap.test_file("_debugger_case_listen_dap_messages.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_launch(debugOptions=['RedirectOutput'],) + json_facade.write_launch( + debugOptions=["RedirectOutput"], + ) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() @@ -4885,25 +4985,39 @@ def _attach_to_writer_pid(writer): assert writer.process is not None def attach(): - attach_pydevd_file = os.path.join(os.path.dirname(pydevd.__file__), 'pydevd_attach_to_process', 'attach_pydevd.py') - subprocess.call([sys.executable, attach_pydevd_file, '--pid', str(writer.process.pid), '--port', str(writer.port), '--protocol', 'http_json', '--debug-mode', 'debugpy-dap']) + attach_pydevd_file = os.path.join(os.path.dirname(pydevd.__file__), "pydevd_attach_to_process", "attach_pydevd.py") + subprocess.call( + [ + sys.executable, + attach_pydevd_file, + "--pid", + str(writer.process.pid), + "--port", + str(writer.port), + "--protocol", + "http_json", + "--debug-mode", + "debugpy-dap", + ] + ) threading.Thread(target=attach).start() wait_for_condition(lambda: writer.finished_initialization) -@pytest.mark.parametrize('reattach', [True, False]) -@pytest.mark.skipif(not IS_CPYTHON or IS_MAC, reason='Attach to pid only available in CPython (brittle on Mac).') +@pytest.mark.parametrize("reattach", [True, False]) +@pytest.mark.skipif(not IS_CPYTHON or IS_MAC, reason="Attach to pid only available in CPython (brittle on Mac).") +@pytest.mark.skipif(not SUPPORT_ATTACH_TO_PID, reason="Attach to pid not supported.") def test_attach_to_pid(case_setup_remote, reattach): import threading - with case_setup_remote.test_file('_debugger_case_attach_to_pid_simple.py', wait_for_port=False) as writer: + with case_setup_remote.test_file("_debugger_case_attach_to_pid_simple.py", wait_for_port=False) as writer: time.sleep(1) # Give it some time to initialize to get to the while loop. _attach_to_writer_pid(writer) json_facade = JsonFacade(writer) - bp_line = writer.get_line_index_with_content('break here') + bp_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(bp_line) json_facade.write_make_initial_run() @@ -4920,11 +5034,11 @@ def test_attach_to_pid(case_setup_remote, reattach): t = threading.Thread(target=writer.start_socket) t.start() - wait_for_condition(lambda: hasattr(writer, 'port')) + wait_for_condition(lambda: hasattr(writer, "port")) time.sleep(1) writer.process = writer.process _attach_to_writer_pid(writer) - wait_for_condition(lambda: hasattr(writer, 'reader_thread')) + wait_for_condition(lambda: hasattr(writer, "reader_thread")) time.sleep(1) json_facade = JsonFacade(writer) @@ -4933,7 +5047,7 @@ def test_attach_to_pid(case_setup_remote, reattach): json_hit = json_facade.wait_for_thread_stopped(line=bp_line) - json_facade.write_set_variable(json_hit.frame_id, 'wait', '0') + json_facade.write_set_variable(json_hit.frame_id, "wait", "0") json_facade.write_continue() @@ -4941,7 +5055,7 @@ def test_attach_to_pid(case_setup_remote, reattach): def test_remote_debugger_basic(case_setup_remote_dap): - with case_setup_remote_dap.test_file('_debugger_case_remote.py') as writer: + with case_setup_remote_dap.test_file("_debugger_case_remote.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() json_facade.write_make_initial_run() @@ -4951,55 +5065,54 @@ def test_remote_debugger_basic(case_setup_remote_dap): writer.finished_ok = True -PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS = ['', '--use-c-switch'] -if hasattr(os, 'posix_spawn'): - PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS.append('--posix-spawn') +PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS = ["", "--use-c-switch"] +if hasattr(os, "posix_spawn"): + PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS.append("--posix-spawn") -@pytest.mark.parametrize('command_line_args', PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS) +@pytest.mark.parametrize("command_line_args", PYDEVD_CUSTOMIZATION_COMMAND_LINE_ARGS) def test_subprocess_pydevd_customization(case_setup_remote_dap, command_line_args): import threading from tests_python.debugger_unittest import AbstractWriterThread with case_setup_remote_dap.test_file( - '_debugger_case_pydevd_customization.py', - append_command_line_args=command_line_args if command_line_args else [], - ) as writer: + "_debugger_case_pydevd_customization.py", + append_command_line_args=command_line_args if command_line_args else [], + ) as writer: json_facade = JsonFacade(writer) json_facade.writer.write_multi_threads_single_notification(True) json_facade.write_launch() - break1_line = writer.get_line_index_with_content('break 1 here') - break2_line = writer.get_line_index_with_content('break 2 here') + break1_line = writer.get_line_index_with_content("break 1 here") + break2_line = writer.get_line_index_with_content("break 2 here") json_facade.write_set_breakpoints([break1_line, break2_line]) server_socket = writer.server_socket class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + expected_connections = 1 for _ in range(expected_connections): server_socket.listen(1) self.server_socket = server_socket - writer.log.append(' *** Multiprocess waiting on server_socket.accept()') + writer.log.append(" *** Multiprocess waiting on server_socket.accept()") new_sock, addr = server_socket.accept() - writer.log.append(' *** Multiprocess completed server_socket.accept()') + writer.log.append(" *** Multiprocess completed server_socket.accept()") reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() - writer.log.append(' *** Multiprocess started ReaderThread') + writer.log.append(" *** Multiprocess started ReaderThread") writer2 = SecondaryProcessWriterThread() - writer2._WRITE_LOG_PREFIX = ' *** Multiprocess write: ' + writer2._WRITE_LOG_PREFIX = " *** Multiprocess write: " writer2.reader_thread = reader_thread writer2.sock = new_sock json_facade2 = JsonFacade(writer2) @@ -5013,7 +5126,7 @@ def run(self): secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() @@ -5024,7 +5137,7 @@ def run(self): secondary_process_thread_communication.join(5) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") writer.finished_ok = True @@ -5032,22 +5145,20 @@ def test_subprocess_then_fork(case_setup_multiprocessing_dap): import threading from tests_python.debugger_unittest import AbstractWriterThread - with case_setup_multiprocessing_dap.test_file('_debugger_case_subprocess_and_fork.py') as writer: + with case_setup_multiprocessing_dap.test_file("_debugger_case_subprocess_and_fork.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - break_line = writer.get_line_index_with_content('break here') + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints([break_line]) server_socket = writer.server_socket class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread @@ -5056,44 +5167,44 @@ def run(self): for i in range(2): server_socket.listen(1) self.server_socket = server_socket - writer.log.append(' *** Multiprocess %s waiting on server_socket.accept()' % (i,)) + writer.log.append(" *** Multiprocess %s waiting on server_socket.accept()" % (i,)) new_sock, addr = server_socket.accept() - writer.log.append(' *** Multiprocess %s completed server_socket.accept()' % (i,)) + writer.log.append(" *** Multiprocess %s completed server_socket.accept()" % (i,)) reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess %s Reader Thread' % i + reader_thread.name = " *** Multiprocess %s Reader Thread" % i reader_thread.start() - writer.log.append(' *** Multiprocess %s started ReaderThread' % (i,)) + writer.log.append(" *** Multiprocess %s started ReaderThread" % (i,)) writer2 = SecondaryProcessWriterThread() - writer2._WRITE_LOG_PREFIX = ' *** Multiprocess %s write: ' % i + writer2._WRITE_LOG_PREFIX = " *** Multiprocess %s write: " % i writer2.reader_thread = reader_thread writer2.sock = new_sock json_facade2 = JsonFacade(writer2) json_facade2.writer.write_multi_threads_single_notification(True) - writer.log.append(' *** Multiprocess %s write attachThread' % (i,)) + writer.log.append(" *** Multiprocess %s write attachThread" % (i,)) json_facade2.write_attach(justMyCode=False) - writer.log.append(' *** Multiprocess %s write set breakpoints' % (i,)) + writer.log.append(" *** Multiprocess %s write set breakpoints" % (i,)) json_facade2.write_set_breakpoints([break_line]) - writer.log.append(' *** Multiprocess %s write make initial run' % (i,)) + writer.log.append(" *** Multiprocess %s write make initial run" % (i,)) json_facade2.write_make_initial_run() json_facades.append(json_facade2) for i, json_facade3 in enumerate(json_facades): - writer.log.append(' *** Multiprocess %s wait for thread stopped' % (i,)) + writer.log.append(" *** Multiprocess %s wait for thread stopped" % (i,)) json_facade3.wait_for_thread_stopped(line=break_line) - writer.log.append(' *** Multiprocess %s continue' % (i,)) + writer.log.append(" *** Multiprocess %s continue" % (i,)) json_facade3.write_continue() secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() secondary_process_thread_communication.join(20) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") json_facade.wait_for_thread_stopped(line=break_line) json_facade.write_continue() @@ -5101,44 +5212,42 @@ def run(self): writer.finished_ok = True -@pytest.mark.parametrize('apply_multiprocessing_patch', [True]) +@pytest.mark.parametrize("apply_multiprocessing_patch", [True]) def test_no_subprocess_patching(case_setup_multiprocessing_dap, apply_multiprocessing_patch): import threading from tests_python.debugger_unittest import AbstractWriterThread def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - ret.insert(ret.index('--client'), '--multiprocess') - ret.insert(ret.index('--client'), '--debug-mode') - ret.insert(ret.index('--client'), 'debugpy-dap') - ret.insert(ret.index('--client'), '--json-dap-http') + ret.insert(ret.index("--client"), "--multiprocess") + ret.insert(ret.index("--client"), "--debug-mode") + ret.insert(ret.index("--client"), "debugpy-dap") + ret.insert(ret.index("--client"), "--json-dap-http") if apply_multiprocessing_patch: - ret.append('apply-multiprocessing-patch') + ret.append("apply-multiprocessing-patch") return ret with case_setup_multiprocessing_dap.test_file( - '_debugger_case_no_subprocess_patching.py', - update_command_line_args=update_command_line_args - ) as writer: + "_debugger_case_no_subprocess_patching.py", update_command_line_args=update_command_line_args + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break1_line = writer.get_line_index_with_content('break 1 here') - break2_line = writer.get_line_index_with_content('break 2 here') + break1_line = writer.get_line_index_with_content("break 1 here") + break2_line = writer.get_line_index_with_content("break 2 here") json_facade.write_set_breakpoints([break1_line, break2_line]) server_socket = writer.server_socket class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + expected_connections = 1 for _ in range(expected_connections): @@ -5147,7 +5256,7 @@ def run(self): new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -5164,7 +5273,7 @@ def run(self): if apply_multiprocessing_patch: secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() @@ -5173,28 +5282,27 @@ def run(self): if apply_multiprocessing_patch: secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") writer.finished_ok = True def test_module_crash(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_module.py') as writer: + with case_setup_dap.test_file("_debugger_case_module.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() stopped_event = json_facade.wait_for_json_message(StoppedEvent) thread_id = stopped_event.body.threadId - json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) + json_facade.write_request(pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) module_event = json_facade.wait_for_json_message(ModuleEvent) # : :type module_event: ModuleEvent - assert 'MyName' in module_event.body.module.name - assert 'MyVersion' in module_event.body.module.version - assert 'MyPackage' in module_event.body.module.kwargs['package'] + assert "MyName" in module_event.body.module.name + assert "MyVersion" in module_event.body.module.version + assert "MyPackage" in module_event.body.module.kwargs["package"] json_facade.write_continue() @@ -5202,89 +5310,85 @@ def test_module_crash(case_setup_dap): def test_pydevd_systeminfo(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_print.py') as writer: + with case_setup_dap.test_file("_debugger_case_print.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() assert json_hit.thread_id - info_request = json_facade.write_request( - pydevd_schema.PydevdSystemInfoRequest( - pydevd_schema.PydevdSystemInfoArguments() - ) - ) + info_request = json_facade.write_request(pydevd_schema.PydevdSystemInfoRequest(pydevd_schema.PydevdSystemInfoArguments())) info_response = json_facade.wait_for_response(info_request) - body = info_response.to_dict()['body'] + body = info_response.to_dict()["body"] - assert body['python']['version'] == PY_VERSION_STR - assert body['python']['implementation']['name'] == PY_IMPL_NAME - assert body['python']['implementation']['version'] == PY_IMPL_VERSION_STR - assert 'description' in body['python']['implementation'] + assert body["python"]["version"] == PY_VERSION_STR + assert body["python"]["implementation"]["name"] == PY_IMPL_NAME + assert body["python"]["implementation"]["version"] == PY_IMPL_VERSION_STR + assert "description" in body["python"]["implementation"] - assert body['platform'] == {'name': sys.platform} + assert body["platform"] == {"name": sys.platform} - assert 'pid' in body['process'] - assert 'ppid' in body['process'] - assert body['process']['executable'] == sys.executable - assert body['process']['bitness'] == 64 if IS_64BIT_PROCESS else 32 + assert "pid" in body["process"] + assert "ppid" in body["process"] + assert body["process"]["executable"] == sys.executable + assert body["process"]["bitness"] == 64 if IS_64BIT_PROCESS else 32 - assert 'usingCython' in body['pydevd'] - assert 'usingFrameEval' in body['pydevd'] + assert "usingCython" in body["pydevd"] + assert "usingFrameEval" in body["pydevd"] - use_cython = os.getenv('PYDEVD_USE_CYTHON') + use_cython = os.getenv("PYDEVD_USE_CYTHON") if use_cython is not None: - using_cython = use_cython == 'YES' - assert body['pydevd']['usingCython'] == using_cython - assert body['pydevd']['usingFrameEval'] == (using_cython and IS_PY36_OR_GREATER and not TODO_PY311) + using_cython = use_cython == "YES" + assert body["pydevd"]["usingCython"] == using_cython + assert body["pydevd"]["usingFrameEval"] == (using_cython and IS_PY36_OR_GREATER and not IS_PY311_OR_GREATER) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('scenario', [ - 'terminate_request', - 'terminate_debugee' -]) -@pytest.mark.parametrize('check_subprocesses', [ - 'no_subprocesses', - 'kill_subprocesses', - 'kill_subprocesses_ignore_pid', - 'dont_kill_subprocesses', -]) +@pytest.mark.parametrize("scenario", ["terminate_request", "terminate_debugee"]) +@pytest.mark.parametrize( + "check_subprocesses", + [ + "no_subprocesses", + "kill_subprocesses", + "kill_subprocesses_ignore_pid", + "dont_kill_subprocesses", + ], +) def test_terminate(case_setup_dap, scenario, check_subprocesses): import psutil def check_test_suceeded_msg(writer, stdout, stderr): - return 'TEST SUCEEDED' not in ''.join(stdout) + return "TEST SUCEEDED" not in "".join(stdout) def update_command_line_args(writer, args): ret = debugger_unittest.AbstractWriterThread.update_command_line_args(writer, args) - if check_subprocesses in ('kill_subprocesses', 'dont_kill_subprocesses'): - ret.append('check-subprocesses') - if check_subprocesses in ('kill_subprocesses_ignore_pid',): - ret.append('check-subprocesses-ignore-pid') + if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses"): + ret.append("check-subprocesses") + if check_subprocesses in ("kill_subprocesses_ignore_pid",): + ret.append("check-subprocesses-ignore-pid") return ret with case_setup_dap.test_file( - '_debugger_case_terminate.py', + "_debugger_case_terminate.py", check_test_suceeded_msg=check_test_suceeded_msg, update_command_line_args=update_command_line_args, - EXPECTED_RETURNCODE='any' if check_subprocesses == 'kill_subprocesses_ignore_pid' else 0, - ) as writer: + EXPECTED_RETURNCODE="any" if check_subprocesses == "kill_subprocesses_ignore_pid" else 0, + ) as writer: json_facade = JsonFacade(writer) - if check_subprocesses == 'dont_kill_subprocesses': + if check_subprocesses == "dont_kill_subprocesses": json_facade.write_launch(terminateChildProcesses=False) json_facade.write_make_initial_run() response = json_facade.write_initialize() - pid = response.to_dict()['body']['pydevd']['processId'] + pid = response.to_dict()["body"]["pydevd"]["processId"] - if check_subprocesses in ('kill_subprocesses', 'dont_kill_subprocesses', 'kill_subprocesses_ignore_pid'): + if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses", "kill_subprocesses_ignore_pid"): process_ids_to_check = [pid] p = psutil.Process(pid) @@ -5298,15 +5402,15 @@ def wait_for_child_processes(): wait_for_condition(wait_for_child_processes) - if scenario == 'terminate_request': + if scenario == "terminate_request": json_facade.write_terminate() - elif scenario == 'terminate_debugee': + elif scenario == "terminate_debugee": json_facade.write_disconnect(terminate_debugee=True) else: - raise AssertionError('Unexpected: %s' % (scenario,)) + raise AssertionError("Unexpected: %s" % (scenario,)) json_facade.wait_for_terminated() - if check_subprocesses in ('kill_subprocesses', 'dont_kill_subprocesses', 'kill_subprocesses_ignore_pid'): + if check_subprocesses in ("kill_subprocesses", "dont_kill_subprocesses", "kill_subprocesses_ignore_pid"): def is_pid_alive(pid): # Note: the process may be a zombie process in Linux @@ -5323,7 +5427,7 @@ def is_pid_alive(pid): def get_live_pids(): return [pid for pid in process_ids_to_check if is_pid_alive(pid)] - if check_subprocesses == 'kill_subprocesses': + if check_subprocesses == "kill_subprocesses": def all_pids_exited(): live_pids = get_live_pids() @@ -5334,7 +5438,7 @@ def all_pids_exited(): wait_for_condition(all_pids_exited) - elif check_subprocesses == 'kill_subprocesses_ignore_pid': + elif check_subprocesses == "kill_subprocesses_ignore_pid": def all_pids_exited(): live_pids = get_live_pids() @@ -5371,57 +5475,56 @@ def only_main_pid_exited(): def test_access_token(case_setup_dap): - def update_command_line_args(self, args): - args.insert(1, '--json-dap-http') - args.insert(2, '--access-token') - args.insert(3, 'bar123') - args.insert(4, '--client-access-token') - args.insert(5, 'foo321') + args.insert(1, "--json-dap-http") + args.insert(2, "--access-token") + args.insert(3, "bar123") + args.insert(4, "--client-access-token") + args.insert(5, "foo321") return args - with case_setup_dap.test_file('_debugger_case_pause_continue.py', update_command_line_args=update_command_line_args) as writer: + with case_setup_dap.test_file("_debugger_case_pause_continue.py", update_command_line_args=update_command_line_args) as writer: json_facade = JsonFacade(writer) response = json_facade.write_set_debugger_property(multi_threads_single_notification=True, success=False) assert response.message == "Client not authenticated." - response = json_facade.write_authorize(access_token='wrong', success=False) + response = json_facade.write_authorize(access_token="wrong", success=False) assert response.message == "Client not authenticated." response = json_facade.write_set_debugger_property(multi_threads_single_notification=True, success=False) assert response.message == "Client not authenticated." - authorize_response = json_facade.write_authorize(access_token='bar123', success=True) + authorize_response = json_facade.write_authorize(access_token="bar123", success=True) # : :type authorize_response:PydevdAuthorizeResponse - assert authorize_response.body.clientAccessToken == 'foo321' + assert authorize_response.body.clientAccessToken == "foo321" json_facade.write_set_debugger_property(multi_threads_single_notification=True) json_facade.write_launch() - break_line = writer.get_line_index_with_content('Pause here and change loop to False') + break_line = writer.get_line_index_with_content("Pause here and change loop to False") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() - json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == 'started') + json_facade.wait_for_json_message(ThreadEvent, lambda event: event.body.reason == "started") json_facade.wait_for_thread_stopped(line=break_line) # : :type response: ThreadsResponse response = json_facade.write_list_threads() assert len(response.body.threads) == 1 - assert next(iter(response.body.threads))['name'] == 'MainThread' + assert next(iter(response.body.threads))["name"] == "MainThread" json_facade.write_disconnect() - response = json_facade.write_authorize(access_token='wrong', success=False) + response = json_facade.write_authorize(access_token="wrong", success=False) assert response.message == "Client not authenticated." - authorize_response = json_facade.write_authorize(access_token='bar123') - assert authorize_response.body.clientAccessToken == 'foo321' + authorize_response = json_facade.write_authorize(access_token="bar123") + assert authorize_response.body.clientAccessToken == "foo321" json_facade.write_set_breakpoints(break_line) json_hit = json_facade.wait_for_thread_stopped(line=break_line) - json_facade.write_set_variable(json_hit.frame_id, 'loop', 'False') + json_facade.write_set_variable(json_hit.frame_id, "loop", "False") json_facade.write_continue() json_facade.wait_for_terminated() @@ -5429,62 +5532,59 @@ def update_command_line_args(self, args): def test_stop_on_entry(case_setup_dap): - with case_setup_dap.test_file('not_my_code/main_on_entry.py') as writer: + with case_setup_dap.test_file("not_my_code/main_on_entry.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( justMyCode=False, stopOnEntry=True, rules=[ - {'path': '**/not_my_code/**', 'include':False}, - ] + {"path": "**/not_my_code/**", "include": False}, + ], ) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped( - 'entry', + "entry", file=( # We need to match the end with the proper slash. - 'my_code/__init__.py', - 'my_code\\__init__.py' - ) + "my_code/__init__.py", + "my_code\\__init__.py", + ), ) json_facade.write_continue() writer.finished_ok = True def test_stop_on_entry2(case_setup_dap): - with case_setup_dap.test_file('not_my_code/main_on_entry2.py') as writer: + with case_setup_dap.test_file("not_my_code/main_on_entry2.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( justMyCode=False, stopOnEntry=True, showReturnValue=True, rules=[ - {'path': '**/main_on_entry2.py', 'include':False}, - ] + {"path": "**/main_on_entry2.py", "include": False}, + ], ) json_facade.write_make_initial_run() - json_facade.wait_for_thread_stopped( - 'entry', - file='empty_file.py' - ) + json_facade.wait_for_thread_stopped("entry", file="empty_file.py") json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('val', [True, False]) +@pytest.mark.parametrize("val", [True, False]) def test_debug_options(case_setup_dap, val): - with case_setup_dap.test_file('_debugger_case_debug_options.py') as writer: + with case_setup_dap.test_file("_debugger_case_debug_options.py") as writer: json_facade = JsonFacade(writer) - gui_event_loop = 'matplotlib' + gui_event_loop = "matplotlib" if val: try: import PySide2.QtCore except ImportError: pass else: - gui_event_loop = 'pyside2' + gui_event_loop = "pyside2" args = dict( justMyCode=val, redirectOutput=True, # Always redirect the output regardless of other values. @@ -5495,31 +5595,32 @@ def test_debug_options(case_setup_dap, val): stopOnEntry=val, maxExceptionStackFrames=4 if val else 5, guiEventLoop=gui_event_loop, - clientOS='UNIX' if val else 'WINDOWS' + clientOS="UNIX" if val else "WINDOWS", ) json_facade.write_launch(**args) json_facade.write_make_initial_run() - if args['stopOnEntry']: - json_facade.wait_for_thread_stopped('entry') + if args["stopOnEntry"]: + json_facade.wait_for_thread_stopped("entry") json_facade.write_continue() output = json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'stdout' and msg.body.output.startswith('{')and msg.body.output.endswith('}')) + OutputEvent, lambda msg: msg.body.category == "stdout" and msg.body.output.startswith("{") and msg.body.output.endswith("}") + ) # The values printed are internal values from _pydevd_bundle.pydevd_json_debug_options.DebugOptions, # not the parameters we passed. translation = { - 'django': 'django_debug', - 'flask': 'flask_debug', - 'justMyCode': 'just_my_code', - 'redirectOutput': 'redirect_output', - 'showReturnValue': 'show_return_value', - 'breakOnSystemExitZero': 'break_system_exit_zero', - 'stopOnEntry': 'stop_on_entry', - 'maxExceptionStackFrames': 'max_exception_stack_frames', - 'guiEventLoop': 'gui_event_loop', - 'clientOS': 'client_os', + "django": "django_debug", + "flask": "flask_debug", + "justMyCode": "just_my_code", + "redirectOutput": "redirect_output", + "showReturnValue": "show_return_value", + "breakOnSystemExitZero": "break_system_exit_zero", + "stopOnEntry": "stop_on_entry", + "maxExceptionStackFrames": "max_exception_stack_frames", + "guiEventLoop": "gui_event_loop", + "clientOS": "client_os", } assert json.loads(output.body.output) == dict((translation[key], val) for key, val in args.items()) @@ -5528,17 +5629,16 @@ def test_debug_options(case_setup_dap, val): def test_gui_event_loop_custom(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_gui_event_loop.py') as writer: + with case_setup_dap.test_file("_debugger_case_gui_event_loop.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_launch(guiEventLoop='__main__.LoopHolder.gui_loop', redirectOutput=True) - break_line = writer.get_line_index_with_content('break here') + json_facade.write_launch(guiEventLoop="__main__.LoopHolder.gui_loop", redirectOutput=True) + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() json_facade.wait_for_thread_stopped() - json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'stdout' and 'gui_loop() called' in msg.body.output) + json_facade.wait_for_json_message(OutputEvent, lambda msg: msg.body.category == "stdout" and "gui_loop() called" in msg.body.output) json_facade.write_continue() json_facade.wait_for_terminated() @@ -5549,12 +5649,12 @@ def test_gui_event_loop_qt5(case_setup_dap): try: from PySide2 import QtCore except ImportError: - pytest.skip('PySide2 not available') + pytest.skip("PySide2 not available") - with case_setup_dap.test_file('_debugger_case_gui_event_loop_qt5.py') as writer: + with case_setup_dap.test_file("_debugger_case_gui_event_loop_qt5.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_launch(guiEventLoop='qt5', redirectOutput=True) - break_line = writer.get_line_index_with_content('break here') + json_facade.write_launch(guiEventLoop="qt5", redirectOutput=True) + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() @@ -5564,78 +5664,78 @@ def test_gui_event_loop_qt5(case_setup_dap): # output is not shown (as the QTimer timeout wouldn't be executed). for _i in range(3): json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'stdout' and 'on_timeout() called' in msg.body.output) + OutputEvent, lambda msg: msg.body.category == "stdout" and "on_timeout() called" in msg.body.output + ) json_facade.write_continue() json_facade.wait_for_terminated() writer.finished_ok = True -@pytest.mark.parametrize('debug_stdlib', [True, False]) +@pytest.mark.parametrize("debug_stdlib", [True, False]) def test_just_my_code_debug_option_deprecated(case_setup_dap, debug_stdlib, debugger_runner_simple): from _pydev_bundle import pydev_log - with case_setup_dap.test_file('_debugger_case_debug_options.py') as writer: + + with case_setup_dap.test_file("_debugger_case_debug_options.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch( redirectOutput=True, # Always redirect the output regardless of other values. - debugStdLib=debug_stdlib + debugStdLib=debug_stdlib, ) json_facade.write_make_initial_run() output = json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'stdout' and msg.body.output.startswith('{')and msg.body.output.endswith('}')) + OutputEvent, lambda msg: msg.body.category == "stdout" and msg.body.output.startswith("{") and msg.body.output.endswith("}") + ) settings = json.loads(output.body.output) # Note: the internal attribute is just_my_code. - assert settings['just_my_code'] == (not debug_stdlib) + assert settings["just_my_code"] == (not debug_stdlib) json_facade.wait_for_terminated() contents = [] for f in pydev_log.list_log_files(debugger_runner_simple.pydevd_debug_file): if os.path.exists(f): - with open(f, 'r') as stream: + with open(f, "r") as stream: contents.append(stream.read()) writer.finished_ok = True def test_send_invalid_messages(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_local_variables.py') as writer: + with case_setup_dap.test_file("_debugger_case_local_variables.py") as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break 2 here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break 2 here")) json_facade.write_make_initial_run() stopped_event = json_facade.wait_for_json_message(StoppedEvent) thread_id = stopped_event.body.threadId - json_facade.write_request( - pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) + json_facade.write_request(pydevd_schema.StackTraceRequest(pydevd_schema.StackTraceArguments(threadId=thread_id))) # : :type response: ModulesResponse # : :type modules_response_body: ModulesResponseBody # *** Check that we accept an invalid modules request (i.e.: without arguments). - response = json_facade.wait_for_response(json_facade.write_request( - {'type': 'request', 'command': 'modules'})) + response = json_facade.wait_for_response(json_facade.write_request({"type": "request", "command": "modules"})) modules_response_body = response.body assert len(modules_response_body.modules) == 1 module = next(iter(modules_response_body.modules)) - assert module['name'] == '__main__' - assert module['path'].endswith('_debugger_case_local_variables.py') + assert module["name"] == "__main__" + assert module["path"].endswith("_debugger_case_local_variables.py") # *** Check that we don't fail on request without command. - request = json_facade.write_request({'type': 'request'}) + request = json_facade.write_request({"type": "request"}) response = json_facade.wait_for_response(request, Response) assert not response.success - assert response.command == '' + assert response.command == "" # *** Check that we don't crash if we can't decode message. - json_facade.writer.write_with_content_len('invalid json here') + json_facade.writer.write_with_content_len("invalid json here") # *** Check that we get a failure from a completions without arguments. - response = json_facade.wait_for_response(json_facade.write_request( - {'type': 'request', 'command': 'completions'})) + response = json_facade.wait_for_response(json_facade.write_request({"type": "request", "command": "completions"})) assert not response.success json_facade.write_continue() @@ -5643,32 +5743,31 @@ def test_send_invalid_messages(case_setup_dap): def test_send_json_message(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_custom_message.py') as writer: + with case_setup_dap.test_file("_debugger_case_custom_message.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch() json_facade.write_make_initial_run() - json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'my_category' and msg.body.output == 'some output') + json_facade.wait_for_json_message(OutputEvent, lambda msg: msg.body.category == "my_category" and msg.body.output == "some output") json_facade.wait_for_json_message( - OutputEvent, lambda msg: msg.body.category == 'my_category2' and msg.body.output == 'some output 2') + OutputEvent, lambda msg: msg.body.category == "my_category2" and msg.body.output == "some output 2" + ) writer.finished_ok = True def test_global_scope(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_globals.py') as writer: + with case_setup_dap.test_file("_debugger_case_globals.py") as writer: json_facade = JsonFacade(writer) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('breakpoint here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("breakpoint here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - local_var = json_facade.get_global_var(json_hit.frame_id, 'in_global_scope') + local_var = json_facade.get_global_var(json_hit.frame_id, "in_global_scope") assert local_var.value == "'in_global_scope_value'" json_facade.write_continue() @@ -5676,40 +5775,43 @@ def test_global_scope(case_setup_dap): def _check_inline_var_presentation(json_facade, json_hit, variables_response): - var_names = [v['name'] for v in variables_response.body.variables] - assert var_names[:3] == ['SomeClass', 'in_global_scope', '__builtins__'] + var_names = [v["name"] for v in variables_response.body.variables] + assert var_names[:3] == ["SomeClass", "in_global_scope", "__builtins__"] def _check_hide_var_presentation(json_facade, json_hit, variables_response): - var_names = [v['name'] for v in variables_response.body.variables] - assert var_names == ['in_global_scope'] + var_names = [v["name"] for v in variables_response.body.variables] + assert var_names == ["in_global_scope"] def _check_class_group_special_inline_presentation(json_facade, json_hit, variables_response): - var_names = [v['name'] for v in variables_response.body.variables] - assert var_names[:3] == ['class variables', 'in_global_scope', '__builtins__'] + var_names = [v["name"] for v in variables_response.body.variables] + assert var_names[:3] == ["class variables", "in_global_scope", "__builtins__"] - variables_response = json_facade.get_variables_response(variables_response.body.variables[0]['variablesReference']) - var_names = [v['name'] for v in variables_response.body.variables] - assert var_names == ['SomeClass'] + variables_response = json_facade.get_variables_response(variables_response.body.variables[0]["variablesReference"]) + var_names = [v["name"] for v in variables_response.body.variables] + assert var_names == ["SomeClass"] -@pytest.mark.parametrize('var_presentation, check_func', [ - ({"all": "inline"}, _check_inline_var_presentation), - ({"all": "hide"}, _check_hide_var_presentation), - ({"class": "group", "special": "inline"}, _check_class_group_special_inline_presentation), -]) +@pytest.mark.parametrize( + "var_presentation, check_func", + [ + ({"all": "inline"}, _check_inline_var_presentation), + ({"all": "hide"}, _check_hide_var_presentation), + ({"class": "group", "special": "inline"}, _check_class_group_special_inline_presentation), + ], +) def test_variable_presentation(case_setup_dap, var_presentation, check_func): - with case_setup_dap.test_file('_debugger_case_globals.py') as writer: + with case_setup_dap.test_file("_debugger_case_globals.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(variablePresentation=var_presentation) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('breakpoint here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("breakpoint here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() name_to_scope = json_facade.get_name_to_scope(json_hit.frame_id) - variables_response = json_facade.get_variables_response(name_to_scope['Globals'].variablesReference) + variables_response = json_facade.get_variables_response(name_to_scope["Globals"].variablesReference) check_func(json_facade, json_hit, variables_response) json_facade.write_continue() @@ -5718,16 +5820,15 @@ def test_variable_presentation(case_setup_dap, var_presentation, check_func): def test_debugger_case_deadlock_thread_eval(case_setup_dap): - def get_environ(self): env = os.environ.copy() - env['PYDEVD_UNBLOCK_THREADS_TIMEOUT'] = '0.5' + env["PYDEVD_UNBLOCK_THREADS_TIMEOUT"] = "0.5" return env - with case_setup_dap.test_file('_debugger_case_deadlock_thread_eval.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_deadlock_thread_eval.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here 1')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here 1")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() @@ -5741,27 +5842,25 @@ def get_environ(self): def test_debugger_case_breakpoint_on_unblock_thread_eval(case_setup_dap): - from _pydevd_bundle._debug_adapter.pydevd_schema import EvaluateResponse def get_environ(self): env = os.environ.copy() - env['PYDEVD_UNBLOCK_THREADS_TIMEOUT'] = '0.5' + env["PYDEVD_UNBLOCK_THREADS_TIMEOUT"] = "0.5" return env - with case_setup_dap.test_file('_debugger_case_deadlock_thread_eval.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_deadlock_thread_eval.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break1 = writer.get_line_index_with_content('Break here 1') - break2 = writer.get_line_index_with_content('Break here 2') + break1 = writer.get_line_index_with_content("Break here 1") + break2 = writer.get_line_index_with_content("Break here 2") json_facade.write_set_breakpoints([break1, break2]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=break1) # If threads aren't resumed, this will deadlock. - evaluate_request = json_facade.evaluate( - 'processor.process("process in evaluate")', json_hit.frame_id, wait_for_response=False) + evaluate_request = json_facade.evaluate('processor.process("process in evaluate")', json_hit.frame_id, wait_for_response=False) # We'll hit another breakpoint during that evaluation. json_hit = json_facade.wait_for_thread_stopped(line=break2) @@ -5773,141 +5872,135 @@ def get_environ(self): # Check that we got the evaluate responses. messages = json_facade.mark_messages( - EvaluateResponse, lambda evaluate_response: evaluate_response.request_seq == evaluate_request.seq) + EvaluateResponse, lambda evaluate_response: evaluate_response.request_seq == evaluate_request.seq + ) assert len(messages) == 1 writer.finished_ok = True def test_debugger_case_unblock_manually(case_setup_dap): - from _pydevd_bundle._debug_adapter.pydevd_schema import EvaluateResponse def get_environ(self): env = os.environ.copy() - env['PYDEVD_WARN_EVALUATION_TIMEOUT'] = '0.5' + env["PYDEVD_WARN_EVALUATION_TIMEOUT"] = "0.5" return env - with case_setup_dap.test_file('_debugger_case_deadlock_thread_eval.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_deadlock_thread_eval.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() - break1 = writer.get_line_index_with_content('Break here 1') + break1 = writer.get_line_index_with_content("Break here 1") json_facade.write_set_breakpoints([break1]) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=break1) # If threads aren't resumed, this will deadlock. - evaluate_request = json_facade.evaluate( - 'processor.process("process in evaluate")', json_hit.frame_id, wait_for_response=False) + evaluate_request = json_facade.evaluate('processor.process("process in evaluate")', json_hit.frame_id, wait_for_response=False) - json_facade.wait_for_json_message( - OutputEvent, lambda output_event: 'did not finish after' in output_event.body.output) + json_facade.wait_for_json_message(OutputEvent, lambda output_event: "did not finish after" in output_event.body.output) # User may manually resume it. json_facade.write_continue() # Check that we got the evaluate responses. - json_facade.wait_for_json_message( - EvaluateResponse, lambda evaluate_response: evaluate_response.request_seq == evaluate_request.seq) + json_facade.wait_for_json_message(EvaluateResponse, lambda evaluate_response: evaluate_response.request_seq == evaluate_request.seq) writer.finished_ok = True def test_debugger_case_deadlock_notify_evaluate_timeout(case_setup_dap, pyfile): - @pyfile def case_slow_evaluate(): - def slow_evaluate(): import time + time.sleep(2) - print('TEST SUCEEDED!') # Break here + print("TEST SUCEEDED!") # Break here def get_environ(self): env = os.environ.copy() - env['PYDEVD_WARN_EVALUATION_TIMEOUT'] = '0.5' + env["PYDEVD_WARN_EVALUATION_TIMEOUT"] = "0.5" return env with case_setup_dap.test_file(case_slow_evaluate, get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # If threads aren't resumed, this will deadlock. - json_facade.evaluate('slow_evaluate()', json_hit.frame_id) + json_facade.evaluate("slow_evaluate()", json_hit.frame_id) json_facade.write_continue() - messages = json_facade.mark_messages( - OutputEvent, lambda output_event: 'did not finish after' in output_event.body.output) + messages = json_facade.mark_messages(OutputEvent, lambda output_event: "did not finish after" in output_event.body.output) assert len(messages) == 1 writer.finished_ok = True def test_debugger_case_deadlock_interrupt_thread(case_setup_dap, pyfile): - @pyfile def case_infinite_evaluate(): - def infinite_evaluate(): import time + while True: - time.sleep(.1) + time.sleep(0.1) - print('TEST SUCEEDED!') # Break here + print("TEST SUCEEDED!") # Break here def get_environ(self): env = os.environ.copy() - env['PYDEVD_INTERRUPT_THREAD_TIMEOUT'] = '0.5' + env["PYDEVD_INTERRUPT_THREAD_TIMEOUT"] = "0.5" return env # Sometimes we end up with a different return code on Linux when interrupting (even # though we go through completion and print the 'TEST SUCEEDED' msg). - with case_setup_dap.test_file( - case_infinite_evaluate, get_environ=get_environ, EXPECTED_RETURNCODE='any') as writer: + with case_setup_dap.test_file(case_infinite_evaluate, get_environ=get_environ, EXPECTED_RETURNCODE="any") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() # If threads aren't resumed, this will deadlock. - json_facade.evaluate('infinite_evaluate()', json_hit.frame_id, wait_for_response=False) + json_facade.evaluate("infinite_evaluate()", json_hit.frame_id, wait_for_response=False) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.parametrize('launch_through_link', [True, False]) -@pytest.mark.parametrize('breakpoints_through_link', [True, False]) +@pytest.mark.parametrize("launch_through_link", [True, False]) +@pytest.mark.parametrize("breakpoints_through_link", [True, False]) def test_debugger_case_symlink(case_setup_dap, tmpdir, launch_through_link, breakpoints_through_link): - ''' + """ Test that even if we resolve links internally, externally the contents will be related to the version launched. - ''' + """ from tests_python.debugger_unittest import _get_debugger_test_file - original_filename = _get_debugger_test_file('_debugger_case2.py') - target_link = str(tmpdir.join('resources_link')) + original_filename = _get_debugger_test_file("_debugger_case2.py") + + target_link = str(tmpdir.join("resources_link")) if pydevd_constants.IS_WINDOWS and not pydevd_constants.IS_PY38_OR_GREATER: - pytest.skip('Symlink support not available.') + pytest.skip("Symlink support not available.") try: os.symlink(os.path.dirname(original_filename), target_link, target_is_directory=True) except (OSError, TypeError, AttributeError): - pytest.skip('Symlink support not available.') + pytest.skip("Symlink support not available.") try: - target_filename_in_link = os.path.join(target_link, '_debugger_case2.py') + target_filename_in_link = os.path.join(target_link, "_debugger_case2.py") with case_setup_dap.test_file(target_filename_in_link if launch_through_link else original_filename) as writer: json_facade = JsonFacade(writer) @@ -5918,12 +6011,12 @@ def test_debugger_case_symlink(case_setup_dap, tmpdir, launch_through_link, brea # link or the real path. json_facade.write_set_breakpoints( writer.get_line_index_with_content("print('Start Call1')"), - filename=target_filename_in_link if breakpoints_through_link else original_filename + filename=target_filename_in_link if breakpoints_through_link else original_filename, ) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - path = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] + path = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] # Regardless of how it was hit, what's shown is what was launched. assert path == target_filename_in_link if launch_through_link else original_filename @@ -5937,23 +6030,25 @@ def test_debugger_case_symlink(case_setup_dap, tmpdir, launch_through_link, brea os.unlink(target_link) -@pytest.mark.skipif(not IS_LINUX, reason='Linux only test.') +@pytest.mark.skipif(not IS_LINUX, reason="Linux only test.") def test_debugger_case_sensitive(case_setup_dap, tmpdir): - path = os.path.abspath(str(tmpdir.join('Path1').join('PaTh2'))) + path = os.path.abspath(str(tmpdir.join("Path1").join("PaTh2"))) os.makedirs(path) - target = os.path.join(path, 'myFile.py') - with open(target, 'w') as stream: - stream.write(''' + target = os.path.join(path, "myFile.py") + with open(target, "w") as stream: + stream.write( + """ print('current file', __file__) # Break here print('TEST SUCEEDED') -''') +""" + ) assert not os.path.exists(target.lower()) assert os.path.exists(target) def get_environ(self): env = os.environ.copy() # Force to normalize by doing filename.lower(). - env['PYDEVD_FILENAME_NORMALIZATION'] = 'lower' + env["PYDEVD_FILENAME_NORMALIZATION"] = "lower" return env # Sometimes we end up with a different return code on Linux when interrupting (even @@ -5961,11 +6056,11 @@ def get_environ(self): with case_setup_dap.test_file(target, get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - json_facade.write_set_breakpoints(writer.get_line_index_with_content('Break here')) + json_facade.write_set_breakpoints(writer.get_line_index_with_content("Break here")) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - path = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] + path = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] assert path == target json_facade.write_continue() @@ -5974,14 +6069,15 @@ def get_environ(self): @pytest.mark.skipif( - not IS_WINDOWS or - not IS_PY36_OR_GREATER or - not IS_CPYTHON or - not TEST_CYTHON or - TODO_PY311, # Requires frame-eval mode (still not available for Python 3.11). - reason='Windows only test and only Python 3.6 onwards.') + not IS_WINDOWS + or not IS_PY36_OR_GREATER + or not IS_CPYTHON + or not TEST_CYTHON + or IS_PY311, # Requires frame-eval mode (not available for Python 3.11). + # Note that this works in Python 3.12 as it uses sys.monitoring. + reason="Windows only test and only Python 3.6 onwards.", +) def test_native_threads(case_setup_dap, pyfile): - @pyfile def case_native_thread(): from ctypes import windll, WINFUNCTYPE, c_uint32, c_void_p, c_size_t @@ -5998,14 +6094,14 @@ def method(_): windll.kernel32.CreateThread(None, c_size_t(0), method, None, c_uint32(0), None) while not entered_thread[0]: - time.sleep(.1) + time.sleep(0.1) - print('TEST SUCEEDED') + print("TEST SUCEEDED") with case_setup_dap.test_file(case_native_thread) as writer: json_facade = JsonFacade(writer) - line = writer.get_line_index_with_content('Break here') + line = writer.get_line_index_with_content("Break here") json_facade.write_launch(justMyCode=False) json_facade.write_set_breakpoints(line) json_facade.write_make_initial_run() @@ -6017,34 +6113,33 @@ def method(_): def test_code_reload(case_setup_dap, pyfile): - @pyfile def mod1(): import mod2 import time + finish = False for _ in range(50): finish = mod2.do_something() if finish: break - time.sleep(.1) # Break 1 + time.sleep(0.1) # Break 1 else: - raise AssertionError('It seems the reload was not done in the available amount of time.') + raise AssertionError("It seems the reload was not done in the available amount of time.") - print('TEST SUCEEDED') # Break 2 + print("TEST SUCEEDED") # Break 2 @pyfile def mod2(): - def do_something(): return False with case_setup_dap.test_file(mod1) as writer: json_facade = JsonFacade(writer) - line1 = writer.get_line_index_with_content('Break 1') - line2 = writer.get_line_index_with_content('Break 2') - json_facade.write_launch(justMyCode=False, autoReload={'pollingInterval': 0, 'enable': True}) + line1 = writer.get_line_index_with_content("Break 1") + line2 = writer.get_line_index_with_content("Break 2") + json_facade.write_launch(justMyCode=False, autoReload={"pollingInterval": 0, "enable": True}) json_facade.write_set_breakpoints([line1, line2]) json_facade.write_make_initial_run() @@ -6052,11 +6147,13 @@ def do_something(): json_facade.wait_for_thread_stopped(line=line1) json_facade.write_set_breakpoints(line2) - with open(mod2, 'w') as stream: - stream.write(''' + with open(mod2, "w") as stream: + stream.write( + """ def do_something(): return True -''') +""" + ) json_facade.write_continue() json_facade.wait_for_thread_stopped(line=line2) @@ -6065,12 +6162,11 @@ def do_something(): writer.finished_ok = True -@pytest.mark.skipif(TODO_PY311, reason='Needs bytecode support in Python 3.11') def test_step_into_target_basic(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_smart_step_into.py') as writer: + with case_setup_dap.test_file("_debugger_case_smart_step_into.py") as writer: json_facade = JsonFacade(writer) - bp = writer.get_line_index_with_content('break here') + bp = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints([bp]) json_facade.write_make_initial_run() @@ -6079,23 +6175,27 @@ def test_step_into_target_basic(case_setup_dap): # : :type step_in_targets: List[StepInTarget] step_in_targets = json_facade.get_step_in_targets(hit.frame_id) - label_to_id = dict((target['label'], target['id']) for target in step_in_targets) - assert set(label_to_id.keys()) == {'bar', 'foo', 'call_outer'} - json_facade.write_step_in(hit.thread_id, target_id=label_to_id['foo']) + label_to_id = dict((target["label"], target["id"]) for target in step_in_targets) + if IS_PY311_OR_GREATER: + assert set(label_to_id.keys()) == {"call_outer(foo(bar()))", "foo(bar())", "bar()"} + target = "foo(bar())" + else: + assert set(label_to_id.keys()) == {"bar", "foo", "call_outer"} + target = "foo" + json_facade.write_step_in(hit.thread_id, target_id=label_to_id[target]) - on_foo_mark_line = writer.get_line_index_with_content('on foo mark') - hit = json_facade.wait_for_thread_stopped(reason='step', line=on_foo_mark_line) + on_foo_mark_line = writer.get_line_index_with_content("on foo mark") + hit = json_facade.wait_for_thread_stopped(reason="step", line=on_foo_mark_line) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(TODO_PY311, reason='Needs bytecode support in Python 3.11') def test_step_into_target_multiple(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_smart_step_into2.py') as writer: + with case_setup_dap.test_file("_debugger_case_smart_step_into2.py") as writer: json_facade = JsonFacade(writer) - bp = writer.get_line_index_with_content('break here') + bp = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints([bp]) json_facade.write_make_initial_run() @@ -6104,23 +6204,27 @@ def test_step_into_target_multiple(case_setup_dap): # : :type step_in_targets: List[StepInTarget] step_in_targets = json_facade.get_step_in_targets(hit.frame_id) - label_to_id = dict((target['label'], target['id']) for target in step_in_targets) - assert set(label_to_id.keys()) == {'foo', 'foo (call 2)', 'foo (call 3)', 'foo (call 4)'} - json_facade.write_step_in(hit.thread_id, target_id=label_to_id['foo (call 2)']) + label_to_id = dict((target["label"], target["id"]) for target in step_in_targets) + if IS_PY311_OR_GREATER: + assert set(label_to_id.keys()) == {"foo(foo(foo(foo(1))))", "foo(foo(foo(1)))", "foo(foo(1))", "foo(1)"} + target = "foo(foo(1))" + else: + assert set(label_to_id.keys()) == {"foo", "foo (call 2)", "foo (call 3)", "foo (call 4)"} + target = "foo (call 2)" + json_facade.write_step_in(hit.thread_id, target_id=label_to_id[target]) - on_foo_mark_line = writer.get_line_index_with_content('on foo mark') - hit = json_facade.wait_for_thread_stopped(reason='step', line=on_foo_mark_line) + on_foo_mark_line = writer.get_line_index_with_content("on foo mark") + hit = json_facade.wait_for_thread_stopped(reason="step", line=on_foo_mark_line) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(TODO_PY311, reason='Needs bytecode support in Python 3.11') def test_step_into_target_genexpr(case_setup_dap): - with case_setup_dap.test_file('_debugger_case_smart_step_into3.py') as writer: + with case_setup_dap.test_file("_debugger_case_smart_step_into3.py") as writer: json_facade = JsonFacade(writer) - bp = writer.get_line_index_with_content('break here') + bp = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints([bp]) json_facade.write_make_initial_run() @@ -6129,53 +6233,53 @@ def test_step_into_target_genexpr(case_setup_dap): # : :type step_in_targets: List[StepInTarget] step_in_targets = json_facade.get_step_in_targets(hit.frame_id) - label_to_id = dict((target['label'], target['id']) for target in step_in_targets) - json_facade.write_step_in(hit.thread_id, target_id=label_to_id['foo']) + label_to_id = dict((target["label"], target["id"]) for target in step_in_targets) + if IS_PY311_OR_GREATER: + assert set(label_to_id) == {"foo(arg)", "list(gen)"} + json_facade.write_step_in(hit.thread_id, target_id=label_to_id["foo(arg)"]) + else: + assert set(label_to_id) == {"foo", "list"} + json_facade.write_step_in(hit.thread_id, target_id=label_to_id["foo"]) - on_foo_mark_line = writer.get_line_index_with_content('on foo mark') - hit = json_facade.wait_for_thread_stopped(reason='step', line=on_foo_mark_line) + on_foo_mark_line = writer.get_line_index_with_content("on foo mark") + hit = json_facade.wait_for_thread_stopped(reason="step", line=on_foo_mark_line) json_facade.write_continue() writer.finished_ok = True def test_function_breakpoints_basic(case_setup_dap, pyfile): - @pyfile def module(): - def do_something(): # break here - print('TEST SUCEEDED') + print("TEST SUCEEDED") - if __name__ == '__main__': + if __name__ == "__main__": do_something() with case_setup_dap.test_file(module) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - bp = writer.get_line_index_with_content('break here') - json_facade.write_set_function_breakpoints(['do_something']) + bp = writer.get_line_index_with_content("break here") + json_facade.write_set_function_breakpoints(["do_something"]) json_facade.write_make_initial_run() - json_facade.wait_for_thread_stopped( - 'function breakpoint', line=bp, preserve_focus_hint=False) + json_facade.wait_for_thread_stopped("function breakpoint", line=bp, preserve_focus_hint=False) json_facade.write_continue() writer.finished_ok = True -@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason='Python 3.6 onwards required for test.') +@pytest.mark.skipif(not IS_PY36_OR_GREATER, reason="Python 3.6 onwards required for test.") def test_function_breakpoints_async(case_setup_dap): - - with case_setup_dap.test_file('_debugger_case_stop_async_iteration.py') as writer: + with case_setup_dap.test_file("_debugger_case_stop_async_iteration.py") as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - bp = writer.get_line_index_with_content('async def gen():') - json_facade.write_set_function_breakpoints(['gen']) + bp = writer.get_line_index_with_content("async def gen():") + json_facade.write_set_function_breakpoints(["gen"]) json_facade.write_make_initial_run() - json_facade.wait_for_thread_stopped( - 'function breakpoint', line=bp, preserve_focus_hint=False) + json_facade.wait_for_thread_stopped("function breakpoint", line=bp, preserve_focus_hint=False) json_facade.write_continue() writer.finished_ok = True @@ -6187,9 +6291,8 @@ def test_function_breakpoints_async(case_setup_dap): pandas = None -@pytest.mark.skipif(pandas is None, reason='Pandas not installed.') +@pytest.mark.skipif(pandas is None, reason="Pandas not installed.") def test_pandas(case_setup_dap, pyfile): - @pyfile def pandas_mod(): import pandas as pd @@ -6199,21 +6302,21 @@ def pandas_mod(): cols = 50 # i.e.: even with these setting our repr will print at most 300 lines/cols by default. - pd.set_option('display.max_columns', None) - pd.set_option('display.max_rows', None) + pd.set_option("display.max_columns", None) + pd.set_option("display.max_rows", None) items = rows * cols - df = pd.DataFrame(np.arange(items).reshape(rows, cols)).applymap(lambda x: 'Test String') + df = pd.DataFrame(np.arange(items).reshape(rows, cols)).map(lambda x: "Test String") series = df._series[0] styler = df.style - print('TEST SUCEEDED') # Break here + print("TEST SUCEEDED") # Break here with case_setup_dap.test_file(pandas_mod) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - bp = writer.get_line_index_with_content('Break here') + bp = writer.get_line_index_with_content("Break here") json_facade.write_set_breakpoints([bp]) json_facade.write_make_initial_run() @@ -6223,41 +6326,41 @@ def pandas_mod(): name_to_var = json_facade.get_locals_name_to_var(json_hit.frame_id) # Check the custom repr(DataFrame) - assert name_to_var['df'].value.count('\n') <= 63 - assert '...' in name_to_var['df'].value + assert name_to_var["df"].value.count("\n") <= 63 + assert "..." in name_to_var["df"].value - evaluate_response = json_facade.evaluate('df', json_hit.frame_id, context='repl') + evaluate_response = json_facade.evaluate("df", json_hit.frame_id, context="repl") evaluate_response_body = evaluate_response.body.to_dict() - assert '...' not in evaluate_response_body['result'] - assert evaluate_response_body['result'].count('\n') > 4999 + assert "..." not in evaluate_response_body["result"] + assert evaluate_response_body["result"].count("\n") > 4999 # Check the custom repr(Series) - assert name_to_var['series'].value.count('\n') <= 60 - assert '...' in name_to_var['series'].value + assert name_to_var["series"].value.count("\n") <= 60 + assert "..." in name_to_var["series"].value # Check custom listing (DataFrame) - df_variables_response = json_facade.get_variables_response(name_to_var['df'].variablesReference) + df_variables_response = json_facade.get_variables_response(name_to_var["df"].variablesReference) for v in df_variables_response.body.variables: - if v['name'] == 'T': - assert v['value'] == "''" + if v["name"] == "T": + assert v["value"] == "''" break else: raise AssertionError('Did not find variable "T".') # Check custom listing (Series) - df_variables_response = json_facade.get_variables_response(name_to_var['series'].variablesReference) + df_variables_response = json_facade.get_variables_response(name_to_var["series"].variablesReference) for v in df_variables_response.body.variables: - if v['name'] == 'T': - assert v['value'] == "''" + if v["name"] == "T": + assert v["value"] == "''" break else: raise AssertionError('Did not find variable "T".') # Check custom listing (Styler) - df_variables_response = json_facade.get_variables_response(name_to_var['styler'].variablesReference) + df_variables_response = json_facade.get_variables_response(name_to_var["styler"].variablesReference) for v in df_variables_response.body.variables: - if v['name'] == 'data': - assert v['value'] == "''" + if v["name"] == "data": + assert v["value"] == "''" break else: raise AssertionError('Did not find variable "data".') @@ -6266,28 +6369,30 @@ def pandas_mod(): writer.finished_ok = True -@pytest.mark.skipif(not IS_PY38_OR_GREATER, reason='Python 3.8 onwards required for test.') +@pytest.mark.skipif(not IS_PY38_OR_GREATER, reason="Python 3.8 onwards required for test.") def test_same_lineno_and_filename(case_setup_dap, pyfile): - @pyfile def target(): - def some_code(): - print('1') # Break here + print("1") # Break here - code_obj = compile(''' + code_obj = compile( + """ func() - ''', __file__, 'exec') + """, + __file__, + "exec", + ) code_obj = code_obj.replace(co_name=some_code.__code__.co_name, co_firstlineno=some_code.__code__.co_firstlineno) - exec(code_obj, {'func': some_code}) + exec(code_obj, {"func": some_code}) - print('TEST SUCEEDED') + print("TEST SUCEEDED") with case_setup_dap.test_file(target) as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here')) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here")) json_facade.write_launch(justMyCode=False) json_facade.write_make_initial_run() @@ -6303,15 +6408,15 @@ def some_code(): writer.finished_ok = True -@pytest.mark.skipif(sys.platform == 'win32', reason='Windows does not have execvp.') +@pytest.mark.skipif(sys.platform == "win32", reason="Windows does not have execvp.") def test_replace_process(case_setup_multiprocessing_dap): import threading from tests_python.debugger_unittest import AbstractWriterThread from _pydevd_bundle._debug_adapter.pydevd_schema import ExitedEvent with case_setup_multiprocessing_dap.test_file( - '_debugger_case_replace_process.py', - ) as writer: + "_debugger_case_replace_process.py", + ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() @@ -6322,20 +6427,19 @@ def test_replace_process(case_setup_multiprocessing_dap): secondary_finished_ok = [False] class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + server_socket.listen(1) self.server_socket = server_socket new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -6343,7 +6447,11 @@ def run(self): writer2.sock = new_sock json_facade2 = JsonFacade(writer2) - json_facade2.write_set_breakpoints([break1_line, ]) + json_facade2.write_set_breakpoints( + [ + break1_line, + ] + ) json_facade2.write_make_initial_run() json_facade2.wait_for_thread_stopped() @@ -6352,36 +6460,38 @@ def run(self): secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() exited_event = json_facade.wait_for_json_message(ExitedEvent) - assert exited_event.body.kwargs['pydevdReason'] == "processReplaced" + assert exited_event.body.kwargs["pydevdReason"] == "processReplaced" secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") assert secondary_finished_ok[0] writer.finished_ok = True -@pytest.mark.parametrize('resolve_symlinks', [True, False]) +@pytest.mark.parametrize("resolve_symlinks", [True, False]) def test_use_real_path_and_not_links(case_setup_dap, tmpdir, resolve_symlinks): - dira = tmpdir.join('dira') + dira = tmpdir.join("dira") dira.mkdir() - dirb = tmpdir.join('dirb') + dirb = tmpdir.join("dirb") dirb.mkdir() - original_file = dira.join('test.py') - original_file.write(''' + original_file = dira.join("test.py") + original_file.write( + """ print('p1') # Break here print('p2') print('TEST SUCEEDED') -''') +""" + ) - symlinked_file = dirb.join('testit.py') + symlinked_file = dirb.join("testit.py") os.symlink(str(original_file), str(symlinked_file)) # I.e.: we're launching the symlinked file but we're actually @@ -6389,12 +6499,12 @@ def test_use_real_path_and_not_links(case_setup_dap, tmpdir, resolve_symlinks): with case_setup_dap.test_file(str(symlinked_file)) as writer: json_facade = JsonFacade(writer) - writer.write_add_breakpoint(writer.get_line_index_with_content('Break here'), filename=str(original_file)) + writer.write_add_breakpoint(writer.get_line_index_with_content("Break here"), filename=str(original_file)) json_facade.write_launch(justMyCode=False, resolveSymlinks=resolve_symlinks) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped() - filename = json_hit.stack_trace_response.body.stackFrames[0]['source']['path'] + filename = json_hit.stack_trace_response.body.stackFrames[0]["source"]["path"] if resolve_symlinks: assert filename == str(original_file) else: @@ -6406,6 +6516,7 @@ def test_use_real_path_and_not_links(case_setup_dap, tmpdir, resolve_symlinks): _TOP_LEVEL_AWAIT_AVAILABLE = False try: from ast import PyCF_ONLY_AST, PyCF_ALLOW_TOP_LEVEL_AWAIT + _TOP_LEVEL_AWAIT_AVAILABLE = True except ImportError: pass @@ -6413,34 +6524,33 @@ def test_use_real_path_and_not_links(case_setup_dap, tmpdir, resolve_symlinks): @pytest.mark.skipif(not _TOP_LEVEL_AWAIT_AVAILABLE, reason="Top-level await required.") def test_ipython_stepping_basic(case_setup_dap): - def get_environ(self): env = os.environ.copy() # Test setup - env["SCOPED_STEPPING_TARGET"] = '_debugger_case_scoped_stepping_target.py' + env["SCOPED_STEPPING_TARGET"] = "_debugger_case_scoped_stepping_target.py" # Actually setup the debugging env["PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING"] = "1" - env["PYDEVD_IPYTHON_CONTEXT"] = '_debugger_case_scoped_stepping.py, run_code, run_ast_nodes' + env["PYDEVD_IPYTHON_CONTEXT"] = "_debugger_case_scoped_stepping.py, run_code, run_ast_nodes" return env - with case_setup_dap.test_file('_debugger_case_scoped_stepping.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_scoped_stepping.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - target_file = debugger_unittest._get_debugger_test_file('_debugger_case_scoped_stepping_target.py') - break_line = writer.get_line_index_with_content('a = 1', filename=target_file) + target_file = debugger_unittest._get_debugger_test_file("_debugger_case_scoped_stepping_target.py") + break_line = writer.get_line_index_with_content("a = 1", filename=target_file) assert break_line == 1 json_facade.write_set_breakpoints(break_line, filename=target_file) json_facade.write_make_initial_run() - json_hit = json_facade.wait_for_thread_stopped(line=break_line, file='_debugger_case_scoped_stepping_target.py') + json_hit = json_facade.wait_for_thread_stopped(line=break_line, file="_debugger_case_scoped_stepping_target.py") json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=break_line + 1, file='_debugger_case_scoped_stepping_target.py') + json_hit = json_facade.wait_for_thread_stopped("step", line=break_line + 1, file="_debugger_case_scoped_stepping_target.py") json_facade.write_step_next(json_hit.thread_id) - json_hit = json_facade.wait_for_thread_stopped('step', line=break_line + 2, file='_debugger_case_scoped_stepping_target.py') + json_hit = json_facade.wait_for_thread_stopped("step", line=break_line + 2, file="_debugger_case_scoped_stepping_target.py") json_facade.write_continue() writer.finished_ok = True @@ -6448,39 +6558,38 @@ def get_environ(self): @pytest.mark.skipif(not _TOP_LEVEL_AWAIT_AVAILABLE, reason="Top-level await required.") def test_ipython_stepping_step_in(case_setup_dap): - def get_environ(self): env = os.environ.copy() # Test setup - env["SCOPED_STEPPING_TARGET"] = '_debugger_case_scoped_stepping_target2.py' + env["SCOPED_STEPPING_TARGET"] = "_debugger_case_scoped_stepping_target2.py" # Actually setup the debugging env["PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING"] = "1" - env["PYDEVD_IPYTHON_CONTEXT"] = '_debugger_case_scoped_stepping.py, run_code, run_ast_nodes' + env["PYDEVD_IPYTHON_CONTEXT"] = "_debugger_case_scoped_stepping.py, run_code, run_ast_nodes" return env - with case_setup_dap.test_file('_debugger_case_scoped_stepping.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_scoped_stepping.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=False) - target_file = debugger_unittest._get_debugger_test_file('_debugger_case_scoped_stepping_target2.py') - break_line = writer.get_line_index_with_content('break here', filename=target_file) + target_file = debugger_unittest._get_debugger_test_file("_debugger_case_scoped_stepping_target2.py") + break_line = writer.get_line_index_with_content("break here", filename=target_file) json_facade.write_set_breakpoints(break_line, filename=target_file) json_facade.write_make_initial_run() - json_hit = json_facade.wait_for_thread_stopped(line=break_line, file='_debugger_case_scoped_stepping_target2.py') + json_hit = json_facade.wait_for_thread_stopped(line=break_line, file="_debugger_case_scoped_stepping_target2.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('b = 2', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_target2.py') + stop_at = writer.get_line_index_with_content("b = 2", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_target2.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('method() # break here', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_target2.py') + stop_at = writer.get_line_index_with_content("method() # break here", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_target2.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('c = 3', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_target2.py') + stop_at = writer.get_line_index_with_content("c = 3", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_target2.py") json_facade.write_continue() writer.finished_ok = True @@ -6488,39 +6597,38 @@ def get_environ(self): @pytest.mark.skipif(not _TOP_LEVEL_AWAIT_AVAILABLE, reason="Top-level await required.") def test_ipython_stepping_step_in_justmycode(case_setup_dap): - def get_environ(self): env = os.environ.copy() # Test setup - env["SCOPED_STEPPING_TARGET"] = '_debugger_case_scoped_stepping_print.py' + env["SCOPED_STEPPING_TARGET"] = "_debugger_case_scoped_stepping_print.py" # Actually setup the debugging env["PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING"] = "1" - env["PYDEVD_IPYTHON_CONTEXT"] = '_debugger_case_scoped_stepping.py, run_code, run_ast_nodes' + env["PYDEVD_IPYTHON_CONTEXT"] = "_debugger_case_scoped_stepping.py, run_code, run_ast_nodes" return env - with case_setup_dap.test_file('_debugger_case_scoped_stepping.py', get_environ=get_environ) as writer: + with case_setup_dap.test_file("_debugger_case_scoped_stepping.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch(justMyCode=True) - target_file = debugger_unittest._get_debugger_test_file('_debugger_case_scoped_stepping_print.py') - break_line = writer.get_line_index_with_content('break here', filename=target_file) + target_file = debugger_unittest._get_debugger_test_file("_debugger_case_scoped_stepping_print.py") + break_line = writer.get_line_index_with_content("break here", filename=target_file) json_facade.write_set_breakpoints(break_line, filename=target_file) json_facade.write_make_initial_run() - json_hit = json_facade.wait_for_thread_stopped(line=break_line, file='_debugger_case_scoped_stepping_print.py') + json_hit = json_facade.wait_for_thread_stopped(line=break_line, file="_debugger_case_scoped_stepping_print.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('pause 1', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_print.py') + stop_at = writer.get_line_index_with_content("pause 1", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_print.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('pause 2', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_print.py') + stop_at = writer.get_line_index_with_content("pause 2", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_print.py") json_facade.write_step_in(json_hit.thread_id) - stop_at = writer.get_line_index_with_content('pause 3', filename=target_file) - json_hit = json_facade.wait_for_thread_stopped('step', line=stop_at, file='_debugger_case_scoped_stepping_print.py') + stop_at = writer.get_line_index_with_content("pause 3", filename=target_file) + json_hit = json_facade.wait_for_thread_stopped("step", line=stop_at, file="_debugger_case_scoped_stepping_print.py") json_facade.write_continue() writer.finished_ok = True @@ -6530,17 +6638,14 @@ def test_logging_api(case_setup_multiprocessing_dap, tmpdir): import threading from tests_python.debugger_unittest import AbstractWriterThread - log_file = str(tmpdir.join('pydevd_in_test_logging.log')) + log_file = str(tmpdir.join("pydevd_in_test_logging.log")) def get_environ(self): env = os.environ.copy() env["TARGET_LOG_FILE"] = log_file return env - with case_setup_multiprocessing_dap.test_file( - '_debugger_case_logging.py', - get_environ=get_environ - ) as writer: + with case_setup_multiprocessing_dap.test_file("_debugger_case_logging.py", get_environ=get_environ) as writer: json_facade = JsonFacade(writer) json_facade.write_launch() @@ -6551,20 +6656,19 @@ def get_environ(self): secondary_finished_ok = [False] class SecondaryProcessWriterThread(AbstractWriterThread): - TEST_FILE = writer.get_main_filename() _sequence = -1 class SecondaryProcessThreadCommunication(threading.Thread): - def run(self): from tests_python.debugger_unittest import ReaderThread + server_socket.listen(1) self.server_socket = server_socket new_sock, addr = server_socket.accept() reader_thread = ReaderThread(new_sock) - reader_thread.name = ' *** Multiprocess Reader Thread' + reader_thread.name = " *** Multiprocess Reader Thread" reader_thread.start() writer2 = SecondaryProcessWriterThread() @@ -6572,7 +6676,11 @@ def run(self): writer2.sock = new_sock json_facade2 = JsonFacade(writer2) - json_facade2.write_set_breakpoints([break1_line, ]) + json_facade2.write_set_breakpoints( + [ + break1_line, + ] + ) json_facade2.write_make_initial_run() json_facade2.wait_for_thread_stopped() @@ -6581,36 +6689,39 @@ def run(self): secondary_process_thread_communication = SecondaryProcessThreadCommunication() secondary_process_thread_communication.start() - time.sleep(.1) + time.sleep(0.1) json_facade.write_make_initial_run() secondary_process_thread_communication.join(10) if secondary_process_thread_communication.is_alive(): - raise AssertionError('The SecondaryProcessThreadCommunication did not finish') + raise AssertionError("The SecondaryProcessThreadCommunication did not finish") assert secondary_finished_ok[0] writer.finished_ok = True -@pytest.mark.parametrize('soft_kill', [False, True]) +@pytest.mark.parametrize("soft_kill", [False, True]) def test_soft_terminate(case_setup_dap, pyfile, soft_kill): + if soft_kill and PYDEVD_USE_SYS_MONITORING: + pytest.skip("Right now when using sys.monitoring exceptions are be handled in callbacks.") @pyfile def target(): import time + try: while True: - time.sleep(.2) # break here + time.sleep(0.2) # break here except KeyboardInterrupt: # i.e.: The test succeeds if a keyboard interrupt is received. - print('TEST SUCEEDED!') + print("TEST SUCEEDED!") raise def check_test_suceeded_msg(self, stdout, stderr): if soft_kill: - return 'TEST SUCEEDED' in ''.join(stdout) + return "TEST SUCEEDED" in "".join(stdout) else: - return 'TEST SUCEEDED' not in ''.join(stdout) + return "TEST SUCEEDED" not in "".join(stdout) def additional_output_checks(writer, stdout, stderr): if soft_kill: @@ -6619,18 +6730,15 @@ def additional_output_checks(writer, stdout, stderr): assert not stderr with case_setup_dap.test_file( - target, - EXPECTED_RETURNCODE='any', - check_test_suceeded_msg=check_test_suceeded_msg, - additional_output_checks=additional_output_checks, - ) as writer: + target, + EXPECTED_RETURNCODE="any", + check_test_suceeded_msg=check_test_suceeded_msg, + additional_output_checks=additional_output_checks, + ) as writer: json_facade = JsonFacade(writer) - json_facade.write_launch( - onTerminate="KeyboardInterrupt" if soft_kill else "kill", - justMyCode=False - ) + json_facade.write_launch(onTerminate="KeyboardInterrupt" if soft_kill else "kill", justMyCode=False) - break_line = writer.get_line_index_with_content('break here') + break_line = writer.get_line_index_with_content("break here") json_facade.write_set_breakpoints(break_line) json_facade.write_make_initial_run() json_hit = json_facade.wait_for_thread_stopped(line=break_line) @@ -6643,11 +6751,11 @@ def additional_output_checks(writer, stdout, stderr): if soft_kill: json_facade.wait_for_json_message( - OutputEvent, lambda output_event: 'raised from within the callback set' in output_event.body.output) + OutputEvent, lambda output_event: "raised from within the callback set" in output_event.body.output + ) writer.finished_ok = True -if __name__ == '__main__': - pytest.main(['-k', 'test_replace_process', '-s']) - +if __name__ == "__main__": + pytest.main(["-k", "test_replace_process", "-s"]) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_dump_threads.py b/src/debugpy/_vendored/pydevd/tests_python/test_dump_threads.py index b619f6198..bd4a855d9 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_dump_threads.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_dump_threads.py @@ -1,8 +1,9 @@ def test_dump_threads(): import pydevd from io import StringIO + stream = StringIO() pydevd.dump_threads(stream=stream) contents = stream.getvalue() - assert 'Thread MainThread (daemon: False, pydevd thread: False)' in contents - assert 'test_dump_threads' in contents + assert "Thread MainThread (daemon: False, pydevd thread: False)" in contents + assert "test_dump_threads" in contents diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_evaluate_expression.py b/src/debugpy/_vendored/pydevd/tests_python/test_evaluate_expression.py index 123fb6394..e8cd62ec2 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_evaluate_expression.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_evaluate_expression.py @@ -21,6 +21,7 @@ def disable_critical_log(): # We want to hide the logging related to _evaluate_with_timeouts not receiving the py_db. from _pydev_bundle.pydev_log import log_context import io + stream = io.StringIO() with log_context(0, stream): yield @@ -30,45 +31,45 @@ def test_evaluate_expression_basic(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - evaluate_expression(None, frame, 'some_var = 1', is_exec=True) + evaluate_expression(None, frame, "some_var = 1", is_exec=True) - assert frame.f_locals['some_var'] == 1 + assert frame.f_locals["some_var"] == 1 check(next(iter(obtain_frame()))) - assert 'some_var' not in sys._getframe().f_globals + assert "some_var" not in sys._getframe().f_globals # as locals == globals, this will also change the current globals check(global_frame) - assert 'some_var' in sys._getframe().f_globals - del sys._getframe().f_globals['some_var'] - assert 'some_var' not in sys._getframe().f_globals + assert "some_var" in sys._getframe().f_globals + del sys._getframe().f_globals["some_var"] + assert "some_var" not in sys._getframe().f_globals def test_evaluate_expression_1(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = ''' + eval_txt = """ container = ["abc","efg"] results = [] for s in container: result = [s[i] for i in range(3)] results.append(result) -''' +""" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert frame.f_locals['results'] == [['a', 'b', 'c'], ['e', 'f', 'g']] - assert frame.f_locals['s'] == "efg" + assert frame.f_locals["results"] == [["a", "b", "c"], ["e", "f", "g"]] + assert frame.f_locals["s"] == "efg" check(next(iter(obtain_frame()))) - for varname in ['container', 'results', 's']: + for varname in ["container", "results", "s"]: assert varname not in sys._getframe().f_globals check(global_frame) - for varname in ['container', 'results', 's']: + for varname in ["container", "results", "s"]: assert varname in sys._getframe().f_globals - for varname in ['container', 'results', 's']: + for varname in ["container", "results", "s"]: del sys._getframe().f_globals[varname] @@ -76,7 +77,7 @@ def test_evaluate_expression_2(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = 'all((x in (BAR, FOO) for x in SOME_LST))' + eval_txt = "all((x in (BAR, FOO) for x in SOME_LST))" assert evaluate_expression(None, frame, eval_txt, is_exec=False) check(next(iter(obtain_frame()))) @@ -90,60 +91,60 @@ def test_evaluate_expression_3(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = '''11 if (some_var := 22) else 33''' + eval_txt = """11 if (some_var := 22) else 33""" assert evaluate_expression(None, frame, eval_txt, is_exec=False) == 11 check(next(iter(obtain_frame()))) - assert 'some_var' not in sys._getframe().f_globals + assert "some_var" not in sys._getframe().f_globals # as locals == globals, this will also change the current globals check(global_frame) - assert 'some_var' in sys._getframe().f_globals - del sys._getframe().f_globals['some_var'] - assert 'some_var' not in sys._getframe().f_globals + assert "some_var" in sys._getframe().f_globals + del sys._getframe().f_globals["some_var"] + assert "some_var" not in sys._getframe().f_globals def test_evaluate_expression_4(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = '''import email;email.foo_value''' + eval_txt = """import email;email.foo_value""" with pytest.raises(AttributeError): evaluate_expression(None, frame, eval_txt, is_exec=True) - assert 'email' in frame.f_locals + assert "email" in frame.f_locals check(next(iter(obtain_frame()))) - assert 'email' not in sys._getframe().f_globals + assert "email" not in sys._getframe().f_globals # as locals == globals, this will also change the current globals check(global_frame) - assert 'email' in sys._getframe().f_globals - del sys._getframe().f_globals['email'] - assert 'email' not in sys._getframe().f_globals + assert "email" in sys._getframe().f_globals + del sys._getframe().f_globals["email"] + assert "email" not in sys._getframe().f_globals def test_evaluate_expression_access_globals(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = '''globals()['global_variable'] = 22''' + eval_txt = """globals()['global_variable'] = 22""" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert 'global_variable' not in frame.f_locals - assert 'global_variable' in frame.f_globals + assert "global_variable" not in frame.f_locals + assert "global_variable" in frame.f_globals check(next(iter(obtain_frame()))) - assert 'global_variable' in sys._getframe().f_globals - assert 'global_variable' not in sys._getframe().f_locals + assert "global_variable" in sys._getframe().f_globals + assert "global_variable" not in sys._getframe().f_locals def test_evaluate_expression_create_none(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = 'x = None' + eval_txt = "x = None" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert 'x' in frame.f_locals - assert 'x' not in frame.f_globals + assert "x" in frame.f_locals + assert "x" not in frame.f_globals check(next(iter(obtain_frame()))) @@ -152,13 +153,13 @@ def test_evaluate_expression_delete_var(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = 'x = 22' + eval_txt = "x = 22" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert 'x' in frame.f_locals + assert "x" in frame.f_locals - eval_txt = 'del x' + eval_txt = "del x" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert 'x' not in frame.f_locals + assert "x" not in frame.f_locals check(next(iter(obtain_frame()))) @@ -167,16 +168,15 @@ def test_evaluate_expression_5(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression def check(frame): - eval_txt = 'A, B = 5, 6' + eval_txt = "A, B = 5, 6" evaluate_expression(None, frame, eval_txt, is_exec=True) - assert frame.f_locals['A'] == 5 - assert frame.f_locals['B'] == 6 + assert frame.f_locals["A"] == 5 + assert frame.f_locals["B"] == 6 check(next(iter(obtain_frame()))) class _DummyPyDB(object): - def __init__(self): self.created_pydb_daemon_threads = {} self.timeout_tracker = NULL @@ -185,12 +185,13 @@ def __init__(self): try: from ast import PyCF_ALLOW_TOP_LEVEL_AWAIT # @UnusedImport + CAN_EVALUATE_TOP_LEVEL_ASYNC = True except: CAN_EVALUATE_TOP_LEVEL_ASYNC = False -@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async evaluation.') +@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async evaluation.") def test_evaluate_expression_async_exec(disable_critical_log): py_db = _DummyPyDB() @@ -199,18 +200,20 @@ async def async_call(a): async def main(): from _pydevd_bundle.pydevd_vars import evaluate_expression + a = 10 assert async_call is not None # Make sure it's in the locals. frame = sys._getframe() - eval_txt = 'y = await async_call(a)' + eval_txt = "y = await async_call(a)" evaluate_expression(py_db, frame, eval_txt, is_exec=True) - assert frame.f_locals['y'] == a + assert frame.f_locals["y"] == a import asyncio + asyncio.run(main()) -@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async evaluation.') +@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async evaluation.") def test_evaluate_expression_async_exec_as_eval(disable_critical_log): py_db = _DummyPyDB() @@ -219,10 +222,12 @@ async def async_call(a): async def main(): from _pydevd_bundle.pydevd_vars import evaluate_expression + assert async_call is not None # Make sure it's in the locals. frame = sys._getframe() - eval_txt = 'await async_call(10)' + eval_txt = "await async_call(10)" from io import StringIO + _original_stdout = sys.stdout try: stringio = sys.stdout = StringIO() @@ -231,34 +236,37 @@ async def main(): sys.stdout = _original_stdout # I.e.: Check that we printed the value obtained in the exec. - assert '10\n' in stringio.getvalue() + assert "10\n" in stringio.getvalue() import asyncio + asyncio.run(main()) -@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async evaluation.') +@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async evaluation.") def test_evaluate_expression_async_exec_error(disable_critical_log): py_db = _DummyPyDB() async def async_call(a): - raise RuntimeError('foobar') + raise RuntimeError("foobar") async def main(): from _pydevd_bundle.pydevd_vars import evaluate_expression + assert async_call is not None # Make sure it's in the locals. frame = sys._getframe() - eval_txt = 'y = await async_call(10)' + eval_txt = "y = await async_call(10)" with pytest.raises(RuntimeError) as e: evaluate_expression(py_db, frame, eval_txt, is_exec=True) - assert 'foobar' in str(e) - assert 'y' not in frame.f_locals + assert "foobar" in str(e) + assert "y" not in frame.f_locals import asyncio + asyncio.run(main()) -@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async evaluation.') +@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async evaluation.") def test_evaluate_expression_async_eval(disable_critical_log): py_db = _DummyPyDB() @@ -267,37 +275,41 @@ async def async_call(a): async def main(): from _pydevd_bundle.pydevd_vars import evaluate_expression + a = 10 assert async_call is not None # Make sure it's in the locals. frame = sys._getframe() - eval_txt = 'await async_call(a)' + eval_txt = "await async_call(a)" v = evaluate_expression(py_db, frame, eval_txt, is_exec=False) if isinstance(v, ExceptionOnEvaluate): raise v.result.with_traceback(v.tb) assert v == a import asyncio + asyncio.run(main()) -@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason='Requires top-level async evaluation.') +@pytest.mark.skipif(not CAN_EVALUATE_TOP_LEVEL_ASYNC, reason="Requires top-level async evaluation.") def test_evaluate_expression_async_eval_error(disable_critical_log): py_db = _DummyPyDB() async def async_call(a): - raise RuntimeError('foobar') + raise RuntimeError("foobar") async def main(): from _pydevd_bundle.pydevd_vars import evaluate_expression + a = 10 assert async_call is not None # Make sure it's in the locals. frame = sys._getframe() - eval_txt = 'await async_call(a)' + eval_txt = "await async_call(a)" v = evaluate_expression(py_db, frame, eval_txt, is_exec=False) assert isinstance(v, ExceptionOnEvaluate) - assert 'foobar' in str(v.result) + assert "foobar" in str(v.result) import asyncio + asyncio.run(main()) @@ -305,7 +317,6 @@ def test_evaluate_expression_name_mangling(disable_critical_log): from _pydevd_bundle.pydevd_vars import evaluate_expression class SomeObj(object): - def __init__(self): self.__value = 10 self.frame = sys._getframe() @@ -313,7 +324,7 @@ def __init__(self): obj = SomeObj() frame = obj.frame - eval_txt = '''self.__value''' + eval_txt = """self.__value""" v = evaluate_expression(None, frame, eval_txt, is_exec=False) if isinstance(v, ExceptionOnEvaluate): raise v.result.with_traceback(v.tb) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_extract_token.py b/src/debugpy/_vendored/pydevd/tests_python/test_extract_token.py index 94ca7272e..e58692c44 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_extract_token.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_extract_token.py @@ -1,49 +1,47 @@ # coding: utf-8 from __future__ import unicode_literals -from _pydev_bundle._pydev_completer import (isidentifier, extract_token_and_qualifier, - TokenAndQualifier) +from _pydev_bundle._pydev_completer import isidentifier, extract_token_and_qualifier, TokenAndQualifier def test_isidentifier(): - assert isidentifier('abc') - assert not isidentifier('<') - assert not isidentifier('') - assert isidentifier('áéíóú') + assert isidentifier("abc") + assert not isidentifier("<") + assert not isidentifier("") + assert isidentifier("áéíóú") def test_extract_token_and_qualifier(): - - assert extract_token_and_qualifier('tok', 0, 0) == TokenAndQualifier('', '') - assert extract_token_and_qualifier('tok', 0, 1) == TokenAndQualifier('', 't') - assert extract_token_and_qualifier('tok', 0, 2) == TokenAndQualifier('', 'to') - assert extract_token_and_qualifier('tok', 0, 3) == TokenAndQualifier('', 'tok') - assert extract_token_and_qualifier('tok', 0, 4) == TokenAndQualifier('', 'tok') - - assert extract_token_and_qualifier('tok.qual', 0, 0) == TokenAndQualifier('', '') - assert extract_token_and_qualifier('tok.qual', 0, 1) == TokenAndQualifier('', 't') - assert extract_token_and_qualifier('tok.qual', 0, 2) == TokenAndQualifier('', 'to') - assert extract_token_and_qualifier('tok.qual', 0, 3) == TokenAndQualifier('', 'tok') - - assert extract_token_and_qualifier('tok.qual', 0, 4) == TokenAndQualifier('tok', '') - assert extract_token_and_qualifier('tok.qual', 0, 5) == TokenAndQualifier('tok', 'q') - assert extract_token_and_qualifier('tok.qual', 0, 6) == TokenAndQualifier('tok', 'qu') - assert extract_token_and_qualifier('tok.qual', 0, 7) == TokenAndQualifier('tok', 'qua') - assert extract_token_and_qualifier('tok.qual', 0, 8) == TokenAndQualifier('tok', 'qual') + assert extract_token_and_qualifier("tok", 0, 0) == TokenAndQualifier("", "") + assert extract_token_and_qualifier("tok", 0, 1) == TokenAndQualifier("", "t") + assert extract_token_and_qualifier("tok", 0, 2) == TokenAndQualifier("", "to") + assert extract_token_and_qualifier("tok", 0, 3) == TokenAndQualifier("", "tok") + assert extract_token_and_qualifier("tok", 0, 4) == TokenAndQualifier("", "tok") + + assert extract_token_and_qualifier("tok.qual", 0, 0) == TokenAndQualifier("", "") + assert extract_token_and_qualifier("tok.qual", 0, 1) == TokenAndQualifier("", "t") + assert extract_token_and_qualifier("tok.qual", 0, 2) == TokenAndQualifier("", "to") + assert extract_token_and_qualifier("tok.qual", 0, 3) == TokenAndQualifier("", "tok") + + assert extract_token_and_qualifier("tok.qual", 0, 4) == TokenAndQualifier("tok", "") + assert extract_token_and_qualifier("tok.qual", 0, 5) == TokenAndQualifier("tok", "q") + assert extract_token_and_qualifier("tok.qual", 0, 6) == TokenAndQualifier("tok", "qu") + assert extract_token_and_qualifier("tok.qual", 0, 7) == TokenAndQualifier("tok", "qua") + assert extract_token_and_qualifier("tok.qual", 0, 8) == TokenAndQualifier("tok", "qual") # out of range (column) - assert extract_token_and_qualifier('tok.qual.qual2', 0, 100) == TokenAndQualifier('tok.qual', 'qual2') + assert extract_token_and_qualifier("tok.qual.qual2", 0, 100) == TokenAndQualifier("tok.qual", "qual2") - assert extract_token_and_qualifier('t' + assert hit.name == "" writer.write_run_thread(hit.thread_id) @@ -217,18 +271,23 @@ def test_frame_eval_whitebox_test(case_setup_force_frame_eval): def test_frame_eval_change_breakpoints(case_setup_force_frame_eval): - with case_setup_force_frame_eval.test_file('_debugger_case_change_breaks.py') as writer: - break1_line = writer.get_line_index_with_content('break 1') - break2_line = writer.get_line_index_with_content('break 2') + with case_setup_force_frame_eval.test_file("_debugger_case_change_breaks.py") as writer: + break1_line = writer.get_line_index_with_content("break 1") + break2_line = writer.get_line_index_with_content("break 2") - break2_id = writer.write_add_breakpoint(break2_line, 'None') + break2_id = writer.write_add_breakpoint(break2_line, "None") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(line=break2_line) - assert hit.suspend_type == "frame_eval" + if IS_PY312_OR_GREATER: + assert hit.suspend_type == "sys_monitor" + elif IS_PY311_OR_GREATER: + assert hit.suspend_type == "trace" + else: + assert hit.suspend_type == "frame_eval" writer.write_remove_breakpoint(break2_id) - writer.write_add_breakpoint(break1_line, 'None') + writer.write_add_breakpoint(break1_line, "None") writer.write_run_thread(hit.thread_id) hit = writer.wait_for_breakpoint_hit(line=break1_line) @@ -238,11 +297,10 @@ def test_frame_eval_change_breakpoints(case_setup_force_frame_eval): def test_generator_code_cache(case_setup_force_frame_eval): - - with case_setup_force_frame_eval.test_file('_debugger_case_yield_from.py') as writer: - break1_line = writer.get_line_index_with_content('break1') + with case_setup_force_frame_eval.test_file("_debugger_case_yield_from.py") as writer: + break1_line = writer.get_line_index_with_content("break1") writer.write_add_breakpoint(break1_line) - break2_line = writer.get_line_index_with_content('break2') + break2_line = writer.get_line_index_with_content("break2") writer.write_add_breakpoint(break2_line) writer.write_make_initial_run() @@ -258,20 +316,28 @@ def test_generator_code_cache(case_setup_force_frame_eval): hit = writer.wait_for_breakpoint_hit(line=break2_line) writer.write_run_thread(hit.thread_id) - hit = writer.wait_for_breakpoint_hit(line=break2_line) - writer.write_run_thread(hit.thread_id) + if not IS_PY312_OR_GREATER: + # On python 3.12 there's no list-comprehension additional frame, + # so, one less step is expected. + hit = writer.wait_for_breakpoint_hit(line=break2_line) + writer.write_run_thread(hit.thread_id) writer.finished_ok = True def test_break_line_1(case_setup_force_frame_eval): - with case_setup_force_frame_eval.test_file('_debugger_case_yield_from.py') as writer: + with case_setup_force_frame_eval.test_file("_debugger_case_yield_from.py") as writer: break1_line = 1 - break1_id = writer.write_add_breakpoint(break1_line, 'None') + break1_id = writer.write_add_breakpoint(break1_line, "None") writer.write_make_initial_run() hit = writer.wait_for_breakpoint_hit(line=break1_line) - assert hit.suspend_type == "frame_eval" + if IS_PY312_OR_GREATER: + assert hit.suspend_type == "sys_monitor" + elif IS_PY311_OR_GREATER: + assert hit.suspend_type == "trace" + else: + assert hit.suspend_type == "frame_eval" writer.write_run_thread(hit.thread_id) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_frame_evaluator.py b/src/debugpy/_vendored/pydevd/tests_python/test_frame_evaluator.py index ca0b8098e..f8c7cf252 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_frame_evaluator.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_frame_evaluator.py @@ -2,9 +2,12 @@ import threading import pytest from tests_python.debugger_unittest import IS_PY36_OR_GREATER, IS_CPYTHON -from tests_python.debug_constants import TEST_CYTHON, TODO_PY311 +from tests_python.debug_constants import TEST_CYTHON +from _pydevd_bundle.pydevd_constants import IS_PY311_OR_GREATER -pytestmark = pytest.mark.skipif(not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON or TODO_PY311, reason='Requires CPython >= 3.6') +pytestmark = pytest.mark.skipif( + not IS_PY36_OR_GREATER or not IS_CPYTHON or not TEST_CYTHON or IS_PY311_OR_GREATER, reason="Requires CPython >= 3.6 < 3.11" +) def get_foo_frame(): @@ -13,14 +16,14 @@ def get_foo_frame(): class CheckClass(object): - def collect_info(self): from _pydevd_frame_eval import pydevd_frame_evaluator + thread_info = pydevd_frame_evaluator.get_thread_info_py() self.thread_info = thread_info -@pytest.mark.parametrize('_times', range(2)) +@pytest.mark.parametrize("_times", range(2)) def test_thread_info(_times): obj = CheckClass() obj.collect_info() @@ -48,15 +51,17 @@ def method(): def _custom_global_dbg(): from _pydevd_bundle.pydevd_constants import GlobalDebuggerHolder from pydevd import PyDB + curr = GlobalDebuggerHolder.global_dbg PyDB() # Will make itself current yield GlobalDebuggerHolder.global_dbg = curr -@pytest.mark.parametrize('_times', range(2)) +@pytest.mark.parametrize("_times", range(2)) def test_func_code_info(_times, _custom_global_dbg): from _pydevd_frame_eval import pydevd_frame_evaluator + # Must be called before get_func_code_info_py to initialize the _code_extra_index. thread_info = pydevd_frame_evaluator.get_thread_info_py() @@ -65,12 +70,12 @@ def test_func_code_info(_times, _custom_global_dbg): func_info2 = pydevd_frame_evaluator.get_func_code_info_py(thread_info, method(), method.__code__) assert func_info is func_info2 - some_func = eval('lambda:sys._getframe()') + some_func = eval("lambda:sys._getframe()") func_info3 = pydevd_frame_evaluator.get_func_code_info_py(thread_info, some_func(), some_func.__code__) del some_func del func_info3 - some_func = eval('lambda:sys._getframe()') + some_func = eval("lambda:sys._getframe()") pydevd_frame_evaluator.get_func_code_info_py(thread_info, some_func(), some_func.__code__) func_info = pydevd_frame_evaluator.get_func_code_info_py(thread_info, some_func(), some_func.__code__) assert pydevd_frame_evaluator.get_func_code_info_py(thread_info, some_func(), some_func.__code__) is func_info @@ -89,43 +94,43 @@ def method(): a = 3 breakpoint_found, new_code = generate_code_with_breakpoints_py( - method.__code__, - create_breakpoints_dict([method.__code__.co_firstlineno + 1, method.__code__.co_firstlineno + 2]) + method.__code__, create_breakpoints_dict([method.__code__.co_firstlineno + 1, method.__code__.co_firstlineno + 2]) ) assert breakpoint_found with pytest.raises(AssertionError): # We must use the cached one directly (in the real-world, this would indicate a reuse # of the code object -- which is related to generator handling). - generate_code_with_breakpoints_py( - new_code, - create_breakpoints_dict([method.__code__.co_firstlineno + 1]) - ) + generate_code_with_breakpoints_py(new_code, create_breakpoints_dict([method.__code__.co_firstlineno + 1])) cached_value = get_cached_code_obj_info_py(new_code) breakpoint_found, force_stay_in_untraced_mode = cached_value.compute_force_stay_in_untraced_mode( - create_breakpoints_dict([method.__code__.co_firstlineno + 1])) + create_breakpoints_dict([method.__code__.co_firstlineno + 1]) + ) assert breakpoint_found assert force_stay_in_untraced_mode # i.e.: no breakpoints match (stay in untraced mode) breakpoint_found, force_stay_in_untraced_mode = cached_value.compute_force_stay_in_untraced_mode( - create_breakpoints_dict([method.__code__.co_firstlineno + 10])) + create_breakpoints_dict([method.__code__.co_firstlineno + 10]) + ) assert not breakpoint_found assert force_stay_in_untraced_mode # i.e.: one of the breakpoints match (stay in untraced mode) breakpoint_found, force_stay_in_untraced_mode = cached_value.compute_force_stay_in_untraced_mode( - create_breakpoints_dict([method.__code__.co_firstlineno + 2])) + create_breakpoints_dict([method.__code__.co_firstlineno + 2]) + ) assert breakpoint_found assert force_stay_in_untraced_mode # i.e.: one of the breakpoints doesn't match (leave untraced mode) breakpoint_found, force_stay_in_untraced_mode = cached_value.compute_force_stay_in_untraced_mode( - create_breakpoints_dict([method.__code__.co_firstlineno + 3])) + create_breakpoints_dict([method.__code__.co_firstlineno + 3]) + ) assert breakpoint_found assert not force_stay_in_untraced_mode diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_frame_utils.py b/src/debugpy/_vendored/pydevd/tests_python/test_frame_utils.py index afac45452..289bfc7bc 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_frame_utils.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_frame_utils.py @@ -6,21 +6,20 @@ def test_create_frames_list_from_traceback(): - def method(): - raise RuntimeError('first') + raise RuntimeError("first") def method1(): try: method() except Exception as e: - raise RuntimeError('second') from e + raise RuntimeError("second") from e def method2(): try: method1() except Exception as e: - raise RuntimeError('third') from e + raise RuntimeError("third") from e try: method2() @@ -29,16 +28,18 @@ def method2(): frame = sys._getframe() from _pydevd_bundle.pydevd_frame_utils import create_frames_list_from_traceback + frames_list = create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, exception_type=EXCEPTION_TYPE_USER_UNHANDLED) - assert str(frames_list.exc_desc) == 'third' - assert str(frames_list.chained_frames_list.exc_desc) == 'second' - assert str(frames_list.chained_frames_list.chained_frames_list.exc_desc) == 'first' + assert str(frames_list.exc_desc) == "third" + assert str(frames_list.chained_frames_list.exc_desc) == "second" + assert str(frames_list.chained_frames_list.chained_frames_list.exc_desc) == "first" assert frames_list.chained_frames_list.chained_frames_list.chained_frames_list is None if IS_PY311_OR_GREATER: import traceback - _byte_offset_to_character_offset = getattr(traceback, '_byte_offset_to_character_offset', None) + + _byte_offset_to_character_offset = getattr(traceback, "_byte_offset_to_character_offset", None) if _byte_offset_to_character_offset is not None: _original = traceback._byte_offset_to_character_offset @@ -46,54 +47,37 @@ def _byte_offset_to_character_offset(*args, **kwargs): try: return _original(*args, **kwargs) except: - # Replacement to deal with the buggy version released on Python 3.11.0. def replacement(str, offset): - as_utf8 = str.encode('utf-8') + as_utf8 = str.encode("utf-8") if offset > len(as_utf8): offset = len(as_utf8) - return len(as_utf8[:offset + 1].decode("utf-8", 'replace')) + return len(as_utf8[: offset + 1].decode("utf-8", "replace")) - return replacement(*args , **kwargs) + return replacement(*args, **kwargs) traceback._byte_offset_to_character_offset = _byte_offset_to_character_offset _USE_UNICODE = [False, True] -@pytest.mark.parametrize('use_unicode', _USE_UNICODE) -@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason='Python 3.11 required.') +@pytest.mark.parametrize("use_unicode", _USE_UNICODE) +@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason="Python 3.11 required.") def test_collect_anchors_subscript(use_unicode): from _pydevd_bundle.pydevd_frame_utils import create_frames_list_from_traceback if use_unicode: def method(): - d = { - "x": { - "á": { - "í": { - "theta": 1 - } - } - } - } + d = {"x": {"á": {"í": {"theta": 1}}}} result = d["x"]["á"]["í"]["beta"] else: def method(): - d = { - "x": { - "y": { - "i": { - "theta": 1 - } - } - } - } + d = {"x": {"y": {"i": {"theta": 1}}}} result = d["x"]["y"]["i"]["beta"] @@ -106,7 +90,7 @@ def method(): frames_list = create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, memo) iter_in = iter(frames_list) f = next(iter_in) - assert f.f_code.co_name == 'method' + assert f.f_code.co_name == "method" line_col_info = frames_list.frame_id_to_line_col_info[id(f)] if use_unicode: @@ -135,8 +119,8 @@ def method(): assert endcol == len(line) -@pytest.mark.parametrize('use_unicode', _USE_UNICODE) -@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason='Python 3.11 required.') +@pytest.mark.parametrize("use_unicode", _USE_UNICODE) +@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason="Python 3.11 required.") def test_collect_anchors_binop_1(use_unicode): from _pydevd_bundle.pydevd_frame_utils import create_frames_list_from_traceback @@ -167,15 +151,15 @@ def method(): frames_list = create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, memo) iter_in = iter(frames_list) f = next(iter_in) - assert f.f_code.co_name == 'method' + assert f.f_code.co_name == "method" line_col_info = frames_list.frame_id_to_line_col_info[id(f)] if use_unicode: - line = ' result = á + í + c' - expected_index = line.index('á + í') + line = " result = á + í + c" + expected_index = line.index("á + í") else: - line = ' result = a + b + c' - expected_index = line.index('a + b') + line = " result = a + b + c" + expected_index = line.index("a + b") assert line_col_info.colno == expected_index @@ -188,12 +172,12 @@ def method(): original_line = line col, endcol = line_col_info.map_columns_to_line(original_line) - assert col == line.index('+ c') + assert col == line.index("+ c") assert endcol == col + 1 -@pytest.mark.parametrize('use_unicode', _USE_UNICODE) -@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason='Python 3.11 required.') +@pytest.mark.parametrize("use_unicode", _USE_UNICODE) +@pytest.mark.skipif(not IS_PY311_OR_GREATER, reason="Python 3.11 required.") def test_collect_anchors_binop_2(use_unicode): from _pydevd_bundle.pydevd_frame_utils import create_frames_list_from_traceback @@ -224,28 +208,28 @@ def method(): frames_list = create_frames_list_from_traceback(trace_obj, frame, exc_type, exc_desc, memo) iter_in = iter(frames_list) f = next(iter_in) - assert f.f_code.co_name == 'method' + assert f.f_code.co_name == "method" line_col_info = frames_list.frame_id_to_line_col_info[id(f)] if use_unicode: - line = ' result = á + c + í' - expected_index = line.index('á + c') + line = " result = á + c + í" + expected_index = line.index("á + c") else: - line = ' result = a + c + b' - expected_index = line.index('a + c') + line = " result = a + c + b" + expected_index = line.index("a + c") assert line_col_info.colno == expected_index # It's +2 here due to the á and í unicode chars (we need to convert from the bytes # index to the actual character in the string to get the actual col). if use_unicode: - assert line_col_info.end_colno == line.index('c + í') + 2 + assert line_col_info.end_colno == line.index("c + í") + 2 else: - assert line_col_info.end_colno == line.index('c + b') + 1 + assert line_col_info.end_colno == line.index("c + b") + 1 original_line = line col, endcol = line_col_info.map_columns_to_line(original_line) assert col == 23 assert endcol == 24 - assert col == line.index('+ c') + assert col == line.index("+ c") assert endcol == col + 1 diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_null.py b/src/debugpy/_vendored/pydevd/tests_python/test_null.py index f09da7b71..54c2ce4fc 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_null.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_null.py @@ -1,8 +1,9 @@ def test_null(): from _pydevd_bundle.pydevd_constants import Null + null = Null() assert not null assert len(null) == 0 - + with null as n: - n.write('foo') \ No newline at end of file + n.write("foo") diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_process_command_line.py b/src/debugpy/_vendored/pydevd/tests_python/test_process_command_line.py index 8932630a6..4f4656ea7 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_process_command_line.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_process_command_line.py @@ -1,28 +1,30 @@ import unittest -class Test(unittest.TestCase): +class Test(unittest.TestCase): def testProcessCommandLine(self): from _pydevd_bundle.pydevd_command_line_handling import process_command_line, setup_to_argv - setup = process_command_line(['pydevd.py', '--port', '1', '--save-threading']) - assert setup['save-threading'] - assert setup['port'] == 1 - assert not setup['qt-support'] + + setup = process_command_line(["pydevd.py", "--port", "1", "--save-threading"]) + assert setup["save-threading"] + assert setup["port"] == 1 + assert not setup["qt-support"] argv = setup_to_argv(setup) - assert argv[0].endswith('pydevd.py') or argv[0].endswith('pydevd$py.class'), 'Expected: %s to end with pydevd.py' % (argv[0],) + assert argv[0].endswith("pydevd.py") or argv[0].endswith("pydevd$py.class"), "Expected: %s to end with pydevd.py" % (argv[0],) argv = argv[1:] - assert argv == ['--port', '1', '--save-threading'] + assert argv == ["--port", "1", "--save-threading"] def testProcessCommandLine2(self): from _pydevd_bundle.pydevd_command_line_handling import process_command_line, setup_to_argv - setup = process_command_line(['pydevd.py', '--port', '1', '--qt-support=auto']) - assert setup['qt-support'] == 'auto' - setup = process_command_line(['pydevd.py', '--port', '1', '--qt-support']) - assert setup['qt-support'] == 'auto' + setup = process_command_line(["pydevd.py", "--port", "1", "--qt-support=auto"]) + assert setup["qt-support"] == "auto" + + setup = process_command_line(["pydevd.py", "--port", "1", "--qt-support"]) + assert setup["qt-support"] == "auto" - setup = process_command_line(['pydevd.py', '--port', '1', '--qt-support=pyqt4']) - assert setup['qt-support'] == 'pyqt4' + setup = process_command_line(["pydevd.py", "--port", "1", "--qt-support=pyqt4"]) + assert setup["qt-support"] == "pyqt4" - self.assertRaises(ValueError, process_command_line, ['pydevd.py', '--port', '1', '--qt-support=wrong']) + self.assertRaises(ValueError, process_command_line, ["pydevd.py", "--port", "1", "--qt-support=wrong"]) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_pydev_monkey.py b/src/debugpy/_vendored/pydevd/tests_python/test_pydev_monkey.py index db3b2068e..b87e66ccb 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_pydev_monkey.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_pydev_monkey.py @@ -23,29 +23,30 @@ def save_setup_holder(): def test_monkey(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True} - check = '''C:\\bin\\python.exe -u -c connect(\\"127.0.0.1\\")''' + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True} + check = """C:\\bin\\python.exe -u -c connect(\\"127.0.0.1\\")""" debug_command = ( - 'import sys; ' - 'sys.path.insert(0, r\'%s\'); ' + "import sys; " + "sys.path.insert(0, r'%s'); " "import pydevd; pydevd.config('quoted-line', ''); " "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, " - 'trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command - assert 'C:\\bin\\python.exe -u -c %s' % debug_command == pydev_monkey.patch_arg_str_win(check) + assert "C:\\bin\\python.exe -u -c %s" % debug_command == pydev_monkey.patch_arg_str_win(check) def test_str_to_args_windows(): - assert ['a', 'b'] == pydev_monkey.str_to_args_windows('a "b"') + assert ["a", "b"] == pydev_monkey.str_to_args_windows('a "b"') def test_monkey_patch_return_original_args(): - check = ['echo', '"my"', '"args"'] + check = ["echo", '"my"', '"args"'] res = pydev_monkey.patch_args(check[:]) assert res == check @@ -54,9 +55,9 @@ def test_monkey_patch_pathlib_args(): try: import pathlib except ImportError: - pytest.skip('pathlib not available.') + pytest.skip("pathlib not available.") - check = [pathlib.Path('echo'), '"my"', '"args"'] + check = [pathlib.Path("echo"), '"my"', '"args"'] res = pydev_monkey.patch_args(check[:]) assert res == check @@ -68,7 +69,7 @@ def test_monkey_patch_wrong_object_type(): def test_monkey_patch_wrong_object_type_2(): - check = ['C:\\bin\\python.exe', '-u', 1, '-qcconnect("127.0.0.1")'] + check = ["C:\\bin\\python.exe", "-u", 1, '-qcconnect("127.0.0.1")'] res = pydev_monkey.patch_args(check[:]) assert res == check @@ -77,450 +78,413 @@ def test_monkey_patch_args_module_subprocess_pathlib(): try: import pathlib except ImportError: - pytest.skip('pathlib not available.') + pytest.skip("pathlib not available.") - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True} - if sys.platform == 'win32': - python_path = 'C:\\bin\\python.exe' + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True} + if sys.platform == "win32": + python_path = "C:\\bin\\python.exe" else: - python_path = '/bin/python' - check = [pathlib.Path(python_path), '-mtest', pathlib.Path('bar')] + python_path = "/bin/python" + check = [pathlib.Path(python_path), "-mtest", pathlib.Path("bar")] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ python_path, get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--protocol-quoted-line', - '--file', - 'test', - 'bar', + "--client", + "127.0.0.1", + "--multiprocess", + "--protocol-quoted-line", + "--file", + "test", + "bar", ] def test_monkey_patch_args_indc(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-u', '-c', 'connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-u", "-c", 'connect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-u', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-u", "-c", debug_command] def test_separate_future_imports(): - found = pydev_monkey._separate_future_imports('''from __future__ import print_function\nprint(1)''') - assert found == ('from __future__ import print_function;', '\nprint(1)') + found = pydev_monkey._separate_future_imports("""from __future__ import print_function\nprint(1)""") + assert found == ("from __future__ import print_function;", "\nprint(1)") - found = pydev_monkey._separate_future_imports('''from __future__ import print_function;print(1)''') - assert found == ('from __future__ import print_function;', 'print(1)') + found = pydev_monkey._separate_future_imports("""from __future__ import print_function;print(1)""") + assert found == ("from __future__ import print_function;", "print(1)") - found = pydev_monkey._separate_future_imports('''from __future__ import (\nprint_function);print(1)''') - assert found == ('from __future__ import (\nprint_function);', 'print(1)') + found = pydev_monkey._separate_future_imports("""from __future__ import (\nprint_function);print(1)""") + assert found == ("from __future__ import (\nprint_function);", "print(1)") - found = pydev_monkey._separate_future_imports('''"line";from __future__ import (\n\nprint_function, absolute_imports\n);print(1)''') - assert found == ('"line";from __future__ import (\n\nprint_function, absolute_imports\n);', 'print(1)') + found = pydev_monkey._separate_future_imports(""""line";from __future__ import (\n\nprint_function, absolute_imports\n);print(1)""") + assert found == ('"line";from __future__ import (\n\nprint_function, absolute_imports\n);', "print(1)") - found = pydev_monkey._separate_future_imports('''from __future__ import bar\nfrom __future__ import (\n\nprint_function, absolute_imports\n);print(1)''') - assert found == ('from __future__ import bar\nfrom __future__ import (\n\nprint_function, absolute_imports\n);', 'print(1)') + found = pydev_monkey._separate_future_imports( + """from __future__ import bar\nfrom __future__ import (\n\nprint_function, absolute_imports\n);print(1)""" + ) + assert found == ("from __future__ import bar\nfrom __future__ import (\n\nprint_function, absolute_imports\n);", "print(1)") def test_monkey_patch_args_indc_future_import(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-u', '-c', 'from __future__ import print_function;connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-u", "-c", 'from __future__ import print_function;connect("127.0.0.1")'] debug_command = ( - "from __future__ import print_function;import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "from __future__ import print_function;import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-u', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-u", "-c", debug_command] def test_monkey_patch_args_indc_future_import2(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-u', '-c', 'from __future__ import print_function\nconnect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-u", "-c", 'from __future__ import print_function\nconnect("127.0.0.1")'] debug_command = ( - "from __future__ import print_function;import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - '\nconnect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "from __future__ import print_function;import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + '\nconnect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-u', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-u", "-c", debug_command] def test_monkey_patch_args_indc2(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-u', '-qcconnect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-u", '-qcconnect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-u', - '-qc', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-u", "-qc", debug_command] def test_monkey_patch_args_x_flag(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-X', 'faulthandler', '-c', 'connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-X", "faulthandler", "-c", 'connect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-X', - 'faulthandler', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-X", "faulthandler", "-c", debug_command] def test_monkey_patch_args_flag_in_single_arg_1(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-qX', 'faulthandler', '-c', 'connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-qX", "faulthandler", "-c", 'connect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-qX', - 'faulthandler', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-qX", "faulthandler", "-c", debug_command] def test_monkey_patch_args_flag_in_single_arg_2(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-qX', 'faulthandler', '-c', 'connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-qX", "faulthandler", "-c", 'connect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-qX', - 'faulthandler', - '-c', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-qX", "faulthandler", "-c", debug_command] def test_monkey_patch_args_flag_in_single_arg_3(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-qc', 'connect("127.0.0.1")'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-qc", 'connect("127.0.0.1")'] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-qc', - debug_command - ] + assert res == ["C:\\bin\\python.exe", "-qc", debug_command] def test_monkey_patch_args_x_flag_inline(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-Xfaulthandler', '-c', 'connect("127.0.0.1")', 'arg1'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-Xfaulthandler", "-c", 'connect("127.0.0.1")', "arg1"] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-Xfaulthandler', - '-c', - debug_command, - 'arg1' - ] + assert res == ["C:\\bin\\python.exe", "-Xfaulthandler", "-c", debug_command, "arg1"] def test_monkey_patch_args_c_flag_inline(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'ppid': os.getpid(), 'protocol-quoted-line': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-X', 'faulthandler', '-cconnect("127.0.0.1")', 'arg1'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "ppid": os.getpid(), "protocol-quoted-line": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-X", "faulthandler", '-cconnect("127.0.0.1")', "arg1"] debug_command = ( - "import sys; sys.path.insert(0, r\'%s\'); import pydevd; pydevd.config('quoted-line', ''); " - 'pydevd.settrace(host=\'127.0.0.1\', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); ' - '' - 'connect("127.0.0.1")') % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) + "import sys; sys.path.insert(0, r'%s'); import pydevd; pydevd.config('quoted-line', ''); " + "pydevd.settrace(host='127.0.0.1', port=0, suspend=False, trace_only_current_thread=False, patch_multiprocessing=True, access_token=None, client_access_token=None, __setup_holder__=%s); " + "" + 'connect("127.0.0.1")' + ) % (pydev_src_dir, sorted_dict_repr(SetupHolder.setup)) if sys.platform == "win32": debug_command = debug_command.replace('"', '\\"') debug_command = '"%s"' % debug_command res = pydev_monkey.patch_args(check) - assert res == [ - 'C:\\bin\\python.exe', - '-X', - 'faulthandler', - '-c', - debug_command, - 'arg1' - ] + assert res == ["C:\\bin\\python.exe", "-X", "faulthandler", "-c", debug_command, "arg1"] def test_monkey_patch_args_module(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-m', 'test'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-m", "test"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', + "C:\\bin\\python.exe", get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--skip-notify-stdin', - '--protocol-quoted-line', - '--file', - 'test', + "--client", + "127.0.0.1", + "--multiprocess", + "--skip-notify-stdin", + "--protocol-quoted-line", + "--file", + "test", ] def test_monkey_patch_args_unbuffered_module(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-u', '-m', 'test'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-u", "-m", "test"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', - '-u', + "C:\\bin\\python.exe", + "-u", get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--skip-notify-stdin', - '--protocol-quoted-line', - '--file', - 'test', + "--client", + "127.0.0.1", + "--multiprocess", + "--skip-notify-stdin", + "--protocol-quoted-line", + "--file", + "test", ] def test_monkey_patch_args_module_inline(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-qOmtest'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-qOmtest"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', - '-qO', + "C:\\bin\\python.exe", + "-qO", get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--skip-notify-stdin', - '--protocol-quoted-line', - '--file', - 'test', + "--client", + "127.0.0.1", + "--multiprocess", + "--skip-notify-stdin", + "--protocol-quoted-line", + "--file", + "test", ] def test_monkey_patch_args_module_inline2(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'skip-notify-stdin': True} - check = ['C:\\bin\\python.exe', '-qOm', 'test'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "skip-notify-stdin": True} + check = ["C:\\bin\\python.exe", "-qOm", "test"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', - '-qO', + "C:\\bin\\python.exe", + "-qO", get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--skip-notify-stdin', - '--protocol-quoted-line', - '--file', - 'test', + "--client", + "127.0.0.1", + "--multiprocess", + "--skip-notify-stdin", + "--protocol-quoted-line", + "--file", + "test", ] def test_monkey_patch_args_no_indc(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0'} - check = ['C:\\bin\\python.exe', 'connect(\\"127.0.0.1\\")', 'with spaces'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0"} + check = ["C:\\bin\\python.exe", 'connect(\\"127.0.0.1\\")', "with spaces"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', + "C:\\bin\\python.exe", get_pydevd_file(), - '--port', - '0', - '--ppid', + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--protocol-quoted-line', - '--file', - '"connect(\\\\\\"127.0.0.1\\\\\\")"' if sys.platform == 'win32' else 'connect(\\"127.0.0.1\\")', - '"with spaces"' if sys.platform == 'win32' else 'with spaces', + "--client", + "127.0.0.1", + "--protocol-quoted-line", + "--file", + '"connect(\\\\\\"127.0.0.1\\\\\\")"' if sys.platform == "win32" else 'connect(\\"127.0.0.1\\")', + '"with spaces"' if sys.platform == "win32" else "with spaces", ] def test_monkey_patch_args_no_indc_with_pydevd(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0'} - check = ['C:\\bin\\python.exe', 'pydevd.py', 'connect(\\"127.0.0.1\\")', 'bar'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0"} + check = ["C:\\bin\\python.exe", "pydevd.py", 'connect(\\"127.0.0.1\\")', "bar"] - assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', 'pydevd.py', 'connect(\\"127.0.0.1\\")', 'bar'] + assert pydev_monkey.patch_args(check) == ["C:\\bin\\python.exe", "pydevd.py", 'connect(\\"127.0.0.1\\")', "bar"] def test_monkey_patch_args_no_indc_without_pydevd(): from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0'} - check = ['C:\\bin\\python.exe', 'target.py', 'connect(\\"127.0.0.1\\")', 'bar'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0"} + check = ["C:\\bin\\python.exe", "target.py", 'connect(\\"127.0.0.1\\")', "bar"] assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', + "C:\\bin\\python.exe", get_pydevd_file(), - '--port', - '0', - '--ppid', + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--protocol-quoted-line', - '--file', - 'target.py', - '"connect(\\\\\\"127.0.0.1\\\\\\")"' if sys.platform == 'win32' else 'connect(\\"127.0.0.1\\")', - 'bar', + "--client", + "127.0.0.1", + "--protocol-quoted-line", + "--file", + "target.py", + '"connect(\\\\\\"127.0.0.1\\\\\\")"' if sys.platform == "win32" else 'connect(\\"127.0.0.1\\")', + "bar", ] -@pytest.mark.parametrize('use_bytes', [True, False]) +@pytest.mark.parametrize("use_bytes", [True, False]) def test_monkey_patch_c_program_arg(use_bytes): from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'module': 'ignore.this'} - check = ['C:\\bin\\python.exe', '-u', 'target.py', '-c', '-áéíóú'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "module": "ignore.this"} + check = ["C:\\bin\\python.exe", "-u", "target.py", "-c", "-áéíóú"] - encode = lambda s:s + encode = lambda s: s if use_bytes: - check = [c.encode('utf-8') for c in check] - encode = lambda s:s.encode('utf-8') + check = [c.encode("utf-8") for c in check] + encode = lambda s: s.encode("utf-8") assert pydev_monkey.patch_args(check) == [ - encode('C:\\bin\\python.exe'), - encode('-u'), + encode("C:\\bin\\python.exe"), + encode("-u"), get_pydevd_file(), - '--port', - '0', - '--ppid', + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--protocol-quoted-line', - '--file', - encode('target.py'), - encode('-c'), - encode('-áéíóú') + "--client", + "127.0.0.1", + "--protocol-quoted-line", + "--file", + encode("target.py"), + encode("-c"), + encode("-áéíóú"), ] def test_monkey_patch_args_module_single_arg(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'module': 'ignore.this'} - check = ['C:\\bin\\python.exe', '-mtest', 'bar'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "module": "ignore.this"} + check = ["C:\\bin\\python.exe", "-mtest", "bar"] from _pydevd_bundle.pydevd_command_line_handling import get_pydevd_file + assert pydev_monkey.patch_args(check) == [ - 'C:\\bin\\python.exe', + "C:\\bin\\python.exe", get_pydevd_file(), - '--module', - '--port', - '0', - '--ppid', + "--module", + "--port", + "0", + "--ppid", str(os.getpid()), - '--client', - '127.0.0.1', - '--multiprocess', - '--protocol-quoted-line', - '--file', - 'test', - 'bar', + "--client", + "127.0.0.1", + "--multiprocess", + "--protocol-quoted-line", + "--file", + "test", + "bar", ] def test_monkey_patch_args_stdin(): - SetupHolder.setup = {'client': '127.0.0.1', 'port': '0', 'multiprocess': True, 'module': 'ignore.this'} - check = ['C:\\bin\\python.exe', '-Xfaulthandler' , '-'] + SetupHolder.setup = {"client": "127.0.0.1", "port": "0", "multiprocess": True, "module": "ignore.this"} + check = ["C:\\bin\\python.exe", "-Xfaulthandler", "-"] # i.e.: we don't deal with the stdin. assert pydev_monkey.patch_args(check) == check diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_pydevcoverage.py b/src/debugpy/_vendored/pydevd/tests_python/test_pydevcoverage.py index 353027d0a..40865b7c7 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_pydevcoverage.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_pydevcoverage.py @@ -6,9 +6,9 @@ import unittest -#======================================================================================================================= +# ======================================================================================================================= # Test -#======================================================================================================================= +# ======================================================================================================================= class Test(unittest.TestCase): """ Unittest for pydev_coverage.py. @@ -26,20 +26,19 @@ def setUp(self): def _do_analyze(self, files): invalid_files = [] - p = subprocess.Popen([sys.executable, self._coverage_file, "--pydev-analyze"], - stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) + p = subprocess.Popen( + [sys.executable, self._coverage_file, "--pydev-analyze"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE + ) __, stderrdata = p.communicate("|".join(files).encode()) if stderrdata: - match = re.search("Invalid files not passed to coverage: (.*?)$", - stderrdata.decode(), re.M) # @UndefinedVariable + match = re.search("Invalid files not passed to coverage: (.*?)$", stderrdata.decode(), re.M) # @UndefinedVariable if match: invalid_files = [f.strip() for f in match.group(1).split(",")] return invalid_files def test_pydev_analyze_ok(self): - ref_valid_files = [__file__, - os.path.join(self._resources_path, "_debugger_case18.py")] + ref_valid_files = [__file__, os.path.join(self._resources_path, "_debugger_case18.py")] ref_invalid_files = [] invalid_files = self._do_analyze(ref_valid_files) @@ -47,9 +46,7 @@ def test_pydev_analyze_ok(self): self.assertEqual(ref_invalid_files, invalid_files) def test_pydev_analyse_non_standard_encoding(self): - ref_valid_files = [os.path.join(self._resources_path, - "_pydev_coverage_cyrillic_encoding_py%i.py" - % sys.version_info[0])] + ref_valid_files = [os.path.join(self._resources_path, "_pydev_coverage_cyrillic_encoding_py%i.py" % sys.version_info[0])] ref_invalid_files = [] invalid_files = self._do_analyze(ref_valid_files + ref_invalid_files) @@ -59,9 +56,7 @@ def test_pydev_analyse_non_standard_encoding(self): def test_pydev_analyse_invalid_files(self): with tempfile.NamedTemporaryFile(suffix=".pyx") as pyx_file: ref_valid_files = [] - ref_invalid_files = [os.path.join(self._resources_path, - "_pydev_coverage_syntax_error.py"), - pyx_file.name] + ref_invalid_files = [os.path.join(self._resources_path, "_pydev_coverage_syntax_error.py"), pyx_file.name] invalid_files = self._do_analyze(ref_valid_files + ref_invalid_files) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_api.py b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_api.py index 2f27530bd..92f70907b 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_api.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_api.py @@ -2,34 +2,58 @@ import sys -@pytest.mark.skipif(sys.platform != 'win32', reason='Windows-only test.') +@pytest.mark.skipif(sys.platform != "win32", reason="Windows-only test.") def test_pydevd_api_breakpoints(tmpdir): from _pydevd_bundle.pydevd_api import PyDevdAPI from pydevd import PyDB import pydevd_file_utils + api = PyDevdAPI() py_db = PyDB(set_as_global=False) - dira = tmpdir.join('DirA') + dira = tmpdir.join("DirA") dira.mkdir() - f = dira.join('filE.py') - f.write_text(''' + f = dira.join("filE.py") + f.write_text( + """ a = 1 b = 2 c = 3 -''', 'utf-8') +""", + "utf-8", + ) filename = str(f) result = api.add_breakpoint( - py_db, filename, breakpoint_type='python-line', breakpoint_id=0, line=1, condition=None, func_name='None', - expression=None, suspend_policy="NONE", hit_condition='', is_logpoint=False) + py_db, + filename, + breakpoint_type="python-line", + breakpoint_id=0, + line=1, + condition=None, + func_name="None", + expression=None, + suspend_policy="NONE", + hit_condition="", + is_logpoint=False, + ) assert not result.error_code result = api.add_breakpoint( - py_db, filename, breakpoint_type='python-line', breakpoint_id=1, line=2, condition=None, func_name='None', - expression=None, suspend_policy="NONE", hit_condition='', is_logpoint=False) + py_db, + filename, + breakpoint_type="python-line", + breakpoint_id=1, + line=2, + condition=None, + func_name="None", + expression=None, + suspend_policy="NONE", + hit_condition="", + is_logpoint=False, + ) assert not result.error_code canonical_path = pydevd_file_utils.canonical_normalized_path(filename) @@ -37,7 +61,7 @@ def test_pydevd_api_breakpoints(tmpdir): assert len(py_db.breakpoints[canonical_path]) == 2 assert len(py_db.file_to_id_to_line_breakpoint[canonical_path]) == 2 - filename_replaced = filename.replace('DirA', 'dira') + filename_replaced = filename.replace("DirA", "dira") api.remove_all_breakpoints(py_db, filename_replaced) assert not py_db.breakpoints assert not py_db.file_to_id_to_line_breakpoint diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_filtering.py b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_filtering.py index 6bf57721f..460dfa8a0 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_filtering.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_filtering.py @@ -3,62 +3,62 @@ def test_in_project_roots_prefix_01(tmpdir): from _pydevd_bundle.pydevd_filtering import FilesFiltering + files_filtering = FilesFiltering() - another = str(tmpdir.join('another')) - assert not another.endswith('/') and not another.endswith('\\') + another = str(tmpdir.join("another")) + assert not another.endswith("/") and not another.endswith("\\") files_filtering.set_library_roots([another]) files_filtering.set_project_roots([]) - assert not files_filtering.in_project_roots(another + '/f.py') + assert not files_filtering.in_project_roots(another + "/f.py") if IS_WINDOWS: - assert not files_filtering.in_project_roots(another + '\\f.py') + assert not files_filtering.in_project_roots(another + "\\f.py") else: - assert files_filtering.in_project_roots(another + '\\f.py') + assert files_filtering.in_project_roots(another + "\\f.py") - assert files_filtering.in_project_roots(another + 'f.py') + assert files_filtering.in_project_roots(another + "f.py") def test_in_project_roots_prefix_02(tmpdir): from _pydevd_bundle.pydevd_filtering import FilesFiltering + files_filtering = FilesFiltering() - another = str(tmpdir.join('another')) - assert not another.endswith('/') and not another.endswith('\\') + another = str(tmpdir.join("another")) + assert not another.endswith("/") and not another.endswith("\\") files_filtering.set_library_roots([]) files_filtering.set_project_roots([another]) - assert files_filtering.in_project_roots(another + '/f.py') + assert files_filtering.in_project_roots(another + "/f.py") if IS_WINDOWS: - assert files_filtering.in_project_roots(another + '\\f.py') + assert files_filtering.in_project_roots(another + "\\f.py") else: - assert not files_filtering.in_project_roots(another + '\\f.py') + assert not files_filtering.in_project_roots(another + "\\f.py") - assert not files_filtering.in_project_roots(another + 'f.py') + assert not files_filtering.in_project_roots(another + "f.py") def test_in_project_roots(tmpdir): from _pydevd_bundle.pydevd_filtering import FilesFiltering + files_filtering = FilesFiltering() import os.path import sys if IS_WINDOWS: - assert files_filtering._get_library_roots() == [ - os.path.normcase(x) + '\\' for x in files_filtering._get_default_library_roots()] + assert files_filtering._get_library_roots() == [os.path.normcase(x) + "\\" for x in files_filtering._get_default_library_roots()] elif IS_MAC: - assert files_filtering._get_library_roots() == [ - x.lower() + '/' for x in files_filtering._get_default_library_roots()] + assert files_filtering._get_library_roots() == [x.lower() + "/" for x in files_filtering._get_default_library_roots()] else: - assert files_filtering._get_library_roots() == [ - os.path.normcase(x) + '/' for x in files_filtering._get_default_library_roots()] + assert files_filtering._get_library_roots() == [os.path.normcase(x) + "/" for x in files_filtering._get_default_library_roots()] - site_packages = tmpdir.mkdir('site-packages') - project_dir = tmpdir.mkdir('project') + site_packages = tmpdir.mkdir("site-packages") + project_dir = tmpdir.mkdir("project") - project_dir_inside_site_packages = str(site_packages.mkdir('project')) - site_packages_inside_project_dir = str(project_dir.mkdir('site-packages')) + project_dir_inside_site_packages = str(site_packages.mkdir("project")) + site_packages_inside_project_dir = str(project_dir.mkdir("site-packages")) # Convert from pytest paths to str. site_packages = str(site_packages) @@ -76,9 +76,9 @@ def test_in_project_roots(tmpdir): (project_dir, True), (project_dir_inside_site_packages, True), ] - for (check_path, find) in check[:]: - filename_inside = os.path.join(check_path, 'a.py') - with open(filename_inside, 'w') as stream: + for check_path, find in check[:]: + filename_inside = os.path.join(check_path, "a.py") + with open(filename_inside, "w") as stream: # Note: on Github actions, tmpdir may be something as: # c:\\users\\runner~1\\appdata\\local\\temp\\pytest-of-runneradmin\\pytest-0\\test_in_project_roots0 # internally this may be set as: @@ -86,20 +86,22 @@ def test_in_project_roots(tmpdir): # So, when getting the absolute path, `runner~1` will be properly expanded to `runneradmin` if the # file exists, but if it doesn't it's not (which may make the test fail), so, make sure # that we actually create the file so that things work as expected. - stream.write('...') + stream.write("...") check.append((filename_inside, find)) for check_path, find in check: if files_filtering.in_project_roots(check_path) != find: if find: - msg = 'Expected %s to be in the project roots.\nProject roots: %s\nLibrary roots: %s\n' + msg = "Expected %s to be in the project roots.\nProject roots: %s\nLibrary roots: %s\n" else: - msg = 'Expected %s NOT to be in the project roots.\nProject roots: %s\nLibrary roots: %s\n' - - raise AssertionError(msg % ( - check_path, - files_filtering._get_project_roots(), - files_filtering._get_library_roots(), + msg = "Expected %s NOT to be in the project roots.\nProject roots: %s\nLibrary roots: %s\n" + + raise AssertionError( + msg + % ( + check_path, + files_filtering._get_project_roots(), + files_filtering._get_library_roots(), ) ) @@ -115,24 +117,24 @@ def test_in_project_roots(tmpdir): (site_packages_inside_project_dir, False), (project_dir, True), (project_dir_inside_site_packages, False), - ('', False), - ('', True), - ('', False), + ("", False), + ("", True), + ("", False), ] for check_path, find in check: - assert files_filtering.in_project_roots(check_path) == find, \ - 'Expected: %s to be a part of the project: %s' % (check_path, find) + assert files_filtering.in_project_roots(check_path) == find, "Expected: %s to be a part of the project: %s" % (check_path, find) sys.path.append(str(site_packages)) try: default_library_roots = files_filtering._get_default_library_roots() - assert len(set(default_library_roots)) == len(default_library_roots), \ - 'Duplicated library roots found in: %s' % (default_library_roots,) + assert len(set(default_library_roots)) == len(default_library_roots), "Duplicated library roots found in: %s" % ( + default_library_roots, + ) assert str(site_packages) in default_library_roots for path in sys.path: - if os.path.exists(path) and path.endswith('site-packages'): + if os.path.exists(path) and path.endswith("site-packages"): assert path in default_library_roots finally: sys.path.remove(str(site_packages)) @@ -141,126 +143,130 @@ def test_in_project_roots(tmpdir): def test_filtering(tmpdir): from _pydevd_bundle.pydevd_filtering import FilesFiltering from _pydevd_bundle.pydevd_filtering import ExcludeFilter + files_filtering = FilesFiltering() - site_packages = tmpdir.mkdir('site-packages') - project_dir = tmpdir.mkdir('project') + site_packages = tmpdir.mkdir("site-packages") + project_dir = tmpdir.mkdir("project") - project_dir_inside_site_packages = str(site_packages.mkdir('project')) - site_packages_inside_project_dir = str(project_dir.mkdir('site-packages')) + project_dir_inside_site_packages = str(site_packages.mkdir("project")) + site_packages_inside_project_dir = str(project_dir.mkdir("site-packages")) - files_filtering.set_exclude_filters([ - ExcludeFilter('**/project*', True, True), - ExcludeFilter('**/bar*', False, True), - ]) - assert files_filtering.exclude_by_filter('/foo/project', None) is True - assert files_filtering.exclude_by_filter('/foo/unmatched', None) is None - assert files_filtering.exclude_by_filter('/foo/bar', None) is False + files_filtering.set_exclude_filters( + [ + ExcludeFilter("**/project*", True, True), + ExcludeFilter("**/bar*", False, True), + ] + ) + assert files_filtering.exclude_by_filter("/foo/project", None) is True + assert files_filtering.exclude_by_filter("/foo/unmatched", None) is None + assert files_filtering.exclude_by_filter("/foo/bar", None) is False def test_glob_matching(): from _pydevd_bundle.pydevd_filtering import glob_matches_path # Linux - for sep, altsep in (('\\', '/'), ('/', None)): + for sep, altsep in (("\\", "/"), ("/", None)): def build(path): - if sep == '/': + if sep == "/": return path else: - return ('c:' + path).replace('/', '\\') + return ("c:" + path).replace("/", "\\") - assert glob_matches_path(build('/a'), r'*', sep, altsep) + assert glob_matches_path(build("/a"), r"*", sep, altsep) - assert not glob_matches_path(build('/a/b/c/some.py'), '/a/**/c/so?.py', sep, altsep) + assert not glob_matches_path(build("/a/b/c/some.py"), "/a/**/c/so?.py", sep, altsep) - assert glob_matches_path('/a/b/c', '/a/b/*') - assert not glob_matches_path('/a/b', '/*') - assert glob_matches_path('/a/b', '/*/b') - assert glob_matches_path('/a/b', '**/*') - assert not glob_matches_path('/a/b', '**/a') + assert glob_matches_path("/a/b/c", "/a/b/*") + assert not glob_matches_path("/a/b", "/*") + assert glob_matches_path("/a/b", "/*/b") + assert glob_matches_path("/a/b", "**/*") + assert not glob_matches_path("/a/b", "**/a") - assert glob_matches_path(build('/a/b/c/d'), '**/d', sep, altsep) - assert not glob_matches_path(build('/a/b/c/d'), '**/c', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '**/c/d', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '**/b/c/d', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '/*/b/*/d', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '**/c/*', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '/a/**/c/*', sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "**/d", sep, altsep) + assert not glob_matches_path(build("/a/b/c/d"), "**/c", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "**/c/d", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "**/b/c/d", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "/*/b/*/d", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "**/c/*", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "/a/**/c/*", sep, altsep) # I.e. directories are expected to end with '/', so, it'll match # something as **/directory/** - assert glob_matches_path(build('/a/b/c/'), '**/c/**', sep, altsep) - assert glob_matches_path(build('/a/b/c/'), '**/c/', sep, altsep) + assert glob_matches_path(build("/a/b/c/"), "**/c/**", sep, altsep) + assert glob_matches_path(build("/a/b/c/"), "**/c/", sep, altsep) # But not something as **/directory (that'd be a file match). - assert not glob_matches_path(build('/a/b/c/'), '**/c', sep, altsep) - assert not glob_matches_path(build('/a/b/c'), '**/c/', sep, altsep) - - assert glob_matches_path(build('/a/b/c/d.py'), '/a/**/c/*', sep, altsep) - assert glob_matches_path(build('/a/b/c/d.py'), '/a/**/c/*.py', sep, altsep) - assert glob_matches_path(build('/a/b/c/some.py'), '/a/**/c/so*.py', sep, altsep) - assert glob_matches_path(build('/a/b/c/some.py'), '/a/**/c/som?.py', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '/**', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), '/**/d', sep, altsep) - assert glob_matches_path(build('/a/b/c/d.py'), '/**/*.py', sep, altsep) - assert glob_matches_path(build('/a/b/c/d.py'), '**/c/*.py', sep, altsep) + assert not glob_matches_path(build("/a/b/c/"), "**/c", sep, altsep) + assert not glob_matches_path(build("/a/b/c"), "**/c/", sep, altsep) + + assert glob_matches_path(build("/a/b/c/d.py"), "/a/**/c/*", sep, altsep) + assert glob_matches_path(build("/a/b/c/d.py"), "/a/**/c/*.py", sep, altsep) + assert glob_matches_path(build("/a/b/c/some.py"), "/a/**/c/so*.py", sep, altsep) + assert glob_matches_path(build("/a/b/c/some.py"), "/a/**/c/som?.py", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "/**", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), "/**/d", sep, altsep) + assert glob_matches_path(build("/a/b/c/d.py"), "/**/*.py", sep, altsep) + assert glob_matches_path(build("/a/b/c/d.py"), "**/c/*.py", sep, altsep) if IS_WINDOWS: - assert glob_matches_path(build('/a/b/c/d.py'), '**/C/*.py', sep, altsep) - assert glob_matches_path(build('/a/b/C/d.py'), '**/c/*.py', sep, altsep) + assert glob_matches_path(build("/a/b/c/d.py"), "**/C/*.py", sep, altsep) + assert glob_matches_path(build("/a/b/C/d.py"), "**/c/*.py", sep, altsep) # Expected not to match. - assert not glob_matches_path(build('/a/b/c/d'), '/**/d.py', sep, altsep) - assert not glob_matches_path(build('/a/b/c/d.pyx'), '/a/**/c/*.py', sep, altsep) - assert not glob_matches_path(build('/a/b/c/d'), '/*/d', sep, altsep) + assert not glob_matches_path(build("/a/b/c/d"), "/**/d.py", sep, altsep) + assert not glob_matches_path(build("/a/b/c/d.pyx"), "/a/**/c/*.py", sep, altsep) + assert not glob_matches_path(build("/a/b/c/d"), "/*/d", sep, altsep) - if sep == '/': - assert not glob_matches_path(build('/a/b/c/d'), r'**\d', sep, altsep) # Match with \ doesn't work on linux... - assert not glob_matches_path(build('/a/b/c/d'), r'c:\**\d', sep, altsep) # Match with drive doesn't work on linux... + if sep == "/": + assert not glob_matches_path(build("/a/b/c/d"), r"**\d", sep, altsep) # Match with \ doesn't work on linux... + assert not glob_matches_path(build("/a/b/c/d"), r"c:\**\d", sep, altsep) # Match with drive doesn't work on linux... else: # Works in Windows. - assert glob_matches_path(build('/a/b/c/d'), r'**\d', sep, altsep) - assert glob_matches_path(build('/a/b/c/d'), r'c:\**\d', sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), r"**\d", sep, altsep) + assert glob_matches_path(build("/a/b/c/d"), r"c:\**\d", sep, altsep) # Corner cases - assert not glob_matches_path(build('/'), r'', sep, altsep) - assert glob_matches_path(build(''), r'', sep, altsep) - assert not glob_matches_path(build(''), r'**', sep, altsep) - assert glob_matches_path(build('/'), r'**', sep, altsep) - assert glob_matches_path(build('/'), r'*', sep, altsep) + assert not glob_matches_path(build("/"), r"", sep, altsep) + assert glob_matches_path(build(""), r"", sep, altsep) + assert not glob_matches_path(build(""), r"**", sep, altsep) + assert glob_matches_path(build("/"), r"**", sep, altsep) + assert glob_matches_path(build("/"), r"*", sep, altsep) def test_rules_to_exclude_filter(tmpdir): from _pydevd_bundle.pydevd_process_net_command_json import _convert_rules_to_exclude_filters from _pydevd_bundle.pydevd_filtering import ExcludeFilter from random import shuffle - dira = tmpdir.mkdir('a') - dirb = dira.mkdir('b') - fileb = dirb.join('fileb.py') - fileb2 = dirb.join('fileb2.py') - with fileb.open('w') as stream: - stream.write('') + + dira = tmpdir.mkdir("a") + dirb = dira.mkdir("b") + fileb = dirb.join("fileb.py") + fileb2 = dirb.join("fileb2.py") + with fileb.open("w") as stream: + stream.write("") def on_error(msg): raise AssertionError(msg) rules = [ - {'path': str(dira), 'include': False}, - {'path': str(dirb), 'include': True}, - {'path': str(fileb), 'include': True}, - {'path': str(fileb2), 'include': True}, - {'path': '**/foo/*.py', 'include': True}, - {'module': 'bar', 'include': False}, - {'module': 'bar.foo', 'include': True}, + {"path": str(dira), "include": False}, + {"path": str(dirb), "include": True}, + {"path": str(fileb), "include": True}, + {"path": str(fileb2), "include": True}, + {"path": "**/foo/*.py", "include": True}, + {"module": "bar", "include": False}, + {"module": "bar.foo", "include": True}, ] shuffle(rules) exclude_filters = _convert_rules_to_exclude_filters(rules, on_error) assert exclude_filters == [ ExcludeFilter(name=str(fileb2), exclude=False, is_path=True), ExcludeFilter(name=str(fileb), exclude=False, is_path=True), - ExcludeFilter(name=str(dirb) + '/**', exclude=False, is_path=True), - ExcludeFilter(name=str(dira) + '/**', exclude=True, is_path=True), - ExcludeFilter(name='**/foo/*.py', exclude=False, is_path=True), - ExcludeFilter(name='bar.foo', exclude=False, is_path=False), - ExcludeFilter(name='bar', exclude=True, is_path=False), + ExcludeFilter(name=str(dirb) + "/**", exclude=False, is_path=True), + ExcludeFilter(name=str(dira) + "/**", exclude=True, is_path=True), + ExcludeFilter(name="**/foo/*.py", exclude=False, is_path=True), + ExcludeFilter(name="bar.foo", exclude=False, is_path=False), + ExcludeFilter(name="bar", exclude=True, is_path=False), ] diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_io.py b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_io.py index b8608ef91..3f3b157e3 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_io.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_pydevd_io.py @@ -5,9 +5,8 @@ def test_io_redirector(): - class MyRedirection1(object): - encoding = 'foo' + encoding = "foo" class MyRedirection2(object): pass @@ -15,25 +14,24 @@ class MyRedirection2(object): my_redirector = IORedirector(MyRedirection1(), MyRedirection2(), wrap_buffer=True) none_redirector = IORedirector(None, None, wrap_buffer=True) - assert my_redirector.encoding == 'foo' + assert my_redirector.encoding == "foo" with pytest.raises(AttributeError): none_redirector.encoding # Check that we don't fail creating the IORedirector if the original # doesn't have a 'buffer'. for redirector in ( - my_redirector, - none_redirector, - ): - redirector.write('test') + my_redirector, + none_redirector, + ): + redirector.write("test") redirector.flush() assert not redirector.isatty() class _DummyWriter(object): - - __slots__ = ['commands', 'command_meanings'] + __slots__ = ["commands", "command_meanings"] def __init__(self): self.commands = [] @@ -41,13 +39,13 @@ def __init__(self): def add_command(self, cmd): from _pydevd_bundle.pydevd_comm import ID_TO_MEANING + meaning = ID_TO_MEANING[str(cmd.id)] self.command_meanings.append(meaning) self.commands.append(cmd) class _DummyPyDb(object): - def __init__(self): self.cmd_factory = NetCommandFactory() self.writer = _DummyWriter() @@ -64,18 +62,17 @@ class _Stub(object): actions = [] class OriginalStdin(object): - def readline(self): # On a readline we keep the patched version. assert sys_mod.stdin is not original_stdin - actions.append('readline') - return 'read' + actions.append("readline") + return "read" def getpass_stub(*args, **kwargs): # On getpass we need to revert to the original version. - actions.append('getpass') + actions.append("getpass") assert sys_mod.stdin is original_stdin - return 'pass' + return "pass" sys_mod = _Stub() original_stdin = sys_mod.stdin = OriginalStdin() @@ -85,15 +82,15 @@ def getpass_stub(*args, **kwargs): _internal_patch_stdin(py_db, sys_mod, getpass_mod) - assert sys_mod.stdin.readline() == 'read' + assert sys_mod.stdin.readline() == "read" - assert py_db.writer.command_meanings == ['CMD_INPUT_REQUESTED', 'CMD_INPUT_REQUESTED'] + assert py_db.writer.command_meanings == ["CMD_INPUT_REQUESTED", "CMD_INPUT_REQUESTED"] del py_db.writer.command_meanings[:] - assert actions == ['readline'] + assert actions == ["readline"] del actions[:] - assert getpass_mod.getpass() == 'pass' - assert py_db.writer.command_meanings == ['CMD_INPUT_REQUESTED', 'CMD_INPUT_REQUESTED'] + assert getpass_mod.getpass() == "pass" + assert py_db.writer.command_meanings == ["CMD_INPUT_REQUESTED", "CMD_INPUT_REQUESTED"] del py_db.writer.command_meanings[:] @@ -101,29 +98,29 @@ def test_debug_console(): from _pydev_bundle.pydev_console_utils import DebugConsoleStdIn class OriginalStdin(object): - def readline(self): - return 'read' + return "read" original_stdin = OriginalStdin() py_db = _DummyPyDb() debug_console_std_in = DebugConsoleStdIn(py_db, original_stdin) - assert debug_console_std_in.readline() == 'read' + assert debug_console_std_in.readline() == "read" - assert py_db.writer.command_meanings == ['CMD_INPUT_REQUESTED', 'CMD_INPUT_REQUESTED'] + assert py_db.writer.command_meanings == ["CMD_INPUT_REQUESTED", "CMD_INPUT_REQUESTED"] del py_db.writer.command_meanings[:] with debug_console_std_in.notify_input_requested(): with debug_console_std_in.notify_input_requested(): pass - assert py_db.writer.command_meanings == ['CMD_INPUT_REQUESTED', 'CMD_INPUT_REQUESTED'] + assert py_db.writer.command_meanings == ["CMD_INPUT_REQUESTED", "CMD_INPUT_REQUESTED"] @pytest.yield_fixture def _redirect_context(): from _pydevd_bundle.pydevd_io import RedirectToPyDBIoMessages from _pydevd_bundle.pydevd_io import _RedirectionsHolder + py_db = _DummyPyDb() _original_get_pydb = RedirectToPyDBIoMessages.get_pydb @@ -141,7 +138,7 @@ def _redirect_context(): original_stdout = sys.stdout original_stderr = sys.stderr - yield {'py_db': py_db} + yield {"py_db": py_db} sys.stdout = original_stdout sys.stderr = original_stderr @@ -159,44 +156,44 @@ def test_redirect_to_pyd_io_messages_basic(_redirect_context): from _pydevd_bundle.pydevd_io import stop_redirect_stream_to_pydb_io_messages from _pydevd_bundle.pydevd_io import _RedirectionsHolder - py_db = _redirect_context['py_db'] + py_db = _redirect_context["py_db"] - redirect_stream_to_pydb_io_messages(std='stdout') + redirect_stream_to_pydb_io_messages(std="stdout") assert len(_RedirectionsHolder._stack_stdout) == 1 assert _RedirectionsHolder._pydevd_stdout_redirect_ is not None - sys.stdout.write('aaa') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE'] + sys.stdout.write("aaa") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE"] with redirect_stream_to_pydb_io_messages_context(): assert len(_RedirectionsHolder._stack_stdout) == 1 assert _RedirectionsHolder._pydevd_stdout_redirect_ is not None - sys.stdout.write('bbb') + sys.stdout.write("bbb") - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE', 'CMD_WRITE_TO_CONSOLE'] + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE", "CMD_WRITE_TO_CONSOLE"] assert len(_RedirectionsHolder._stack_stdout) == 1 assert _RedirectionsHolder._pydevd_stdout_redirect_ is not None - sys.stdout.write('ccc') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE', 'CMD_WRITE_TO_CONSOLE', 'CMD_WRITE_TO_CONSOLE'] + sys.stdout.write("ccc") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE", "CMD_WRITE_TO_CONSOLE", "CMD_WRITE_TO_CONSOLE"] - stop_redirect_stream_to_pydb_io_messages(std='stdout') + stop_redirect_stream_to_pydb_io_messages(std="stdout") assert len(_RedirectionsHolder._stack_stdout) == 0 assert _RedirectionsHolder._pydevd_stdout_redirect_ is None - sys.stdout.write('ddd') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE', 'CMD_WRITE_TO_CONSOLE', 'CMD_WRITE_TO_CONSOLE'] + sys.stdout.write("ddd") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE", "CMD_WRITE_TO_CONSOLE", "CMD_WRITE_TO_CONSOLE"] -@pytest.mark.parametrize('std', ['stderr', 'stdout']) +@pytest.mark.parametrize("std", ["stderr", "stdout"]) def test_redirect_to_pyd_io_messages_user_change_stdout(_redirect_context, std): from _pydevd_bundle.pydevd_io import redirect_stream_to_pydb_io_messages from _pydevd_bundle.pydevd_io import stop_redirect_stream_to_pydb_io_messages from _pydevd_bundle.pydevd_io import _RedirectionsHolder - py_db = _redirect_context['py_db'] - stack = getattr(_RedirectionsHolder, '_stack_%s' % (std,)) + py_db = _redirect_context["py_db"] + stack = getattr(_RedirectionsHolder, "_stack_%s" % (std,)) def get_redirect(): - return getattr(_RedirectionsHolder, '_pydevd_%s_redirect_' % (std,)) + return getattr(_RedirectionsHolder, "_pydevd_%s_redirect_" % (std,)) def write(s): getattr(sys, std).write(s) @@ -204,22 +201,22 @@ def write(s): redirect_stream_to_pydb_io_messages(std=std) assert len(stack) == 1 assert get_redirect() is not None - write('aaa') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE'] + write("aaa") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE"] from io import StringIO + stream = StringIO() setattr(sys, std, stream) - write(u'bbb') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE'] - assert stream.getvalue() == u'bbb' + write("bbb") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE"] + assert stream.getvalue() == "bbb" # i.e.: because the user changed the sys.stdout, we cannot change it to our previous version. stop_redirect_stream_to_pydb_io_messages(std=std) assert len(stack) == 0 assert get_redirect() is None - write(u'ccc') - assert py_db.writer.command_meanings == ['CMD_WRITE_TO_CONSOLE'] - assert stream.getvalue() == u'bbbccc' - + write("ccc") + assert py_db.writer.command_meanings == ["CMD_WRITE_TO_CONSOLE"] + assert stream.getvalue() == "bbbccc" diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py b/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py index 1e6b41349..1266caf43 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_resolvers.py @@ -7,93 +7,95 @@ def check_len_entry(len_entry, first_2_params): assert len_entry[:2] == first_2_params assert callable(len_entry[2]) - assert len_entry[2]('check') == 'len(check)' + assert len_entry[2]("check") == "len(check)" def test_dict_resolver(): from _pydevd_bundle.pydevd_resolver import DictResolver + dict_resolver = DictResolver() - dct = {(1, 2): 2, u'22': 22} + dct = {(1, 2): 2, "22": 22} contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol(dict_resolver.get_contents_debug_adapter_protocol(dct)) len_entry = contents_debug_adapter_protocol.pop(-1) check_len_entry(len_entry, (GENERATED_LEN_ATTR_NAME, 2)) if IS_PY36_OR_GREATER: - assert contents_debug_adapter_protocol == [ - ('(1, 2)', 2, '[(1, 2)]'), ("'22'", 22, "['22']")] + assert contents_debug_adapter_protocol == [("(1, 2)", 2, "[(1, 2)]"), ("'22'", 22, "['22']")] else: - assert contents_debug_adapter_protocol == [ - ("'22'", 22, "['22']"), ('(1, 2)', 2, '[(1, 2)]')] + assert contents_debug_adapter_protocol == [("'22'", 22, "['22']"), ("(1, 2)", 2, "[(1, 2)]")] def test_dict_resolver_hex(): from _pydevd_bundle.pydevd_resolver import DictResolver + dict_resolver = DictResolver() dct = {(1, 10, 100): (10000, 100000, 100000)} contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol( - dict_resolver.get_contents_debug_adapter_protocol(dct, fmt={'hex': True})) + dict_resolver.get_contents_debug_adapter_protocol(dct, fmt={"hex": True}) + ) len_entry = contents_debug_adapter_protocol.pop(-1) check_len_entry(len_entry, (GENERATED_LEN_ATTR_NAME, 1)) assert contents_debug_adapter_protocol == [ - ('(0x1, 0xa, 0x64)', (10000, 100000, 100000), '[(1, 10, 100)]'), ] + ("(0x1, 0xa, 0x64)", (10000, 100000, 100000), "[(1, 10, 100)]"), + ] def test_object_resolver_simple(): from _pydevd_bundle.pydevd_resolver import DefaultResolver + default_resolver = DefaultResolver() class MyObject(object): - def __init__(self): self.a = 10 self.b = 20 obj = MyObject() dictionary = clear_contents_dictionary(default_resolver.get_dictionary(obj)) - assert dictionary == {'a': 10, 'b': 20} + assert dictionary == {"a": 10, "b": 20} contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol(default_resolver.get_contents_debug_adapter_protocol(obj)) - assert contents_debug_adapter_protocol == [('a', 10, '.a'), ('b', 20, '.b')] + assert contents_debug_adapter_protocol == [("a", 10, ".a"), ("b", 20, ".b")] def test_object_resolver_error(): from _pydevd_bundle.pydevd_resolver import DefaultResolver + default_resolver = DefaultResolver() class MyObject(object): - def __init__(self): self.a = 10 def __dir__(self): - return ['a', 'b'] + return ["a", "b"] def __getattribute__(self, attr_name): - if attr_name == 'b': - raise RuntimeError('unavailable') + if attr_name == "b": + raise RuntimeError("unavailable") return object.__getattribute__(self, attr_name) obj = MyObject() dictionary = default_resolver.get_dictionary(obj) - b_value = dictionary.pop('b') - assert dictionary == {'a': 10} - assert "raise RuntimeError('unavailable')" in b_value + b_value = dictionary.pop("b") + assert dictionary == {"a": 10} + assert 'raise RuntimeError("unavailable")' in b_value contents_debug_adapter_protocol = default_resolver.get_contents_debug_adapter_protocol(obj) b_value = contents_debug_adapter_protocol.pop(-1) - assert contents_debug_adapter_protocol == [('a', 10, '.a')] - assert b_value[0] == 'b' - assert "raise RuntimeError('unavailable')" in b_value[1] - assert b_value[2] == '.b' + assert contents_debug_adapter_protocol == [("a", 10, ".a")] + assert b_value[0] == "b" + assert 'raise RuntimeError("unavailable")' in b_value[1] + assert b_value[2] == ".b" def test_object_resolver_hasattr_error(): from _pydevd_bundle.pydevd_resolver import DefaultResolver from _pydevd_bundle.pydevd_xml import get_type + default_resolver = DefaultResolver() class MyObject(object): - def __getattribute__(self, attr_name): raise RuntimeError() @@ -102,53 +104,51 @@ def __getattribute__(self, attr_name): assert dictionary == {} _type_object, type_name, _resolver = get_type(obj) - assert type_name == 'MyObject' + assert type_name == "MyObject" def test_object_resolver__dict__non_strings(): from _pydevd_bundle.pydevd_resolver import DefaultResolver + default_resolver = DefaultResolver() class MyObject(object): - def __init__(self): self.__dict__[(1, 2)] = (3, 4) obj = MyObject() dictionary = clear_contents_dictionary(default_resolver.get_dictionary(obj)) - assert dictionary == {'(1, 2)': (3, 4)} + assert dictionary == {"(1, 2)": (3, 4)} - contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol( - default_resolver.get_contents_debug_adapter_protocol(obj)) - assert contents_debug_adapter_protocol == [('(1, 2)', (3, 4), '.__dict__[(1, 2)]')] + contents_debug_adapter_protocol = clear_contents_debug_adapter_protocol(default_resolver.get_contents_debug_adapter_protocol(obj)) + assert contents_debug_adapter_protocol == [("(1, 2)", (3, 4), ".__dict__[(1, 2)]")] def test_django_forms_resolver(): from _pydevd_bundle.pydevd_resolver import DjangoFormResolver + django_form_resolver = DjangoFormResolver() class MyObject(object): - def __init__(self): self.__dict__[(1, 2)] = (3, 4) - self.__dict__['errors'] = 'foo' + self.__dict__["errors"] = "foo" obj = MyObject() dictionary = clear_contents_dictionary(django_form_resolver.get_dictionary(obj)) - assert dictionary == {'(1, 2)': (3, 4), 'errors': None} + assert dictionary == {"(1, 2)": (3, 4), "errors": None} - obj._errors = 'bar' + obj._errors = "bar" dictionary = clear_contents_dictionary(django_form_resolver.get_dictionary(obj)) - assert dictionary == {'(1, 2)': (3, 4), 'errors': 'bar', '_errors': 'bar'} + assert dictionary == {"(1, 2)": (3, 4), "errors": "bar", "_errors": "bar"} def clear_contents_debug_adapter_protocol(contents_debug_adapter_protocol): lst = [] for x in contents_debug_adapter_protocol: - if not x[0].startswith('__'): - - if '= 7: +if hasattr(pytest, "version_tuple") and pytest.version_tuple[0] >= 7: @pytest.fixture def testdir_or_pytester(pytester): @@ -29,34 +28,49 @@ def test_run(testdir_or_pytester): import sys import os - foo_dir = debugger_unittest._get_debugger_test_file(os.path.join('resources', 'launch', 'foo')) - foo_module = 'tests_python.resources.launch.foo' + foo_dir = debugger_unittest._get_debugger_test_file(os.path.join("resources", "launch", "foo")) + foo_module = "tests_python.resources.launch.foo" pydevd_dir = os.path.dirname(os.path.dirname(__file__)) - assert os.path.exists(os.path.join(pydevd_dir, 'pydevd.py')) + assert os.path.exists(os.path.join(pydevd_dir, "pydevd.py")) - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys sys.path.append(%(pydevd_dir)r) import pydevd py_db = pydevd.PyDB() py_db.ready_to_run = True py_db.run(%(foo_dir)r) -''' % locals())) - - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' +""" + % locals() + ), + ) + + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys sys.path.append(%(pydevd_dir)r) import pydevd py_db = pydevd.PyDB() py_db.run(%(foo_dir)r, set_trace=False) -''' % locals())) +""" + % locals() + ), + ) if sys.version_info[0:2] == (2, 6): # Not valid for Python 2.6 return - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys sys.path.append(%(pydevd_dir)r) sys.argv.append('--as-module') @@ -64,16 +78,25 @@ def test_run(testdir_or_pytester): py_db = pydevd.PyDB() py_db.ready_to_run = True py_db.run(%(foo_module)r, is_module=True) -''' % locals())) - - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' +""" + % locals() + ), + ) + + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys sys.argv.append('--as-module') sys.path.append(%(pydevd_dir)r) import pydevd py_db = pydevd.PyDB() py_db.run(%(foo_module)r, is_module=True, set_trace=False) -''' % locals())) +""" + % locals() + ), + ) def test_run_on_local_module_without_adding_to_pythonpath(testdir_or_pytester): @@ -81,13 +104,16 @@ def test_run_on_local_module_without_adding_to_pythonpath(testdir_or_pytester): import os pydevd_dir = os.path.dirname(os.path.dirname(__file__)) - assert os.path.exists(os.path.join(pydevd_dir, 'pydevd.py')) + assert os.path.exists(os.path.join(pydevd_dir, "pydevd.py")) - foo_module = 'local_foo' - with open(os.path.join(os.getcwd(), 'local_foo.py'), 'w') as stream: + foo_module = "local_foo" + with open(os.path.join(os.getcwd(), "local_foo.py"), "w") as stream: stream.write('print("WorkedLocalFoo")') - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys import os sys.path.append(%(pydevd_dir)r) @@ -99,9 +125,16 @@ def test_run_on_local_module_without_adding_to_pythonpath(testdir_or_pytester): py_db = pydevd.PyDB() py_db.ready_to_run = True py_db.run(%(foo_module)r, is_module=True) -''' % locals()), check_for='WorkedLocalFoo') - - _run_and_check(testdir_or_pytester, testdir_or_pytester.makepyfile(''' +""" + % locals() + ), + check_for="WorkedLocalFoo", + ) + + _run_and_check( + testdir_or_pytester, + testdir_or_pytester.makepyfile( + """ import sys import os sys.argv.append('--as-module') @@ -112,4 +145,8 @@ def test_run_on_local_module_without_adding_to_pythonpath(testdir_or_pytester): import pydevd py_db = pydevd.PyDB() py_db.run(%(foo_module)r, is_module=True, set_trace=False) -''' % locals()), check_for='WorkedLocalFoo') +""" + % locals() + ), + check_for="WorkedLocalFoo", + ) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_safe_repr.py b/src/debugpy/_vendored/pydevd/tests_python/test_safe_repr.py index 9356e40fb..cc5de09ea 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_safe_repr.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_safe_repr.py @@ -18,15 +18,21 @@ class SafeReprTestBase(object): - saferepr = SafeRepr() def assert_saferepr(self, value, expected): safe = self.saferepr(value) if len(safe) != len(expected): - raise AssertionError('Expected:\n%s\nFound:\n%s\n Expected len: %s Found len: %s' % ( - expected, safe, len(expected), len(safe),)) + raise AssertionError( + "Expected:\n%s\nFound:\n%s\n Expected len: %s Found len: %s" + % ( + expected, + safe, + len(expected), + len(safe), + ) + ) assert safe == expected return safe @@ -62,7 +68,6 @@ def assert_shortened_regex(self, value, expected): class TestSafeRepr(SafeReprTestBase): - def test_collection_types(self): colltypes = [t for t, _, _, _ in SafeRepr.collection_types] @@ -75,9 +80,8 @@ def test_collection_types(self): ] def test_largest_repr(self): - # Find the largest possible repr and ensure it is below our arbitrary - # limit (8KB). - coll = '-' * (SafeRepr.maxstring_outer * 2) + # Find the largest possible repr and make sure it works + coll = "-" * (SafeRepr.maxstring_outer * 2) for limit in reversed(SafeRepr.maxcollection[1:]): coll = [coll] * (limit * 2) dcoll = {} @@ -92,74 +96,69 @@ def test_largest_repr(self): # print('len(SafeRepr()(dcoll)) = ' + str(len(text)) + # ', len(repr(coll)) = ' + str(len(text_repr))) - assert len(text) < 8192 + assert len(text) <= 158538 class TestStrings(SafeReprTestBase): - def test_str_small(self): - value = 'A' * 5 + value = "A" * 5 self.assert_unchanged(value, "'AAAAA'") self.assert_unchanged([value], "['AAAAA']") def test_str_large(self): - value = 'A' * (SafeRepr.maxstring_outer + 10) + value = "A" * (SafeRepr.maxstring_outer + 10) - self.assert_shortened(value, - "'" + 'A' * 43690 + "..." + 'A' * 21845 + "'") - self.assert_shortened([value], "['AAAAAAAAAAAAAAAAAAAA...AAAAAAAAAA']") + self.assert_shortened(value, "'" + "A" * 43690 + "..." + "A" * 21845 + "'") + self.assert_shortened([value], "['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']") def test_str_largest_unchanged(self): - value = 'A' * (SafeRepr.maxstring_outer) + value = "A" * (SafeRepr.maxstring_outer) - self.assert_unchanged(value, "'" + 'A' * 65536 + "'") + self.assert_unchanged(value, "'" + "A" * 65536 + "'") def test_str_smallest_changed(self): - value = 'A' * (SafeRepr.maxstring_outer + 1) + value = "A" * (SafeRepr.maxstring_outer + 1) - self.assert_shortened(value, - "'" + 'A' * 43690 + "..." + 'A' * 21845 + "'") + self.assert_shortened(value, "'" + "A" * 43690 + "..." + "A" * 21845 + "'") def test_str_list_largest_unchanged(self): - value = 'A' * (SafeRepr.maxstring_inner) + value = "A" * (SafeRepr.maxstring_inner) - self.assert_unchanged([value], "['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']") + self.assert_unchanged([value], "['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']") def test_str_list_smallest_changed(self): - value = 'A' * (SafeRepr.maxstring_inner + 1) + value = "A" * (SafeRepr.maxstring_inner + 1) - self.assert_shortened([value], "['AAAAAAAAAAAAAAAAAAAA...AAAAAAAAAA']") + self.assert_shortened([value], "['AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']") - @pytest.mark.skipif(sys.version_info > (3, 0), reason='Py2 specific test') + @pytest.mark.skipif(sys.version_info > (3, 0), reason="Py2 specific test") def test_unicode_small(self): - value = u'A' * 5 + value = "A" * 5 self.assert_unchanged(value, "u'AAAAA'") self.assert_unchanged([value], "[u'AAAAA']") - @pytest.mark.skipif(sys.version_info > (3, 0), reason='Py2 specific test') + @pytest.mark.skipif(sys.version_info > (3, 0), reason="Py2 specific test") def test_unicode_large(self): - value = u'A' * (SafeRepr.maxstring_outer + 10) + value = "A" * (SafeRepr.maxstring_outer + 10) - self.assert_shortened(value, - "u'" + 'A' * 43690 + "..." + 'A' * 21845 + "'") + self.assert_shortened(value, "u'" + "A" * 43690 + "..." + "A" * 21845 + "'") self.assert_shortened([value], "[u'AAAAAAAAAAAAAAAAAAAA...AAAAAAAAAA']") - @pytest.mark.skipif(sys.version_info < (3, 0), reason='Py3 specific test') + @pytest.mark.skipif(sys.version_info < (3, 0), reason="Py3 specific test") def test_bytes_small(self): - value = b'A' * 5 + value = b"A" * 5 self.assert_unchanged(value, "b'AAAAA'") self.assert_unchanged([value], "[b'AAAAA']") - @pytest.mark.skipif(sys.version_info < (3, 0), reason='Py3 specific test') + @pytest.mark.skipif(sys.version_info < (3, 0), reason="Py3 specific test") def test_bytes_large(self): - value = b'A' * (SafeRepr.maxstring_outer + 10) + value = b"A" * (SafeRepr.maxstring_outer + 10) - self.assert_shortened(value, - "b'" + 'A' * 43690 + "..." + 'A' * 21845 + "'") - self.assert_shortened([value], "[b'AAAAAAAAAAAAAAAAAAAA...AAAAAAAAAA']") + self.assert_shortened(value, "b'" + "A" * 43690 + "..." + "A" * 21845 + "'") + self.assert_shortened([value], "[b'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']") # @pytest.mark.skip(reason='not written') # TODO: finish! # def test_bytearray_small(self): @@ -171,22 +170,22 @@ def test_bytes_large(self): class RawValueTests(SafeReprTestBase): - def setUp(self): super(RawValueTests, self).setUp() self.saferepr.raw_value = True def test_unicode_raw(self): - value = u'A\u2000' * 10000 + value = "A\u2000" * 10000 self.assert_saferepr(value, value) def test_bytes_raw(self): - value = b'A' * 10000 - self.assert_saferepr(value, value.decode('ascii')) + value = b"A" * 10000 + self.assert_saferepr(value, value.decode("ascii")) def test_bytearray_raw(self): - value = bytearray(b'A' * 5) - self.assert_saferepr(value, value.decode('ascii')) + value = bytearray(b"A" * 5) + self.assert_saferepr(value, value.decode("ascii")) + # class TestNumbers(SafeReprTestBase): # @@ -204,7 +203,6 @@ def test_bytearray_raw(self): class ContainerBase(object): - CLASS = None LEFT = None RIGHT = None @@ -220,17 +218,17 @@ def info(self): type(self)._info = info return info else: - raise TypeError('unsupported') + raise TypeError("unsupported") def _combine(self, items, prefix, suffix, large): - contents = ', '.join(str(item) for item in items) + contents = ", ".join(str(item) for item in items) if large: - contents += ', ...' + contents += ", ..." return prefix + contents + suffix def combine(self, items, large=False): if self.LEFT is None: - pytest.skip('unsupported') + pytest.skip("unsupported") return self._combine(items, self.LEFT, self.RIGHT, large=large) def combine_nested(self, depth, items, large=False): @@ -306,76 +304,71 @@ def test_nested(self): class TestTuples(ContainerBase, SafeReprTestBase): - CLASS = tuple - LEFT = '(' - RIGHT = ')' + LEFT = "(" + RIGHT = ")" class TestLists(ContainerBase, SafeReprTestBase): - CLASS = list - LEFT = '[' - RIGHT = ']' + LEFT = "[" + RIGHT = "]" def test_directly_recursive(self): value = [1, 2] value.append(value) - self.assert_unchanged(value, '[1, 2, [...]]') + self.assert_unchanged(value, "[1, 2, [...]]") def test_indirectly_recursive(self): value = [1, 2] value.append([value]) - self.assert_unchanged(value, '[1, 2, [[...]]]') + self.assert_unchanged(value, "[1, 2, [[...]]]") class TestFrozensets(ContainerBase, SafeReprTestBase): - CLASS = frozenset class TestSets(ContainerBase, SafeReprTestBase): - CLASS = set if PY_VER != 2: - LEFT = '{' - RIGHT = '}' + LEFT = "{" + RIGHT = "}" def test_nested(self): - pytest.skip('unsupported') + pytest.skip("unsupported") def test_large_nested(self): - pytest.skip('unsupported') + pytest.skip("unsupported") class TestDicts(SafeReprTestBase): - def test_large_key(self): value = { - 'a' * SafeRepr.maxstring_inner * 3: '', + "a" * SafeRepr.maxstring_inner * 3: "", } self.assert_shortened_regex(value, r"{'a+\.\.\.a+': ''}") def test_large_value(self): value = { - '': 'a' * SafeRepr.maxstring_inner * 2, + "": "a" * SafeRepr.maxstring_inner * 2, } self.assert_shortened_regex(value, r"{'': 'a+\.\.\.a+'}") def test_large_both(self): value = {} - key = 'a' * SafeRepr.maxstring_inner * 2 + key = "a" * SafeRepr.maxstring_inner * 2 value[key] = key self.assert_shortened_regex(value, r"{'a+\.\.\.a+': 'a+\.\.\.a+'}") def test_nested_value(self): d1 = {} - d1_key = 'a' * SafeRepr.maxstring_inner * 2 + d1_key = "a" * SafeRepr.maxstring_inner * 2 d1[d1_key] = d1_key d2 = {d1_key: d1} d3 = {d1_key: d2} @@ -388,20 +381,20 @@ def test_nested_value(self): def test_empty(self): # Ensure empty dicts work - self.assert_unchanged({}, '{}') + self.assert_unchanged({}, "{}") def test_sorted(self): # Ensure dict keys are sorted d1 = {} - d1['c'] = None - d1['b'] = None - d1['a'] = None + d1["c"] = None + d1["b"] = None + d1["a"] = None if IS_PY36_OR_GREATER: self.assert_saferepr(d1, "{'c': None, 'b': None, 'a': None}") else: self.assert_saferepr(d1, "{'a': None, 'b': None, 'c': None}") - @pytest.mark.skipif(sys.version_info < (3, 0), reason='Py3 specific test') + @pytest.mark.skipif(sys.version_info < (3, 0), reason="Py3 specific test") def test_unsortable_keys(self): # Ensure dicts with unsortable keys do not crash d1 = {} @@ -415,13 +408,13 @@ def test_directly_recursive(self): value = {1: None} value[2] = value - self.assert_unchanged(value, '{1: None, 2: {...}}') + self.assert_unchanged(value, "{1: None, 2: {...}}") def test_indirectly_recursive(self): value = {1: None} value[2] = {3: value} - self.assert_unchanged(value, '{1: None, 2: {3: {...}}}') + self.assert_unchanged(value, "{1: None, 2: {3: {...}}}") class TestOtherPythonTypes(SafeReprTestBase): @@ -448,24 +441,22 @@ def test_range_small(self): range_name = range.__name__ value = range(1, 42) - self.assert_unchanged(value, '%s(1, 42)' % (range_name,)) + self.assert_unchanged(value, "%s(1, 42)" % (range_name,)) - @pytest.mark.skipif(sys.version_info < (3, 0), reason='Py3 specific test') + @pytest.mark.skipif(sys.version_info < (3, 0), reason="Py3 specific test") def test_range_large_stop_only(self): range_name = range.__name__ stop = SafeRepr.maxcollection[0] value = range(stop) - self.assert_unchanged(value, - '%s(0, %s)' % (range_name, stop)) + self.assert_unchanged(value, "%s(0, %s)" % (range_name, stop)) def test_range_large_with_start(self): range_name = range.__name__ stop = SafeRepr.maxcollection[0] + 1 value = range(1, stop) - self.assert_unchanged(value, - '%s(1, %s)' % (range_name, stop)) + self.assert_unchanged(value, "%s(1, %s)" % (range_name, stop)) # @pytest.mark.skip(reason='not written') # TODO: finish! # def test_named_struct(self): @@ -483,11 +474,8 @@ def test_range_large_with_start(self): class TestUserDefinedObjects(SafeReprTestBase): - def test_broken_repr(self): - class TestClass(object): - def __repr__(self): raise NameError @@ -498,18 +486,15 @@ def __repr__(self): self.assert_saferepr(value, object.__repr__(value)) def test_large(self): - class TestClass(object): - def __repr__(self): - return '<' + 'A' * SafeRepr.maxother_outer * 2 + '>' + return "<" + "A" * SafeRepr.maxother_outer * 2 + ">" value = TestClass() - self.assert_shortened_regex(value, r'\') + self.assert_shortened_regex(value, r"\") def test_inherit_repr(self): - class TestClass(dict): pass @@ -520,66 +505,57 @@ class TestClass2(list): value_list = TestClass2() - self.assert_unchanged(value_dict, '{}') - self.assert_unchanged(value_list, '[]') + self.assert_unchanged(value_dict, "{}") + self.assert_unchanged(value_list, "[]") def test_custom_repr(self): - class TestClass(dict): - def __repr__(self): - return 'MyRepr' + return "MyRepr" value1 = TestClass() class TestClass2(list): - def __repr__(self): - return 'MyRepr' + return "MyRepr" value2 = TestClass2() - self.assert_unchanged(value1, 'MyRepr') - self.assert_unchanged(value2, 'MyRepr') + self.assert_unchanged(value1, "MyRepr") + self.assert_unchanged(value2, "MyRepr") def test_custom_repr_many_items(self): - class TestClass(list): - def __init__(self, it=()): list.__init__(self, it) def __repr__(self): - return 'MyRepr' + return "MyRepr" value1 = TestClass(range(0, 15)) value2 = TestClass(range(0, 16)) value3 = TestClass([TestClass(range(0, 10))]) value4 = TestClass([TestClass(range(0, 11))]) - self.assert_unchanged(value1, 'MyRepr') - self.assert_shortened(value2, '') - self.assert_unchanged(value3, 'MyRepr') - self.assert_shortened(value4, '') + self.assert_unchanged(value1, "MyRepr") + self.assert_unchanged(value3, "MyRepr") def test_custom_repr_large_item(self): - class TestClass(list): - def __init__(self, it=()): list.__init__(self, it) def __repr__(self): - return 'MyRepr' + return "MyRepr" - value1 = TestClass(['a' * (SafeRepr.maxcollection[1] + 1)]) - value2 = TestClass(['a' * (SafeRepr.maxstring_inner + 1)]) + value1 = TestClass(["a" * (SafeRepr.maxcollection[1] + 1)]) + value2 = TestClass(["a" * (SafeRepr.maxstring_inner + 1)]) - self.assert_unchanged(value1, 'MyRepr') - self.assert_shortened(value2, '') + self.assert_unchanged(value1, "MyRepr") + self.assert_shortened(value2, "") -@pytest.mark.skipif(np is None, reason='could not import numpy') +@pytest.mark.skipif(np is None, reason="could not import numpy") class TestNumpy(SafeReprTestBase): # numpy types should all use their native reprs, even arrays # exceeding limits. @@ -600,33 +576,34 @@ def test_zeros(self): self.assert_unchanged(value, repr(value)) -@pytest.mark.parametrize('params', [ - {'maxother_outer': 20, 'input': "😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄FFFFFFFF", 'output': '😄😄😄😄😄😄😄😄😄😄😄😄😄...FFFFFF'}, - {'maxother_outer': 10, 'input': "😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄FFFFFFFF", 'output': '😄😄😄😄😄😄...FFF'}, - {'maxother_outer': 10, 'input': u"������������FFFFFFFF", 'output': u"������...FFF"}, - - # Because we can't return bytes, byte-related tests aren't needed (and str works as it should). -]) -@pytest.mark.parametrize('use_str', [True, False]) +@pytest.mark.parametrize( + "params", + [ + {"maxother_outer": 20, "input": "😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄FFFFFFFF", "output": "😄😄😄😄😄😄😄😄😄😄😄😄😄...FFFFFF"}, + {"maxother_outer": 10, "input": "😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄😄FFFFFFFF", "output": "😄😄😄😄😄😄...FFF"}, + {"maxother_outer": 10, "input": "������������FFFFFFFF", "output": "������...FFF"}, + # Because we can't return bytes, byte-related tests aren't needed (and str works as it should). + ], +) +@pytest.mark.parametrize("use_str", [True, False]) def test_py3_str_slicing(params, use_str): # Note: much simpler in python because __repr__ is required to return str safe_repr = SafeRepr() - safe_repr.locale_preferred_encoding = 'ascii' - safe_repr.sys_stdout_encoding = params.get('sys_stdout_encoding', 'ascii') + safe_repr.locale_preferred_encoding = "ascii" + safe_repr.sys_stdout_encoding = params.get("sys_stdout_encoding", "ascii") - safe_repr.maxother_outer = params['maxother_outer'] + safe_repr.maxother_outer = params["maxother_outer"] if not use_str: class MyObj(object): - def __repr__(self): - return params['input'] + return params["input"] safe_repr_input = MyObj() else: - safe_repr_input = params['input'] - expected_output = params['output'] + safe_repr_input = params["input"] + expected_output = params["output"] computed = safe_repr(safe_repr_input) expected = repr(expected_output) if use_str: @@ -640,25 +617,23 @@ def __repr__(self): def test_raw_bytes(): safe_repr = SafeRepr() safe_repr.raw_value = True - obj = b'\xed\xbd\xbf\xff\xfe\xfa\xfd' + obj = b"\xed\xbd\xbf\xff\xfe\xfa\xfd" raw_value_repr = safe_repr(obj) assert isinstance(raw_value_repr, str) # bytes on py2, str on py3 - assert raw_value_repr == obj.decode('latin1') + assert raw_value_repr == obj.decode("latin1") def test_raw_unicode(): safe_repr = SafeRepr() safe_repr.raw_value = True - obj = u'\xed\xbd\xbf\xff\xfe\xfa\xfd' + obj = "\xed\xbd\xbf\xff\xfe\xfa\xfd" raw_value_repr = safe_repr(obj) assert isinstance(raw_value_repr, str) # bytes on py2, str on py3 assert raw_value_repr == obj def test_no_repr(): - class MyBytes(object): - def __init__(self, contents): self.contents = contents self.errored = None @@ -667,12 +642,12 @@ def __iter__(self): return iter(self.contents) def decode(self, encoding): - self.errored = 'decode called' - raise RuntimeError('Should not be called.') + self.errored = "decode called" + raise RuntimeError("Should not be called.") def __repr__(self): - self.errored = '__repr__ called' - raise RuntimeError('Should not be called.') + self.errored = "__repr__ called" + raise RuntimeError("Should not be called.") def __getitem__(self, *args): return self.contents.__getitem__(*args) @@ -683,8 +658,7 @@ def __len__(self): safe_repr = SafeRepr() safe_repr.string_types = (MyBytes,) safe_repr.bytes = MyBytes - obj = b'f' * (safe_repr.maxstring_outer * 10) + obj = b"f" * (safe_repr.maxstring_outer * 10) my_bytes = MyBytes(obj) raw_value_repr = safe_repr(my_bytes) assert not my_bytes.errored - diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_save_locals.py b/src/debugpy/_vendored/pydevd/tests_python/test_save_locals.py index ed4bd2c4e..93f78abed 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_save_locals.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_save_locals.py @@ -25,13 +25,12 @@ def check_method(fn): x = 1 # The method 'fn' should attempt to set x = 2 in the current frame. - fn('x', 2) + fn("x", 2) return x - -@pytest.mark.skipif(IS_JYTHON or IS_IRONPYTHON, reason='CPython/pypy only') +@pytest.mark.skipif(IS_JYTHON or IS_IRONPYTHON, reason="CPython/pypy only") class TestSetLocals(unittest.TestCase): """ Test setting locals in one function from another function using several approaches. @@ -41,61 +40,56 @@ def test_set_locals_using_save_locals(self): x = check_method(use_save_locals) self.assertEqual(x, 2) # Expected to succeed - def test_frame_simple_change(self): frame = sys._getframe() a = 20 - frame.f_locals['a'] = 50 + frame.f_locals["a"] = 50 save_locals(frame) self.assertEqual(50, a) - def test_frame_co_freevars(self): - outer_var = 20 def func(): frame = sys._getframe() - frame.f_locals['outer_var'] = 50 + frame.f_locals["outer_var"] = 50 save_locals(frame) self.assertEqual(50, outer_var) func() def test_frame_co_cellvars(self): - def check_co_vars(a): frame = sys._getframe() + def function2(): print(a) - assert 'a' in frame.f_code.co_cellvars + assert "a" in frame.f_code.co_cellvars frame = sys._getframe() - frame.f_locals['a'] = 50 + frame.f_locals["a"] = 50 save_locals(frame) self.assertEqual(50, a) check_co_vars(1) - def test_frame_change_in_inner_frame(self): def change(f): self.assertTrue(f is not sys._getframe()) - f.f_locals['a']= 50 + f.f_locals["a"] = 50 save_locals(f) - frame = sys._getframe() a = 20 change(frame) self.assertEqual(50, a) -if __name__ == '__main__': +if __name__ == "__main__": suite = unittest.TestSuite() -# suite.addTest(TestSetLocals('test_set_locals_using_dict')) -# #suite.addTest(Test('testCase10a')) -# unittest.TextTestRunner(verbosity=3).run(suite) + # suite.addTest(TestSetLocals('test_set_locals_using_dict')) + # #suite.addTest(Test('testCase10a')) + # unittest.TextTestRunner(verbosity=3).run(suite) suite = unittest.makeSuite(TestSetLocals) unittest.TextTestRunner(verbosity=3).run(suite) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_schema.py b/src/debugpy/_vendored/pydevd/tests_python/test_schema.py index 54700769b..d146a95e4 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_schema.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_schema.py @@ -1,12 +1,10 @@ -from _pydevd_bundle._debug_adapter.pydevd_schema import InitializeRequest, \ - InitializeRequestArguments, InitializeResponse, Capabilities +from _pydevd_bundle._debug_adapter.pydevd_schema import InitializeRequest, InitializeRequestArguments, InitializeResponse, Capabilities from _pydevd_bundle._debug_adapter import pydevd_schema, pydevd_base_schema from _pydevd_bundle._debug_adapter.pydevd_schema import ThreadsResponse def test_schema(): - - json_msg = ''' + json_msg = """ { "arguments": { "adapterID": "pydevd", @@ -23,49 +21,38 @@ def test_schema(): "command": "initialize", "seq": 1, "type": "request" -}''' +}""" initialize_request = pydevd_base_schema.from_json(json_msg) assert initialize_request.__class__ == InitializeRequest assert initialize_request.arguments.__class__ == InitializeRequestArguments - assert initialize_request.arguments.adapterID == 'pydevd' - assert initialize_request.command == 'initialize' - assert initialize_request.type == 'request' + assert initialize_request.arguments.adapterID == "pydevd" + assert initialize_request.command == "initialize" + assert initialize_request.type == "request" assert initialize_request.seq == 1 response = pydevd_base_schema.build_response(initialize_request) assert response.__class__ == InitializeResponse assert response.seq == -1 # Must be set before sending - assert response.command == 'initialize' - assert response.type == 'response' + assert response.command == "initialize" + assert response.type == "response" assert response.body.__class__ == Capabilities - assert response.to_dict() == { - "seq":-1, - "type": "response", - "request_seq": 1, - "success": True, - "command": "initialize", - "body": {} - } + assert response.to_dict() == {"seq": -1, "type": "response", "request_seq": 1, "success": True, "command": "initialize", "body": {}} capabilities = response.body # : :type capabilities: Capabilities capabilities.supportsCompletionsRequest = True assert response.to_dict() == { - "seq":-1, + "seq": -1, "type": "response", "request_seq": 1, "success": True, "command": "initialize", - "body": {'supportsCompletionsRequest':True} + "body": {"supportsCompletionsRequest": True}, } initialize_event = pydevd_schema.InitializedEvent() - assert initialize_event.to_dict() == { - "seq":-1, - "type": "event", - "event": "initialized" - } + assert initialize_event.to_dict() == {"seq": -1, "type": "event", "event": "initialized"} def test_schema_translation_frame(): @@ -74,69 +61,75 @@ def test_schema_translation_frame(): stack_trace_request = pydevd_schema.StackTraceRequest(stack_trace_arguments) stackFrames = [ - pydevd_schema.StackFrame(id=2 ** 45, name='foo', line=1, column=1).to_dict(), - pydevd_schema.StackFrame(id=2 ** 46, name='bar', line=1, column=1).to_dict(), + pydevd_schema.StackFrame(id=2**45, name="foo", line=1, column=1).to_dict(), + pydevd_schema.StackFrame(id=2**46, name="bar", line=1, column=1).to_dict(), ] body = pydevd_schema.StackTraceResponseBody(stackFrames) stack_trace_response = pydevd_base_schema.build_response(stack_trace_request, kwargs=dict(body=body)) as_dict = stack_trace_response.to_dict(update_ids_to_dap=True) assert as_dict == { - 'type': 'response', - 'request_seq':-1, - 'success': True, - 'command': 'stackTrace', - 'body': {'stackFrames': [ - {'id': 1, 'name': 'foo', 'line': 1, 'column': 1, 'source': {}}, - {'id': 2, 'name': 'bar', 'line': 1, 'column': 1, 'source': {}}, - ]}, - 'seq':-1} + "type": "response", + "request_seq": -1, + "success": True, + "command": "stackTrace", + "body": { + "stackFrames": [ + {"id": 1, "name": "foo", "line": 1, "column": 1, "source": {}}, + {"id": 2, "name": "bar", "line": 1, "column": 1, "source": {}}, + ] + }, + "seq": -1, + } reconstructed = pydevd_base_schema.from_dict(as_dict, update_ids_from_dap=True) assert reconstructed.to_dict() == { - 'type': 'response', - 'request_seq':-1, - 'success': True, - 'command': 'stackTrace', - 'body': {'stackFrames': [ - {'id': 2 ** 45, 'name': 'foo', 'line': 1, 'column': 1, 'source': {}}, - {'id': 2 ** 46, 'name': 'bar', 'line': 1, 'column': 1, 'source': {}} - ]}, - 'seq':-1 + "type": "response", + "request_seq": -1, + "success": True, + "command": "stackTrace", + "body": { + "stackFrames": [ + {"id": 2**45, "name": "foo", "line": 1, "column": 1, "source": {}}, + {"id": 2**46, "name": "bar", "line": 1, "column": 1, "source": {}}, + ] + }, + "seq": -1, } def test_schema_translation_thread(): from _pydevd_bundle._debug_adapter.pydevd_schema import ThreadsRequest + pydevd_base_schema.BaseSchema.initialize_ids_translation() threads = [ - pydevd_schema.Thread(id=2 ** 45, name='foo').to_dict(), - pydevd_schema.Thread(id=2 ** 46, name='bar').to_dict(), + pydevd_schema.Thread(id=2**45, name="foo").to_dict(), + pydevd_schema.Thread(id=2**46, name="bar").to_dict(), ] body = pydevd_schema.ThreadsResponseBody(threads) threads_request = ThreadsRequest() threads_response = pydevd_base_schema.build_response(threads_request, kwargs=dict(body=body)) as_dict = threads_response.to_dict(update_ids_to_dap=True) assert as_dict == { - 'type': 'response', - 'request_seq':-1, - 'success': True, - 'command': 'threads', - 'body': {'threads': [ - {'id': 1, 'name': 'foo'}, - {'id': 2, 'name': 'bar'}, - ]}, - 'seq':-1} + "type": "response", + "request_seq": -1, + "success": True, + "command": "threads", + "body": { + "threads": [ + {"id": 1, "name": "foo"}, + {"id": 2, "name": "bar"}, + ] + }, + "seq": -1, + } reconstructed = pydevd_base_schema.from_dict(as_dict, update_ids_from_dap=True) assert reconstructed.to_dict() == { - 'type': 'response', - 'request_seq':-1, - 'success': True, - 'command': 'threads', - 'body': {'threads': [ - {'id': 2 ** 45, 'name': 'foo'}, - {'id': 2 ** 46, 'name': 'bar'} - ]}, - 'seq':-1 + "type": "response", + "request_seq": -1, + "success": True, + "command": "threads", + "body": {"threads": [{"id": 2**45, "name": "foo"}, {"id": 2**46, "name": "bar"}]}, + "seq": -1, } diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_single_notification.py b/src/debugpy/_vendored/pydevd/tests_python/test_single_notification.py index 02c48cbc5..d96994e6f 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_single_notification.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_single_notification.py @@ -15,7 +15,6 @@ class _ThreadInfo(object): - next_thread_id = partial(next, itertools.count()) def __init__(self): @@ -25,10 +24,9 @@ def __init__(self): class _CustomSingleNotificationBehavior(AbstractSingleNotificationBehavior): + NOTIFY_OF_PAUSE_TIMEOUT = 0.01 - NOTIFY_OF_PAUSE_TIMEOUT = .01 - - __slots__ = AbstractSingleNotificationBehavior.__slots__ + ['notification_queue'] + __slots__ = AbstractSingleNotificationBehavior.__slots__ + ["notification_queue"] def __init__(self, py_db): try: @@ -41,17 +39,17 @@ def __init__(self, py_db): @overrides(AbstractSingleNotificationBehavior.send_resume_notification) def send_resume_notification(self, *args, **kwargs): # print('put resume', threading.current_thread()) - self.notification_queue.put('resume') + self.notification_queue.put("resume") @overrides(AbstractSingleNotificationBehavior.send_suspend_notification) def send_suspend_notification(self, *args, **kwargs): # print('put suspend', threading.current_thread()) - self.notification_queue.put('suspend') + self.notification_queue.put("suspend") def do_wait_suspend(self, thread_info, stop_reason): with self.notify_thread_suspended(thread_info.thread_id, thread_info.thread, stop_reason=stop_reason): while thread_info.state == STATE_SUSPEND: - time.sleep(.1) + time.sleep(0.1) @pytest.fixture @@ -60,15 +58,15 @@ def _dummy_pydb(): @pytest.fixture( - name='single_notification_behavior', -# params=range(50) # uncomment to run the tests many times. + name="single_notification_behavior", + # params=range(50) # uncomment to run the tests many times. ) def _single_notification_behavior(_dummy_pydb): single_notification_behavior = _CustomSingleNotificationBehavior(_dummy_pydb) return single_notification_behavior -@pytest.fixture(name='notification_queue') +@pytest.fixture(name="notification_queue") def _notification_queue(single_notification_behavior): return single_notification_behavior.notification_queue @@ -83,25 +81,25 @@ def wait_for_notification(notification_queue, msg): found = notification_queue.get(timeout=2) assert found == msg except Empty: - raise AssertionError('Timed out while waiting for %s notification.' % (msg,)) + raise AssertionError("Timed out while waiting for %s notification." % (msg,)) def join_thread(t): __tracebackhide__ = True t.join(2) - assert not t.is_alive(), 'Thread still alive after timeout.s' + assert not t.is_alive(), "Thread still alive after timeout.s" class _DummyPyDB(object): - def __init__(self): from _pydevd_bundle.pydevd_timeout import TimeoutTracker + self.created_pydb_daemon_threads = {} self.timeout_tracker = TimeoutTracker(self) def test_single_notification_1(single_notification_behavior, notification_queue): - ''' + """ 1. Resume before pausing 2nd thread - user pauses all (2) threads @@ -109,7 +107,7 @@ def test_single_notification_1(single_notification_behavior, notification_queue) - user presses continue all before second is paused - 2nd should not pause nor send notification - resume all notification should be sent - ''' + """ thread_info1 = _ThreadInfo() thread_info2 = _ThreadInfo() @@ -128,8 +126,8 @@ def test_single_notification_1(single_notification_behavior, notification_queue) t.join() assert notification_queue.qsize() == 2 - assert notification_queue.get() == 'suspend' - assert notification_queue.get() == 'resume' + assert notification_queue.get() == "suspend" + assert notification_queue.get() == "resume" assert notification_queue.qsize() == 0 # Run thread 2 only now (no additional notification). @@ -140,7 +138,7 @@ def test_single_notification_1(single_notification_behavior, notification_queue) def test_single_notification_2(single_notification_behavior, notification_queue): - ''' + """ 2. Pausing all then stepping - user pauses all (2) threads @@ -148,7 +146,7 @@ def test_single_notification_2(single_notification_behavior, notification_queue) - break second (no notification) - user steps in second - suspend in second -> send resume/pause notification on step - ''' + """ thread_info1 = _ThreadInfo() thread_info2 = _ThreadInfo() @@ -162,7 +160,7 @@ def test_single_notification_2(single_notification_behavior, notification_queue) # Leave both in break mode t1 = run_as_pydevd_daemon_thread(dummy_py_db, single_notification_behavior.do_wait_suspend, thread_info1, CMD_THREAD_SUSPEND) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") t2 = run_as_pydevd_daemon_thread(dummy_py_db, single_notification_behavior.do_wait_suspend, thread_info2, CMD_THREAD_SUSPEND) @@ -171,17 +169,17 @@ def test_single_notification_2(single_notification_behavior, notification_queue) # the step mode). thread_info2.state = STATE_RUN join_thread(t2) - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") single_notification_behavior.increment_suspend_time() thread_info2.state = STATE_SUSPEND t2 = run_as_pydevd_daemon_thread(dummy_py_db, single_notification_behavior.do_wait_suspend, thread_info2, CMD_STEP_OVER) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") thread_info1.state = STATE_RUN thread_info2.state = STATE_RUN # First does a resume notification, the other remains quiet. - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") join_thread(t2) join_thread(t1) @@ -189,7 +187,7 @@ def test_single_notification_2(single_notification_behavior, notification_queue) def test_single_notification_3(single_notification_behavior, notification_queue, _dummy_pydb): - ''' + """ 3. Deadlocked thread - user adds breakpoint in thread.join() -- just before threads becomes deadlocked @@ -201,7 +199,7 @@ def test_single_notification_3(single_notification_behavior, notification_queue, - send notification regarding 2nd thread (still stopped). - leave both threads running: no suspend should be shown as there are no stopped threads - when thread is paused, show suspend notification - ''' + """ # i.e.: stopping at breakpoint thread_info1 = _ThreadInfo() @@ -214,11 +212,11 @@ def test_single_notification_3(single_notification_behavior, notification_queue, thread_info2.state = STATE_SUSPEND t2 = run_as_pydevd_daemon_thread(_dummy_pydb, single_notification_behavior.do_wait_suspend, thread_info2, CMD_SET_BREAK) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") # i.e.: step over (thread 2 is still suspended and this one never completes) thread_info1.state = STATE_RUN - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") join_thread(t1) @@ -227,10 +225,10 @@ def test_single_notification_3(single_notification_behavior, notification_queue, single_notification_behavior.on_pause() thread_info1.state = STATE_SUSPEND thread_info2.state = STATE_SUSPEND - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") thread_info2.state = STATE_RUN - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") join_thread(t2) assert notification_queue.qsize() == 0 @@ -249,15 +247,15 @@ def test_single_notification_3(single_notification_behavior, notification_queue, assert notification_queue.qsize() == 0 t1 = run_as_pydevd_daemon_thread(_dummy_pydb, single_notification_behavior.do_wait_suspend, thread_info1, CMD_THREAD_SUSPEND) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") thread_info1.state = STATE_RUN - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") join_thread(t1) assert notification_queue.qsize() == 0 def test_single_notification_4(single_notification_behavior, notification_queue, _dummy_pydb): - ''' + """ 4. Delayed stop - user presses pause @@ -265,7 +263,7 @@ def test_single_notification_4(single_notification_behavior, notification_queue, - user steps on first - 2nd hits before first ends step (should not send any notification) - when step finishes send notification - ''' + """ thread_info1 = _ThreadInfo() thread_info2 = _ThreadInfo() @@ -275,23 +273,22 @@ def test_single_notification_4(single_notification_behavior, notification_queue, thread_info2.state = STATE_SUSPEND t1 = run_as_pydevd_daemon_thread(_dummy_pydb, single_notification_behavior.do_wait_suspend, thread_info1, CMD_THREAD_SUSPEND) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") thread_info1.state = STATE_RUN - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") join_thread(t1) t2 = run_as_pydevd_daemon_thread(_dummy_pydb, single_notification_behavior.do_wait_suspend, thread_info1, CMD_THREAD_SUSPEND) - time.sleep(.1) + time.sleep(0.1) assert notification_queue.qsize() == 0 single_notification_behavior.increment_suspend_time() thread_info1.state = STATE_SUSPEND t1 = run_as_pydevd_daemon_thread(_dummy_pydb, single_notification_behavior.do_wait_suspend, thread_info1, CMD_STEP_OVER) - wait_for_notification(notification_queue, 'suspend') + wait_for_notification(notification_queue, "suspend") thread_info2.state = STATE_RUN thread_info1.state = STATE_RUN join_thread(t1) join_thread(t2) - wait_for_notification(notification_queue, 'resume') + wait_for_notification(notification_queue, "resume") assert notification_queue.qsize() == 0 - diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_smart_step_into_bytecode.py b/src/debugpy/_vendored/pydevd/tests_python/test_smart_step_into_bytecode.py index 0a4cd4c0e..9a2a20e57 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_smart_step_into_bytecode.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_smart_step_into_bytecode.py @@ -1,15 +1,12 @@ import sys -from tests_python.debug_constants import TODO_PY311 +from _pydevd_bundle.pydevd_constants import IS_PY312_OR_GREATER, \ + IS_PY311_OR_GREATER try: from _pydevd_bundle import pydevd_bytecode_utils except ImportError: pass import pytest -pytestmark = pytest.mark.skipif( - sys.version_info[0] < 3 or - TODO_PY311, reason='Only available for Python 3. / Requires bytecode support in Python 3.11') - @pytest.fixture(autouse=True, scope='function') def enable_strict(): @@ -51,6 +48,9 @@ def collect_smart_step_into_variants(*args, **kwargs): # In a failure, rerun with DEBUG! debug = pydevd_bytecode_utils.DEBUG pydevd_bytecode_utils.DEBUG = True + + # pydevd_bytecode_utils.GO_INTO_INNER_CODES = False + # pydevd_bytecode_utils.STRICT_MODE = False try: return pydevd_bytecode_utils.calculate_smart_step_into_variants(*args, **kwargs) finally: @@ -73,6 +73,40 @@ class Frame: check_name_and_line(found, expected) +def test_smart_step_into_bytecode_info_simple(): + from _pydevd_bundle.pydevd_bytecode_utils import Variant + + def function(): + + def some(arg): + pass + + def call(arg): + pass + + yield sys._getframe() + call(some(1)) + + generator = iter(function()) + frame = next(generator) + + found = collect_smart_step_into_variants( + frame, 0, 99999, base=function.__code__.co_firstlineno) + + if IS_PY311_OR_GREATER: + check(found, [ + Variant(name='sys._getframe()', is_visited=True, line=8, offset=20, call_order=1), + Variant(name='some(1)', is_visited=False, line=9, offset=34, call_order=1), + Variant(name='call(some(1))', is_visited=False, line=9, offset=36, call_order=1), + ]) + else: + check(found, [ + Variant(name=('_getframe', 'sys'), is_visited=True, line=8, offset=20, call_order=1), + Variant(name='some', is_visited=False, line=9, offset=34, call_order=1), + Variant(name='call', is_visited=False, line=9, offset=36, call_order=1), + ]) + + def test_smart_step_into_bytecode_info(): from _pydevd_bundle.pydevd_bytecode_utils import Variant @@ -93,13 +127,22 @@ def call(arg): found = collect_smart_step_into_variants( frame, 0, 99999, base=function.__code__.co_firstlineno) - check(found, [ - Variant(name=('_getframe', 'sys'), is_visited=True, line=8, offset=20, call_order=1), - Variant(name='some', is_visited=False, line=9, offset=34, call_order=1), - Variant(name='call', is_visited=False, line=9, offset=36, call_order=1), - Variant(name='some', is_visited=False, line=9, offset=38, call_order=2), - Variant(name='call', is_visited=False, line=9, offset=40, call_order=2), - ]) + if IS_PY311_OR_GREATER: + check(found, [ + Variant(name='sys._getframe()', is_visited=True, line=8, offset=20, call_order=1), + Variant(name='some()', is_visited=False, line=9, offset=34, call_order=1), + Variant(name='call(some())', is_visited=False, line=9, offset=36, call_order=1), + Variant(name='some(call(some()))', is_visited=False, line=9, offset=38, call_order=1), + Variant(name='call(some(call(some())))', is_visited=False, line=9, offset=40, call_order=1), + ]) + else: + check(found, [ + Variant(name=('_getframe', 'sys'), is_visited=True, line=8, offset=20, call_order=1), + Variant(name='some', is_visited=False, line=9, offset=34, call_order=1), + Variant(name='call', is_visited=False, line=9, offset=36, call_order=1), + Variant(name='some', is_visited=False, line=9, offset=38, call_order=2), + Variant(name='call', is_visited=False, line=9, offset=40, call_order=2), + ]) def check_name_and_line(found, expected): @@ -130,7 +173,10 @@ def function(): found = collect_smart_step_into_variants( frame, 0, 99999, base=function.__code__.co_firstlineno) - check_name_and_line(found, [('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) + if IS_PY311_OR_GREATER: + check_name_and_line(found, [('sys._getframe()', 1), ('foo.bar(\n Something(param1, param2=xxx.yyy),\n )', 2), ('Something(param1, param2=xxx.yyy)', 3), ('call()', 5)]) + else: + check_name_and_line(found, [('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) def test_smart_step_into_bytecode_info_003(): @@ -148,9 +194,13 @@ def function(): found = collect_smart_step_into_variants( frame, 0, 99999, base=function.__code__.co_firstlineno) - check_name_and_line(found, [('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) + if IS_PY311_OR_GREATER: + check_name_and_line(found, [('sys._getframe()', 1), ('foo.bar(\n Something(param1, param2=xxx.yyy), {}\n )', 2), ('Something(param1, param2=xxx.yyy)', 3), ('call()', 5)]) + else: + check_name_and_line(found, [('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_004(): def function(): @@ -169,6 +219,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_005(): def function(): @@ -188,6 +239,7 @@ def function(): ('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 5)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_006(): def function(): @@ -214,6 +266,7 @@ def function(): ('_getframe', 1), ('bar', 2), ('Something', 3), ('call', 8), ('call2', 12)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_007(): def function(): @@ -229,6 +282,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('__getitem__', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_008(): def function(): @@ -245,6 +299,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_009(): def function(): @@ -260,6 +315,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('__getitem__', 2), ('__getitem__().__call__', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_011(): def function(): @@ -275,6 +331,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('__getitem__', 2), ('__getitem__().__call__', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_012(): def function(): @@ -290,6 +347,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_013(): def function(): @@ -305,6 +363,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('__getitem__().__call__', 2), ('__getitem__', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_014(): def function(): @@ -325,6 +384,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('RuntimeError', 3), ('call2', 5), ('call3', 7)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_015(): def function(): @@ -341,6 +401,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call', 2), ('call2', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_016(): def function(): @@ -362,6 +423,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call2', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_017(): def function(): @@ -377,11 +439,17 @@ def function(): found = collect_smart_step_into_variants( frame, 0, 99999, base=function.__code__.co_firstlineno) - check_name_and_line(found, - [('_getframe', 1), ('call', 2), ('__eq__ (in )', 4), ('call2 (in )', 4)] - ) + if IS_PY312_OR_GREATER: + check_name_and_line(found, + [('_getframe', 1), ('call', 2), ('__eq__', 4), ('call2', 4)] + ) + else: + check_name_and_line(found, + [('_getframe', 1), ('call', 2), ('__eq__ (in )', 4), ('call2 (in )', 4)] + ) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_018(): def function(): @@ -403,6 +471,7 @@ def __init__(self): check_name_and_line(found, [('_getframe', 1), ('Foo', 8)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_019(): def function(): @@ -424,6 +493,7 @@ def __init__(self): check_name_and_line(found, [('_getframe', 1), ('Foo', 8)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_020(): def function(): @@ -450,6 +520,7 @@ def function(): ('_getframe', 1), ('call', 2), ('__ne__', 3), ('a', 4), ('__ne__', 6), ('b', 7), ('RuntimeError', 12)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_021(): def function(): @@ -468,6 +539,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('a', 5)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_022(): def function(): @@ -493,6 +565,40 @@ def function(): ('_getframe', 1), ('a', 2), ('tuple', 6), ('c', 7), ('__eq__ (in )', 8), ('d (in )', 8), ('b', 11)]) +def test_smart_step_into_bytecode_info_023a(): + + def function(): + yield sys._getframe() + tuple( + x for x in + c() + if x == d() + ) + + generator = iter(function()) + frame = next(generator) + + found = collect_smart_step_into_variants( + frame, 0, 99999, base=function.__code__.co_firstlineno) + + if IS_PY311_OR_GREATER: + check_name_and_line(found, [ + ('sys._getframe()', 1), + ('tuple(\n x for x in\n c()\n if x == d()\n )', 2), + ('c()', 4), + ('d() (in (\n x for x in\n c()\n if x == d()\n ))', 5) + ]) + else: + check_name_and_line(found, [ + ('_getframe', 1), + ('tuple', 2), + ('c', 4), + ('__eq__ (in )', 5), + ('d (in )', 5)] + ) + + +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_023(): def function(): @@ -515,9 +621,18 @@ def function(): frame, 0, 99999, base=function.__code__.co_firstlineno) check_name_and_line(found, [ - ('_getframe', 1), ('tuple', 2), ('c', 4), ('__eq__ (in )', 5), ('d (in )', 5), ('tuple', 7), ('c', 9), ('__eq__ (in )', 10), ('d (in )', 10)]) + ('_getframe', 1), + ('tuple', 2), + ('c', 4), + ('__eq__ (in )', 5), + ('d (in )', 5), + ('tuple', 7), + ('c', 9), + ('__eq__ (in )', 10), + ('d (in )', 10)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_024(): func = '''def function(): @@ -590,6 +705,7 @@ def test_smart_step_into_bytecode_info_024(): ) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_025(): func = '''def function(): @@ -624,6 +740,7 @@ def test_smart_step_into_bytecode_info_025(): @pytest.mark.skipif(sys.version_info[0:2] < (3, 8), reason='Walrus operator only available for Python 3.8 onwards.') +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_026(): func = '''def function(): @@ -643,6 +760,7 @@ def test_smart_step_into_bytecode_info_026(): check_name_and_line(found, [('_getframe', 1), ('call', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_027(): def function(): @@ -664,6 +782,7 @@ def call(): check_name_and_line(found, [('_getframe', 1), ('__getitem__', 8), ('__getitem__().__call__', 8)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_028(): def function(): @@ -685,6 +804,7 @@ def call(): check_name_and_line(found, [('_getframe', 1), ('__getitem__', 7), ('__getitem__', 8), ('__getitem__().__call__', 8)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_029(): def function(): @@ -701,6 +821,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('__add__', 3), ('__mul__', 3), ('__sub__', 3), ('call', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_030(): def function(): @@ -717,6 +838,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_031(): def function(): @@ -733,6 +855,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_032(): def function(): @@ -750,6 +873,7 @@ def function(): check_name_and_line(found, [('_getframe', 1), ('call', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_033(): check_names_from_func_str('''def function(): @@ -760,6 +884,7 @@ def test_smart_step_into_bytecode_info_033(): @pytest.mark.skipif(sys.version_info[0:2] < (3, 6), reason='Async only available for Python 3.6 onwards.') +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_034(): check_names_from_func_str('''async def function(): @@ -769,6 +894,7 @@ def test_smart_step_into_bytecode_info_034(): ''', [('a', 1), ('c', 2), ('d', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_035(): check_names_from_func_str('''def function(): @@ -776,6 +902,7 @@ def test_smart_step_into_bytecode_info_035(): ''', [('AssertionError', 1)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_036(): check_names_from_func_str('''def function(a): @@ -785,6 +912,7 @@ def test_smart_step_into_bytecode_info_036(): ''', [('some_name', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_037(): func = '''def function(): @@ -810,6 +938,7 @@ class Frame: check_name_and_line(found, [('some_name', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_038(): check_names_from_func_str('''def function(): try: @@ -819,6 +948,7 @@ def test_smart_step_into_bytecode_info_038(): ''', [('call', 2), ('call2', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_039(): check_names_from_func_str('''def function(): try: @@ -830,6 +960,7 @@ def test_smart_step_into_bytecode_info_039(): ''', [('call', 2), ('call2', 4), ('call3', 6)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_040(): check_names_from_func_str('''def function(): a.call = foo() @@ -837,6 +968,7 @@ def test_smart_step_into_bytecode_info_040(): ''', [('foo', 1), ('call', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_041(): check_names_from_func_str('''def function(): foo = 10 @@ -846,6 +978,7 @@ def test_smart_step_into_bytecode_info_041(): ''', [('foo', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_042(): check_names_from_func_str(''' foo = 10 @@ -855,6 +988,7 @@ def function(): ''', [('foo', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_043(): def function(call): @@ -876,6 +1010,7 @@ def another_function(): check_name_and_line(found, [('_getframe', 3), ('call', 5)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_044(): check_names_from_func_str(''' def function(args): @@ -884,6 +1019,7 @@ def function(args): ''', [('call', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_045(): check_names_from_func_str(''' def function(): @@ -894,6 +1030,7 @@ def function(): ''', [('foo', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_046(): check_names_from_func_str(''' a = 10 @@ -904,6 +1041,7 @@ def function(args): ''', [('a', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_047(): check_names_from_func_str(''' def function(): @@ -911,6 +1049,7 @@ def function(): ''', [('call', 1)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_048(): check_names_from_func_str(''' def function(fn): @@ -924,6 +1063,7 @@ def pa(): ''', [('call', 1), ('pa', 6)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_049(): def function(foo): @@ -944,6 +1084,7 @@ class SomeClass(object): check_name_and_line(found, [('implementation', 5), ('_getframe', 6)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_050(): check_names_from_func_str(''' def function(): @@ -952,6 +1093,7 @@ def function(): ''', [('index', 1)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_051(): check_names_from_func_str(''' def function(): @@ -962,6 +1104,7 @@ def function(): ''', [('call', 3), ('v', 3), ('v2', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_052(): check_names_from_func_str(''' def function(): @@ -972,6 +1115,7 @@ def function(): ''', [('call', 3), ('v', 3), ('v2', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_053(): check_names_from_func_str(''' def function(): @@ -982,6 +1126,7 @@ def function(): ''', [('call', 3), ('v', 3), ('v2', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_054(): check_names_from_func_str(''' def function(): @@ -992,6 +1137,7 @@ def function(): ''', [('call', 3)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_055(): check_names_from_func_str(''' async def function(): @@ -1001,6 +1147,7 @@ async def function(): ''', [('lock', 1), ('foo', 2)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_056(): check_names_from_func_str(''' def function(mask_path): @@ -1014,6 +1161,7 @@ def function(mask_path): ''', [('some_func', 1), ('array', 3), ('open', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_057(): check_names_from_func_str(''' def function(mask_path): @@ -1027,6 +1175,7 @@ def function(mask_path): ''', [('some_func', 1), ('array', 3), ('open', 4)]) +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_get_smart_step_into_variant_from_frame_offset(): from _pydevd_bundle.pydevd_bytecode_utils import Variant @@ -1050,6 +1199,7 @@ def test_get_smart_step_into_variant_from_frame_offset(): assert pydevd_bytecode_utils.get_smart_step_into_variant_from_frame_offset(44, found).offset == 40 +@pytest.mark.skipif(IS_PY311_OR_GREATER, reason='Impl changed in 3.11 onwards') def test_smart_step_into_bytecode_info_00eq(): from _pydevd_bundle.pydevd_bytecode_utils import Variant diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_suspended_frames_manager.py b/src/debugpy/_vendored/pydevd/tests_python/test_suspended_frames_manager.py index 5b63c603d..9aa3793aa 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_suspended_frames_manager.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_suspended_frames_manager.py @@ -18,20 +18,21 @@ def check_vars_dict_expected(as_dict, expected): class _DummyPyDB(object): - def __init__(self): from _pydevd_bundle.pydevd_api import PyDevdAPI + self.variable_presentation = PyDevdAPI.VariablePresentation() def test_suspended_frames_manager(): from _pydevd_bundle.pydevd_suspended_frames import SuspendedFramesManager from _pydevd_bundle.pydevd_utils import DAPGrouper + suspended_frames_manager = SuspendedFramesManager() py_db = _DummyPyDB() with suspended_frames_manager.track_frames(py_db) as tracker: # : :type tracker: _FramesTracker - thread_id = 'thread1' + thread_id = "thread1" frame = get_frame() tracker.track(thread_id, pydevd_frame_utils.create_frames_list_from_frame(frame)) @@ -40,54 +41,77 @@ def test_suspended_frames_manager(): variable = suspended_frames_manager.get_variable(id(frame)) # Should be properly sorted. - assert ['var1', 'var2', 'var3'] == [x.get_name()for x in variable.get_children_variables()] + assert ["var1", "var2", "var3"] == [x.get_name() for x in variable.get_children_variables()] as_dict = dict((x.get_name(), x.get_var_data()) for x in variable.get_children_variables()) - var_reference = as_dict['var2'].pop('variablesReference') + var_reference = as_dict["var2"].pop("variablesReference") assert isinstance(var_reference, int_types) # The variable reference is always a new int. - assert isinstance(as_dict['var3'].pop('variablesReference'), int_types) # The variable reference is always a new int. + assert isinstance(as_dict["var3"].pop("variablesReference"), int_types) # The variable reference is always a new int. - check_vars_dict_expected(as_dict, { - 'var1': {'name': 'var1', 'value': '1', 'type': 'int', 'evaluateName': 'var1', 'variablesReference': 0}, - 'var2': {'name': 'var2', 'value': '[1]', 'type': 'list', 'evaluateName': 'var2'}, - 'var3': {'name': 'var3', 'value': '{33: [1]}', 'type': 'dict', 'evaluateName': 'var3'} - }) + check_vars_dict_expected( + as_dict, + { + "var1": {"name": "var1", "value": "1", "type": "int", "evaluateName": "var1", "variablesReference": 0}, + "var2": {"name": "var2", "value": "[1]", "type": "list", "evaluateName": "var2"}, + "var3": {"name": "var3", "value": "{33: [1]}", "type": "dict", "evaluateName": "var3"}, + }, + ) # Now, same thing with a different format. - as_dict = dict((x.get_name(), x.get_var_data(fmt={'hex': True})) for x in variable.get_children_variables()) - var_reference = as_dict['var2'].pop('variablesReference') + as_dict = dict((x.get_name(), x.get_var_data(fmt={"hex": True})) for x in variable.get_children_variables()) + var_reference = as_dict["var2"].pop("variablesReference") assert isinstance(var_reference, int_types) # The variable reference is always a new int. - assert isinstance(as_dict['var3'].pop('variablesReference'), int_types) # The variable reference is always a new int. - - check_vars_dict_expected(as_dict, { - 'var1': {'name': 'var1', 'value': '0x1', 'type': 'int', 'evaluateName': 'var1', 'variablesReference': 0}, - 'var2': {'name': 'var2', 'value': '[0x1]', 'type': 'list', 'evaluateName': 'var2'}, - 'var3': {'name': 'var3', 'value': '{0x21: [0x1]}', 'type': 'dict', 'evaluateName': 'var3'} - }) - - var2 = dict((x.get_name(), x) for x in variable.get_children_variables())['var2'] + assert isinstance(as_dict["var3"].pop("variablesReference"), int_types) # The variable reference is always a new int. + + check_vars_dict_expected( + as_dict, + { + "var1": {"name": "var1", "value": "0x1", "type": "int", "evaluateName": "var1", "variablesReference": 0}, + "var2": {"name": "var2", "value": "[0x1]", "type": "list", "evaluateName": "var2"}, + "var3": {"name": "var3", "value": "{0x21: [0x1]}", "type": "dict", "evaluateName": "var3"}, + }, + ) + + var2 = dict((x.get_name(), x) for x in variable.get_children_variables())["var2"] children_vars = var2.get_children_variables() - as_dict = (dict([x.get_name(), x.get_var_data()] for x in children_vars if x.get_name() not in DAPGrouper.SCOPES_SORTED)) + as_dict = dict([x.get_name(), x.get_var_data()] for x in children_vars if x.get_name() not in DAPGrouper.SCOPES_SORTED) assert as_dict == { - '0': {'name': '0', 'value': '1', 'type': 'int', 'evaluateName': 'var2[0]', 'variablesReference': 0 }, - GENERATED_LEN_ATTR_NAME: {'name': GENERATED_LEN_ATTR_NAME, 'value': '1', 'type': 'int', 'evaluateName': 'len(var2)', 'variablesReference': 0, 'presentationHint': {'attributes': ['readOnly']}, }, + "0": {"name": "0", "value": "1", "type": "int", "evaluateName": "var2[0]", "variablesReference": 0}, + GENERATED_LEN_ATTR_NAME: { + "name": GENERATED_LEN_ATTR_NAME, + "value": "1", + "type": "int", + "evaluateName": "len(var2)", + "variablesReference": 0, + "presentationHint": {"attributes": ["readOnly"]}, + }, } - var3 = dict((x.get_name(), x) for x in variable.get_children_variables())['var3'] + var3 = dict((x.get_name(), x) for x in variable.get_children_variables())["var3"] children_vars = var3.get_children_variables() - as_dict = (dict([x.get_name(), x.get_var_data()] for x in children_vars if x.get_name() not in DAPGrouper.SCOPES_SORTED)) - assert isinstance(as_dict['33'].pop('variablesReference'), int_types) # The variable reference is always a new int. - - check_vars_dict_expected(as_dict, { - '33': {'name': '33', 'value': "[1]", 'type': 'list', 'evaluateName': 'var3[33]'}, - GENERATED_LEN_ATTR_NAME: {'name': GENERATED_LEN_ATTR_NAME, 'value': '1', 'type': 'int', 'evaluateName': 'len(var3)', 'variablesReference': 0, 'presentationHint': {'attributes': ['readOnly']}, } - }) + as_dict = dict([x.get_name(), x.get_var_data()] for x in children_vars if x.get_name() not in DAPGrouper.SCOPES_SORTED) + assert isinstance(as_dict["33"].pop("variablesReference"), int_types) # The variable reference is always a new int. + + check_vars_dict_expected( + as_dict, + { + "33": {"name": "33", "value": "[1]", "type": "list", "evaluateName": "var3[33]"}, + GENERATED_LEN_ATTR_NAME: { + "name": GENERATED_LEN_ATTR_NAME, + "value": "1", + "type": "int", + "evaluateName": "len(var3)", + "variablesReference": 0, + "presentationHint": {"attributes": ["readOnly"]}, + }, + }, + ) def get_dict_large_frame(): obj = {} for idx in range(pydevd_constants.PYDEVD_CONTAINER_RANDOM_ACCESS_MAX_ITEMS + +300): - obj[idx] = (1) + obj[idx] = 1 return sys._getframe() @@ -100,35 +124,35 @@ def get_set_large_frame(): def test_get_child_variables(): from _pydevd_bundle.pydevd_suspended_frames import SuspendedFramesManager + suspended_frames_manager = SuspendedFramesManager() py_db = _DummyPyDB() for frame in ( get_dict_large_frame(), get_set_large_frame(), - ): + ): with suspended_frames_manager.track_frames(py_db) as tracker: # : :type tracker: _FramesTracker - thread_id = 'thread1' + thread_id = "thread1" tracker.track(thread_id, pydevd_frame_utils.create_frames_list_from_frame(frame)) assert suspended_frames_manager.get_thread_id_for_variable_reference(id(frame)) == thread_id variable = suspended_frames_manager.get_variable(id(frame)) - children_variables = variable.get_child_variable_named('obj').get_children_variables() + children_variables = variable.get_child_variable_named("obj").get_children_variables() found_too_large = False found_len = False for x in children_variables: if x.name == TOO_LARGE_ATTR: var_data = x.get_var_data() - assert 'readOnly' in var_data['presentationHint']['attributes'] + assert "readOnly" in var_data["presentationHint"]["attributes"] found_too_large = True elif x.name == GENERATED_LEN_ATTR_NAME: found_len = True if not found_too_large: - raise AssertionError('Expected to find variable named: %s' % (TOO_LARGE_ATTR,)) + raise AssertionError("Expected to find variable named: %s" % (TOO_LARGE_ATTR,)) if not found_len: - raise AssertionError('Expected to find variable named: len()') - + raise AssertionError("Expected to find variable named: len()") diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_sys_monitoring.py b/src/debugpy/_vendored/pydevd/tests_python/test_sys_monitoring.py new file mode 100644 index 000000000..df96bb662 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_python/test_sys_monitoring.py @@ -0,0 +1,294 @@ +import sys +import pytest +import threading + +pytestmark = pytest.mark.skipif(not hasattr(sys, "monitoring"), reason="Requires sys.monitoring") + +if hasattr(sys, "monitoring"): + DEBUGGER_ID = sys.monitoring.DEBUGGER_ID + monitor = sys.monitoring + + +def _disable_monitoring(): + if monitor.get_tool(DEBUGGER_ID) == "pydevd": + sys.monitoring.set_events(sys.monitoring.DEBUGGER_ID, 0) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, None) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, None) + sys.monitoring.free_tool_id(DEBUGGER_ID) + + +@pytest.fixture +def with_monitoring(): + monitor.use_tool_id(DEBUGGER_ID, "pydevd") + yield + _disable_monitoring() + + +def test_exceptions(with_monitoring): + monitor.set_events(DEBUGGER_ID, monitor.events.RAISE | monitor.events.RERAISE) + + found = [] + + def _on_raise(code, instruction_offset, exc): + if code.co_filename.endswith("sys_monitoring.py"): + found.append(("raise", code.co_name, str(exc), sys._getframe(1).f_lineno)) + + def _on_reraise(code, instruction_offset, exc): + if code.co_filename.endswith("sys_monitoring.py"): + found.append(("reraise", code.co_name, str(exc), sys._getframe(1).f_lineno)) + + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _on_raise) + monitor.register_callback(DEBUGGER_ID, monitor.events.RERAISE, _on_reraise) + + def method_raise(): + raise RuntimeError("err1") + + def method_2(): + try: + method_raise() + except: + raise + + def method(): + try: + method_2() + except: + pass + + method() + assert found == [ + ("raise", "method_raise", "err1", method_raise.__code__.co_firstlineno + 1), + ("raise", "method_2", "err1", method_2.__code__.co_firstlineno + 2), + # This will be very tricky to handle. + # See: https://github.com/python/cpython/issues/112086 + ("reraise", "method_2", "err1", method_2.__code__.co_firstlineno + 4), + ("reraise", "method_2", "err1", method_2.__code__.co_firstlineno + 4), + ("raise", "method", "err1", method.__code__.co_firstlineno + 2), + ] + + +def test_exceptions_and_return(with_monitoring): + monitor.set_events(DEBUGGER_ID, monitor.events.RAISE | monitor.events.PY_RETURN | monitor.events.PY_UNWIND) + + found = [] + + def _on_raise(code, instruction_offset, exc): + if code.co_filename.endswith("sys_monitoring.py"): + found.append(("raise", code.co_name, str(exc), sys._getframe(1).f_lineno)) + + def _on_return(code, instruction_offset, val): + if code.co_filename.endswith("sys_monitoring.py"): + found.append(("return", code.co_name, str(val), sys._getframe(1).f_lineno)) + + def _on_unwind(code, instruction_offset, val): + if code.co_filename.endswith("sys_monitoring.py"): + found.append(("unwind", code.co_name, str(val), sys._getframe(1).f_lineno)) + + monitor.register_callback(DEBUGGER_ID, monitor.events.RAISE, _on_raise) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RETURN, _on_return) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_UNWIND, _on_unwind) + + def method_raise(): + raise RuntimeError("err1") + + def method_2(): + try: + method_raise() + except: + raise + + def method(): + try: + method_2() + except: + pass + + method() + + assert found == [ + ("raise", "method_raise", "err1", 96), + ("unwind", "method_raise", "err1", 96), + ("raise", "method_2", "err1", 100), + ("unwind", "method_2", "err1", 102), # This will be helpful for unhandled exceptions! + ("raise", "method", "err1", 106), + ("return", "method", "None", 108), + ] + + +def test_variables_on_call(with_monitoring): + monitor.set_events(DEBUGGER_ID, monitor.events.PY_START) + + found = [] + + def _start_method(code, offset): + if code.co_name == "method": + frame = sys._getframe(1) + found.append(frame.f_locals["arg1"]) + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method) + + def method(arg1): + pass + + method(22) + assert found == [22] + + +def test_disabling_code(with_monitoring): + executed = [] + + def _start_method(code, offset): + if code.co_name == "method": + executed.append(("start", code.co_name, offset)) + monitor.set_local_events(DEBUGGER_ID, code, monitor.events.LINE) + return monitor.DISABLE + + def _on_line(code, offset): + if code.co_name == "method": + executed.append(("line", code.co_name, offset)) + return monitor.DISABLE + + monitor.set_events(DEBUGGER_ID, monitor.events.PY_START | monitor.events.PY_RESUME) + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _on_line) + + def method(): + a = 1 + + method() + method() + assert executed == [("start", "method", 0), ("line", "method", method.__code__.co_firstlineno + 1)] + + del executed[:] + + # Check: if disable once, even on a new thread we won't get notifications! + t = threading.Thread(target=method) + t.start() + t.join() + + assert not executed + + # Unless restart_events is called... + monitor.restart_events() + t = threading.Thread(target=method) + t.start() + t.join() + assert executed == [("start", "method", 0), ("line", "method", method.__code__.co_firstlineno + 1)] + + +def test_change_line_during_trace(with_monitoring): + code_to_break_at_line = {} + do_change_line = [0] + lines_traced = [] + + def _start_method(code, offset): + monitor.set_local_events(DEBUGGER_ID, code, monitor.events.LINE) + code_to_break_at_line[code] = {code.co_firstlineno + 3} + return monitor.DISABLE + + def _on_line(code, line): + lines_to_break = code_to_break_at_line.get(code) + if lines_to_break and line in lines_to_break: + do_change_line[0] += 1 + if do_change_line[0] == 2: + frame = sys._getframe(1) + frame.f_lineno = line - 2 + + monitor.set_events(DEBUGGER_ID, monitor.events.PY_START | monitor.events.PY_RESUME) + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _on_line) + + def method1(): # code.co_firstlineno + a = 1 # code.co_firstlineno + 1 + lines_traced.append("before a=2") # code.co_firstlineno + 2 + a = 2 # code.co_firstlineno + 3 + lines_traced.append("before a=3") # code.co_firstlineno + 4 + # a = 3 # code.co_firstlineno + 5 + + for _i in range(3): + method1() + + assert lines_traced == [ + "before a=2", + "before a=3", + "before a=2", + "before a=2", + "before a=3", + "before a=2", + "before a=3", + ] + + +def test_tracing(): + import sys + + def method(): + a = [1, 2, 3, 4, 5, 6] # line 1 + + # line 3 + def b(): # line 4 + yield from [j for j in a if j % 2 == 0] # line 5 + + # line 7 + for j in b(): # line 8 + print(j) # line 9 + + def tracefunc(frame, event, arg): + if "test_sys_monitoring.py" in frame.f_code.co_filename: + print(frame.f_code.co_name, event, frame.f_lineno - frame.f_code.co_firstlineno) + return tracefunc + + sys.settrace(tracefunc) + method() + sys.settrace(None) + + +def test_lines_with_yield(with_monitoring): + def _start_method(code, offset): + if "test_sys_monitoring.py" in code.co_filename: + print("start ", code.co_name) + monitor.set_local_events(DEBUGGER_ID, code, monitor.events.LINE | monitor.events.JUMP | monitor.events.PY_YIELD) + + def _on_line(code, line): + if "test_sys_monitoring.py" in code.co_filename: + print("on line", code.co_name, line - code.co_firstlineno) + + def _on_jump(code, from_offset, to_offset): + if "test_sys_monitoring.py" in code.co_filename: + frame = sys._getframe().f_back + print("on jump", code.co_name, frame.f_lineno - code.co_firstlineno) + + def _yield_method(code, offset, retval): + if "test_sys_monitoring.py" in code.co_filename: + frame = sys._getframe().f_back + print("on yield", code.co_name, frame.f_lineno - code.co_firstlineno) + + monitor.set_events(DEBUGGER_ID, monitor.events.PY_START | monitor.events.PY_RESUME) + + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_START, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_RESUME, _start_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.PY_YIELD, _yield_method) + monitor.register_callback(DEBUGGER_ID, monitor.events.LINE, _on_line) + monitor.register_callback(DEBUGGER_ID, monitor.events.JUMP, _on_jump) + + def method(): + a = [1, 2, 3, 4, 5, 6] # line 1 + + # line 3 + def b(): # line 4 + yield from [j for j in a if j % 2 == 0] # line 5 + + # line 7 + for j in b(): # line 8 + print(j) # line 9 + + method() + monitor.set_events(DEBUGGER_ID, 0) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_timeout_tracker.py b/src/debugpy/_vendored/pydevd/tests_python/test_timeout_tracker.py index 388f11979..ad8b0d136 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_timeout_tracker.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_timeout_tracker.py @@ -16,9 +16,7 @@ def _enable_debug_msgs(): def test_timeout(): - class _DummyPyDb(object): - def __init__(self): self.created_pydb_daemon_threads = {} @@ -35,16 +33,14 @@ def on_timeout(arg): timeout = 2 else: timeout = 20 - with timeout_tracker.call_on_timeout(1, on_timeout, kwargs={'arg': 1}): + with timeout_tracker.call_on_timeout(1, on_timeout, kwargs={"arg": 1}): time.sleep(timeout) except KeyboardInterrupt: pass def test_timeout_0_time(): - class _DummyPyDb(object): - def __init__(self): self.created_pydb_daemon_threads = {} @@ -57,17 +53,15 @@ def on_timeout(arg): py_db = _DummyPyDb() timeout_tracker = pydevd_timeout.TimeoutTracker(py_db) try: - with timeout_tracker.call_on_timeout(0, on_timeout, kwargs={'arg': 1}): + with timeout_tracker.call_on_timeout(0, on_timeout, kwargs={"arg": 1}): time.sleep(1) except KeyboardInterrupt: pass -@pytest.mark.skipif(not IS_CPYTHON, reason='This only works in CPython.') +@pytest.mark.skipif(not IS_CPYTHON, reason="This only works in CPython.") def test_create_interrupt_this_thread_callback(): - class MyThread(threading.Thread): - def __init__(self): threading.Thread.__init__(self) self.finished = False @@ -79,7 +73,7 @@ def run(self): try: self.interrupt_thread = create_interrupt_this_thread_callback() while True: - time.sleep(.2) + time.sleep(0.2) except KeyboardInterrupt: self.interrupted = True finally: @@ -96,19 +90,17 @@ def run(self): assert t.interrupted -@pytest.mark.skipif(True, reason='Skipping because running this test can interrupt the test suite execution.') +@pytest.mark.skipif(True, reason="Skipping because running this test can interrupt the test suite execution.") def test_interrupt_main_thread(): - from _pydevd_bundle.pydevd_constants import IS_PY39_OR_GREATER class MyThread(threading.Thread): - def __init__(self, interrupt_thread_callback): threading.Thread.__init__(self) self.interrupt_thread_callback = interrupt_thread_callback def run(self): - time.sleep(.5) + time.sleep(0.5) self.interrupt_thread_callback() initial_time = time.time() @@ -125,4 +117,4 @@ def run(self): if not interrupt_only_on_callback: assert time.time() - initial_time < timeout else: - raise AssertionError('Expected main thread to be interrupted.') + raise AssertionError("Expected main thread to be interrupted.") diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_tracing_gotchas.py b/src/debugpy/_vendored/pydevd/tests_python/test_tracing_gotchas.py index 66204021d..bafe99ba8 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_tracing_gotchas.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_tracing_gotchas.py @@ -5,17 +5,16 @@ class Tracer(object): - def __init__(self): self.call_calls = 0 self.line_calls = 0 def trace_func(self, frame, event, arg): - if event == 'call': + if event == "call": self.call_calls += 1 return self.on_call() - elif event == 'line': + elif event == "line": self.line_calls += 1 # Should disable tracing when None is returned (but doesn't). return self.on_line(frame, event, arg) @@ -31,14 +30,12 @@ def on_line(self, frame, event, arg): class TracerSettingNone(Tracer): - def on_line(self, frame, event, arg): frame.f_trace = NO_FTRACE return NO_FTRACE class TracerChangeToOtherTracing(Tracer): - def on_line(self, frame, event, arg): return self._no_trace @@ -47,13 +44,12 @@ def _no_trace(self, frame, event, arg): class TracerDisableOnCall(Tracer): - def on_call(self): return None def test_tracing_gotchas(): - ''' + """ Summary of the gotchas tested: If 'call' is used, a None return value is used for the tracing. Afterwards the return may or may @@ -68,7 +64,7 @@ def test_tracing_gotchas(): does not follow the spec (but we have to work with it nonetheless). Note: Jython seems to do what's written in the docs. - ''' + """ def method(): _a = 1 @@ -81,7 +77,7 @@ def method(): (TracerSettingNone(), 1), (TracerChangeToOtherTracing(), 1), (TracerDisableOnCall(), 0), - ): + ): curr_trace_func = sys.gettrace() try: sys.settrace(tracer.trace_func) @@ -89,13 +85,13 @@ def method(): method() if tracer.call_calls != 1: - pytest.fail('Expected a single call event. Found: %s' % (tracer.call_calls)) + pytest.fail("Expected a single call event. Found: %s" % (tracer.call_calls)) if tracer.line_calls != line_events: - pytest.fail('Expected %s line events. Found: %s. Tracer: %s' % (line_events, tracer.line_calls, tracer)) + pytest.fail("Expected %s line events. Found: %s. Tracer: %s" % (line_events, tracer.line_calls, tracer)) finally: sys.settrace(curr_trace_func) -if __name__ == '__main__': - pytest.main(['-k', 'test_tracing_gotchas']) +if __name__ == "__main__": + pytest.main(["-k", "test_tracing_gotchas"]) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_tracing_on_top_level.py b/src/debugpy/_vendored/pydevd/tests_python/test_tracing_on_top_level.py index fa53ad46b..59530336c 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_tracing_on_top_level.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_tracing_on_top_level.py @@ -2,13 +2,15 @@ import pytest from tests_python.debugger_unittest import IS_CPYTHON import threading +from _pydevd_bundle.pydevd_constants import PYDEVD_USE_SYS_MONITORING DEBUG = False +pytestmark = pytest.mark.skipif(PYDEVD_USE_SYS_MONITORING, reason="The tests in this module requires tracing.") -class DummyTopLevelFrame(object): - __slots__ = ['f_code', 'f_back', 'f_lineno', 'f_trace'] +class DummyTopLevelFrame(object): + __slots__ = ["f_code", "f_back", "f_lineno", "f_trace"] def __init__(self, method): self.f_code = method.__code__ @@ -17,8 +19,7 @@ def __init__(self, method): class DummyWriter(object): - - __slots__ = ['commands', 'command_meanings'] + __slots__ = ["commands", "command_meanings"] def __init__(self): self.commands = [] @@ -26,23 +27,23 @@ def __init__(self): def add_command(self, cmd): from _pydevd_bundle.pydevd_comm import ID_TO_MEANING + meaning = ID_TO_MEANING[str(cmd.id)] if DEBUG: print(meaning) self.command_meanings.append(meaning) if DEBUG: - print(cmd._as_bytes.decode('utf-8')) + print(cmd._as_bytes.decode("utf-8")) self.commands.append(cmd) class DummyPyDb(PyDB): - def __init__(self): PyDB.__init__(self, set_as_global=False) - def do_wait_suspend( - self, thread, frame, event, arg, *args, **kwargs): + def do_wait_suspend(self, thread, frame, event, arg, *args, **kwargs): from _pydevd_bundle.pydevd_constants import STATE_RUN + info = thread.additional_info info.pydev_original_step_cmd = -1 info.pydev_step_cmd = -1 @@ -53,7 +54,6 @@ def do_wait_suspend( class _TraceTopLevel(object): - def __init__(self): self.py_db = DummyPyDb() self.py_db.writer = DummyWriter() @@ -64,6 +64,7 @@ def set_target_func(self, target_func): def get_exception_arg(self): import sys + try: raise AssertionError() except: @@ -71,23 +72,24 @@ def get_exception_arg(self): return arg def create_add_exception_breakpoint_with_policy( - self, exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries): - return '\t'.join(str(x) for x in [ - exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries]) + self, exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries + ): + return "\t".join(str(x) for x in [exception, notify_on_handled_exceptions, notify_on_unhandled_exceptions, ignore_libraries]) def add_unhandled_exception_breakpoint(self): from _pydevd_bundle.pydevd_process_net_command import process_net_command from tests_python.debugger_unittest import CMD_ADD_EXCEPTION_BREAK - for exc_name in ('AssertionError', 'RuntimeError'): + + for exc_name in ("AssertionError", "RuntimeError"): process_net_command( self.py_db, CMD_ADD_EXCEPTION_BREAK, 1, - self.create_add_exception_breakpoint_with_policy(exc_name, '0', '1', '0'), + self.create_add_exception_breakpoint_with_policy(exc_name, "0", "1", "0"), ) def assert_last_commands(self, *commands): - assert self.py_db.writer.command_meanings[-len(commands):] == list(commands) + assert self.py_db.writer.command_meanings[-len(commands) :] == list(commands) def assert_no_commands(self, *commands): for command in commands: @@ -101,24 +103,24 @@ def trace_dispatch(self, event, arg): def call_trace_dispatch(self, line): self.frame.f_lineno = line - return self.trace_dispatch('call', None) + return self.trace_dispatch("call", None) def exception_trace_dispatch(self, line, arg): self.frame.f_lineno = line - self.new_trace_func = self.new_trace_func(self.frame, 'exception', arg) + self.new_trace_func = self.new_trace_func(self.frame, "exception", arg) def return_trace_dispatch(self, line): self.frame.f_lineno = line - self.new_trace_func = self.new_trace_func(self.frame, 'return', None) + self.new_trace_func = self.new_trace_func(self.frame, "return", None) def assert_paused(self): - self.assert_last_commands('CMD_THREAD_SUSPEND', 'CMD_THREAD_RUN') + self.assert_last_commands("CMD_THREAD_SUSPEND", "CMD_THREAD_RUN") def assert_not_paused(self): - self.assert_no_commands('CMD_THREAD_SUSPEND', 'CMD_THREAD_RUN') + self.assert_no_commands("CMD_THREAD_SUSPEND", "CMD_THREAD_RUN") -@pytest.yield_fixture +@pytest.fixture def trace_top_level(): # Note: we trace with a dummy frame with no f_back to simulate the issue in a remote attach. yield _TraceTopLevel() @@ -148,7 +150,7 @@ def mark_unhandled(func): return func -#------------------------------------------------------------------------------------------- Handled +# ------------------------------------------------------------------------------------------- Handled @mark_handled def raise_handled_exception(): try: @@ -194,9 +196,7 @@ def raise_handled_exception4(): raise AssertionError() except RuntimeError: pass - except ( - RuntimeError, - AssertionError): + except (RuntimeError, AssertionError): pass @@ -207,9 +207,7 @@ def raise_handled(): raise AssertionError() except RuntimeError: pass - except ( - RuntimeError, - AssertionError): + except (RuntimeError, AssertionError): pass @@ -217,16 +215,12 @@ def raise_handled(): def raise_handled2(): try: raise AssertionError() - except ( - RuntimeError, - AssertionError): + except (RuntimeError, AssertionError): pass try: raise RuntimeError() - except ( - RuntimeError, - AssertionError): + except (RuntimeError, AssertionError): pass @@ -257,7 +251,8 @@ def raise_handled10(): _foo = 10 -#----------------------------------------------------------------------------------------- Unhandled + +# ----------------------------------------------------------------------------------------- Unhandled @mark_unhandled @@ -280,9 +275,7 @@ def raise_unhandled(): raise AssertionError() except RuntimeError: pass - except ( - RuntimeError, - AssertionError): + except (RuntimeError, AssertionError): raise @@ -325,10 +318,7 @@ def raise_unhandled6(): try: raise AssertionError() finally: - raise RuntimeError( - 'in another' - 'line' - ) + raise RuntimeError("in another" "line") @mark_unhandled @@ -427,11 +417,14 @@ def events_collector(frame, event, arg): return events_collector import sys + sys.settrace(events_collector) try: func() except: - import traceback;traceback.print_exc() + import traceback + + traceback.print_exc() finally: sys.settrace(None) return collected @@ -439,38 +432,38 @@ def events_collector(frame, event, arg): def _replay_events(collected, trace_top_level_unhandled): for event, lineno, arg in collected: - if event == 'call': + if event == "call": # Notify only unhandled new_trace_func = trace_top_level_unhandled.call_trace_dispatch(lineno) # Check that it's dealing with the top-level event. - if hasattr(new_trace_func, 'get_method_object'): + if hasattr(new_trace_func, "get_method_object"): new_trace_func = new_trace_func.get_method_object() - assert new_trace_func.__name__ == 'trace_dispatch_and_unhandled_exceptions' - elif event == 'exception': + assert new_trace_func.__name__ == "trace_dispatch_and_unhandled_exceptions" + elif event == "exception": trace_top_level_unhandled.exception_trace_dispatch(lineno, arg) - elif event == 'return': + elif event == "return": trace_top_level_unhandled.return_trace_dispatch(lineno) - elif event == 'line': + elif event == "line": pass else: - raise AssertionError('Unexpected: %s' % (event,)) + raise AssertionError("Unexpected: %s" % (event,)) def _collect_target_functions(): -# return [raise_unhandled10] + # return [raise_unhandled10] ret = [] for _key, method in sorted(dict(globals()).items()): - if hasattr(method, '__handled__'): + if hasattr(method, "__handled__"): ret.append(method) assert len(ret) == _expected_functions_to_test return ret -@pytest.mark.skipif(not IS_CPYTHON, reason='try..except info only available on CPython') +@pytest.mark.skipif(not IS_CPYTHON, reason="try..except info only available on CPython") @pytest.mark.parametrize("func", _collect_target_functions()) def test_tracing_on_top_level_unhandled(trace_top_level_unhandled, func): trace_top_level_unhandled.set_target_func(func) diff --git a/src/debugpy/_vendored/pydevd/tests_python/test_utilities.py b/src/debugpy/_vendored/pydevd/tests_python/test_utilities.py index 09b8b19db..ac44a971a 100644 --- a/src/debugpy/_vendored/pydevd/tests_python/test_utilities.py +++ b/src/debugpy/_vendored/pydevd/tests_python/test_utilities.py @@ -3,96 +3,100 @@ from _pydevd_bundle.pydevd_utils import convert_dap_log_message_to_expression from tests_python.debug_constants import TEST_GEVENT, IS_CPYTHON import sys -from _pydevd_bundle.pydevd_constants import IS_WINDOWS, IS_PYPY, IS_JYTHON +from _pydevd_bundle.pydevd_constants import IS_WINDOWS, IS_PYPY, IS_JYTHON, PYDEVD_USE_SYS_MONITORING import pytest import os from _pydevd_bundle.pydevd_thread_lifecycle import pydevd_find_thread_by_id +from _pydevd_bundle.pydevd_dont_trace_files import LIB_FILE def test_expression_to_evaluate(): from _pydevd_bundle.pydevd_vars import _expression_to_evaluate - assert _expression_to_evaluate(b'expr') == b'expr' - assert _expression_to_evaluate(b' expr') == b'expr' - assert _expression_to_evaluate(b'for a in b:\n foo') == b'for a in b:\n foo' - assert _expression_to_evaluate(b' for a in b:\n foo') == b'for a in b:\nfoo' - assert _expression_to_evaluate(b' for a in b:\nfoo') == b' for a in b:\nfoo' - assert _expression_to_evaluate(b'\tfor a in b:\n\t\tfoo') == b'for a in b:\n\tfoo' - assert _expression_to_evaluate(u' expr') == u'expr' - assert _expression_to_evaluate(u' for a in expr:\n pass') == u'for a in expr:\npass' + assert _expression_to_evaluate(b"expr") == b"expr" + assert _expression_to_evaluate(b" expr") == b"expr" + assert _expression_to_evaluate(b"for a in b:\n foo") == b"for a in b:\n foo" + assert _expression_to_evaluate(b" for a in b:\n foo") == b"for a in b:\nfoo" + assert _expression_to_evaluate(b" for a in b:\nfoo") == b" for a in b:\nfoo" + assert _expression_to_evaluate(b"\tfor a in b:\n\t\tfoo") == b"for a in b:\n\tfoo" + assert _expression_to_evaluate(" expr") == "expr" + assert _expression_to_evaluate(" for a in expr:\n pass") == "for a in expr:\npass" -@pytest.mark.skipif(IS_WINDOWS, reason='Brittle on Windows.') -def test_is_main_thread(): - ''' - This is now skipped due to it failing sometimes (only on Windows). - - I (fabioz) am not 100% sure on why this happens, but when this happens the initial thread for - the tests seems to be a non main thread. - - i.e.: With an autouse fixture with a scope='session' with the code and error message below, it's - possible to see that at even at the `conftest` import (where indent_at_import is assigned) the - current thread is already not the main thread. - As far as I know this seems to be an issue in how pytest-xdist is running the tests (i.e.: - I couldn't reproduce this without running with `python -m pytest -n 0 ...`). - - -------- Code to check error / error output ---------- - - from _pydevd_bundle.pydevd_utils import is_current_thread_main_thread - import threading - indent_at_import = threading.get_ident() - - @pytest.yield_fixture(autouse=True, scope='session') - def check_main_thread_session(request): - if not is_current_thread_main_thread(): - error_msg = 'Current thread does not seem to be a main thread at the start of the session. Details:\n' - current_thread = threading.current_thread() - error_msg += 'Current thread: %s\n' % (current_thread,) - error_msg += 'Current thread ident: %s\n' % (current_thread.ident,) - error_msg += 'ident at import: %s\n' % (indent_at_import,) - error_msg += 'curr ident: %s\n' % (threading.get_ident(),) - - if hasattr(threading, 'main_thread'): - error_msg += 'Main thread found: %s\n' % (threading.main_thread(),) - error_msg += 'Main thread id: %s\n' % (threading.main_thread().ident,) - else: - error_msg += 'Current main thread not instance of: %s (%s)\n' % ( - threading._MainThread, current_thread.__class__.__mro__,) - -> raise AssertionError(error_msg) -E AssertionError: Current thread does not seem to be a main thread at the start of the session. Details: -E Current thread: <_DummyThread(Dummy-2, started daemon 7072)> -E Current thread ident: 7072 -E ident at import: 7072 -E curr ident: 7072 -E Main thread found: <_MainThread(MainThread, started 5924)> -E Main thread id: 5924 - -conftest.py:67: AssertionError - ''' +@pytest.mark.skipif(IS_WINDOWS, reason="Brittle on Windows.") +def test_is_main_thread(): + """ + This is now skipped due to it failing sometimes (only on Windows). + + I (fabioz) am not 100% sure on why this happens, but when this happens the initial thread for + the tests seems to be a non main thread. + + i.e.: With an autouse fixture with a scope='session' with the code and error message below, it's + possible to see that at even at the `conftest` import (where indent_at_import is assigned) the + current thread is already not the main thread. + + As far as I know this seems to be an issue in how pytest-xdist is running the tests (i.e.: + I couldn't reproduce this without running with `python -m pytest -n 0 ...`). + + -------- Code to check error / error output ---------- + + from _pydevd_bundle.pydevd_utils import is_current_thread_main_thread + import threading + indent_at_import = threading.get_ident() + + @pytest.yield_fixture(autouse=True, scope='session') + def check_main_thread_session(request): + if not is_current_thread_main_thread(): + error_msg = 'Current thread does not seem to be a main thread at the start of the session. Details:\n' + current_thread = threading.current_thread() + error_msg += 'Current thread: %s\n' % (current_thread,) + error_msg += 'Current thread ident: %s\n' % (current_thread.ident,) + error_msg += 'ident at import: %s\n' % (indent_at_import,) + error_msg += 'curr ident: %s\n' % (threading.get_ident(),) + + if hasattr(threading, 'main_thread'): + error_msg += 'Main thread found: %s\n' % (threading.main_thread(),) + error_msg += 'Main thread id: %s\n' % (threading.main_thread().ident,) + else: + error_msg += 'Current main thread not instance of: %s (%s)\n' % ( + threading._MainThread, current_thread.__class__.__mro__,) + + > raise AssertionError(error_msg) + E AssertionError: Current thread does not seem to be a main thread at the start of the session. Details: + E Current thread: <_DummyThread(Dummy-2, started daemon 7072)> + E Current thread ident: 7072 + E ident at import: 7072 + E curr ident: 7072 + E Main thread found: <_MainThread(MainThread, started 5924)> + E Main thread id: 5924 + + conftest.py:67: AssertionError + """ from _pydevd_bundle.pydevd_utils import is_current_thread_main_thread from _pydevd_bundle.pydevd_utils import dump_threads + if not is_current_thread_main_thread(): - error_msg = 'Current thread does not seem to be a main thread. Details:\n' + error_msg = "Current thread does not seem to be a main thread. Details:\n" current_thread = threading.current_thread() - error_msg += 'Current thread: %s\n' % (current_thread,) + error_msg += "Current thread: %s\n" % (current_thread,) - if hasattr(threading, 'main_thread'): - error_msg += 'Main thread found: %s\n' % (threading.main_thread(),) + if hasattr(threading, "main_thread"): + error_msg += "Main thread found: %s\n" % (threading.main_thread(),) else: - error_msg += 'Current main thread not instance of: %s (%s)' % ( - threading._MainThread, current_thread.__class__.__mro__,) + error_msg += "Current main thread not instance of: %s (%s)" % ( + threading._MainThread, + current_thread.__class__.__mro__, + ) from io import StringIO stream = StringIO() dump_threads(stream=stream) - error_msg += '\n\n' + stream.getvalue() + error_msg += "\n\n" + stream.getvalue() raise AssertionError(error_msg) class NonMainThread(threading.Thread): - def run(self): self.is_main_thread = is_current_thread_main_thread() @@ -104,10 +108,10 @@ def run(self): def test_find_thread(): from _pydevd_bundle.pydevd_constants import get_current_thread_id - assert pydevd_find_thread_by_id('123') is None - assert pydevd_find_thread_by_id( - get_current_thread_id(threading.current_thread())) is threading.current_thread() + assert pydevd_find_thread_by_id("123") is None + + assert pydevd_find_thread_by_id(get_current_thread_id(threading.current_thread())) is threading.current_thread() def check_dap_log_message(log_message, expected, evaluated, eval_locals=None): @@ -119,54 +123,25 @@ def check_dap_log_message(log_message, expected, evaluated, eval_locals=None): def test_convert_dap_log_message_to_expression(): assert check_dap_log_message( - 'a', + "a", "'a'", - 'a', + "a", ) + assert check_dap_log_message("a {a}", "'a %s' % (a,)", "a value", {"a": "value"}) + assert check_dap_log_message("a {1}", "'a %s' % (1,)", "a 1") + assert check_dap_log_message("a { }", "'a '", "a ") assert check_dap_log_message( - 'a {a}', - "'a %s' % (a,)", - 'a value', - {'a': 'value'} - ) - assert check_dap_log_message( - 'a {1}', - "'a %s' % (1,)", - 'a 1' - ) - assert check_dap_log_message( - 'a { }', - "'a '", - 'a ' - ) - assert check_dap_log_message( - 'a {1} {2}', + "a {1} {2}", "'a %s %s' % (1, 2,)", - 'a 1 2', - ) - assert check_dap_log_message( - 'a {{22:22}} {2}', - "'a %s %s' % ({22:22}, 2,)", - 'a {22: 22} 2' - ) - assert check_dap_log_message( - 'a {(22,33)}} {2}', - "'a %s} %s' % ((22,33), 2,)", - 'a (22, 33)} 2' + "a 1 2", ) + assert check_dap_log_message("a {{22:22}} {2}", "'a %s %s' % ({22:22}, 2,)", "a {22: 22} 2") + assert check_dap_log_message("a {(22,33)}} {2}", "'a %s} %s' % ((22,33), 2,)", "a (22, 33)} 2") - assert check_dap_log_message( - 'a {{1: {1}}}', - "'a %s' % ({1: {1}},)", - 'a {1: {1}}' - ) + assert check_dap_log_message("a {{1: {1}}}", "'a %s' % ({1: {1}},)", "a {1: {1}}") # Error condition. - assert check_dap_log_message( - 'a {{22:22} {2}', - "'Unbalanced braces in: a {{22:22} {2}'", - 'Unbalanced braces in: a {{22:22} {2}' - ) + assert check_dap_log_message("a {{22:22} {2}", "'Unbalanced braces in: a {{22:22} {2}'", "Unbalanced braces in: a {{22:22} {2}") def test_pydevd_log(): @@ -176,52 +151,52 @@ def test_pydevd_log(): stream = io.StringIO() with log_context(0, stream=stream): - pydev_log.critical('always') - pydev_log.info('never') + pydev_log.critical("always") + pydev_log.info("never") - assert stream.getvalue().endswith('always\n') + assert stream.getvalue().endswith("always\n") stream = io.StringIO() with log_context(1, stream=stream): - pydev_log.critical('always') - pydev_log.info('this too') - assert stream.getvalue().endswith('always\n0.00s - this too\n') + pydev_log.critical("always") + pydev_log.info("this too") + assert stream.getvalue().endswith("always\n0.00s - this too\n") stream = io.StringIO() with log_context(0, stream=stream): - pydev_log.critical('always %s', 1) + pydev_log.critical("always %s", 1) - assert stream.getvalue().endswith('always 1\n') + assert stream.getvalue().endswith("always 1\n") stream = io.StringIO() with log_context(0, stream=stream): - pydev_log.critical('always %s %s', 1, 2) + pydev_log.critical("always %s %s", 1, 2) - assert stream.getvalue().endswith('always 1 2\n') + assert stream.getvalue().endswith("always 1 2\n") stream = io.StringIO() with log_context(0, stream=stream): - pydev_log.critical('always %s %s', 1) + pydev_log.critical("always %s %s", 1) # Even if there's an error in the formatting, don't fail, just print the message and args. - assert stream.getvalue().endswith('always %s %s - (1,)\n') + assert stream.getvalue().endswith("always %s %s - (1,)\n") stream = io.StringIO() with log_context(0, stream=stream): try: raise RuntimeError() except: - pydev_log.exception('foo') + pydev_log.exception("foo") - assert 'foo\n' in stream.getvalue() - assert 'raise RuntimeError()' in stream.getvalue() + assert "foo\n" in stream.getvalue() + assert "raise RuntimeError()" in stream.getvalue() stream = io.StringIO() with log_context(0, stream=stream): - pydev_log.error_once('always %s %s', 1) + pydev_log.error_once("always %s %s", 1) # Even if there's an error in the formatting, don't fail, just print the message and args. - assert stream.getvalue().endswith('always %s %s - (1,)\n') + assert stream.getvalue().endswith("always %s %s - (1,)\n") def test_pydevd_logging_files(tmpdir): @@ -235,20 +210,20 @@ def test_pydevd_logging_files(tmpdir): stream = io.StringIO() with log_context(0, stream=stream): - d1 = str(tmpdir.join('d1')) - d2 = str(tmpdir.join('d2')) + d1 = str(tmpdir.join("d1")) + d2 = str(tmpdir.join("d2")) for d in (d1, d2): - DebugInfoHolder.PYDEVD_DEBUG_FILE = os.path.join(d, 'file.txt') + DebugInfoHolder.PYDEVD_DEBUG_FILE = os.path.join(d, "file.txt") pydev_log.initialize_debug_stream(reinitialize=True) - assert os.path.normpath(_LoggingGlobals._debug_stream_filename) == \ - os.path.normpath(os.path.join(d, 'file.%s.txt' % os.getpid())) + assert os.path.normpath(_LoggingGlobals._debug_stream_filename) == os.path.normpath( + os.path.join(d, "file.%s.txt" % os.getpid()) + ) assert os.path.exists(_LoggingGlobals._debug_stream_filename) - assert pydev_log.list_log_files(DebugInfoHolder.PYDEVD_DEBUG_FILE) == [ - _LoggingGlobals._debug_stream_filename] + assert pydev_log.list_log_files(DebugInfoHolder.PYDEVD_DEBUG_FILE) == [_LoggingGlobals._debug_stream_filename] def _check_tracing_other_threads(): @@ -262,9 +237,11 @@ def _check_tracing_other_threads(): def dump_threads_and_kill_on_timeout(): time.sleep(10) from _pydevd_bundle import pydevd_utils + pydevd_utils.dump_threads() time.sleep(1) import os + os._exit(77) _thread.start_new_thread(dump_threads_and_kill_on_timeout, ()) @@ -275,7 +252,7 @@ def method(): if trace_func: threading.current_thread().trace_func = trace_func break - time.sleep(.01) + time.sleep(0.01) def dummy_thread_method(): threads.append(threading.current_thread()) @@ -287,7 +264,7 @@ def dummy_thread_method(): threads[-1].start() _thread.start_new_thread(dummy_thread_method, ()) - wait_for_condition(lambda: len(threads) == 2, msg=lambda:'Found threads: %s' % (threads,)) + wait_for_condition(lambda: len(threads) == 2, msg=lambda: "Found threads: %s" % (threads,)) def tracing_func(frame, event, args): return tracing_func @@ -296,7 +273,7 @@ def tracing_func(frame, event, args): def check_threads_tracing_func(): for t in threads: - if getattr(t, 'trace_func', None) != tracing_func: + if getattr(t, "trace_func", None) != tracing_func: return False return True @@ -313,43 +290,52 @@ def _build_launch_env(): cwd = os.path.abspath(os.path.dirname(__file__)) assert os.path.isdir(cwd) - resources_dir = os.path.join(os.path.dirname(pydevd.__file__), 'tests_python', 'resources') + resources_dir = os.path.join(os.path.dirname(pydevd.__file__), "tests_python", "resources") assert os.path.isdir(resources_dir) - attach_to_process_dir = os.path.join(os.path.dirname(pydevd.__file__), 'pydevd_attach_to_process') + attach_to_process_dir = os.path.join(os.path.dirname(pydevd.__file__), "pydevd_attach_to_process") assert os.path.isdir(attach_to_process_dir) pydevd_dir = os.path.dirname(pydevd.__file__) assert os.path.isdir(pydevd_dir) - environ['PYTHONPATH'] = ( - cwd + os.pathsep + - resources_dir + os.pathsep + - attach_to_process_dir + os.pathsep + - pydevd_dir + os.pathsep + - environ.get('PYTHONPATH', '') + environ["PYTHONPATH"] = ( + cwd + + os.pathsep + + resources_dir + + os.pathsep + + attach_to_process_dir + + os.pathsep + + pydevd_dir + + os.pathsep + + environ.get("PYTHONPATH", "") ) return cwd, environ -def _check_in_separate_process(method_name, module_name='test_utilities', update_env={}): +def _check_in_separate_process(method_name, module_name="test_utilities", update_env={}): import subprocess + cwd, environ = _build_launch_env() environ.update(update_env) subprocess.check_call( - [sys.executable, '-c', 'import %(module_name)s;%(module_name)s.%(method_name)s()' % dict( - method_name=method_name, module_name=module_name)], + [ + sys.executable, + "-c", + "import %(module_name)s;%(module_name)s.%(method_name)s()" % dict(method_name=method_name, module_name=module_name), + ], env=environ, - cwd=cwd + cwd=cwd, ) -@pytest.mark.skipif(not IS_CPYTHON, reason='Functionality to trace other threads requires CPython.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Functionality to trace other threads requires CPython.") +@pytest.mark.skipif(PYDEVD_USE_SYS_MONITORING, reason="Tracing is not used with sys.monitoring.") def test_tracing_other_threads(): # Note: run this test in a separate process so that it doesn't mess with any current tracing # in our current process. - _check_in_separate_process('_check_tracing_other_threads') + _check_in_separate_process("_check_tracing_other_threads") def _check_basic_tracing(): @@ -372,42 +358,37 @@ def foo(): assert called[0] > 2 -@pytest.mark.skipif(not IS_CPYTHON, reason='Functionality to trace other threads requires CPython.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Functionality to trace other threads requires CPython.") +@pytest.mark.skipif(PYDEVD_USE_SYS_MONITORING, reason="Tracing is not used with sys.monitoring.") def test_tracing_basic(): - _check_in_separate_process('_check_basic_tracing') + _check_in_separate_process("_check_basic_tracing") -@pytest.mark.skipif(not IS_CPYTHON, reason='Functionality to trace other threads requires CPython.') +@pytest.mark.skipif(not IS_CPYTHON, reason="Functionality to trace other threads requires CPython.") def test_find_main_thread_id(): # Note: run the checks below in a separate process because they rely heavily on what's available # in the env (such as threads or having threading imported). - _check_in_separate_process('check_main_thread_id_simple', '_pydevd_test_find_main_thread_id') - _check_in_separate_process('check_main_thread_id_multiple_threads', '_pydevd_test_find_main_thread_id') - _check_in_separate_process('check_win_threads', '_pydevd_test_find_main_thread_id') - _check_in_separate_process('check_fix_main_thread_id_multiple_threads', '_pydevd_test_find_main_thread_id') + _check_in_separate_process("check_main_thread_id_simple", "_pydevd_test_find_main_thread_id") + _check_in_separate_process("check_main_thread_id_multiple_threads", "_pydevd_test_find_main_thread_id") + _check_in_separate_process("check_win_threads", "_pydevd_test_find_main_thread_id") + _check_in_separate_process("check_fix_main_thread_id_multiple_threads", "_pydevd_test_find_main_thread_id") import subprocess import pydevd + cwd, environ = _build_launch_env() - subprocess.check_call( - [sys.executable, '-m', '_pydevd_test_find_main_thread_id'], - env=environ, - cwd=cwd - ) + subprocess.check_call([sys.executable, "-m", "_pydevd_test_find_main_thread_id"], env=environ, cwd=cwd) - resources_dir = os.path.join(os.path.dirname(pydevd.__file__), 'tests_python', 'resources') + resources_dir = os.path.join(os.path.dirname(pydevd.__file__), "tests_python", "resources") - subprocess.check_call( - [sys.executable, os.path.join(resources_dir, '_pydevd_test_find_main_thread_id.py') ], - env=environ, - cwd=cwd - ) + subprocess.check_call([sys.executable, os.path.join(resources_dir, "_pydevd_test_find_main_thread_id.py")], env=environ, cwd=cwd) -@pytest.mark.skipif(not IS_WINDOWS or IS_JYTHON, reason='Windows-only test.') +@pytest.mark.skipif(not IS_WINDOWS or IS_JYTHON, reason="Windows-only test.") def test_get_ppid(): from _pydevd_bundle.pydevd_api import PyDevdAPI + api = PyDevdAPI() # On python 3 we can check that our internal api which is used for Python 2 gives the # same result as os.getppid. @@ -417,10 +398,13 @@ def test_get_ppid(): def _check_gevent(expect_msg): from _pydevd_bundle.pydevd_utils import notify_about_gevent_if_needed + assert not notify_about_gevent_if_needed() import gevent + assert not notify_about_gevent_if_needed() import gevent.monkey + assert not notify_about_gevent_if_needed() gevent.monkey.patch_all() assert notify_about_gevent_if_needed() == expect_msg @@ -434,13 +418,13 @@ def check_dont_notify_on_gevent_loaded(): _check_gevent(False) -@pytest.mark.skipif(not TEST_GEVENT, reason='Gevent not installed.') +@pytest.mark.skipif(not TEST_GEVENT, reason="Gevent not installed.") def test_gevent_notify(): - _check_in_separate_process('check_notify_on_gevent_loaded', update_env={'GEVENT_SUPPORT': ''}) - _check_in_separate_process('check_dont_notify_on_gevent_loaded', update_env={'GEVENT_SUPPORT': 'True'}) + _check_in_separate_process("check_notify_on_gevent_loaded", update_env={"GEVENT_SUPPORT": ""}) + _check_in_separate_process("check_dont_notify_on_gevent_loaded", update_env={"GEVENT_SUPPORT": "True"}) -@pytest.mark.skipif(True, reason='Skipping because running this test can interrupt the test suite execution.') +@pytest.mark.skipif(True, reason="Skipping because running this test can interrupt the test suite execution.") def test_interrupt_main_thread(): from _pydevd_bundle.pydevd_utils import interrupt_main_thread import time @@ -472,20 +456,19 @@ def interrupt(): actual_timeout = time.time() - initial_time # If this fails it means that although we interrupted Python actually waited for the next # instruction to send the event and didn't really interrupt the thread. - assert actual_timeout < timeout, 'Expected the actual timeout (%s) to be < than the timeout (%s)' % ( - actual_timeout, timeout) + assert actual_timeout < timeout, "Expected the actual timeout (%s) to be < than the timeout (%s)" % (actual_timeout, timeout) else: - raise AssertionError('KeyboardInterrupt not generated in main thread.') + raise AssertionError("KeyboardInterrupt not generated in main thread.") -@pytest.mark.skipif(sys.version_info[0] < 3, reason='Only available for Python 3.') +@pytest.mark.skipif(sys.version_info[0] < 3, reason="Only available for Python 3.") def test_get_smart_step_into_variant_from_frame_offset(): from _pydevd_bundle.pydevd_bytecode_utils import get_smart_step_into_variant_from_frame_offset + variants = [] assert get_smart_step_into_variant_from_frame_offset(0, variants) is None class DummyVariant(object): - def __init__(self, offset): self.offset = offset @@ -503,11 +486,10 @@ def __init__(self, offset): def test_threading_hide_pydevd(): - class T(threading.Thread): - def __init__(self, is_pydev_daemon_thread): from _pydevd_bundle.pydevd_daemon_thread import mark_as_pydevd_daemon_thread + threading.Thread.__init__(self) if is_pydev_daemon_thread: mark_as_pydevd_daemon_thread(self) @@ -525,7 +507,7 @@ def run(self): t1.start() # i.e.: the patching doesn't work for other implementations. - if IS_CPYTHON: + if IS_CPYTHON or IS_PYPY: assert threading.active_count() == current_count + 1 assert t0 not in threading.enumerate() else: @@ -541,10 +523,10 @@ def test_import_token_from_module(): from _pydevd_bundle.pydevd_utils import import_attr_from_module with pytest.raises(ImportError): - import_attr_from_module('sys') + import_attr_from_module("sys") with pytest.raises(ImportError): - import_attr_from_module('sys.settrace.foo') + import_attr_from_module("sys.settrace.foo") - assert import_attr_from_module('sys.settrace') == sys.settrace - assert import_attr_from_module('threading.Thread.start') == threading.Thread.start + assert import_attr_from_module("sys.settrace") == sys.settrace + assert import_attr_from_module("threading.Thread.start") == threading.Thread.start diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/deep_nest_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/deep_nest_test.py index 7b1972b89..d662e4a99 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/deep_nest_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/deep_nest_test.py @@ -1,7 +1,7 @@ import unittest + class SampleTest(unittest.TestCase): - def setUp(self): return @@ -18,5 +18,5 @@ def test_i_am_a_unique_test_name(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/non_test_file.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/non_test_file.py index 470c65046..052cac64d 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/non_test_file.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested2/non_test_file.py @@ -1,3 +1,2 @@ - """ i am a python file with no tests """ pass diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested3/non_test_file.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested3/non_test_file.py index 470c65046..052cac64d 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested3/non_test_file.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/nested3/non_test_file.py @@ -1,3 +1,2 @@ - """ i am a python file with no tests """ pass diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/non_test_file.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/non_test_file.py index 470c65046..052cac64d 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/non_test_file.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/non_test_file.py @@ -1,3 +1,2 @@ - """ i am a python file with no tests """ pass diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/simple4_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/simple4_test.py index ba5d45f1a..69f1a35a1 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/simple4_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/nested_dir/simple4_test.py @@ -1,7 +1,7 @@ import unittest + class NestedSampleTest(unittest.TestCase): - def setUp(self): return @@ -12,5 +12,5 @@ def test_non_unique_name(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/non_test_file.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/non_test_file.py index 470c65046..052cac64d 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/non_test_file.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/non_test_file.py @@ -1,3 +1,2 @@ - """ i am a python file with no tests """ pass diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple2_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple2_test.py index d46468ede..52acfcc02 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple2_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple2_test.py @@ -1,7 +1,7 @@ import unittest + class YetAnotherSampleTest(unittest.TestCase): - def setUp(self): return @@ -12,5 +12,5 @@ def test_abc(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple3_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple3_test.py index da1ccbfba..cb9249d7b 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple3_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple3_test.py @@ -1,7 +1,7 @@ import unittest + class StillYetAnotherSampleTest(unittest.TestCase): - def setUp(self): return @@ -12,5 +12,5 @@ def test_non_unique_name(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleClass_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleClass_test.py index 3a9c900e2..4c25d8329 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleClass_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleClass_test.py @@ -1,7 +1,7 @@ import unittest -class SetUpClassTest(unittest.TestCase): +class SetUpClassTest(unittest.TestCase): @classmethod def setUpClass(cls): raise ValueError("This is an INTENTIONAL value error in setUpClass.") @@ -10,5 +10,5 @@ def test_blank(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleModule_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleModule_test.py index fdde67e4a..94470534b 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleModule_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simpleModule_test.py @@ -1,10 +1,11 @@ import unittest + def setUpModule(): raise ValueError("This is an INTENTIONAL value error in setUpModule.") + class SetUpModuleTest(unittest.TestCase): - def setUp(cls): pass @@ -12,5 +13,5 @@ def test_blank(self): pass -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple_test.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple_test.py index 619df7c82..177b055d5 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple_test.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples/simple_test.py @@ -1,7 +1,7 @@ import unittest + class SampleTest(unittest.TestCase): - def setUp(self): pass @@ -9,15 +9,19 @@ def tearDown(self): pass def test_xxxxxx1(self): - self.fail('Fail test 2') + self.fail("Fail test 2") + def test_xxxxxx2(self): pass + def test_xxxxxx3(self): pass + def test_xxxxxx4(self): pass + def test_non_unique_name(self): - print('non unique name ran') + print("non unique name ran") class AnotherSampleTest(unittest.TestCase): @@ -29,17 +33,19 @@ def tearDown(self): def test_1(self): pass + def test_2(self): - """ im a doc string""" + """im a doc string""" pass + def todo_not_tested(self): - ''' + """ Not there by default! - ''' + """ -if __name__ == '__main__': -# suite = unittest.makeSuite(SampleTest, 'test') -# runner = unittest.TextTestRunner( verbosity=3 ) -# runner.run(suite) +if __name__ == "__main__": + # suite = unittest.makeSuite(SampleTest, 'test') + # runner = unittest.TextTestRunner( verbosity=3 ) + # runner.run(suite) unittest.main() diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples_integrated/root/__init__.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples_integrated/root/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/samples_integrated/root/test_in_root.py b/src/debugpy/_vendored/pydevd/tests_runfiles/samples_integrated/root/test_in_root.py new file mode 100644 index 000000000..d3bb3b542 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/samples_integrated/root/test_in_root.py @@ -0,0 +1,10 @@ +import unittest + + +class MyTest(unittest.TestCase): + + def test1(self): + print("--on-test-1") + + def test2(self): + print("--on-test-2") diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevd_property.py b/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevd_property.py index aa1d01084..e89d8e896 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevd_property.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevd_property.py @@ -1,41 +1,40 @@ -''' +""" Created on Aug 22, 2011 @author: hussain.bohra @author: fabioz -''' +""" import os import sys import unittest -#======================================================================================================================= + +# ======================================================================================================================= # Test -#======================================================================================================================= +# ======================================================================================================================= class Test(unittest.TestCase): - """Test cases to validate custom property implementation in pydevd - """ + """Test cases to validate custom property implementation in pydevd""" def setUp(self, nused=None): self.tempdir = os.path.join(os.path.dirname(os.path.dirname(__file__))) sys.path.insert(0, self.tempdir) from _pydevd_bundle import pydevd_traceproperty - self.old = pydevd_traceproperty.replace_builtin_property() + self.old = pydevd_traceproperty.replace_builtin_property() def tearDown(self, unused=None): from _pydevd_bundle import pydevd_traceproperty + pydevd_traceproperty.replace_builtin_property(self.old) sys.path.remove(self.tempdir) - def test_property(self): - """Test case to validate custom property - """ + """Test case to validate custom property""" from _pydevd_bundle import pydevd_traceproperty - class TestProperty(object): + class TestProperty(object): def __init__(self): self._get = 0 self._set = 0 @@ -52,19 +51,17 @@ def set_name(self, value): def del_name(self): self._del += 1 del self.__name + name = property(get_name, set_name, del_name, "name's docstring") self.assertEqual(name.__class__, pydevd_traceproperty.DebugProperty) testObj = TestProperty() self._check(testObj) - def test_property2(self): - """Test case to validate custom property - """ + """Test case to validate custom property""" class TestProperty(object): - def __init__(self): self._get = 0 self._set = 0 @@ -73,39 +70,39 @@ def __init__(self): def name(self): self._get += 1 return self.__name + name = property(name) def set_name(self, value): self._set += 1 self.__name = value + name.setter(set_name) def del_name(self): self._del += 1 del self.__name + name.deleter(del_name) testObj = TestProperty() self._check(testObj) - def test_property3(self): - """Test case to validate custom property - """ + """Test case to validate custom property""" class TestProperty(object): - def __init__(self): - self._name = 'foo' + self._name = "foo" def name(self): return self._name + name = property(name) testObj = TestProperty() - self.assertRaises(AttributeError, setattr, testObj, 'name', 'bar') - self.assertRaises(AttributeError, delattr, testObj, 'name') - + self.assertRaises(AttributeError, setattr, testObj, "name", "bar") + self.assertRaises(AttributeError, delattr, testObj, "name") def _check(self, testObj): testObj.name = "Custom" @@ -114,11 +111,10 @@ def _check(self, testObj): self.assertEqual(testObj.name, "Custom") self.assertEqual(1, testObj._get) - self.assertTrue(hasattr(testObj, 'name')) + self.assertTrue(hasattr(testObj, "name")) del testObj.name self.assertEqual(1, testObj._del) - self.assertTrue(not hasattr(testObj, 'name')) + self.assertTrue(not hasattr(testObj, "name")) testObj.name = "Custom2" self.assertEqual(testObj.name, "Custom2") - diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevdio.py b/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevdio.py index 3d0b007d6..2e0aab4b5 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevdio.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/test_pydevdio.py @@ -4,33 +4,34 @@ import unittest -class Test(unittest.TestCase): +class Test(unittest.TestCase): def test_it(self): - #make it as if we were executing from the directory above this one (so that we can use jycompletionserver - #without the need for it being in the pythonpath) - #(twice the dirname to get the previous level from this file.) - import test_pydevdio #@UnresolvedImport - importing itself + # make it as if we were executing from the directory above this one (so that we can use jycompletionserver + # without the need for it being in the pythonpath) + # (twice the dirname to get the previous level from this file.) + import test_pydevdio # @UnresolvedImport - importing itself + ADD_TO_PYTHONPATH = os.path.join(os.path.dirname(os.path.dirname(test_pydevdio.__file__))) sys.path.insert(0, ADD_TO_PYTHONPATH) try: from _pydevd_bundle import pydevd_io + original = sys.stdout try: sys.stdout = pydevd_io.IOBuf() - print('foo') - print('bar') + print("foo") + print("bar") - self.assertEqual('foo\nbar\n', sys.stdout.getvalue()) #@UndefinedVariable + self.assertEqual("foo\nbar\n", sys.stdout.getvalue()) # @UndefinedVariable - print('ww') - print('xx') - self.assertEqual('ww\nxx\n', sys.stdout.getvalue()) #@UndefinedVariable + print("ww") + print("xx") + self.assertEqual("ww\nxx\n", sys.stdout.getvalue()) # @UndefinedVariable finally: sys.stdout = original finally: - #remove it to leave it ok for other tests + # remove it to leave it ok for other tests sys.path.remove(ADD_TO_PYTHONPATH) - diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles.py b/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles.py index d20b002b3..03aff39ad 100644 --- a/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles.py +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles.py @@ -1,27 +1,20 @@ import os.path import sys -IS_JYTHON = sys.platform.find('java') != -1 +IS_JYTHON = sys.platform.find("java") != -1 -try: - this_file_name = __file__ -except NameError: - # stupid jython. plain old __file__ isnt working for some reason - import test_runfiles # @UnresolvedImport - importing the module itself - this_file_name = test_runfiles.__file__ - -desired_runfiles_path = os.path.normpath(os.path.dirname(this_file_name) + "/..") -sys.path.insert(0, desired_runfiles_path) +project_rootdir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +sys.path.insert(0, project_rootdir) from _pydev_runfiles import pydev_runfiles_unittest from _pydev_runfiles import pydev_runfiles_xml_rpc from _pydevd_bundle import pydevd_io # remove existing pydev_runfiles from modules (if any), so that we can be sure we have the correct version -if 'pydev_runfiles' in sys.modules: - del sys.modules['pydev_runfiles'] -if '_pydev_runfiles.pydev_runfiles' in sys.modules: - del sys.modules['_pydev_runfiles.pydev_runfiles'] +if "pydev_runfiles" in sys.modules: + del sys.modules["pydev_runfiles"] +if "_pydev_runfiles.pydev_runfiles" in sys.modules: + del sys.modules["_pydev_runfiles.pydev_runfiles"] from _pydev_runfiles import pydev_runfiles import unittest @@ -42,11 +35,10 @@ sys.path = orig_syspath[:] # remove it so that we leave it ok for other tests -sys.path.remove(desired_runfiles_path) +sys.path.remove(project_rootdir) class RunfilesTest(unittest.TestCase): - def _setup_scenario( self, path, @@ -56,7 +48,7 @@ def _setup_scenario( exclude_files=None, exclude_tests=None, include_files=None, - ): + ): self.MyTestRunner = pydev_runfiles.PydevTestRunner( pydev_runfiles.Configuration( files_or_dirs=path, @@ -75,7 +67,7 @@ def _setup_scenario( self.filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) def setUp(self): - self.file_dir = [os.path.abspath(os.path.join(desired_runfiles_path, 'tests_runfiles/samples'))] + self.file_dir = [os.path.abspath(os.path.join(project_rootdir, "tests_runfiles", "samples"))] self._setup_scenario(self.file_dir, None) def test_suite_used(self): @@ -107,11 +99,13 @@ def test_parse_cmdline(self): sys.argv = "pydev_runfiles.py --include_tests Abc.test_def,Mod.test_abc c:/junk/".split() configuration = pydev_runfiles.parse_cmdline() self.assertEqual([sys.argv[-1]], configuration.files_or_dirs) - self.assertEqual(sys.argv[2].split(','), configuration.include_tests) + self.assertEqual(sys.argv[2].split(","), configuration.include_tests) - sys.argv = ('C:\\eclipse-SDK-3.2-win32\\eclipse\\plugins\\org.python.pydev.debug_1.2.2\\pysrc\\pydev_runfiles.py ' + - '--verbosity 1 ' + - 'C:\\workspace_eclipse\\fronttpa\\tests\\gui_tests\\calendar_popup_control_test.py ').split() + sys.argv = ( + "C:\\eclipse-SDK-3.2-win32\\eclipse\\plugins\\org.python.pydev.debug_1.2.2\\pysrc\\pydev_runfiles.py " + + "--verbosity 1 " + + "C:\\workspace_eclipse\\fronttpa\\tests\\gui_tests\\calendar_popup_control_test.py " + ).split() configuration = pydev_runfiles.parse_cmdline() self.assertEqual([sys.argv[-1]], configuration.files_or_dirs) self.assertEqual(1, configuration.verbosity) @@ -124,11 +118,11 @@ def test_parse_cmdline(self): sys.argv = "pydev_runfiles.py --exclude_files=*.txt,a*.py".split() configuration = pydev_runfiles.parse_cmdline() - self.assertEqual(['*.txt', 'a*.py'], configuration.exclude_files) + self.assertEqual(["*.txt", "a*.py"], configuration.exclude_files) sys.argv = "pydev_runfiles.py --exclude_tests=*__todo,test*bar".split() configuration = pydev_runfiles.parse_cmdline() - self.assertEqual(['*__todo', 'test*bar'], configuration.exclude_tests) + self.assertEqual(["*__todo", "test*bar"], configuration.exclude_tests) def test___adjust_python_path_works_for_directories(self): orig_syspath = sys.path @@ -147,7 +141,7 @@ def test___is_valid_py_file(self): def test___unixify(self): unixify = self.MyTestRunner._PydevTestRunner__unixify - self.assertEqual("c:/temp/junk/asdf.py", unixify("c:SEPtempSEPjunkSEPasdf.py".replace('SEP', os.sep))) + self.assertEqual("c:/temp/junk/asdf.py", unixify("c:SEPtempSEPjunkSEPasdf.py".replace("SEP", os.sep))) def test___importify(self): importify = self.MyTestRunner._PydevTestRunner__importify @@ -172,9 +166,10 @@ def test_finding_files_in_dir_from_file_system(self): def test___get_module_from_str(self): my_importer = self.MyTestRunner._PydevTestRunner__get_module_from_str - my_os_path = my_importer("os.path", True, 'unused') + my_os_path = my_importer("os.path", True, "unused") from os import path import os.path as path2 + self.assertEqual(path, my_os_path) self.assertEqual(path2, my_os_path) self.assertNotEqual(__import__("os.path"), my_os_path) @@ -242,84 +237,88 @@ def test_finding_tests_with_regex_filters(self): self.assertEqual(0, self.count_suite(filtered_tests)) def test_matching_tests(self): - self._setup_scenario(self.file_dir, None, ['StillYetAnotherSampleTest']) + self._setup_scenario(self.file_dir, None, ["StillYetAnotherSampleTest"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(1, self.count_suite(filtered_tests)) - self._setup_scenario(self.file_dir, None, ['SampleTest.test_xxxxxx1']) + self._setup_scenario(self.file_dir, None, ["SampleTest.test_xxxxxx1"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(1, self.count_suite(filtered_tests)) - self._setup_scenario(self.file_dir, None, ['SampleTest']) + self._setup_scenario(self.file_dir, None, ["SampleTest"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(8, self.count_suite(filtered_tests)) - self._setup_scenario(self.file_dir, None, ['AnotherSampleTest.todo_not_tested']) + self._setup_scenario(self.file_dir, None, ["AnotherSampleTest.todo_not_tested"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(1, self.count_suite(filtered_tests)) - self._setup_scenario(self.file_dir, None, ['StillYetAnotherSampleTest', 'SampleTest.test_xxxxxx1']) + self._setup_scenario(self.file_dir, None, ["StillYetAnotherSampleTest", "SampleTest.test_xxxxxx1"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(2, self.count_suite(filtered_tests)) - self._setup_scenario(self.file_dir, None, exclude_tests=['*']) + self._setup_scenario(self.file_dir, None, exclude_tests=["*"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(self.count_suite(filtered_tests), 0) - self._setup_scenario(self.file_dir, None, exclude_tests=['*a*']) + self._setup_scenario(self.file_dir, None, exclude_tests=["*a*"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(self.count_suite(filtered_tests), 6) self.assertEqual( set(self.MyTestRunner.list_test_names(filtered_tests)), - set(['test_1', 'test_2', 'test_xxxxxx1', 'test_xxxxxx2', 'test_xxxxxx3', 'test_xxxxxx4']) + set(["test_1", "test_2", "test_xxxxxx1", "test_xxxxxx2", "test_xxxxxx3", "test_xxxxxx4"]), ) - self._setup_scenario(self.file_dir, None, exclude_tests=['*a*', '*x*']) + self._setup_scenario(self.file_dir, None, exclude_tests=["*a*", "*x*"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) self.assertEqual(self.count_suite(filtered_tests), 2) - self.assertEqual( - set(self.MyTestRunner.list_test_names(filtered_tests)), - set(['test_1', 'test_2']) - ) + self.assertEqual(set(self.MyTestRunner.list_test_names(filtered_tests)), set(["test_1", "test_2"])) - self._setup_scenario(self.file_dir, None, exclude_files=['simple_test.py']) + self._setup_scenario(self.file_dir, None, exclude_files=["simple_test.py"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) names = self.MyTestRunner.list_test_names(filtered_tests) - self.assertTrue('test_xxxxxx1' not in names, 'Found: %s' % (names,)) + self.assertTrue("test_xxxxxx1" not in names, "Found: %s" % (names,)) self.assertEqual( - set(['test_abc', 'test_non_unique_name', 'test_non_unique_name', 'test_asdf2', 'test_i_am_a_unique_test_name', 'test_non_unique_name', 'test_blank']), - set(names) + set( + [ + "test_abc", + "test_non_unique_name", + "test_non_unique_name", + "test_asdf2", + "test_i_am_a_unique_test_name", + "test_non_unique_name", + "test_blank", + ] + ), + set(names), ) - self._setup_scenario(self.file_dir, None, include_files=['simple3_test.py']) + self._setup_scenario(self.file_dir, None, include_files=["simple3_test.py"]) filtered_tests = self.MyTestRunner.filter_tests(self.all_tests) names = self.MyTestRunner.list_test_names(filtered_tests) - self.assertTrue('test_xxxxxx1' not in names, 'Found: %s' % (names,)) + self.assertTrue("test_xxxxxx1" not in names, "Found: %s" % (names,)) - self.assertEqual( - set(['test_non_unique_name']), - set(names) - ) + self.assertEqual(set(["test_non_unique_name"]), set(names)) def test_xml_rpc_communication(self): import sys - sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'samples')) + + sys.path.insert(0, os.path.join(os.path.dirname(__file__), "samples")) notifications = [] class Server: - def __init__(self, notifications): self.notifications = notifications def notifyConnected(self): # This method is called at the very start (in runfiles.py), and we do not check this here - raise AssertionError('Should not be called from the run tests.') + raise AssertionError("Should not be called from the run tests.") def notifyTestsCollected(self, number_of_tests): - self.notifications.append(('notifyTestsCollected', number_of_tests)) + self.notifications.append(("notifyTestsCollected", number_of_tests)) def notifyStartTest(self, file, test): pass @@ -337,25 +336,25 @@ def notifyTest(self, cond, captured_output, error_contents, file, test, time): pass if error_contents: error_contents = error_contents.splitlines()[-1].strip() - self.notifications.append(('notifyTest', cond, captured_output.strip(), error_contents, file, test)) + self.notifications.append(("notifyTest", cond, captured_output.strip(), error_contents, file, test)) def notifyTestRunFinished(self, total_time): - self.notifications.append(('notifyTestRunFinished',)) + self.notifications.append(("notifyTestRunFinished",)) server = Server(notifications) pydev_runfiles_xml_rpc.set_server(server) - simple_test = os.path.join(self.file_dir[0], 'simple_test.py') - simple_test2 = os.path.join(self.file_dir[0], 'simple2_test.py') - simpleClass_test = os.path.join(self.file_dir[0], 'simpleClass_test.py') - simpleModule_test = os.path.join(self.file_dir[0], 'simpleModule_test.py') + simple_test = os.path.join(self.file_dir[0], "simple_test.py") + simple_test2 = os.path.join(self.file_dir[0], "simple2_test.py") + simpleClass_test = os.path.join(self.file_dir[0], "simpleClass_test.py") + simpleModule_test = os.path.join(self.file_dir[0], "simpleModule_test.py") files_to_tests = {} - files_to_tests.setdefault(simple_test , []).append('SampleTest.test_xxxxxx1') - files_to_tests.setdefault(simple_test , []).append('SampleTest.test_xxxxxx2') - files_to_tests.setdefault(simple_test , []).append('SampleTest.test_non_unique_name') - files_to_tests.setdefault(simple_test2, []).append('YetAnotherSampleTest.test_abc') - files_to_tests.setdefault(simpleClass_test, []).append('SetUpClassTest.test_blank') - files_to_tests.setdefault(simpleModule_test, []).append('SetUpModuleTest.test_blank') + files_to_tests.setdefault(simple_test, []).append("SampleTest.test_xxxxxx1") + files_to_tests.setdefault(simple_test, []).append("SampleTest.test_xxxxxx2") + files_to_tests.setdefault(simple_test, []).append("SampleTest.test_non_unique_name") + files_to_tests.setdefault(simple_test2, []).append("YetAnotherSampleTest.test_abc") + files_to_tests.setdefault(simpleClass_test, []).append("SetUpClassTest.test_blank") + files_to_tests.setdefault(simpleModule_test, []).append("SetUpModuleTest.test_blank") self._setup_scenario(None, files_to_tests=files_to_tests) self.MyTestRunner.verbosity = 2 @@ -367,40 +366,72 @@ def notifyTestRunFinished(self, total_time): if sys.version_info[:2] <= (2, 6): # The setUpClass is not supported in Python 2.6 (thus we have no collection error). expected = [ - ('notifyTest', 'fail', '', 'AssertionError: Fail test 2', simple_test, 'SampleTest.test_xxxxxx1'), - ('notifyTest', 'ok', '', '', simple_test2, 'YetAnotherSampleTest.test_abc'), - ('notifyTest', 'ok', '', '', simpleClass_test, 'SetUpClassTest.test_blank'), - ('notifyTest', 'ok', '', '', simpleModule_test, 'SetUpModuleTest.test_blank'), - ('notifyTest', 'ok', '', '', simple_test, 'SampleTest.test_xxxxxx2'), - ('notifyTest', 'ok', 'non unique name ran', '', simple_test, 'SampleTest.test_non_unique_name'), - ('notifyTestRunFinished',), - ('notifyTestsCollected', 6) + ("notifyTest", "fail", "", "AssertionError: Fail test 2", simple_test, "SampleTest.test_xxxxxx1"), + ("notifyTest", "ok", "", "", simple_test2, "YetAnotherSampleTest.test_abc"), + ("notifyTest", "ok", "", "", simpleClass_test, "SetUpClassTest.test_blank"), + ("notifyTest", "ok", "", "", simpleModule_test, "SetUpModuleTest.test_blank"), + ("notifyTest", "ok", "", "", simple_test, "SampleTest.test_xxxxxx2"), + ("notifyTest", "ok", "non unique name ran", "", simple_test, "SampleTest.test_non_unique_name"), + ("notifyTestRunFinished",), + ("notifyTestsCollected", 6), ] else: expected = [ - ('notifyTestsCollected', 6), - ('notifyTest', 'ok', 'non unique name ran', '', simple_test, 'SampleTest.test_non_unique_name'), - ('notifyTest', 'fail', '', 'AssertionError: Fail test 2', simple_test, 'SampleTest.test_xxxxxx1'), - ('notifyTest', 'ok', '', '', simple_test, 'SampleTest.test_xxxxxx2'), - ('notifyTest', 'ok', '', '', simple_test2, 'YetAnotherSampleTest.test_abc'), - ] + ("notifyTestsCollected", 6), + ("notifyTest", "ok", "non unique name ran", "", simple_test, "SampleTest.test_non_unique_name"), + ("notifyTest", "fail", "", "AssertionError: Fail test 2", simple_test, "SampleTest.test_xxxxxx1"), + ("notifyTest", "ok", "", "", simple_test, "SampleTest.test_xxxxxx2"), + ("notifyTest", "ok", "", "", simple_test2, "YetAnotherSampleTest.test_abc"), + ] if not IS_JYTHON: - if 'samples.simpleClass_test' in str(notifications): - expected.append(('notifyTest', 'error', '', 'ValueError: This is an INTENTIONAL value error in setUpClass.', - simpleClass_test.replace('/', os.path.sep), 'samples.simpleClass_test.SetUpClassTest ')) - expected.append(('notifyTest', 'error', '', 'ValueError: This is an INTENTIONAL value error in setUpModule.', - simpleModule_test.replace('/', os.path.sep), 'samples.simpleModule_test ')) + if "samples.simpleClass_test" in str(notifications): + expected.append( + ( + "notifyTest", + "error", + "", + "ValueError: This is an INTENTIONAL value error in setUpClass.", + simpleClass_test.replace("/", os.path.sep), + "samples.simpleClass_test.SetUpClassTest ", + ) + ) + expected.append( + ( + "notifyTest", + "error", + "", + "ValueError: This is an INTENTIONAL value error in setUpModule.", + simpleModule_test.replace("/", os.path.sep), + "samples.simpleModule_test ", + ) + ) else: - expected.append(('notifyTest', 'error', '', 'ValueError: This is an INTENTIONAL value error in setUpClass.', - simpleClass_test.replace('/', os.path.sep), 'simpleClass_test.SetUpClassTest ')) - expected.append(('notifyTest', 'error', '', 'ValueError: This is an INTENTIONAL value error in setUpModule.', - simpleModule_test.replace('/', os.path.sep), 'simpleModule_test ')) + expected.append( + ( + "notifyTest", + "error", + "", + "ValueError: This is an INTENTIONAL value error in setUpClass.", + simpleClass_test.replace("/", os.path.sep), + "simpleClass_test.SetUpClassTest ", + ) + ) + expected.append( + ( + "notifyTest", + "error", + "", + "ValueError: This is an INTENTIONAL value error in setUpModule.", + simpleModule_test.replace("/", os.path.sep), + "simpleModule_test ", + ) + ) else: - expected.append(('notifyTest', 'ok', '', '', simpleClass_test, 'SetUpClassTest.test_blank')) - expected.append(('notifyTest', 'ok', '', '', simpleModule_test, 'SetUpModuleTest.test_blank')) + expected.append(("notifyTest", "ok", "", "", simpleClass_test, "SetUpClassTest.test_blank")) + expected.append(("notifyTest", "ok", "", "", simpleModule_test, "SetUpModuleTest.test_blank")) - expected.append(('notifyTestRunFinished',)) + expected.append(("notifyTestRunFinished",)) expected.sort() new_notifications = [] @@ -408,14 +439,16 @@ def notifyTestRunFinished(self, total_time): try: if len(notification) == 6: # Some are binary on Py3. - new_notifications.append(( - notification[0], - notification[1], - notification[2].encode('latin1'), - notification[3].encode('latin1'), - notification[4], - notification[5], - )) + new_notifications.append( + ( + notification[0], + notification[1], + notification[2].encode("latin1"), + notification[3].encode("latin1"), + notification[4], + notification[5], + ) + ) else: new_notifications.append(notification) except: @@ -424,14 +457,11 @@ def notifyTestRunFinished(self, total_time): notifications.sort() if not IS_JYTHON: - self.assertEqual( - expected, - notifications - ) + self.assertEqual(expected, notifications) finally: pydevd_io.end_redirect() b = buf.getvalue() if sys.version_info[:2] > (2, 6): - self.assertTrue(b.find('Ran 4 tests in ') != -1, 'Found: ' + b) + self.assertTrue(b.find("Ran 4 tests in ") != -1, "Found: " + b) else: - self.assertTrue(b.find('Ran 6 tests in ') != -1, 'Found: ' + b) + self.assertTrue(b.find("Ran 6 tests in ") != -1, "Found: " + b) diff --git a/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles_integrated.py b/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles_integrated.py new file mode 100644 index 000000000..1b2bc2ba2 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/tests_runfiles/test_runfiles_integrated.py @@ -0,0 +1,85 @@ +import os +from subprocess import CompletedProcess +import subprocess +import sys +from typing import Union, Literal, Optional, Dict +import json + + +def python_run( + cmdline, + returncode: Union[Literal["error"], Literal["any"], int], + cwd=None, + additional_env: Optional[Dict[str, str]] = None, + timeout=None, +) -> CompletedProcess: + cp = os.environ.copy() + cp["PYTHONPATH"] = os.pathsep.join([x for x in sys.path if x]) + if additional_env: + cp.update(additional_env) + args = [sys.executable] + cmdline + result = subprocess.run(args, capture_output=True, env=cp, cwd=cwd, timeout=timeout) + + if returncode == "any": + return result + + if returncode == "error" and result.returncode: + return result + + if result.returncode == returncode: + return result + + # This is a bit too verbose, so, commented out for now. + # env_str = "\n".join(str(x) for x in sorted(cp.items())) + + raise AssertionError( + f"""Expected returncode: {returncode}. Found: {result.returncode}. +=== stdout: +{result.stdout.decode('utf-8')} + +=== stderr: +{result.stderr.decode('utf-8')} + +=== Args: +{args} + +""" + ) + + +project_rootdir = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +cwd = os.path.join(project_rootdir, "tests_runfiles", "samples_integrated") +runfiles = os.path.join(project_rootdir, "runfiles.py") +test_in_root = os.path.join(cwd, "root", "test_in_root.py") + +assert os.path.exists(cwd), f"{cwd} does not exist." +assert os.path.exists(runfiles), f"{runfiles} does not exist." +assert os.path.exists(test_in_root), f"{test_in_root} does not exist." +assert os.path.exists(project_rootdir), f"{project_rootdir} does not exist." + + +env_filter = { + "PYDEV_RUNFILES_FILTER_TESTS": json.dumps( + { + "include": [ + [ + test_in_root, + "MyTest.test1", + ], + ] + } + ) +} + + +def test_runfiles_integrated(): + use_env = {} + use_env.update(env_filter) + use_env["PYTHONPATH"] = cwd + completed = python_run(["-Xfrozen_modules=off", runfiles, cwd], returncode=0, cwd=cwd, additional_env=use_env) + # print(completed.stdout.decode("utf-8")) + # print(completed.stderr.decode("utf-8")) + output = completed.stdout.decode("utf-8") + assert "--on-test-1" in output + assert "--on-test-2" not in output + assert "--on-test-3" not in output diff --git a/src/debugpy/_vendored/pydevd/third_party/cython_json.py b/src/debugpy/_vendored/pydevd/third_party/cython_json.py new file mode 100644 index 000000000..e4644e7d0 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/third_party/cython_json.py @@ -0,0 +1,297 @@ +import Cython +from Cython.Compiler import Nodes +from Cython.Compiler.Errors import CompileError +import sys +import json +import traceback +import os + +try: + from Cython.Compiler import Errors + + Errors.init_thread() # This is needed in Cython 3.0.0 (otherwise reporting errors will throw exception). +except Exception: + pass + +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +# Note: Cython has some recursive structures in some classes, so, parsing only what we really +# expect may be a bit better (although our recursion check should get that too). +accepted_info = {"PyClassDef": set(["name", "doc", "body", "bases", "decorators", "pos"])} + + +def node_to_dict(node, _recurse_level=0, memo=None): + nodeid = id(node) # just to be sure it's checked by identity in the memo + if memo is None: + memo = {} + else: + if nodeid in memo: + # i.e.: prevent Nodes recursion. + return None + memo[nodeid] = 1 + try: + _recurse_level += 1 + assert _recurse_level < 500, "It seems we are recursing..." + + node_name = node.__class__.__name__ + # print((' ' * _recurse_level) + node_name) + if node_name.endswith("Node"): + node_name = node_name[:-4] + data = {"__node__": node_name} + if _recurse_level == 1: + data["__version__"] = Cython.__version__ + + dct = node.__dict__ + accepted = accepted_info.get(node_name) + if accepted is None: + items = [(key, value) for key, value in dct.items()] + else: + # for key in dct.keys(): + # if key not in accepted: + # print('Skipped: %s' % (key,)) + items = [(key, dct[key]) for key in accepted] + + for attr_name, attr in items: + if attr_name in ("pos", "position"): + data["line"] = attr[1] + data["col"] = attr[2] + continue + + if isinstance(attr, Nodes.Node): + data[attr_name] = node_to_dict(attr, _recurse_level, memo) + + elif isinstance(attr, (list, tuple)): + lst = [] + + for x in attr: + if isinstance(x, Nodes.Node): + lst.append(node_to_dict(x, _recurse_level, memo)) + + elif isinstance(x, (bytes, str)): + lst.append(x) + + elif hasattr(x, "encode"): + lst.append(x.encode("utf-8", "replace")) + + elif isinstance(x, (list, tuple)): + tup = [] + + for y in x: + if isinstance(y, (str, bytes)): + tup.append(y) + elif isinstance(y, Nodes.Node): + tup.append(node_to_dict(y, _recurse_level, memo)) + + lst.append(tup) + + data[attr_name] = lst + + else: + data[attr_name] = str(attr) + finally: + memo.pop(nodeid, None) + + return data + + +def source_to_dict(source, name=None): + from Cython.Compiler.TreeFragment import parse_from_strings, StatListNode + + # Right now we don't collect errors, but leave the API compatible already. + collected_errors = [] + + try: + # Note: we don't use TreeFragment because it formats the code removing empty lines + # (which ends up creating an AST with wrong lines). + if not name: + name = "(tree fragment)" + + mod = t = parse_from_strings(name, source) + t = t.body # Make sure a StatListNode is at the top + if not isinstance(t, StatListNode): + t = StatListNode(pos=mod.pos, stats=[t]) + root = t + except CompileError as e: + return {"ast": None, "errors": [node_to_dict(e)]} + except BaseException as e: + as_dict = {"ast": None, "errors": [{"__node__": "CompileError", "line": 1, "col": 1, "message_only": str(e)}]} + return as_dict + + result = {"ast": node_to_dict(root), "errors": [node_to_dict(e) for e in collected_errors]} + return result + + +from _pydev_bundle import pydev_localhost + +HOST = pydev_localhost.get_localhost() # Symbolic name meaning the local host + + +def dbg(s): + sys.stderr.write("%s\n" % (s,)) + + +# f = open('c:/temp/test.txt', 'a') +# print_ >> f, s +# f.close() + + +SERVER_NAME = "CythonJson" + + +class Exit(Exception): + pass + + +class CythonJsonServer(object): + def __init__(self, port): + self.ended = False + self._buffer = b"" + self.port = port + self.socket = None # socket to send messages. + self.exit_process_on_kill = True + + def send(self, msg): + if not isinstance(msg, bytes): + msg = msg.encode("utf-8", "replace") + + self.socket.sendall(msg) + + def connect_to_server(self): + from _pydev_bundle._pydev_saved_modules import socket + + self.socket = s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect((HOST, self.port)) + except: + sys.stderr.write("Error on connect_to_server with parameters: host: %s port: %s\n" % (HOST, self.port)) + raise + + def _read(self, size): + while True: + buffer_len = len(self._buffer) + if buffer_len == size: + ret = self._buffer + self._buffer = b"" + return ret + + if buffer_len > size: + ret = self._buffer[:size] + self._buffer = self._buffer[size:] + return ret + + try: + r = self.socket.recv(max(size - buffer_len, 1024)) + except OSError: + return b"" + if not r: + return b"" + self._buffer += r + + def _read_line(self): + while True: + i = self._buffer.find(b"\n") + if i != -1: + i += 1 # Add the newline to the return + ret = self._buffer[:i] + self._buffer = self._buffer[i:] + return ret + else: + try: + r = self.socket.recv(1024) + except OSError: + return b"" + if not r: + return b"" + self._buffer += r + + def process_command(self, json_contents): + try: + as_dict = json.loads(json_contents) + if as_dict["command"] == "cython_to_json_ast": + contents = as_dict["contents"] + as_dict = source_to_dict(contents) + result = as_dict + else: + result = {"command": "", "received": json_contents} + except: + from io import StringIO + + s = StringIO() + traceback.print_exc(file=s) + result = {"command": "", "error": s.getvalue()} + + return json.dumps(result) + + def run(self): + # Echo server program + try: + dbg(SERVER_NAME + " connecting to java server on %s (%s)" % (HOST, self.port)) + # after being connected, create a socket as a client. + self.connect_to_server() + + dbg(SERVER_NAME + " Connected to java server") + + content_len = -1 + while True: + dbg("Will read line...") + line = self._read_line() + dbg("Read: %s" % (line,)) + if not line: + raise Exit() + + if line.startswith(b"Content-Length:"): + content_len = int(line.strip().split(b":", 1)[1]) + dbg("Found content len: %s" % (content_len,)) + continue + + if content_len != -1: + # If we previously received a content length, read until a '\r\n'. + if line == b"\r\n": + dbg("Will read contents (%s)..." % (content_len,)) + json_contents = self._read(content_len) + dbg("Read: %s" % (json_contents,)) + content_len = -1 + + if len(json_contents) == 0: + raise Exit() + + # We just received a json message, let's process it. + dbg("Will process...") + output = self.process_command(json_contents) + if not isinstance(output, bytes): + output = output.encode("utf-8", "replace") + + self.send("Content-Length: %s\r\n\r\n" % (len(output),)) + self.send(output) + + continue + + except Exit: + sys.exit(0) + except: + traceback.print_exc() + raise + + +if __name__ == "__main__": + args = sys.argv[1:] + if args == ["-"]: + # Read from stdin/dump to stdout + if sys.version_info < (3,): + stdin_get_value = sys.stdin.read + else: + stdin_get_value = sys.stdin.buffer.read + + source = stdin_get_value() + # After reading, convert to unicode (use the stdout encoding) + source = source.decode(sys.stdout.encoding, "replace") + as_dict = source_to_dict(source) + print(json.dumps(as_dict, indent=4)) + sys.stdout.flush() + else: + # start as server + port = int(sys.argv[1]) # this is from where we want to receive messages. + + t = CythonJsonServer(port) + dbg(SERVER_NAME + " will start") + t.run() diff --git a/src/debugpy/_vendored/pydevd/third_party/pep8/autopep8.py b/src/debugpy/_vendored/pydevd/third_party/pep8/autopep8.py new file mode 100644 index 000000000..b57f0683a --- /dev/null +++ b/src/debugpy/_vendored/pydevd/third_party/pep8/autopep8.py @@ -0,0 +1,4238 @@ +#!/usr/bin/env python + +# Copyright (C) 2010-2011 Hideo Hattori +# Copyright (C) 2011-2013 Hideo Hattori, Steven Myint +# Copyright (C) 2013-2016 Hideo Hattori, Steven Myint, Bill Wendling +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Copyright (C) 2006-2009 Johann C. Rocholl +# Copyright (C) 2009-2013 Florent Xicluna +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +"""Automatically formats Python code to conform to the PEP 8 style guide. + +Fixes that only need be done once can be added by adding a function of the form +"fix_(source)" to this module. They should return the fixed source code. +These fixes are picked up by apply_global_fixes(). + +Fixes that depend on pycodestyle should be added as methods to FixPEP8. See the +class documentation for more information. + +""" + +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import argparse +import codecs +import collections +import copy +import difflib +import fnmatch +import inspect +import io +import itertools +import keyword +import locale +import os +import re +import signal +import sys +import textwrap +import token +import tokenize +import warnings +import ast + +try: + from configparser import ConfigParser as SafeConfigParser + from configparser import Error +except ImportError: + from ConfigParser import SafeConfigParser + from ConfigParser import Error + +import pycodestyle +from pycodestyle import STARTSWITH_INDENT_STATEMENT_REGEX + +try: + unicode +except NameError: + unicode = str + +__version__ = "1.6.0" + +CR = "\r" +LF = "\n" +CRLF = "\r\n" + +PYTHON_SHEBANG_REGEX = re.compile(r"^#!.*\bpython[23]?\b\s*$") +LAMBDA_REGEX = re.compile(r"([\w.]+)\s=\slambda\s*([)(=\w,\s.]*):") +COMPARE_NEGATIVE_REGEX = re.compile(r"\b(not)\s+([^][)(}{]+?)\s+(in|is)\s") +COMPARE_NEGATIVE_REGEX_THROUGH = re.compile(r"\b(not\s+in|is\s+not)\s") +BARE_EXCEPT_REGEX = re.compile(r"except\s*:") +STARTSWITH_DEF_REGEX = re.compile(r"^(async\s+def|def)\s.*\):") +DOCSTRING_START_REGEX = re.compile(r'^u?r?(?P["\']{3})') +ENABLE_REGEX = re.compile(r"# *(fmt|autopep8): *on") +DISABLE_REGEX = re.compile(r"# *(fmt|autopep8): *off") + +EXIT_CODE_OK = 0 +EXIT_CODE_ERROR = 1 +EXIT_CODE_EXISTS_DIFF = 2 +EXIT_CODE_ARGPARSE_ERROR = 99 + +# For generating line shortening candidates. +SHORTEN_OPERATOR_GROUPS = frozenset( + [ + frozenset([","]), + frozenset(["%"]), + frozenset([",", "(", "[", "{"]), + frozenset(["%", "(", "[", "{"]), + frozenset([",", "(", "[", "{", "%", "+", "-", "*", "/", "//"]), + frozenset(["%", "+", "-", "*", "/", "//"]), + ] +) + +DEFAULT_IGNORE = "E226,E24,W50,W690" # TODO: use pycodestyle.DEFAULT_IGNORE +DEFAULT_INDENT_SIZE = 4 +# these fixes conflict with each other, if the `--ignore` setting causes both +# to be enabled, disable both of them +CONFLICTING_CODES = ("W503", "W504") + +SELECTED_GLOBAL_FIXED_METHOD_CODES = [ + "W602", +] + +# W602 is handled separately due to the need to avoid "with_traceback". +CODE_TO_2TO3 = { + "E231": ["ws_comma"], + "E721": ["idioms"], + "W601": ["has_key"], + "W603": ["ne"], + "W604": ["repr"], + "W690": [ + "apply", + "except", + "exitfunc", + "numliterals", + "operator", + "paren", + "reduce", + "renames", + "standarderror", + "sys_exc", + "throw", + "tuple_params", + "xreadlines", + ], +} + +if sys.platform == "win32": # pragma: no cover + DEFAULT_CONFIG = os.path.expanduser(r"~\.pycodestyle") +else: + DEFAULT_CONFIG = os.path.join(os.getenv("XDG_CONFIG_HOME") or os.path.expanduser("~/.config"), "pycodestyle") +# fallback, use .pep8 +if not os.path.exists(DEFAULT_CONFIG): # pragma: no cover + if sys.platform == "win32": + DEFAULT_CONFIG = os.path.expanduser(r"~\.pep8") + else: + DEFAULT_CONFIG = os.path.join(os.path.expanduser("~/.config"), "pep8") +PROJECT_CONFIG = ("setup.cfg", "tox.ini", ".pep8", ".flake8") + +MAX_PYTHON_FILE_DETECTION_BYTES = 1024 + + +def open_with_encoding(filename, mode="r", encoding=None, limit_byte_check=-1): + """Return opened file with a specific encoding.""" + if not encoding: + encoding = detect_encoding(filename, limit_byte_check=limit_byte_check) + + return io.open(filename, mode=mode, encoding=encoding, newline="") # Preserve line endings + + +def detect_encoding(filename, limit_byte_check=-1): + """Return file encoding.""" + try: + with open(filename, "rb") as input_file: + from lib2to3.pgen2 import tokenize as lib2to3_tokenize + + encoding = lib2to3_tokenize.detect_encoding(input_file.readline)[0] + + with open_with_encoding(filename, encoding=encoding) as test_file: + test_file.read(limit_byte_check) + + return encoding + except (LookupError, SyntaxError, UnicodeDecodeError): + return "latin-1" + + +def readlines_from_file(filename): + """Return contents of file.""" + with open_with_encoding(filename) as input_file: + return input_file.readlines() + + +def extended_blank_lines(logical_line, blank_lines, blank_before, indent_level, previous_logical): + """Check for missing blank lines after class declaration.""" + if previous_logical.startswith("def "): + if blank_lines and pycodestyle.DOCSTRING_REGEX.match(logical_line): + yield (0, "E303 too many blank lines ({})".format(blank_lines)) + elif pycodestyle.DOCSTRING_REGEX.match(previous_logical): + # Missing blank line between class docstring and method declaration. + if indent_level and not blank_lines and not blank_before and logical_line.startswith(("def ")) and "(self" in logical_line: + yield (0, "E301 expected 1 blank line, found 0") + + +pycodestyle.register_check(extended_blank_lines) + + +def continued_indentation(logical_line, tokens, indent_level, hang_closing, indent_char, noqa): + """Override pycodestyle's function to provide indentation information.""" + first_row = tokens[0][2][0] + nrows = 1 + tokens[-1][2][0] - first_row + if noqa or nrows == 1: + return + + # indent_next tells us whether the next block is indented. Assuming + # that it is indented by 4 spaces, then we should not allow 4-space + # indents on the final continuation line. In turn, some other + # indents are allowed to have an extra 4 spaces. + indent_next = logical_line.endswith(":") + + row = depth = 0 + valid_hangs = (DEFAULT_INDENT_SIZE,) if indent_char != "\t" else (DEFAULT_INDENT_SIZE, 2 * DEFAULT_INDENT_SIZE) + + # Remember how many brackets were opened on each line. + parens = [0] * nrows + + # Relative indents of physical lines. + rel_indent = [0] * nrows + + # For each depth, collect a list of opening rows. + open_rows = [[0]] + # For each depth, memorize the hanging indentation. + hangs = [None] + + # Visual indents. + indent_chances = {} + last_indent = tokens[0][2] + indent = [last_indent[1]] + + last_token_multiline = None + line = None + last_line = "" + last_line_begins_with_multiline = False + for token_type, text, start, end, line in tokens: + newline = row < start[0] - first_row + if newline: + row = start[0] - first_row + newline = not last_token_multiline and token_type not in (tokenize.NL, tokenize.NEWLINE) + last_line_begins_with_multiline = last_token_multiline + + if newline: + # This is the beginning of a continuation line. + last_indent = start + + # Record the initial indent. + rel_indent[row] = pycodestyle.expand_indent(line) - indent_level + + # Identify closing bracket. + close_bracket = token_type == tokenize.OP and text in "]})" + + # Is the indent relative to an opening bracket line? + for open_row in reversed(open_rows[depth]): + hang = rel_indent[row] - rel_indent[open_row] + hanging_indent = hang in valid_hangs + if hanging_indent: + break + if hangs[depth]: + hanging_indent = hang == hangs[depth] + + visual_indent = not close_bracket and hang > 0 and indent_chances.get(start[1]) + + if close_bracket and indent[depth]: + # Closing bracket for visual indent. + if start[1] != indent[depth]: + yield (start, "E124 {}".format(indent[depth])) + elif close_bracket and not hang: + # closing bracket matches indentation of opening bracket's line + if hang_closing: + yield (start, "E133 {}".format(indent[depth])) + elif indent[depth] and start[1] < indent[depth]: + if visual_indent is not True: + # Visual indent is broken. + yield (start, "E128 {}".format(indent[depth])) + elif hanging_indent or (indent_next and rel_indent[row] == 2 * DEFAULT_INDENT_SIZE): + # Hanging indent is verified. + if close_bracket and not hang_closing: + yield (start, "E123 {}".format(indent_level + rel_indent[open_row])) + hangs[depth] = hang + elif visual_indent is True: + # Visual indent is verified. + indent[depth] = start[1] + elif visual_indent in (text, unicode): + # Ignore token lined up with matching one from a previous line. + pass + else: + one_indented = indent_level + rel_indent[open_row] + DEFAULT_INDENT_SIZE + # Indent is broken. + if hang <= 0: + error = ("E122", one_indented) + elif indent[depth]: + error = ("E127", indent[depth]) + elif not close_bracket and hangs[depth]: + error = ("E131", one_indented) + elif hang > DEFAULT_INDENT_SIZE: + error = ("E126", one_indented) + else: + hangs[depth] = hang + error = ("E121", one_indented) + + yield (start, "{} {}".format(*error)) + + # Look for visual indenting. + if parens[row] and token_type not in (tokenize.NL, tokenize.COMMENT) and not indent[depth]: + indent[depth] = start[1] + indent_chances[start[1]] = True + # Deal with implicit string concatenation. + elif token_type in (tokenize.STRING, tokenize.COMMENT) or text in ("u", "ur", "b", "br"): + indent_chances[start[1]] = unicode + # Special case for the "if" statement because len("if (") is equal to + # 4. + elif not indent_chances and not row and not depth and text == "if": + indent_chances[end[1] + 1] = True + elif text == ":" and line[end[1] :].isspace(): + open_rows[depth].append(row) + + # Keep track of bracket depth. + if token_type == tokenize.OP: + if text in "([{": + depth += 1 + indent.append(0) + hangs.append(None) + if len(open_rows) == depth: + open_rows.append([]) + open_rows[depth].append(row) + parens[row] += 1 + elif text in ")]}" and depth > 0: + # Parent indents should not be more than this one. + prev_indent = indent.pop() or last_indent[1] + hangs.pop() + for d in range(depth): + if indent[d] > prev_indent: + indent[d] = 0 + for ind in list(indent_chances): + if ind >= prev_indent: + del indent_chances[ind] + del open_rows[depth + 1 :] + depth -= 1 + if depth: + indent_chances[indent[depth]] = True + for idx in range(row, -1, -1): + if parens[idx]: + parens[idx] -= 1 + break + assert len(indent) == depth + 1 + if ( + start[1] not in indent_chances + and + # This is for purposes of speeding up E121 (GitHub #90). + not last_line.rstrip().endswith(",") + ): + # Allow to line up tokens. + indent_chances[start[1]] = text + + last_token_multiline = start[0] != end[0] + if last_token_multiline: + rel_indent[end[0] - first_row] = rel_indent[row] + + last_line = line + + if indent_next and not last_line_begins_with_multiline and pycodestyle.expand_indent(line) == indent_level + DEFAULT_INDENT_SIZE: + pos = (start[0], indent[0] + 4) + desired_indent = indent_level + 2 * DEFAULT_INDENT_SIZE + if visual_indent: + yield (pos, "E129 {}".format(desired_indent)) + else: + yield (pos, "E125 {}".format(desired_indent)) + + +del pycodestyle._checks["logical_line"][pycodestyle.continued_indentation] +pycodestyle.register_check(continued_indentation) + + +class FixPEP8(object): + + """Fix invalid code. + + Fixer methods are prefixed "fix_". The _fix_source() method looks for these + automatically. + + The fixer method can take either one or two arguments (in addition to + self). The first argument is "result", which is the error information from + pycodestyle. The second argument, "logical", is required only for + logical-line fixes. + + The fixer method can return the list of modified lines or None. An empty + list would mean that no changes were made. None would mean that only the + line reported in the pycodestyle error was modified. Note that the modified + line numbers that are returned are indexed at 1. This typically would + correspond with the line number reported in the pycodestyle error + information. + + [fixed method list] + - e111,e114,e115,e116 + - e121,e122,e123,e124,e125,e126,e127,e128,e129 + - e201,e202,e203 + - e211 + - e221,e222,e223,e224,e225 + - e231 + - e251,e252 + - e261,e262 + - e271,e272,e273,e274 + - e301,e302,e303,e304,e305,e306 + - e401,e402 + - e502 + - e701,e702,e703,e704 + - e711,e712,e713,e714 + - e722 + - e731 + - w291 + - w503,504 + + """ + + def __init__(self, filename, options, contents=None, long_line_ignore_cache=None): + self.filename = filename + if contents is None: + self.source = readlines_from_file(filename) + else: + sio = io.StringIO(contents) + self.source = sio.readlines() + self.options = options + self.indent_word = _get_indentword("".join(self.source)) + + # collect imports line + self.imports = {} + for i, line in enumerate(self.source): + if (line.find("import ") == 0 or line.find("from ") == 0) and line not in self.imports: + # collect only import statements that first appeared + self.imports[line] = i + + self.long_line_ignore_cache = set() if long_line_ignore_cache is None else long_line_ignore_cache + + # Many fixers are the same even though pycodestyle categorizes them + # differently. + self.fix_e115 = self.fix_e112 + self.fix_e121 = self._fix_reindent + self.fix_e122 = self._fix_reindent + self.fix_e123 = self._fix_reindent + self.fix_e124 = self._fix_reindent + self.fix_e126 = self._fix_reindent + self.fix_e127 = self._fix_reindent + self.fix_e128 = self._fix_reindent + self.fix_e129 = self._fix_reindent + self.fix_e133 = self.fix_e131 + self.fix_e202 = self.fix_e201 + self.fix_e203 = self.fix_e201 + self.fix_e211 = self.fix_e201 + self.fix_e221 = self.fix_e271 + self.fix_e222 = self.fix_e271 + self.fix_e223 = self.fix_e271 + self.fix_e226 = self.fix_e225 + self.fix_e227 = self.fix_e225 + self.fix_e228 = self.fix_e225 + self.fix_e241 = self.fix_e271 + self.fix_e242 = self.fix_e224 + self.fix_e252 = self.fix_e225 + self.fix_e261 = self.fix_e262 + self.fix_e272 = self.fix_e271 + self.fix_e273 = self.fix_e271 + self.fix_e274 = self.fix_e271 + self.fix_e306 = self.fix_e301 + self.fix_e501 = ( + self.fix_long_line_logically if options and (options.aggressive >= 2 or options.experimental) else self.fix_long_line_physically + ) + self.fix_e703 = self.fix_e702 + self.fix_w292 = self.fix_w291 + self.fix_w293 = self.fix_w291 + + def _fix_source(self, results): + try: + (logical_start, logical_end) = _find_logical(self.source) + logical_support = True + except (SyntaxError, tokenize.TokenError): # pragma: no cover + logical_support = False + + completed_lines = set() + for result in sorted(results, key=_priority_key): + if result["line"] in completed_lines: + continue + + fixed_methodname = "fix_" + result["id"].lower() + if hasattr(self, fixed_methodname): + fix = getattr(self, fixed_methodname) + + line_index = result["line"] - 1 + original_line = self.source[line_index] + + is_logical_fix = len(_get_parameters(fix)) > 2 + if is_logical_fix: + logical = None + if logical_support: + logical = _get_logical(self.source, result, logical_start, logical_end) + if logical and set(range(logical[0][0] + 1, logical[1][0] + 1)).intersection(completed_lines): + continue + + modified_lines = fix(result, logical) + else: + modified_lines = fix(result) + + if modified_lines is None: + # Force logical fixes to report what they modified. + assert not is_logical_fix + + if self.source[line_index] == original_line: + modified_lines = [] + + if modified_lines: + completed_lines.update(modified_lines) + elif modified_lines == []: # Empty list means no fix + if self.options.verbose >= 2: + print("---> Not fixing {error} on line {line}".format(error=result["id"], line=result["line"]), file=sys.stderr) + else: # We assume one-line fix when None. + completed_lines.add(result["line"]) + else: + if self.options.verbose >= 3: + print("---> '{}' is not defined.".format(fixed_methodname), file=sys.stderr) + + info = result["info"].strip() + print("---> {}:{}:{}:{}".format(self.filename, result["line"], result["column"], info), file=sys.stderr) + + def fix(self): + """Return a version of the source code with PEP 8 violations fixed.""" + pep8_options = { + "ignore": self.options.ignore, + "select": self.options.select, + "max_line_length": self.options.max_line_length, + "hang_closing": self.options.hang_closing, + } + results = _execute_pep8(pep8_options, self.source) + + if self.options.verbose: + progress = {} + for r in results: + if r["id"] not in progress: + progress[r["id"]] = set() + progress[r["id"]].add(r["line"]) + print("---> {n} issue(s) to fix {progress}".format(n=len(results), progress=progress), file=sys.stderr) + + if self.options.line_range: + start, end = self.options.line_range + results = [r for r in results if start <= r["line"] <= end] + + self._fix_source(filter_results(source="".join(self.source), results=results, aggressive=self.options.aggressive)) + + if self.options.line_range: + # If number of lines has changed then change line_range. + count = sum(sline.count("\n") for sline in self.source[start - 1 : end]) + self.options.line_range[1] = start + count - 1 + + return "".join(self.source) + + def _fix_reindent(self, result): + """Fix a badly indented line. + + This is done by adding or removing from its initial indent only. + + """ + num_indent_spaces = int(result["info"].split()[1]) + line_index = result["line"] - 1 + target = self.source[line_index] + + self.source[line_index] = " " * num_indent_spaces + target.lstrip() + + def fix_e112(self, result): + """Fix under-indented comments.""" + line_index = result["line"] - 1 + target = self.source[line_index] + + if not target.lstrip().startswith("#"): + # Don't screw with invalid syntax. + return [] + + self.source[line_index] = self.indent_word + target + + def fix_e113(self, result): + """Fix unexpected indentation.""" + line_index = result["line"] - 1 + target = self.source[line_index] + indent = _get_indentation(target) + stripped = target.lstrip() + self.source[line_index] = indent[1:] + stripped + + def fix_e116(self, result): + """Fix over-indented comments.""" + line_index = result["line"] - 1 + target = self.source[line_index] + + indent = _get_indentation(target) + stripped = target.lstrip() + + if not stripped.startswith("#"): + # Don't screw with invalid syntax. + return [] + + self.source[line_index] = indent[1:] + stripped + + def fix_e117(self, result): + """Fix over-indented.""" + line_index = result["line"] - 1 + target = self.source[line_index] + + indent = _get_indentation(target) + if indent == "\t": + return [] + + stripped = target.lstrip() + + self.source[line_index] = indent[1:] + stripped + + def fix_e125(self, result): + """Fix indentation undistinguish from the next logical line.""" + num_indent_spaces = int(result["info"].split()[1]) + line_index = result["line"] - 1 + target = self.source[line_index] + + spaces_to_add = num_indent_spaces - len(_get_indentation(target)) + indent = len(_get_indentation(target)) + modified_lines = [] + + while len(_get_indentation(self.source[line_index])) >= indent: + self.source[line_index] = " " * spaces_to_add + self.source[line_index] + modified_lines.append(1 + line_index) # Line indexed at 1. + line_index -= 1 + + return modified_lines + + def fix_e131(self, result): + """Fix indentation undistinguish from the next logical line.""" + num_indent_spaces = int(result["info"].split()[1]) + line_index = result["line"] - 1 + target = self.source[line_index] + + spaces_to_add = num_indent_spaces - len(_get_indentation(target)) + + indent_length = len(_get_indentation(target)) + spaces_to_add = num_indent_spaces - indent_length + if num_indent_spaces == 0 and indent_length == 0: + spaces_to_add = 4 + + if spaces_to_add >= 0: + self.source[line_index] = " " * spaces_to_add + self.source[line_index] + else: + offset = abs(spaces_to_add) + self.source[line_index] = self.source[line_index][offset:] + + def fix_e201(self, result): + """Remove extraneous whitespace.""" + line_index = result["line"] - 1 + target = self.source[line_index] + offset = result["column"] - 1 + + fixed = fix_whitespace(target, offset=offset, replacement="") + + self.source[line_index] = fixed + + def fix_e224(self, result): + """Remove extraneous whitespace around operator.""" + target = self.source[result["line"] - 1] + offset = result["column"] - 1 + fixed = target[:offset] + target[offset:].replace("\t", " ") + self.source[result["line"] - 1] = fixed + + def fix_e225(self, result): + """Fix missing whitespace around operator.""" + target = self.source[result["line"] - 1] + offset = result["column"] - 1 + fixed = target[:offset] + " " + target[offset:] + + # Only proceed if non-whitespace characters match. + # And make sure we don't break the indentation. + if fixed.replace(" ", "") == target.replace(" ", "") and _get_indentation(fixed) == _get_indentation(target): + self.source[result["line"] - 1] = fixed + error_code = result.get("id", 0) + try: + ts = generate_tokens(fixed) + except (SyntaxError, tokenize.TokenError): + return + if not check_syntax(fixed.lstrip()): + return + errors = list(pycodestyle.missing_whitespace_around_operator(fixed, ts)) + for e in reversed(errors): + if error_code != e[1].split()[0]: + continue + offset = e[0][1] + fixed = fixed[:offset] + " " + fixed[offset:] + self.source[result["line"] - 1] = fixed + else: + return [] + + def fix_e231(self, result): + """Add missing whitespace.""" + line_index = result["line"] - 1 + target = self.source[line_index] + offset = result["column"] + fixed = target[:offset].rstrip() + " " + target[offset:].lstrip() + self.source[line_index] = fixed + + def fix_e251(self, result): + """Remove whitespace around parameter '=' sign.""" + line_index = result["line"] - 1 + target = self.source[line_index] + + # This is necessary since pycodestyle sometimes reports columns that + # goes past the end of the physical line. This happens in cases like, + # foo(bar\n=None) + c = min(result["column"] - 1, len(target) - 1) + + if target[c].strip(): + fixed = target + else: + fixed = target[:c].rstrip() + target[c:].lstrip() + + # There could be an escaped newline + # + # def foo(a=\ + # 1) + if fixed.endswith(("=\\\n", "=\\\r\n", "=\\\r")): + self.source[line_index] = fixed.rstrip("\n\r \t\\") + self.source[line_index + 1] = self.source[line_index + 1].lstrip() + return [line_index + 1, line_index + 2] # Line indexed at 1 + + self.source[result["line"] - 1] = fixed + + def fix_e262(self, result): + """Fix spacing after comment hash.""" + target = self.source[result["line"] - 1] + offset = result["column"] + + code = target[:offset].rstrip(" \t#") + comment = target[offset:].lstrip(" \t#") + + fixed = code + (" # " + comment if comment.strip() else "\n") + + self.source[result["line"] - 1] = fixed + + def fix_e271(self, result): + """Fix extraneous whitespace around keywords.""" + line_index = result["line"] - 1 + target = self.source[line_index] + offset = result["column"] - 1 + + fixed = fix_whitespace(target, offset=offset, replacement=" ") + + if fixed == target: + return [] + else: + self.source[line_index] = fixed + + def fix_e301(self, result): + """Add missing blank line.""" + cr = "\n" + self.source[result["line"] - 1] = cr + self.source[result["line"] - 1] + + def fix_e302(self, result): + """Add missing 2 blank lines.""" + add_linenum = 2 - int(result["info"].split()[-1]) + offset = 1 + if self.source[result["line"] - 2].strip() == "\\": + offset = 2 + cr = "\n" * add_linenum + self.source[result["line"] - offset] = cr + self.source[result["line"] - offset] + + def fix_e303(self, result): + """Remove extra blank lines.""" + delete_linenum = int(result["info"].split("(")[1].split(")")[0]) - 2 + delete_linenum = max(1, delete_linenum) + + # We need to count because pycodestyle reports an offset line number if + # there are comments. + cnt = 0 + line = result["line"] - 2 + modified_lines = [] + while cnt < delete_linenum and line >= 0: + if not self.source[line].strip(): + self.source[line] = "" + modified_lines.append(1 + line) # Line indexed at 1 + cnt += 1 + line -= 1 + + return modified_lines + + def fix_e304(self, result): + """Remove blank line following function decorator.""" + line = result["line"] - 2 + if not self.source[line].strip(): + self.source[line] = "" + + def fix_e305(self, result): + """Add missing 2 blank lines after end of function or class.""" + add_delete_linenum = 2 - int(result["info"].split()[-1]) + cnt = 0 + offset = result["line"] - 2 + modified_lines = [] + if add_delete_linenum < 0: + # delete cr + add_delete_linenum = abs(add_delete_linenum) + while cnt < add_delete_linenum and offset >= 0: + if not self.source[offset].strip(): + self.source[offset] = "" + modified_lines.append(1 + offset) # Line indexed at 1 + cnt += 1 + offset -= 1 + else: + # add cr + cr = "\n" + # check comment line + while True: + if offset < 0: + break + line = self.source[offset].lstrip() + if not line: + break + if line[0] != "#": + break + offset -= 1 + offset += 1 + self.source[offset] = cr + self.source[offset] + modified_lines.append(1 + offset) # Line indexed at 1. + return modified_lines + + def fix_e401(self, result): + """Put imports on separate lines.""" + line_index = result["line"] - 1 + target = self.source[line_index] + offset = result["column"] - 1 + + if not target.lstrip().startswith("import"): + return [] + + indentation = re.split(pattern=r"\bimport\b", string=target, maxsplit=1)[0] + fixed = target[:offset].rstrip("\t ,") + "\n" + indentation + "import " + target[offset:].lstrip("\t ,") + self.source[line_index] = fixed + + def fix_e402(self, result): + (line_index, offset, target) = get_index_offset_contents(result, self.source) + for i in range(1, 100): + line = "".join(self.source[line_index : line_index + i]) + try: + generate_tokens("".join(line)) + except (SyntaxError, tokenize.TokenError): + continue + break + if not (target in self.imports and self.imports[target] != line_index): + mod_offset = get_module_imports_on_top_of_file(self.source, line_index) + self.source[mod_offset] = line + self.source[mod_offset] + for offset in range(i): + self.source[line_index + offset] = "" + + def fix_long_line_logically(self, result, logical): + """Try to make lines fit within --max-line-length characters.""" + if not logical or len(logical[2]) == 1 or self.source[result["line"] - 1].lstrip().startswith("#"): + return self.fix_long_line_physically(result) + + start_line_index = logical[0][0] + end_line_index = logical[1][0] + logical_lines = logical[2] + + previous_line = get_item(self.source, start_line_index - 1, default="") + next_line = get_item(self.source, end_line_index + 1, default="") + + single_line = join_logical_line("".join(logical_lines)) + + try: + fixed = self.fix_long_line( + target=single_line, previous_line=previous_line, next_line=next_line, original="".join(logical_lines) + ) + except (SyntaxError, tokenize.TokenError): + return self.fix_long_line_physically(result) + + if fixed: + for line_index in range(start_line_index, end_line_index + 1): + self.source[line_index] = "" + self.source[start_line_index] = fixed + return range(start_line_index + 1, end_line_index + 1) + + return [] + + def fix_long_line_physically(self, result): + """Try to make lines fit within --max-line-length characters.""" + line_index = result["line"] - 1 + target = self.source[line_index] + + previous_line = get_item(self.source, line_index - 1, default="") + next_line = get_item(self.source, line_index + 1, default="") + + try: + fixed = self.fix_long_line(target=target, previous_line=previous_line, next_line=next_line, original=target) + except (SyntaxError, tokenize.TokenError): + return [] + + if fixed: + self.source[line_index] = fixed + return [line_index + 1] + + return [] + + def fix_long_line(self, target, previous_line, next_line, original): + cache_entry = (target, previous_line, next_line) + if cache_entry in self.long_line_ignore_cache: + return [] + + if target.lstrip().startswith("#"): + if self.options.aggressive: + # Wrap commented lines. + return shorten_comment( + line=target, max_line_length=self.options.max_line_length, last_comment=not next_line.lstrip().startswith("#") + ) + return [] + + fixed = get_fixed_long_line( + target=target, + previous_line=previous_line, + original=original, + indent_word=self.indent_word, + max_line_length=self.options.max_line_length, + aggressive=self.options.aggressive, + experimental=self.options.experimental, + verbose=self.options.verbose, + ) + + if fixed and not code_almost_equal(original, fixed): + return fixed + + self.long_line_ignore_cache.add(cache_entry) + return None + + def fix_e502(self, result): + """Remove extraneous escape of newline.""" + (line_index, _, target) = get_index_offset_contents(result, self.source) + self.source[line_index] = target.rstrip("\n\r \t\\") + "\n" + + def fix_e701(self, result): + """Put colon-separated compound statement on separate lines.""" + line_index = result["line"] - 1 + target = self.source[line_index] + c = result["column"] + + fixed_source = target[:c] + "\n" + _get_indentation(target) + self.indent_word + target[c:].lstrip("\n\r \t\\") + self.source[result["line"] - 1] = fixed_source + return [result["line"], result["line"] + 1] + + def fix_e702(self, result, logical): + """Put semicolon-separated compound statement on separate lines.""" + if not logical: + return [] # pragma: no cover + logical_lines = logical[2] + + # Avoid applying this when indented. + # https://docs.python.org/reference/compound_stmts.html + for line in logical_lines: + if result["id"] == "E702" and ":" in line and STARTSWITH_INDENT_STATEMENT_REGEX.match(line): + if self.options.verbose: + print("---> avoid fixing {error} with " "other compound statements".format(error=result["id"]), file=sys.stderr) + return [] + + line_index = result["line"] - 1 + target = self.source[line_index] + + if target.rstrip().endswith("\\"): + # Normalize '1; \\\n2' into '1; 2'. + self.source[line_index] = target.rstrip("\n \r\t\\") + self.source[line_index + 1] = self.source[line_index + 1].lstrip() + return [line_index + 1, line_index + 2] + + if target.rstrip().endswith(";"): + self.source[line_index] = target.rstrip("\n \r\t;") + "\n" + return [line_index + 1] + + offset = result["column"] - 1 + first = target[:offset].rstrip(";").rstrip() + second = _get_indentation(logical_lines[0]) + target[offset:].lstrip(";").lstrip() + + # Find inline comment. + inline_comment = None + if target[offset:].lstrip(";").lstrip()[:2] == "# ": + inline_comment = target[offset:].lstrip(";") + + if inline_comment: + self.source[line_index] = first + inline_comment + else: + self.source[line_index] = first + "\n" + second + return [line_index + 1] + + def fix_e704(self, result): + """Fix multiple statements on one line def""" + (line_index, _, target) = get_index_offset_contents(result, self.source) + match = STARTSWITH_DEF_REGEX.match(target) + if match: + self.source[line_index] = "{}\n{}{}".format( + match.group(0), _get_indentation(target) + self.indent_word, target[match.end(0) :].lstrip() + ) + + def fix_e711(self, result): + """Fix comparison with None.""" + (line_index, offset, target) = get_index_offset_contents(result, self.source) + + right_offset = offset + 2 + if right_offset >= len(target): + return [] + + left = target[:offset].rstrip() + center = target[offset:right_offset] + right = target[right_offset:].lstrip() + + if center.strip() == "==": + new_center = "is" + elif center.strip() == "!=": + new_center = "is not" + else: + return [] + + self.source[line_index] = " ".join([left, new_center, right]) + + def fix_e712(self, result): + """Fix (trivial case of) comparison with boolean.""" + (line_index, offset, target) = get_index_offset_contents(result, self.source) + + # Handle very easy "not" special cases. + if re.match(r'^\s*if [\w."\'\[\]]+ == False:$', target): + self.source[line_index] = re.sub(r'if ([\w."\'\[\]]+) == False:', r"if not \1:", target, count=1) + elif re.match(r'^\s*if [\w."\'\[\]]+ != True:$', target): + self.source[line_index] = re.sub(r'if ([\w."\'\[\]]+) != True:', r"if not \1:", target, count=1) + else: + right_offset = offset + 2 + if right_offset >= len(target): + return [] + + left = target[:offset].rstrip() + center = target[offset:right_offset] + right = target[right_offset:].lstrip() + + # Handle simple cases only. + new_right = None + if center.strip() == "==": + if re.match(r"\bTrue\b", right): + new_right = re.sub(r"\bTrue\b *", "", right, count=1) + elif center.strip() == "!=": + if re.match(r"\bFalse\b", right): + new_right = re.sub(r"\bFalse\b *", "", right, count=1) + + if new_right is None: + return [] + + if new_right[0].isalnum(): + new_right = " " + new_right + + self.source[line_index] = left + new_right + + def fix_e713(self, result): + """Fix (trivial case of) non-membership check.""" + (line_index, offset, target) = get_index_offset_contents(result, self.source) + + # to convert once 'not in' -> 'in' + before_target = target[:offset] + target = target[offset:] + match_notin = COMPARE_NEGATIVE_REGEX_THROUGH.search(target) + notin_pos_start, notin_pos_end = 0, 0 + if match_notin: + notin_pos_start = match_notin.start(1) + notin_pos_end = match_notin.end() + target = "{}{} {}".format(target[:notin_pos_start], "in", target[notin_pos_end:]) + + # fix 'not in' + match = COMPARE_NEGATIVE_REGEX.search(target) + if match: + if match.group(3) == "in": + pos_start = match.start(1) + new_target = "{5}{0}{1} {2} {3} {4}".format( + target[:pos_start], match.group(2), match.group(1), match.group(3), target[match.end() :], before_target + ) + if match_notin: + # revert 'in' -> 'not in' + pos_start = notin_pos_start + offset + pos_end = notin_pos_end + offset - 4 # len('not ') + new_target = "{}{} {}".format(new_target[:pos_start], "not in", new_target[pos_end:]) + self.source[line_index] = new_target + + def fix_e714(self, result): + """Fix object identity should be 'is not' case.""" + (line_index, offset, target) = get_index_offset_contents(result, self.source) + + # to convert once 'is not' -> 'is' + before_target = target[:offset] + target = target[offset:] + match_isnot = COMPARE_NEGATIVE_REGEX_THROUGH.search(target) + isnot_pos_start, isnot_pos_end = 0, 0 + if match_isnot: + isnot_pos_start = match_isnot.start(1) + isnot_pos_end = match_isnot.end() + target = "{}{} {}".format(target[:isnot_pos_start], "in", target[isnot_pos_end:]) + + match = COMPARE_NEGATIVE_REGEX.search(target) + if match: + if match.group(3).startswith("is"): + pos_start = match.start(1) + new_target = "{5}{0}{1} {2} {3} {4}".format( + target[:pos_start], match.group(2), match.group(3), match.group(1), target[match.end() :], before_target + ) + if match_isnot: + # revert 'is' -> 'is not' + pos_start = isnot_pos_start + offset + pos_end = isnot_pos_end + offset - 4 # len('not ') + new_target = "{}{} {}".format(new_target[:pos_start], "is not", new_target[pos_end:]) + self.source[line_index] = new_target + + def fix_e722(self, result): + """fix bare except""" + (line_index, _, target) = get_index_offset_contents(result, self.source) + match = BARE_EXCEPT_REGEX.search(target) + if match: + self.source[line_index] = "{}{}{}".format(target[: result["column"] - 1], "except BaseException:", target[match.end() :]) + + def fix_e731(self, result): + """Fix do not assign a lambda expression check.""" + (line_index, _, target) = get_index_offset_contents(result, self.source) + match = LAMBDA_REGEX.search(target) + if match: + end = match.end() + self.source[line_index] = "{}def {}({}): return {}".format( + target[: match.start(0)], match.group(1), match.group(2), target[end:].lstrip() + ) + + def fix_w291(self, result): + """Remove trailing whitespace.""" + fixed_line = self.source[result["line"] - 1].rstrip() + self.source[result["line"] - 1] = fixed_line + "\n" + + def fix_w391(self, _): + """Remove trailing blank lines.""" + blank_count = 0 + for line in reversed(self.source): + line = line.rstrip() + if line: + break + else: + blank_count += 1 + + original_length = len(self.source) + self.source = self.source[: original_length - blank_count] + return range(1, 1 + original_length) + + def fix_w503(self, result): + (line_index, _, target) = get_index_offset_contents(result, self.source) + one_string_token = target.split()[0] + try: + ts = generate_tokens(one_string_token) + except (SyntaxError, tokenize.TokenError): + return + if not _is_binary_operator(ts[0][0], one_string_token): + return + # find comment + comment_index = 0 + found_not_comment_only_line = False + comment_only_linenum = 0 + for i in range(5): + # NOTE: try to parse code in 5 times + if (line_index - i) < 0: + break + from_index = line_index - i - 1 + if from_index < 0 or len(self.source) <= from_index: + break + to_index = line_index + 1 + strip_line = self.source[from_index].lstrip() + if not found_not_comment_only_line and strip_line and strip_line[0] == "#": + comment_only_linenum += 1 + continue + found_not_comment_only_line = True + try: + ts = generate_tokens("".join(self.source[from_index:to_index])) + except (SyntaxError, tokenize.TokenError): + continue + newline_count = 0 + newline_index = [] + for index, t in enumerate(ts): + if t[0] in (tokenize.NEWLINE, tokenize.NL): + newline_index.append(index) + newline_count += 1 + if newline_count > 2: + tts = ts[newline_index[-3] :] + else: + tts = ts + old = [] + for t in tts: + if t[0] in (tokenize.NEWLINE, tokenize.NL): + newline_count -= 1 + if newline_count <= 1: + break + if tokenize.COMMENT == t[0] and old and old[0] != tokenize.NL: + comment_index = old[3][1] + break + old = t + break + i = target.index(one_string_token) + fix_target_line = line_index - 1 - comment_only_linenum + self.source[line_index] = "{}{}".format(target[:i], target[i + len(one_string_token) :].lstrip()) + nl = find_newline(self.source[fix_target_line:line_index]) + before_line = self.source[fix_target_line] + bl = before_line.index(nl) + if comment_index: + self.source[fix_target_line] = "{} {} {}".format( + before_line[:comment_index], one_string_token, before_line[comment_index + 1 :] + ) + else: + if before_line[:bl].endswith("#"): + # special case + # see: https://github.com/hhatto/autopep8/issues/503 + self.source[fix_target_line] = "{}{} {}".format(before_line[: bl - 2], one_string_token, before_line[bl - 2 :]) + else: + self.source[fix_target_line] = "{} {}{}".format(before_line[:bl], one_string_token, before_line[bl:]) + + def fix_w504(self, result): + (line_index, _, target) = get_index_offset_contents(result, self.source) + # NOTE: is not collect pointed out in pycodestyle==2.4.0 + comment_index = 0 + operator_position = None # (start_position, end_position) + for i in range(1, 6): + to_index = line_index + i + try: + ts = generate_tokens("".join(self.source[line_index:to_index])) + except (SyntaxError, tokenize.TokenError): + continue + newline_count = 0 + newline_index = [] + for index, t in enumerate(ts): + if _is_binary_operator(t[0], t[1]): + if t[2][0] == 1 and t[3][0] == 1: + operator_position = (t[2][1], t[3][1]) + elif t[0] == tokenize.NAME and t[1] in ("and", "or"): + if t[2][0] == 1 and t[3][0] == 1: + operator_position = (t[2][1], t[3][1]) + elif t[0] in (tokenize.NEWLINE, tokenize.NL): + newline_index.append(index) + newline_count += 1 + if newline_count > 2: + tts = ts[: newline_index[-3]] + else: + tts = ts + old = [] + for t in tts: + if tokenize.COMMENT == t[0] and old: + comment_row, comment_index = old[3] + break + old = t + break + if not operator_position: + return + target_operator = target[operator_position[0] : operator_position[1]] + + if comment_index and comment_row == 1: + self.source[line_index] = "{}{}".format(target[: operator_position[0]].rstrip(), target[comment_index:]) + else: + self.source[line_index] = "{}{}{}".format( + target[: operator_position[0]].rstrip(), target[operator_position[1] :].lstrip(), target[operator_position[1] :] + ) + + next_line = self.source[line_index + 1] + next_line_indent = 0 + m = re.match(r"\s*", next_line) + if m: + next_line_indent = m.span()[1] + self.source[line_index + 1] = "{}{} {}".format(next_line[:next_line_indent], target_operator, next_line[next_line_indent:]) + + def fix_w605(self, result): + (line_index, offset, target) = get_index_offset_contents(result, self.source) + self.source[line_index] = "{}\\{}".format(target[: offset + 1], target[offset + 1 :]) + + +def get_module_imports_on_top_of_file(source, import_line_index): + """return import or from keyword position + + example: + > 0: import sys + 1: import os + 2: + 3: def function(): + """ + + def is_string_literal(line): + if line[0] in "uUbB": + line = line[1:] + if line and line[0] in "rR": + line = line[1:] + return line and (line[0] == '"' or line[0] == "'") + + def is_future_import(line): + nodes = ast.parse(line) + for n in nodes.body: + if isinstance(n, ast.ImportFrom) and n.module == "__future__": + return True + return False + + def has_future_import(source): + offset = 0 + line = "" + for _, next_line in source: + for line_part in next_line.strip().splitlines(True): + line = line + line_part + try: + return is_future_import(line), offset + except SyntaxError: + continue + offset += 1 + return False, offset + + allowed_try_keywords = ("try", "except", "else", "finally") + in_docstring = False + docstring_kind = '"""' + source_stream = iter(enumerate(source)) + for cnt, line in source_stream: + if not in_docstring: + m = DOCSTRING_START_REGEX.match(line.lstrip()) + if m is not None: + in_docstring = True + docstring_kind = m.group("kind") + remain = line[m.end() : m.endpos].rstrip() + if remain[-3:] == docstring_kind: # one line doc + in_docstring = False + continue + if in_docstring: + if line.rstrip()[-3:] == docstring_kind: + in_docstring = False + continue + + if not line.rstrip(): + continue + elif line.startswith("#"): + continue + + if line.startswith("import "): + if cnt == import_line_index: + continue + return cnt + elif line.startswith("from "): + if cnt == import_line_index: + continue + hit, offset = has_future_import(itertools.chain([(cnt, line)], source_stream)) + if hit: + # move to the back + return cnt + offset + 1 + return cnt + elif pycodestyle.DUNDER_REGEX.match(line): + return cnt + elif any(line.startswith(kw) for kw in allowed_try_keywords): + continue + elif is_string_literal(line): + return cnt + else: + return cnt + return 0 + + +def get_index_offset_contents(result, source): + """Return (line_index, column_offset, line_contents).""" + line_index = result["line"] - 1 + return (line_index, result["column"] - 1, source[line_index]) + + +def get_fixed_long_line( + target, previous_line, original, indent_word=" ", max_line_length=79, aggressive=False, experimental=False, verbose=False +): + """Break up long line and return result. + + Do this by generating multiple reformatted candidates and then + ranking the candidates to heuristically select the best option. + + """ + indent = _get_indentation(target) + source = target[len(indent) :] + assert source.lstrip() == source + assert not target.lstrip().startswith("#") + + # Check for partial multiline. + tokens = list(generate_tokens(source)) + + candidates = shorten_line( + tokens, source, indent, indent_word, max_line_length, aggressive=aggressive, experimental=experimental, previous_line=previous_line + ) + + # Also sort alphabetically as a tie breaker (for determinism). + candidates = sorted( + sorted(set(candidates).union([target, original])), + key=lambda x: line_shortening_rank(x, indent_word, max_line_length, experimental=experimental), + ) + + if verbose >= 4: + print(("-" * 79 + "\n").join([""] + candidates + [""]), file=wrap_output(sys.stderr, "utf-8")) + + if candidates: + best_candidate = candidates[0] + + # Don't allow things to get longer. + if longest_line_length(best_candidate) > longest_line_length(original): + return None + + return best_candidate + + +def longest_line_length(code): + """Return length of longest line.""" + if len(code) == 0: + return 0 + return max(len(line) for line in code.splitlines()) + + +def join_logical_line(logical_line): + """Return single line based on logical line input.""" + indentation = _get_indentation(logical_line) + + return indentation + untokenize_without_newlines(generate_tokens(logical_line.lstrip())) + "\n" + + +def untokenize_without_newlines(tokens): + """Return source code based on tokens.""" + text = "" + last_row = 0 + last_column = -1 + + for t in tokens: + token_string = t[1] + (start_row, start_column) = t[2] + (end_row, end_column) = t[3] + + if start_row > last_row: + last_column = 0 + if (start_column > last_column or token_string == "\n") and not text.endswith(" "): + text += " " + + if token_string != "\n": + text += token_string + + last_row = end_row + last_column = end_column + + return text.rstrip() + + +def _find_logical(source_lines): + # Make a variable which is the index of all the starts of lines. + logical_start = [] + logical_end = [] + last_newline = True + parens = 0 + for t in generate_tokens("".join(source_lines)): + if t[0] in [tokenize.COMMENT, tokenize.DEDENT, tokenize.INDENT, tokenize.NL, tokenize.ENDMARKER]: + continue + if not parens and t[0] in [tokenize.NEWLINE, tokenize.SEMI]: + last_newline = True + logical_end.append((t[3][0] - 1, t[2][1])) + continue + if last_newline and not parens: + logical_start.append((t[2][0] - 1, t[2][1])) + last_newline = False + if t[0] == tokenize.OP: + if t[1] in "([{": + parens += 1 + elif t[1] in "}])": + parens -= 1 + return (logical_start, logical_end) + + +def _get_logical(source_lines, result, logical_start, logical_end): + """Return the logical line corresponding to the result. + + Assumes input is already E702-clean. + + """ + row = result["line"] - 1 + col = result["column"] - 1 + ls = None + le = None + for i in range(0, len(logical_start), 1): + assert logical_end + x = logical_end[i] + if x[0] > row or (x[0] == row and x[1] > col): + le = x + ls = logical_start[i] + break + if ls is None: + return None + original = source_lines[ls[0] : le[0] + 1] + return ls, le, original + + +def get_item(items, index, default=None): + if 0 <= index < len(items): + return items[index] + + return default + + +def reindent(source, indent_size): + """Reindent all lines.""" + reindenter = Reindenter(source) + return reindenter.run(indent_size) + + +def code_almost_equal(a, b): + """Return True if code is similar. + + Ignore whitespace when comparing specific line. + + """ + split_a = split_and_strip_non_empty_lines(a) + split_b = split_and_strip_non_empty_lines(b) + + if len(split_a) != len(split_b): + return False + + for index, _ in enumerate(split_a): + if "".join(split_a[index].split()) != "".join(split_b[index].split()): + return False + + return True + + +def split_and_strip_non_empty_lines(text): + """Return lines split by newline. + + Ignore empty lines. + + """ + return [line.strip() for line in text.splitlines() if line.strip()] + + +def fix_e265(source, aggressive=False): # pylint: disable=unused-argument + """Format block comments.""" + if "#" not in source: + # Optimization. + return source + + ignored_line_numbers = multiline_string_lines(source, include_docstrings=True) | set(commented_out_code_lines(source)) + + fixed_lines = [] + sio = io.StringIO(source) + for line_number, line in enumerate(sio.readlines(), start=1): + if line.lstrip().startswith("#") and line_number not in ignored_line_numbers and not pycodestyle.noqa(line): + indentation = _get_indentation(line) + line = line.lstrip() + + # Normalize beginning if not a shebang. + if len(line) > 1: + pos = next((index for index, c in enumerate(line) if c != "#")) + if ( + # Leave multiple spaces like '# ' alone. + (line[:pos].count("#") > 1 or line[1].isalnum() or not line[1].isspace()) + and line[1] not in ":!" + and + # Leave stylistic outlined blocks alone. + not line.rstrip().endswith("#") + ): + line = "# " + line.lstrip("# \t") + + fixed_lines.append(indentation + line) + else: + fixed_lines.append(line) + + return "".join(fixed_lines) + + +def refactor(source, fixer_names, ignore=None, filename=""): + """Return refactored code using lib2to3. + + Skip if ignore string is produced in the refactored code. + + """ + not_found_end_of_file_newline = source and source.rstrip("\r\n") == source + if not_found_end_of_file_newline: + input_source = source + "\n" + else: + input_source = source + + from lib2to3 import pgen2 + + try: + new_text = refactor_with_2to3(input_source, fixer_names=fixer_names, filename=filename) + except (pgen2.parse.ParseError, SyntaxError, UnicodeDecodeError, UnicodeEncodeError): + return source + + if ignore: + if ignore in new_text and ignore not in source: + return source + + if not_found_end_of_file_newline: + return new_text.rstrip("\r\n") + + return new_text + + +def code_to_2to3(select, ignore, where="", verbose=False): + fixes = set() + for code, fix in CODE_TO_2TO3.items(): + if code_match(code, select=select, ignore=ignore): + if verbose: + print("---> Applying {} fix for {}".format(where, code.upper()), file=sys.stderr) + fixes |= set(fix) + return fixes + + +def fix_2to3(source, aggressive=True, select=None, ignore=None, filename="", where="global", verbose=False): + """Fix various deprecated code (via lib2to3).""" + if not aggressive: + return source + + select = select or [] + ignore = ignore or [] + + return refactor(source, code_to_2to3(select=select, ignore=ignore, where=where, verbose=verbose), filename=filename) + + +def fix_w602(source, aggressive=True): + """Fix deprecated form of raising exception.""" + if not aggressive: + return source + + return refactor(source, ["raise"], ignore="with_traceback") + + +def find_newline(source): + """Return type of newline used in source. + + Input is a list of lines. + + """ + assert not isinstance(source, unicode) + + counter = collections.defaultdict(int) + for line in source: + if line.endswith(CRLF): + counter[CRLF] += 1 + elif line.endswith(CR): + counter[CR] += 1 + elif line.endswith(LF): + counter[LF] += 1 + + return (sorted(counter, key=counter.get, reverse=True) or [LF])[0] + + +def _get_indentword(source): + """Return indentation type.""" + indent_word = " " # Default in case source has no indentation + try: + for t in generate_tokens(source): + if t[0] == token.INDENT: + indent_word = t[1] + break + except (SyntaxError, tokenize.TokenError): + pass + return indent_word + + +def _get_indentation(line): + """Return leading whitespace.""" + if line.strip(): + non_whitespace_index = len(line) - len(line.lstrip()) + return line[:non_whitespace_index] + + return "" + + +def get_diff_text(old, new, filename): + """Return text of unified diff between old and new.""" + newline = "\n" + diff = difflib.unified_diff(old, new, "original/" + filename, "fixed/" + filename, lineterm=newline) + + text = "" + for line in diff: + text += line + + # Work around missing newline (http://bugs.python.org/issue2142). + if text and not line.endswith(newline): + text += newline + r"\ No newline at end of file" + newline + + return text + + +def _priority_key(pep8_result): + """Key for sorting PEP8 results. + + Global fixes should be done first. This is important for things like + indentation. + + """ + priority = [ + # Fix multiline colon-based before semicolon based. + "e701", + # Break multiline statements early. + "e702", + # Things that make lines longer. + "e225", + "e231", + # Remove extraneous whitespace before breaking lines. + "e201", + # Shorten whitespace in comment before resorting to wrapping. + "e262", + ] + middle_index = 10000 + lowest_priority = [ + # We need to shorten lines last since the logical fixer can get in a + # loop, which causes us to exit early. + "e501", + ] + key = pep8_result["id"].lower() + try: + return priority.index(key) + except ValueError: + try: + return middle_index + lowest_priority.index(key) + 1 + except ValueError: + return middle_index + + +def shorten_line(tokens, source, indentation, indent_word, max_line_length, aggressive=False, experimental=False, previous_line=""): + """Separate line at OPERATOR. + + Multiple candidates will be yielded. + + """ + for candidate in _shorten_line( + tokens=tokens, source=source, indentation=indentation, indent_word=indent_word, aggressive=aggressive, previous_line=previous_line + ): + yield candidate + + if aggressive: + for key_token_strings in SHORTEN_OPERATOR_GROUPS: + shortened = _shorten_line_at_tokens( + tokens=tokens, + source=source, + indentation=indentation, + indent_word=indent_word, + key_token_strings=key_token_strings, + aggressive=aggressive, + ) + + if shortened is not None and shortened != source: + yield shortened + + if experimental: + for shortened in _shorten_line_at_tokens_new( + tokens=tokens, source=source, indentation=indentation, max_line_length=max_line_length + ): + yield shortened + + +def _shorten_line(tokens, source, indentation, indent_word, aggressive=False, previous_line=""): + """Separate line at OPERATOR. + + The input is expected to be free of newlines except for inside multiline + strings and at the end. + + Multiple candidates will be yielded. + + """ + for token_type, token_string, start_offset, end_offset in token_offsets(tokens): + if ( + token_type == tokenize.COMMENT + and not is_probably_part_of_multiline(previous_line) + and not is_probably_part_of_multiline(source) + and not source[start_offset + 1 :].strip().lower().startswith(("noqa", "pragma:", "pylint:")) + ): + # Move inline comments to previous line. + first = source[:start_offset] + second = source[start_offset:] + yield (indentation + second.strip() + "\n" + indentation + first.strip() + "\n") + elif token_type == token.OP and token_string != "=": + # Don't break on '=' after keyword as this violates PEP 8. + + assert token_type != token.INDENT + + first = source[:end_offset] + + second_indent = indentation + if first.rstrip().endswith("(") and source[end_offset:].lstrip().startswith(")"): + pass + elif first.rstrip().endswith("("): + second_indent += indent_word + elif "(" in first: + second_indent += " " * (1 + first.find("(")) + else: + second_indent += indent_word + + second = second_indent + source[end_offset:].lstrip() + if not second.strip() or second.lstrip().startswith("#"): + continue + + # Do not begin a line with a comma + if second.lstrip().startswith(","): + continue + # Do end a line with a dot + if first.rstrip().endswith("."): + continue + if token_string in "+-*/": + fixed = first + " \\" + "\n" + second + else: + fixed = first + "\n" + second + + # Only fix if syntax is okay. + if check_syntax(normalize_multiline(fixed) if aggressive else fixed): + yield indentation + fixed + + +def _is_binary_operator(token_type, text): + return (token_type == tokenize.OP or text in ["and", "or"]) and text not in "()[]{},:.;@=%~" + + +# A convenient way to handle tokens. +Token = collections.namedtuple("Token", ["token_type", "token_string", "spos", "epos", "line"]) + + +class ReformattedLines(object): + + """The reflowed lines of atoms. + + Each part of the line is represented as an "atom." They can be moved + around when need be to get the optimal formatting. + + """ + + ########################################################################### + # Private Classes + + class _Indent(object): + + """Represent an indentation in the atom stream.""" + + def __init__(self, indent_amt): + self._indent_amt = indent_amt + + def emit(self): + return " " * self._indent_amt + + @property + def size(self): + return self._indent_amt + + class _Space(object): + + """Represent a space in the atom stream.""" + + def emit(self): + return " " + + @property + def size(self): + return 1 + + class _LineBreak(object): + + """Represent a line break in the atom stream.""" + + def emit(self): + return "\n" + + @property + def size(self): + return 0 + + def __init__(self, max_line_length): + self._max_line_length = max_line_length + self._lines = [] + self._bracket_depth = 0 + self._prev_item = None + self._prev_prev_item = None + + def __repr__(self): + return self.emit() + + ########################################################################### + # Public Methods + + def add(self, obj, indent_amt, break_after_open_bracket): + if isinstance(obj, Atom): + self._add_item(obj, indent_amt) + return + + self._add_container(obj, indent_amt, break_after_open_bracket) + + def add_comment(self, item): + num_spaces = 2 + if len(self._lines) > 1: + if isinstance(self._lines[-1], self._Space): + num_spaces -= 1 + if len(self._lines) > 2: + if isinstance(self._lines[-2], self._Space): + num_spaces -= 1 + + while num_spaces > 0: + self._lines.append(self._Space()) + num_spaces -= 1 + self._lines.append(item) + + def add_indent(self, indent_amt): + self._lines.append(self._Indent(indent_amt)) + + def add_line_break(self, indent): + self._lines.append(self._LineBreak()) + self.add_indent(len(indent)) + + def add_line_break_at(self, index, indent_amt): + self._lines.insert(index, self._LineBreak()) + self._lines.insert(index + 1, self._Indent(indent_amt)) + + def add_space_if_needed(self, curr_text, equal=False): + if not self._lines or isinstance(self._lines[-1], (self._LineBreak, self._Indent, self._Space)): + return + + prev_text = unicode(self._prev_item) + prev_prev_text = unicode(self._prev_prev_item) if self._prev_prev_item else "" + + if ( + # The previous item was a keyword or identifier and the current + # item isn't an operator that doesn't require a space. + ( + (self._prev_item.is_keyword or self._prev_item.is_string or self._prev_item.is_name or self._prev_item.is_number) + and (curr_text[0] not in "([{.,:}])" or (curr_text[0] == "=" and equal)) + ) + or + # Don't place spaces around a '.', unless it's in an 'import' + # statement. + ( + (prev_prev_text != "from" and prev_text[-1] != "." and curr_text != "import") + and + # Don't place a space before a colon. + curr_text[0] != ":" + and + # Don't split up ending brackets by spaces. + ( + (prev_text[-1] in "}])" and curr_text[0] not in ".,}])") + or + # Put a space after a colon or comma. + prev_text[-1] in ":," + or + # Put space around '=' if asked to. + (equal and prev_text == "=") + or + # Put spaces around non-unary arithmetic operators. + ( + self._prev_prev_item + and ( + prev_text not in "+-" + and (self._prev_prev_item.is_name or self._prev_prev_item.is_number or self._prev_prev_item.is_string) + ) + and prev_text in ("+", "-", "%", "*", "/", "//", "**", "in") + ) + ) + ) + ): + self._lines.append(self._Space()) + + def previous_item(self): + """Return the previous non-whitespace item.""" + return self._prev_item + + def fits_on_current_line(self, item_extent): + return self.current_size() + item_extent <= self._max_line_length + + def current_size(self): + """The size of the current line minus the indentation.""" + size = 0 + for item in reversed(self._lines): + size += item.size + if isinstance(item, self._LineBreak): + break + + return size + + def line_empty(self): + return self._lines and isinstance(self._lines[-1], (self._LineBreak, self._Indent)) + + def emit(self): + string = "" + for item in self._lines: + if isinstance(item, self._LineBreak): + string = string.rstrip() + string += item.emit() + + return string.rstrip() + "\n" + + ########################################################################### + # Private Methods + + def _add_item(self, item, indent_amt): + """Add an item to the line. + + Reflow the line to get the best formatting after the item is + inserted. The bracket depth indicates if the item is being + inserted inside of a container or not. + + """ + if self._prev_item and self._prev_item.is_string and item.is_string: + # Place consecutive string literals on separate lines. + self._lines.append(self._LineBreak()) + self._lines.append(self._Indent(indent_amt)) + + item_text = unicode(item) + if self._lines and self._bracket_depth: + # Adding the item into a container. + self._prevent_default_initializer_splitting(item, indent_amt) + + if item_text in ".,)]}": + self._split_after_delimiter(item, indent_amt) + + elif self._lines and not self.line_empty(): + # Adding the item outside of a container. + if self.fits_on_current_line(len(item_text)): + self._enforce_space(item) + + else: + # Line break for the new item. + self._lines.append(self._LineBreak()) + self._lines.append(self._Indent(indent_amt)) + + self._lines.append(item) + self._prev_item, self._prev_prev_item = item, self._prev_item + + if item_text in "([{": + self._bracket_depth += 1 + + elif item_text in "}])": + self._bracket_depth -= 1 + assert self._bracket_depth >= 0 + + def _add_container(self, container, indent_amt, break_after_open_bracket): + actual_indent = indent_amt + 1 + + if ( + unicode(self._prev_item) != "=" + and not self.line_empty() + and not self.fits_on_current_line(container.size + self._bracket_depth + 2) + ): + if unicode(container)[0] == "(" and self._prev_item.is_name: + # Don't split before the opening bracket of a call. + break_after_open_bracket = True + actual_indent = indent_amt + 4 + elif break_after_open_bracket or unicode(self._prev_item) not in "([{": + # If the container doesn't fit on the current line and the + # current line isn't empty, place the container on the next + # line. + self._lines.append(self._LineBreak()) + self._lines.append(self._Indent(indent_amt)) + break_after_open_bracket = False + else: + actual_indent = self.current_size() + 1 + break_after_open_bracket = False + + if isinstance(container, (ListComprehension, IfExpression)): + actual_indent = indent_amt + + # Increase the continued indentation only if recursing on a + # container. + container.reflow(self, " " * actual_indent, break_after_open_bracket=break_after_open_bracket) + + def _prevent_default_initializer_splitting(self, item, indent_amt): + """Prevent splitting between a default initializer. + + When there is a default initializer, it's best to keep it all on + the same line. It's nicer and more readable, even if it goes + over the maximum allowable line length. This goes back along the + current line to determine if we have a default initializer, and, + if so, to remove extraneous whitespaces and add a line + break/indent before it if needed. + + """ + if unicode(item) == "=": + # This is the assignment in the initializer. Just remove spaces for + # now. + self._delete_whitespace() + return + + if not self._prev_item or not self._prev_prev_item or unicode(self._prev_item) != "=": + return + + self._delete_whitespace() + prev_prev_index = self._lines.index(self._prev_prev_item) + + if isinstance(self._lines[prev_prev_index - 1], self._Indent) or self.fits_on_current_line(item.size + 1): + # The default initializer is already the only item on this line. + # Don't insert a newline here. + return + + # Replace the space with a newline/indent combo. + if isinstance(self._lines[prev_prev_index - 1], self._Space): + del self._lines[prev_prev_index - 1] + + self.add_line_break_at(self._lines.index(self._prev_prev_item), indent_amt) + + def _split_after_delimiter(self, item, indent_amt): + """Split the line only after a delimiter.""" + self._delete_whitespace() + + if self.fits_on_current_line(item.size): + return + + last_space = None + for current_item in reversed(self._lines): + if last_space and (not isinstance(current_item, Atom) or not current_item.is_colon): + break + else: + last_space = None + if isinstance(current_item, self._Space): + last_space = current_item + if isinstance(current_item, (self._LineBreak, self._Indent)): + return + + if not last_space: + return + + self.add_line_break_at(self._lines.index(last_space), indent_amt) + + def _enforce_space(self, item): + """Enforce a space in certain situations. + + There are cases where we will want a space where normally we + wouldn't put one. This just enforces the addition of a space. + + """ + if isinstance(self._lines[-1], (self._Space, self._LineBreak, self._Indent)): + return + + if not self._prev_item: + return + + item_text = unicode(item) + prev_text = unicode(self._prev_item) + + # Prefer a space around a '.' in an import statement, and between the + # 'import' and '('. + if ( + (item_text == "." and prev_text == "from") + or (item_text == "import" and prev_text == ".") + or (item_text == "(" and prev_text == "import") + ): + self._lines.append(self._Space()) + + def _delete_whitespace(self): + """Delete all whitespace from the end of the line.""" + while isinstance(self._lines[-1], (self._Space, self._LineBreak, self._Indent)): + del self._lines[-1] + + +class Atom(object): + + """The smallest unbreakable unit that can be reflowed.""" + + def __init__(self, atom): + self._atom = atom + + def __repr__(self): + return self._atom.token_string + + def __len__(self): + return self.size + + def reflow( + self, reflowed_lines, continued_indent, extent, break_after_open_bracket=False, is_list_comp_or_if_expr=False, next_is_dot=False + ): + if self._atom.token_type == tokenize.COMMENT: + reflowed_lines.add_comment(self) + return + + total_size = extent if extent else self.size + + if self._atom.token_string not in ",:([{}])": + # Some atoms will need an extra 1-sized space token after them. + total_size += 1 + + prev_item = reflowed_lines.previous_item() + if ( + not is_list_comp_or_if_expr + and not reflowed_lines.fits_on_current_line(total_size) + and not (next_is_dot and reflowed_lines.fits_on_current_line(self.size + 1)) + and not reflowed_lines.line_empty() + and not self.is_colon + and not (prev_item and prev_item.is_name and unicode(self) == "(") + ): + # Start a new line if there is already something on the line and + # adding this atom would make it go over the max line length. + reflowed_lines.add_line_break(continued_indent) + else: + reflowed_lines.add_space_if_needed(unicode(self)) + + reflowed_lines.add(self, len(continued_indent), break_after_open_bracket) + + def emit(self): + return self.__repr__() + + @property + def is_keyword(self): + return keyword.iskeyword(self._atom.token_string) + + @property + def is_string(self): + return self._atom.token_type == tokenize.STRING + + @property + def is_name(self): + return self._atom.token_type == tokenize.NAME + + @property + def is_number(self): + return self._atom.token_type == tokenize.NUMBER + + @property + def is_comma(self): + return self._atom.token_string == "," + + @property + def is_colon(self): + return self._atom.token_string == ":" + + @property + def size(self): + return len(self._atom.token_string) + + +class Container(object): + + """Base class for all container types.""" + + def __init__(self, items): + self._items = items + + def __repr__(self): + string = "" + last_was_keyword = False + + for item in self._items: + if item.is_comma: + string += ", " + elif item.is_colon: + string += ": " + else: + item_string = unicode(item) + if string and ( + last_was_keyword or (not string.endswith(tuple("([{,.:}]) ")) and not item_string.startswith(tuple("([{,.:}])"))) + ): + string += " " + string += item_string + + last_was_keyword = item.is_keyword + return string + + def __iter__(self): + for element in self._items: + yield element + + def __getitem__(self, idx): + return self._items[idx] + + def reflow(self, reflowed_lines, continued_indent, break_after_open_bracket=False): + last_was_container = False + for index, item in enumerate(self._items): + next_item = get_item(self._items, index + 1) + + if isinstance(item, Atom): + is_list_comp_or_if_expr = isinstance(self, (ListComprehension, IfExpression)) + item.reflow( + reflowed_lines, + continued_indent, + self._get_extent(index), + is_list_comp_or_if_expr=is_list_comp_or_if_expr, + next_is_dot=(next_item and unicode(next_item) == "."), + ) + if last_was_container and item.is_comma: + reflowed_lines.add_line_break(continued_indent) + last_was_container = False + else: # isinstance(item, Container) + reflowed_lines.add(item, len(continued_indent), break_after_open_bracket) + last_was_container = not isinstance(item, (ListComprehension, IfExpression)) + + if ( + break_after_open_bracket + and index == 0 + and + # Prefer to keep empty containers together instead of + # separating them. + unicode(item) == self.open_bracket + and (not next_item or unicode(next_item) != self.close_bracket) + and (len(self._items) != 3 or not isinstance(next_item, Atom)) + ): + reflowed_lines.add_line_break(continued_indent) + break_after_open_bracket = False + else: + next_next_item = get_item(self._items, index + 2) + if ( + unicode(item) not in [".", "%", "in"] + and next_item + and not isinstance(next_item, Container) + and unicode(next_item) != ":" + and next_next_item + and (not isinstance(next_next_item, Atom) or unicode(next_item) == "not") + and not reflowed_lines.line_empty() + and not reflowed_lines.fits_on_current_line(self._get_extent(index + 1) + 2) + ): + reflowed_lines.add_line_break(continued_indent) + + def _get_extent(self, index): + """The extent of the full element. + + E.g., the length of a function call or keyword. + + """ + extent = 0 + prev_item = get_item(self._items, index - 1) + seen_dot = prev_item and unicode(prev_item) == "." + while index < len(self._items): + item = get_item(self._items, index) + index += 1 + + if isinstance(item, (ListComprehension, IfExpression)): + break + + if isinstance(item, Container): + if prev_item and prev_item.is_name: + if seen_dot: + extent += 1 + else: + extent += item.size + + prev_item = item + continue + elif unicode(item) not in [".", "=", ":", "not"] and not item.is_name and not item.is_string: + break + + if unicode(item) == ".": + seen_dot = True + + extent += item.size + prev_item = item + + return extent + + @property + def is_string(self): + return False + + @property + def size(self): + return len(self.__repr__()) + + @property + def is_keyword(self): + return False + + @property + def is_name(self): + return False + + @property + def is_comma(self): + return False + + @property + def is_colon(self): + return False + + @property + def open_bracket(self): + return None + + @property + def close_bracket(self): + return None + + +class Tuple(Container): + + """A high-level representation of a tuple.""" + + @property + def open_bracket(self): + return "(" + + @property + def close_bracket(self): + return ")" + + +class List(Container): + + """A high-level representation of a list.""" + + @property + def open_bracket(self): + return "[" + + @property + def close_bracket(self): + return "]" + + +class DictOrSet(Container): + + """A high-level representation of a dictionary or set.""" + + @property + def open_bracket(self): + return "{" + + @property + def close_bracket(self): + return "}" + + +class ListComprehension(Container): + + """A high-level representation of a list comprehension.""" + + @property + def size(self): + length = 0 + for item in self._items: + if isinstance(item, IfExpression): + break + length += item.size + return length + + +class IfExpression(Container): + + """A high-level representation of an if-expression.""" + + +def _parse_container(tokens, index, for_or_if=None): + """Parse a high-level container, such as a list, tuple, etc.""" + + # Store the opening bracket. + items = [Atom(Token(*tokens[index]))] + index += 1 + + num_tokens = len(tokens) + while index < num_tokens: + tok = Token(*tokens[index]) + + if tok.token_string in ",)]}": + # First check if we're at the end of a list comprehension or + # if-expression. Don't add the ending token as part of the list + # comprehension or if-expression, because they aren't part of those + # constructs. + if for_or_if == "for": + return (ListComprehension(items), index - 1) + + elif for_or_if == "if": + return (IfExpression(items), index - 1) + + # We've reached the end of a container. + items.append(Atom(tok)) + + # If not, then we are at the end of a container. + if tok.token_string == ")": + # The end of a tuple. + return (Tuple(items), index) + + elif tok.token_string == "]": + # The end of a list. + return (List(items), index) + + elif tok.token_string == "}": + # The end of a dictionary or set. + return (DictOrSet(items), index) + + elif tok.token_string in "([{": + # A sub-container is being defined. + (container, index) = _parse_container(tokens, index) + items.append(container) + + elif tok.token_string == "for": + (container, index) = _parse_container(tokens, index, "for") + items.append(container) + + elif tok.token_string == "if": + (container, index) = _parse_container(tokens, index, "if") + items.append(container) + + else: + items.append(Atom(tok)) + + index += 1 + + return (None, None) + + +def _parse_tokens(tokens): + """Parse the tokens. + + This converts the tokens into a form where we can manipulate them + more easily. + + """ + + index = 0 + parsed_tokens = [] + + num_tokens = len(tokens) + while index < num_tokens: + tok = Token(*tokens[index]) + + assert tok.token_type != token.INDENT + if tok.token_type == tokenize.NEWLINE: + # There's only one newline and it's at the end. + break + + if tok.token_string in "([{": + (container, index) = _parse_container(tokens, index) + if not container: + return None + parsed_tokens.append(container) + else: + parsed_tokens.append(Atom(tok)) + + index += 1 + + return parsed_tokens + + +def _reflow_lines(parsed_tokens, indentation, max_line_length, start_on_prefix_line): + """Reflow the lines so that it looks nice.""" + + if unicode(parsed_tokens[0]) == "def": + # A function definition gets indented a bit more. + continued_indent = indentation + " " * 2 * DEFAULT_INDENT_SIZE + else: + continued_indent = indentation + " " * DEFAULT_INDENT_SIZE + + break_after_open_bracket = not start_on_prefix_line + + lines = ReformattedLines(max_line_length) + lines.add_indent(len(indentation.lstrip("\r\n"))) + + if not start_on_prefix_line: + # If splitting after the opening bracket will cause the first element + # to be aligned weirdly, don't try it. + first_token = get_item(parsed_tokens, 0) + second_token = get_item(parsed_tokens, 1) + + if ( + first_token + and second_token + and unicode(second_token)[0] == "(" + and len(indentation) + len(first_token) + 1 == len(continued_indent) + ): + return None + + for item in parsed_tokens: + lines.add_space_if_needed(unicode(item), equal=True) + + save_continued_indent = continued_indent + if start_on_prefix_line and isinstance(item, Container): + start_on_prefix_line = False + continued_indent = " " * (lines.current_size() + 1) + + item.reflow(lines, continued_indent, break_after_open_bracket) + continued_indent = save_continued_indent + + return lines.emit() + + +def _shorten_line_at_tokens_new(tokens, source, indentation, max_line_length): + """Shorten the line taking its length into account. + + The input is expected to be free of newlines except for inside + multiline strings and at the end. + + """ + # Yield the original source so to see if it's a better choice than the + # shortened candidate lines we generate here. + yield indentation + source + + parsed_tokens = _parse_tokens(tokens) + + if parsed_tokens: + # Perform two reflows. The first one starts on the same line as the + # prefix. The second starts on the line after the prefix. + fixed = _reflow_lines(parsed_tokens, indentation, max_line_length, start_on_prefix_line=True) + if fixed and check_syntax(normalize_multiline(fixed.lstrip())): + yield fixed + + fixed = _reflow_lines(parsed_tokens, indentation, max_line_length, start_on_prefix_line=False) + if fixed and check_syntax(normalize_multiline(fixed.lstrip())): + yield fixed + + +def _shorten_line_at_tokens(tokens, source, indentation, indent_word, key_token_strings, aggressive): + """Separate line by breaking at tokens in key_token_strings. + + The input is expected to be free of newlines except for inside + multiline strings and at the end. + + """ + offsets = [] + for index, _t in enumerate(token_offsets(tokens)): + (token_type, token_string, start_offset, end_offset) = _t + + assert token_type != token.INDENT + + if token_string in key_token_strings: + # Do not break in containers with zero or one items. + unwanted_next_token = {"(": ")", "[": "]", "{": "}"}.get(token_string) + if unwanted_next_token: + if ( + get_item(tokens, index + 1, default=[None, None])[1] == unwanted_next_token + or get_item(tokens, index + 2, default=[None, None])[1] == unwanted_next_token + ): + continue + + if index > 2 and token_string == "(" and tokens[index - 1][1] in ",(%[": + # Don't split after a tuple start, or before a tuple start if + # the tuple is in a list. + continue + + if end_offset < len(source) - 1: + # Don't split right before newline. + offsets.append(end_offset) + else: + # Break at adjacent strings. These were probably meant to be on + # separate lines in the first place. + previous_token = get_item(tokens, index - 1) + if token_type == tokenize.STRING and previous_token and previous_token[0] == tokenize.STRING: + offsets.append(start_offset) + + current_indent = None + fixed = None + for line in split_at_offsets(source, offsets): + if fixed: + fixed += "\n" + current_indent + line + + for symbol in "([{": + if line.endswith(symbol): + current_indent += indent_word + else: + # First line. + fixed = line + assert not current_indent + current_indent = indent_word + + assert fixed is not None + + if check_syntax(normalize_multiline(fixed) if aggressive > 1 else fixed): + return indentation + fixed + + return None + + +def token_offsets(tokens): + """Yield tokens and offsets.""" + end_offset = 0 + previous_end_row = 0 + previous_end_column = 0 + for t in tokens: + token_type = t[0] + token_string = t[1] + (start_row, start_column) = t[2] + (end_row, end_column) = t[3] + + # Account for the whitespace between tokens. + end_offset += start_column + if previous_end_row == start_row: + end_offset -= previous_end_column + + # Record the start offset of the token. + start_offset = end_offset + + # Account for the length of the token itself. + end_offset += len(token_string) + + yield (token_type, token_string, start_offset, end_offset) + + previous_end_row = end_row + previous_end_column = end_column + + +def normalize_multiline(line): + """Normalize multiline-related code that will cause syntax error. + + This is for purposes of checking syntax. + + """ + if line.startswith("def ") and line.rstrip().endswith(":"): + return line + " pass" + elif line.startswith("return "): + return "def _(): " + line + elif line.startswith("@"): + return line + "def _(): pass" + elif line.startswith("class "): + return line + " pass" + elif line.startswith(("if ", "elif ", "for ", "while ")): + return line + " pass" + + return line + + +def fix_whitespace(line, offset, replacement): + """Replace whitespace at offset and return fixed line.""" + # Replace escaped newlines too + left = line[:offset].rstrip("\n\r \t\\") + right = line[offset:].lstrip("\n\r \t\\") + if right.startswith("#"): + return line + + return left + replacement + right + + +def _execute_pep8(pep8_options, source): + """Execute pycodestyle via python method calls.""" + + class QuietReport(pycodestyle.BaseReport): + + """Version of checker that does not print.""" + + def __init__(self, options): + super(QuietReport, self).__init__(options) + self.__full_error_results = [] + + def error(self, line_number, offset, text, check): + """Collect errors.""" + code = super(QuietReport, self).error(line_number, offset, text, check) + if code: + self.__full_error_results.append({"id": code, "line": line_number, "column": offset + 1, "info": text}) + + def full_error_results(self): + """Return error results in detail. + + Results are in the form of a list of dictionaries. Each + dictionary contains 'id', 'line', 'column', and 'info'. + + """ + return self.__full_error_results + + checker = pycodestyle.Checker("", lines=source, reporter=QuietReport, **pep8_options) + checker.check_all() + return checker.report.full_error_results() + + +def _remove_leading_and_normalize(line, with_rstrip=True): + # ignore FF in first lstrip() + if with_rstrip: + return line.lstrip(" \t\v").rstrip(CR + LF) + "\n" + return line.lstrip(" \t\v") + + +class Reindenter(object): + + """Reindents badly-indented code to uniformly use four-space indentation. + + Released to the public domain, by Tim Peters, 03 October 2000. + + """ + + def __init__(self, input_text): + sio = io.StringIO(input_text) + source_lines = sio.readlines() + + self.string_content_line_numbers = multiline_string_lines(input_text) + + # File lines, rstripped & tab-expanded. Dummy at start is so + # that we can use tokenize's 1-based line numbering easily. + # Note that a line is all-blank iff it is a newline. + self.lines = [] + for line_number, line in enumerate(source_lines, start=1): + # Do not modify if inside a multiline string. + if line_number in self.string_content_line_numbers: + self.lines.append(line) + else: + # Only expand leading tabs. + with_rstrip = line_number != len(source_lines) + self.lines.append(_get_indentation(line).expandtabs() + _remove_leading_and_normalize(line, with_rstrip)) + + self.lines.insert(0, None) + self.index = 1 # index into self.lines of next line + self.input_text = input_text + + def run(self, indent_size=DEFAULT_INDENT_SIZE): + """Fix indentation and return modified line numbers. + + Line numbers are indexed at 1. + + """ + if indent_size < 1: + return self.input_text + + try: + stats = _reindent_stats(tokenize.generate_tokens(self.getline)) + except (SyntaxError, tokenize.TokenError): + return self.input_text + # Remove trailing empty lines. + lines = self.lines + # Sentinel. + stats.append((len(lines), 0)) + # Map count of leading spaces to # we want. + have2want = {} + # Program after transformation. + after = [] + # Copy over initial empty lines -- there's nothing to do until + # we see a line with *something* on it. + i = stats[0][0] + after.extend(lines[1:i]) + for i in range(len(stats) - 1): + thisstmt, thislevel = stats[i] + nextstmt = stats[i + 1][0] + have = _leading_space_count(lines[thisstmt]) + want = thislevel * indent_size + if want < 0: + # A comment line. + if have: + # An indented comment line. If we saw the same + # indentation before, reuse what it most recently + # mapped to. + want = have2want.get(have, -1) + if want < 0: + # Then it probably belongs to the next real stmt. + for j in range(i + 1, len(stats) - 1): + jline, jlevel = stats[j] + if jlevel >= 0: + if have == _leading_space_count(lines[jline]): + want = jlevel * indent_size + break + # Maybe it's a hanging comment like this one, + if want < 0: + # in which case we should shift it like its base + # line got shifted. + for j in range(i - 1, -1, -1): + jline, jlevel = stats[j] + if jlevel >= 0: + want = have + _leading_space_count(after[jline - 1]) - _leading_space_count(lines[jline]) + break + if want < 0: + # Still no luck -- leave it alone. + want = have + else: + want = 0 + assert want >= 0 + have2want[have] = want + diff = want - have + if diff == 0 or have == 0: + after.extend(lines[thisstmt:nextstmt]) + else: + for line_number, line in enumerate(lines[thisstmt:nextstmt], start=thisstmt): + if line_number in self.string_content_line_numbers: + after.append(line) + elif diff > 0: + if line == "\n": + after.append(line) + else: + after.append(" " * diff + line) + else: + remove = min(_leading_space_count(line), -diff) + after.append(line[remove:]) + + return "".join(after) + + def getline(self): + """Line-getter for tokenize.""" + if self.index >= len(self.lines): + line = "" + else: + line = self.lines[self.index] + self.index += 1 + return line + + +def _reindent_stats(tokens): + """Return list of (lineno, indentlevel) pairs. + + One for each stmt and comment line. indentlevel is -1 for comment + lines, as a signal that tokenize doesn't know what to do about them; + indeed, they're our headache! + + """ + find_stmt = 1 # Next token begins a fresh stmt? + level = 0 # Current indent level. + stats = [] + + for t in tokens: + token_type = t[0] + sline = t[2][0] + line = t[4] + + if token_type == tokenize.NEWLINE: + # A program statement, or ENDMARKER, will eventually follow, + # after some (possibly empty) run of tokens of the form + # (NL | COMMENT)* (INDENT | DEDENT+)? + find_stmt = 1 + + elif token_type == tokenize.INDENT: + find_stmt = 1 + level += 1 + + elif token_type == tokenize.DEDENT: + find_stmt = 1 + level -= 1 + + elif token_type == tokenize.COMMENT: + if find_stmt: + stats.append((sline, -1)) + # But we're still looking for a new stmt, so leave + # find_stmt alone. + + elif token_type == tokenize.NL: + pass + + elif find_stmt: + # This is the first "real token" following a NEWLINE, so it + # must be the first token of the next program statement, or an + # ENDMARKER. + find_stmt = 0 + if line: # Not endmarker. + stats.append((sline, level)) + + return stats + + +def _leading_space_count(line): + """Return number of leading spaces in line.""" + i = 0 + while i < len(line) and line[i] == " ": + i += 1 + return i + + +def refactor_with_2to3(source_text, fixer_names, filename=""): + """Use lib2to3 to refactor the source. + + Return the refactored source code. + + """ + from lib2to3.refactor import RefactoringTool + + fixers = ["lib2to3.fixes.fix_" + name for name in fixer_names] + tool = RefactoringTool(fixer_names=fixers, explicit=fixers) + + from lib2to3.pgen2 import tokenize as lib2to3_tokenize + + try: + # The name parameter is necessary particularly for the "import" fixer. + return unicode(tool.refactor_string(source_text, name=filename)) + except lib2to3_tokenize.TokenError: + return source_text + + +def check_syntax(code): + """Return True if syntax is okay.""" + try: + return compile(code, "", "exec", dont_inherit=True) + except (SyntaxError, TypeError, ValueError): + return False + + +def find_with_line_numbers(pattern, contents): + """A wrapper around 're.finditer' to find line numbers. + + Returns a list of line numbers where pattern was found in contents. + """ + matches = list(re.finditer(pattern, contents)) + if not matches: + return [] + + end = matches[-1].start() + + # -1 so a failed `rfind` maps to the first line. + newline_offsets = {-1: 0} + for line_num, m in enumerate(re.finditer(r"\n", contents), 1): + offset = m.start() + if offset > end: + break + newline_offsets[offset] = line_num + + def get_line_num(match, contents): + """Get the line number of string in a files contents. + + Failing to find the newline is OK, -1 maps to 0 + + """ + newline_offset = contents.rfind("\n", 0, match.start()) + return newline_offsets[newline_offset] + + return [get_line_num(match, contents) + 1 for match in matches] + + +def get_disabled_ranges(source): + """Returns a list of tuples representing the disabled ranges. + + If disabled and no re-enable will disable for rest of file. + + """ + enable_line_nums = find_with_line_numbers(ENABLE_REGEX, source) + disable_line_nums = find_with_line_numbers(DISABLE_REGEX, source) + total_lines = len(re.findall("\n", source)) + 1 + + enable_commands = {} + for num in enable_line_nums: + enable_commands[num] = True + for num in disable_line_nums: + enable_commands[num] = False + + disabled_ranges = [] + currently_enabled = True + disabled_start = None + + for line, commanded_enabled in sorted(enable_commands.items()): + if commanded_enabled is False and currently_enabled is True: + disabled_start = line + currently_enabled = False + elif commanded_enabled is True and currently_enabled is False: + disabled_ranges.append((disabled_start, line)) + currently_enabled = True + + if currently_enabled is False: + disabled_ranges.append((disabled_start, total_lines)) + + return disabled_ranges + + +def filter_disabled_results(result, disabled_ranges): + """Filter out reports based on tuple of disabled ranges.""" + line = result["line"] + for disabled_range in disabled_ranges: + if disabled_range[0] <= line <= disabled_range[1]: + return False + return True + + +def filter_results(source, results, aggressive): + """Filter out spurious reports from pycodestyle. + + If aggressive is True, we allow possibly unsafe fixes (E711, E712). + + """ + non_docstring_string_line_numbers = multiline_string_lines(source, include_docstrings=False) + all_string_line_numbers = multiline_string_lines(source, include_docstrings=True) + + commented_out_code_line_numbers = commented_out_code_lines(source) + + # Filter out the disabled ranges + disabled_ranges = get_disabled_ranges(source) + if disabled_ranges: + results = [ + result + for result in results + if filter_disabled_results( + result, + disabled_ranges, + ) + ] + + has_e901 = any(result["id"].lower() == "e901" for result in results) + + for r in results: + issue_id = r["id"].lower() + + if r["line"] in non_docstring_string_line_numbers: + if issue_id.startswith(("e1", "e501", "w191")): + continue + + if r["line"] in all_string_line_numbers: + if issue_id in ["e501"]: + continue + + # We must offset by 1 for lines that contain the trailing contents of + # multiline strings. + if not aggressive and (r["line"] + 1) in all_string_line_numbers: + # Do not modify multiline strings in non-aggressive mode. Remove + # trailing whitespace could break doctests. + if issue_id.startswith(("w29", "w39")): + continue + + if aggressive <= 0: + if issue_id.startswith(("e711", "e72", "w6")): + continue + + if aggressive <= 1: + if issue_id.startswith(("e712", "e713", "e714")): + continue + + if aggressive <= 2: + if issue_id.startswith(("e704")): + continue + + if r["line"] in commented_out_code_line_numbers: + if issue_id.startswith(("e26", "e501")): + continue + + # Do not touch indentation if there is a token error caused by + # incomplete multi-line statement. Otherwise, we risk screwing up the + # indentation. + if has_e901: + if issue_id.startswith(("e1", "e7")): + continue + + yield r + + +def multiline_string_lines(source, include_docstrings=False): + """Return line numbers that are within multiline strings. + + The line numbers are indexed at 1. + + Docstrings are ignored. + + """ + line_numbers = set() + previous_token_type = "" + try: + for t in generate_tokens(source): + token_type = t[0] + start_row = t[2][0] + end_row = t[3][0] + + if token_type == tokenize.STRING and start_row != end_row: + if include_docstrings or previous_token_type != tokenize.INDENT: + # We increment by one since we want the contents of the + # string. + line_numbers |= set(range(1 + start_row, 1 + end_row)) + + previous_token_type = token_type + except (SyntaxError, tokenize.TokenError): + pass + + return line_numbers + + +def commented_out_code_lines(source): + """Return line numbers of comments that are likely code. + + Commented-out code is bad practice, but modifying it just adds even + more clutter. + + """ + line_numbers = [] + try: + for t in generate_tokens(source): + token_type = t[0] + token_string = t[1] + start_row = t[2][0] + line = t[4] + + # Ignore inline comments. + if not line.lstrip().startswith("#"): + continue + + if token_type == tokenize.COMMENT: + stripped_line = token_string.lstrip("#").strip() + with warnings.catch_warnings(): + # ignore SyntaxWarning in Python3.8+ + # refs: + # https://bugs.python.org/issue15248 + # https://docs.python.org/3.8/whatsnew/3.8.html#other-language-changes + warnings.filterwarnings("ignore", category=SyntaxWarning) + if " " in stripped_line and "#" not in stripped_line and check_syntax(stripped_line): + line_numbers.append(start_row) + except (SyntaxError, tokenize.TokenError): + pass + + return line_numbers + + +def shorten_comment(line, max_line_length, last_comment=False): + """Return trimmed or split long comment line. + + If there are no comments immediately following it, do a text wrap. + Doing this wrapping on all comments in general would lead to jagged + comment text. + + """ + assert len(line) > max_line_length + line = line.rstrip() + + # PEP 8 recommends 72 characters for comment text. + indentation = _get_indentation(line) + "# " + max_line_length = min(max_line_length, len(indentation) + 72) + + MIN_CHARACTER_REPEAT = 5 + if len(line) - len(line.rstrip(line[-1])) >= MIN_CHARACTER_REPEAT and not line[-1].isalnum(): + # Trim comments that end with things like --------- + return line[:max_line_length] + "\n" + elif last_comment and re.match(r"\s*#+\s*\w+", line): + split_lines = textwrap.wrap( + line.lstrip(" \t#"), + initial_indent=indentation, + subsequent_indent=indentation, + width=max_line_length, + break_long_words=False, + break_on_hyphens=False, + ) + return "\n".join(split_lines) + "\n" + + return line + "\n" + + +def normalize_line_endings(lines, newline): + """Return fixed line endings. + + All lines will be modified to use the most common line ending. + """ + line = [line.rstrip("\n\r") + newline for line in lines] + if line and lines[-1] == lines[-1].rstrip("\n\r"): + line[-1] = line[-1].rstrip("\n\r") + return line + + +def mutual_startswith(a, b): + return b.startswith(a) or a.startswith(b) + + +def code_match(code, select, ignore): + if ignore: + assert not isinstance(ignore, unicode) + for ignored_code in [c.strip() for c in ignore]: + if mutual_startswith(code.lower(), ignored_code.lower()): + return False + + if select: + assert not isinstance(select, unicode) + for selected_code in [c.strip() for c in select]: + if mutual_startswith(code.lower(), selected_code.lower()): + return True + return False + + return True + + +def fix_code(source, options=None, encoding=None, apply_config=False): + """Return fixed source code. + + "encoding" will be used to decode "source" if it is a byte string. + + """ + options = _get_options(options, apply_config) + + if not isinstance(source, unicode): + source = source.decode(encoding or get_encoding()) + + sio = io.StringIO(source) + return fix_lines(sio.readlines(), options=options) + + +def _get_options(raw_options, apply_config): + """Return parsed options.""" + if not raw_options: + return parse_args([""], apply_config=apply_config) + + if isinstance(raw_options, dict): + options = parse_args([""], apply_config=apply_config) + for name, value in raw_options.items(): + if not hasattr(options, name): + raise ValueError("No such option '{}'".format(name)) + + # Check for very basic type errors. + expected_type = type(getattr(options, name)) + if not isinstance(expected_type, (str, unicode)): + if isinstance(value, (str, unicode)): + raise ValueError("Option '{}' should not be a string".format(name)) + setattr(options, name, value) + else: + options = raw_options + + return options + + +def fix_lines(source_lines, options, filename=""): + """Return fixed source code.""" + # Transform everything to line feed. Then change them back to original + # before returning fixed source code. + original_newline = find_newline(source_lines) + tmp_source = "".join(normalize_line_endings(source_lines, "\n")) + + # Keep a history to break out of cycles. + previous_hashes = set() + + if options.line_range: + # Disable "apply_local_fixes()" for now due to issue #175. + fixed_source = tmp_source + else: + pep8_options = { + "ignore": options.ignore, + "select": options.select, + "max_line_length": options.max_line_length, + "hang_closing": options.hang_closing, + } + sio = io.StringIO(tmp_source) + contents = sio.readlines() + results = _execute_pep8(pep8_options, contents) + codes = {result["id"] for result in results if result["id"] in SELECTED_GLOBAL_FIXED_METHOD_CODES} + # Apply global fixes only once (for efficiency). + fixed_source = apply_global_fixes(tmp_source, options, filename=filename, codes=codes) + + passes = 0 + long_line_ignore_cache = set() + while hash(fixed_source) not in previous_hashes: + if options.pep8_passes >= 0 and passes > options.pep8_passes: + break + passes += 1 + + previous_hashes.add(hash(fixed_source)) + + tmp_source = copy.copy(fixed_source) + + fix = FixPEP8(filename, options, contents=tmp_source, long_line_ignore_cache=long_line_ignore_cache) + + fixed_source = fix.fix() + + sio = io.StringIO(fixed_source) + return "".join(normalize_line_endings(sio.readlines(), original_newline)) + + +def fix_file(filename, options=None, output=None, apply_config=False): + if not options: + options = parse_args([filename], apply_config=apply_config) + + original_source = readlines_from_file(filename) + + fixed_source = original_source + + if options.in_place or options.diff or output: + encoding = detect_encoding(filename) + + if output: + output = LineEndingWrapper(wrap_output(output, encoding=encoding)) + + fixed_source = fix_lines(fixed_source, options, filename=filename) + + if options.diff: + new = io.StringIO(fixed_source) + new = new.readlines() + diff = get_diff_text(original_source, new, filename) + if output: + output.write(diff) + output.flush() + elif options.jobs > 1: + diff = diff.encode(encoding) + return diff + elif options.in_place: + original = "".join(original_source).splitlines() + fixed = fixed_source.splitlines() + original_source_last_line = original_source[-1].split("\n")[-1] if original_source else "" + fixed_source_last_line = fixed_source.split("\n")[-1] + if original != fixed or (original_source_last_line != fixed_source_last_line): + with open_with_encoding(filename, "w", encoding=encoding) as fp: + fp.write(fixed_source) + return fixed_source + return None + else: + if output: + output.write(fixed_source) + output.flush() + return fixed_source + + +def global_fixes(): + """Yield multiple (code, function) tuples.""" + for function in list(globals().values()): + if inspect.isfunction(function): + arguments = _get_parameters(function) + if arguments[:1] != ["source"]: + continue + + code = extract_code_from_function(function) + if code: + yield (code, function) + + +def _get_parameters(function): + # pylint: disable=deprecated-method + if sys.version_info.major >= 3: + # We need to match "getargspec()", which includes "self" as the first + # value for methods. + # https://bugs.python.org/issue17481#msg209469 + if inspect.ismethod(function): + function = function.__func__ + + return list(inspect.signature(function).parameters) + else: + return inspect.getargspec(function)[0] + + +def apply_global_fixes(source, options, where="global", filename="", codes=None): + """Run global fixes on source code. + + These are fixes that only need be done once (unlike those in + FixPEP8, which are dependent on pycodestyle). + + """ + if codes is None: + codes = [] + if any(code_match(code, select=options.select, ignore=options.ignore) for code in ["E101", "E111"]): + source = reindent(source, indent_size=options.indent_size) + + for code, function in global_fixes(): + if code.upper() in SELECTED_GLOBAL_FIXED_METHOD_CODES and code.upper() not in codes: + continue + if code_match(code, select=options.select, ignore=options.ignore): + if options.verbose: + print("---> Applying {} fix for {}".format(where, code.upper()), file=sys.stderr) + source = function(source, aggressive=options.aggressive) + + source = fix_2to3( + source, + aggressive=options.aggressive, + select=options.select, + ignore=options.ignore, + filename=filename, + where=where, + verbose=options.verbose, + ) + + return source + + +def extract_code_from_function(function): + """Return code handled by function.""" + if not function.__name__.startswith("fix_"): + return None + + code = re.sub("^fix_", "", function.__name__) + if not code: + return None + + try: + int(code[1:]) + except ValueError: + return None + + return code + + +def _get_package_version(): + packages = ["pycodestyle: {}".format(pycodestyle.__version__)] + return ", ".join(packages) + + +def create_parser(): + """Return command-line parser.""" + parser = argparse.ArgumentParser(description=docstring_summary(__doc__), prog="autopep8") + parser.add_argument("--version", action="version", version="%(prog)s {} ({})".format(__version__, _get_package_version())) + parser.add_argument( + "-v", "--verbose", action="count", default=0, help="print verbose messages; " "multiple -v result in more verbose messages" + ) + parser.add_argument("-d", "--diff", action="store_true", help="print the diff for the fixed source") + parser.add_argument("-i", "--in-place", action="store_true", help="make changes to files in place") + parser.add_argument( + "--global-config", + metavar="filename", + default=DEFAULT_CONFIG, + help="path to a global pep8 config file; if this file " "does not exist then this is ignored " "(default: {})".format( + DEFAULT_CONFIG + ), + ) + parser.add_argument( + "--ignore-local-config", + action="store_true", + help="don't look for and apply local config files; " + "if not passed, defaults are updated with any " + "config files in the project's root directory", + ) + parser.add_argument( + "-r", "--recursive", action="store_true", help="run recursively over directories; " "must be used with --in-place or --diff" + ) + parser.add_argument( + "-j", "--jobs", type=int, metavar="n", default=1, help="number of parallel jobs; " "match CPU count if value is less than 1" + ) + parser.add_argument( + "-p", "--pep8-passes", metavar="n", default=-1, type=int, help="maximum number of additional pep8 passes " "(default: infinite)" + ) + parser.add_argument( + "-a", + "--aggressive", + action="count", + default=0, + help="enable non-whitespace changes; " "multiple -a result in more aggressive changes", + ) + parser.add_argument("--experimental", action="store_true", help="enable experimental fixes") + parser.add_argument("--exclude", metavar="globs", help="exclude file/directory names that match these " "comma-separated globs") + parser.add_argument("--list-fixes", action="store_true", help="list codes for fixes; " "used by --ignore and --select") + parser.add_argument( + "--ignore", metavar="errors", default="", help="do not fix these errors/warnings " "(default: {})".format(DEFAULT_IGNORE) + ) + parser.add_argument("--select", metavar="errors", default="", help="fix only these errors/warnings (e.g. E4,W)") + parser.add_argument( + "--max-line-length", metavar="n", default=79, type=int, help="set maximum allowed line length " "(default: %(default)s)" + ) + parser.add_argument( + "--line-range", + "--range", + metavar="line", + default=None, + type=int, + nargs=2, + help="only fix errors found within this inclusive " "range of line numbers (e.g. 1 99); " "line numbers are indexed at 1", + ) + parser.add_argument("--indent-size", default=DEFAULT_INDENT_SIZE, type=int, help=argparse.SUPPRESS) + parser.add_argument("--hang-closing", action="store_true", help="hang-closing option passed to pycodestyle") + parser.add_argument( + "--exit-code", + action="store_true", + help="change to behavior of exit code." + " default behavior of return value, 0 is no " + "differences, 1 is error exit. return 2 when" + " add this option. 2 is exists differences.", + ) + parser.add_argument("files", nargs="*", help="files to format or '-' for standard in") + + return parser + + +def _expand_codes(codes, ignore_codes): + """expand to individual E/W codes""" + ret = set() + + is_conflict = False + if all(any(conflicting_code.startswith(code) for code in codes) for conflicting_code in CONFLICTING_CODES): + is_conflict = True + + is_ignore_w503 = "W503" in ignore_codes + is_ignore_w504 = "W504" in ignore_codes + + for code in codes: + if code == "W": + if is_ignore_w503 and is_ignore_w504: + ret.update({"W1", "W2", "W3", "W505", "W6"}) + elif is_ignore_w503: + ret.update({"W1", "W2", "W3", "W504", "W505", "W6"}) + else: + ret.update({"W1", "W2", "W3", "W503", "W505", "W6"}) + elif code in ("W5", "W50"): + if is_ignore_w503 and is_ignore_w504: + ret.update({"W505"}) + elif is_ignore_w503: + ret.update({"W504", "W505"}) + else: + ret.update({"W503", "W505"}) + elif not (code in ("W503", "W504") and is_conflict): + ret.add(code) + + return ret + + +def parse_args(arguments, apply_config=False): + """Parse command-line options.""" + parser = create_parser() + args = parser.parse_args(arguments) + + if not args.files and not args.list_fixes: + parser.exit(EXIT_CODE_ARGPARSE_ERROR, "incorrect number of arguments") + + args.files = [decode_filename(name) for name in args.files] + + if apply_config: + parser = read_config(args, parser) + # prioritize settings when exist pyproject.toml's tool.autopep8 section + try: + parser_with_pyproject_toml = read_pyproject_toml(args, parser) + except Exception: + parser_with_pyproject_toml = None + if parser_with_pyproject_toml: + parser = parser_with_pyproject_toml + args = parser.parse_args(arguments) + args.files = [decode_filename(name) for name in args.files] + + if "-" in args.files: + if len(args.files) > 1: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "cannot mix stdin and regular files", + ) + + if args.diff: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--diff cannot be used with standard input", + ) + + if args.in_place: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--in-place cannot be used with standard input", + ) + + if args.recursive: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--recursive cannot be used with standard input", + ) + + if len(args.files) > 1 and not (args.in_place or args.diff): + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "autopep8 only takes one filename as argument " 'unless the "--in-place" or "--diff" args are used', + ) + + if args.recursive and not (args.in_place or args.diff): + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--recursive must be used with --in-place or --diff", + ) + + if args.in_place and args.diff: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--in-place and --diff are mutually exclusive", + ) + + if args.max_line_length <= 0: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--max-line-length must be greater than 0", + ) + + if args.indent_size <= 0: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--indent-size must be greater than 0", + ) + + if args.select: + args.select = _expand_codes(_split_comma_separated(args.select), (_split_comma_separated(args.ignore) if args.ignore else [])) + + if args.ignore: + args.ignore = _split_comma_separated(args.ignore) + if all(not any(conflicting_code.startswith(ignore_code) for ignore_code in args.ignore) for conflicting_code in CONFLICTING_CODES): + args.ignore.update(CONFLICTING_CODES) + elif not args.select: + if args.aggressive: + # Enable everything by default if aggressive. + args.select = {"E", "W1", "W2", "W3", "W6"} + else: + args.ignore = _split_comma_separated(DEFAULT_IGNORE) + + if args.exclude: + args.exclude = _split_comma_separated(args.exclude) + else: + args.exclude = {} + + if args.jobs < 1: + # Do not import multiprocessing globally in case it is not supported + # on the platform. + import multiprocessing + + args.jobs = multiprocessing.cpu_count() + + if args.jobs > 1 and not (args.in_place or args.diff): + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "parallel jobs requires --in-place", + ) + + if args.line_range: + if args.line_range[0] <= 0: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "--range must be positive numbers", + ) + if args.line_range[0] > args.line_range[1]: + parser.exit( + EXIT_CODE_ARGPARSE_ERROR, + "First value of --range should be less than or equal " "to the second", + ) + + return args + + +def _get_normalize_options(config, section, option_list): + for k, _ in config.items(section): + norm_opt = k.lstrip("-").replace("-", "_") + if not option_list.get(norm_opt): + continue + opt_type = option_list[norm_opt] + if opt_type is int: + value = config.getint(section, k) + elif opt_type is bool: + value = config.getboolean(section, k) + else: + value = config.get(section, k) + yield norm_opt, k, value + + +def read_config(args, parser): + """Read both user configuration and local configuration.""" + config = SafeConfigParser() + + try: + if args.verbose and os.path.exists(args.global_config): + print("read config path: {}".format(args.global_config)) + config.read(args.global_config) + + if not args.ignore_local_config: + parent = tail = args.files and os.path.abspath(os.path.commonprefix(args.files)) + while tail: + if config.read([os.path.join(parent, fn) for fn in PROJECT_CONFIG]): + if args.verbose: + for fn in PROJECT_CONFIG: + config_file = os.path.join(parent, fn) + if not os.path.exists(config_file): + continue + print("read config path: {}".format(os.path.join(parent, fn))) + break + (parent, tail) = os.path.split(parent) + + defaults = {} + option_list = {o.dest: o.type or type(o.default) for o in parser._actions} + + for section in ["pep8", "pycodestyle", "flake8"]: + if not config.has_section(section): + continue + for norm_opt, k, value in _get_normalize_options(config, section, option_list): + if args.verbose: + print("enable config: section={}, key={}, value={}".format(section, k, value)) + defaults[norm_opt] = value + + parser.set_defaults(**defaults) + except Error: + # Ignore for now. + pass + + return parser + + +def read_pyproject_toml(args, parser): + """Read pyproject.toml and load configuration.""" + import toml + + config = None + + if os.path.exists(args.global_config): + with open(args.global_config) as fp: + config = toml.load(fp) + + if not args.ignore_local_config: + parent = tail = args.files and os.path.abspath(os.path.commonprefix(args.files)) + while tail: + pyproject_toml = os.path.join(parent, "pyproject.toml") + if os.path.exists(pyproject_toml): + with open(pyproject_toml) as fp: + config = toml.load(fp) + break + (parent, tail) = os.path.split(parent) + + if not config: + return None + + if config.get("tool", {}).get("autopep8") is None: + return None + + config = config.get("tool").get("autopep8") + + defaults = {} + option_list = {o.dest: o.type or type(o.default) for o in parser._actions} + + TUPLED_OPTIONS = ("ignore", "select") + for k, v in config.items(): + norm_opt = k.lstrip("-").replace("-", "_") + if not option_list.get(norm_opt): + continue + if type(v) in (list, tuple) and norm_opt in TUPLED_OPTIONS: + value = ",".join(v) + else: + value = v + if args.verbose: + print("enable pyproject.toml config: " "key={}, value={}".format(k, value)) + defaults[norm_opt] = value + + if defaults: + # set value when exists key-value in defaults dict + parser.set_defaults(**defaults) + + return parser + + +def _split_comma_separated(string): + """Return a set of strings.""" + return {text.strip() for text in string.split(",") if text.strip()} + + +def decode_filename(filename): + """Return Unicode filename.""" + if isinstance(filename, unicode): + return filename + + return filename.decode(sys.getfilesystemencoding()) + + +def supported_fixes(): + """Yield pep8 error codes that autopep8 fixes. + + Each item we yield is a tuple of the code followed by its + description. + + """ + yield ("E101", docstring_summary(reindent.__doc__)) + + instance = FixPEP8(filename=None, options=None, contents="") + for attribute in dir(instance): + code = re.match("fix_([ew][0-9][0-9][0-9])", attribute) + if code: + yield (code.group(1).upper(), re.sub(r"\s+", " ", docstring_summary(getattr(instance, attribute).__doc__))) + + for code, function in sorted(global_fixes()): + yield (code.upper() + (4 - len(code)) * " ", re.sub(r"\s+", " ", docstring_summary(function.__doc__))) + + for code in sorted(CODE_TO_2TO3): + yield (code.upper() + (4 - len(code)) * " ", re.sub(r"\s+", " ", docstring_summary(fix_2to3.__doc__))) + + +def docstring_summary(docstring): + """Return summary of docstring.""" + return docstring.split("\n")[0] if docstring else "" + + +def line_shortening_rank(candidate, indent_word, max_line_length, experimental=False): + """Return rank of candidate. + + This is for sorting candidates. + + """ + if not candidate.strip(): + return 0 + + rank = 0 + lines = candidate.rstrip().split("\n") + + offset = 0 + if not lines[0].lstrip().startswith("#") and lines[0].rstrip()[-1] not in "([{": + for opening, closing in ("()", "[]", "{}"): + # Don't penalize empty containers that aren't split up. Things like + # this "foo(\n )" aren't particularly good. + opening_loc = lines[0].find(opening) + closing_loc = lines[0].find(closing) + if opening_loc >= 0: + if closing_loc < 0 or closing_loc != opening_loc + 1: + offset = max(offset, 1 + opening_loc) + + current_longest = max(offset + len(x.strip()) for x in lines) + + rank += 4 * max(0, current_longest - max_line_length) + + rank += len(lines) + + # Too much variation in line length is ugly. + rank += 2 * standard_deviation(len(line) for line in lines) + + bad_staring_symbol = {"(": ")", "[": "]", "{": "}"}.get(lines[0][-1]) + + if len(lines) > 1: + if bad_staring_symbol and lines[1].lstrip().startswith(bad_staring_symbol): + rank += 20 + + for lineno, current_line in enumerate(lines): + current_line = current_line.strip() + + if current_line.startswith("#"): + continue + + for bad_start in [".", "%", "+", "-", "/"]: + if current_line.startswith(bad_start): + rank += 100 + + # Do not tolerate operators on their own line. + if current_line == bad_start: + rank += 1000 + + if current_line.endswith((".", "%", "+", "-", "/")) and "': " in current_line: + rank += 1000 + + if current_line.endswith(("(", "[", "{", ".")): + # Avoid lonely opening. They result in longer lines. + if len(current_line) <= len(indent_word): + rank += 100 + + # Avoid the ugliness of ", (\n". + if current_line.endswith("(") and current_line[:-1].rstrip().endswith(","): + rank += 100 + + # Avoid the ugliness of "something[\n" and something[index][\n. + if current_line.endswith("[") and len(current_line) > 1 and (current_line[-2].isalnum() or current_line[-2] in "]"): + rank += 300 + + # Also avoid the ugliness of "foo.\nbar" + if current_line.endswith("."): + rank += 100 + + if has_arithmetic_operator(current_line): + rank += 100 + + # Avoid breaking at unary operators. + if re.match(r".*[(\[{]\s*[\-\+~]$", current_line.rstrip("\\ ")): + rank += 1000 + + if re.match(r".*lambda\s*\*$", current_line.rstrip("\\ ")): + rank += 1000 + + if current_line.endswith(("%", "(", "[", "{")): + rank -= 20 + + # Try to break list comprehensions at the "for". + if current_line.startswith("for "): + rank -= 50 + + if current_line.endswith("\\"): + # If a line ends in \-newline, it may be part of a + # multiline string. In that case, we would like to know + # how long that line is without the \-newline. If it's + # longer than the maximum, or has comments, then we assume + # that the \-newline is an okay candidate and only + # penalize it a bit. + total_len = len(current_line) + lineno += 1 + while lineno < len(lines): + total_len += len(lines[lineno]) + + if lines[lineno].lstrip().startswith("#"): + total_len = max_line_length + break + + if not lines[lineno].endswith("\\"): + break + + lineno += 1 + + if total_len < max_line_length: + rank += 10 + else: + rank += 100 if experimental else 1 + + # Prefer breaking at commas rather than colon. + if "," in current_line and current_line.endswith(":"): + rank += 10 + + # Avoid splitting dictionaries between key and value. + if current_line.endswith(":"): + rank += 100 + + rank += 10 * count_unbalanced_brackets(current_line) + + return max(0, rank) + + +def standard_deviation(numbers): + """Return standard deviation.""" + numbers = list(numbers) + if not numbers: + return 0 + mean = sum(numbers) / len(numbers) + return (sum((n - mean) ** 2 for n in numbers) / len(numbers)) ** 0.5 + + +def has_arithmetic_operator(line): + """Return True if line contains any arithmetic operators.""" + for operator in pycodestyle.ARITHMETIC_OP: + if operator in line: + return True + + return False + + +def count_unbalanced_brackets(line): + """Return number of unmatched open/close brackets.""" + count = 0 + for opening, closing in ["()", "[]", "{}"]: + count += abs(line.count(opening) - line.count(closing)) + + return count + + +def split_at_offsets(line, offsets): + """Split line at offsets. + + Return list of strings. + + """ + result = [] + + previous_offset = 0 + current_offset = 0 + for current_offset in sorted(offsets): + if current_offset < len(line) and previous_offset != current_offset: + result.append(line[previous_offset:current_offset].strip()) + previous_offset = current_offset + + result.append(line[current_offset:]) + + return result + + +class LineEndingWrapper(object): + + r"""Replace line endings to work with sys.stdout. + + It seems that sys.stdout expects only '\n' as the line ending, no matter + the platform. Otherwise, we get repeated line endings. + + """ + + def __init__(self, output): + self.__output = output + + def write(self, s): + self.__output.write(s.replace("\r\n", "\n").replace("\r", "\n")) + + def flush(self): + self.__output.flush() + + +def match_file(filename, exclude): + """Return True if file is okay for modifying/recursing.""" + base_name = os.path.basename(filename) + + if base_name.startswith("."): + return False + + for pattern in exclude: + if fnmatch.fnmatch(base_name, pattern): + return False + if fnmatch.fnmatch(filename, pattern): + return False + + if not os.path.isdir(filename) and not is_python_file(filename): + return False + + return True + + +def find_files(filenames, recursive, exclude): + """Yield filenames.""" + while filenames: + name = filenames.pop(0) + if recursive and os.path.isdir(name): + for root, directories, children in os.walk(name): + filenames += [os.path.join(root, f) for f in children if match_file(os.path.join(root, f), exclude)] + directories[:] = [d for d in directories if match_file(os.path.join(root, d), exclude)] + else: + is_exclude_match = False + for pattern in exclude: + if fnmatch.fnmatch(name, pattern): + is_exclude_match = True + break + if not is_exclude_match: + yield name + + +def _fix_file(parameters): + """Helper function for optionally running fix_file() in parallel.""" + if parameters[1].verbose: + print("[file:{}]".format(parameters[0]), file=sys.stderr) + try: + return fix_file(*parameters) + except IOError as error: + print(unicode(error), file=sys.stderr) + raise error + + +def fix_multiple_files(filenames, options, output=None): + """Fix list of files. + + Optionally fix files recursively. + + """ + results = [] + filenames = find_files(filenames, options.recursive, options.exclude) + if options.jobs > 1: + import multiprocessing + + pool = multiprocessing.Pool(options.jobs) + rets = [] + for name in filenames: + ret = pool.apply_async(_fix_file, ((name, options),)) + rets.append(ret) + pool.close() + pool.join() + if options.diff: + for r in rets: + sys.stdout.write(r.get().decode()) + sys.stdout.flush() + results.extend([x.get() for x in rets if x is not None]) + else: + for name in filenames: + ret = _fix_file((name, options, output)) + if ret is None: + continue + if options.diff: + if ret != "": + results.append(ret) + elif options.in_place: + results.append(ret) + else: + original_source = readlines_from_file(name) + if "".join(original_source).splitlines() != ret.splitlines(): + results.append(ret) + return results + + +def is_python_file(filename): + """Return True if filename is Python file.""" + if filename.endswith(".py"): + return True + + try: + with open_with_encoding(filename, limit_byte_check=MAX_PYTHON_FILE_DETECTION_BYTES) as f: + text = f.read(MAX_PYTHON_FILE_DETECTION_BYTES) + if not text: + return False + first_line = text.splitlines()[0] + except (IOError, IndexError): + return False + + if not PYTHON_SHEBANG_REGEX.match(first_line): + return False + + return True + + +def is_probably_part_of_multiline(line): + """Return True if line is likely part of a multiline string. + + When multiline strings are involved, pep8 reports the error as being + at the start of the multiline string, which doesn't work for us. + + """ + return '"""' in line or "'''" in line or line.rstrip().endswith("\\") + + +def wrap_output(output, encoding): + """Return output with specified encoding.""" + return codecs.getwriter(encoding)(output.buffer if hasattr(output, "buffer") else output) + + +def get_encoding(): + """Return preferred encoding.""" + return locale.getpreferredencoding() or sys.getdefaultencoding() + + +def main(argv=None, apply_config=True): + """Command-line entry.""" + if argv is None: + argv = sys.argv + + try: + # Exit on broken pipe. + signal.signal(signal.SIGPIPE, signal.SIG_DFL) + except AttributeError: # pragma: no cover + # SIGPIPE is not available on Windows. + pass + + try: + args = parse_args(argv[1:], apply_config=apply_config) + + if args.list_fixes: + for code, description in sorted(supported_fixes()): + print("{code} - {description}".format(code=code, description=description)) + return EXIT_CODE_OK + + if args.files == ["-"]: + assert not args.in_place + + encoding = sys.stdin.encoding or get_encoding() + read_stdin = sys.stdin.read() + fixed_stdin = fix_code(read_stdin, args, encoding=encoding) + + # LineEndingWrapper is unnecessary here due to the symmetry between + # standard in and standard out. + wrap_output(sys.stdout, encoding=encoding).write(fixed_stdin) + + if hash(read_stdin) != hash(fixed_stdin): + if args.exit_code: + return EXIT_CODE_EXISTS_DIFF + else: + if args.in_place or args.diff: + args.files = list(set(args.files)) + else: + assert len(args.files) == 1 + assert not args.recursive + + results = fix_multiple_files(args.files, args, sys.stdout) + if args.diff: + ret = any([len(ret) != 0 for ret in results]) + else: + # with in-place option + ret = any([ret is not None for ret in results]) + if args.exit_code and ret: + return EXIT_CODE_EXISTS_DIFF + except IOError: + return EXIT_CODE_ERROR + except KeyboardInterrupt: + return EXIT_CODE_ERROR # pragma: no cover + + +class CachedTokenizer(object): + + """A one-element cache around tokenize.generate_tokens(). + + Original code written by Ned Batchelder, in coverage.py. + + """ + + def __init__(self): + self.last_text = None + self.last_tokens = None + + def generate_tokens(self, text): + """A stand-in for tokenize.generate_tokens().""" + if text != self.last_text: + string_io = io.StringIO(text) + self.last_tokens = list(tokenize.generate_tokens(string_io.readline)) + self.last_text = text + return self.last_tokens + + +_cached_tokenizer = CachedTokenizer() +generate_tokens = _cached_tokenizer.generate_tokens + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/debugpy/_vendored/pydevd/third_party/pep8/pycodestyle.py b/src/debugpy/_vendored/pydevd/third_party/pep8/pycodestyle.py new file mode 100644 index 000000000..97a1f9a38 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/third_party/pep8/pycodestyle.py @@ -0,0 +1,2313 @@ +#!/usr/bin/env python +# pycodestyle.py - Check Python source code formatting, according to PEP 8 +# +# Copyright (C) 2006-2009 Johann C. Rocholl +# Copyright (C) 2009-2014 Florent Xicluna +# Copyright (C) 2014-2016 Ian Lee +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +r""" +Check Python source code formatting, according to PEP 8. + +For usage and a list of options, try this: +$ python pycodestyle.py -h + +This program and its regression test suite live here: +https://github.com/pycqa/pycodestyle + +Groups of errors and warnings: +E errors +W warnings +100 indentation +200 whitespace +300 blank lines +400 imports +500 line length +600 deprecation +700 statements +900 syntax error +""" +from __future__ import with_statement + +import inspect +import keyword +import os +import re +import sys +import time +import tokenize +import warnings + +from fnmatch import fnmatch +from optparse import OptionParser + +try: + from configparser import RawConfigParser + from io import TextIOWrapper +except ImportError: + from ConfigParser import RawConfigParser + +__version__ = "2.3.1" + +DEFAULT_EXCLUDE = ".svn,CVS,.bzr,.hg,.git,__pycache__,.tox" +DEFAULT_IGNORE = "E121,E123,E126,E226,E24,E704,W503" +try: + if sys.platform == "win32": + USER_CONFIG = os.path.expanduser(r"~\.pycodestyle") + else: + USER_CONFIG = os.path.join(os.getenv("XDG_CONFIG_HOME") or os.path.expanduser("~/.config"), "pycodestyle") +except ImportError: + USER_CONFIG = None + +PROJECT_CONFIG = ("setup.cfg", "tox.ini") +TESTSUITE_PATH = os.path.join(os.path.dirname(__file__), "testsuite") +MAX_LINE_LENGTH = 79 +REPORT_FORMAT = { + "default": "%(path)s:%(row)d:%(col)d: %(code)s %(text)s", + "pylint": "%(path)s:%(row)d: [%(code)s] %(text)s", +} + +PyCF_ONLY_AST = 1024 +SINGLETONS = frozenset(["False", "None", "True"]) +KEYWORDS = frozenset(keyword.kwlist + ["print"]) - SINGLETONS +UNARY_OPERATORS = frozenset([">>", "**", "*", "+", "-"]) +ARITHMETIC_OP = frozenset(["**", "*", "/", "//", "+", "-"]) +WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(["^", "&", "|", "<<", ">>", "%"]) +WS_NEEDED_OPERATORS = frozenset( + ["**=", "*=", "/=", "//=", "+=", "-=", "!=", "<>", "<", ">", "%=", "^=", "&=", "|=", "==", "<=", ">=", "<<=", ">>=", "="] +) +WHITESPACE = frozenset(" \t") +NEWLINE = frozenset([tokenize.NL, tokenize.NEWLINE]) +SKIP_TOKENS = NEWLINE.union([tokenize.INDENT, tokenize.DEDENT]) +# ERRORTOKEN is triggered by backticks in Python 3 +SKIP_COMMENTS = SKIP_TOKENS.union([tokenize.COMMENT, tokenize.ERRORTOKEN]) +BENCHMARK_KEYS = ["directories", "files", "logical lines", "physical lines"] + +INDENT_REGEX = re.compile(r"([ \t]*)") +RAISE_COMMA_REGEX = re.compile(r"raise\s+\w+\s*,") +RERAISE_COMMA_REGEX = re.compile(r"raise\s+\w+\s*,.*,\s*\w+\s*$") +ERRORCODE_REGEX = re.compile(r"\b[A-Z]\d{3}\b") +DOCSTRING_REGEX = re.compile(r'u?r?["\']') +EXTRANEOUS_WHITESPACE_REGEX = re.compile(r"[[({] | []}),;:]") +WHITESPACE_AFTER_COMMA_REGEX = re.compile(r"[,;:]\s*(?: |\t)") +COMPARE_SINGLETON_REGEX = re.compile(r"(\bNone|\bFalse|\bTrue)?\s*([=!]=)" r"\s*(?(1)|(None|False|True))\b") +COMPARE_NEGATIVE_REGEX = re.compile(r"\b(not)\s+[^][)(}{ ]+\s+(in|is)\s") +COMPARE_TYPE_REGEX = re.compile(r"(?:[=!]=|is(?:\s+not)?)\s*type(?:s.\w+Type" r"|\s*\(\s*([^)]*[^ )])\s*\))") +KEYWORD_REGEX = re.compile(r"(\s*)\b(?:%s)\b(\s*)" % r"|".join(KEYWORDS)) +OPERATOR_REGEX = re.compile(r"(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)") +LAMBDA_REGEX = re.compile(r"\blambda\b") +HUNK_REGEX = re.compile(r"^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$") +STARTSWITH_DEF_REGEX = re.compile(r"^(async\s+def|def)") +STARTSWITH_TOP_LEVEL_REGEX = re.compile(r"^(async\s+def\s+|def\s+|class\s+|@)") +STARTSWITH_INDENT_STATEMENT_REGEX = re.compile( + r"^\s*({0})".format( + "|".join( + s.replace(" ", "\s+") + for s in ( + "def", + "async def", + "for", + "async for", + "if", + "elif", + "else", + "try", + "except", + "finally", + "with", + "async with", + "class", + "while", + ) + ) + ) +) +DUNDER_REGEX = re.compile(r"^__([^\s]+)__ = ") + +# Work around Python < 2.6 behaviour, which does not generate NL after +# a comment which is on a line by itself. +COMMENT_WITH_NL = tokenize.generate_tokens(["#\n"].pop).send(None)[1] == "#\n" + + +############################################################################## +# Plugins (check functions) for physical lines +############################################################################## + + +def tabs_or_spaces(physical_line, indent_char): + r"""Never mix tabs and spaces. + + The most popular way of indenting Python is with spaces only. The + second-most popular way is with tabs only. Code indented with a mixture + of tabs and spaces should be converted to using spaces exclusively. When + invoking the Python command line interpreter with the -t option, it issues + warnings about code that illegally mixes tabs and spaces. When using -tt + these warnings become errors. These options are highly recommended! + + Okay: if a == 0:\n a = 1\n b = 1 + E101: if a == 0:\n a = 1\n\tb = 1 + """ + indent = INDENT_REGEX.match(physical_line).group(1) + for offset, char in enumerate(indent): + if char != indent_char: + return offset, "E101 indentation contains mixed spaces and tabs" + + +def tabs_obsolete(physical_line): + r"""For new projects, spaces-only are strongly recommended over tabs. + + Okay: if True:\n return + W191: if True:\n\treturn + """ + indent = INDENT_REGEX.match(physical_line).group(1) + if "\t" in indent: + return indent.index("\t"), "W191 indentation contains tabs" + + +def trailing_whitespace(physical_line): + r"""Trailing whitespace is superfluous. + + The warning returned varies on whether the line itself is blank, for easier + filtering for those who want to indent their blank lines. + + Okay: spam(1)\n# + W291: spam(1) \n# + W293: class Foo(object):\n \n bang = 12 + """ + physical_line = physical_line.rstrip("\n") # chr(10), newline + physical_line = physical_line.rstrip("\r") # chr(13), carriage return + physical_line = physical_line.rstrip("\x0c") # chr(12), form feed, ^L + stripped = physical_line.rstrip(" \t\v") + if physical_line != stripped: + if stripped: + return len(stripped), "W291 trailing whitespace" + else: + return 0, "W293 blank line contains whitespace" + + +def trailing_blank_lines(physical_line, lines, line_number, total_lines): + r"""Trailing blank lines are superfluous. + + Okay: spam(1) + W391: spam(1)\n + + However the last line should end with a new line (warning W292). + """ + if line_number == total_lines: + stripped_last_line = physical_line.rstrip() + if not stripped_last_line: + return 0, "W391 blank line at end of file" + if stripped_last_line == physical_line: + return len(physical_line), "W292 no newline at end of file" + + +def maximum_line_length(physical_line, max_line_length, multiline, noqa): + r"""Limit all lines to a maximum of 79 characters. + + There are still many devices around that are limited to 80 character + lines; plus, limiting windows to 80 characters makes it possible to have + several windows side-by-side. The default wrapping on such devices looks + ugly. Therefore, please limit all lines to a maximum of 79 characters. + For flowing long blocks of text (docstrings or comments), limiting the + length to 72 characters is recommended. + + Reports error E501. + """ + line = physical_line.rstrip() + length = len(line) + if length > max_line_length and not noqa: + # Special case for long URLs in multi-line docstrings or comments, + # but still report the error when the 72 first chars are whitespaces. + chunks = line.split() + if ((len(chunks) == 1 and multiline) or (len(chunks) == 2 and chunks[0] == "#")) and len(line) - len( + chunks[-1] + ) < max_line_length - 7: + return + if hasattr(line, "decode"): # Python 2 + # The line could contain multi-byte characters + try: + length = len(line.decode("utf-8")) + except UnicodeError: + pass + if length > max_line_length: + return (max_line_length, "E501 line too long " "(%d > %d characters)" % (length, max_line_length)) + + +############################################################################## +# Plugins (check functions) for logical lines +############################################################################## + + +def blank_lines( + logical_line, + blank_lines, + indent_level, + line_number, + blank_before, + previous_logical, + previous_unindented_logical_line, + previous_indent_level, + lines, +): + r"""Separate top-level function and class definitions with two blank lines. + + Method definitions inside a class are separated by a single blank line. + + Extra blank lines may be used (sparingly) to separate groups of related + functions. Blank lines may be omitted between a bunch of related + one-liners (e.g. a set of dummy implementations). + + Use blank lines in functions, sparingly, to indicate logical sections. + + Okay: def a():\n pass\n\n\ndef b():\n pass + Okay: def a():\n pass\n\n\nasync def b():\n pass + Okay: def a():\n pass\n\n\n# Foo\n# Bar\n\ndef b():\n pass + Okay: default = 1\nfoo = 1 + Okay: classify = 1\nfoo = 1 + + E301: class Foo:\n b = 0\n def bar():\n pass + E302: def a():\n pass\n\ndef b(n):\n pass + E302: def a():\n pass\n\nasync def b(n):\n pass + E303: def a():\n pass\n\n\n\ndef b(n):\n pass + E303: def a():\n\n\n\n pass + E304: @decorator\n\ndef a():\n pass + E305: def a():\n pass\na() + E306: def a():\n def b():\n pass\n def c():\n pass + """ + if line_number < 3 and not previous_logical: + return # Don't expect blank lines before the first line + if previous_logical.startswith("@"): + if blank_lines: + yield 0, "E304 blank lines found after function decorator" + elif blank_lines > 2 or (indent_level and blank_lines == 2): + yield 0, "E303 too many blank lines (%d)" % blank_lines + elif STARTSWITH_TOP_LEVEL_REGEX.match(logical_line): + if indent_level: + if not (blank_before or previous_indent_level < indent_level or DOCSTRING_REGEX.match(previous_logical)): + ancestor_level = indent_level + nested = False + # Search backwards for a def ancestor or tree root (top level). + for line in lines[line_number - 2 :: -1]: + if line.strip() and expand_indent(line) < ancestor_level: + ancestor_level = expand_indent(line) + nested = line.lstrip().startswith("def ") + if nested or ancestor_level == 0: + break + if nested: + yield 0, "E306 expected 1 blank line before a " "nested definition, found 0" + else: + yield 0, "E301 expected 1 blank line, found 0" + elif blank_before != 2: + yield 0, "E302 expected 2 blank lines, found %d" % blank_before + elif logical_line and not indent_level and blank_before != 2 and previous_unindented_logical_line.startswith(("def ", "class ")): + yield 0, "E305 expected 2 blank lines after " "class or function definition, found %d" % blank_before + + +def extraneous_whitespace(logical_line): + r"""Avoid extraneous whitespace. + + Avoid extraneous whitespace in these situations: + - Immediately inside parentheses, brackets or braces. + - Immediately before a comma, semicolon, or colon. + + Okay: spam(ham[1], {eggs: 2}) + E201: spam( ham[1], {eggs: 2}) + E201: spam(ham[ 1], {eggs: 2}) + E201: spam(ham[1], { eggs: 2}) + E202: spam(ham[1], {eggs: 2} ) + E202: spam(ham[1 ], {eggs: 2}) + E202: spam(ham[1], {eggs: 2 }) + + E203: if x == 4: print x, y; x, y = y , x + E203: if x == 4: print x, y ; x, y = y, x + E203: if x == 4 : print x, y; x, y = y, x + """ + line = logical_line + for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line): + text = match.group() + char = text.strip() + found = match.start() + if text == char + " ": + # assert char in '([{' + yield found + 1, "E201 whitespace after '%s'" % char + elif line[found - 1] != ",": + code = "E202" if char in "}])" else "E203" # if char in ',;:' + yield found, "%s whitespace before '%s'" % (code, char) + + +def whitespace_around_keywords(logical_line): + r"""Avoid extraneous whitespace around keywords. + + Okay: True and False + E271: True and False + E272: True and False + E273: True and\tFalse + E274: True\tand False + """ + for match in KEYWORD_REGEX.finditer(logical_line): + before, after = match.groups() + + if "\t" in before: + yield match.start(1), "E274 tab before keyword" + elif len(before) > 1: + yield match.start(1), "E272 multiple spaces before keyword" + + if "\t" in after: + yield match.start(2), "E273 tab after keyword" + elif len(after) > 1: + yield match.start(2), "E271 multiple spaces after keyword" + + +def missing_whitespace_after_import_keyword(logical_line): + r"""Multiple imports in form from x import (a, b, c) should have space + between import statement and parenthesised name list. + + Okay: from foo import (bar, baz) + E275: from foo import(bar, baz) + E275: from importable.module import(bar, baz) + """ + line = logical_line + indicator = " import(" + if line.startswith("from "): + found = line.find(indicator) + if -1 < found: + pos = found + len(indicator) - 1 + yield pos, "E275 missing whitespace after keyword" + + +def missing_whitespace(logical_line): + r"""Each comma, semicolon or colon should be followed by whitespace. + + Okay: [a, b] + Okay: (3,) + Okay: a[1:4] + Okay: a[:4] + Okay: a[1:] + Okay: a[1:4:2] + E231: ['a','b'] + E231: foo(bar,baz) + E231: [{'a':'b'}] + """ + line = logical_line + for index in range(len(line) - 1): + char = line[index] + if char in ",;:" and line[index + 1] not in WHITESPACE: + before = line[:index] + if char == ":" and before.count("[") > before.count("]") and before.rfind("{") < before.rfind("["): + continue # Slice syntax, no space required + if char == "," and line[index + 1] == ")": + continue # Allow tuple with only one element: (3,) + yield index, "E231 missing whitespace after '%s'" % char + + +def indentation(logical_line, previous_logical, indent_char, indent_level, previous_indent_level): + r"""Use 4 spaces per indentation level. + + For really old code that you don't want to mess up, you can continue to + use 8-space tabs. + + Okay: a = 1 + Okay: if a == 0:\n a = 1 + E111: a = 1 + E114: # a = 1 + + Okay: for item in items:\n pass + E112: for item in items:\npass + E115: for item in items:\n# Hi\n pass + + Okay: a = 1\nb = 2 + E113: a = 1\n b = 2 + E116: a = 1\n # b = 2 + """ + c = 0 if logical_line else 3 + tmpl = "E11%d %s" if logical_line else "E11%d %s (comment)" + if indent_level % 4: + yield 0, tmpl % (1 + c, "indentation is not a multiple of four") + indent_expect = previous_logical.endswith(":") + if indent_expect and indent_level <= previous_indent_level: + yield 0, tmpl % (2 + c, "expected an indented block") + elif not indent_expect and indent_level > previous_indent_level: + yield 0, tmpl % (3 + c, "unexpected indentation") + + +def continued_indentation(logical_line, tokens, indent_level, hang_closing, indent_char, noqa, verbose): + r"""Continuation lines indentation. + + Continuation lines should align wrapped elements either vertically + using Python's implicit line joining inside parentheses, brackets + and braces, or using a hanging indent. + + When using a hanging indent these considerations should be applied: + - there should be no arguments on the first line, and + - further indentation should be used to clearly distinguish itself as a + continuation line. + + Okay: a = (\n) + E123: a = (\n ) + + Okay: a = (\n 42) + E121: a = (\n 42) + E122: a = (\n42) + E123: a = (\n 42\n ) + E124: a = (24,\n 42\n) + E125: if (\n b):\n pass + E126: a = (\n 42) + E127: a = (24,\n 42) + E128: a = (24,\n 42) + E129: if (a or\n b):\n pass + E131: a = (\n 42\n 24) + """ + first_row = tokens[0][2][0] + nrows = 1 + tokens[-1][2][0] - first_row + if noqa or nrows == 1: + return + + # indent_next tells us whether the next block is indented; assuming + # that it is indented by 4 spaces, then we should not allow 4-space + # indents on the final continuation line; in turn, some other + # indents are allowed to have an extra 4 spaces. + indent_next = logical_line.endswith(":") + + row = depth = 0 + valid_hangs = (4,) if indent_char != "\t" else (4, 8) + # remember how many brackets were opened on each line + parens = [0] * nrows + # relative indents of physical lines + rel_indent = [0] * nrows + # for each depth, collect a list of opening rows + open_rows = [[0]] + # for each depth, memorize the hanging indentation + hangs = [None] + # visual indents + indent_chances = {} + last_indent = tokens[0][2] + visual_indent = None + last_token_multiline = False + # for each depth, memorize the visual indent column + indent = [last_indent[1]] + if verbose >= 3: + print(">>> " + tokens[0][4].rstrip()) + + for token_type, text, start, end, line in tokens: + newline = row < start[0] - first_row + if newline: + row = start[0] - first_row + newline = not last_token_multiline and token_type not in NEWLINE + + if newline: + # this is the beginning of a continuation line. + last_indent = start + if verbose >= 3: + print("... " + line.rstrip()) + + # record the initial indent. + rel_indent[row] = expand_indent(line) - indent_level + + # identify closing bracket + close_bracket = token_type == tokenize.OP and text in "]})" + + # is the indent relative to an opening bracket line? + for open_row in reversed(open_rows[depth]): + hang = rel_indent[row] - rel_indent[open_row] + hanging_indent = hang in valid_hangs + if hanging_indent: + break + if hangs[depth]: + hanging_indent = hang == hangs[depth] + # is there any chance of visual indent? + visual_indent = not close_bracket and hang > 0 and indent_chances.get(start[1]) + + if close_bracket and indent[depth]: + # closing bracket for visual indent + if start[1] != indent[depth]: + yield (start, "E124 closing bracket does not match " "visual indentation") + elif close_bracket and not hang: + # closing bracket matches indentation of opening bracket's line + if hang_closing: + yield start, "E133 closing bracket is missing indentation" + elif indent[depth] and start[1] < indent[depth]: + if visual_indent is not True: + # visual indent is broken + yield (start, "E128 continuation line " "under-indented for visual indent") + elif hanging_indent or (indent_next and rel_indent[row] == 8): + # hanging indent is verified + if close_bracket and not hang_closing: + yield (start, "E123 closing bracket does not match " "indentation of opening bracket's line") + hangs[depth] = hang + elif visual_indent is True: + # visual indent is verified + indent[depth] = start[1] + elif visual_indent in (text, str): + # ignore token lined up with matching one from a previous line + pass + else: + # indent is broken + if hang <= 0: + error = "E122", "missing indentation or outdented" + elif indent[depth]: + error = "E127", "over-indented for visual indent" + elif not close_bracket and hangs[depth]: + error = "E131", "unaligned for hanging indent" + else: + hangs[depth] = hang + if hang > 4: + error = "E126", "over-indented for hanging indent" + else: + error = "E121", "under-indented for hanging indent" + yield start, "%s continuation line %s" % error + + # look for visual indenting + if parens[row] and token_type not in (tokenize.NL, tokenize.COMMENT) and not indent[depth]: + indent[depth] = start[1] + indent_chances[start[1]] = True + if verbose >= 4: + print("bracket depth %s indent to %s" % (depth, start[1])) + # deal with implicit string concatenation + elif token_type in (tokenize.STRING, tokenize.COMMENT) or text in ("u", "ur", "b", "br"): + indent_chances[start[1]] = str + # special case for the "if" statement because len("if (") == 4 + elif not indent_chances and not row and not depth and text == "if": + indent_chances[end[1] + 1] = True + elif text == ":" and line[end[1] :].isspace(): + open_rows[depth].append(row) + + # keep track of bracket depth + if token_type == tokenize.OP: + if text in "([{": + depth += 1 + indent.append(0) + hangs.append(None) + if len(open_rows) == depth: + open_rows.append([]) + open_rows[depth].append(row) + parens[row] += 1 + if verbose >= 4: + print("bracket depth %s seen, col %s, visual min = %s" % (depth, start[1], indent[depth])) + elif text in ")]}" and depth > 0: + # parent indents should not be more than this one + prev_indent = indent.pop() or last_indent[1] + hangs.pop() + for d in range(depth): + if indent[d] > prev_indent: + indent[d] = 0 + for ind in list(indent_chances): + if ind >= prev_indent: + del indent_chances[ind] + del open_rows[depth + 1 :] + depth -= 1 + if depth: + indent_chances[indent[depth]] = True + for idx in range(row, -1, -1): + if parens[idx]: + parens[idx] -= 1 + break + assert len(indent) == depth + 1 + if start[1] not in indent_chances: + # allow lining up tokens + indent_chances[start[1]] = text + + last_token_multiline = start[0] != end[0] + if last_token_multiline: + rel_indent[end[0] - first_row] = rel_indent[row] + + if indent_next and expand_indent(line) == indent_level + 4: + pos = (start[0], indent[0] + 4) + if visual_indent: + code = "E129 visually indented line" + else: + code = "E125 continuation line" + yield pos, "%s with same indent as next logical line" % code + + +def whitespace_before_parameters(logical_line, tokens): + r"""Avoid extraneous whitespace. + + Avoid extraneous whitespace in the following situations: + - before the open parenthesis that starts the argument list of a + function call. + - before the open parenthesis that starts an indexing or slicing. + + Okay: spam(1) + E211: spam (1) + + Okay: dict['key'] = list[index] + E211: dict ['key'] = list[index] + E211: dict['key'] = list [index] + """ + prev_type, prev_text, __, prev_end, __ = tokens[0] + for index in range(1, len(tokens)): + token_type, text, start, end, __ = tokens[index] + if ( + token_type == tokenize.OP + and text in "([" + and start != prev_end + and (prev_type == tokenize.NAME or prev_text in "}])") + and + # Syntax "class A (B):" is allowed, but avoid it + (index < 2 or tokens[index - 2][1] != "class") + and + # Allow "return (a.foo for a in range(5))" + not keyword.iskeyword(prev_text) + ): + yield prev_end, "E211 whitespace before '%s'" % text + prev_type = token_type + prev_text = text + prev_end = end + + +def whitespace_around_operator(logical_line): + r"""Avoid extraneous whitespace around an operator. + + Okay: a = 12 + 3 + E221: a = 4 + 5 + E222: a = 4 + 5 + E223: a = 4\t+ 5 + E224: a = 4 +\t5 + """ + for match in OPERATOR_REGEX.finditer(logical_line): + before, after = match.groups() + + if "\t" in before: + yield match.start(1), "E223 tab before operator" + elif len(before) > 1: + yield match.start(1), "E221 multiple spaces before operator" + + if "\t" in after: + yield match.start(2), "E224 tab after operator" + elif len(after) > 1: + yield match.start(2), "E222 multiple spaces after operator" + + +def missing_whitespace_around_operator(logical_line, tokens): + r"""Surround operators with a single space on either side. + + - Always surround these binary operators with a single space on + either side: assignment (=), augmented assignment (+=, -= etc.), + comparisons (==, <, >, !=, <=, >=, in, not in, is, is not), + Booleans (and, or, not). + + - If operators with different priorities are used, consider adding + whitespace around the operators with the lowest priorities. + + Okay: i = i + 1 + Okay: submitted += 1 + Okay: x = x * 2 - 1 + Okay: hypot2 = x * x + y * y + Okay: c = (a + b) * (a - b) + Okay: foo(bar, key='word', *args, **kwargs) + Okay: alpha[:-i] + + E225: i=i+1 + E225: submitted +=1 + E225: x = x /2 - 1 + E225: z = x **y + E226: c = (a+b) * (a-b) + E226: hypot2 = x*x + y*y + E227: c = a|b + E228: msg = fmt%(errno, errmsg) + """ + parens = 0 + need_space = False + prev_type = tokenize.OP + prev_text = prev_end = None + for token_type, text, start, end, line in tokens: + if token_type in SKIP_COMMENTS: + continue + if text in ("(", "lambda"): + parens += 1 + elif text == ")": + parens -= 1 + if need_space: + if start != prev_end: + # Found a (probably) needed space + if need_space is not True and not need_space[1]: + yield (need_space[0], "E225 missing whitespace around operator") + need_space = False + elif text == ">" and prev_text in ("<", "-"): + # Tolerate the "<>" operator, even if running Python 3 + # Deal with Python 3's annotated return value "->" + pass + else: + if need_space is True or need_space[1]: + # A needed trailing space was not found + yield prev_end, "E225 missing whitespace around operator" + elif prev_text != "**": + code, optype = "E226", "arithmetic" + if prev_text == "%": + code, optype = "E228", "modulo" + elif prev_text not in ARITHMETIC_OP: + code, optype = "E227", "bitwise or shift" + yield (need_space[0], "%s missing whitespace " "around %s operator" % (code, optype)) + need_space = False + elif token_type == tokenize.OP and prev_end is not None: + if text == "=" and parens: + # Allow keyword args or defaults: foo(bar=None). + pass + elif text in WS_NEEDED_OPERATORS: + need_space = True + elif text in UNARY_OPERATORS: + # Check if the operator is being used as a binary operator + # Allow unary operators: -123, -x, +1. + # Allow argument unpacking: foo(*args, **kwargs). + if prev_text in "}])" if prev_type == tokenize.OP else prev_text not in KEYWORDS: + need_space = None + elif text in WS_OPTIONAL_OPERATORS: + need_space = None + + if need_space is None: + # Surrounding space is optional, but ensure that + # trailing space matches opening space + need_space = (prev_end, start != prev_end) + elif need_space and start == prev_end: + # A needed opening space was not found + yield prev_end, "E225 missing whitespace around operator" + need_space = False + prev_type = token_type + prev_text = text + prev_end = end + + +def whitespace_around_comma(logical_line): + r"""Avoid extraneous whitespace after a comma or a colon. + + Note: these checks are disabled by default + + Okay: a = (1, 2) + E241: a = (1, 2) + E242: a = (1,\t2) + """ + line = logical_line + for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line): + found = m.start() + 1 + if "\t" in m.group(): + yield found, "E242 tab after '%s'" % m.group()[0] + else: + yield found, "E241 multiple spaces after '%s'" % m.group()[0] + + +def whitespace_around_named_parameter_equals(logical_line, tokens): + r"""Don't use spaces around the '=' sign in function arguments. + + Don't use spaces around the '=' sign when used to indicate a + keyword argument or a default parameter value. + + Okay: def complex(real, imag=0.0): + Okay: return magic(r=real, i=imag) + Okay: boolean(a == b) + Okay: boolean(a != b) + Okay: boolean(a <= b) + Okay: boolean(a >= b) + Okay: def foo(arg: int = 42): + Okay: async def foo(arg: int = 42): + + E251: def complex(real, imag = 0.0): + E251: return magic(r = real, i = imag) + """ + parens = 0 + no_space = False + prev_end = None + annotated_func_arg = False + in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line)) + message = "E251 unexpected spaces around keyword / parameter equals" + for token_type, text, start, end, line in tokens: + if token_type == tokenize.NL: + continue + if no_space: + no_space = False + if start != prev_end: + yield (prev_end, message) + if token_type == tokenize.OP: + if text in "([": + parens += 1 + elif text in ")]": + parens -= 1 + elif in_def and text == ":" and parens == 1: + annotated_func_arg = True + elif parens and text == "," and parens == 1: + annotated_func_arg = False + elif parens and text == "=" and not annotated_func_arg: + no_space = True + if start != prev_end: + yield (prev_end, message) + if not parens: + annotated_func_arg = False + + prev_end = end + + +def whitespace_before_comment(logical_line, tokens): + r"""Separate inline comments by at least two spaces. + + An inline comment is a comment on the same line as a statement. Inline + comments should be separated by at least two spaces from the statement. + They should start with a # and a single space. + + Each line of a block comment starts with a # and a single space + (unless it is indented text inside the comment). + + Okay: x = x + 1 # Increment x + Okay: x = x + 1 # Increment x + Okay: # Block comment + E261: x = x + 1 # Increment x + E262: x = x + 1 #Increment x + E262: x = x + 1 # Increment x + E265: #Block comment + E266: ### Block comment + """ + prev_end = (0, 0) + for token_type, text, start, end, line in tokens: + if token_type == tokenize.COMMENT: + inline_comment = line[: start[1]].strip() + if inline_comment: + if prev_end[0] == start[0] and start[1] < prev_end[1] + 2: + yield (prev_end, "E261 at least two spaces before inline comment") + symbol, sp, comment = text.partition(" ") + bad_prefix = symbol not in "#:" and (symbol.lstrip("#")[:1] or "#") + if inline_comment: + if bad_prefix or comment[:1] in WHITESPACE: + yield start, "E262 inline comment should start with '# '" + elif bad_prefix and (bad_prefix != "!" or start[0] > 1): + if bad_prefix != "#": + yield start, "E265 block comment should start with '# '" + elif comment: + yield start, "E266 too many leading '#' for block comment" + elif token_type != tokenize.NL: + prev_end = end + + +def imports_on_separate_lines(logical_line): + r"""Place imports on separate lines. + + Okay: import os\nimport sys + E401: import sys, os + + Okay: from subprocess import Popen, PIPE + Okay: from myclas import MyClass + Okay: from foo.bar.yourclass import YourClass + Okay: import myclass + Okay: import foo.bar.yourclass + """ + line = logical_line + if line.startswith("import "): + found = line.find(",") + if -1 < found and ";" not in line[:found]: + yield found, "E401 multiple imports on one line" + + +def module_imports_on_top_of_file(logical_line, indent_level, checker_state, noqa): + r"""Place imports at the top of the file. + + Always put imports at the top of the file, just after any module comments + and docstrings, and before module globals and constants. + + Okay: import os + Okay: # this is a comment\nimport os + Okay: '''this is a module docstring'''\nimport os + Okay: r'''this is a module docstring'''\nimport os + Okay: + try:\n\timport x\nexcept ImportError:\n\tpass\nelse:\n\tpass\nimport y + Okay: + try:\n\timport x\nexcept ImportError:\n\tpass\nfinally:\n\tpass\nimport y + E402: a=1\nimport os + E402: 'One string'\n"Two string"\nimport os + E402: a=1\nfrom sys import x + + Okay: if x:\n import os + """ + + def is_string_literal(line): + if line[0] in "uUbB": + line = line[1:] + if line and line[0] in "rR": + line = line[1:] + return line and (line[0] == '"' or line[0] == "'") + + allowed_try_keywords = ("try", "except", "else", "finally") + + if indent_level: # Allow imports in conditional statements or functions + return + if not logical_line: # Allow empty lines or comments + return + if noqa: + return + line = logical_line + if line.startswith("import ") or line.startswith("from "): + if checker_state.get("seen_non_imports", False): + yield 0, "E402 module level import not at top of file" + elif re.match(DUNDER_REGEX, line): + return + elif any(line.startswith(kw) for kw in allowed_try_keywords): + # Allow try, except, else, finally keywords intermixed with imports in + # order to support conditional importing + return + elif is_string_literal(line): + # The first literal is a docstring, allow it. Otherwise, report error. + if checker_state.get("seen_docstring", False): + checker_state["seen_non_imports"] = True + else: + checker_state["seen_docstring"] = True + else: + checker_state["seen_non_imports"] = True + + +def compound_statements(logical_line): + r"""Compound statements (on the same line) are generally discouraged. + + While sometimes it's okay to put an if/for/while with a small body + on the same line, never do this for multi-clause statements. + Also avoid folding such long lines! + + Always use a def statement instead of an assignment statement that + binds a lambda expression directly to a name. + + Okay: if foo == 'blah':\n do_blah_thing() + Okay: do_one() + Okay: do_two() + Okay: do_three() + + E701: if foo == 'blah': do_blah_thing() + E701: for x in lst: total += x + E701: while t < 10: t = delay() + E701: if foo == 'blah': do_blah_thing() + E701: else: do_non_blah_thing() + E701: try: something() + E701: finally: cleanup() + E701: if foo == 'blah': one(); two(); three() + E702: do_one(); do_two(); do_three() + E703: do_four(); # useless semicolon + E704: def f(x): return 2*x + E731: f = lambda x: 2*x + """ + line = logical_line + last_char = len(line) - 1 + found = line.find(":") + prev_found = 0 + counts = dict((char, 0) for char in "{}[]()") + while -1 < found < last_char: + update_counts(line[prev_found:found], counts) + if ( + counts["{"] <= counts["}"] # {'a': 1} (dict) + and counts["["] <= counts["]"] # [1:2] (slice) + and counts["("] <= counts[")"] + ): # (annotation) + lambda_kw = LAMBDA_REGEX.search(line, 0, found) + if lambda_kw: + before = line[: lambda_kw.start()].rstrip() + if before[-1:] == "=" and isidentifier(before[:-1].strip()): + yield 0, ("E731 do not assign a lambda expression, use a " "def") + break + if STARTSWITH_DEF_REGEX.match(line): + yield 0, "E704 multiple statements on one line (def)" + elif STARTSWITH_INDENT_STATEMENT_REGEX.match(line): + yield found, "E701 multiple statements on one line (colon)" + prev_found = found + found = line.find(":", found + 1) + found = line.find(";") + while -1 < found: + if found < last_char: + yield found, "E702 multiple statements on one line (semicolon)" + else: + yield found, "E703 statement ends with a semicolon" + found = line.find(";", found + 1) + + +def explicit_line_join(logical_line, tokens): + r"""Avoid explicit line join between brackets. + + The preferred way of wrapping long lines is by using Python's implied line + continuation inside parentheses, brackets and braces. Long lines can be + broken over multiple lines by wrapping expressions in parentheses. These + should be used in preference to using a backslash for line continuation. + + E502: aaa = [123, \\n 123] + E502: aaa = ("bbb " \\n "ccc") + + Okay: aaa = [123,\n 123] + Okay: aaa = ("bbb "\n "ccc") + Okay: aaa = "bbb " \\n "ccc" + Okay: aaa = 123 # \\ + """ + prev_start = prev_end = parens = 0 + comment = False + backslash = None + for token_type, text, start, end, line in tokens: + if token_type == tokenize.COMMENT: + comment = True + if start[0] != prev_start and parens and backslash and not comment: + yield backslash, "E502 the backslash is redundant between brackets" + if end[0] != prev_end: + if line.rstrip("\r\n").endswith("\\"): + backslash = (end[0], len(line.splitlines()[-1]) - 1) + else: + backslash = None + prev_start = prev_end = end[0] + else: + prev_start = start[0] + if token_type == tokenize.OP: + if text in "([{": + parens += 1 + elif text in ")]}": + parens -= 1 + + +def break_around_binary_operator(logical_line, tokens): + r""" + Avoid breaks before binary operators. + + The preferred place to break around a binary operator is after the + operator, not before it. + + W503: (width == 0\n + height == 0) + W503: (width == 0\n and height == 0) + + Okay: (width == 0 +\n height == 0) + Okay: foo(\n -x) + Okay: foo(x\n []) + Okay: x = '''\n''' + '' + Okay: foo(x,\n -y) + Okay: foo(x, # comment\n -y) + Okay: var = (1 &\n ~2) + Okay: var = (1 /\n -2) + Okay: var = (1 +\n -1 +\n -2) + """ + + def is_binary_operator(token_type, text): + # The % character is strictly speaking a binary operator, but the + # common usage seems to be to put it next to the format parameters, + # after a line break. + return (token_type == tokenize.OP or text in ["and", "or"]) and text not in "()[]{},:.;@=%~" + + line_break = False + unary_context = True + # Previous non-newline token types and text + previous_token_type = None + previous_text = None + for token_type, text, start, end, line in tokens: + if token_type == tokenize.COMMENT: + continue + if ("\n" in text or "\r" in text) and token_type != tokenize.STRING: + line_break = True + else: + if ( + is_binary_operator(token_type, text) + and line_break + and not unary_context + and not is_binary_operator(previous_token_type, previous_text) + ): + yield start, "W503 line break before binary operator" + unary_context = text in "([{,;" + line_break = False + previous_token_type = token_type + previous_text = text + + +def comparison_to_singleton(logical_line, noqa): + r"""Comparison to singletons should use "is" or "is not". + + Comparisons to singletons like None should always be done + with "is" or "is not", never the equality operators. + + Okay: if arg is not None: + E711: if arg != None: + E711: if None == arg: + E712: if arg == True: + E712: if False == arg: + + Also, beware of writing if x when you really mean if x is not None -- + e.g. when testing whether a variable or argument that defaults to None was + set to some other value. The other value might have a type (such as a + container) that could be false in a boolean context! + """ + match = not noqa and COMPARE_SINGLETON_REGEX.search(logical_line) + if match: + singleton = match.group(1) or match.group(3) + same = match.group(2) == "==" + + msg = "'if cond is %s:'" % (("" if same else "not ") + singleton) + if singleton in ("None",): + code = "E711" + else: + code = "E712" + nonzero = (singleton == "True" and same) or (singleton == "False" and not same) + msg += " or 'if %scond:'" % ("" if nonzero else "not ") + yield match.start(2), ("%s comparison to %s should be %s" % (code, singleton, msg)) + + +def comparison_negative(logical_line): + r"""Negative comparison should be done using "not in" and "is not". + + Okay: if x not in y:\n pass + Okay: assert (X in Y or X is Z) + Okay: if not (X in Y):\n pass + Okay: zz = x is not y + E713: Z = not X in Y + E713: if not X.B in Y:\n pass + E714: if not X is Y:\n pass + E714: Z = not X.B is Y + """ + match = COMPARE_NEGATIVE_REGEX.search(logical_line) + if match: + pos = match.start(1) + if match.group(2) == "in": + yield pos, "E713 test for membership should be 'not in'" + else: + yield pos, "E714 test for object identity should be 'is not'" + + +def comparison_type(logical_line, noqa): + r"""Object type comparisons should always use isinstance(). + + Do not compare types directly. + + Okay: if isinstance(obj, int): + E721: if type(obj) is type(1): + + When checking if an object is a string, keep in mind that it might be a + unicode string too! In Python 2.3, str and unicode have a common base + class, basestring, so you can do: + + Okay: if isinstance(obj, basestring): + Okay: if type(a1) is type(b1): + """ + match = COMPARE_TYPE_REGEX.search(logical_line) + if match and not noqa: + inst = match.group(1) + if inst and isidentifier(inst) and inst not in SINGLETONS: + return # Allow comparison for types which are not obvious + yield match.start(), "E721 do not compare types, use 'isinstance()'" + + +def bare_except(logical_line, noqa): + r"""When catching exceptions, mention specific exceptions whenever possible. + + Okay: except Exception: + Okay: except BaseException: + E722: except: + """ + if noqa: + return + + regex = re.compile(r"except\s*:") + match = regex.match(logical_line) + if match: + yield match.start(), "E722 do not use bare except'" + + +def ambiguous_identifier(logical_line, tokens): + r"""Never use the characters 'l', 'O', or 'I' as variable names. + + In some fonts, these characters are indistinguishable from the numerals + one and zero. When tempted to use 'l', use 'L' instead. + + Okay: L = 0 + Okay: o = 123 + Okay: i = 42 + E741: l = 0 + E741: O = 123 + E741: I = 42 + + Variables can be bound in several other contexts, including class and + function definitions, 'global' and 'nonlocal' statements, exception + handlers, and 'with' statements. + + Okay: except AttributeError as o: + Okay: with lock as L: + E741: except AttributeError as O: + E741: with lock as l: + E741: global I + E741: nonlocal l + E742: class I(object): + E743: def l(x): + """ + idents_to_avoid = ("l", "O", "I") + prev_type, prev_text, prev_start, prev_end, __ = tokens[0] + for token_type, text, start, end, line in tokens[1:]: + ident = pos = None + # identifiers on the lhs of an assignment operator + if token_type == tokenize.OP and "=" in text: + if prev_text in idents_to_avoid: + ident = prev_text + pos = prev_start + # identifiers bound to a value with 'as', 'global', or 'nonlocal' + if prev_text in ("as", "global", "nonlocal"): + if text in idents_to_avoid: + ident = text + pos = start + if prev_text == "class": + if text in idents_to_avoid: + yield start, "E742 ambiguous class definition '%s'" % text + if prev_text == "def": + if text in idents_to_avoid: + yield start, "E743 ambiguous function definition '%s'" % text + if ident: + yield pos, "E741 ambiguous variable name '%s'" % ident + prev_text = text + prev_start = start + + +def python_3000_has_key(logical_line, noqa): + r"""The {}.has_key() method is removed in Python 3: use the 'in' operator. + + Okay: if "alph" in d:\n print d["alph"] + W601: assert d.has_key('alph') + """ + pos = logical_line.find(".has_key(") + if pos > -1 and not noqa: + yield pos, "W601 .has_key() is deprecated, use 'in'" + + +def python_3000_raise_comma(logical_line): + r"""When raising an exception, use "raise ValueError('message')". + + The older form is removed in Python 3. + + Okay: raise DummyError("Message") + W602: raise DummyError, "Message" + """ + match = RAISE_COMMA_REGEX.match(logical_line) + if match and not RERAISE_COMMA_REGEX.match(logical_line): + yield match.end() - 1, "W602 deprecated form of raising exception" + + +def python_3000_not_equal(logical_line): + r"""New code should always use != instead of <>. + + The older syntax is removed in Python 3. + + Okay: if a != 'no': + W603: if a <> 'no': + """ + pos = logical_line.find("<>") + if pos > -1: + yield pos, "W603 '<>' is deprecated, use '!='" + + +def python_3000_backticks(logical_line): + r"""Use repr() instead of backticks in Python 3. + + Okay: val = repr(1 + 2) + W604: val = `1 + 2` + """ + pos = logical_line.find("`") + if pos > -1: + yield pos, "W604 backticks are deprecated, use 'repr()'" + + +############################################################################## +# Helper functions +############################################################################## + + +if sys.version_info < (3,): + # Python 2: implicit encoding. + def readlines(filename): + """Read the source code.""" + with open(filename, "rU") as f: + return f.readlines() + + isidentifier = re.compile(r"[a-zA-Z_]\w*$").match + stdin_get_value = sys.stdin.read +else: + # Python 3 + def readlines(filename): + """Read the source code.""" + try: + with open(filename, "rb") as f: + (coding, lines) = tokenize.detect_encoding(f.readline) + f = TextIOWrapper(f, coding, line_buffering=True) + return [line.decode(coding) for line in lines] + f.readlines() + except (LookupError, SyntaxError, UnicodeError): + # Fall back if file encoding is improperly declared + with open(filename, encoding="latin-1") as f: + return f.readlines() + + isidentifier = str.isidentifier + + stdin_get_value = sys.stdin.read + +noqa = re.compile(r"# no(?:qa|pep8)\b", re.I).search + + +def expand_indent(line): + r"""Return the amount of indentation. + + Tabs are expanded to the next multiple of 8. + + >>> expand_indent(' ') + 4 + >>> expand_indent('\t') + 8 + >>> expand_indent(' \t') + 8 + >>> expand_indent(' \t') + 16 + """ + if "\t" not in line: + return len(line) - len(line.lstrip()) + result = 0 + for char in line: + if char == "\t": + result = result // 8 * 8 + 8 + elif char == " ": + result += 1 + else: + break + return result + + +def mute_string(text): + """Replace contents with 'xxx' to prevent syntax matching. + + >>> mute_string('"abc"') + '"xxx"' + >>> mute_string("'''abc'''") + "'''xxx'''" + >>> mute_string("r'abc'") + "r'xxx'" + """ + # String modifiers (e.g. u or r) + start = text.index(text[-1]) + 1 + end = len(text) - 1 + # Triple quotes + if text[-3:] in ('"""', "'''"): + start += 2 + end -= 2 + return text[:start] + "x" * (end - start) + text[end:] + + +def parse_udiff(diff, patterns=None, parent="."): + """Return a dictionary of matching lines.""" + # For each file of the diff, the entry key is the filename, + # and the value is a set of row numbers to consider. + rv = {} + path = nrows = None + for line in diff.splitlines(): + if nrows: + if line[:1] != "-": + nrows -= 1 + continue + if line[:3] == "@@ ": + hunk_match = HUNK_REGEX.match(line) + (row, nrows) = [int(g or "1") for g in hunk_match.groups()] + rv[path].update(range(row, row + nrows)) + elif line[:3] == "+++": + path = line[4:].split("\t", 1)[0] + if path[:2] == "b/": + path = path[2:] + rv[path] = set() + return dict([(os.path.join(parent, path), rows) for (path, rows) in rv.items() if rows and filename_match(path, patterns)]) + + +def normalize_paths(value, parent=os.curdir): + """Parse a comma-separated list of paths. + + Return a list of absolute paths. + """ + if not value: + return [] + if isinstance(value, list): + return value + paths = [] + for path in value.split(","): + path = path.strip() + if "/" in path: + path = os.path.abspath(os.path.join(parent, path)) + paths.append(path.rstrip("/")) + return paths + + +def filename_match(filename, patterns, default=True): + """Check if patterns contains a pattern that matches filename. + + If patterns is unspecified, this always returns True. + """ + if not patterns: + return default + return any(fnmatch(filename, pattern) for pattern in patterns) + + +def update_counts(s, counts): + r"""Adds one to the counts of each appearance of characters in s, + for characters in counts""" + for char in s: + if char in counts: + counts[char] += 1 + + +def _is_eol_token(token): + return token[0] in NEWLINE or token[4][token[3][1] :].lstrip() == "\\\n" + + +if COMMENT_WITH_NL: + + def _is_eol_token(token, _eol_token=_is_eol_token): + return _eol_token(token) or (token[0] == tokenize.COMMENT and token[1] == token[4]) + +############################################################################## +# Framework to run all checks +############################################################################## + + +_checks = {"physical_line": {}, "logical_line": {}, "tree": {}} + + +def _get_parameters(function): + if sys.version_info >= (3, 3): + return [ + parameter.name + for parameter in inspect.signature(function).parameters.values() + if parameter.kind == parameter.POSITIONAL_OR_KEYWORD + ] + else: + return inspect.getargspec(function)[0] + + +def register_check(check, codes=None): + """Register a new check object.""" + + def _add_check(check, kind, codes, args): + if check in _checks[kind]: + _checks[kind][check][0].extend(codes or []) + else: + _checks[kind][check] = (codes or [""], args) + + if inspect.isfunction(check): + args = _get_parameters(check) + if args and args[0] in ("physical_line", "logical_line"): + if codes is None: + codes = ERRORCODE_REGEX.findall(check.__doc__ or "") + _add_check(check, args[0], codes, args) + elif inspect.isclass(check): + if _get_parameters(check.__init__)[:2] == ["self", "tree"]: + _add_check(check, "tree", codes, None) + + +def init_checks_registry(): + """Register all globally visible functions. + + The first argument name is either 'physical_line' or 'logical_line'. + """ + mod = inspect.getmodule(register_check) + for name, function in inspect.getmembers(mod, inspect.isfunction): + register_check(function) + + +init_checks_registry() + + +class Checker(object): + """Load a Python source file, tokenize it, check coding style.""" + + def __init__(self, filename=None, lines=None, options=None, report=None, **kwargs): + if options is None: + options = StyleGuide(kwargs).options + else: + assert not kwargs + self._io_error = None + self._physical_checks = options.physical_checks + self._logical_checks = options.logical_checks + self._ast_checks = options.ast_checks + self.max_line_length = options.max_line_length + self.multiline = False # in a multiline string? + self.hang_closing = options.hang_closing + self.verbose = options.verbose + self.filename = filename + # Dictionary where a checker can store its custom state. + self._checker_states = {} + if filename is None: + self.filename = "stdin" + self.lines = lines or [] + elif filename == "-": + self.filename = "stdin" + self.lines = stdin_get_value().splitlines(True) + elif lines is None: + try: + self.lines = readlines(filename) + except IOError: + (exc_type, exc) = sys.exc_info()[:2] + self._io_error = "%s: %s" % (exc_type.__name__, exc) + self.lines = [] + else: + self.lines = lines + if self.lines: + ord0 = ord(self.lines[0][0]) + if ord0 in (0xEF, 0xFEFF): # Strip the UTF-8 BOM + if ord0 == 0xFEFF: + self.lines[0] = self.lines[0][1:] + elif self.lines[0][:3] == "\xef\xbb\xbf": + self.lines[0] = self.lines[0][3:] + self.report = report or options.report + self.report_error = self.report.error + self.noqa = False + + def report_invalid_syntax(self): + """Check if the syntax is valid.""" + (exc_type, exc) = sys.exc_info()[:2] + if len(exc.args) > 1: + offset = exc.args[1] + if len(offset) > 2: + offset = offset[1:3] + else: + offset = (1, 0) + self.report_error(offset[0], offset[1] or 0, "E901 %s: %s" % (exc_type.__name__, exc.args[0]), self.report_invalid_syntax) + + def readline(self): + """Get the next line from the input buffer.""" + if self.line_number >= self.total_lines: + return "" + line = self.lines[self.line_number] + self.line_number += 1 + if self.indent_char is None and line[:1] in WHITESPACE: + self.indent_char = line[0] + return line + + def run_check(self, check, argument_names): + """Run a check plugin.""" + arguments = [] + for name in argument_names: + arguments.append(getattr(self, name)) + return check(*arguments) + + def init_checker_state(self, name, argument_names): + """Prepare custom state for the specific checker plugin.""" + if "checker_state" in argument_names: + self.checker_state = self._checker_states.setdefault(name, {}) + + def check_physical(self, line): + """Run all physical checks on a raw input line.""" + self.physical_line = line + for name, check, argument_names in self._physical_checks: + self.init_checker_state(name, argument_names) + result = self.run_check(check, argument_names) + if result is not None: + (offset, text) = result + self.report_error(self.line_number, offset, text, check) + if text[:4] == "E101": + self.indent_char = line[0] + + def build_tokens_line(self): + """Build a logical line from tokens.""" + logical = [] + comments = [] + length = 0 + prev_row = prev_col = mapping = None + for token_type, text, start, end, line in self.tokens: + if token_type in SKIP_TOKENS: + continue + if not mapping: + mapping = [(0, start)] + if token_type == tokenize.COMMENT: + comments.append(text) + continue + if token_type == tokenize.STRING: + text = mute_string(text) + if prev_row: + (start_row, start_col) = start + if prev_row != start_row: # different row + prev_text = self.lines[prev_row - 1][prev_col - 1] + if prev_text == "," or (prev_text not in "{[(" and text not in "}])"): + text = " " + text + elif prev_col != start_col: # different column + text = line[prev_col:start_col] + text + logical.append(text) + length += len(text) + mapping.append((length, end)) + (prev_row, prev_col) = end + self.logical_line = "".join(logical) + self.noqa = comments and noqa("".join(comments)) + return mapping + + def check_logical(self): + """Build a line from tokens and run all logical checks on it.""" + self.report.increment_logical_line() + mapping = self.build_tokens_line() + + if not mapping: + return + + (start_row, start_col) = mapping[0][1] + start_line = self.lines[start_row - 1] + self.indent_level = expand_indent(start_line[:start_col]) + if self.blank_before < self.blank_lines: + self.blank_before = self.blank_lines + if self.verbose >= 2: + print(self.logical_line[:80].rstrip()) + for name, check, argument_names in self._logical_checks: + if self.verbose >= 4: + print(" " + name) + self.init_checker_state(name, argument_names) + for offset, text in self.run_check(check, argument_names) or (): + if not isinstance(offset, tuple): + for token_offset, pos in mapping: + if offset <= token_offset: + break + offset = (pos[0], pos[1] + offset - token_offset) + self.report_error(offset[0], offset[1], text, check) + if self.logical_line: + self.previous_indent_level = self.indent_level + self.previous_logical = self.logical_line + if not self.indent_level: + self.previous_unindented_logical_line = self.logical_line + self.blank_lines = 0 + self.tokens = [] + + def check_ast(self): + """Build the file's AST and run all AST checks.""" + try: + tree = compile("".join(self.lines), "", "exec", PyCF_ONLY_AST) + except (ValueError, SyntaxError, TypeError): + return self.report_invalid_syntax() + for name, cls, __ in self._ast_checks: + checker = cls(tree, self.filename) + for lineno, offset, text, check in checker.run(): + if not self.lines or not noqa(self.lines[lineno - 1]): + self.report_error(lineno, offset, text, check) + + def generate_tokens(self): + """Tokenize the file, run physical line checks and yield tokens.""" + if self._io_error: + self.report_error(1, 0, "E902 %s" % self._io_error, readlines) + tokengen = tokenize.generate_tokens(self.readline) + try: + for token in tokengen: + if token[2][0] > self.total_lines: + return + self.noqa = token[4] and noqa(token[4]) + self.maybe_check_physical(token) + yield token + except (SyntaxError, tokenize.TokenError): + self.report_invalid_syntax() + + def maybe_check_physical(self, token): + """If appropriate (based on token), check current physical line(s).""" + # Called after every token, but act only on end of line. + if _is_eol_token(token): + # Obviously, a newline token ends a single physical line. + self.check_physical(token[4]) + elif token[0] == tokenize.STRING and "\n" in token[1]: + # Less obviously, a string that contains newlines is a + # multiline string, either triple-quoted or with internal + # newlines backslash-escaped. Check every physical line in the + # string *except* for the last one: its newline is outside of + # the multiline string, so we consider it a regular physical + # line, and will check it like any other physical line. + # + # Subtleties: + # - we don't *completely* ignore the last line; if it contains + # the magical "# noqa" comment, we disable all physical + # checks for the entire multiline string + # - have to wind self.line_number back because initially it + # points to the last line of the string, and we want + # check_physical() to give accurate feedback + if noqa(token[4]): + return + self.multiline = True + self.line_number = token[2][0] + for line in token[1].split("\n")[:-1]: + self.check_physical(line + "\n") + self.line_number += 1 + self.multiline = False + + def check_all(self, expected=None, line_offset=0): + """Run all checks on the input file.""" + self.report.init_file(self.filename, self.lines, expected, line_offset) + self.total_lines = len(self.lines) + if self._ast_checks: + self.check_ast() + self.line_number = 0 + self.indent_char = None + self.indent_level = self.previous_indent_level = 0 + self.previous_logical = "" + self.previous_unindented_logical_line = "" + self.tokens = [] + self.blank_lines = self.blank_before = 0 + parens = 0 + for token in self.generate_tokens(): + self.tokens.append(token) + token_type, text = token[0:2] + if self.verbose >= 3: + if token[2][0] == token[3][0]: + pos = "[%s:%s]" % (token[2][1] or "", token[3][1]) + else: + pos = "l.%s" % token[3][0] + print("l.%s\t%s\t%s\t%r" % (token[2][0], pos, tokenize.tok_name[token[0]], text)) + if token_type == tokenize.OP: + if text in "([{": + parens += 1 + elif text in "}])": + parens -= 1 + elif not parens: + if token_type in NEWLINE: + if token_type == tokenize.NEWLINE: + self.check_logical() + self.blank_before = 0 + elif len(self.tokens) == 1: + # The physical line contains only this token. + self.blank_lines += 1 + del self.tokens[0] + else: + self.check_logical() + elif COMMENT_WITH_NL and token_type == tokenize.COMMENT: + if len(self.tokens) == 1: + # The comment also ends a physical line + token = list(token) + token[1] = text.rstrip("\r\n") + token[3] = (token[2][0], token[2][1] + len(token[1])) + self.tokens = [tuple(token)] + self.check_logical() + if self.tokens: + self.check_physical(self.lines[-1]) + self.check_logical() + return self.report.get_file_results() + + +class BaseReport(object): + """Collect the results of the checks.""" + + print_filename = False + + def __init__(self, options): + self._benchmark_keys = options.benchmark_keys + self._ignore_code = options.ignore_code + # Results + self.elapsed = 0 + self.total_errors = 0 + self.counters = dict.fromkeys(self._benchmark_keys, 0) + self.messages = {} + + def start(self): + """Start the timer.""" + self._start_time = time.time() + + def stop(self): + """Stop the timer.""" + self.elapsed = time.time() - self._start_time + + def init_file(self, filename, lines, expected, line_offset): + """Signal a new file.""" + self.filename = filename + self.lines = lines + self.expected = expected or () + self.line_offset = line_offset + self.file_errors = 0 + self.counters["files"] += 1 + self.counters["physical lines"] += len(lines) + + def increment_logical_line(self): + """Signal a new logical line.""" + self.counters["logical lines"] += 1 + + def error(self, line_number, offset, text, check): + """Report an error, according to options.""" + code = text[:4] + if self._ignore_code(code): + return + if code in self.counters: + self.counters[code] += 1 + else: + self.counters[code] = 1 + self.messages[code] = text[5:] + # Don't care about expected errors or warnings + if code in self.expected: + return + if self.print_filename and not self.file_errors: + print(self.filename) + self.file_errors += 1 + self.total_errors += 1 + return code + + def get_file_results(self): + """Return the count of errors and warnings for this file.""" + return self.file_errors + + def get_count(self, prefix=""): + """Return the total count of errors and warnings.""" + return sum([self.counters[key] for key in self.messages if key.startswith(prefix)]) + + def get_statistics(self, prefix=""): + """Get statistics for message codes that start with the prefix. + + prefix='' matches all errors and warnings + prefix='E' matches all errors + prefix='W' matches all warnings + prefix='E4' matches all errors that have to do with imports + """ + return ["%-7s %s %s" % (self.counters[key], key, self.messages[key]) for key in sorted(self.messages) if key.startswith(prefix)] + + def print_statistics(self, prefix=""): + """Print overall statistics (number of errors and warnings).""" + for line in self.get_statistics(prefix): + print(line) + + def print_benchmark(self): + """Print benchmark numbers.""" + print("%-7.2f %s" % (self.elapsed, "seconds elapsed")) + if self.elapsed: + for key in self._benchmark_keys: + print("%-7d %s per second (%d total)" % (self.counters[key] / self.elapsed, key, self.counters[key])) + + +class FileReport(BaseReport): + """Collect the results of the checks and print only the filenames.""" + + print_filename = True + + +class StandardReport(BaseReport): + """Collect and print the results of the checks.""" + + def __init__(self, options): + super(StandardReport, self).__init__(options) + self._fmt = REPORT_FORMAT.get(options.format.lower(), options.format) + self._repeat = options.repeat + self._show_source = options.show_source + self._show_pep8 = options.show_pep8 + + def init_file(self, filename, lines, expected, line_offset): + """Signal a new file.""" + self._deferred_print = [] + return super(StandardReport, self).init_file(filename, lines, expected, line_offset) + + def error(self, line_number, offset, text, check): + """Report an error, according to options.""" + code = super(StandardReport, self).error(line_number, offset, text, check) + if code and (self.counters[code] == 1 or self._repeat): + self._deferred_print.append((line_number, offset, code, text[5:], check.__doc__)) + return code + + def get_file_results(self): + """Print the result and return the overall count for this file.""" + self._deferred_print.sort() + for line_number, offset, code, text, doc in self._deferred_print: + print( + self._fmt + % { + "path": self.filename, + "row": self.line_offset + line_number, + "col": offset + 1, + "code": code, + "text": text, + } + ) + if self._show_source: + if line_number > len(self.lines): + line = "" + else: + line = self.lines[line_number - 1] + print(line.rstrip()) + print(re.sub(r"\S", " ", line[:offset]) + "^") + if self._show_pep8 and doc: + print(" " + doc.strip()) + + # stdout is block buffered when not stdout.isatty(). + # line can be broken where buffer boundary since other processes + # write to same file. + # flush() after print() to avoid buffer boundary. + # Typical buffer size is 8192. line written safely when + # len(line) < 8192. + sys.stdout.flush() + return self.file_errors + + +class DiffReport(StandardReport): + """Collect and print the results for the changed lines only.""" + + def __init__(self, options): + super(DiffReport, self).__init__(options) + self._selected = options.selected_lines + + def error(self, line_number, offset, text, check): + if line_number not in self._selected[self.filename]: + return + return super(DiffReport, self).error(line_number, offset, text, check) + + +class StyleGuide(object): + """Initialize a PEP-8 instance with few options.""" + + def __init__(self, *args, **kwargs): + # build options from the command line + self.checker_class = kwargs.pop("checker_class", Checker) + parse_argv = kwargs.pop("parse_argv", False) + config_file = kwargs.pop("config_file", False) + parser = kwargs.pop("parser", None) + # build options from dict + options_dict = dict(*args, **kwargs) + arglist = None if parse_argv else options_dict.get("paths", None) + options, self.paths = process_options(arglist, parse_argv, config_file, parser) + if options_dict: + options.__dict__.update(options_dict) + if "paths" in options_dict: + self.paths = options_dict["paths"] + + self.runner = self.input_file + self.options = options + + if not options.reporter: + options.reporter = BaseReport if options.quiet else StandardReport + + options.select = tuple(options.select or ()) + if not (options.select or options.ignore or options.testsuite or options.doctest) and DEFAULT_IGNORE: + # The default choice: ignore controversial checks + options.ignore = tuple(DEFAULT_IGNORE.split(",")) + else: + # Ignore all checks which are not explicitly selected + options.ignore = ("",) if options.select else tuple(options.ignore) + options.benchmark_keys = BENCHMARK_KEYS[:] + options.ignore_code = self.ignore_code + options.physical_checks = self.get_checks("physical_line") + options.logical_checks = self.get_checks("logical_line") + options.ast_checks = self.get_checks("tree") + self.init_report() + + def init_report(self, reporter=None): + """Initialize the report instance.""" + self.options.report = (reporter or self.options.reporter)(self.options) + return self.options.report + + def check_files(self, paths=None): + """Run all checks on the paths.""" + if paths is None: + paths = self.paths + report = self.options.report + runner = self.runner + report.start() + try: + for path in paths: + if os.path.isdir(path): + self.input_dir(path) + elif not self.excluded(path): + runner(path) + except KeyboardInterrupt: + print("... stopped") + report.stop() + return report + + def input_file(self, filename, lines=None, expected=None, line_offset=0): + """Run all checks on a Python source file.""" + if self.options.verbose: + print("checking %s" % filename) + fchecker = self.checker_class(filename, lines=lines, options=self.options) + return fchecker.check_all(expected=expected, line_offset=line_offset) + + def input_dir(self, dirname): + """Check all files in this directory and all subdirectories.""" + dirname = dirname.rstrip("/") + if self.excluded(dirname): + return 0 + counters = self.options.report.counters + verbose = self.options.verbose + filepatterns = self.options.filename + runner = self.runner + for root, dirs, files in os.walk(dirname): + if verbose: + print("directory " + root) + counters["directories"] += 1 + for subdir in sorted(dirs): + if self.excluded(subdir, root): + dirs.remove(subdir) + for filename in sorted(files): + # contain a pattern that matches? + if filename_match(filename, filepatterns) and not self.excluded(filename, root): + runner(os.path.join(root, filename)) + + def excluded(self, filename, parent=None): + """Check if the file should be excluded. + + Check if 'options.exclude' contains a pattern that matches filename. + """ + if not self.options.exclude: + return False + basename = os.path.basename(filename) + if filename_match(basename, self.options.exclude): + return True + if parent: + filename = os.path.join(parent, filename) + filename = os.path.abspath(filename) + return filename_match(filename, self.options.exclude) + + def ignore_code(self, code): + """Check if the error code should be ignored. + + If 'options.select' contains a prefix of the error code, + return False. Else, if 'options.ignore' contains a prefix of + the error code, return True. + """ + if len(code) < 4 and any(s.startswith(code) for s in self.options.select): + return False + return code.startswith(self.options.ignore) and not code.startswith(self.options.select) + + def get_checks(self, argument_name): + """Get all the checks for this category. + + Find all globally visible functions where the first argument name + starts with argument_name and which contain selected tests. + """ + checks = [] + for check, attrs in _checks[argument_name].items(): + (codes, args) = attrs + if any(not (code and self.ignore_code(code)) for code in codes): + checks.append((check.__name__, check, args)) + return sorted(checks) + + +def get_parser(prog="pycodestyle", version=__version__): + """Create the parser for the program.""" + parser = OptionParser(prog=prog, version=version, usage="%prog [options] input ...") + parser.config_options = [ + "exclude", + "filename", + "select", + "ignore", + "max-line-length", + "hang-closing", + "count", + "format", + "quiet", + "show-pep8", + "show-source", + "statistics", + "verbose", + ] + parser.add_option("-v", "--verbose", default=0, action="count", help="print status messages, or debug with -vv") + parser.add_option("-q", "--quiet", default=0, action="count", help="report only file names, or nothing with -qq") + parser.add_option("-r", "--repeat", default=True, action="store_true", help="(obsolete) show all occurrences of the same error") + parser.add_option("--first", action="store_false", dest="repeat", help="show first occurrence of each error") + parser.add_option( + "--exclude", + metavar="patterns", + default=DEFAULT_EXCLUDE, + help="exclude files or directories which match these " "comma separated patterns (default: %default)", + ) + parser.add_option( + "--filename", + metavar="patterns", + default="*.py", + help="when parsing directories, only check filenames " "matching these comma separated patterns " "(default: %default)", + ) + parser.add_option("--select", metavar="errors", default="", help="select errors and warnings (e.g. E,W6)") + parser.add_option( + "--ignore", metavar="errors", default="", help="skip errors and warnings (e.g. E4,W) " "(default: %s)" % DEFAULT_IGNORE + ) + parser.add_option("--show-source", action="store_true", help="show source code for each error") + parser.add_option("--show-pep8", action="store_true", help="show text of PEP 8 for each error " "(implies --first)") + parser.add_option("--statistics", action="store_true", help="count errors and warnings") + parser.add_option( + "--count", + action="store_true", + help="print total number of errors and warnings " "to standard error and set exit code to 1 if " "total is not null", + ) + parser.add_option( + "--max-line-length", type="int", metavar="n", default=MAX_LINE_LENGTH, help="set maximum allowed line length " "(default: %default)" + ) + parser.add_option( + "--hang-closing", action="store_true", help="hang closing bracket instead of matching " "indentation of opening bracket's line" + ) + parser.add_option("--format", metavar="format", default="default", help="set the error format [default|pylint|]") + parser.add_option( + "--diff", action="store_true", help="report changes only within line number ranges in " "the unified diff received on STDIN" + ) + group = parser.add_option_group("Testing Options") + if os.path.exists(TESTSUITE_PATH): + group.add_option("--testsuite", metavar="dir", help="run regression tests from dir") + group.add_option("--doctest", action="store_true", help="run doctest on myself") + group.add_option("--benchmark", action="store_true", help="measure processing speed") + return parser + + +def read_config(options, args, arglist, parser): + """Read and parse configurations. + + If a config file is specified on the command line with the "--config" + option, then only it is used for configuration. + + Otherwise, the user configuration (~/.config/pycodestyle) and any local + configurations in the current directory or above will be merged together + (in that order) using the read method of ConfigParser. + """ + config = RawConfigParser() + + cli_conf = options.config + + local_dir = os.curdir + + if USER_CONFIG and os.path.isfile(USER_CONFIG): + if options.verbose: + print("user configuration: %s" % USER_CONFIG) + config.read(USER_CONFIG) + + parent = tail = args and os.path.abspath(os.path.commonprefix(args)) + while tail: + if config.read(os.path.join(parent, fn) for fn in PROJECT_CONFIG): + local_dir = parent + if options.verbose: + print("local configuration: in %s" % parent) + break + (parent, tail) = os.path.split(parent) + + if cli_conf and os.path.isfile(cli_conf): + if options.verbose: + print("cli configuration: %s" % cli_conf) + config.read(cli_conf) + + pycodestyle_section = None + if config.has_section(parser.prog): + pycodestyle_section = parser.prog + elif config.has_section("pep8"): + pycodestyle_section = "pep8" # Deprecated + warnings.warn("[pep8] section is deprecated. Use [pycodestyle].") + + if pycodestyle_section: + option_list = dict([(o.dest, o.type or o.action) for o in parser.option_list]) + + # First, read the default values + (new_options, __) = parser.parse_args([]) + + # Second, parse the configuration + for opt in config.options(pycodestyle_section): + if opt.replace("_", "-") not in parser.config_options: + print(" unknown option '%s' ignored" % opt) + continue + if options.verbose > 1: + print(" %s = %s" % (opt, config.get(pycodestyle_section, opt))) + normalized_opt = opt.replace("-", "_") + opt_type = option_list[normalized_opt] + if opt_type in ("int", "count"): + value = config.getint(pycodestyle_section, opt) + elif opt_type in ("store_true", "store_false"): + value = config.getboolean(pycodestyle_section, opt) + else: + value = config.get(pycodestyle_section, opt) + if normalized_opt == "exclude": + value = normalize_paths(value, local_dir) + setattr(new_options, normalized_opt, value) + + # Third, overwrite with the command-line options + (options, __) = parser.parse_args(arglist, values=new_options) + options.doctest = options.testsuite = False + return options + + +def process_options(arglist=None, parse_argv=False, config_file=None, parser=None): + """Process options passed either via arglist or via command line args. + + Passing in the ``config_file`` parameter allows other tools, such as flake8 + to specify their own options to be processed in pycodestyle. + """ + if not parser: + parser = get_parser() + if not parser.has_option("--config"): + group = parser.add_option_group( + "Configuration", + description=( + "The project options are read from the [%s] section of the " + "tox.ini file or the setup.cfg file located in any parent folder " + "of the path(s) being processed. Allowed options are: %s." % (parser.prog, ", ".join(parser.config_options)) + ), + ) + group.add_option("--config", metavar="path", default=config_file, help="user config file location") + # Don't read the command line if the module is used as a library. + if not arglist and not parse_argv: + arglist = [] + # If parse_argv is True and arglist is None, arguments are + # parsed from the command line (sys.argv) + (options, args) = parser.parse_args(arglist) + options.reporter = None + + if options.ensure_value("testsuite", False): + args.append(options.testsuite) + elif not options.ensure_value("doctest", False): + if parse_argv and not args: + if options.diff or any(os.path.exists(name) for name in PROJECT_CONFIG): + args = ["."] + else: + parser.error("input not specified") + options = read_config(options, args, arglist, parser) + options.reporter = parse_argv and options.quiet == 1 and FileReport + + options.filename = _parse_multi_options(options.filename) + options.exclude = normalize_paths(options.exclude) + options.select = _parse_multi_options(options.select) + options.ignore = _parse_multi_options(options.ignore) + + if options.diff: + options.reporter = DiffReport + stdin = stdin_get_value() + options.selected_lines = parse_udiff(stdin, options.filename, args[0]) + args = sorted(options.selected_lines) + + return options, args + + +def _parse_multi_options(options, split_token=","): + r"""Split and strip and discard empties. + + Turns the following: + + A, + B, + + into ["A", "B"] + """ + if options: + return [o.strip() for o in options.split(split_token) if o.strip()] + else: + return options + + +def _main(): + """Parse options and run checks on Python source.""" + import signal + + # Handle "Broken pipe" gracefully + try: + signal.signal(signal.SIGPIPE, lambda signum, frame: sys.exit(1)) + except AttributeError: + pass # not supported on Windows + + style_guide = StyleGuide(parse_argv=True) + options = style_guide.options + + if options.doctest or options.testsuite: + from testsuite.support import run_tests + + report = run_tests(style_guide) + else: + report = style_guide.check_files() + + if options.statistics: + report.print_statistics() + + if options.benchmark: + report.print_benchmark() + + if options.testsuite and not options.quiet: + report.print_results() + + if report.total_errors: + if options.count: + sys.stderr.write(str(report.total_errors) + "\n") + sys.exit(1) + + +if __name__ == "__main__": + _main() diff --git a/src/debugpy/_vendored/pydevd/third_party/tests_cython_json.py b/src/debugpy/_vendored/pydevd/third_party/tests_cython_json.py new file mode 100644 index 000000000..ff6ae49c5 --- /dev/null +++ b/src/debugpy/_vendored/pydevd/third_party/tests_cython_json.py @@ -0,0 +1,95 @@ +import Cython +from cython_json import source_to_dict +import pytest +import json + + +def test_dump_ast_error(): + as_dict = source_to_dict("x = [a 10]") + errors = as_dict["errors"] + assert len(errors) == 1 + error = errors[0] + assert error["__node__"] == "CompileError" + assert error["line"] == 1 + assert error["col"] == 8 + assert "Expected" in error["message_only"] + + +def test_dump_error(): + contents = """ +from distutils import sysconfig +""" + if isinstance(contents, bytes): + contents = contents.decode("utf-8") + source_to_dict(contents) + + +def test_dump_class(): + contents = """ +class A:pass +""" + if isinstance(contents, bytes): + contents = contents.decode("utf-8") + source_to_dict(contents) + + +def test_comp(): + contents = """ +{i: j for i, j in a} +""" + if isinstance(contents, bytes): + contents = contents.decode("utf-8") + source_to_dict(contents) + + +def test_global(): + contents = """ +def method(): + global b + b = 10 +""" + if isinstance(contents, bytes): + contents = contents.decode("utf-8") + source_to_dict(contents) + + +# def test_dump_custom(): +# with open(r'X:\cython\tests\compile\buildenv.pyx', 'r') as stream: +# contents = stream.read().decode('utf-8') +# source_to_dict(contents) + + +def test_dump_ast(): + data = source_to_dict("x = [a, 10]") + assert not data["errors"] + assert data["ast"]["stats"] == [ + { + "__node__": "SingleAssignment", + "rhs": { + "__node__": "List", + "line": 1, + "args": [ + {"__node__": "Name", "line": 1, "col": 5, "name": "a"}, + { + "is_c_literal": "None", + "unsigned": "", + "value": "10", + "constant_result": "10", + "__node__": "Int", + "line": 1, + "type": "long", + "col": 8, + "longness": "", + }, + ], + "col": 4, + }, + "lhs": {"__node__": "Name", "line": 1, "col": 0, "name": "x"}, + "line": 1, + "col": 4, + } + ] + + +if __name__ == "__main__": + pytest.main() diff --git a/src/debugpy/common/messaging.py b/src/debugpy/common/messaging.py index b133f71b6..eb29c1899 100644 --- a/src/debugpy/common/messaging.py +++ b/src/debugpy/common/messaging.py @@ -295,7 +295,8 @@ def write_json(self, value, encoder=None): try: while data_written < len(data): written = writer.write(data[data_written:]) - data_written += written + if written is not None: + data_written += written writer.flush() except Exception as exc: # pragma: no cover self._log_message("<--", value, logger=log.swallow_exception) diff --git a/tests/_logs/test-logs.code-workspace b/tests/_logs/test-logs.code-workspace new file mode 100644 index 000000000..f8054ce3e --- /dev/null +++ b/tests/_logs/test-logs.code-workspace @@ -0,0 +1,17 @@ +{ + "folders": [ + { + "path": "3.12-64/tests/debugpy/test_django.py/test_django_template_exception_no_multiproc[launch]" + }, + { + "path": "../../../debugpy-2/tests/_logs/3.11-64/tests/debugpy/test_django.py/test_django_template_exception_no_multiproc[launch]" + }, + { + "path": "3.12-64/tests/debugpy/test_exception.py/test_systemexit[0-zero-uncaught-raised-launch(console=internalConsole)-program]" + }, + { + "path": "3.12-64/tests/debugpy/test_exception.py/test_systemexit[1-zero-uncaught--launch(console=externalTerminal)-module]" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/tests/logs.py b/tests/logs.py index 7d3089cad..5d1c63c8a 100644 --- a/tests/logs.py +++ b/tests/logs.py @@ -4,12 +4,26 @@ import io import os -import pytest_timeout +import shutil import sys from debugpy.common import json, log +def write_title(title, stream=None, sep="~"): + """Write a section title. + If *stream* is None sys.stderr will be used, *sep* is used to + draw the line. + """ + if stream is None: + stream = sys.stderr + width, height = shutil.get_terminal_size() + fill = int((width - len(title) - 2) / 2) + line = " ".join([sep * fill, title, sep * fill]) + if len(line) < width: + line += sep * (width - len(line)) + stream.write("\n" + line + "\n") + def dump(): if log.log_dir is None: return @@ -27,5 +41,5 @@ def dump(): pass else: path = os.path.relpath(path, log.log_dir) - pytest_timeout.write_title(path) + write_title(path) print(s, file=sys.stderr) diff --git a/tests/pytest_fixtures.py b/tests/pytest_fixtures.py index bbba2c2e7..ba3059c2a 100644 --- a/tests/pytest_fixtures.py +++ b/tests/pytest_fixtures.py @@ -99,10 +99,11 @@ def write_log(filename, data): finally: if not failed and not request.config.option.debugpy_log_passed: - try: - py.path.local(log.log_dir).remove() - except Exception: - pass + # try: + # py.path.local(log.log_dir).remove() + # except Exception: + # pass + pass log.log_dir = original_log_dir diff --git a/tests/pytest_hooks.py b/tests/pytest_hooks.py index f37eecb84..7ef3851f1 100644 --- a/tests/pytest_hooks.py +++ b/tests/pytest_hooks.py @@ -7,7 +7,7 @@ import pytest_timeout import sys -from debugpy.common import log +from debugpy.common import log # pyright: ignore[reportAttributeAccessIssue] import tests from tests import logs @@ -56,9 +56,8 @@ def pytest_runtest_makereport(item, call): def pytest_make_parametrize_id(config, val): return getattr(val, "pytest_id", None) - # If a test times out and pytest tries to print the stacks of where it was hanging, # we want to print the pydevd log as well. This is not a normal pytest hook - we # just detour pytest_timeout.dump_stacks directly. _dump_stacks = pytest_timeout.dump_stacks -pytest_timeout.dump_stacks = lambda: (_dump_stacks(), logs.dump()) +pytest_timeout.dump_stacks = lambda terminal: (_dump_stacks(terminal), logs.dump()) diff --git a/tests/requirements.txt b/tests/requirements.txt index fa0a4ea53..7d48234e2 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -10,6 +10,7 @@ pytest-retry importlib_metadata psutil +untangle ## Used in Python code that is run/debugged by the tests: @@ -18,3 +19,4 @@ flask gevent numpy requests +typing_extensions \ No newline at end of file